From b788ad8a1cae14bb3363089b928b2117b1db3f3d Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Wed, 8 May 2024 10:09:44 +0200 Subject: [PATCH] Use new test format for beta --- .github/workflows/validate_esphome_beta.yml | 389 ++++++++++++++------ 1 file changed, 273 insertions(+), 116 deletions(-) diff --git a/.github/workflows/validate_esphome_beta.yml b/.github/workflows/validate_esphome_beta.yml index 5dfb035..4411c9c 100644 --- a/.github/workflows/validate_esphome_beta.yml +++ b/.github/workflows/validate_esphome_beta.yml @@ -3,160 +3,334 @@ 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: - # yamllint disable-line rule:line-length 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: - - uses: actions/checkout@main - with: - fetch-depth: '0' - - name: Validate nspanel_esphome.yaml - run: yamllint -c "./.rules/yamllint.yml" nspanel_esphome.yaml + - name: Checkout Code + uses: actions/checkout@main - build_core: - name: Core - runs-on: "ubuntu-latest" - needs: - - code_scan - steps: - - uses: actions/checkout@main + - name: Setup Python + uses: actions/setup-python@main with: - fetch-depth: '0' - - name: Build core + 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: "./.test/esphome_basic.yaml" + yaml_file: ${{ matrix.yaml_file }} version: beta build_advanced: name: Advanced - runs-on: "ubuntu-latest" - needs: - - build_core + 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: - - uses: actions/checkout@main - with: - fetch-depth: '0' - - name: Build core+advanced + - name: Checkout repository + uses: actions/checkout@main + + - name: Build Advanced Firmware uses: barndawgie/build-action@v1.9.0 with: - yaml_file: "./.test/esphome_advanced.yaml" + yaml_file: ${{ matrix.yaml_file }} version: beta - build_climate_heat: - name: Climate (heat) - runs-on: "ubuntu-latest" - needs: - - build_core + 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: - - uses: actions/checkout@main - with: - fetch-depth: '0' - - name: Build core+climate_heat + - name: Checkout repository + uses: actions/checkout@main + + - name: Build BLE Tracker Firmware uses: barndawgie/build-action@v1.9.0 with: - yaml_file: "./.test/esphome_climate_heat.yaml" + 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) - runs-on: "ubuntu-latest" - needs: - - build_core + 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: - - uses: actions/checkout@main - with: - fetch-depth: '0' - - name: Build core+climate_cool + - name: Checkout repository + uses: actions/checkout@main + + - name: Build Climate Cool Firmware uses: barndawgie/build-action@v1.9.0 with: - yaml_file: "./.test/esphome_climate_cool.yaml" + 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) - runs-on: "ubuntu-latest" - needs: - - build_core + 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: - - uses: actions/checkout@main - with: - fetch-depth: '0' - - name: Build core+climate_dual + - name: Checkout repository + uses: actions/checkout@main + + - name: Build Climate Dial Firmware uses: barndawgie/build-action@v1.9.0 with: - yaml_file: "./.test/esphome_climate_dual.yaml" + yaml_file: ${{ matrix.yaml_file }} version: beta - build_climate_heat_advanced: - name: Advanced+climate (heat) - runs-on: "ubuntu-latest" + build_customizations: + name: Customizations needs: - - build_climate_heat - 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: - - uses: actions/checkout@main - with: - fetch-depth: '0' - - name: Build core+advanced+climate_heat + - name: Checkout repository + uses: actions/checkout@main + + - name: Build Customizations Firmware uses: barndawgie/build-action@v1.9.0 with: - yaml_file: "./.test/esphome_advanced_climate_heat.yaml" + yaml_file: ${{ matrix.yaml_file }} version: beta - build_climate_cool_advanced_arduino: - name: Arduino - runs-on: "ubuntu-latest" + build_climate_ble_proxy: + name: Climate Cool + Bluetooth Proxy needs: - build_climate_cool - - build_advanced - steps: - - uses: actions/checkout@main - with: - fetch-depth: '0' - - name: Build core+advanced+climate_cool+arduino - uses: barndawgie/build-action@v1.9.0 - with: - yaml_file: "./.test/esphome_advanced_climate_cool_arduino.yaml" - version: beta + - 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" - build_climate_dual_esp_idf5: - name: esp-idf v5 & Climate Dual & Bluetooth proxy - runs-on: "ubuntu-latest" - needs: - - build_advanced - - build_climate_dual steps: - - uses: actions/checkout@main - with: - fetch-depth: '0' - - name: Build core+climate_dual+bt_proxy+esp_idf5 - uses: barndawgie/build-action@v1.9.0 - with: - yaml_file: "./.test/esphome_advanced_climate_dual_esp_idf5.yaml" - version: beta + - name: Checkout repository + uses: actions/checkout@main - build_climate_heat_advanced_customization: - name: Customizations - runs-on: "ubuntu-latest" - needs: - - code_scan - steps: - - uses: actions/checkout@main - with: - fetch-depth: '0' - - name: Build core+advanced+climate_heat+customizations + - name: Build Customizations Firmware uses: barndawgie/build-action@v1.9.0 with: - yaml_file: "./.test/esphome_advanced_climate_heat_customizations.yaml" + yaml_file: ${{ matrix.yaml_file }} version: beta build_prebuilt_firmware: @@ -166,8 +340,6 @@ jobs: if: github.ref == 'refs/heads/dev' || github.base_ref == 'dev' steps: - uses: actions/checkout@main - with: - fetch-depth: '0' - name: Build ESPHome Prebuilt Firmware uses: barndawgie/build-action@v1.9.0 @@ -180,19 +352,4 @@ jobs: with: yaml_file: prebuilt/wall_display.yaml version: beta - - build_climate_cool_bluetooth_proxy: - name: Climate cool & BLE proxy - runs-on: "ubuntu-latest" - needs: - - build_climate_cool - steps: - - uses: actions/checkout@main - with: - fetch-depth: '0' - - name: Build core+climate_cool+bluetooth_proxy - uses: barndawgie/build-action@v1.9.0 - with: - yaml_file: "./.test/esphome_climate_cool_bluetooth_proxy.yaml" - version: beta ...