name: CI - nightly

on:
  workflow_dispatch:
  schedule:
    - cron: "0 0 * * *"

env:
  CARGO_TERM_COLOR: always
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  RUSTDOCFLAGS: -Dwarnings
  DEFMT_LOG: trace

jobs:
  esp-hal-nightly:
    name: esp-hal | nightly (${{ matrix.device }})
    runs-on: ubuntu-latest
    env:
      CI: 1
      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: ["esp32c2", "esp32c3", "esp32c6", "esp32h2"]
    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

      - name: Setup cargo-batch
        run: |
          # Note this is linux-only, but the macOS runner has cargo batch installed
          if ! command -v cargo-batch &> /dev/null; then
              mkdir -p $HOME/.cargo/bin
              curl -L https://github.com/embassy-rs/cargo-batch/releases/download/batch-0.6.0/cargo-batch > $HOME/.cargo/bin/cargo-batch
              chmod +x $HOME/.cargo/bin/cargo-batch
          fi

      - name: Build and Check
        shell: bash
        run: cargo xtask ci ${{ matrix.device }} --toolchain nightly

      # Check for unused dependencies through esp-hal packages
      - name: Install and run cargo machete
        run: |
          cargo install cargo-machete
          cargo machete

  check-global-symbols:
    name: Check Global Symbols in esp-hal
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

       # Install the Rust toolchain for Xtensa devices:
      - uses: esp-rs/xtensa-toolchain@v1.6
        with:
          version: 1.90.0.0

      # Check all chips at once only for esp-hal
      - name: Run check-global-symbols
        run: cargo xtask check-global-symbols

  create-issue:
    name: Create GitHub Issue if any job failed
    runs-on: ubuntu-latest
    needs: [esp-hal-nightly, check-global-symbols]
    if: ${{ failure() }}
    steps:
      - uses: actions/checkout@v4
      - run: |
          sudo apt-get install gh -y
          ISSUE_NAME=$(gh issue list --state open --search "Nightly CI Failure in:title" --json number --jq '.[0].number')
          if [[ -z "$ISSUE_NAME" ]];
          then
            gh issue create \
              --title "Nightly CI Failure" \
              --body "One or more jobs failed! [View the failed workflow](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})." \
              --label "ci-nightly" \
              --assignee JurajSadel
          fi
