1name: CI 2 3on: 4 push: 5 pull_request: 6 workflow_dispatch: 7 schedule: [cron: "40 1 * * *"] 8 9permissions: 10 contents: read 11 12env: 13 RUSTFLAGS: -Dwarnings 14 15jobs: 16 pre_ci: 17 uses: dtolnay/.github/.github/workflows/pre_ci.yml@master 18 19 unicode: 20 name: latest Unicode 21 runs-on: ubuntu-latest 22 if: github.event_name != 'pull_request' 23 timeout-minutes: 45 24 steps: 25 - uses: actions/checkout@v4 26 - uses: dtolnay/rust-toolchain@stable 27 - id: ucd-generate 28 run: echo "version=$(grep 'ucd-generate [0-9]\+\.[0-9]\+\.[0-9]\+' tests/tables/tables.rs --only-matching)" >> $GITHUB_OUTPUT 29 - run: cargo install ucd-generate 30 - run: curl https://www.unicode.org/Public/zipped/latest/UCD.zip --location --remote-name --silent --show-error --fail --retry 2 31 - run: unzip UCD.zip -d UCD 32 - run: ucd-generate property-bool UCD --include XID_Start,XID_Continue > tests/tables/tables.rs 33 - run: ucd-generate property-bool UCD --include XID_Start,XID_Continue --fst-dir tests/fst 34 - run: ucd-generate property-bool UCD --include XID_Start,XID_Continue --trie-set > tests/trie/trie.rs 35 - run: cargo run --manifest-path generate/Cargo.toml 36 - run: sed --in-place 's/ucd-generate [0-9]\+\.[0-9]\+\.[0-9]\+/${{steps.ucd-generate.outputs.version}}/' tests/tables/tables.rs tests/trie/trie.rs 37 - run: git diff --exit-code 38 39 test: 40 name: Rust ${{matrix.rust}} 41 needs: pre_ci 42 if: needs.pre_ci.outputs.continue 43 runs-on: ubuntu-latest 44 strategy: 45 fail-fast: false 46 matrix: 47 rust: [nightly, beta, stable, 1.74.0] 48 timeout-minutes: 45 49 steps: 50 - uses: actions/checkout@v4 51 - uses: dtolnay/rust-toolchain@master 52 with: 53 toolchain: ${{matrix.rust}} 54 - name: Enable type layout randomization 55 run: echo RUSTFLAGS=${RUSTFLAGS}\ -Zrandomize-layout >> $GITHUB_ENV 56 if: matrix.rust == 'nightly' 57 - run: cargo test 58 - run: cargo check --benches 59 - uses: actions/upload-artifact@v4 60 if: matrix.rust == 'nightly' && always() 61 with: 62 name: Cargo.lock 63 path: Cargo.lock 64 continue-on-error: true 65 66 msrv: 67 name: Rust 1.31.0 68 needs: pre_ci 69 if: needs.pre_ci.outputs.continue 70 runs-on: ubuntu-latest 71 timeout-minutes: 45 72 steps: 73 - uses: actions/checkout@v4 74 - uses: dtolnay/rust-toolchain@1.31.0 75 - run: cargo check --manifest-path tests/crate/Cargo.toml 76 77 doc: 78 name: Documentation 79 needs: pre_ci 80 if: needs.pre_ci.outputs.continue 81 runs-on: ubuntu-latest 82 timeout-minutes: 45 83 env: 84 RUSTDOCFLAGS: -Dwarnings 85 steps: 86 - uses: actions/checkout@v4 87 - uses: dtolnay/rust-toolchain@nightly 88 - uses: dtolnay/install@cargo-docs-rs 89 - run: cargo docs-rs 90 91 clippy: 92 name: Clippy 93 runs-on: ubuntu-latest 94 if: github.event_name != 'pull_request' 95 timeout-minutes: 45 96 steps: 97 - uses: actions/checkout@v4 98 - uses: dtolnay/rust-toolchain@clippy 99 - run: cargo clippy --tests --benches --workspace -- -Dclippy::all -Dclippy::pedantic 100 101 outdated: 102 name: Outdated 103 runs-on: ubuntu-latest 104 if: github.event_name != 'pull_request' 105 timeout-minutes: 45 106 steps: 107 - uses: actions/checkout@v4 108 - uses: dtolnay/rust-toolchain@stable 109 - uses: dtolnay/install@cargo-outdated 110 - run: cargo outdated --workspace --exit-code 1 111