name: Test Release
permissions:
contents: write
on:
release:
types: [created]
workflow_dispatch:
inputs:
test_mode:
description: 'Run in test mode (skips actual release creation)'
type: boolean
default: true
test_version:
description: 'Test version number (e.g., 0.0.0-test)'
type: string
default: '0.0.0-test'
jobs:
create-release:
runs-on: ubuntu-latest
if: ${{ !inputs.test_mode }}
steps:
- uses: actions/checkout@v4
- uses: taiki-e/create-gh-release-action@v1
with:
changelog: CHANGELOG.md
token: ${{ secrets.GITHUB_TOKEN }}
test-release:
runs-on: ubuntu-latest
if: ${{ inputs.test_mode }}
steps:
- uses: actions/checkout@v4
- name: Simulate release creation
run: |
echo "Testing release process for version ${{ inputs.test_version }}"
echo "Checking CHANGELOG.md exists"
test -f CHANGELOG.md || (echo "CHANGELOG.md not found" && exit 1)
upload-assets:
needs: [create-release, test-release]
if: ${{ always() && (needs.create-release.result == 'success' || needs.test-release.result == 'success') }}
strategy:
matrix:
include:
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
- target: x86_64-apple-darwin
os: macos-latest
- target: x86_64-pc-windows-msvc
os: windows-latest
- target: aarch64-unknown-linux-musl
os: ubuntu-latest
- target: aarch64-apple-darwin
os: macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Install Linux dependencies
if: contains(matrix.os, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install -y musl-tools pkg-config gcc-aarch64-linux-gnu
wget https://ziglang.org/download/0.13.0/zig-linux-x86_64-0.13.0.tar.xz
tar xf zig-linux-x86_64-0.13.0.tar.xz
echo "$PWD/zig-linux-x86_64-0.13.0" >> $GITHUB_PATH
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: ${{ matrix.target }}
override: true
- name: Install cargo-zigbuild (Linux)
if: contains(matrix.target, 'linux-musl')
run: cargo install cargo-zigbuild
- name: Build (Linux musl)
if: contains(matrix.target, 'linux-musl')
run: |
zig version
cargo zigbuild --target ${{ matrix.target }} --release
- name: Build (non-Linux)
if: "!contains(matrix.target, 'linux-musl')"
uses: actions-rs/cargo@v1
with:
command: build
args: --target ${{ matrix.target }} --release
- name: Test
if: "!contains(matrix.target, 'aarch64') && matrix.target != 'universal-apple-darwin'"
uses: actions-rs/cargo@v1
with:
command: test
args: --target ${{ matrix.target }}
- uses: taiki-e/upload-rust-binary-action@v1
if: ${{ !inputs.test_mode }}
with:
bin: shuk
target: ${{ matrix.target }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Package binary (Test Mode)
if: ${{ inputs.test_mode }}
run: |
cd target/${{ matrix.target }}/release
tar czf ../../../shuk-${{ matrix.target }}.tar.gz shuk*
cd ../../..
shell: bash
- name: Upload artifact (Test Mode)
if: ${{ inputs.test_mode }}
uses: actions/upload-artifact@v3
with:
name: shuk-${{ matrix.target }}
path: shuk-${{ matrix.target }}.tar.gz