name: Release
on:
pull_request:
types: [closed]
branches: [main]
env:
CARGO_TERM_COLOR: always
jobs:
publish:
name: Publish to crates.io
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Check if version changed
id: version
run: |
set -euo pipefail
CURRENT=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')
# Fetch the latest published version from crates.io API
PUBLISHED=$(
curl -fsSL "https://crates.io/api/v1/crates/reqwest-proxy-pool" \
| jq -r '.crate.max_version // "0.0.0"' \
|| echo "0.0.0"
)
if [ -z "$PUBLISHED" ] || [ "$PUBLISHED" = "null" ]; then
PUBLISHED="0.0.0"
fi
echo "current=$CURRENT" >> "$GITHUB_OUTPUT"
echo "published=$PUBLISHED" >> "$GITHUB_OUTPUT"
if [ "$CURRENT" != "$PUBLISHED" ]; then
echo "changed=true" >> "$GITHUB_OUTPUT"
else
echo "changed=false" >> "$GITHUB_OUTPUT"
fi
- name: Publish
if: steps.version.outputs.changed == 'true'
run: |
output=$(cargo publish --token "${{ secrets.CARGO_REGISTRY_TOKEN }}" 2>&1) && echo "$output" || {
echo "$output"
echo "$output" | grep -q "already uploaded" && echo "Version already published, skipping." || exit 1
}