PackageEditor.js 6.2 KB

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