name: CI
on:
push:
branches: ["**"]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
jobs:
quality:
name: Quality
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: rustfmt, clippy
- name: Format check
run: cargo fmt --check
- name: Clippy
run: cargo clippy --workspace -- -D warnings
- name: Markdown lint
uses: DavidAnson/markdownlint-cli2-action@v24
with:
globs: "**/*.md"
ignore: target node_modules .worktrees
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Build
run: cargo build --locked
- name: Test
run: cargo test --locked
build-binaries:
name: Build (${{ matrix.target }})
if: github.ref_type == 'tag'
strategy:
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
- target: x86_64-apple-darwin
os: macos-latest
- target: aarch64-apple-darwin
os: macos-latest
- target: x86_64-pc-windows-msvc
os: windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
target: ${{ matrix.target }}
- name: Build release
run: cargo build --release --locked --target ${{ matrix.target }}
- name: Upload artifact
uses: actions/upload-artifact@v7
with:
name: carryctx-${{ matrix.target }}
path: target/${{ matrix.target }}/release/carryctx${{ runner.os == 'Windows' && '.exe' || '' }}
actionlint:
name: Actionlint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: docker://rhysd/actionlint:1.7.12
with:
args: -color -shellcheck=