Skip to content

Commit b32659a

Browse files
committed
release workflow
1 parent b5f9fd1 commit b32659a

1 file changed

Lines changed: 62 additions & 42 deletions

File tree

.github/workflows/release-browseros.yml

Lines changed: 62 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,30 @@
11
# Release workflow for BrowserOS Codex binaries.
22
# Builds all distributions without signing.
3-
# To release, run:
4-
# ```
5-
# git tag -a browseros-v0.1.0 -m "Release 0.1.0"
6-
# git push origin browseros-v0.1.0
7-
# ```
3+
#
4+
# Two triggers:
5+
# 1. Automatic (tag push):
6+
# ```
7+
# git tag -a browseros-v0.1.0 -m "Release 0.1.0"
8+
# git push origin browseros-v0.1.0
9+
# ```
10+
#
11+
# 2. Manual (any branch):
12+
# Go to Actions → release-browseros → "Run workflow"
813

914
name: release-browseros
1015

1116
on:
1217
push:
1318
tags:
1419
- "browseros-v*.*.*"
20+
workflow_dispatch:
1521

1622
concurrency:
1723
group: ${{ github.workflow }}
1824
cancel-in-progress: true
1925

2026
jobs:
21-
tag-check:
22-
runs-on: ubuntu-latest
23-
steps:
24-
- uses: actions/checkout@v5
25-
26-
- name: Validate tag matches Cargo.toml version
27-
shell: bash
28-
run: |
29-
set -euo pipefail
30-
echo "::group::Tag validation"
31-
32-
# 1. Must be a tag and match the regex
33-
[[ "${GITHUB_REF_TYPE}" == "tag" ]] \
34-
|| { echo "❌ Not a tag push"; exit 1; }
35-
[[ "${GITHUB_REF_NAME}" =~ ^browseros-v[0-9]+\.[0-9]+\.[0-9]+(-(alpha|beta)(\.[0-9]+)?)?$ ]] \
36-
|| { echo "❌ Tag '${GITHUB_REF_NAME}' doesn't match expected format"; exit 1; }
37-
38-
# 2. Extract versions
39-
tag_ver="${GITHUB_REF_NAME#browseros-v}"
40-
cargo_ver="$(grep -m1 '^version' codex-rs/Cargo.toml \
41-
| sed -E 's/version *= *"([^"]+)".*/\1/')"
42-
43-
# 3. Compare
44-
[[ "${tag_ver}" == "${cargo_ver}" ]] \
45-
|| { echo "❌ Tag ${tag_ver} ≠ Cargo.toml ${cargo_ver}"; exit 1; }
46-
47-
echo "✅ Tag and Cargo.toml agree (${tag_ver})"
48-
echo "::endgroup::"
49-
5027
build:
51-
needs: tag-check
5228
name: Build - ${{ matrix.runner }} - ${{ matrix.target }}
5329
runs-on: ${{ matrix.runner }}
5430
timeout-minutes: 30
@@ -79,6 +55,33 @@ jobs:
7955

8056
steps:
8157
- uses: actions/checkout@v5
58+
59+
- name: Validate tag matches Cargo.toml (for tag pushes only)
60+
if: startsWith(github.ref, 'refs/tags/browseros-v')
61+
shell: bash
62+
run: |
63+
set -euo pipefail
64+
echo "::group::Tag validation"
65+
66+
# Extract versions
67+
tag_ver="${GITHUB_REF_NAME#browseros-v}"
68+
cargo_ver="$(grep -m1 '^version' Cargo.toml \
69+
| sed -E 's/version *= *"([^"]+)".*/\1/')"
70+
71+
# Validate format
72+
if ! [[ "${tag_ver}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-(alpha|beta)(\.[0-9]+)?)?$ ]]; then
73+
echo "❌ Tag '${GITHUB_REF_NAME}' doesn't match expected format"
74+
exit 1
75+
fi
76+
77+
# Compare versions
78+
if [[ "${tag_ver}" != "${cargo_ver}" ]]; then
79+
echo "❌ Tag ${tag_ver} ≠ Cargo.toml ${cargo_ver}"
80+
exit 1
81+
fi
82+
83+
echo "✅ Tag and Cargo.toml agree (${tag_ver})"
84+
echo "::endgroup::"
8285
- uses: dtolnay/rust-toolchain@1.90
8386
with:
8487
targets: ${{ matrix.target }}
@@ -169,16 +172,33 @@ jobs:
169172
- name: List artifacts
170173
run: ls -R dist/
171174

172-
- name: Define release name
173-
id: release_name
175+
- name: Define release info
176+
id: release_info
177+
shell: bash
174178
run: |
175-
version="${GITHUB_REF_NAME#browseros-v}"
176-
echo "name=${version}" >> $GITHUB_OUTPUT
179+
if [[ "${{ github.ref_type }}" == "tag" ]]; then
180+
# Tag-based release: extract version from tag
181+
version="${GITHUB_REF_NAME#browseros-v}"
182+
release_name="BrowserOS ${version}"
183+
tag_name="${GITHUB_REF_NAME}"
184+
is_prerelease=$([[ "${version}" == *"-"* ]] && echo "true" || echo "false")
185+
else
186+
# Manual release: use branch and commit
187+
branch="${GITHUB_REF#refs/heads/}"
188+
commit="${GITHUB_SHA:0:7}"
189+
release_name="BrowserOS (${branch} - ${commit})"
190+
tag_name="browseros-manual-${GITHUB_RUN_ID}"
191+
is_prerelease="true"
192+
fi
193+
194+
echo "name=${release_name}" >> $GITHUB_OUTPUT
195+
echo "tag=${tag_name}" >> $GITHUB_OUTPUT
196+
echo "prerelease=${is_prerelease}" >> $GITHUB_OUTPUT
177197
178198
- name: Create GitHub Release
179199
uses: softprops/action-gh-release@v2
180200
with:
181-
name: BrowserOS ${{ steps.release_name.outputs.name }}
182-
tag_name: ${{ github.ref_name }}
201+
name: ${{ steps.release_info.outputs.name }}
202+
tag_name: ${{ steps.release_info.outputs.tag }}
183203
files: dist/**
184-
prerelease: ${{ contains(steps.release_name.outputs.name, '-') }}
204+
prerelease: ${{ steps.release_info.outputs.prerelease }}

0 commit comments

Comments
 (0)