markdown-tool 2.1.1

A CLI utility for converting Markdown into AST and vice versa
---
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 }}