@@ -17,8 +17,8 @@ const pkgVersion = `v${pkg.version}`;
1717const path = require ( 'path' ) ;
1818const temp = require ( 'temp' ) . track ( ) ;
1919const { URL } = require ( 'url' ) ;
20+ const { BlobServiceClient } = require ( '@azure/storage-blob' ) ;
2021const { Octokit } = require ( '@octokit/rest' ) ;
21- const AWS = require ( 'aws-sdk' ) ;
2222
2323require ( 'colors' ) ;
2424const pass = '✓' . green ;
@@ -80,6 +80,8 @@ async function validateReleaseAssets (release, validatingRelease) {
8080 }
8181 const s3RemoteFiles = s3RemoteFilesForVersion ( release . tag_name ) ;
8282 await verifyShasumsForRemoteFiles ( s3RemoteFiles , true ) ;
83+ const azRemoteFiles = azRemoteFilesForVersion ( release . tag_name ) ;
84+ await verifyShasumsForRemoteFiles ( s3RemoteFiles , true ) ;
8385 }
8486}
8587
@@ -181,26 +183,36 @@ function assetsForVersion (version, validatingRelease) {
181183 return patterns ;
182184}
183185
186+ const cloudStoreFilePaths = ( version ) => [
187+ `iojs-${ version } -headers.tar.gz` ,
188+ `iojs-${ version } .tar.gz` ,
189+ `node-${ version } .tar.gz` ,
190+ 'node.lib' ,
191+ 'x64/node.lib' ,
192+ 'win-x64/iojs.lib' ,
193+ 'win-x86/iojs.lib' ,
194+ 'win-arm64/iojs.lib' ,
195+ 'win-x64/node.lib' ,
196+ 'win-x86/node.lib' ,
197+ 'win-arm64/node.lib' ,
198+ 'arm64/node.lib' ,
199+ 'SHASUMS.txt' ,
200+ 'SHASUMS256.txt'
201+ ] ;
202+
184203function s3RemoteFilesForVersion ( version ) {
185204 const bucket = 'https://gh-contractor-zcbenz.s3.amazonaws.com/' ;
186205 const versionPrefix = `${ bucket } atom-shell/dist/${ version } /` ;
187- const filePaths = [
188- `iojs-${ version } -headers.tar.gz` ,
189- `iojs-${ version } .tar.gz` ,
190- `node-${ version } .tar.gz` ,
191- 'node.lib' ,
192- 'x64/node.lib' ,
193- 'win-x64/iojs.lib' ,
194- 'win-x86/iojs.lib' ,
195- 'win-arm64/iojs.lib' ,
196- 'win-x64/node.lib' ,
197- 'win-x86/node.lib' ,
198- 'win-arm64/node.lib' ,
199- 'arm64/node.lib' ,
200- 'SHASUMS.txt' ,
201- 'SHASUMS256.txt'
202- ] ;
203- return filePaths . map ( ( filePath ) => ( {
206+ return cloudStoreFilePaths ( version ) . map ( ( filePath ) => ( {
207+ file : filePath ,
208+ url : `${ versionPrefix } ${ filePath } `
209+ } ) ) ;
210+ }
211+
212+ function azRemoteFilesForVersion ( version ) {
213+ const azCDN = 'https://artifacts.electronjs.org/headers/' ;
214+ const versionPrefix = `${ azCDN } dist/${ version } /` ;
215+ return cloudStoreFilePaths ( version ) . map ( ( filePath ) => ( {
204216 file : filePath ,
205217 url : `${ versionPrefix } ${ filePath } `
206218 } ) ) ;
@@ -221,49 +233,39 @@ function runScript (scriptName, scriptArgs, cwd) {
221233}
222234
223235function uploadNodeShasums ( ) {
224- console . log ( 'Uploading Node SHASUMS file to S3 .' ) ;
236+ console . log ( 'Uploading Node SHASUMS file to artifacts.electronjs.org .' ) ;
225237 const scriptPath = path . join ( ELECTRON_DIR , 'script' , 'release' , 'uploaders' , 'upload-node-checksums.py' ) ;
226238 runScript ( scriptPath , [ '-v' , pkgVersion ] ) ;
227- console . log ( `${ pass } Done uploading Node SHASUMS file to S3 .` ) ;
239+ console . log ( `${ pass } Done uploading Node SHASUMS file to artifacts.electronjs.org .` ) ;
228240}
229241
230242function uploadIndexJson ( ) {
231- console . log ( 'Uploading index.json to S3 .' ) ;
243+ console . log ( 'Uploading index.json to artifacts.electronjs.org .' ) ;
232244 const scriptPath = path . join ( ELECTRON_DIR , 'script' , 'release' , 'uploaders' , 'upload-index-json.py' ) ;
233245 runScript ( scriptPath , [ pkgVersion ] ) ;
234- console . log ( `${ pass } Done uploading index.json to S3 .` ) ;
246+ console . log ( `${ pass } Done uploading index.json to artifacts.electronjs.org .` ) ;
235247}
236248
237249async function mergeShasums ( pkgVersion ) {
238- // Download individual checksum files for Electron zip files from S3 ,
250+ // Download individual checksum files for Electron zip files from artifact storage ,
239251 // concatenate them, and upload to GitHub.
240252
241- const bucket = process . env . ELECTRON_S3_BUCKET ;
242- const accessKeyId = process . env . ELECTRON_S3_ACCESS_KEY ;
243- const secretAccessKey = process . env . ELECTRON_S3_SECRET_KEY ;
244- if ( ! bucket || ! accessKeyId || ! secretAccessKey ) {
245- throw new Error ( 'Please set the $ELECTRON_S3_BUCKET, $ELECTRON_S3_ACCESS_KEY, and $ELECTRON_S3_SECRET_KEY environment variables' ) ;
253+ const connectionString = process . env . ELECTRON_ARTIFACTS_BLOB_STORAGE ;
254+ if ( ! connectionString ) {
255+ throw new Error ( 'Please set the $ELECTRON_ARTIFACTS_BLOB_STORAGE environment variable' ) ;
246256 }
247257
248- const s3 = new AWS . S3 ( {
249- apiVersion : '2006-03-01' ,
250- accessKeyId,
251- secretAccessKey,
252- region : 'us-west-2'
258+ const blobServiceClient = BlobServiceClient . fromConnectionString ( connectionString ) ;
259+ const containerClient = blobServiceClient . getContainerClient ( 'checksums-scratchpad' ) ;
260+ const blobsIter = containerClient . listBlobsFlat ( {
261+ prefix : `${ pkgVersion } /`
253262 } ) ;
254- const objects = await s3 . listObjectsV2 ( {
255- Bucket : bucket ,
256- Prefix : `atom-shell/tmp/${ pkgVersion } /` ,
257- Delimiter : '/'
258- } ) . promise ( ) ;
259263 const shasums = [ ] ;
260- for ( const obj of objects . Contents ) {
261- if ( obj . Key . endsWith ( '.sha256sum' ) ) {
262- const data = await s3 . getObject ( {
263- Bucket : bucket ,
264- Key : obj . Key
265- } ) . promise ( ) ;
266- shasums . push ( data . Body . toString ( 'ascii' ) . trim ( ) ) ;
264+ for await ( const blob of blobsIter ) {
265+ if ( blob . name . endsWith ( '.sha256sum' ) ) {
266+ const blobClient = containerClient . getBlockBlobClient ( blob . name ) ;
267+ const response = await blobClient . downloadToBuffer ( ) ;
268+ shasums . push ( response . toString ( 'ascii' ) . trim ( ) ) ;
267269 }
268270 }
269271 return shasums . join ( '\n' ) ;
0 commit comments