diff --git a/.github/actions/check-esp-hal/action.yml b/.github/actions/check-esp-hal/action.yml new file mode 100644 index 00000000000..d532c7e2acf --- /dev/null +++ b/.github/actions/check-esp-hal/action.yml @@ -0,0 +1,61 @@ +name: Build and Check +description: Build and check the esp-hal and esp-lp-hal pacakges for a specified device +inputs: + device: + description: "Device SOC" + required: true + target: + description: "Target" + required: true + toolchain: + description: "Toolchain channel" + required: true +runs: + using: "composite" + steps: + - name: Set up cargo environment + shell: bash + run: | + # Convert the target triple from kebab-case to SCREAMING_SNAKE_CASE: + big_target=$(echo "${{ matrix.device.target }}" | tr [:lower:] [:upper:] | tr '-' '_') + # Set the *target specific* RUSTFLAGS for the current device: + echo "CARGO_TARGET_${big_target}_RUSTFLAGS=-Dwarnings" >> $GITHUB_ENV + # Linting toolchain (stable cant build documentation) + if [ "${{ inputs.toolchain }}" == "nightly" ]; then + echo "LINTING_TOOLCHAIN=+nightly" >> $GITHUB_ENV + else + echo "LINTING_TOOLCHAIN=+esp" >> $GITHUB_ENV + fi + # Clippy and docs checks + - name: Clippy + shell: bash + run: cargo $LINTING_TOOLCHAIN xtask lint-packages --chips ${{ inputs.device }} + - name: Check doc-tests + shell: bash + run: cargo $LINTING_TOOLCHAIN xtask run-doc-test esp-hal ${{ inputs.device }} + - name: Check documentation + shell: bash + run: cargo $LINTING_TOOLCHAIN xtask build-documentation --packages esp-hal --chips ${{ inputs.device }} + # Build all supported examples for the low-power core first (if present): + - name: Build prerequisite examples (esp-lp-hal) + shell: bash + if: contains(fromJson('["esp32c6", "esp32s2", "esp32s3"]'), inputs.device) + run: cargo +${{ inputs.toolchain }} xtask build-examples esp-lp-hal ${{ inputs.device }} + - name: Check esp-lp-hal documentation + shell: bash + if: contains(fromJson('["esp32c6", "esp32s2", "esp32s3"]'), inputs.device) + run: cargo $LINTING_TOOLCHAIN xtask build-documentation --packages esp-lp-hal --chips ${{ inputs.device }} + # Make sure we're able to build the HAL without the default features + # enabled: + - name: Build (no features) + shell: bash + run: | + cargo xtask build-package \ + --no-default-features \ + --toolchain=${{ inputs.toolchain }} \ + --features=${{ inputs.device }} \ + --target=${{ inputs.target }} \ + esp-hal + - name: Build (examples) + shell: bash + run: cargo +${{ inputs.toolchain }} xtask build-examples esp-hal ${{ inputs.device }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a4e3199245d..ed47d4ad3e3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ # 1.) In the 'esp-hal' job, add the name of the chip to the `matrix.soc` array. # 1a.) If the device has a low-power core (which is supported in # `esp-lp-hal`), then update the `if` condition to build prerequisites. -# 2.) In the 'msrv-riscv' job, add checks as needed for the new chip. +# 2.) In the 'msrv' job, add checks as needed for the new chip. name: CI @@ -40,6 +40,7 @@ jobs: esp-hal: name: esp-hal (${{ matrix.device.soc }}) runs-on: ubuntu-latest + continue-on-error: ${{ matrix.device.toolchain == 'nightly' }} env: SSID: SSID PASSWORD: PASSWORD @@ -52,37 +53,23 @@ jobs: matrix: device: [ # RISC-V devices: - { soc: "esp32c2", target: "riscv32imc-unknown-none-elf" }, - { soc: "esp32c3", target: "riscv32imc-unknown-none-elf" }, - { soc: "esp32c6", target: "riscv32imac-unknown-none-elf" }, - { soc: "esp32h2", target: "riscv32imac-unknown-none-elf" }, + { soc: "esp32c2", target: "riscv32imc-unknown-none-elf", toolchain: "stable" }, + { soc: "esp32c3", target: "riscv32imc-unknown-none-elf", toolchain: "stable" }, + { soc: "esp32c6", target: "riscv32imac-unknown-none-elf", toolchain: "stable" }, + { soc: "esp32h2", target: "riscv32imac-unknown-none-elf", toolchain: "stable" }, # Xtensa devices: - { soc: "esp32", target: "xtensa-esp32-none-elf" }, - { soc: "esp32s2", target: "xtensa-esp32s2-none-elf" }, - { soc: "esp32s3", target: "xtensa-esp32s3-none-elf" }, + { soc: "esp32", target: "xtensa-esp32-none-elf", toolchain: "esp" }, + { soc: "esp32s2", target: "xtensa-esp32s2-none-elf", toolchain: "esp" }, + { soc: "esp32s3", target: "xtensa-esp32s3-none-elf", toolchain: "esp" }, ] - steps: - - name: Set up cargo environment - run: | - # Convert the target triple from kebab-case to SCREAMING_SNAKE_CASE: - big_target=$(echo "${{ matrix.device.target }}" | tr [:lower:] [:upper:] | tr '-' '_') - # Set the *target specific* RUSTFLAGS for the current device: - echo "CARGO_TARGET_${big_target}_RUSTFLAGS=-Dwarnings" >> $GITHUB_ENV - - uses: actions/checkout@v4 # Install the Rust toolchain for Xtensa devices: - uses: esp-rs/xtensa-toolchain@v1.5 with: - default: true ldproxy: false - # Install the Rust stable and nightly toolchains for RISC-V devices: - - uses: dtolnay/rust-toolchain@v1 - with: - target: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf - toolchain: nightly - components: rust-src + # Install the Rust stable toolchain for RISC-V devices: - uses: dtolnay/rust-toolchain@v1 with: target: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf @@ -91,36 +78,12 @@ jobs: - uses: Swatinem/rust-cache@v2 - # Build all supported examples for the low-power core first (if present): - - if: contains(fromJson('["esp32c6", "esp32s2", "esp32s3"]'), matrix.device.soc) - name: Build prerequisite examples (esp-lp-hal) - run: cargo xtask build-examples esp-lp-hal ${{ matrix.device.soc }} - - if: contains(fromJson('["esp32c6", "esp32s2", "esp32s3"]'), matrix.device.soc) - name: Check esp-lp-hal documentation - run: cargo xtask build-documentation --packages esp-lp-hal --chips ${{ matrix.device.soc }} - - # Make sure we're able to build the HAL without the default features - # enabled: - - name: Build (no features) - run: | - cargo xtask build-package \ - --no-default-features \ - --features=${{ matrix.device.soc }} \ - --target=${{ matrix.device.target }} \ - esp-hal - # Build all supported examples for the specified device: - - name: Build (examples) - run: cargo xtask build-examples esp-hal ${{ matrix.device.soc }} - # Check doc-tests - - name: Check doc-tests - run: cargo +esp xtask run-doc-test esp-hal ${{ matrix.device.soc }} - - name: Check documentation - run: cargo xtask build-documentation --packages esp-hal --chips ${{ matrix.device.soc }} - # Run clippy - - name: Clippy - # We use the 'esp' toolchain for *all* targets, in order to get a - # semi-stable and consistent set of lints for all targets: - run: cargo +esp xtask lint-packages --chips ${{ matrix.device.soc }} + - name: Build and Check + uses: ./.github/actions/check-esp-hal + with: + device: ${{ matrix.device.soc }} + target: ${{ matrix.device.target }} + toolchain: ${{ matrix.device.toolchain }} extras: runs-on: ubuntu-latest @@ -152,10 +115,8 @@ jobs: steps: - uses: actions/checkout@v4 - # install esp toolchain first so it isn't set as the default - uses: esp-rs/xtensa-toolchain@v1.5 with: - default: true ldproxy: false version: ${{ env.MSRV }} - uses: dtolnay/rust-toolchain@v1 @@ -232,7 +193,7 @@ jobs: steps: - uses: actions/checkout@v4 - + # Install the Rust toolchain for RISC-V devices: - if: ${{ !contains(fromJson('["esp32", "esp32s2", "esp32s3"]'), matrix.target.soc) }} uses: dtolnay/rust-toolchain@v1 @@ -245,7 +206,6 @@ jobs: uses: esp-rs/xtensa-toolchain@v1.5 with: buildtargets: ${{ matrix.target.soc }} - default: true ldproxy: false - uses: Swatinem/rust-cache@v2 diff --git a/.github/workflows/ci_nightly.yml b/.github/workflows/ci_nightly.yml new file mode 100644 index 00000000000..ed51fe1920a --- /dev/null +++ b/.github/workflows/ci_nightly.yml @@ -0,0 +1,52 @@ +name: CI - nightly + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" + +env: + CARGO_TERM_COLOR: always + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RUSTDOCFLAGS: -Dwarnings + +jobs: + + esp-hal-nightly: + name: esp-hal | nightly (${{ matrix.device.soc }}) + runs-on: ubuntu-latest + env: + SSID: SSID + PASSWORD: PASSWORD + STATIC_IP: 1.1.1.1 + GATEWAY_IP: 1.1.1.1 + HOST_IP: 1.1.1.1 + + strategy: + fail-fast: false + matrix: + device: [ + # RISC-V devices: + { soc: "esp32c2", target: "riscv32imc-unknown-none-elf" }, + { soc: "esp32c3", target: "riscv32imc-unknown-none-elf" }, + { soc: "esp32c6", target: "riscv32imac-unknown-none-elf" }, + { soc: "esp32h2", target: "riscv32imac-unknown-none-elf" }, + ] + steps: + - uses: actions/checkout@v4 + + # Install the Rust nightly toolchain for RISC-V devices: + - uses: dtolnay/rust-toolchain@v1 + with: + target: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf + toolchain: nightly + components: rust-src, clippy, rustfmt + + - uses: Swatinem/rust-cache@v2 + + - name: Build and Check + uses: ./.github/actions/check-esp-hal + with: + device: ${{ matrix.device.soc }} + target: ${{ matrix.device.target }} + toolchain: nightly diff --git a/.github/workflows/hil.yml b/.github/workflows/hil.yml index 77170623bde..97ab1ca4ee7 100644 --- a/.github/workflows/hil.yml +++ b/.github/workflows/hil.yml @@ -116,7 +116,7 @@ jobs: # Xtensa devices: - soc: esp32s2 runner: esp32s2-jtag - usb: USB0 + usb: USB1 - soc: esp32s3 runner: esp32s3-usb usb: USB0 diff --git a/xtask/src/main.rs b/xtask/src/main.rs index e5953ea362e..ceb664f1069 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -644,9 +644,7 @@ fn lint_packages(workspace: &Path, args: LintPackagesArgs) -> Result<()> { fn lint_package(path: &Path, args: &[&str]) -> Result<()> { log::info!("Linting package: {}", path.display()); - let mut builder = CargoArgsBuilder::default() - .toolchain("esp") - .subcommand("clippy"); // TODO: Is this still actually required? + let mut builder = CargoArgsBuilder::default().subcommand("clippy"); for arg in args { builder = builder.arg(arg.to_string());