From c8e69a14eb223f2c13d545b0063fea8fe9c2148f Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Mon, 15 Nov 2021 20:14:59 +0100 Subject: [PATCH] Faster CI with cargo-batch --- .github/workflows/rust.yml | 160 ++++--------------------------------- ci.sh | 50 ++++++++++++ 2 files changed, 66 insertions(+), 144 deletions(-) create mode 100755 ci.sh diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index de500c3a..055089bd 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -2,9 +2,9 @@ name: Rust on: push: - branches: [ staging, trying, master ] + branches: [staging, trying, master] pull_request: - branches: [ master ] + branches: [master] env: CARGO_TERM_COLOR: always @@ -12,162 +12,37 @@ env: jobs: all: runs-on: ubuntu-20.04 - needs: [build, fmt, test, metapac_gen] + needs: [build, test, metapac_gen] steps: - name: Done run: exit 0 build: runs-on: ubuntu-latest - strategy: - matrix: - include: - - package: embassy - target: thumbv7em-none-eabi - - package: embassy - target: thumbv7em-none-eabi - features: log,executor-agnostic - - package: embassy - target: thumbv7em-none-eabi - features: defmt - - package: embassy - target: thumbv6m-none-eabi - features: defmt - - - package: examples/std - target: x86_64-unknown-linux-gnu - - - package: embassy-nrf - target: thumbv7em-none-eabi - features: nrf52805 - - package: embassy-nrf - target: thumbv7em-none-eabi - features: nrf52810 - - package: embassy-nrf - target: thumbv7em-none-eabi - features: nrf52811 - - package: embassy-nrf - target: thumbv7em-none-eabi - features: nrf52820 - - package: embassy-nrf - target: thumbv7em-none-eabi - features: nrf52832 - - package: embassy-nrf - target: thumbv7em-none-eabi - features: nrf52833 - - package: embassy-nrf - target: thumbv8m.main-none-eabihf - features: nrf9160-s - - package: embassy-nrf - target: thumbv8m.main-none-eabihf - features: nrf9160-ns - - package: embassy-nrf - target: thumbv8m.main-none-eabihf - features: nrf5340-app-s - - package: embassy-nrf - target: thumbv8m.main-none-eabihf - features: nrf5340-app-ns - - package: embassy-nrf - target: thumbv8m.main-none-eabihf - features: nrf5340-net - - package: embassy-nrf - target: thumbv7em-none-eabi - features: nrf52840 - - package: embassy-nrf - target: thumbv7em-none-eabi - features: nrf52840,log - - package: embassy-nrf - target: thumbv7em-none-eabi - features: nrf52840,defmt - - package: examples/nrf - target: thumbv7em-none-eabi - - - package: examples/rp - target: thumbv6m-none-eabi - - - package: embassy-stm32 - target: thumbv7em-none-eabi - features: stm32f411ce,defmt - - package: embassy-stm32 - target: thumbv7em-none-eabi - features: stm32f429zi,log - - package: embassy-stm32 - target: thumbv7em-none-eabi - features: stm32h755zi_cm7,defmt - - package: embassy-stm32 - target: thumbv7em-none-eabi - features: stm32l476vg,defmt - - package: embassy-stm32 - target: thumbv6m-none-eabi - features: stm32l072cz,defmt - - package: embassy-stm32 - target: thumbv7m-none-eabi - features: stm32l151cb-a,defmt - - package: examples/stm32f4 - target: thumbv7em-none-eabi - - package: examples/stm32l4 - target: thumbv7em-none-eabi - - package: examples/stm32h7 - target: thumbv7em-none-eabi - - package: examples/stm32l0 - target: thumbv6m-none-eabi - - package: examples/stm32l1 - target: thumbv7m-none-eabi - - package: examples/stm32wb55 - target: thumbv7em-none-eabihf - - package: examples/stm32wl55 - target: thumbv7em-none-eabihf - - package: examples/stm32f0 - target: thumbv6m-none-eabi - - package: examples/stm32g0 - target: thumbv6m-none-eabi - - package: examples/wasm - target: wasm32-unknown-unknown - - package: examples/stm32f1 - target: thumbv7m-none-eabi - - package: examples/stm32f7 - target: thumbv7em-none-eabihf - - package: examples/stm32u5 - target: thumbv7em-none-eabihf steps: - uses: actions/checkout@v2 with: submodules: true - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - name: cache - id: cache-target + - name: Cache multiple paths uses: actions/cache@v2 with: - path: target - key: ${{ runner.os }}-${{ matrix.target }} - - # We have to append the "-D warnings" flag to .cargo/config rather than - # using the RUSTFLAGS environment variable because if we set RUSTFLAGS - # cargo will ignore the rustflags config in .cargo/config. - - name: Check + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target_ci + key: rust3-${{ runner.os }}-${{ hashFiles('rust-toolchain.toml') }} + - name: build run: | - mkdir -p .cargo - echo -e '[target."cfg(all())"]\nrustflags = ["-D", "warnings"]' >> .cargo/config - cd ${{ matrix.package }} && RUSTFLAGS=-Dwarnings cargo check --features=${{ matrix.features }} --target=${{ matrix.target }} - - fmt: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - name: Check fmt - run: find -name '*.rs' | xargs rustfmt --check --skip-children --unstable-features --edition 2018 + curl -L -o /usr/local/bin/cargo-batch https://github.com/embassy-rs/cargo-batch/releases/download/batch-0.1.0/cargo-batch + chmod +x /usr/local/bin/cargo-batch + ./ci.sh + rm -rf target_ci/*{,/release}/{build,deps,.fingerprint}/{lib,}{embassy,stm32}* test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - name: Test run: cd embassy && cargo test @@ -177,8 +52,5 @@ jobs: - uses: actions/checkout@v2 with: submodules: true - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - name: Generate pregenerated metapac run: cd stm32-metapac-gen; cargo run --release diff --git a/ci.sh b/ci.sh new file mode 100755 index 00000000..60112386 --- /dev/null +++ b/ci.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +set -euo pipefail + +export CARGO_TARGET_DIR=$PWD/target_ci +export RUSTFLAGS=-Dwarnings + +find -name '*.rs' -not -path '*target*' -not -path '*stm32-metapac-gen/out/*' | xargs rustfmt --check --skip-children --unstable-features --edition 2018 + +cargo batch \ + --- build --release --manifest-path embassy/Cargo.toml --target thumbv7em-none-eabi \ + --- build --release --manifest-path embassy/Cargo.toml --target thumbv7em-none-eabi --features log,executor-agnostic \ + --- build --release --manifest-path embassy/Cargo.toml --target thumbv7em-none-eabi --features defmt \ + --- build --release --manifest-path embassy/Cargo.toml --target thumbv6m-none-eabi --features defmt \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52805 \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52810 \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52811 \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52820 \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52832 \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52833 \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-s \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-ns \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-s \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-ns \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-net \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840 \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,log \ + --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,defmt \ + --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f411ce,defmt \ + --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f429zi,log \ + --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi_cm7,defmt \ + --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt \ + --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l072cz,defmt \ + --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32l151cb-a,defmt \ + --- build --release --manifest-path examples/std/Cargo.toml --target x86_64-unknown-linux-gnu --out-dir out/examples/std \ + --- build --release --manifest-path examples/nrf/Cargo.toml --target thumbv7em-none-eabi --out-dir out/examples/nrf \ + --- build --release --manifest-path examples/rp/Cargo.toml --target thumbv6m-none-eabi --out-dir out/examples/rp \ + --- build --release --manifest-path examples/stm32f0/Cargo.toml --target thumbv6m-none-eabi --out-dir out/examples/stm32f0 \ + --- build --release --manifest-path examples/stm32f1/Cargo.toml --target thumbv7m-none-eabi --out-dir out/examples/stm32f1 \ + --- build --release --manifest-path examples/stm32f4/Cargo.toml --target thumbv7em-none-eabi --out-dir out/examples/stm32f4 \ + --- build --release --manifest-path examples/stm32f7/Cargo.toml --target thumbv7em-none-eabihf --out-dir out/examples/stm32f7 \ + --- build --release --manifest-path examples/stm32g0/Cargo.toml --target thumbv6m-none-eabi --out-dir out/examples/stm32g0 \ + --- build --release --manifest-path examples/stm32h7/Cargo.toml --target thumbv7em-none-eabi --out-dir out/examples/stm32h7 \ + --- build --release --manifest-path examples/stm32l0/Cargo.toml --target thumbv6m-none-eabi --out-dir out/examples/stm32l0 \ + --- build --release --manifest-path examples/stm32l1/Cargo.toml --target thumbv7m-none-eabi --out-dir out/examples/stm32l1 \ + --- build --release --manifest-path examples/stm32l4/Cargo.toml --target thumbv7em-none-eabi --out-dir out/examples/stm32l4 \ + --- build --release --manifest-path examples/stm32u5/Cargo.toml --target thumbv8m.main-none-eabihf --out-dir out/examples/stm32u5 \ + --- build --release --manifest-path examples/stm32wb55/Cargo.toml --target thumbv7em-none-eabihf --out-dir out/examples/stm32wb55 \ + --- build --release --manifest-path examples/stm32wl55/Cargo.toml --target thumbv7em-none-eabihf --out-dir out/examples/stm32wl55 \ + --- build --release --manifest-path examples/wasm/Cargo.toml --target wasm32-unknown-unknown --out-dir out/examples/wasm \