@@ -438,3 +438,99 @@ jobs:
438438 name : linux-sign
439439 path : |
440440 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