name: CI on: pull_request: paths-ignore: - "**/CHANGELOG.md" - "**/README.md" push: branches-ignore: - "gh-readonly-queue/**" paths-ignore: - "**/CHANGELOG.md" - "**/README.md" merge_group: workflow_dispatch: env: CARGO_TERM_COLOR: always GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} MSRV: "1.67.0" # 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 Packages esp-hal-smartled: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf toolchain: nightly components: rust-src - uses: esp-rs/xtensa-toolchain@v1.5 with: ldproxy: false override: false - uses: Swatinem/rust-cache@v2 # Build all RISC-V targets: - name: build (esp32c3) run: cd esp-hal-smartled/ && cargo +nightly build -Zbuild-std=core --target=riscv32imc-unknown-none-elf --features=esp32c3 - name: build (esp32c6) run: cd esp-hal-smartled/ && cargo +nightly build -Zbuild-std=core --target=riscv32imac-unknown-none-elf --features=esp32c6 - name: build (esp32h2) run: cd esp-hal-smartled/ && cargo +nightly build -Zbuild-std=core --target=riscv32imac-unknown-none-elf --features=esp32h2 # Build all Xtensa targets: - name: build (esp32) run: cd esp-hal-smartled/ && cargo +esp build -Zbuild-std=core --target=xtensa-esp32-none-elf --features=esp32,xtal-40mhz - name: build (esp32s2) run: cd esp-hal-smartled/ && cargo +esp build -Zbuild-std=core --target=xtensa-esp32s2-none-elf --features=esp32s2 - name: build (esp32s3) run: cd esp-hal-smartled/ && cargo +esp build -Zbuild-std=core --target=xtensa-esp32s3-none-elf --features=esp32s3 # Ensure documentation can be built (requires a chip feature!) - name: rustdoc run: cd esp-hal-smartled/ && cargo doc -Zbuild-std=core --target=riscv32imc-unknown-none-elf --features=esp32c3 esp-riscv-rt: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf toolchain: nightly components: rust-src - uses: Swatinem/rust-cache@v2 - name: Build esp-riscv-rt (riscv32imc, no features) run: cd esp-riscv-rt/ && cargo build -Zbuild-std=core --target=riscv32imc-unknown-none-elf - name: Build esp-riscv-rt (riscv32imac, no features) run: cd esp-riscv-rt/ && cargo build -Zbuild-std=core --target=riscv32imac-unknown-none-elf - name: Build esp-riscv-rt (riscv32imc, all features) run: cd esp-riscv-rt/ && cargo build -Zbuild-std=core --target=riscv32imc-unknown-none-elf --features=ci - name: Build esp-riscv-rt (riscv32imac, all features) run: cd esp-riscv-rt/ && cargo build -Zbuild-std=core --target=riscv32imac-unknown-none-elf --features=ci # Ensure documentation can be built - name: rustdoc run: cd esp-riscv-rt/ && cargo doc esp-ulp-riscv-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf toolchain: nightly components: rust-src - uses: Swatinem/rust-cache@v2 # Perform a full build initially to verify that the examples not only # build, but also link successfully. - name: build esp-ulp-riscv-hal (esp32s2) run: cd esp-ulp-riscv-hal/ && cargo build --release --features=esp32s2 --examples - name: build esp-ulp-riscv-hal (esp32s3) run: cd esp-ulp-riscv-hal/ && cargo build --release --features=esp32s3 --examples # Ensure documentation can be built - name: rustdoc run: cd esp-ulp-riscv-hal/ && cargo doc --features=esp32s3 esp32-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: esp-rs/xtensa-toolchain@v1.5 with: default: true buildtargets: esp32 ldproxy: false - uses: Swatinem/rust-cache@v2 # 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 build --examples --features=eh1,ufmt,log cargo build --examples --features=eh1,ufmt,defmt - name: check esp32-hal (embassy) run: | cd esp32-hal/ cargo check --example=embassy_hello_world --features=embassy,embassy-time-timg0,embassy-executor-thread cargo check --example=embassy_multicore --features=embassy,embassy-time-timg0,embassy-executor-thread cargo check --example=embassy_multicore_interrupt --features=embassy,embassy-time-timg0,embassy-executor-interrupt cargo check --example=embassy_multiprio --features=embassy,embassy-time-timg0,embassy-executor-thread,embassy-executor-interrupt - name: check esp32-hal (embassy, async) run: | cd esp32-hal/ cargo check --example=embassy_wait --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo check --example=embassy_spi --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo check --example=embassy_serial --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo check --example=embassy_i2c --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo check --example=embassy_i2s_read --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo check --example=embassy_i2s_sound --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo check --example=embassy_rmt_rx --features=embassy,embassy-time-timg0,async,embassy-executor-thread --release cargo check --example=embassy_rmt_tx --features=embassy,embassy-time-timg0,async,embassy-executor-thread - name: check esp32-hal (embassy, log/defmt) run: | cd esp32-hal/ cargo check --examples --features=embassy,embassy-time-timg0,embassy-executor-interrupt,embassy-executor-thread,defmt cargo check --examples --features=embassy,embassy-time-timg0,embassy-executor-interrupt,embassy-executor-thread,log - name: check esp32-hal (psram) run: cd esp32-hal/ && cargo check --example=psram --features=psram-2m --release # This example requires release! # Make sure we can build without default features enabled, too! - name: check esp32-hal (no default features) run: cd esp32-hal/ && cargo build --no-default-features --features=xtal-40mhz # Ensure documentation can be built - name: rustdoc run: cd esp32-hal/ && cargo doc --features=eh1 esp32c2-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf toolchain: nightly components: rust-src - uses: Swatinem/rust-cache@v2 # 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 # 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 +nightly build --examples --features=eh1,ufmt,log cargo +nightly build --examples --features=eh1,ufmt,defmt - name: check esp32c2-hal (async, systick) run: cd esp32c2-hal/ && cargo +nightly check --example=embassy_hello_world --features=embassy,embassy-time-systick,embassy-executor-thread - name: check esp32c2-hal (async, timg0) run: cd esp32c2-hal/ && cargo +nightly check --example=embassy_hello_world --features=embassy,embassy-time-timg0,embassy-executor-thread - name: check esp32c2-hal (async, gpio) run: cd esp32c2-hal/ && cargo +nightly check --example=embassy_wait --features=embassy,embassy-time-systick,embassy-executor-thread,async - name: check esp32c2-hal (async, multiprio) run: cd esp32c2-hal/ && cargo +nightly check --example=embassy_multiprio --features=embassy,embassy-time-systick,embassy-executor-thread,embassy-executor-interrupt - name: check esp32c2-hal (async, spi) run: cd esp32c2-hal/ && cargo +nightly check --example=embassy_spi --features=embassy,embassy-time-systick,embassy-executor-thread,async - name: check esp32c2-hal (async, serial) run: cd esp32c2-hal/ && cargo +nightly check --example=embassy_serial --features=embassy,embassy-time-systick,embassy-executor-thread,async - name: check esp32c2-hal (async, i2c) run: cd esp32c2-hal/ && cargo +nightly check --example=embassy_i2c --features=embassy,embassy-time-systick,embassy-executor-thread,async - name: check esp32c2-hal (interrupt-preemption) run: cd esp32c2-hal/ && cargo +nightly check --example=interrupt_preemption --features=interrupt-preemption - name: check esp32c2-hal (direct-vectoring) run: cd esp32c2-hal/ && cargo +nightly check --example=direct-vectoring --features=direct-vectoring - name: check esp32c2-hal (embassy, log/defmt) run: | cd esp32c2-hal/ cargo +nightly check --examples --features=embassy,embassy-time-timg0,embassy-executor-thread,defmt cargo +nightly check --examples --features=embassy,embassy-time-timg0,embassy-executor-thread,log # Make sure we can build without default features enabled, too! - name: check esp32c2-hal (no default features) run: cd esp32c2-hal/ && cargo build --no-default-features --features=xtal-40mhz # Ensure documentation can be built - name: rustdoc run: cd esp32c2-hal/ && cargo doc --features=eh1 esp32c3-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf toolchain: nightly components: rust-src - uses: Swatinem/rust-cache@v2 # Perform a full build initially to verify that the examples not only # build, but also link successfully. - name: build esp32c3-hal (no features) run: cd esp32c3-hal/ && cargo +nightly build --examples # Subsequent steps can just check the examples instead, as we're already # confident that they link. - name: check esp32c3-hal (common features) run: | cd esp32c3-hal/ cargo +nightly build --examples --features=eh1,ufmt,log cargo +nightly build --examples --features=eh1,ufmt,defmt - name: check esp32c3-hal (embassy) run: | cd esp32c3-hal/ cargo +nightly check --example=embassy_hello_world --features=embassy,embassy-time-timg0,embassy-executor-thread cargo +nightly check --example=embassy_hello_world --features=embassy,embassy-time-systick,embassy-executor-thread cargo +nightly check --example=embassy_multiprio --features=embassy,embassy-time-timg0,embassy-executor-thread,embassy-executor-interrupt - name: check esp32c3-hal (embassy, async) run: | cd esp32c3-hal/ cargo +nightly check --example=embassy_wait --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_spi --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_serial --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_i2c --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_i2s_read --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_i2s_sound --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_rmt_rx --features=embassy,embassy-time-timg0,async,embassy-executor-thread --release cargo +nightly check --example=embassy_rmt_tx --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_usb_serial_jtag --features=embassy,embassy-time-systick,async,embassy-executor-thread - name: check esp32c3-hal (interrupt-preemption) run: cd esp32c3-hal/ && cargo +nightly check --example=interrupt_preemption --features=interrupt-preemption - name: check esp32c3-hal (direct-vectoring) run: cd esp32c3-hal/ && cargo +nightly check --example=direct-vectoring --features=direct-vectoring - name: check esp32c3-hal (embassy, log/defmt) run: | cd esp32c3-hal/ cargo +nightly check --examples --features=embassy,embassy-time-timg0,embassy-executor-thread,defmt cargo +nightly check --examples --features=embassy,embassy-time-timg0,embassy-executor-thread,log # Make sure we can build without default features enabled, too! - name: check esp32c3-hal (no default features) run: cd esp32c3-hal/ && cargo build --no-default-features # Ensure documentation can be built - name: rustdoc run: cd esp32c3-hal/ && cargo doc --features=eh1 esp32c6-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imac-unknown-none-elf toolchain: nightly components: rust-src - uses: Swatinem/rust-cache@v2 # build the lp-hal examples first to make sure the examples which expect # the ELF files to be present will compile - name: build esp32c6-lp-hal prerequisites run: cd esp32c6-lp-hal/ && cargo +nightly build --release --examples # 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 esp32c6-hal (no features) run: cd esp32c6-hal/ && cargo +nightly build --examples - name: build esp32c6-hal (flip-link feature) run: cd esp32c6-hal/ && cargo +nightly build --examples --features=flip-link # Subsequent steps can just check the examples instead, as we're already # confident that they link. - name: check esp32c6-hal (common features) run: | cd esp32c6-hal/ cargo +nightly build --examples --features=eh1,ufmt,log cargo +nightly build --examples --features=eh1,ufmt,defmt - name: check esp32c6-hal (embassy) run: | cd esp32c6-hal/ cargo +nightly check --example=embassy_hello_world --features=embassy,embassy-time-timg0,embassy-executor-thread cargo +nightly check --example=embassy_hello_world --features=embassy,embassy-time-systick,embassy-executor-thread cargo +nightly check --example=embassy_multiprio --features=embassy,embassy-time-timg0,embassy-executor-thread,embassy-executor-interrupt - name: check esp32c6-hal (embassy, async) run: | cd esp32c6-hal/ cargo +nightly check --example=embassy_wait --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_spi --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_serial --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_i2c --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_i2s_read --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_i2s_sound --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_rmt_rx --features=embassy,embassy-time-timg0,async,embassy-executor-thread --release cargo +nightly check --example=embassy_rmt_tx --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_usb_serial_jtag --features=embassy,embassy-time-systick,async,embassy-executor-thread cargo +nightly check --example=embassy_parl_io_tx --features=embassy,embassy-time-systick,async,embassy-executor-thread cargo +nightly check --example=embassy_parl_io_rx --features=embassy,embassy-time-systick,async,embassy-executor-thread - name: check esp32c6-hal (interrupt-preemption) run: cd esp32c6-hal/ && cargo +nightly check --example=interrupt_preemption --features=interrupt-preemption - name: check esp32c6-hal (direct-vectoring) run: cd esp32c6-hal/ && cargo +nightly check --example=direct-vectoring --features=direct-vectoring - name: check esp32c6-hal (embassy, log/defmt) run: | cd esp32c6-hal/ cargo +nightly check --examples --features=embassy,embassy-time-timg0,embassy-executor-thread,defmt cargo +nightly check --examples --features=embassy,embassy-time-timg0,embassy-executor-thread,log # Make sure we can build without default features enabled, too! - name: check esp32c6-hal (no default features) run: cd esp32c6-hal/ && cargo build --no-default-features # Ensure documentation can be built - name: rustdoc run: cd esp32c6-hal/ && cargo doc --features=eh1 esp32c6-lp-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imac-unknown-none-elf toolchain: nightly components: rust-src - uses: Swatinem/rust-cache@v2 # Perform a full build initially to verify that the examples not only # build, but also link successfully. - name: build esp32c6-lp-hal (no features) run: cd esp32c6-lp-hal/ && cargo +nightly build --release --examples # Ensure documentation can be built - name: rustdoc run: cd esp32c6-lp-hal/ && cargo doc esp32h2-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imac-unknown-none-elf toolchain: nightly components: rust-src - uses: Swatinem/rust-cache@v2 # 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 esp32h2-hal (no features) run: cd esp32h2-hal/ && cargo +nightly build --examples - name: build esp32h2-hal (flip-link feature) run: cd esp32h2-hal/ && cargo +nightly build --examples --features=flip-link # Subsequent steps can just check the examples instead, as we're already # confident that they link. - name: check esp32h2-hal (common features) run: | cd esp32h2-hal/ cargo +nightly build --examples --features=eh1,ufmt,log cargo +nightly build --examples --features=eh1,ufmt,defmt - name: check esp32h2-hal (embassy) run: | cd esp32h2-hal/ cargo +nightly check --example=embassy_hello_world --features=embassy,embassy-time-timg0,embassy-executor-thread cargo +nightly check --example=embassy_hello_world --features=embassy,embassy-time-systick,embassy-executor-thread cargo +nightly check --example=embassy_multiprio --features=embassy,embassy-time-timg0,embassy-executor-thread,embassy-executor-interrupt - name: check esp32h2-hal (embassy, async) run: | cd esp32h2-hal/ cargo +nightly check --example=embassy_wait --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_spi --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_serial --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_i2c --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_i2s_read --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_i2s_sound --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_rmt_rx --features=embassy,embassy-time-timg0,async,embassy-executor-thread --release cargo +nightly check --example=embassy_rmt_tx --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +nightly check --example=embassy_usb_serial_jtag --features=embassy,embassy-time-systick,async,embassy-executor-thread cargo +nightly check --example=embassy_parl_io_tx --features=embassy,embassy-time-systick,async,embassy-executor-thread cargo +nightly check --example=embassy_parl_io_rx --features=embassy,embassy-time-systick,async,embassy-executor-thread - name: check esp32h2-hal (interrupt-preemption) run: cd esp32h2-hal/ && cargo +nightly check --example=interrupt_preemption --features=interrupt-preemption - name: check esp32h2-hal (direct-vectoring) run: cd esp32h2-hal/ && cargo +nightly check --example=direct-vectoring --features=direct-vectoring - name: check esp32h2-hal (embassy, log/defmt) run: | cd esp32h2-hal/ cargo +nightly check --examples --features=embassy,embassy-time-timg0,embassy-executor-thread,defmt cargo +nightly check --examples --features=embassy,embassy-time-timg0,embassy-executor-thread,log # Make sure we can build without default features enabled, too! - name: check esp32h2-hal (no default features) run: cd esp32h2-hal/ && cargo build --no-default-features # Ensure documentation can be built - name: rustdoc run: cd esp32h2-hal/ && cargo doc --features=eh1 esp32s2-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: esp-rs/xtensa-toolchain@v1.5 with: default: true buildtargets: esp32s2 ldproxy: false - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf toolchain: nightly components: rust-src - uses: Swatinem/rust-cache@v2 # build the esp-ulp-riscv-hal examples first to make sure the examples which expect # the ELF files to be present will compile - name: build esp-ulp-riscv-hal prerequisites run: cd esp-ulp-riscv-hal/ && cargo +nightly build --release --features=esp32s2 --examples # 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 +esp 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 +esp build --examples --features=eh1,ufmt,log cargo +esp build --examples --features=eh1,ufmt,defmt # 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,executor - name: check esp32s2-hal (embassy, timg0) run: | cd esp32s2-hal/ cargo +esp check --example=embassy_hello_world --features=embassy,embassy-time-timg0,embassy-executor-thread cargo +esp check --example=embassy_multiprio --features=embassy,embassy-time-timg0,embassy-executor-thread,embassy-executor-interrupt - name: check esp32s2-hal (embassy, systick) run: | cd esp32s2-hal/ cargo +esp check --example=embassy_hello_world --features=embassy,embassy-time-systick,embassy-executor-thread cargo +esp check --example=embassy_multiprio --features=embassy,embassy-time-systick,embassy-executor-thread,embassy-executor-interrupt - name: check esp32s2-hal (embassy, timg0, async) run: | cd esp32s2-hal/ cargo +esp check --example=embassy_wait --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_spi --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_serial --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_i2c --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_i2s_read --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_i2s_sound --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_rmt_rx --features=embassy,embassy-time-timg0,async,embassy-executor-thread --release cargo +esp check --example=embassy_rmt_tx --features=embassy,embassy-time-timg0,async,embassy-executor-thread - name: check esp32s2-hal (embassy, systick, async) run: | cd esp32s2-hal/ cargo +esp check --example=embassy_wait --features=embassy,embassy-time-systick,async,embassy-executor-thread cargo +esp check --example=embassy_spi --features=embassy,embassy-time-systick,async,embassy-executor-thread cargo +esp check --example=embassy_serial --features=embassy,embassy-time-systick,async,embassy-executor-thread cargo +esp check --example=embassy_i2c --features=embassy,embassy-time-systick,async,embassy-executor-thread - name: check esp32s2-hal (embassy, log/defmt) run: | cd esp32s2-hal/ cargo +esp check --examples --features=embassy,embassy-time-timg0,embassy-executor-interrupt,embassy-executor-thread,defmt cargo +esp check --examples --features=embassy,embassy-time-timg0,embassy-executor-interrupt,embassy-executor-thread,log - name: check esp32s2-hal (psram) run: cd esp32s2-hal/ && cargo +esp check --example=psram --features=psram-2m --release # This example requires release! # Make sure we can build without default features enabled, too! - name: check esp32s2-hal (no default features) run: cd esp32s2-hal/ && cargo build --no-default-features # Ensure documentation can be built - name: rustdoc run: cd esp32s2-hal/ && cargo +esp doc --features=eh1 esp32s3-hal: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: esp-rs/xtensa-toolchain@v1.5 with: default: true buildtargets: esp32s3 ldproxy: false - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf toolchain: nightly components: rust-src - uses: Swatinem/rust-cache@v2 # build the esp-ulp-riscv-hal examples first to make sure the examples which expect # the ELF files to be present will compile - name: build esp-ulp-riscv-hal prerequisites run: cd esp-ulp-riscv-hal/ && cargo +nightly build --release --features=esp32s3 --examples # 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 +esp build --examples # 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 +esp build --examples --features=eh1,ufmt,log cargo +esp build --examples --features=eh1,ufmt,defmt - name: check esp32s3-hal (embassy, timg0) run: | cd esp32s3-hal/ cargo +esp check --example=embassy_hello_world --features=embassy,embassy-time-timg0,embassy-executor-thread cargo +esp check --example=embassy_multicore --features=embassy,embassy-time-timg0,embassy-executor-thread cargo +esp check --example=embassy_multicore_interrupt --features=embassy,embassy-time-timg0,embassy-executor-interrupt cargo +esp check --example=embassy_multiprio --features=embassy,embassy-time-timg0,embassy-executor-thread,embassy-executor-interrupt - name: check esp32s3-hal (embassy, systick) run: | cd esp32s3-hal/ cargo +esp check --example=embassy_hello_world --features=embassy,embassy-time-systick,embassy-executor-thread cargo +esp check --example=embassy_multicore --features=embassy,embassy-time-systick,embassy-executor-thread cargo +esp check --example=embassy_multicore_interrupt --features=embassy,embassy-time-systick,embassy-executor-interrupt cargo +esp check --example=embassy_multiprio --features=embassy,embassy-time-systick,embassy-executor-thread,embassy-executor-interrupt - name: check esp32s3-hal (embassy, timg0, async) run: | cd esp32s3-hal/ cargo +esp check --example=embassy_wait --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_spi --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_serial --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_i2c --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_i2s_read --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_i2s_sound --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_rmt_rx --features=embassy,embassy-time-timg0,async,embassy-executor-thread cargo +esp check --example=embassy_rmt_tx --features=embassy,embassy-time-timg0,async,embassy-executor-thread - name: check esp32s3-hal (embassy, systick, async) run: | cd esp32s3-hal/ cargo +esp check --example=embassy_wait --features=embassy,embassy-time-systick,async,embassy-executor-thread cargo +esp check --example=embassy_spi --features=embassy,embassy-time-systick,async,embassy-executor-thread cargo +esp check --example=embassy_serial --features=embassy,embassy-time-systick,async,embassy-executor-thread cargo +esp check --example=embassy_i2c --features=embassy,embassy-time-systick,async,embassy-executor-thread cargo +esp check --example=embassy_usb_serial_jtag --features=embassy,embassy-time-systick,async,embassy-executor-thread - name: check esp32s3-hal (octal psram and psram) run: | # This examples require release! cd esp32s3-hal/ cargo +esp check --example=octal_psram --features=opsram-2m --release cargo +esp check --example=psram --features=psram-2m --release - name: check esp32s3-hal (embassy, log/defmt) run: | cd esp32s3-hal/ cargo +esp check --examples --features=embassy,embassy-time-timg0,embassy-executor-interrupt,embassy-executor-thread,defmt cargo +esp check --examples --features=embassy,embassy-time-timg0,embassy-executor-interrupt,embassy-executor-thread,log # Make sure we can build without default features enabled, too! - name: check esp32s3-hal (no default features) run: cd esp32s3-hal/ && cargo build --no-default-features # Ensure documentation can be built - name: rustdoc run: cd esp32s3-hal/ && cargo doc --features=eh1 # -------------------------------------------------------------------------- # MSRV msrv-riscv: runs-on: ubuntu-latest env: RUSTC_BOOTSTRAP: 1 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf toolchain: ${{ env.MSRV }} components: rust-src - uses: Swatinem/rust-cache@v2 # Build the esp32c6-lp-hal examples first. This is done to ensure the # examples which expect the ELF files to be present will compile: - name: build esp32c6-lp-hal prerequisites run: cd esp32c6-lp-hal && cargo build --release --examples # Verify the MSRV for all RISC-V chips. - name: msrv (esp32c2-hal) run: | cd esp32c2-hal/ cargo build --features=eh1,ufmt,log cargo build --features=defmt - name: msrv (esp32c3-hal) run: | cd esp32c3-hal/ cargo build --features=eh1,ufmt,log cargo build --features=defmt - name: msrv (esp32c6-hal) run: | cd esp32c6-hal/ cargo build --features=eh1,ufmt,log cargo build --features=defmt - name: msrv (esp32c6-lp-hal) run: | cd esp32c6-lp-hal/ cargo build - name: msrv (esp32h2-hal) run: | cd esp32h2-hal/ cargo build --features=eh1,ufmt,log cargo build --features=defmt msrv-xtensa: runs-on: ubuntu-latest env: RUSTC_BOOTSTRAP: 1 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf toolchain: ${{ env.MSRV }} components: rust-src - uses: esp-rs/xtensa-toolchain@v1.5 with: ldproxy: false version: ${{ env.MSRV }} - uses: Swatinem/rust-cache@v2 # Build the `esp-ulp-riscv-hal` examples first. This is done to ensure # the examples which expect the ELF files to be present will compile: - name: build esp-ulp-riscv-hal prerequisites run: cd esp-ulp-riscv-hal && cargo build --release --features=esp32s3 --examples # Verify the MSRV for all Xtensa chips: - name: msrv (esp32-hal) run: | cd esp32-hal/ cargo build --features=eh1,ufmt,log cargo build --features=defmt - name: msrv (esp32s2-hal) run: | cd esp32s2-hal/ cargo build --features=eh1,ufmt,log cargo build --features=defmt - name: msrv (esp32s3-hal) run: | cd esp32s3-hal/ cargo build --features=eh1,ufmt,log cargo build --features=defmt # -------------------------------------------------------------------------- # Lint clippy-riscv: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@v1 with: toolchain: nightly targets: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf components: clippy,rust-src - uses: Swatinem/rust-cache@v2 # Run 'cargo clippy' on all packages targeting RISC-V: - name: clippy (esp-riscv-rt) run: cd esp-riscv-rt && cargo clippy --target=riscv32imc-unknown-none-elf -- -D warnings - name: clippy (esp-ulp-riscv-hal, esp32s2) run: cd esp-ulp-riscv-hal && cargo clippy --features=esp32s2 -- -D warnings - name: clippy (esp-ulp-riscv-hal, esp32s3) run: cd esp-ulp-riscv-hal && cargo clippy --features=esp32s3 -- -D warnings - name: clippy (esp32c2-hal) run: cd esp32c2-hal && cargo clippy -- -D warnings - name: clippy (esp32c3-hal) run: cd esp32c3-hal && cargo clippy -- -D warnings - name: clippy (esp32c6-hal) run: cd esp32c6-hal && cargo clippy -- -D warnings - name: clippy (esp32c6-lp-hal) run: cd esp32c6-lp-hal && cargo clippy -- -D warnings - name: clippy (esp32h2-hal) run: cd esp32h2-hal && cargo clippy -- -D warnings clippy-xtensa: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: esp-rs/xtensa-toolchain@v1.5 with: ldproxy: false - uses: Swatinem/rust-cache@v2 # Run 'cargo clippy' on all packages targeting Xtensa: - name: clippy (esp32-hal) run: cd esp32-hal && cargo clippy -- -D warnings - name: clippy (esp32s2-hal) run: cd esp32s2-hal && cargo clippy -- -D warnings - name: clippy (esp32s3-hal) run: cd esp32s3-hal && cargo clippy -- -D warnings rustfmt: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # Some of the configuration items in 'rustfmt.toml' require the 'nightly' # release channel: - uses: dtolnay/rust-toolchain@v1 with: toolchain: nightly components: rustfmt - uses: Swatinem/rust-cache@v2 # 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 (esp-hal-smartled) run: cargo fmt --all --manifest-path=esp-hal-smartled/Cargo.toml -- --check - name: rustfmt (esp-riscv-rt) run: cargo fmt --all --manifest-path=esp-riscv-rt/Cargo.toml -- --check - name: rustfmt (esp-ulp-riscv-hal) run: cargo fmt --all --manifest-path=esp-ulp-riscv-hal/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 (esp32c6-hal) run: cargo fmt --all --manifest-path=esp32c6-hal/Cargo.toml -- --check - name: rustfmt (esp32c6-lp-hal) run: cargo fmt --all --manifest-path=esp32c6-lp-hal/Cargo.toml -- --check - name: rustfmt (esp32h2-hal) run: cargo fmt --all --manifest-path=esp32h2-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