---
name: CI and Release
permissions:
contents: write
packages: write
"on":
push:
branches:
- "**"
tags:
- "v*.*.*"
jobs:
checks:
name: Code Checks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Cache Cargo registry
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Rustfmt check
run: cargo fmt --all -- --check
- name: Clippy lint
run: cargo clippy --all -- -D warnings
- name: Run tests
run: cargo test --all
release:
name: Release Build & Package
if: startsWith(github.ref, 'refs/tags/v')
needs: checks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Install packaging tools
run: |
cargo install cargo-deb --locked
- name: Build Release
run: cargo build --release
- name: Build Debian package
run: cargo deb --no-strip
- name: Find Debian package
run: echo "DEB_PATH=target/debian/$(ls target/debian/*.deb | xargs -n1 basename)" >> $GITHUB_ENV
- name: Create Release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
name: Release ${{ github.ref }}
draft: false
prerelease: false
files: |
target/release/markdown-tool
${{ env.DEB_PATH }}