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

      - uses: Swatinem/rust-cache@v2

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

      - if: failure()
        name: Create or Update GitHub Issue
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        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 "Nightly CI Workflow Failed! [View the failed job](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})." \
              --label "ci-nightly"
          fi
