Skip to content

Commit d76fbf5

Browse files
vdyederrickstolee
authored andcommitted
release: create draft GitHub release with packages & installers
- create release & uploads artifact using Octokit - use job "if" condition to handle uploading signed *or* unsigned .deb
1 parent 547bea3 commit d76fbf5

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

.github/workflows/build-git-installers.yml

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,3 +413,93 @@ jobs:
413413
name: deb-package-signed
414414
path: ${{ env.ARTIFACTS_DIR }}/signed
415415
# End build & sign Ubuntu package
416+
417+
create-github-release:
418+
runs-on: ubuntu-latest
419+
needs: [prereqs, windows_artifacts, mac_artifacts, ubuntu_sign-artifacts]
420+
if: |
421+
success() ||
422+
(needs.ubuntu_sign-artifacts.result == 'skipped' &&
423+
needs.mac_artifacts.result == 'success' &&
424+
needs.windows_artifacts.result == 'success')
425+
steps:
426+
- name: Download Windows portable installer
427+
uses: actions/download-artifact@v2
428+
with:
429+
name: win-portable-x86_64
430+
path: win-portable-x86_64
431+
- name: Download Windows x86_64 installer
432+
uses: actions/download-artifact@v2
433+
with:
434+
name: win-installer-x86_64
435+
path: win-installer-x86_64
436+
- name: Download Mac installer
437+
uses: actions/download-artifact@v2
438+
with:
439+
name: osx-installer
440+
path: osx-installer
441+
- name: Download Ubuntu package (signed)
442+
if: needs.prereqs.outputs.deb_signable == 'true'
443+
uses: actions/download-artifact@v2
444+
with:
445+
name: deb-package-signed
446+
path: deb-package
447+
- name: Download Ubuntu package (unsigned)
448+
if: needs.prereqs.outputs.deb_signable != 'true'
449+
uses: actions/download-artifact@v2
450+
with:
451+
name: deb-package-unsigned
452+
path: deb-package
453+
- uses: actions/github-script@v4
454+
with:
455+
script: |
456+
const fs = require('fs');
457+
const path = require('path');
458+
459+
var releaseMetadata = {
460+
owner: context.repo.owner,
461+
repo: context.repo.repo
462+
};
463+
464+
// Create the release
465+
var tagName = "${{ needs.prereqs.outputs.tag_name }}";
466+
var createdRelease = await github.repos.createRelease({
467+
...releaseMetadata,
468+
draft: true,
469+
tag_name: tagName,
470+
name: tagName
471+
});
472+
releaseMetadata.release_id = createdRelease.data.id;
473+
474+
// Uploads contents of directory to the release created above
475+
async function uploadDirectoryToRelease(directory, includeExtensions=[]) {
476+
return fs.promises.readdir(directory)
477+
.then(async(files) => Promise.all(
478+
files.filter(file => {
479+
return includeExtensions.length==0 || includeExtensions.includes(path.extname(file).toLowerCase());
480+
})
481+
.map(async (file) => {
482+
var filePath = path.join(directory, file);
483+
github.repos.uploadReleaseAsset({
484+
...releaseMetadata,
485+
name: file,
486+
headers: {
487+
"content-length": (await fs.promises.stat(filePath)).size
488+
},
489+
data: fs.createReadStream(filePath)
490+
});
491+
}))
492+
);
493+
}
494+
495+
await Promise.all([
496+
// Upload Windows artifacts
497+
uploadDirectoryToRelease('win-installer-x86_64', ['.exe']),
498+
uploadDirectoryToRelease('win-portable-x86_64', ['.exe']),
499+
500+
// Upload Mac artifacts
501+
uploadDirectoryToRelease('osx-installer'),
502+
503+
// Upload Ubuntu artifacts
504+
uploadDirectoryToRelease('deb-package')
505+
]);

0 commit comments

Comments
 (0)