Skip to content

Commit d4e8720

Browse files
committed
release: publish draft release to GitHub
Add final job to publish artifacts as a draft release on GitHub. This uses a custom github-script because the official action for adding assets to releases has been deprecated and archived. For more information, see: https://github.com/actions/create-release
1 parent 7ce3cd3 commit d4e8720

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

.github/workflows/release.yml

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)