atomic-cli.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #!/usr/bin/env node
  2. "use strict";
  3. // https://github.com/yeoman/update-notifier
  4. // https://github.com/tj/commander.js
  5. var path = require("path");
  6. var fs = require("fs");
  7. var program = require('commander');
  8. var cli = require("atomic-cli")
  9. var open = require("open");
  10. var prompt = require('prompt');
  11. prompt.message = "";
  12. prompt.delimiter = "";
  13. var saveAtomicConfig = function(activated) {
  14. var directory = process.env["HOME"] + "/.atomicgameengine";
  15. if (!fs.existsSync(directory)) {
  16. fs.mkdir(directory);
  17. }
  18. var config = {
  19. "nodePath" : process.execPath,
  20. "cliScript" : __filename,
  21. "activated" : activated
  22. }
  23. fs.writeFile(directory + "/config.json", JSON.stringify(config, null, 4), function(err) {
  24. if(err) {
  25. console.log(err);
  26. } else {
  27. //console.log("config saved to " + directory + "/config.json");
  28. }
  29. });
  30. }
  31. program
  32. .version('0.0.1')
  33. // activation command
  34. program
  35. .command('activate')
  36. .description('activate')
  37. .action(function(folder){
  38. prompt.start();
  39. prompt.get([ { description: 'Please confirm EULA agreement (Y)es, (N)o, or (V)iew', default: "Y", name: "eulaconfirm" }], function (err, result) {
  40. var eulaconfirm = result.eulaconfirm.toLowerCase();
  41. if (eulaconfirm == 'y') {
  42. prompt.get([ { description: 'Please enter Product Key or (G)et free key: ', name: "productkey" }], function (err, result) {
  43. var productkey = result.productkey.toLowerCase();
  44. if (productkey == 'g') {
  45. console.log ("Opening Atomic Store in default browser window");
  46. open("https://store.atomicgameengine.com/site");
  47. } else {
  48. cli.activate(productkey)
  49. .then(function () {
  50. saveAtomicConfig(true);
  51. })
  52. }
  53. });
  54. } else if (eulaconfirm == 'v') {
  55. console.log ("Opening EULA in default browser window");
  56. open("https://github.com/AtomicGameEngine/AtomicGameEngine/blob/master/LICENSE.md");
  57. }
  58. });
  59. });
  60. // deactivation
  61. program
  62. .command('deactivate')
  63. .description('deactivates and returns a product activation to the server')
  64. .action(function(){
  65. cli.deactivate().
  66. then(function() {
  67. saveAtomicConfig(false);
  68. })
  69. });
  70. // new project command
  71. program
  72. .command('new <folder>')
  73. .description('creates a new project in the specified folder')
  74. .action(function(folder){
  75. cli.newProject(folder)
  76. .then(function () {
  77. console.log("New Atomic project created in " + path.resolve(folder));
  78. })
  79. .catch(function (error) {
  80. console.error("Error: Could not create " + path.resolve(folder));
  81. process.exit(1);
  82. });
  83. });
  84. program
  85. .command('add <platform>')
  86. .description('adds a platform to the project')
  87. .action(function(platform){
  88. cli.addPlatform(platform)
  89. .then(function () {
  90. })
  91. .catch(function (error) {
  92. process.exit(1);
  93. });
  94. });
  95. program
  96. .command('run <platform>')
  97. .option('--project <path>')
  98. .description('runs the project on a specified platform')
  99. .action(function(platform, options) {
  100. if(options.project) {
  101. process.chdir(options.project)
  102. }
  103. cli.run(platform)
  104. .then(function () {
  105. })
  106. .catch(function (error) {
  107. process.exit(1);
  108. });
  109. });
  110. program
  111. .command('edit [path_to_project]')
  112. .description('edits the project in the cwd or on at a specified path')
  113. .action(function(path_to_project, options){
  114. var path = path_to_project || process.cwd();
  115. cli.atomiceditor(["-project", path], {output:true});
  116. });
  117. program.parse(process.argv);
  118. if (!program.args.length) program.help();