upvoters/.forgejo/workflows/publish.yml

68 lines
1.9 KiB
YAML
Raw Normal View History

2026-03-19 14:59:31 -04:00
name: Publish Cargo Package
on:
push:
tags:
- "v*"
workflow_dispatch:
jobs:
publish:
2026-03-19 15:13:48 -04:00
runs-on: ubuntu-22.04
2026-03-19 14:59:31 -04:00
env:
CARGO_TERM_COLOR: always
CARGO_REGISTRIES_FORGEJO_TOKEN: Bearer ${{ secrets.FORGEJO_CARGO_TOKEN }}
FORGEJO_CARGO_INDEX: ${{ github.server_url }}/${{ github.repository_owner }}/_cargo-index.git
steps:
- name: Check out repository
uses: https://data.forgejo.org/actions/checkout@v4
- name: Install Rust
run: |
if ! command -v cargo >/dev/null 2>&1; then
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
fi
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
. "$HOME/.cargo/env"
rustup toolchain install stable --profile minimal
rustup default stable
cargo --version
- name: Configure Cargo registry
run: |
mkdir -p "$HOME/.cargo"
cat > "$HOME/.cargo/config.toml" <<EOF
[registries.forgejo]
index = "${FORGEJO_CARGO_INDEX}"
[net]
git-fetch-with-cli = true
EOF
- name: Verify tag matches package version
if: startsWith(github.ref, 'refs/tags/v')
run: |
version=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -n1)
tag="${GITHUB_REF_NAME#v}"
if [ -z "$version" ]; then
echo "Could not determine package version from Cargo.toml"
exit 1
fi
if [ "$version" != "$tag" ]; then
echo "Tag version ($tag) does not match Cargo.toml version ($version)"
exit 1
fi
- name: Check package can be published
run: |
. "$HOME/.cargo/env"
cargo publish --dry-run --locked --registry forgejo
- name: Publish package
run: |
. "$HOME/.cargo/env"
cargo publish --locked --registry forgejo