name: Publish Crate
on:
push:
tags: ["v*.*.*"]
env:
REGISTRY: git.average.name
IMAGE_NAME: ${{ gitea.repository }}
jobs:
build-and-push-crate:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- name: Install rustup
run: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
- name: Setup Rust toolchain
run: |
. "$HOME/.cargo/env"
rustup update stable && rustup default stable
- name: Build
run: |
. "$HOME/.cargo/env"
cargo build --locked --verbose --release
- name: Test
run: |
. "$HOME/.cargo/env"
cargo test --locked --verbose --release
- name: Log in to container registry
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567
with:
registry: ${{ env.REGISTRY }}
username: ${{ gitea.actor }}
password: ${{ secrets.PACKAGES_TOKEN }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha
- name: Build and push Docker image
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- name: Publish crate to Forgejo
run: |
. "$HOME/.cargo/env"
cargo publish --locked --verbose --index "$REGISTRY_INDEX" --token "$PACKAGES_TOKEN"
env:
REGISTRY_INDEX: sparse+${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/cargo/
PACKAGES_TOKEN: "Bearer ${{ secrets.PACKAGES_TOKEN }}"
- name: Publish crate to crates.io
run: |
. "$HOME/.cargo/env"
cargo publish --locked --verbose --registry crates-io --token "$PACKAGES_TOKEN"
env:
PACKAGES_TOKEN: "${{ secrets.PACKAGES_TOKEN_CRATES_IO }}"