name: Publish crates.io
on:
workflow_call:
inputs:
plan:
required: true
type: string
permissions:
contents: read
jobs:
cargo-publish:
runs-on: ubuntu-22.04
steps:
- name: Check out repository
uses: actions/checkout@v6
with:
persist-credentials: false
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Publish crate
shell: bash
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_TOKEN }}
run: |
set -euo pipefail
version="$(
cargo metadata --no-deps --format-version=1 |
jq -r '.packages[] | select(.name == "sloop-daemon") | .version'
)"
test -n "$version"
status="$(
curl --silent --show-error \
--header "User-Agent: sloop release workflow (https://github.com/hamish-mackie/sloop)" \
--output "$RUNNER_TEMP/crates-io-response.json" \
--write-out '%{http_code}' \
"https://crates.io/api/v1/crates/sloop-daemon/$version"
)"
case "$status" in
200)
echo "sloop-daemon $version is already published"
;;
404)
cargo publish --locked -p sloop-daemon
;;
*)
cat "$RUNNER_TEMP/crates-io-response.json"
exit 1
;;
esac