Last fixes #1
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Deploy | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: Pass the version | |
required: true | |
type: string | |
release_info: | |
description: Information about release | |
required: true | |
type: string | |
dry_run: | |
description: Perform test without releasing | |
type: choice | |
required: true | |
default: "true" | |
options: | |
- "true" | |
- "false" | |
push: | |
tags: | |
- "[0-9]+.[0-9]+.[0-9]+" | |
permissions: | |
contents: write | |
jobs: | |
setup: | |
name: Prepare job settings | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.setup.outputs.version }} | |
dry_run: ${{ steps.setup.outputs.dry_run }} | |
info: ${{ steps.setup.outputs.info }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
if: ${{ github.event_name == 'push' }} | |
- name: Get the release version from the tag and info from commit | |
id: version_push | |
shell: bash | |
if: ${{ github.event_name == 'push' }} | |
run: | | |
echo version=${GITHUB_REF#refs/tags/} >> $GITHUB_OUTPUT | |
echo info=$(git tag -l --format='%(contents)' ${GITHUB_REF#refs/tags/}) >> $GITHUB_OUTPUT | |
- name: Get the release version from the input | |
id: version_dispatch | |
shell: bash | |
if: ${{ github.event_name == 'workflow_dispatch' }} | |
run: | | |
echo | |
echo version=$(echo ${{ inputs.version }} | xargs) >> $GITHUB_OUTPUT | |
echo dry_run=$(echo ${{ inputs.dry_run }} | xargs) >> $GITHUB_OUTPUT | |
echo info="${{ inputs.release_info }}" >> $GITHUB_OUTPUT | |
- name: Setup | |
id: setup | |
shell: bash | |
run: | | |
echo version=$(if [ -n "${{ steps.version_dispatch.outputs.version }}" ]; then echo "${{ steps.version_dispatch.outputs.version }}"; else echo "${{ steps.version_push.outputs.version }}"; fi) >> $GITHUB_OUTPUT | |
echo dry_run=$(if [ -n "${{ steps.version_dispatch.outputs.dry_run }}" ]; then echo "${{ steps.version_dispatch.outputs.dry_run }}"; else echo "false"; fi) >> $GITHUB_OUTPUT | |
echo info=$(if [ -n "${{ steps.version_dispatch.outputs.info }}" ]; then echo "${{ steps.version_dispatch.outputs.info }}"; else echo "${{ steps.version_push.outputs.info }}"; fi) >> $GITHUB_OUTPUT | |
- name: Display settings | |
shell: bash | |
run: echo "Version ${{ steps.setup.outputs.version }}, Dry run- ${{ steps.setup.outputs.dry_run }}, info- ${{ steps.setup.outputs.info }}" | |
- name: Validate input | |
shell: bash | |
run: | | |
if [ -z "${{ steps.setup.outputs.version }}" ]; then exit 1; fi; | |
if [ -z "${{ steps.setup.outputs.dry_run }}" ]; then exit 1; fi; | |
if [ -z "${{ steps.setup.outputs.info }}" ]; then exit 1; fi; | |
if [[ "${{ steps.setup.outputs.version }}" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+).*?$ ]]; then echo "Valid version"; else echo "INVALID VERSION FORMAT!";exit 1; fi; | |
build-and-upload: | |
name: Build and upload | |
needs: | |
- setup | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
include: | |
- build: linux | |
os: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ github.ref || github.run_id }} | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- name: Build | |
uses: actions-rs/cargo@v1 | |
with: | |
use-cross: true | |
command: build | |
args: --verbose --release --target ${{ matrix.target }} | |
- name: Extract changelog content | |
id: extract_changelog | |
shell: bash | |
run: | | |
version="${{ needs.setup.outputs.version }}" | |
echo "${{ needs.setup.outputs.info }}" > changelog_output.txt | |
awk "/^## \\[$version\\]/ {flag=1; next} /^## \\[/ && flag {flag=0} flag" CHANGELOG.md >> changelog_output.txt | |
- name: Display extracted content | |
run: cat changelog_output.txt | |
- name: Release | |
if: ${{ needs.setup.outputs.dry_run == 'false'}} | |
uses: softprops/action-gh-release@v2 | |
with: | |
body_path: changelog_output.txt | |
deploy-to-crates-io: | |
needs: | |
- setup | |
- build-and-upload | |
name: Deploy to crates.io | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ github.ref || github.run_id }} | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: taiki-e/cache-cargo-install-action@v2 | |
with: | |
tool: cargo-release | |
- name: cargo publish dry run | |
if: ${{ needs.setup.outputs.dry_run == 'true'}} | |
run: cargo publish --dry-run | |
- name: cargo login | |
run: cargo login ${{ secrets.CRATES_IO_TOKEN }} | |
- name: "cargo release publish" | |
if: ${{ needs.setup.outputs.dry_run == 'false'}} | |
run: |- | |
cargo release \ | |
publish \ | |
--workspace \ | |
--all-features \ | |
--allow-branch HEAD \ | |
--no-confirm \ | |
--no-verify \ | |
--execute |