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