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 }}
