workflows: add a workflow to generate releases from tags
When a new commit on `master` is tagged, the following github action will grab the artifacts created by the `snapshot-on-push-master` action. The intended workflow is to merge to `master`, wait for the artifacts to build, then tag that commit as a release. When that is done, the new action will generate a release, using the tag as the version number of the release. Here is an example of what a successful run looks like: https://github.com/jordigh/cc65/actions/runs/34737736095 Here is the release it generated: https://github.com/jordigh/cc65/releases/tag/V2.19TEST5 closes: #2281
This commit is contained in:
1 parent
e11fb5c393
commit
fe19dd1998
2 files changed
+106
-4
No files matched your search
@@ -0,0 +1,99 @@
|
||||
name: Release on Tag from Snapshot
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "V*"
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
actions: read
|
||||
|
||||
concurrency:
|
||||
group: release-${{ github.ref_name }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
release:
|
||||
if: github.repository == 'cc65/cc65'
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
REPO: ${{ github.repository }}
|
||||
TAG: ${{ github.ref_name }}
|
||||
TAG_SHA: ${{ github.sha }}
|
||||
SNAPSHOT_WORKFLOW: snapshot-on-push-master.yml
|
||||
|
||||
steps:
|
||||
- name: Find successful snapshot run for this exact commit on master
|
||||
id: snapshot
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
echo "Looking for successful '${SNAPSHOT_WORKFLOW}' run on master for SHA ${TAG_SHA}"
|
||||
|
||||
run_id="$(gh run list \
|
||||
--repo "$REPO" \
|
||||
--workflow "$SNAPSHOT_WORKFLOW" \
|
||||
--status completed \
|
||||
--json databaseId,headSha,conclusion \
|
||||
--jq '.[] | select(.headSha == "'"${TAG_SHA}"'" and .conclusion == "success") | .databaseId' \
|
||||
| head -n1 || true)"
|
||||
|
||||
if [[ -z "${run_id:-}" ]]; then
|
||||
echo "No successful snapshot run found for commit ${TAG_SHA}."
|
||||
echo "Stop now; rerun this workflow after snapshot succeeds."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Found snapshot run id=${run_id}"
|
||||
echo "run_id=${run_id}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Download artifacts from snapshot run
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
mkdir -p artifacts
|
||||
gh run download "${{ steps.snapshot.outputs.run_id }}" \
|
||||
--repo "$REPO" \
|
||||
--dir artifacts
|
||||
|
||||
- name: Rename snapshot artifacts to tag names
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
shopt -s globstar nullglob
|
||||
|
||||
found=0
|
||||
for f in artifacts/**/cc65-snapshot-win32.zip; do
|
||||
mv "$f" "$(dirname "$f")/cc65-${TAG}-win32.zip"
|
||||
found=1
|
||||
done
|
||||
for f in artifacts/**/cc65-snapshot-win64.zip; do
|
||||
mv "$f" "$(dirname "$f")/cc65-${TAG}-win64.zip"
|
||||
found=1
|
||||
done
|
||||
for f in artifacts/**/cc65-snapshot-docs.zip; do
|
||||
mv "$f" "$(dirname "$f")/cc65-${TAG}-docs.zip"
|
||||
found=1
|
||||
done
|
||||
|
||||
if [[ "$found" -eq 0 ]]; then
|
||||
echo "Expected snapshot artifacts were not found in run ${{ steps.snapshot.outputs.run_id }}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Create or update GitHub release and upload assets
|
||||
uses: softprops/action-gh-release@v3
|
||||
with:
|
||||
tag_name: ${{ env.TAG }}
|
||||
target_commitish: ${{ env.TAG_SHA }}
|
||||
generate_release_notes: true
|
||||
files: |
|
||||
artifacts/**/cc65-${{ env.TAG }}-win32.zip
|
||||
artifacts/**/cc65-${{ env.TAG }}-win64.zip
|
||||
artifacts/**/cc65-${{ env.TAG }}-docs.zip
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -18,10 +18,10 @@ jobs:
|
||||
run: git config --global core.autocrlf input
|
||||
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
uses: microsoft/setup-msbuild@v3
|
||||
|
||||
- name: Build app (debug)
|
||||
run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
- shell: bash
|
||||
run: git config --global core.autocrlf input
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Do some simple style checks
|
||||
shell: bash
|
||||
@@ -89,15 +89,17 @@ jobs:
|
||||
mv cc65.zip cc65-snapshot-win32.zip
|
||||
|
||||
- name: Upload a 32-bit Snapshot Zip
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: cc65-snapshot-win32
|
||||
path: cc65-snapshot-win32.zip
|
||||
retention-days: 90
|
||||
- name: Upload a 64-bit Snapshot Zip
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: cc65-snapshot-win64
|
||||
path: cc65-snapshot-win64.zip
|
||||
retention-days: 90
|
||||
|
||||
- name: Get the online documents repo.
|
||||
uses: actions/checkout@v4
|
||||
@@ -127,6 +129,7 @@ jobs:
|
||||
with:
|
||||
name: cc65-snapshot-docs
|
||||
path: cc65-snapshot-docs.zip
|
||||
retention-days: 90
|
||||
|
||||
# enter secrets under "repository secrets"
|
||||
- name: Upload 32-bit Windows snapshot to sourceforge
|
||||
|
||||
Reference in new issue
Block a user