backlogr 0.5.0

CLI for interacting with the Taiga REST API
Documentation
name: CI
on:
  push:
    branches:
      - main
    tags:
      - "*"
  pull_request:

permissions:
  contents: write

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  fmt:
    runs-on: ubuntu-latest
    name: stable
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: true

      - name: Install stable
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt

      - name: cargo fmt --check
        run: cargo fmt --check

  clippy:
    runs-on: ubuntu-latest
    name: clippy
    permissions:
      contents: read
      checks: write
    strategy:
      fail-fast: false
      matrix:
        toolchain: [stable]
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: true
      - name: Install ${{ matrix.toolchain }}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}
          components: clippy
      - name: cargo clippy
        uses: giraffate/clippy-action@v1
        with:
          reporter: 'github-pr-check'
          github_token: ${{ secrets.GITHUB_TOKEN }}

  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        toolchain: [stable]
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: true
      - name: Install ${{ matrix.toolchain }}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}

      - name: Add musl target
        run: rustup target add x86_64-unknown-linux-musl

      - name: Install musl tools
        run: sudo apt-get update -y && sudo apt-get install -y musl-tools

      - name: cargo generate-lockfile
        if: hashFiles('Cargo.lock') == ''
        run: cargo generate-lockfile

      - name: cargo test --locked
        run: cargo test --locked --all-features --all-targets

  release:
    name: Release
    if: startsWith(github.ref, 'refs/tags/')
    needs: [test, clippy, fmt]
    runs-on: ubuntu-latest
    env:
      TARGET: x86_64-unknown-linux-musl
      BIN: backlogr
      TOOLCHAIN: stable
    steps:
      - name: checkout
        uses: actions/checkout@v4

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ env.TOOLCHAIN }}

      - name: Add musl target
        run: rustup target add ${{ env.TARGET }}

      - name: Install musl tools
        run: sudo apt-get update -y && sudo apt-get install -y musl-tools

      - uses: Swatinem/rust-cache@v2

      - run: cargo fetch --target ${{ env.TARGET }}

      - name: Build
        run: cargo build --release --target ${{ env.TARGET }}

      - name: Package
        run: |
          name=${{ env.BIN }}
          tag=$(git describe --tags --abbrev=0)
          release_name="$name-$tag-${{ env.TARGET }}"
          release_tar="${release_name}.tar.gz"
          mkdir "$release_name"
          binary="target/${{ env.TARGET }}/release/${{ env.BIN }}"
          strip "$binary"
          cp "$binary" "$release_name/"
          cp README.md LICENSE* "$release_name/" || true
          tar czvf "$release_tar" "$release_name"
          echo -n "$(shasum -ba 256 "${release_tar}" | cut -d " " -f 1)" > "${release_tar}.sha256"

      - name: Release
        uses: softprops/action-gh-release@v2
        with:
          draft: true
          files: |
            backlogr-*.tar.gz
            backlogr-*.tar.gz.sha256