--- name: Validate ESPHome (beta) # yamllint disable-line rule:truthy on: push: paths: - "nspanel_esphome*.yaml" - "esphome/nspanel_esphome*.yaml" - "prebuilt/nspanel_esphome*.yaml" - "prebuilt/wall_display*.yaml" - ".test/*.yaml" - "*.h" - "*.c" - "*.cpp" - "*.py" pull_request: paths: - "nspanel_esphome*.yaml" - "esphome/nspanel_esphome*.yaml" - "prebuilt/nspanel_esphome*.yaml" - "prebuilt/wall_display*.yaml" - ".test/*.yaml" - "*.h" - "*.c" - "*.cpp" - "*.py" workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: setup_dependencies: name: Setup & Cache Dependencies runs-on: ubuntu-latest outputs: cache-hit-idf-v4: ${{ steps.cache-idf-v4.outputs.cache-hit }} cache-hit-idf-v5: ${{ steps.cache-idf-v5.outputs.cache-hit }} cache-hit-arduino: ${{ steps.cache-arduino.outputs.cache-hit }} steps: - name: Checkout repository uses: actions/checkout@main - name: Cache ESP-IDF v4 Dependencies id: cache-idf-v4 uses: actions/cache@main with: path: | ~/.esphome/cache ~/.platformio/packages ~/.platformio/platforms key: ${{ runner.os }}-esp-idf-v4-${{ hashFiles('**/esphome_idf_basic.yaml') }} restore-keys: | ${{ runner.os }}-esp-idf-v4- - name: Cache ESP-IDF v5 Dependencies id: cache-idf-v5 uses: actions/cache@main with: path: | ~/.esphome/cache ~/.platformio/packages ~/.platformio/platforms key: ${{ runner.os }}-esp-idf-v5-${{ hashFiles('**/esphome_idf5_basic.yaml') }} restore-keys: | ${{ runner.os }}-esp-idf-v5- - name: Cache Arduino Dependencies id: cache-arduino uses: actions/cache@main with: path: | ~/.esphome/cache ~/.platformio/packages ~/.platformio/platforms key: ${{ runner.os }}-arduino-${{ hashFiles('**/esphome_ard_basic.yaml') }} restore-keys: | ${{ runner.os }}-arduino- code_scan: name: Code scan (YAML) runs-on: "ubuntu-latest" needs: setup_dependencies steps: - name: Checkout Code uses: actions/checkout@main - name: Setup Python uses: actions/setup-python@main with: python-version: '3.8' - name: Install Yamllint run: pip install yamllint - name: Validate YAML files run: find . -name "*.yaml" -exec yamllint -c ./.rules/yamllint.yml {} + build_cores: name: Core needs: [code_scan, setup_dependencies] runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - id: idf_v4 yaml_file: ".test/esphome_idf_basic.yaml" cache-hit: ${{ needs.setup_dependencies.outputs.cache-hit-idf-v4 }} - id: idf_v5 yaml_file: ".test/esphome_idf5_basic.yaml" cache-hit: ${{ needs.setup_dependencies.outputs.cache-hit-idf-v5 }} - id: ard yaml_file: ".test/esphome_ard_basic.yaml" cache-hit: ${{ needs.setup_dependencies.outputs.cache-hit-arduino }} steps: - name: Checkout repository uses: actions/checkout@main - name: Firmware if: steps.matrix.outputs.cache-hit != 'true' uses: barndawgie/build-action@v1.9.0 with: yaml_file: ${{ matrix.yaml_file }} version: beta build_advanced: name: Advanced needs: build_cores runs-on: ubuntu-latest strategy: matrix: include: - id: idf_v4 base: idf_v4 yaml_file: ".test/esphome_idf_advanced.yaml" - id: idf_v5 base: idf_v5 yaml_file: ".test/esphome_idf5_advanced.yaml" - id: ard base: ard yaml_file: ".test/esphome_ard_advanced.yaml" steps: - name: Checkout repository uses: actions/checkout@main - name: Build Advanced Firmware uses: barndawgie/build-action@v1.9.0 with: yaml_file: ${{ matrix.yaml_file }} version: beta build_ble_tracker: name: BLE Tracker needs: build_cores runs-on: ubuntu-latest strategy: matrix: include: - id: idf_v4 base: idf_v4 yaml_file: ".test/esphome_idf_ble_tracker.yaml" - id: idf_v5 base: idf_v5 yaml_file: ".test/esphome_idf5_ble_tracker.yaml" steps: - name: Checkout repository uses: actions/checkout@main - name: Build BLE Tracker Firmware uses: barndawgie/build-action@v1.9.0 with: yaml_file: ${{ matrix.yaml_file }} version: beta build_bluetooth_proxy: name: Bluetooth Proxy needs: build_cores runs-on: ubuntu-latest strategy: matrix: include: - id: idf_v4 base: idf_v4 yaml_file: ".test/esphome_idf_bluetooth_proxy.yaml" - id: idf_v5 base: idf_v5 yaml_file: ".test/esphome_idf5_bluetooth_proxy.yaml" steps: - name: Checkout repository uses: actions/checkout@main - name: Build Bluetooth Proxy Firmware uses: barndawgie/build-action@v1.9.0 with: yaml_file: ${{ matrix.yaml_file }} version: beta build_climate_cool: name: Climate Cool needs: build_cores runs-on: ubuntu-latest strategy: matrix: include: - id: idf_v4 base: idf_v4 yaml_file: ".test/esphome_idf_climate_cool.yaml" - id: idf_v5 base: idf_v5 yaml_file: ".test/esphome_idf5_climate_cool.yaml" - id: ard base: ard yaml_file: ".test/esphome_ard_climate_cool.yaml" steps: - name: Checkout repository uses: actions/checkout@main - name: Build Climate Cool Firmware uses: barndawgie/build-action@v1.9.0 with: yaml_file: ${{ matrix.yaml_file }} version: beta build_climate_heat: name: Climate Heat needs: build_cores runs-on: ubuntu-latest strategy: matrix: include: - id: idf_v4 base: idf_v4 yaml_file: ".test/esphome_idf_climate_heat.yaml" - id: idf_v5 base: idf_v5 yaml_file: ".test/esphome_idf5_climate_heat.yaml" - id: ard base: ard yaml_file: ".test/esphome_ard_climate_heat.yaml" steps: - name: Checkout repository uses: actions/checkout@main - name: Build Climate Heat Firmware uses: barndawgie/build-action@v1.9.0 with: yaml_file: ${{ matrix.yaml_file }} version: beta build_climate_dual: name: Climate Dual needs: build_cores runs-on: ubuntu-latest strategy: matrix: include: - id: idf_v4 base: idf_v4 yaml_file: ".test/esphome_idf_climate_dual.yaml" - id: idf_v5 base: idf_v5 yaml_file: ".test/esphome_idf5_climate_dual.yaml" - id: ard base: ard yaml_file: ".test/esphome_ard_climate_dual.yaml" steps: - name: Checkout repository uses: actions/checkout@main - name: Build Climate Dial Firmware uses: barndawgie/build-action@v1.9.0 with: yaml_file: ${{ matrix.yaml_file }} version: beta build_customizations: name: Customizations needs: - build_advanced - build_climate_heat runs-on: ubuntu-latest strategy: matrix: include: - id: idf_v4 base: idf_v4 yaml_file: ".test/esphome_idf_advanced_climate_heat_customizations.yaml" - id: ard base: ard yaml_file: ".test/esphome_ard_advanced_climate_heat_customizations.yaml" steps: - name: Checkout repository uses: actions/checkout@main - name: Build Customizations Firmware uses: barndawgie/build-action@v1.9.0 with: yaml_file: ${{ matrix.yaml_file }} version: beta build_climate_ble_proxy: name: Climate Cool + Bluetooth Proxy needs: - build_climate_cool - build_bluetooth_proxy runs-on: ubuntu-latest strategy: matrix: include: - id: idf_v4 base: idf_v4 yaml_file: ".test/esphome_idf_climate_cool_bluetooth_proxy.yaml" steps: - name: Checkout repository uses: actions/checkout@main - name: Build Customizations Firmware uses: barndawgie/build-action@v1.9.0 with: yaml_file: ${{ matrix.yaml_file }} version: beta build_prebuilt_firmware: name: Prebuilt Firmware runs-on: ubuntu-latest needs: code_scan if: github.ref == 'refs/heads/dev' || github.base_ref == 'dev' steps: - uses: actions/checkout@main - name: Build ESPHome Prebuilt Firmware uses: barndawgie/build-action@v1.9.0 with: yaml_file: prebuilt/nspanel_esphome_prebuilt.yaml version: beta - name: Build ESPHome Prebuilt Wall Display Firmware uses: barndawgie/build-action@v1.9.0 with: yaml_file: prebuilt/wall_display.yaml version: beta ...