PackageEditor.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. var fs = require('fs-extra');
  2. var host = require("./Host");
  3. var config = require("./BuildConfig");
  4. namespace('package', function() {
  5. task('windows_editor', {
  6. async: true
  7. }, function() {
  8. var srcDir = config.artifactsRoot + "AtomicEditor/";
  9. var dstDir = config.artifactsRoot + "Dist/";
  10. host.cleanCreateDir(dstDir);
  11. var installerName = "AtomicEditor_Windows64_Setup_" + config.buildSHA + ".exe";
  12. var installerPath = config.artifactsRoot + "Dist/" + installerName;
  13. var nsisDefines = "/DATOMIC_ROOT=" + config.atomicRoot;
  14. nsisDefines += " /DEDITOR_VERSION=1";
  15. nsisDefines += " /DINSTALLER_NAME=" + installerName;
  16. var makeNSISCmd = config.atomicRoot + "\\Build\\Scripts\\Windows\\CreateInstaller.bat";
  17. makeNSISCmd += " " + nsisDefines + " " + config.atomicRoot + "/Build/Scripts/Windows/Installer/AtomicEditor.nsi";
  18. var editorExe = dstDir + "/AtomicEditor.exe";
  19. var pfxFile = process.env.ATOMIC_PFX_FILE;
  20. var pfxPW = process.env.ATOMIC_PFX_PW;
  21. var signBaseCmd = "signtool.exe sign /f " + pfxFile;
  22. signBaseCmd += " /p " + pfxPW;
  23. signBaseCmd += " /t http://timestamp.verisign.com/scripts/timestamp.dll";
  24. signBaseCmd += " /v ";
  25. var signEditorCmd = signBaseCmd + config.artifactsRoot + "AtomicEditor/AtomicEditor.exe";
  26. var signInstallerCmd = signBaseCmd + installerPath;
  27. var cmds = [];
  28. if (pfxFile && pfxPW) {
  29. cmds.push(signEditorCmd);
  30. }
  31. cmds.push(makeNSISCmd);
  32. if (pfxFile && pfxPW) {
  33. cmds.push(signInstallerCmd);
  34. }
  35. jake.exec(cmds, function() {
  36. complete();
  37. }, {
  38. printStdout: true
  39. });
  40. });
  41. task('mac_editor', {
  42. async: true
  43. }, function() {
  44. var editorAppFolder = config.editorAppFolder;
  45. var srcDir = config.artifactsRoot + "AtomicEditor/";
  46. var dstDir = config.artifactsRoot + "Dist/";
  47. var editorZip = dstDir + "AtomicEditor_MacOSX_" + config.buildSHA + ".zip";
  48. var devIDApp = config.devIDApp;
  49. host.cleanCreateDir(dstDir);
  50. cmds = [];
  51. if (config.jenkins) {
  52. cmds.push("security unlock-keychain -p \"jenkins\" /Users/jenkins/Library/Keychains/login.keychain ");
  53. }
  54. if (devIDApp) {
  55. cmds.push("codesign --deep --force --verify --verbose --sign \"Developer ID Application: " + devIDApp + "\" " + editorAppFolder);
  56. }
  57. cmds.push("cd " + srcDir + " && zip -r -X " + editorZip +" ./AtomicEditor.app");
  58. jake.exec(cmds, function() {
  59. console.log("Packaged Mac Editor to ", editorZip);
  60. if (!devIDApp) {
  61. console.log("\nDeveloper ID Application not specified, code is not be signed!\n\n");
  62. }
  63. complete();
  64. }, {
  65. printStdout: true,
  66. printStderr: true
  67. });
  68. });
  69. task('linux_editor', {
  70. async: true
  71. }, function() {
  72. var editorAppFolder = config.editorAppFolder;
  73. var srcDir = config.artifactsRoot + "AtomicEditor/";
  74. var dstDir = config.artifactsRoot + "Dist/";
  75. var dstDeb = config.artifactsRoot + "AtomicEditor_LINUX_" + config.buildSHA + ".deb";
  76. host.cleanCreateDir(dstDir); // create new staging directory
  77. fs.removeSync(dstDeb); // remove old one, if there
  78. // copy in the two magic dirs
  79. fs.copySync(config.atomicRoot + "Build/Linux/DEBIAN", dstDir + "DEBIAN");
  80. fs.copySync(config.atomicRoot + "Build/Linux/usr", dstDir + "usr" );
  81. // copy in the atomic dir
  82. fs.copySync(editorAppFolder, dstDir + "usr/share/atomicgameengine" );
  83. //copy in menu pixmap
  84. fs.copySync(config.atomicRoot + "Build/Linux/atomic_menu.xpm", dstDir + "usr/share/atomicgameengine/atomic_menu.xpm" );
  85. //copy in copyright
  86. fs.copySync(config.atomicRoot + "LICENSE.md", dstDir + "usr/share/doc/atomicgameengine/copyright" );
  87. cmds = [];
  88. // go to staging root directory
  89. cmds.push("cd " + config.artifactsRoot + " ;" );
  90. // get rid of some lintian errors
  91. cmds.push("find " + dstDir + "usr/share/atomicgameengine/ -name .gitignore -type f -delete ;");
  92. cmds.push("find " + dstDir + "usr/share/atomicgameengine/ -maxdepth 9 -type f -print0 | xargs -0 chmod oug-x ;");
  93. cmds.push("/bin/chmod oug+x " + dstDir + "usr/share/atomicgameengine/AtomicEditor ;");
  94. cmds.push("/bin/chmod oug+x " + dstDir + "usr/share/atomicgameengine/Resources/ToolData/Deployment/Linux/AtomicPlayer ;" );
  95. cmds.push("/usr/bin/strip --strip-unneeded " + dstDir + "usr/share/atomicgameengine/AtomicEditor ;" );
  96. cmds.push("/usr/bin/strip --strip-unneeded " + dstDir + "usr/share/atomicgameengine/Resources/ToolData/Deployment/Linux/AtomicPlayer ;" );
  97. // create the package
  98. // needs fakeroot for package file ownership issues
  99. cmds.push("/usr/bin/fakeroot /usr/bin/dpkg-deb --build " + dstDir + ";");
  100. // change the deb name, following Atomic standards
  101. cmds.push("/bin/mv " + config.artifactsRoot + "Dist.deb " + dstDeb + " ;");
  102. // clean up the staging area
  103. cmds.push("/bin/rm -rf "+ dstDir + " ;");
  104. jake.exec(cmds, function() {
  105. console.log("Packaged Linux Editor to " + dstDeb );
  106. complete();
  107. }, {
  108. printStdout: true,
  109. printStderr: true
  110. });
  111. });
  112. });