From bc94dc63e6dcbf5345eb90f713fdfd910557a688 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 09:59:46 -0800 Subject: [PATCH 01/17] Ignore atom.xcodeproj --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ffb3d24ad..cc34b06da 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ debug.log docs/output spec/fixtures/evil-files/ /apm +atom.xcodeproj From 332b918c01a0cef383067d14c366ff9049654c76 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 10:00:19 -0800 Subject: [PATCH 02/17] Ignore build/atom.build --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index cc34b06da..e56d8bba3 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ docs/output spec/fixtures/evil-files/ /apm atom.xcodeproj +/build/atom.build From b72028c68dadda598cbca29c48770cdf9b73f24a Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 10:01:30 -0800 Subject: [PATCH 03/17] Invoke deploy task using script/grunt --- script/constructicon/build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/constructicon/build b/script/constructicon/build index 5b0bd2b98..d7d0df956 100755 --- a/script/constructicon/build +++ b/script/constructicon/build @@ -10,7 +10,7 @@ rm -fr node_modules rm -fr vendor/apm/node_modules rm -fr build/node_modules ./script/bootstrap --no-color -./build/node_modules/.bin/grunt --no-color --build-dir="$BUILT_PRODUCTS_DIR" deploy +./script/grunt --no-color --build-dir="$BUILT_PRODUCTS_DIR" deploy echo "TARGET_BUILD_DIR=$BUILT_PRODUCTS_DIR" echo "FULL_PRODUCT_NAME=Atom.app" From b08978a431dd9a230fef18e8b3c662557d8c739e Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 13:28:30 -0800 Subject: [PATCH 04/17] Add back linting of build files --- build/Gruntfile.coffee | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/build/Gruntfile.coffee b/build/Gruntfile.coffee index 85edc9c49..12722996e 100644 --- a/build/Gruntfile.coffee +++ b/build/Gruntfile.coffee @@ -147,8 +147,10 @@ module.exports = (grunt) -> 'dot-atom/**/*.coffee' 'exports/**/*.coffee' 'src/**/*.coffee' - 'tasks/**/*.coffee' - 'Gruntfile.coffee' + ] + build: [ + 'build/tasks/**/*.coffee' + 'build/Gruntfile.coffee' ] test: [ 'spec/*.coffee' From 01e0970406808076a8bc101789af6f150cddb2ef Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 10:17:21 -0800 Subject: [PATCH 05/17] Sign CI builds --- build/Gruntfile.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/Gruntfile.coffee b/build/Gruntfile.coffee index 12722996e..b00957cab 100644 --- a/build/Gruntfile.coffee +++ b/build/Gruntfile.coffee @@ -223,7 +223,7 @@ module.exports = (grunt) -> grunt.registerTask('compile', ['coffee', 'prebuild-less', 'cson', 'peg']) grunt.registerTask('lint', ['coffeelint', 'csslint', 'lesslint']) grunt.registerTask('test', ['shell:kill-atom', 'run-specs']) - grunt.registerTask('ci', ['output-disk-space', 'download-atom-shell', 'build', 'set-development-version', 'lint', 'test', 'publish-build']) + grunt.registerTask('ci', ['output-disk-space', 'download-atom-shell', 'codesign', 'build', 'set-development-version', 'lint', 'test', 'publish-build']) grunt.registerTask('deploy', ['partial-clean', 'download-atom-shell', 'build', 'codesign']) grunt.registerTask('docs', ['markdown:guides', 'build-docs']) grunt.registerTask('default', ['download-atom-shell', 'build', 'set-development-version', 'install']) From aec32b65a025d8326a672c11156f01bd2d44911c Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 10:18:50 -0800 Subject: [PATCH 06/17] Remove constructicon files --- .gitignore | 2 -- atom.gyp | 14 -------------- script/constructicon/build | 17 ----------------- script/constructicon/prebuild | 8 -------- 4 files changed, 41 deletions(-) delete mode 100644 atom.gyp delete mode 100755 script/constructicon/build delete mode 100755 script/constructicon/prebuild diff --git a/.gitignore b/.gitignore index e56d8bba3..ffb3d24ad 100644 --- a/.gitignore +++ b/.gitignore @@ -11,5 +11,3 @@ debug.log docs/output spec/fixtures/evil-files/ /apm -atom.xcodeproj -/build/atom.build diff --git a/atom.gyp b/atom.gyp deleted file mode 100644 index 46eff41c9..000000000 --- a/atom.gyp +++ /dev/null @@ -1,14 +0,0 @@ -{ - 'targets': [ - { - 'target_name': 'Atom', - 'type': 'none', - 'postbuilds': [ - { - 'postbuild_name': 'Create Atom, basically do everything', - 'action': ['script/constructicon/build'], - }, - ], - }, - ], -} diff --git a/script/constructicon/build b/script/constructicon/build deleted file mode 100755 index d7d0df956..000000000 --- a/script/constructicon/build +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -set -ex - -# This entire file is a hack so that constructicon can build Atom via -# xcode - -cd "$(dirname "$0")/../.." -rm -fr node_modules -rm -fr vendor/apm/node_modules -rm -fr build/node_modules -./script/bootstrap --no-color -./script/grunt --no-color --build-dir="$BUILT_PRODUCTS_DIR" deploy - -echo "TARGET_BUILD_DIR=$BUILT_PRODUCTS_DIR" -echo "FULL_PRODUCT_NAME=Atom.app" -echo "PRODUCT_NAME=Atom" diff --git a/script/constructicon/prebuild b/script/constructicon/prebuild deleted file mode 100755 index 600a56afa..000000000 --- a/script/constructicon/prebuild +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -set -ex -cd "$(dirname "$0")/../.." -export PATH="atom-shell/Atom.app/Contents/Resources/:${PATH}" - -rm -rf atom.xcodeproj -gyp --depth=. atom.gyp From f4b82fe3a44e60fdfd62ea6bf7ded4b464d66404 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 10:36:21 -0800 Subject: [PATCH 07/17] Load env vars from /var/lib/jenkins/config/xcodekeychain --- script/cibuild | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/script/cibuild b/script/cibuild index c5b1a0423..6c7cb8ef5 100755 --- a/script/cibuild +++ b/script/cibuild @@ -10,11 +10,9 @@ if (process.platform == 'linux') var homeDir = process.platform == 'win32' ? process.env.USERPROFILE : process.env.HOME; -function readEnvironmentVariables() { - var credentialsPath = '/var/lib/jenkins/config/atomcredentials'; +function loadEnvironmentVariables(filePath) { try { - var credentials = fs.readFileSync(credentialsPath, 'utf8'); - var lines = credentials.trim().split('\n'); + var lines = fs.readFileSync(filePath, 'utf8').trim().split('\n'); for (i in lines) { var parts = lines[i].split('='); var key = parts[0].trim(); @@ -24,6 +22,11 @@ function readEnvironmentVariables() { } catch(error) { } } +function readEnvironmentVariables() { + loadEnvironmentVariables('/var/lib/jenkins/config/atomcredentials') + loadEnvironmentVariables('/var/lib/jenkins/config/xcodekeychain') +} + readEnvironmentVariables(); cp.safeExec.bind(global, 'node script/bootstrap', function(error) { if (error) From 7a41fabf60ff1802e9888dd0f2d25ddfa6341c57 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 10:41:49 -0800 Subject: [PATCH 08/17] Unlock keychain before signing --- build/tasks/codesign-task.coffee | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/build/tasks/codesign-task.coffee b/build/tasks/codesign-task.coffee index fd4592eba..544d331bd 100644 --- a/build/tasks/codesign-task.coffee +++ b/build/tasks/codesign-task.coffee @@ -3,6 +3,22 @@ module.exports = (grunt) -> grunt.registerTask 'codesign', 'Codesign the app', -> done = @async() + + if process.env.XCODE_KEYCHAIN + unlockKeychain (error) -> + if error? + done(error) + else + signApp(done) + else + signApp(done) + + unlockKeychain = (callback) -> + cmd = 'security' + args = ['-p', process.env.XCODE_KEYCHAIN_PASSWORD, process.env.XCODE_KEYCHAIN] + spawn {cmd, args}, (error) -> callback(error) + + signApp = (callback) -> cmd = 'codesign' args = ['-f', '-v', '-s', 'Developer ID Application: GitHub', grunt.config.get('atom.shellAppDir')] spawn {cmd, args}, (error) -> done(error) From 848dc12f283eb88026e64ba73d70634998a27176 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 10:44:16 -0800 Subject: [PATCH 09/17] Add unlock-keychain arg --- build/tasks/codesign-task.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/tasks/codesign-task.coffee b/build/tasks/codesign-task.coffee index 544d331bd..7ee833605 100644 --- a/build/tasks/codesign-task.coffee +++ b/build/tasks/codesign-task.coffee @@ -15,7 +15,8 @@ module.exports = (grunt) -> unlockKeychain = (callback) -> cmd = 'security' - args = ['-p', process.env.XCODE_KEYCHAIN_PASSWORD, process.env.XCODE_KEYCHAIN] + {XCODE_KEYCHAIN_PASSWORD, XCODE_KEYCHAIN} = process.env + args = ['unlock-keychain', '-p', XCODE_KEYCHAIN_PASSWORD, XCODE_KEYCHAIN] spawn {cmd, args}, (error) -> callback(error) signApp = (callback) -> From 76a5912126d613b1a7e4c099cfd691a1fd6d4631 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 10:45:51 -0800 Subject: [PATCH 10/17] Update expected callback name --- build/tasks/codesign-task.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/tasks/codesign-task.coffee b/build/tasks/codesign-task.coffee index 7ee833605..93920d7a7 100644 --- a/build/tasks/codesign-task.coffee +++ b/build/tasks/codesign-task.coffee @@ -22,4 +22,4 @@ module.exports = (grunt) -> signApp = (callback) -> cmd = 'codesign' args = ['-f', '-v', '-s', 'Developer ID Application: GitHub', grunt.config.get('atom.shellAppDir')] - spawn {cmd, args}, (error) -> done(error) + spawn {cmd, args}, (error) -> callback(error) From 0255f1e2235d5378c90e5fbcc8c121e4e07d7697 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 11:58:31 -0800 Subject: [PATCH 11/17] Remove unused require --- build/tasks/publish-build-task.coffee | 1 - 1 file changed, 1 deletion(-) diff --git a/build/tasks/publish-build-task.coffee b/build/tasks/publish-build-task.coffee index 3f8dc909a..cd1279d67 100644 --- a/build/tasks/publish-build-task.coffee +++ b/build/tasks/publish-build-task.coffee @@ -3,7 +3,6 @@ path = require 'path' _ = require 'underscore-plus' fs = require 'fs-plus' -GitHub = require 'github-releases' request = require 'request' grunt = null From 14c3feee1778901f0145b95df837a56b14d3df63 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 12:07:23 -0800 Subject: [PATCH 12/17] Publish master builds to the draft release --- build/tasks/publish-build-task.coffee | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/build/tasks/publish-build-task.coffee b/build/tasks/publish-build-task.coffee index cd1279d67..b6c06dfa3 100644 --- a/build/tasks/publish-build-task.coffee +++ b/build/tasks/publish-build-task.coffee @@ -3,6 +3,7 @@ path = require 'path' _ = require 'underscore-plus' fs = require 'fs-plus' +GitHub = require 'github-releases' request = require 'request' grunt = null @@ -29,7 +30,11 @@ module.exports = (gruntObject) -> return done(error) if error? uploadAsset release, (error) -> return done(error) if error? - publishRelease(release, done) + publishRelease release, (error) -> + return done(error) if error? + getAtomDraftRelease (error, release) -> + return done(error) if error? + uploadAsset(release, done) logError = (message, error, details) -> grunt.log.error(message) @@ -64,6 +69,18 @@ getRelease = (callback) -> return callback() +getAtomDraftRelease = (callback) -> + atomRepo = new GitHub({repo: 'atom/atom', token}) + atomRepo.getReleases (error, releases=[]) -> + if error? + logError('Fetching atom/atom releases failed', error, releases) + callback(error) + else + for release in releases when release.draft + callback(null, release) + return + callback(new Error('No draft release in atom/atom repo')) + deleteRelease = (release) -> options = uri: release.url @@ -122,7 +139,7 @@ createRelease = (callback) -> uploadAsset = (release, callback) -> options = - uri: "https://uploads.github.com/repos/atom/atom-master-builds/releases/#{release.id}/assets?name=#{assetName}" + uri: "#{release.assetsUrl}?assets?name=#{assetName}" method: 'POST' headers: _.extend({ 'Content-Type': 'application/zip' From 21723b155e722dafc5593e397810c23b07268223 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 12:09:07 -0800 Subject: [PATCH 13/17] Remove unneeded assets prefix --- build/tasks/publish-build-task.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/tasks/publish-build-task.coffee b/build/tasks/publish-build-task.coffee index b6c06dfa3..ba1e6a6f7 100644 --- a/build/tasks/publish-build-task.coffee +++ b/build/tasks/publish-build-task.coffee @@ -139,7 +139,7 @@ createRelease = (callback) -> uploadAsset = (release, callback) -> options = - uri: "#{release.assetsUrl}?assets?name=#{assetName}" + uri: "#{release.assetsUrl}?name=#{assetName}" method: 'POST' headers: _.extend({ 'Content-Type': 'application/zip' From 96cb266c2743664e4f97f01a3d60184289a77980 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 12:21:14 -0800 Subject: [PATCH 14/17] Release properties are _ separated --- build/tasks/publish-build-task.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/tasks/publish-build-task.coffee b/build/tasks/publish-build-task.coffee index ba1e6a6f7..f531d8ac4 100644 --- a/build/tasks/publish-build-task.coffee +++ b/build/tasks/publish-build-task.coffee @@ -139,7 +139,7 @@ createRelease = (callback) -> uploadAsset = (release, callback) -> options = - uri: "#{release.assetsUrl}?name=#{assetName}" + uri: "#{release.assets_url}?name=#{assetName}" method: 'POST' headers: _.extend({ 'Content-Type': 'application/zip' From 6ca3c90abe96f2ed2139d8ab46a5731922891be5 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 12:54:30 -0800 Subject: [PATCH 15/17] Use upload urls instead of assets url --- build/tasks/publish-build-task.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/tasks/publish-build-task.coffee b/build/tasks/publish-build-task.coffee index f531d8ac4..28e076264 100644 --- a/build/tasks/publish-build-task.coffee +++ b/build/tasks/publish-build-task.coffee @@ -139,7 +139,7 @@ createRelease = (callback) -> uploadAsset = (release, callback) -> options = - uri: "#{release.assets_url}?name=#{assetName}" + uri: release.upload_url.replace(/\{.*$/, "?name=#{assetName}") method: 'POST' headers: _.extend({ 'Content-Type': 'application/zip' From 8374911dabf9764b30a9fb8a9c9a33b3dad9c417 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 12:54:42 -0800 Subject: [PATCH 16/17] Delete existing asset before uploading new one --- build/tasks/publish-build-task.coffee | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build/tasks/publish-build-task.coffee b/build/tasks/publish-build-task.coffee index 28e076264..57803320a 100644 --- a/build/tasks/publish-build-task.coffee +++ b/build/tasks/publish-build-task.coffee @@ -34,7 +34,9 @@ module.exports = (gruntObject) -> return done(error) if error? getAtomDraftRelease (error, release) -> return done(error) if error? - uploadAsset(release, done) + deleteExistingAsset release, (error) -> + return done(error) if error? + uploadAsset(release, done) logError = (message, error, details) -> grunt.log.error(message) From 047425c56493526626ef306840314851fa14e5c0 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 14 Jan 2014 12:55:35 -0800 Subject: [PATCH 17/17] Rename createRelease to createBuildRelease --- build/tasks/publish-build-task.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/tasks/publish-build-task.coffee b/build/tasks/publish-build-task.coffee index 57803320a..19f0aff90 100644 --- a/build/tasks/publish-build-task.coffee +++ b/build/tasks/publish-build-task.coffee @@ -24,7 +24,7 @@ module.exports = (gruntObject) -> done = @async() - createRelease (error, release) -> + createBuildRelease (error, release) -> return done(error) if error? zipApp (error) -> return done(error) if error? @@ -110,7 +110,7 @@ deleteExistingAsset = (release, callback) -> callback() -createRelease = (callback) -> +createBuildRelease = (callback) -> getRelease (error, release) -> if error? callback(error)