diff --git a/.github/actions/check-packages/action.yml b/.github/actions/check-packages/action.yml new file mode 100644 index 00000000000..d532c7e2acf --- /dev/null +++ b/.github/actions/check-packages/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 f8c2a1005eb..d999374176d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,85 +53,37 @@ jobs: matrix: device: [ # RISC-V devices: - # Stable toolchain { 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" }, - # Nightly toolchain - { soc: "esp32c2", target: "riscv32imc-unknown-none-elf", toolchain: "nightly" }, - { soc: "esp32c3", target: "riscv32imc-unknown-none-elf", toolchain: "nightly" }, - { soc: "esp32c6", target: "riscv32imac-unknown-none-elf", toolchain: "nightly" }, - { soc: "esp32h2", target: "riscv32imac-unknown-none-elf", toolchain: "nightly" }, # Xtensa devices: { 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 - if [ "${{ matrix.device.toolchain }}" == "nightly" ]; then - echo "LINTING_TOOLCHAIN=+nightly" >> $GITHUB_ENV - else - echo "LINTING_TOOLCHAIN=+esp" >> $GITHUB_ENV - fi - uses: actions/checkout@v4 # Install the Rust toolchain for Xtensa devices: - uses: esp-rs/xtensa-toolchain@v1.5 - if: contains(fromJson('["stable", "esp"]'), matrix.device.toolchain) with: ldproxy: false # Install the Rust stable toolchain for RISC-V devices: - uses: dtolnay/rust-toolchain@v1 - if: contains(fromJson('["stable", "esp"]'), matrix.device.toolchain) with: target: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf toolchain: stable components: rust-src - - uses: dtolnay/rust-toolchain@v1 - if: contains(fromJson('["nightly"]'), matrix.device.toolchain) - with: - target: riscv32imc-unknown-none-elf,riscv32imac-unknown-none-elf - toolchain: nightly - components: rust-src + - 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 \ - --toolchain=${{ matrix.device.toolchain }} \ - --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 $LINTING_TOOLCHAIN xtask run-doc-test esp-hal ${{ matrix.device.soc }} - - name: Check documentation - run: cargo $LINTING_TOOLCHAIN 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 $LINTING_TOOLCHAIN xtask lint-packages --chips ${{ matrix.device.soc }} + - name: Build and Check + uses: ./.github/actions/check-packages + with: + device: ${{ matrix.device.soc }} + target: ${{ matrix.device.target }} + toolchain: ${{ matrix.device.toolchain }} extras: runs-on: ubuntu-latest diff --git a/.github/workflows/ci_nightly.yml b/.github/workflows/ci_nightly.yml new file mode 100644 index 00000000000..7844ae8b72d --- /dev/null +++ b/.github/workflows/ci_nightly.yml @@ -0,0 +1,56 @@ +name: CI - nightly + +on: + pull_request: + push: + branches-ignore: + - "gh-readonly-queue/**" + 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-packages + with: + device: ${{ matrix.device.soc }} + target: ${{ matrix.device.target }} + toolchain: nightly