Skip to content

Commit 1f99600

Browse files
vdyeldennington
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 Co-authored-by: Lessley Dennington <[email protected]>
1 parent 4ebc418 commit 1f99600

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

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

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,3 +625,112 @@ jobs:
625625
path: |
626626
*.deb
627627
# End build and sign Debian package
628+
629+
create-github-release:
630+
runs-on: ubuntu-latest
631+
permissions:
632+
contents: write
633+
needs:
634+
- create-linux-artifacts
635+
- create-macos-artifacts
636+
- windows_artifacts
637+
- prereqs
638+
if: |
639+
success() ||
640+
(needs.create-linux-artifacts.result == 'skipped' &&
641+
needs.create-macos-artifacts.result == 'success' &&
642+
needs.windows_artifacts.result == 'success')
643+
steps:
644+
- name: Download Windows portable (x86_64)
645+
uses: actions/download-artifact@v4
646+
with:
647+
name: win-portable-x86_64
648+
path: win-portable-x86_64
649+
650+
- name: Download Windows portable (aarch64)
651+
uses: actions/download-artifact@v4
652+
with:
653+
name: win-portable-aarch64
654+
path: win-portable-aarch64
655+
656+
- name: Download Windows installer (x86_64)
657+
uses: actions/download-artifact@v4
658+
with:
659+
name: win-installer-x86_64
660+
path: win-installer-x86_64
661+
662+
- name: Download Windows installer (aarch64)
663+
uses: actions/download-artifact@v4
664+
with:
665+
name: win-installer-aarch64
666+
path: win-installer-aarch64
667+
668+
- name: Download macOS artifacts
669+
uses: actions/download-artifact@v4
670+
with:
671+
name: macos-artifacts
672+
path: macos-artifacts
673+
674+
- name: Download Debian package
675+
uses: actions/download-artifact@v4
676+
with:
677+
name: linux-artifacts
678+
path: deb-package
679+
680+
- uses: actions/github-script@v6
681+
with:
682+
script: |
683+
const fs = require('fs');
684+
const path = require('path');
685+
686+
var releaseMetadata = {
687+
owner: context.repo.owner,
688+
repo: context.repo.repo
689+
};
690+
691+
// Create the release
692+
var tagName = "${{ needs.prereqs.outputs.tag_name }}";
693+
var createdRelease = await github.rest.repos.createRelease({
694+
...releaseMetadata,
695+
draft: true,
696+
tag_name: tagName,
697+
name: tagName
698+
});
699+
releaseMetadata.release_id = createdRelease.data.id;
700+
701+
// Uploads contents of directory to the release created above
702+
async function uploadDirectoryToRelease(directory, includeExtensions=[]) {
703+
return fs.promises.readdir(directory)
704+
.then(async(files) => Promise.all(
705+
files.filter(file => {
706+
return includeExtensions.length==0 || includeExtensions.includes(path.extname(file).toLowerCase());
707+
})
708+
.map(async (file) => {
709+
var filePath = path.join(directory, file);
710+
github.rest.repos.uploadReleaseAsset({
711+
...releaseMetadata,
712+
name: file,
713+
headers: {
714+
"content-length": (await fs.promises.stat(filePath)).size
715+
},
716+
data: fs.createReadStream(filePath)
717+
});
718+
}))
719+
);
720+
}
721+
722+
await Promise.all([
723+
// Upload Windows x86_64 artifacts
724+
uploadDirectoryToRelease('win-installer-x86_64', ['.exe']),
725+
uploadDirectoryToRelease('win-portable-x86_64', ['.exe']),
726+
727+
// Upload Windows aarch64 artifacts
728+
uploadDirectoryToRelease('win-installer-aarch64', ['.exe']),
729+
uploadDirectoryToRelease('win-portable-aarch64', ['.exe']),
730+
731+
// Upload Mac artifacts
732+
uploadDirectoryToRelease('macos-artifacts'),
733+
734+
// Upload Ubuntu artifacts
735+
uploadDirectoryToRelease('deb-package')
736+
]);

0 commit comments

Comments
 (0)