name: CI on: pull_request: branches: - main push: workflow_dispatch: env: CARGO_TERM_COLOR: always # Cancel any currently running workflows from the same PR, branch, or # tag when a new workflow is triggered. # # https://stackoverflow.com/a/66336834 concurrency: cancel-in-progress: true group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} jobs: # -------------------------------------------------------------------------- # Check esp32-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: esp-rs/xtensa-toolchain@v1.4 with: default: true buildtargets: esp32 ldproxy: false - uses: Swatinem/rust-cache@v1 # Perform a full build initially to verify that the examples not only # build, but also link successfully. - name: build esp32-hal (no features) run: cd esp32-hal/ && cargo build --examples # Subsequent steps can just check the examples instead, as we're already # confident that they link. - name: check esp32-hal (common features) run: cd esp32-hal/ && cargo check --examples --features=eh1,smartled,ufmt - name: check esp32-hal (async) run: cd esp32-hal/ && cargo check --example=embassy_hello_world --features=embassy,embassy-time-timg0 esp32c2-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: profile: minimal target: riscv32imc-unknown-none-elf toolchain: nightly default: true components: rust-src - uses: Swatinem/rust-cache@v1 # Perform a full build initially to verify that the examples not only # build, but also link successfully. # We also use this as an opportunity to verify that the examples link # for each supported image format. - name: build esp32c2-hal (no features) run: cd esp32c2-hal/ && cargo build --examples - name: build esp32c2-hal (direct-boot) run: cd esp32c2-hal/ && cargo build --examples --features=direct-boot # Subsequent steps can just check the examples instead, as we're already # confident that they link. - name: check esp32c2-hal (common features) run: cd esp32c2-hal/ && cargo check --examples --features=eh1,ufmt - name: check esp32c2-hal (async, systick) run: cd esp32c2-hal/ && cargo check --example=embassy_hello_world --features=embassy,embassy-time-systick - name: check esp32c2-hal (async, timg0) run: cd esp32c2-hal/ && cargo check --example=embassy_hello_world --features=embassy,embassy-time-timg0 esp32c3-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: profile: minimal target: riscv32imc-unknown-none-elf toolchain: nightly default: true components: rust-src - uses: Swatinem/rust-cache@v1 # Perform a full build initially to verify that the examples not only # build, but also link successfully. # We also use this as an opportunity to verify that the examples link # for each supported image format. - name: build esp32c3-hal (no features) run: cd esp32c3-hal/ && cargo build --examples - name: build esp32c3-hal (direct-boot) run: cd esp32c3-hal/ && cargo build --examples --features=direct-boot # FIXME: Building using the mcu-boot format currently results in an error. # - name: build esp32c3-hal (mcu-boot) # run: cd esp32c3-hal/ && cargo build --examples --features=mcu-boot # Subsequent steps can just check the examples instead, as we're already # confident that they link. - name: check esp32c3-hal (common features) run: cargo check --manifest-path=esp32c3-hal/Cargo.toml --target=riscv32imc-unknown-none-elf --examples --features=eh1,smartled,ufmt - name: check esp32c3-hal (async, systick) run: cargo check --manifest-path=esp32c3-hal/Cargo.toml --target=riscv32imc-unknown-none-elf --example=embassy_hello_world --features=embassy,embassy-time-systick - name: check esp32c3-hal (async, timg0) run: cargo check --manifest-path=esp32c3-hal/Cargo.toml --target=riscv32imc-unknown-none-elf --example=embassy_hello_world --features=embassy,embassy-time-timg0 esp32s2-hal: runs-on: ubuntu-latest env: RUSTFLAGS: '--cfg target_has_atomic="8" --cfg target_has_atomic="16" --cfg target_has_atomic="32" --cfg target_has_atomic="ptr"' steps: - uses: actions/checkout@v2 - uses: esp-rs/xtensa-toolchain@v1.4 with: default: true buildtargets: esp32s2 ldproxy: false - uses: Swatinem/rust-cache@v1 # Perform a full build initially to verify that the examples not only # build, but also link successfully. - name: check esp32s2-hal (no features) run: cd esp32s2-hal/ && cargo build --examples # Subsequent steps can just check the examples instead, as we're already # confident that they link. - name: check esp32s2-hal (common features) run: cd esp32s2-hal/ && cargo check --examples --features=eh1,smartled,ufmt # FIXME: `time-systick` feature disabled for now, see 'esp32s2-hal/Cargo.toml'. # - name: check esp32s2-hal (async, systick) # run: cd esp32s2-hal/ && cargo check --example=embassy_hello_world --features=embassy,embassy-time-systick - name: check esp32s2-hal (async, timg0) run: cd esp32s2-hal/ && cargo check --example=embassy_hello_world --features=embassy,embassy-time-timg0 esp32s3-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: esp-rs/xtensa-toolchain@v1.4 with: default: true buildtargets: esp32s3 ldproxy: false - uses: Swatinem/rust-cache@v1 # Perform a full build initially to verify that the examples not only # build, but also link successfully. # We also use this as an opportunity to verify that the examples link # for each supported image format. - name: build esp32s3-hal (no features) run: cd esp32s3-hal/ && cargo build --examples - name: build esp32s3-hal (direct-boot) run: cd esp32s3-hal/ && cargo build --examples --features=direct-boot # Subsequent steps can just check the examples instead, as we're already # confident that they link. - name: check esp32s3-hal (common features) run: cd esp32s3-hal/ && cargo check --examples --features=eh1,smartled,ufmt - name: check esp32s3-hal (async, systick) run: cd esp32s3-hal/ && cargo check --example=embassy_hello_world --features=embassy,embassy-time-systick - name: check esp32s3-hal (async, timg0) run: cd esp32s3-hal/ && cargo check --example=embassy_hello_world --features=embassy,embassy-time-timg0 # -------------------------------------------------------------------------- # MSRV msrv-riscv: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: profile: minimal target: riscv32imc-unknown-none-elf toolchain: "1.65.0" default: true - uses: Swatinem/rust-cache@v1 # Verify the MSRV for all RISC-V chips. - name: msrv (esp32c2-hal) run: cd esp32c2-hal/ && cargo check --features=eh1,ufmt - name: msrv (esp32c3-hal) run: cd esp32c3-hal/ && cargo check --features=eh1,ufmt,smartled msrv-xtensa: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: esp-rs/xtensa-toolchain@v1.4 with: ldproxy: false version: "1.65.0" - uses: Swatinem/rust-cache@v1 # Verify the MSRV for all Xtensa chips. - name: msrv (esp32-hal) run: cd esp32-hal/ && cargo check --features=eh1,ufmt,smartled - name: msrv (esp32s2-hal) run: cd esp32s2-hal/ && cargo check --features=eh1,ufmt,smartled - name: msrv (esp32s3-hal) run: cd esp32s3-hal/ && cargo check --features=eh1,ufmt,smartled # -------------------------------------------------------------------------- # Lint clippy-riscv: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable components: clippy - uses: Swatinem/rust-cache@v1 # Run clippy on all packages targeting RISC-V. - name: clippy (esp32c2-hal) run: cargo +stable clippy --manifest-path=esp32c2-hal/Cargo.toml -- --no-deps - name: clippy (esp32c3-hal) run: cargo +stable clippy --manifest-path=esp32c3-hal/Cargo.toml -- --no-deps clippy-xtensa: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: esp-rs/xtensa-toolchain@v1.4 with: ldproxy: false - uses: Swatinem/rust-cache@v1 # Run clippy on all packages targeting Xtensa. # # The ESP32-S2 requires some additional information in order for the # atomic emulation crate to build. - name: clippy (esp32-hal) run: cargo +esp clippy --manifest-path=esp32-hal/Cargo.toml -- --no-deps - name: clippy (esp32s2-hal) run: cargo +esp clippy --manifest-path=esp32s2-hal/Cargo.toml --target=xtensa-esp32s2-none-elf -Zbuild-std=core -- --no-deps - name: clippy (esp32s3-hal) run: cargo +esp clippy --manifest-path=esp32s3-hal/Cargo.toml -- --no-deps rustfmt: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # Some of the items in 'rustfmt.toml' require the nightly release # channel, so we must use this channel for the formatting checks # to succeed. - uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: nightly components: rustfmt default: true - uses: Swatinem/rust-cache@v1 # Check the formatting of all packages. - name: rustfmt (esp-hal-common) run: cargo fmt --all --manifest-path=esp-hal-common/Cargo.toml -- --check - name: rustfmt (esp-hal-procmacros) run: cargo fmt --all --manifest-path=esp-hal-procmacros/Cargo.toml -- --check - name: rustfmt (esp32-hal) run: cargo fmt --all --manifest-path=esp32-hal/Cargo.toml -- --check - name: rustfmt (esp32c2-hal) run: cargo fmt --all --manifest-path=esp32c2-hal/Cargo.toml -- --check - name: rustfmt (esp32c3-hal) run: cargo fmt --all --manifest-path=esp32c3-hal/Cargo.toml -- --check - name: rustfmt (esp32s2-hal) run: cargo fmt --all --manifest-path=esp32s2-hal/Cargo.toml -- --check - name: rustfmt (esp32s3-hal) run: cargo fmt --all --manifest-path=esp32s3-hal/Cargo.toml -- --check