name: Release
on:
push:
tags:
- 'v*.*.*'
env:
REGISTRY: ghcr.io
RUST_IMAGE: ghcr.io/angzarr-io/angzarr-rust:latest
permissions:
contents: write
packages: read
jobs:
release:
name: Release to crates.io
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Verify version matches tag
run: |
CARGO_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/')
TAG_VERSION=${GITHUB_REF#refs/tags/v}
if [ "$CARGO_VERSION" != "$TAG_VERSION" ]; then
echo "ERROR: Cargo.toml version ($CARGO_VERSION) does not match tag ($TAG_VERSION)"
exit 1
fi
- name: Install buf CLI
uses: bufbuild/buf-action@v1
with:
setup_only: true
- name: Export protos from Buf registry
env:
BUF_TOKEN: ${{ secrets.BUF_TOKEN }}
run: |
mkdir -p proto
buf export buf.build/angzarr/angzarr -o proto
- name: Build
run: |
docker run --rm \
-v "${{ github.workspace }}:/workspace" \
-w /workspace \
-e ANGZARR_PROTO_ROOT=/workspace/proto \
${{ env.RUST_IMAGE }} \
cargo build --release
- name: Test
run: |
docker run --rm \
-v "${{ github.workspace }}:/workspace" \
-w /workspace \
-e ANGZARR_PROTO_ROOT=/workspace/proto \
${{ env.RUST_IMAGE }} \
cargo test --lib
- name: Publish angzarr-macros to crates.io
run: |
docker run --rm \
-v "${{ github.workspace }}:/workspace" \
-w /workspace/angzarr-macros \
-e CARGO_REGISTRY_TOKEN=${{ secrets.CARGO_REGISTRY_TOKEN }} \
${{ env.RUST_IMAGE }} \
cargo publish || echo "macros already published or failed"
- name: Wait for crates.io index update
run: sleep 30
- name: Publish angzarr-client to crates.io
run: |
docker run --rm \
-v "${{ github.workspace }}:/workspace" \
-w /workspace \
-e ANGZARR_PROTO_ROOT=/workspace/proto \
-e CARGO_REGISTRY_TOKEN=${{ secrets.CARGO_REGISTRY_TOKEN }} \
${{ env.RUST_IMAGE }} \
cargo publish --allow-dirty