mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-24 10:08:00 -06:00
The org has 5 macOS slots in total (GitHub Team), shared by every repo's CI and release builds, and PR CI kept them full, so release builds queued behind it. macOS now runs only in release.yml; a release that fails on macOS is fixed and rebuilt. Co-authored-by: Brandon Thomas <shared2@storyteller.ai> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
129 lines
3.6 KiB
YAML
129 lines
3.6 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
workflow_dispatch:
|
|
schedule:
|
|
- cron: "17 3 * * *" # nightly fuzzing
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
RUST_BACKTRACE: 1
|
|
|
|
concurrency:
|
|
group: ci-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
test:
|
|
name: test (${{ matrix.os }})
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
# No macOS on PRs, main or nightly: the org's 5 macOS slots are kept for release builds,
|
|
# and release.yml builds macOS (a failing release is fixed and rebuilt).
|
|
os: [ubuntu-latest, windows-latest]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
# The optional craft-fonts build input (Japanese fonts), so the Japanese font tests run on
|
|
# Linux; Windows tests the build without it. See craftrules standards/fonts.md.
|
|
- name: Check out craft-fonts (Linux)
|
|
if: runner.os == 'Linux'
|
|
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
with:
|
|
repository: storytold/craft-fonts
|
|
ref: abb83316d96aa59c1cf64784289e378fe9fa5695
|
|
path: craft-fonts
|
|
|
|
- name: Install Linux system dependencies (egui/winit/rfd)
|
|
if: runner.os == 'Linux'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends \
|
|
libxkbcommon-dev libwayland-dev libx11-dev libxrandr-dev libxi-dev \
|
|
libgl1-mesa-dev libgtk-3-dev
|
|
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
components: clippy, rustfmt
|
|
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Format
|
|
if: runner.os == 'Linux'
|
|
run: cargo fmt --all -- --check
|
|
|
|
- name: Clippy
|
|
run: cargo clippy --workspace --all-targets -- -D warnings
|
|
|
|
- name: Test
|
|
if: runner.os != 'Linux'
|
|
run: cargo test --workspace
|
|
|
|
- name: Test (with craft-fonts)
|
|
if: runner.os == 'Linux'
|
|
env:
|
|
CRAFT_FONTS_DIR: ${{ github.workspace }}/craft-fonts
|
|
CRAFT_FONTS_REQUIRED: "1"
|
|
run: cargo test --workspace
|
|
|
|
- name: Layering
|
|
run: cargo xtask layers
|
|
|
|
- name: Assets (licences and attribution)
|
|
if: runner.os == 'Linux'
|
|
run: cargo xtask assets
|
|
|
|
- name: CLI without the MCP server still builds
|
|
if: runner.os == 'Linux'
|
|
run: cargo check -p pdfcraft-cli --no-default-features
|
|
|
|
wasm:
|
|
name: wasm32 check
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
targets: wasm32-unknown-unknown
|
|
- uses: Swatinem/rust-cache@v2
|
|
with:
|
|
key: wasm32
|
|
- name: Check library crates for wasm32
|
|
run: cargo xtask wasm
|
|
|
|
deny:
|
|
name: dependency licences and advisories
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: EmbarkStudios/cargo-deny-action@v2
|
|
with:
|
|
command: check
|
|
|
|
fuzz:
|
|
name: fuzz (mutation, 15 min)
|
|
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
- uses: Swatinem/rust-cache@v2
|
|
with:
|
|
key: fuzz
|
|
- name: Fetch the pdf.js corpus (seeds)
|
|
run: cargo xtask corpus
|
|
- name: Fuzz
|
|
run: cargo xtask fuzz --time 900 --seed ${{ github.run_number }}
|
|
- name: Upload findings
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: fuzz-findings
|
|
path: fuzz-out/findings
|
|
if-no-files-found: ignore
|