2013-12-10 20:22:06 +04:00
|
|
|
#!/usr/bin/env coffee
|
|
|
|
|
2013-12-11 05:19:44 +04:00
|
|
|
return if process.env.JANKY_SHA1 and process.env.JANKY_BRANCH isnt 'master'
|
2013-12-11 01:24:02 +04:00
|
|
|
|
2013-12-10 20:22:06 +04:00
|
|
|
child_process = require 'child_process'
|
|
|
|
path = require 'path'
|
|
|
|
|
2013-12-11 04:34:26 +04:00
|
|
|
_ = require 'underscore-plus'
|
2013-12-10 20:51:30 +04:00
|
|
|
fs = require 'fs-plus'
|
2013-12-10 20:22:06 +04:00
|
|
|
GitHub = require 'github-releases'
|
|
|
|
request = require 'request'
|
|
|
|
|
2013-12-11 06:03:18 +04:00
|
|
|
assetName = 'atom-mac.zip'
|
2013-12-11 05:49:53 +04:00
|
|
|
assetPath = "/tmp/atom-build/#{assetName}"
|
2013-12-11 04:34:26 +04:00
|
|
|
commitSha = process.env.JANKY_SHA1
|
2013-12-10 20:22:06 +04:00
|
|
|
token = process.env.ATOM_ACCESS_TOKEN
|
2013-12-11 04:34:26 +04:00
|
|
|
defaultHeaders =
|
|
|
|
Authorization: "token #{token}"
|
|
|
|
'User-Agent': 'Atom'
|
2013-12-10 20:22:06 +04:00
|
|
|
|
|
|
|
zipApp = (callback) ->
|
2013-12-10 20:51:30 +04:00
|
|
|
fs.removeSync(assetPath)
|
2013-12-10 20:22:06 +04:00
|
|
|
|
|
|
|
options = {cwd: path.dirname(assetPath), maxBuffer: Infinity}
|
2013-12-11 05:49:53 +04:00
|
|
|
child_process.exec "zip -r --symlinks #{assetName} Atom.app", options, (error, stdout, stderr) ->
|
2013-12-10 20:22:06 +04:00
|
|
|
if error?
|
|
|
|
console.error('Zipping Atom.app failed', error, stderr)
|
|
|
|
process.exit(1)
|
|
|
|
else
|
|
|
|
callback()
|
|
|
|
|
2013-12-11 04:34:26 +04:00
|
|
|
getRelease = (callback) ->
|
|
|
|
options =
|
|
|
|
uri: 'https://api.github.com/repos/atom/atom-master-builds/releases'
|
|
|
|
method: 'GET'
|
|
|
|
headers: defaultHeaders
|
|
|
|
json: true
|
|
|
|
request options, (error, response, releases=[]) ->
|
|
|
|
if error? or response.statusCode isnt 200
|
|
|
|
console.error('Fetching releases failed', error, releases)
|
2013-12-10 20:22:06 +04:00
|
|
|
process.exit(1)
|
2013-12-11 04:34:26 +04:00
|
|
|
else
|
|
|
|
for release in releases when release.name is commitSha
|
|
|
|
callback(release)
|
|
|
|
return
|
|
|
|
callback()
|
2013-12-10 20:22:06 +04:00
|
|
|
|
2013-12-10 20:51:30 +04:00
|
|
|
deleteExistingAsset = (release, callback) ->
|
2013-12-11 05:49:53 +04:00
|
|
|
for asset in release.assets when asset.name is assetName
|
2013-12-10 20:22:06 +04:00
|
|
|
options =
|
2013-12-10 20:51:30 +04:00
|
|
|
uri: asset.url
|
|
|
|
method: 'DELETE'
|
2013-12-11 04:34:26 +04:00
|
|
|
headers: defaultHeaders
|
2013-12-10 20:51:30 +04:00
|
|
|
request options, (error, response, body='') ->
|
2013-12-11 05:47:43 +04:00
|
|
|
if error? or response.statusCode isnt 204
|
2013-12-10 20:51:30 +04:00
|
|
|
console.error('Deleting existing release asset failed', error, body)
|
2013-12-10 20:38:44 +04:00
|
|
|
process.exit(1)
|
2013-12-10 20:51:30 +04:00
|
|
|
else
|
|
|
|
callback()
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
callback()
|
|
|
|
|
2013-12-11 04:34:26 +04:00
|
|
|
createRelease = (callback) ->
|
|
|
|
getRelease (release) ->
|
|
|
|
if release?
|
|
|
|
deleteExistingAsset release, ->
|
|
|
|
callback(release)
|
|
|
|
return
|
|
|
|
|
|
|
|
options =
|
|
|
|
uri: 'https://api.github.com/repos/atom/atom-master-builds/releases'
|
|
|
|
method: 'POST'
|
|
|
|
headers: defaultHeaders
|
|
|
|
json:
|
|
|
|
tag_name: "v#{commitSha}"
|
|
|
|
target_commitish: 'master'
|
|
|
|
name: commitSha
|
2013-12-11 04:49:18 +04:00
|
|
|
body: "Build of [atom@#{commitSha.substring(0, 7)}](https://github.com/atom/atom/commit/#{commitSha})"
|
2013-12-11 04:34:26 +04:00
|
|
|
draft: true
|
2013-12-11 21:06:59 +04:00
|
|
|
prerelease: true
|
2013-12-11 04:34:26 +04:00
|
|
|
request options, (error, response, release={}) ->
|
|
|
|
if error? or response.statusCode isnt 201
|
|
|
|
console.error('Creating release failed', error, release)
|
|
|
|
process.exit(1)
|
|
|
|
else
|
|
|
|
callback(release)
|
|
|
|
|
|
|
|
uploadAsset = (release, callback) ->
|
2013-12-10 20:51:30 +04:00
|
|
|
options =
|
2013-12-11 05:49:53 +04:00
|
|
|
uri: "https://uploads.github.com/repos/atom/atom-master-builds/releases/#{release.id}/assets?name=#{assetName}"
|
2013-12-10 20:51:30 +04:00
|
|
|
method: 'POST'
|
2013-12-11 04:34:26 +04:00
|
|
|
headers: _.extend({
|
2013-12-10 20:51:30 +04:00
|
|
|
'Content-Type': 'application/zip'
|
|
|
|
'Content-Length': fs.getSizeSync(assetPath)
|
2013-12-11 04:34:26 +04:00
|
|
|
}, defaultHeaders)
|
2013-12-10 20:51:30 +04:00
|
|
|
|
|
|
|
assetRequest = request options, (error, response, body='') ->
|
|
|
|
if error? or response.statusCode >= 400
|
|
|
|
console.error('Upload release asset failed', error, body)
|
|
|
|
process.exit(1)
|
2013-12-11 04:34:26 +04:00
|
|
|
else
|
|
|
|
callback(release)
|
|
|
|
|
2013-12-10 20:51:30 +04:00
|
|
|
fs.createReadStream(assetPath).pipe(assetRequest)
|
2013-12-10 20:22:06 +04:00
|
|
|
|
2013-12-11 04:34:26 +04:00
|
|
|
publishRelease = (release) ->
|
|
|
|
options =
|
|
|
|
uri: release.url
|
|
|
|
method: 'POST'
|
2013-12-11 05:46:34 +04:00
|
|
|
headers: defaultHeaders
|
2013-12-11 04:34:26 +04:00
|
|
|
json:
|
|
|
|
draft: false
|
|
|
|
request options, (error, response, body={}) ->
|
|
|
|
if error? or response.statusCode isnt 200
|
|
|
|
console.error('Creating release failed', error, body)
|
|
|
|
process.exit(1)
|
|
|
|
|
|
|
|
createRelease (release) ->
|
2013-12-10 20:51:30 +04:00
|
|
|
zipApp ->
|
2013-12-11 04:34:26 +04:00
|
|
|
uploadAsset release, ->
|
|
|
|
publishRelease release
|