@@ -438,3 +438,99 @@ jobs:
438
438
name : linux-sign
439
439
path : |
440
440
signed
441
+
442
+ # ================================
443
+ # Publish
444
+ # ================================
445
+ create-github-release :
446
+ name : Publish GitHub draft release
447
+ runs-on : ubuntu-latest
448
+ needs : [ osx-sign, win-sign, linux-sign ]
449
+ steps :
450
+ - name : Check out repository
451
+ uses : actions/checkout@v3
452
+ with :
453
+ fetch-depth : 0 # Indicate full history so Nerdbank.GitVersioning works.
454
+
455
+ - name : Set up dotnet
456
+ uses : actions/setup-dotnet@v2
457
+ with :
458
+ dotnet-version : 6.0.201
459
+
460
+ # Install Nerdbank.GitVersioning
461
+ - uses : dotnet/nbgv@master
462
+ with :
463
+ setCommonVars : true
464
+
465
+ - name : Download artifacts
466
+ uses : actions/download-artifact@v3
467
+
468
+ - name : Archive macOS payload and symbols
469
+ run : |
470
+ mkdir osx-payload-and-symbols
471
+ tar -C osx-payload-sign -czf osx-payload-and-symbols/gcm-osx-x64-$GitBuildVersionSimple.tar.gz .
472
+ tar -C tmp.osx-build/symbols -czf osx-payload-and-symbols/gcm-osx-x64-$GitBuildVersionSimple-symbols.tar.gz .
473
+
474
+ - name : Archive Windows payload and symbols
475
+ shell : pwsh
476
+ run : |
477
+ mkdir win-x86-payload-and-symbols
478
+ Compress-Archive -Path win-sign/signed-payload/* win-x86-payload-and-symbols/gcm-win-x86-$env:GitBuildVersionSimple.zip
479
+ Compress-Archive -Path win-sign/src/windows/Installer.Windows/symbols/* win-x86-payload-and-symbols/gcm-win-x86-$env:GitBuildVersionSimple-symbols.zip
480
+
481
+ - uses : actions/github-script@v4
482
+ with :
483
+ script : |
484
+ const fs = require('fs');
485
+ const path = require('path');
486
+ const version = process.env.GitBuildVersionSimple
487
+
488
+ var releaseMetadata = {
489
+ owner: context.repo.owner,
490
+ repo: context.repo.repo
491
+ };
492
+
493
+ // Create the release
494
+ var tagName = `v${version}`;
495
+ var createdRelease = await github.repos.createRelease({
496
+ ...releaseMetadata,
497
+ draft: true,
498
+ tag_name: tagName,
499
+ name: `GCM ${version}`
500
+ });
501
+ releaseMetadata.release_id = createdRelease.data.id;
502
+
503
+ // Uploads contents of directory to the release created above
504
+ async function uploadDirectoryToRelease(directory, includeExtensions=[]) {
505
+ return fs.promises.readdir(directory)
506
+ .then(async(files) => Promise.all(
507
+ files.filter(file => {
508
+ return includeExtensions.length==0 || includeExtensions.includes(path.extname(file).toLowerCase());
509
+ })
510
+ .map(async (file) => {
511
+ var filePath = path.join(directory, file);
512
+ github.repos.uploadReleaseAsset({
513
+ ...releaseMetadata,
514
+ name: file,
515
+ headers: {
516
+ "content-length": (await fs.promises.stat(filePath)).size
517
+ },
518
+ data: fs.createReadStream(filePath)
519
+ });
520
+ }))
521
+ );
522
+ }
523
+
524
+ await Promise.all([
525
+ // Upload Windows artifacts
526
+ uploadDirectoryToRelease('win-sign/signed'),
527
+ uploadDirectoryToRelease('win-x86-payload-and-symbols'),
528
+
529
+ // Upload macOS artifacts
530
+ uploadDirectoryToRelease('osx-sign'),
531
+ uploadDirectoryToRelease('osx-payload-and-symbols'),
532
+
533
+ // Upload Linux artifacts
534
+ uploadDirectoryToRelease('linux-sign'),
535
+ uploadDirectoryToRelease('linux-build/tar')
536
+ ]);
0 commit comments