Commit 1a14e2e3ee
Verified · cmc
Layout: unified · split
.github/workflows/ci.yml deleted −111
| @@ -1,111 +0,0 @@ | ||
| 1 | name: CI | |
| 2 | ||
| 3 | # Build, test and lint on both platforms orgo is used from, plus a compiler-floor job. | |
| 4 | # | |
| 5 | # WHAT THIS CATCHES THAT LOCAL WORK DOES NOT: | |
| 6 | # | |
| 7 | # 1. Linux. Development happens on macOS, and the two differ where this project is most | |
| 8 | # likely to break: filesystem event paths (the watcher had a real `/var` vs | |
| 9 | # `/private/var` bug on macOS), case-insensitive filenames, and path separators. | |
| 10 | # 2. A clean checkout. The oracle tests skip when Emacs is absent and the cache is | |
| 11 | # gitignored, so a machine that has been building all afternoon is not a fair test of | |
| 12 | # what a fresh clone does. | |
| 13 | # 3. The MSRV. A stabilised API used without noticing is invisible on a current | |
| 14 | # toolchain and is a build failure for anyone on a distribution compiler. | |
| 15 | # | |
| 16 | # NOT GATED ON `cargo fmt`. The source is formatted by hand — comment tables, aligned | |
| 17 | # match arms, and prose wrapped to fit the argument being made — and rustfmt disagrees | |
| 18 | # with most of it. Clippy is the lint that catches defects; fmt would only catch taste. | |
| 19 | ||
| 20 | on: | |
| 21 | push: | |
| 22 | branches: [main] | |
| 23 | pull_request: | |
| 24 | workflow_dispatch: | |
| 25 | ||
| 26 | env: | |
| 27 | CARGO_TERM_COLOR: always | |
| 28 | # A failing build should print the error, not a backtrace-shaped wall. | |
| 29 | RUST_BACKTRACE: 1 | |
| 30 | ||
| 31 | jobs: | |
| 32 | test: | |
| 33 | name: test (${{ matrix.os }}) | |
| 34 | runs-on: ${{ matrix.os }} | |
| 35 | strategy: | |
| 36 | # Both platforms report, so a macOS-only failure is distinguishable from a real one. | |
| 37 | fail-fast: false | |
| 38 | matrix: | |
| 39 | os: [ubuntu-latest, macos-latest] | |
| 40 | steps: | |
| 41 | - name: Checkout | |
| 42 | uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| 43 | ||
| 44 | - name: Install Rust | |
| 45 | uses: dtolnay/rust-toolchain@1ff72ee08e3cb84d84adba594e0a297990fc1ed3 # stable | |
| 46 | with: | |
| 47 | toolchain: stable | |
| 48 | components: clippy | |
| 49 | ||
| 50 | - name: Cache cargo | |
| 51 | uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | |
| 52 | ||
| 53 | # Emacs makes the oracle suite run for real instead of skipping. It is the only | |
| 54 | # reason to trust that output still matches org's own exporter, so it is worth the | |
| 55 | # install minute. | |
| 56 | - name: Install Emacs (Linux) | |
| 57 | if: runner.os == 'Linux' | |
| 58 | run: sudo apt-get update && sudo apt-get install -y --no-install-recommends emacs-nox | |
| 59 | ||
| 60 | - name: Install Emacs (macOS) | |
| 61 | if: runner.os == 'macOS' | |
| 62 | run: brew install emacs | |
| 63 | ||
| 64 | - name: Build | |
| 65 | run: cargo build --all-targets --locked | |
| 66 | ||
| 67 | - name: Test | |
| 68 | run: cargo test --locked | |
| 69 | ||
| 70 | - name: Clippy | |
| 71 | run: cargo clippy --all-targets --locked -- -D warnings | |
| 72 | ||
| 73 | # `cargo package` builds the crate exactly as crates.io will receive it, which is | |
| 74 | # how an `exclude` that drops a file the tests need, or a `readme` pointing at a | |
| 75 | # file that was renamed, gets caught here rather than during a release. | |
| 76 | - name: Package | |
| 77 | if: runner.os == 'Linux' | |
| 78 | run: cargo package --locked | |
| 79 | ||
| 80 | # The documentation site is built by the tool it documents, so a docs page that no | |
| 81 | # longer builds is a product defect. `--strict` fails on broken internal links, | |
| 82 | # which is the failure mode a docs site actually has. | |
| 83 | - name: Build the documentation site | |
| 84 | run: cargo run --locked -- build docs -o docs/_site --strict | |
| 85 | ||
| 86 | msrv: | |
| 87 | name: minimum supported Rust (1.88) | |
| 88 | runs-on: ubuntu-latest | |
| 89 | steps: | |
| 90 | - name: Checkout | |
| 91 | uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| 92 | ||
| 93 | # Pinned to the version in Cargo.toml's `rust-version`. When that moves, this moves | |
| 94 | # with it in the same commit — a floor nobody checks is a floor nobody has. | |
| 95 | - name: Install Rust 1.88 | |
| 96 | uses: dtolnay/rust-toolchain@1ff72ee08e3cb84d84adba594e0a297990fc1ed3 # stable | |
| 97 | with: | |
| 98 | toolchain: "1.88" | |
| 99 | ||
| 100 | - name: Cache cargo | |
| 101 | uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | |
| 102 | ||
| 103 | # Build only. The tests pull in dev-dependencies whose own floors move | |
| 104 | # independently, and chasing those would make this job about someone else's MSRV. | |
| 105 | # | |
| 106 | # The floor is set by dependencies rather than by orgo — its own code compiles on | |
| 107 | # 1.82 — which is precisely why it is checked here instead of reasoned about: a | |
| 108 | # dependency raising its floor is invisible until someone on an older compiler | |
| 109 | # tries to build. | |
| 110 | - name: Build | |
| 111 | run: cargo build --locked | |