Skip to content

Commit 680ad25

Browse files
authored
Merge pull request #28 from SkardiLabs/add_release_workflow
Optimized release workflow
2 parents a1ec6f2 + 43508ad commit 680ad25

2 files changed

Lines changed: 44 additions & 26 deletions

File tree

.github/workflows/promote-release.yml

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@ name: Promote Release
22

33
on:
44
workflow_dispatch:
5+
inputs:
6+
rc_tag:
7+
description: "RC tag to promote (e.g. v0.2.0-rc.1)"
8+
required: true
9+
type: string
510

611
permissions:
712
contents: write
813

914
jobs:
1015
promote-release:
11-
name: Promote RC to Official Release
16+
name: "Promote ${{ inputs.rc_tag }}"
1217
runs-on: ubuntu-latest
1318
steps:
1419
- name: Checkout code
@@ -17,21 +22,26 @@ jobs:
1722
ref: main
1823
fetch-depth: 0
1924

20-
- name: Find latest rc release
25+
- name: Validate and extract version
2126
id: version
2227
env:
2328
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2429
run: |
25-
RC_TAG=$(gh release list --json tagName,isPrerelease \
26-
--jq '[.[] | select(.isPrerelease == true) | .tagName | select(test("^v[0-9]+\\.[0-9]+\\.[0-9]+-rc\\.[0-9]+$"))] | .[0] // empty')
30+
RC_TAG="${{ inputs.rc_tag }}"
2731
28-
if [ -z "$RC_TAG" ]; then
29-
echo "Error: No rc releases found"
32+
if [[ ! "$RC_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+$ ]]; then
33+
echo "Error: Tag must be in format v0.0.0-rc.N"
3034
exit 1
3135
fi
3236
37+
# Verify the rc release exists
38+
if ! gh release view "$RC_TAG" &>/dev/null; then
39+
echo "Error: Release $RC_TAG not found"
40+
exit 1
41+
fi
42+
43+
# Strip the -rc.N suffix
3344
OFFICIAL="${RC_TAG%-rc.*}"
34-
echo "rc_tag=$RC_TAG" >> $GITHUB_OUTPUT
3545
echo "official=$OFFICIAL" >> $GITHUB_OUTPUT
3646
echo "Promoting $RC_TAG -> $OFFICIAL"
3747
@@ -40,13 +50,3 @@ jobs:
4050
OFFICIAL="${{ steps.version.outputs.official }}"
4151
git tag "$OFFICIAL"
4252
git push origin "$OFFICIAL"
43-
44-
- name: Create official release
45-
env:
46-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
47-
run: |
48-
OFFICIAL="${{ steps.version.outputs.official }}"
49-
gh release create "$OFFICIAL" \
50-
--title "$OFFICIAL" \
51-
--generate-notes \
52-
--latest

.github/workflows/release.yml

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
name: Release
22

33
on:
4-
push:
5-
tags:
6-
- "v[0-9]+.[0-9]+.[0-9]+"
7-
- "!v*-rc.*"
4+
workflow_dispatch:
5+
inputs:
6+
version:
7+
description: "Version to release (e.g. v0.1.0)"
8+
required: true
9+
type: string
810

911
permissions:
1012
contents: write
@@ -15,8 +17,20 @@ env:
1517
CARGO_INCREMENTAL: 0
1618

1719
jobs:
20+
validate:
21+
name: "Validate ${{ inputs.version }}"
22+
runs-on: ubuntu-latest
23+
steps:
24+
- name: Verify tag exists
25+
run: |
26+
if ! git ls-remote --tags origin "refs/tags/${{ inputs.version }}" | grep -q .; then
27+
echo "Error: Tag ${{ inputs.version }} does not exist. Run Promote Release first."
28+
exit 1
29+
fi
30+
1831
build:
19-
name: Build ${{ matrix.target }}
32+
name: "Build ${{ matrix.target }} (${{ inputs.version }})"
33+
needs: validate
2034
runs-on: ${{ matrix.os }}
2135
strategy:
2236
fail-fast: false
@@ -34,6 +48,8 @@ jobs:
3448
steps:
3549
- name: Checkout code
3650
uses: actions/checkout@v4
51+
with:
52+
ref: ${{ inputs.version }}
3753

3854
- name: Install system dependencies (Linux)
3955
if: runner.os == 'Linux'
@@ -87,7 +103,8 @@ jobs:
87103
skardi-${{ matrix.target }}.tar.gz.sha256
88104
89105
docker:
90-
name: Build & Push Docker Image (${{ matrix.variant }})
106+
name: "Build & Push Docker Image (${{ matrix.variant }}, ${{ inputs.version }})"
107+
needs: validate
91108
runs-on: ubuntu-latest
92109
strategy:
93110
fail-fast: false
@@ -123,9 +140,9 @@ jobs:
123140
username: ${{ github.actor }}
124141
password: ${{ secrets.GITHUB_TOKEN }}
125142

126-
- name: Extract version from tag
143+
- name: Extract version
127144
id: version
128-
run: echo "version=${GITHUB_REF_NAME#v}" >> $GITHUB_OUTPUT
145+
run: echo "version=${{ inputs.version }}" | sed 's/v//' >> $GITHUB_OUTPUT
129146

130147
- name: Build and push Docker image
131148
uses: docker/build-push-action@v6
@@ -142,7 +159,7 @@ jobs:
142159
cache-to: type=gha,mode=max
143160

144161
release:
145-
name: Create Release
162+
name: "Create Release (${{ inputs.version }})"
146163
needs: [build, docker]
147164
runs-on: ubuntu-latest
148165
steps:
@@ -158,6 +175,7 @@ jobs:
158175
- name: Create GitHub Release
159176
uses: softprops/action-gh-release@v2
160177
with:
178+
tag_name: ${{ inputs.version }}
161179
generate_release_notes: true
162180
files: |
163181
artifacts/*

0 commit comments

Comments
 (0)