Merge pull request #17862 from atom/dw-draft-releases

Enable stable and beta draft release creation on VSTS
This commit is contained in:
David Wilson 2019-02-08 15:24:06 -08:00 committed by GitHub
commit af921567c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 1635 additions and 422 deletions

345
script/package-lock.json generated
View File

@ -376,22 +376,6 @@
"postcss-value-parser": "^3.2.3"
}
},
"aws-sdk": {
"version": "2.275.1",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.275.1.tgz",
"integrity": "sha512-lcpgoiHLhdcolUT7aJdg/CmlYO5ecf+3A+4dIceO72mFovCWZde1Rvr07QNbQ8gT0paqr5j2rs2b6c23Y/K0RQ==",
"requires": {
"buffer": "4.9.1",
"events": "1.1.1",
"ieee754": "1.1.8",
"jmespath": "0.15.0",
"querystring": "0.2.0",
"sax": "1.2.1",
"url": "0.10.3",
"uuid": "3.1.0",
"xml2js": "0.4.19"
}
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@ -625,11 +609,6 @@
}
}
},
"base64-js": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
"integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@ -737,16 +716,6 @@
"electron-to-chromium": "^1.3.47"
}
},
"buffer": {
"version": "4.9.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4",
"isarray": "^1.0.0"
}
},
"buffer-alloc": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
@ -969,11 +938,6 @@
"restore-cursor": "^1.0.1"
}
},
"cli-width": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz",
"integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0="
},
"cliui": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
@ -1668,14 +1632,6 @@
"is-obj": "^1.0.0"
}
},
"duplexer2": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
"integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
"requires": {
"readable-stream": "~1.1.9"
}
},
"ecc-jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
@ -1685,11 +1641,6 @@
"jsbn": "~0.1.0"
}
},
"editor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz",
"integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I="
},
"electron-chromedriver": {
"version": "3.0.0-beta.1",
"resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-3.0.0-beta.1.tgz",
@ -2236,11 +2187,6 @@
"es5-ext": "~0.10.14"
}
},
"events": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
},
"execa": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz",
@ -2991,49 +2937,6 @@
"assert-plus": "^1.0.0"
}
},
"ghauth": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ghauth/-/ghauth-2.0.1.tgz",
"integrity": "sha1-ebfWiwvPjn0IUqI7FHU539MUrPY=",
"requires": {
"bl": "~0.9.4",
"hyperquest": "~1.2.0",
"mkdirp": "~0.5.0",
"read": "~1.0.5",
"xtend": "~4.0.0"
},
"dependencies": {
"bl": {
"version": "0.9.5",
"resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz",
"integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=",
"requires": {
"readable-stream": "~1.0.26"
}
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
}
}
},
"github-from-package": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
@ -3049,14 +2952,6 @@
"resolved": "https://registry.npmjs.org/github-url-from-username-repo/-/github-url-from-username-repo-1.0.2.tgz",
"integrity": "sha1-fdeTMNKr5pwQws73lxTJchV5Hfo="
},
"github-url-to-object": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-1.6.0.tgz",
"integrity": "sha1-iR73+7+rqP7XFRCs2xtOk0apcNw=",
"requires": {
"is-url": "^1.1.0"
}
},
"glob": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.0.3.tgz",
@ -3345,47 +3240,6 @@
"sshpk": "^1.7.0"
}
},
"hyperquest": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-1.2.0.tgz",
"integrity": "sha1-OeH+9miI3Hzg3sbA3YFPb8iUStU=",
"requires": {
"duplexer2": "~0.0.2",
"through2": "~0.6.3"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"through2": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"requires": {
"readable-stream": ">=1.0.33-1 <1.1.0-0",
"xtend": ">=4.0.0 <4.1.0-0"
}
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
}
}
},
"iconv-lite": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
@ -3394,11 +3248,6 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ieee754": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
"integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q="
},
"ignore": {
"version": "3.3.10",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
@ -3456,33 +3305,6 @@
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
},
"inquirer": {
"version": "0.8.5",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.8.5.tgz",
"integrity": "sha1-29dAz2yjtzEpamPOb22WGFHzNt8=",
"requires": {
"ansi-regex": "^1.1.1",
"chalk": "^1.0.0",
"cli-width": "^1.0.1",
"figures": "^1.3.5",
"lodash": "^3.3.1",
"readline2": "^0.1.1",
"rx": "^2.4.3",
"through": "^2.3.6"
},
"dependencies": {
"ansi-regex": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz",
"integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0="
},
"lodash": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
"integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
}
}
},
"invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
@ -3746,11 +3568,6 @@
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"is-url": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
"integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
},
"is-utf8": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
@ -3804,11 +3621,6 @@
"resolved": "https://registry.npmjs.org/jju/-/jju-1.3.0.tgz",
"integrity": "sha1-2t2e8BkkvHKLA/L3l5vb1i96Kqo="
},
"jmespath": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
"integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc="
},
"joanna": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/joanna/-/joanna-0.0.10.tgz",
@ -4463,11 +4275,6 @@
"regex-cache": "^0.4.2"
}
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
@ -4647,11 +4454,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"mute-stream": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
},
"mv": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
@ -7904,11 +7706,6 @@
}
}
},
"pkginfo": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
"integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE="
},
"plist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
@ -8279,43 +8076,6 @@
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
},
"publish-release": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/publish-release/-/publish-release-1.6.0.tgz",
"integrity": "sha512-t+NFXTQN/VDTg9yJ8Uv5ZWQ7Ud1T5W1tPW+bmuo4g6uYVQTVNiwwRF6Td3EtXFTOafpEXJQEZqGG7IvIJwLwIg==",
"requires": {
"async": "^0.9.0",
"ghauth": "^2.0.0",
"github-url-to-object": "^1.4.2",
"inquirer": "^0.8.2",
"lodash": "^3.6.0",
"mime": "^1.3.4",
"minimist": "^1.1.1",
"pkginfo": "^0.3.0",
"pretty-bytes": "^1.0.4",
"progress-stream": "^1.0.1",
"request": "^2.54.0",
"single-line-log": "^0.4.1",
"string-editor": "^0.1.0"
},
"dependencies": {
"async": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
"integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
},
"lodash": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
"integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
},
"single-line-log": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-0.4.1.tgz",
"integrity": "sha1-h6VWSfdJ14PsDc2AToFA2Yc8fO4="
}
}
},
"pump": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
@ -8408,14 +8168,6 @@
"resolved": "https://registry.npmjs.org/rcedit/-/rcedit-0.5.1.tgz",
"integrity": "sha1-0L3PXSgKnRwp2m8RjMzizhU87x0="
},
"read": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
"integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
"requires": {
"mute-stream": "~0.0.4"
}
},
"read-installed": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/read-installed/-/read-installed-3.1.3.tgz",
@ -8543,35 +8295,6 @@
"once": "^1.3.0"
}
},
"readline2": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/readline2/-/readline2-0.1.1.tgz",
"integrity": "sha1-mUQ7pug7gw7zBRv9fcJBqCco1Wg=",
"requires": {
"mute-stream": "0.0.4",
"strip-ansi": "^2.0.1"
},
"dependencies": {
"ansi-regex": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz",
"integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0="
},
"mute-stream": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz",
"integrity": "sha1-qSGZYKbV1dBGWXruUSUsZlX3F34="
},
"strip-ansi": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
"integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=",
"requires": {
"ansi-regex": "^1.0.0"
}
}
}
},
"recast": {
"version": "0.10.33",
"resolved": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz",
@ -8788,24 +8511,6 @@
"uuid": "^3.1.0"
}
},
"request-promise-core": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
"integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
"requires": {
"lodash": "^4.13.1"
}
},
"request-promise-native": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz",
"integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=",
"requires": {
"request-promise-core": "1.1.1",
"stealthy-require": "^1.1.0",
"tough-cookie": ">=2.3.3"
}
},
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@ -8919,11 +8624,6 @@
"resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.8.tgz",
"integrity": "sha512-+GztYEPRpIsQoCSraWHDBs9WVy4eVME16zhOtDB4H9J4xN0XRhknnmLOl+4gRgZtu8dpp9N/utSPjKH/xmDzXg=="
},
"rx": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/rx/-/rx-2.5.3.tgz",
"integrity": "sha1-Ia3H2A8CACr1Da6X/Z2/JIdV9WY="
},
"rx-lite": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
@ -8947,11 +8647,6 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sax": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
"integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o="
},
"season": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/season/-/season-5.3.0.tgz",
@ -9356,19 +9051,6 @@
}
}
},
"stealthy-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
"integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
},
"string-editor": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/string-editor/-/string-editor-0.1.2.tgz",
"integrity": "sha1-9f8bWsSu16xsL7jeI20VUbIPYdA=",
"requires": {
"editor": "^1.0.0"
}
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
@ -9978,15 +9660,20 @@
}
},
"terser": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-3.8.1.tgz",
"integrity": "sha512-FRin3gKQ0vm0xPPLuxw1FqpVgv1b2pBpYCaFb5qe6A7sD749Fnq1VbDiX3CEFM0BV0fqDzFtBfgmxhxCdzKQIg==",
"version": "3.10.8",
"resolved": "https://registry.npmjs.org/terser/-/terser-3.10.8.tgz",
"integrity": "sha512-GQJHWJ/vbx0EgRk+lBMONMmKaT+ifeo/XgT/hi3KpzEEFOERVyFuJSVXH8grcmJjiqKY35ds8rBCxvABUeyyuQ==",
"requires": {
"commander": "~2.16.0",
"commander": "~2.17.1",
"source-map": "~0.6.1",
"source-map-support": "~0.5.6"
},
"dependencies": {
"commander": {
"version": "2.17.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@ -10680,20 +10367,6 @@
"resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
"integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI="
},
"xml2js": {
"version": "0.4.19",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~9.0.1"
}
},
"xmlbuilder": {
"version": "9.0.7",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
},
"xmldom": {
"version": "0.1.27",
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",

View File

@ -4,7 +4,6 @@
"dependencies": {
"7zip-bin": "^4.0.2",
"async": "2.0.1",
"aws-sdk": "^2.5.2",
"babel-core": "5.8.38",
"coffeelint": "1.15.7",
"colors": "1.1.2",
@ -28,10 +27,7 @@
"npm": "6.2.0",
"passwd-user": "2.1.0",
"pegjs": "0.9.0",
"publish-release": "^1.6.0",
"random-seed": "^0.3.0",
"request": "^2.87.0",
"request-promise-native": "^1.0.5",
"season": "5.3.0",
"semver": "5.3.0",
"standard": "8.4.0",

View File

@ -1,5 +0,0 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\publish-release" %*
) ELSE (
node "%~dp0\publish-release" %*
)

View File

@ -13,7 +13,7 @@ const argv = yargs
.argv
async function getReleaseVersion () {
let releaseVersion = appMetadata.version
let releaseVersion = process.env.ATOM_RELEASE_VERSION || appMetadata.version
if (argv.nightly) {
const releases = await request({
url: 'https://api.github.com/repos/atom/atom-nightly-releases/releases',
@ -42,16 +42,17 @@ async function getReleaseVersion () {
if (!process.env.SYSTEM_PULLREQUEST_PULLREQUESTNUMBER) {
// Only set the build number on non-PR builds as it causes build errors when
// non-admins send PRs to the repo
console.log(`##vso[build.updatebuildnumber]${releaseVersion}+${process.env.BUILD_BUILDNUMBER}`)
console.log(`##vso[build.updatebuildnumber]${releaseVersion}+${process.env.BUILD_BUILDID}`)
}
// Write out some variables that indicate whether artifacts should be uploaded
const buildBranch = process.env.BUILD_SOURCEBRANCHNAME
const isReleaseBranch = process.env.IS_RELEASE_BRANCH || argv.nightly || buildBranch.match(/\d\.\d+-releases/) !== null
const isSignedZipBranch =
process.env.IS_SIGNED_ZIP_BRANCH ||
buildBranch.startsWith('electron-') ||
buildBranch === 'master' && !process.env.SYSTEM_PULLREQUEST_PULLREQUESTNUMBER
!isReleaseBranch &&
(process.env.IS_SIGNED_ZIP_BRANCH ||
buildBranch.startsWith('electron-') ||
buildBranch === 'master' && !process.env.SYSTEM_PULLREQUEST_PULLREQUESTNUMBER)
console.log(`##vso[task.setvariable variable=IsReleaseBranch;isOutput=true]${isReleaseBranch}`)
console.log(`##vso[task.setvariable variable=IsSignedZipBranch;isOutput=true]${isSignedZipBranch}`)
}

View File

@ -0,0 +1,130 @@
const semver = require('semver')
const octokit = require('@octokit/rest')()
const changelog = require('pr-changelog')
const childProcess = require('child_process')
module.exports.get = async function (releaseVersion, githubToken) {
if (githubToken) {
octokit.authenticate({
type: 'oauth',
token: githubToken
})
}
const releases = await octokit.repos.getReleases({owner: 'atom', repo: 'atom'})
const release = releases.data.find(r => semver.eq(r.name, releaseVersion))
return release ? release.body : undefined
}
module.exports.generateForVersion = async function (releaseVersion, githubToken, oldReleaseNotes) {
let oldVersion = null
let oldVersionName = null
const parsedVersion = semver.parse(releaseVersion)
const newVersionBranch = getBranchForVersion(parsedVersion)
if (githubToken) {
changelog.setGithubAccessToken(githubToken)
octokit.authenticate({
type: 'oauth',
token: githubToken
})
}
if (parsedVersion.prerelease && parsedVersion.prerelease[0] === 'beta0') {
// For beta0 releases, stable hasn't been released yet so compare against
// the stable version's release branch
oldVersion = `${parsedVersion.major}.${parsedVersion.minor - 1}-releases`
oldVersionName = `v${parsedVersion.major}.${parsedVersion.minor - 1}.0`
} else {
let releases = await octokit.repos.getReleases({owner: 'atom', repo: 'atom'})
oldVersion = 'v' + getPreviousRelease(releaseVersion, releases.data).name
oldVersionName = oldVersion
}
const allChangesText = await changelog.getChangelog({
owner: 'atom',
repo: 'atom',
fromTag: oldVersion,
toTag: newVersionBranch,
dependencyKey: 'packageDependencies',
changelogFormatter: function ({pullRequests, owner, repo, fromTag, toTag}) {
let prString = changelog.pullRequestsToString(pullRequests)
let title = repo
if (repo === 'atom') {
title = 'Atom Core'
fromTag = oldVersionName
toTag = releaseVersion
}
return `### [${title}](https://github.com/${owner}/${repo})\n\n${fromTag}...${toTag}\n\n${prString}`
}
})
const writtenReleaseNotes =
extractWrittenReleaseNotes(oldReleaseNotes) ||
'**TODO**: Pull relevant changes here!'
return `## Notable Changes\n
${writtenReleaseNotes}\n
<details>
<summary>All Changes</summary>\n
${allChangesText}
</details>
`
}
module.exports.generateForNightly = async function (releaseVersion, githubToken) {
const releases = await octokit.repos.getReleases({owner: 'atom', repo: 'atom-nightly-releases'})
const previousRelease = getPreviousRelease(releaseVersion, releases.data)
const oldReleaseNotes = previousRelease ? previousRelease.body : undefined
const latestCommitResult = childProcess.spawnSync('git', ['rev-parse', '--short', 'HEAD'])
if (latestCommitResult && oldReleaseNotes) {
const latestCommit = latestCommitResult.stdout.toString().trim()
const extractMatch = oldReleaseNotes.match(/atom\/atom\/compare\/([0-9a-f]{5,40})\.\.\.([0-9a-f]{5,40})/)
if (extractMatch) {
return `### Click [here](https://github.com/atom/atom/compare/${extractMatch[2]}...${latestCommit}) to see the changes included with this release! :atom: :night_with_stars:`
}
}
return undefined
}
function extractWrittenReleaseNotes (oldReleaseNotes) {
if (oldReleaseNotes) {
const extractMatch = oldReleaseNotes.match(/^## Notable Changes\r\n([\s\S]*)<details>/)
if (extractMatch && extractMatch[1]) {
return extractMatch[1].trim()
}
}
return undefined
}
function getPreviousRelease (version, allReleases) {
const versionIsStable = semver.prerelease(version) === null
// Make sure versions are sorted before using them
allReleases.sort((v1, v2) => semver.rcompare(v1.name, v2.name))
for (let release of allReleases) {
if (versionIsStable && semver.prerelease(release.name)) {
continue
}
if (semver.lt(release.name, version)) {
return release
}
}
return null
}
function getBranchForVersion (version) {
let parsedVersion = version
if (!(version instanceof semver.SemVer)) {
parsedVersion = semver.parse(version)
}
return `${parsedVersion.major}.${parsedVersion.minor}-releases`
}

View File

@ -43,7 +43,7 @@ jobs:
# This has to be done separately because VSTS inexplicably
# exits the script block after `npm install` completes.
- script: |
cd script
cd script\vsts
npm install
displayName: npm install
@ -54,7 +54,7 @@ jobs:
displayName: Download Release Artifacts
- script: |
$(Build.SourcesDirectory)\script\publish-release.cmd --create-github-release --assets-path "$(System.ArtifactsDirectory)"
node $(Build.SourcesDirectory)\script\vsts\upload-artifacts.js --create-github-release --assets-path "$(System.ArtifactsDirectory)"
env:
GITHUB_TOKEN: $(GITHUB_TOKEN)
ATOM_RELEASE_VERSION: $(ReleaseVersion)

File diff suppressed because it is too large Load Diff

View File

@ -2,9 +2,15 @@
"name": "atom-release-scripts",
"description": "Atom release scripts",
"dependencies": {
"@octokit/rest": "^15.9.5",
"aws-sdk": "^2.5.2",
"download": "^7.1.0",
"glob": "7.0.3",
"pr-changelog": "^0.3.2",
"publish-release": "^1.6.0",
"request": "^2.87.0",
"request-promise-native": "^1.0.5",
"semver": "5.3.0",
"yargs": "4.8.1"
}
}

View File

@ -49,7 +49,7 @@ jobs:
# This has to be done separately because VSTS inexplicably
# exits the script block after `npm install` completes.
- script: |
cd script
cd script\vsts
npm install
displayName: npm install
@ -60,12 +60,32 @@ jobs:
displayName: Download Release Artifacts
- script: |
$(Build.SourcesDirectory)\script\publish-release.cmd --assets-path "$(System.ArtifactsDirectory)" --s3-path "vsts-artifacts/$(Build.BuildId)/"
node $(Build.SourcesDirectory)\script\vsts\upload-artifacts.js --create-github-release --assets-path "$(System.ArtifactsDirectory)"
env:
GITHUB_TOKEN: $(GITHUB_TOKEN)
ATOM_RELEASE_VERSION: $(ReleaseVersion)
ATOM_RELEASES_S3_KEY: $(ATOM_RELEASES_S3_KEY)
ATOM_RELEASES_S3_SECRET: $(ATOM_RELEASES_S3_SECRET)
ATOM_RELEASES_S3_BUCKET: $(ATOM_RELEASES_S3_BUCKET)
PACKAGE_CLOUD_API_KEY: $(PACKAGE_CLOUD_API_KEY)
displayName: Create Draft Release
condition: and(succeeded(), eq(variables['IsReleaseBranch'], 'true'))
- script: |
node $(Build.SourcesDirectory)\script\vsts\upload-artifacts.js --assets-path "$(System.ArtifactsDirectory)" --s3-path "vsts-artifacts/$(Build.BuildId)/"
env:
ATOM_RELEASE_VERSION: $(ReleaseVersion)
ATOM_RELEASES_S3_KEY: $(ATOM_RELEASES_S3_KEY)
ATOM_RELEASES_S3_SECRET: $(ATOM_RELEASES_S3_SECRET)
ATOM_RELEASES_S3_BUCKET: $(ATOM_RELEASES_S3_BUCKET)
displayName: Upload CI Artifacts to S3
condition: and(succeeded(), eq(variables['IsSignedZipBranch'], 'true'))
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: $(Build.SourcesDirectory)/out/OLD_RELEASE_NOTES.md
ArtifactName: OLD_RELEASE_NOTES.md
ArtifactType: Container
displayName: Upload OLD_RELEASE_NOTES.md
condition: and(succeeded(), eq(variables['IsReleaseBranch'], 'true'))
continueOnError: true

View File

@ -1,14 +1,14 @@
#!/usr/bin/env node
'use strict'
const fs = require('fs')
const path = require('path')
const glob = require('glob')
const publishRelease = require('publish-release')
const releaseNotes = require('./lib/release-notes')
const uploadToS3 = require('./lib/upload-to-s3')
const uploadLinuxPackages = require('./lib/upload-linux-packages')
const CONFIG = require('./config')
const CONFIG = require('../config')
const yargs = require('yargs')
const argv = yargs
@ -21,18 +21,20 @@ const argv = yargs
.wrap(yargs.terminalWidth())
.argv
const assetsPath = argv.assetsPath || path.join(CONFIG.repositoryRootPath, 'out')
const releaseVersion = CONFIG.computedAppVersion
const isNightlyRelease = CONFIG.channel === 'nightly'
const assetsPath = argv.assetsPath || CONFIG.buildOutputPath
const assetsPattern = '/**/*(*.exe|*.zip|*.nupkg|*.tar.gz|*.rpm|*.deb|RELEASES*|atom-api.json)'
const assets = glob.sync(assetsPattern, { root: assetsPath, nodir: true })
const bucketPath = argv.s3Path || `releases/v${CONFIG.computedAppVersion}/`
const bucketPath = argv.s3Path || `releases/v${releaseVersion}/`
if (!assets || assets.length === 0) {
console.error(`No assets found under specified path: ${assetsPath}`)
process.exit(1)
}
async function uploadRelease() {
console.log(`Uploading ${assets.length} release assets for ${CONFIG.computedAppVersion} to S3 under '${bucketPath}'`)
async function uploadArtifacts () {
console.log(`Uploading ${assets.length} release assets for ${releaseVersion} to S3 under '${bucketPath}'`)
await uploadToS3(
process.env.ATOM_RELEASES_S3_KEY,
@ -45,35 +47,65 @@ async function uploadRelease() {
await uploadLinuxPackages(
argv.linuxRepoName,
process.env.PACKAGE_CLOUD_API_KEY,
CONFIG.computedAppVersion,
releaseVersion,
assets)
} else {
console.log("Skipping upload of Linux packages")
console.log('Skipping upload of Linux packages')
}
const oldReleaseNotes =
await releaseNotes.get(
releaseVersion,
process.env.GITHUB_TOKEN)
if (oldReleaseNotes) {
const oldReleaseNotesPath = path.resolve(CONFIG.buildOutputPath, 'OLD_RELEASE_NOTES.md')
console.log(`Saving existing ${releaseVersion} release notes to ${oldReleaseNotesPath}`)
fs.writeFileSync(oldReleaseNotesPath, oldReleaseNotes, 'utf8')
}
if (argv.createGithubRelease) {
console.log(`Creating GitHub release v${CONFIG.computedAppVersion}`)
console.log(`\nGenerating new release notes for ${releaseVersion}`)
let newReleaseNotes = ''
if (isNightlyRelease) {
newReleaseNotes =
await releaseNotes.generateForNightly(
releaseVersion,
process.env.GITHUB_TOKEN,
oldReleaseNotes)
} else {
newReleaseNotes =
await releaseNotes.generateForVersion(
releaseVersion,
process.env.GITHUB_TOKEN,
oldReleaseNotes)
}
console.log(`New release notes:\n\n${newReleaseNotes}`)
console.log(`Creating GitHub release v${releaseVersion}`)
const release =
await publishReleaseAsync({
token: process.env.GITHUB_TOKEN,
owner: 'atom',
repo: CONFIG.channel !== 'nightly' ? 'atom' : 'atom-nightly-releases',
repo: !isNightlyRelease ? 'atom' : 'atom-nightly-releases',
name: CONFIG.computedAppVersion,
body: newReleaseNotes,
tag: `v${CONFIG.computedAppVersion}`,
draft: false,
draft: !isNightlyRelease,
prerelease: CONFIG.channel !== 'stable',
reuseRelease: true,
skipIfPublished: true,
assets
})
console.log("Release published successfully: ", release.html_url)
console.log('Release published successfully: ', release.html_url)
} else {
console.log("Skipping GitHub release creation")
console.log('Skipping GitHub release creation')
}
}
async function publishReleaseAsync(options) {
async function publishReleaseAsync (options) {
return new Promise((resolve, reject) => {
publishRelease(options, (err, release) => {
if (err) {
@ -85,7 +117,9 @@ async function publishReleaseAsync(options) {
})
}
uploadRelease().catch((err) => {
// Wrap the call the async function and catch errors from its promise because
// Node.js doesn't yet allow use of await at the script scope
uploadArtifacts().catch(err => {
console.error('An error occurred while uploading the release:\n\n', err)
process.exit(1)
})