Files
bear/.github/workflows/release.yml
T

103 lines
2.5 KiB
YAML

name: Release
on:
push:
tags:
- "v*"
permissions:
contents: write
jobs:
build:
strategy:
matrix:
include:
- os: ubuntu-latest
artifact: vr-linux-amd64
binary: vr
- os: macos-latest
artifact: vr-macos-arm64
binary: vr
- os: windows-latest
artifact: vr-windows-amd64.exe
binary: vr.exe
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install V (unix)
if: runner.os != 'Windows'
shell: bash
run: |
git clone --depth 1 https://github.com/vlang/v /tmp/v
cd /tmp/v && make
sudo ln -sf /tmp/v/v /usr/local/bin/v
v version
- name: Install V (windows)
if: runner.os == 'Windows'
shell: bash
run: |
curl -L -o v_windows.zip https://github.com/vlang/v/releases/latest/download/v_windows.zip
unzip -o v_windows.zip -d /tmp/vwin
echo "/tmp/vwin/v" >> "$GITHUB_PATH"
v version
- name: Build toolchain
shell: bash
run: v -o ${{ matrix.binary }} .
- name: Smoke test
shell: bash
run: ./${{ matrix.binary }} run examples/hello.vr
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact }}
path: ${{ matrix.binary }}
if-no-files-found: error
release:
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Verify tag matches v.mod version
run: |
TAG="${GITHUB_REF#refs/tags/v}"
MOD_VERSION=$(grep -oP "version: '\\K[^\"]+" v.mod)
if [ "$TAG" != "$MOD_VERSION" ]; then
echo "::error::Tag version (v${TAG}) does not match v.mod version (${MOD_VERSION})"
exit 1
fi
echo "Version check passed: v${TAG}"
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Prepare release assets
run: |
mkdir -p release
for dir in artifacts/*/; do
name=$(basename "$dir")
cp "$dir"/* release/"$name"
chmod +x release/"$name"
done
ls -lh release/
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
files: release/*