Skip to content

Rework features

Rework features #1559

Workflow file for this run

name: CI
on:
pull_request:
push:
branches:
- master
# smoelius: Every Thursday at 3:00 UTC (Wednesday at 22:00 EST), run `cargo test -- --ignored`.
schedule:
- cron: "0 3 * * 4"
workflow_dispatch:
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Dylint versions
run: cargo search dylint | sort | tee dylint_versions
# smoelius: The `~/.cargo/` entries are from:
# * https://github.com/actions/cache/blob/main/examples.md#rust---cargo.
# * https://doc.rust-lang.org/cargo/guide/cargo-home.html#caching-the-cargo-home-in-ci
# The rest were added by me.
- uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/.dylint_drivers/
~/.rustup/toolchains/
target/dylint/
key: ${{ runner.os }}-dylint-${{ hashFiles('dylint_versions') }}
- name: Rustup
run: rustup update
- name: Install llvm
run: sudo apt-get install llvm
- name: Actionlint
run: go install github.com/rhysd/actionlint/cmd/actionlint@latest && "$HOME"/go/bin/actionlint --shellcheck='-e SC2016'
- name: Shellcheck
run: shellcheck --exclude=SC2002 scripts/*
- name: Prettier
run: npm install -g prettier && prettier --check '**/*.json' '**/*.md' '**/*.yml'
- name: Markdown link check
run: npm install -g markdown-link-check && markdown-link-check ./**/*.md
# https://github.com/DevinR528/cargo-sort/issues/57#issuecomment-1457714872
- name: Cargo sort
run: |
cargo install cargo-sort || true
find . -name Cargo.toml -print0 | xargs -0 -n 1 dirname | xargs -n 1 cargo sort --check --grouped --no-format
- name: Format
run: |
rustup +nightly component add rustfmt
cargo +nightly fmt && git diff --exit-code
- name: Format README
run: ./scripts/update_README.sh && git diff --exit-code
- name: License
run: |
cargo install cargo-license || true
./scripts/check_licenses.sh
- name: Clippy
run: |
rustup +nightly component add clippy
./scripts/clippy.sh
- name: Dylint
run: |
cargo install cargo-dylint dylint-link || true
./scripts/dylint.sh
- name: Udeps
run: |
cargo install cargo-udeps || true
cargo clean && cargo +nightly udeps --features=test-fuzz/auto_concretize --all-targets
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
serde_format: [bincode, cbor, cbor4ii]
toolchain: [stable, nightly]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set toolchain
run: rustup default ${{ matrix.toolchain }}
- name: Install llvm
run: sudo apt-get install llvm
# smoelius: The Substrate tests require `protoc`.
- name: Install protoc
run: sudo apt-get install protobuf-compiler
- name: Install cargo-afl
run: cargo install cargo-afl
- name: Run afl-system-config
run: cargo afl system-config
# smoelius: The wasm32 target is needed for some Substrate tests, regardless of the toolchain
# used to build test-fuzz.
- name: Add wasm32 target
run: |
rustup target add wasm32-unknown-unknown
rustup +nightly target add wasm32-unknown-unknown
# smoelius: I expect this list to grow.
- name: Install tools
run: |
cargo install cargo-supply-chain || true
- name: Test
run: |
AUTO_CONCRETIZE=
SHUFFLE=
if [[ ${{ matrix.toolchain }} = nightly ]]; then
AUTO_CONCRETIZE='--features=test-fuzz/auto_concretize'
SHUFFLE='-Z unstable-options --shuffle --test-threads=1'
fi
TEST_CMD="cargo test --features=test-fuzz/serde_${{ matrix.serde_format }} $AUTO_CONCRETIZE -- --nocapture $SHUFFLE"
$TEST_CMD
if [[ ${{ github.event_name }} = 'schedule' ]] ||
git diff --name-only ${{ github.event.pull_request.base.sha }} | grep -w 'patches\|third_party' >/dev/null
then
$TEST_CMD --ignored
fi
env:
RUST_BACKTRACE: 1
RUST_LOG: warn
all-checks:
needs:
- lint
- test
runs-on: ubuntu-latest
steps:
- run: true