mirror of
https://github.com/saymrwulf/anza-cryptography-source.git
synced 2026-09-04 20:24:04 +00:00
* refactor and merge curve and ed crates * fmt * ci * fmt again * ci * Update bench.rs * fix ubuntu * CI for crate release * Update README.md
216 lines
6.4 KiB
YAML
216 lines
6.4 KiB
YAML
name: Publish Crate
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
package_path:
|
|
description: Path to directory with package to release
|
|
required: true
|
|
type: string
|
|
level:
|
|
description: Level
|
|
required: true
|
|
default: patch
|
|
type: choice
|
|
options:
|
|
- patch
|
|
- minor
|
|
- major
|
|
- version
|
|
version:
|
|
description: Version (used with level "version")
|
|
required: false
|
|
type: string
|
|
dry_run:
|
|
description: Dry run
|
|
required: true
|
|
default: true
|
|
type: boolean
|
|
create_release:
|
|
description: Create a GitHub release
|
|
required: true
|
|
type: boolean
|
|
default: true
|
|
dependent_version:
|
|
description: |
|
|
How workspace dependencies should be handled.
|
|
- "fix": (Default) Only bumps the workspace for semver-breakage - prefer this option
|
|
- "upgrade": Bumps workspace version regardless - only use if another crate requires new code
|
|
required: true
|
|
default: fix
|
|
type: choice
|
|
options:
|
|
- fix
|
|
- upgrade
|
|
run_semver:
|
|
description: |
|
|
Run semver checks.
|
|
Only disable checks if you are sure of the semver impact of your change and have a good reason
|
|
to skip it.
|
|
required: true
|
|
type: boolean
|
|
default: true
|
|
|
|
jobs:
|
|
format:
|
|
name: Format
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Git Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@nightly
|
|
with:
|
|
components: rustfmt
|
|
|
|
- name: Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Check formatting
|
|
run: cargo fmt --all -- --check
|
|
|
|
clippy:
|
|
name: Clippy
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Git Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
components: clippy
|
|
|
|
- name: Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Run clippy
|
|
run: cargo clippy --workspace --all-targets -- -D warnings
|
|
|
|
semver:
|
|
name: Check Semver
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Git checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Install tools
|
|
uses: taiki-e/install-action@v2
|
|
with:
|
|
tool: toml-cli,cargo-semver-checks,cargo-release
|
|
|
|
- name: Check if crate is a procedural macro
|
|
id: is_proc_macro
|
|
shell: bash
|
|
run: |
|
|
set +e # toml crashes the whole shell if it fails to find the key
|
|
result=$(toml get "${{ inputs.package_path }}/Cargo.toml" lib.proc-macro)
|
|
if [[ "$result" == *"true"* ]]; then
|
|
echo "is_proc_macro=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "is_proc_macro=false" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Set Git Author (required for cargo-release)
|
|
if: ${{ steps.is_proc_macro.outputs.is_proc_macro == 'false' }}
|
|
run: |
|
|
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
git config --global user.name "github-actions[bot]"
|
|
|
|
- name: Set Version
|
|
if: ${{ steps.is_proc_macro.outputs.is_proc_macro == 'false' }}
|
|
run: |
|
|
if [ "${{ inputs.level }}" == "version" ]; then
|
|
LEVEL=${{ inputs.version }}
|
|
else
|
|
LEVEL=${{ inputs.level }}
|
|
fi
|
|
cargo release $LEVEL --manifest-path "${{ inputs.package_path }}/Cargo.toml" --no-tag --no-publish --no-push --no-confirm --execute
|
|
|
|
- name: Check semver
|
|
if: ${{ steps.is_proc_macro.outputs.is_proc_macro == 'false' && github.event.inputs.run_semver == 'true'}}
|
|
run: cargo semver-checks --manifest-path "${{ inputs.package_path }}/Cargo.toml"
|
|
|
|
publish-crate:
|
|
name: Publish crate
|
|
runs-on: ubuntu-latest
|
|
needs: [format, clippy, semver]
|
|
permissions:
|
|
contents: write
|
|
steps:
|
|
- name: Git Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.ANZA_TEAM_PAT }}
|
|
fetch-depth: 0 # get the whole history for git-cliff
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Install cargo-release
|
|
uses: taiki-e/install-action@v2
|
|
with:
|
|
tool: cargo-release
|
|
|
|
- name: Ensure CARGO_REGISTRY_TOKEN variable is set
|
|
env:
|
|
token: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
|
if: ${{ env.token == '' }}
|
|
run: |
|
|
echo "The CARGO_REGISTRY_TOKEN secret variable is not set"
|
|
echo "Go to \"Settings\" -> \"Secrets and variables\" -> \"Actions\" -> \"New repository secret\"."
|
|
exit 1
|
|
|
|
- name: Set Git Author
|
|
run: |
|
|
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
git config --global user.name "github-actions[bot]"
|
|
|
|
- name: Rebase (in case any changes landed after)
|
|
run: git pull --rebase origin
|
|
|
|
- name: Publish Crate
|
|
id: publish
|
|
env:
|
|
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
|
run: |
|
|
if [ "${{ inputs.level }}" == "version" ]; then
|
|
LEVEL=${{ inputs.version }}
|
|
else
|
|
LEVEL=${{ inputs.level }}
|
|
fi
|
|
|
|
if [ "${{ inputs.dry_run }}" == "true" ]; then
|
|
OPTIONS="--dry-run"
|
|
else
|
|
OPTIONS=""
|
|
fi
|
|
|
|
./scripts/publish-rust.sh "${{ inputs.package_path }}" $LEVEL "${{ inputs.dependent_version }}" $OPTIONS
|
|
|
|
- name: Generate a changelog
|
|
if: github.event.inputs.create_release == 'true'
|
|
uses: orhun/git-cliff-action@v4
|
|
with:
|
|
config: "scripts/cliff.toml"
|
|
args: ${{ steps.publish.outputs.old_git_tag }}..HEAD --include-path "${{ inputs.package_path }}/**" --github-repo ${{ github.repository }}
|
|
env:
|
|
OUTPUT: TEMP_CHANGELOG.md
|
|
GITHUB_REPO: ${{ github.repository }}
|
|
|
|
- name: Create GitHub release
|
|
if: github.event.inputs.create_release == 'true' && github.event.inputs.dry_run != 'true'
|
|
uses: ncipollo/release-action@v1
|
|
with:
|
|
tag: ${{ steps.publish.outputs.new_git_tag }}
|
|
bodyFile: TEMP_CHANGELOG.md
|