name: Validate ESPHome

on:
  push:
    paths:
      - "nspanel_esphome*.yaml"
      - "advanced/esphome/nspanel_esphome*.yaml"
  pull_request:
    paths:
      - "nspanel_esphome*.yaml"
      - "advanced/esphome/nspanel_esphome*.yaml"
  #schedule:
  #  - cron: "0 0 * * *"
  workflow_dispatch:

concurrency:
  # yamllint disable-line rule:line-length
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  code_scan:
    name: Code scan (YAML)
    runs-on: "ubuntu-latest"
    steps:
      - uses: actions/checkout@v4.1.0
      - name: Validate nspanel_esphome.yaml
        run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome.yaml
      - name: Validate nspanel_esphome_core.yaml
        run: yamllint -c "./.yamllint/rules.yml" advanced/esphome/nspanel_esphome_core.yaml
      - name: Validate nspanel_esphome_addon_upload_tft.yaml
        run: yamllint -c "./.yamllint/rules.yml" advanced/esphome/nspanel_esphome_addon_upload_tft.yaml
      - name: Validate nspanel_esphome_advanced.yaml
        run: yamllint -c "./.yamllint/rules.yml" advanced/esphome/nspanel_esphome_advanced.yaml
      - name: Validate nspanel_esphome_addon_climate_base.yaml
        run: yamllint -c "./.yamllint/rules.yml" advanced/esphome/nspanel_esphome_addon_climate_base.yaml
      - name: Validate nspanel_esphome_addon_climate_cool.yaml
        run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_cool.yaml
      - name: Validate nspanel_esphome_addon_climate_heat.yaml
        run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_heat.yaml

  build_core:
    name: Core
    runs-on: "ubuntu-latest"
    needs:
      - code_scan
    steps:
      - uses: actions/checkout@v4.1.0
      - name: Build core
        uses: esphome/build-action@v1.8.0
        with:
          yaml_file: "./.test/esphome_core.yaml"

  build_advanced:
    name: Advanced
    runs-on: "ubuntu-latest"
    needs:
      - build_core
    steps:
      - uses: actions/checkout@v4.1.0
      - name: Build core+advanced
        uses: esphome/build-action@v1.8.0
        with:
          yaml_file: "./.test/esphome_advanced.yaml"

  build_climate_heat:
    name: Climate (heat)
    runs-on: "ubuntu-latest"
    needs:
      - build_core
    steps:
      - uses: actions/checkout@v4.1.0
      - name: Build core+climate_heat
        uses: esphome/build-action@v1.8.0
        with:
          yaml_file: "./.test/esphome_climate_heat.yaml"

  build_climate_cool:
    name: Climate (cool)
    runs-on: "ubuntu-latest"
    needs:
      - build_core
    steps:
      - uses: actions/checkout@v4.1.0
      - name: Build core+climate_cool
        uses: esphome/build-action@v1.8.0
        with:
          yaml_file: "./.test/esphome_climate_cool.yaml"

  build_climate_heat_advanced:
    name: Advanced+climate (heat)
    runs-on: "ubuntu-latest"
    needs:
      - build_climate_heat
      - build_advanced
    steps:
      - uses: actions/checkout@v4.1.0
      - name: Build core+advanced+climate_heat
        uses: esphome/build-action@v1.8.0
        with:
          yaml_file: "./.test/esphome_advanced_climate_heat.yaml"

  build_climate_cool_advanced_esp_idf:
    name: esp-idf & Bluetooth proxy
    runs-on: "ubuntu-latest"
    needs:
      - build_climate_cool
      - build_advanced
    steps:
      - uses: actions/checkout@v4.1.0
      - name: Build core+advanced+climate_cool+esp_idf
        uses: esphome/build-action@v1.8.0
        with:
          yaml_file: "./.test/esphome_advanced_climate_cool_esp_idf.yaml"

  #build_climate_cool_advanced_esp_idf5:
  #  name: esp-idf v5 & Bluetooth proxy
  #  runs-on: "ubuntu-latest"
  #  needs:
  #    - build_climate_cool_advanced_esp_idf
  #  steps:
  #    - uses: actions/checkout@v4.1.0
  #    - name: Build core+advanced+climate_cool+esp_idf5
  #      uses: esphome/build-action@v1.8.0
  #      with:
  #        yaml_file: "./.test/esphome_advanced_climate_cool_esp_idf5.yaml"

  build_climate_heat_advanced_customization:
    name: Customizations
    runs-on: "ubuntu-latest"
    needs:
      - build_climate_heat_advanced
      - build_climate_cool_advanced_esp_idf
    steps:
      - uses: actions/checkout@v4.1.0
      - name: Build core+advanced+climate_heat+customizations
        uses: esphome/build-action@v1.8.0
        with:
          yaml_file: "./.test/esphome_advanced_climate_heat_customizations.yaml"

  #build_climate_cool_advanced_esp_idf5:
  #  name: esp-idf v5 & Bluetooth proxy
  #  runs-on: "ubuntu-latest"
  #  needs:
  #    - build_climate_cool
  #    - build_advanced
  #  steps:
  #    - uses: actions/checkout@v4.1.0
  #    - name: Build core+advanced+climate_cool+esp_idf
  #      uses: esphome/build-action@v1.8.0
  #      with:
  #        yaml_file: "./.test/esphome_advanced_climate_cool_esp_idf5.yaml"

