name: Release
on:
push:
tags:
- "v*"
workflow_dispatch:
permissions:
contents: write
env:
CARGO_TERM_COLOR: always
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
jobs:
build:
name: Build ${{ matrix.target }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-apple-darwin
os: macos-15
- target: aarch64-apple-darwin
os: macos-15
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
- target: aarch64-unknown-linux-gnu
os: ubuntu-24.04-arm
- target: x86_64-pc-windows-msvc
os: windows-latest
steps:
- uses: actions/checkout@v6
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Cache cargo
uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.target }}
- name: Install cargo-nextest
if: matrix.target == 'x86_64-pc-windows-msvc'
id: install-nextest
continue-on-error: true
uses: taiki-e/install-action@nextest
- name: Run Windows tests (with nextest)
if: matrix.target == 'x86_64-pc-windows-msvc' && steps.install-nextest.outcome == 'success'
continue-on-error: true
run: cargo nextest run --lib --bins
- name: Run Windows tests (fallback)
if: matrix.target == 'x86_64-pc-windows-msvc' && steps.install-nextest.outcome != 'success'
continue-on-error: true
run: cargo test --lib --bins
- name: Build
run: cargo build --release --target ${{ matrix.target }} --features vendored-openssl
- name: Package (Unix)
if: matrix.target != 'x86_64-pc-windows-msvc'
run: |
cd target/${{ matrix.target }}/release
tar czf ../../../stax-${{ matrix.target }}.tar.gz stax st
cd ../../..
- name: Package (Windows)
if: matrix.target == 'x86_64-pc-windows-msvc'
shell: pwsh
run: |
Compress-Archive -Path "target/${{ matrix.target }}/release/stax.exe","target/${{ matrix.target }}/release/st.exe" -DestinationPath "stax-${{ matrix.target }}.zip"
- name: Upload artifact
uses: actions/upload-artifact@v7
with:
name: stax-${{ matrix.target }}
path: stax-${{ matrix.target }}.*
release:
name: Release
needs: build
if: always() && needs.build.result != 'cancelled'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Download all artifacts
uses: actions/download-artifact@v8
with:
path: artifacts
merge-multiple: true
- name: List artifacts
run: ls -la artifacts/
- name: Create GitHub Release
uses: softprops/action-gh-release@v3
with:
files: artifacts/*
generate_release_notes: true
- name: Compute checksums
run: |
cd artifacts
echo "ARM_SHA=$(sha256sum stax-aarch64-apple-darwin.tar.gz | cut -d' ' -f1)" >> $GITHUB_ENV
echo "INTEL_SHA=$(sha256sum stax-x86_64-apple-darwin.tar.gz | cut -d' ' -f1)" >> $GITHUB_ENV
echo "LINUX_SHA=$(sha256sum stax-x86_64-unknown-linux-gnu.tar.gz | cut -d' ' -f1)" >> $GITHUB_ENV
echo "LINUX_ARM_SHA=$(sha256sum stax-aarch64-unknown-linux-gnu.tar.gz | cut -d' ' -f1)" >> $GITHUB_ENV
- name: Checkout Homebrew tap
uses: actions/checkout@v6
with:
repository: cesarferreira/homebrew-tap
token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
path: tap
- name: Update formula
env:
VERSION: ${{ github.ref_name }}
run: |
CLEAN_VERSION=${VERSION#v}
FORMULA=tap/Formula/stax.rb
sed -i "s/version \".*\"/version \"$CLEAN_VERSION\"/" $FORMULA
sed -i "s|releases/download/v[^/]*/stax-|releases/download/$VERSION/stax-|g" $FORMULA
sed -i "s/sha256 \"[a-f0-9]\{64\}\"/sha256 \"PLACEHOLDER\"/g" $FORMULA
sed -i "0,/PLACEHOLDER/s/PLACEHOLDER/$ARM_SHA/" $FORMULA
sed -i "0,/PLACEHOLDER/s/PLACEHOLDER/$INTEL_SHA/" $FORMULA
sed -i "0,/PLACEHOLDER/s/PLACEHOLDER/$LINUX_ARM_SHA/" $FORMULA
sed -i "0,/PLACEHOLDER/s/PLACEHOLDER/$LINUX_SHA/" $FORMULA
- name: Commit and push tap
env:
VERSION: ${{ github.ref_name }}
run: |
cd tap
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add Formula/stax.rb
git commit -m "stax $VERSION"
git push