diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..1aad176 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,96 @@ + +--- +name: CI + +# yamllint disable-line rule:truthy +on: + push: + branches: [dev, beta, release] + + pull_request: + merge_group: + +permissions: + contents: read + +concurrency: + # yamllint disable-line rule:line-length + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + ci: + name: ${{ matrix.name }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - id: test + file: tests/test1.yaml + name: Test tests/test1.yaml + pio_cache_key: test1 + #- id: test + # file: tests/test2.yaml + # name: Test tests/test2.yaml + # pio_cache_key: test2 + #- id: test + # file: tests/test3.yaml + # name: Test tests/test3.yaml + # pio_cache_key: test3 + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + id: python + with: + python-version: "3.9" + + - name: Cache virtualenv + uses: actions/cache@v3 + with: + path: .venv + # yamllint disable-line rule:line-length + key: venv-${{ steps.python.outputs.python-version }}-${{ hashFiles('requirements*.txt') }} + restore-keys: | + venv-${{ steps.python.outputs.python-version }}- + + - name: Set up virtualenv + # yamllint disable rule:line-length + run: | + python -m venv .venv + source .venv/bin/activate + pip install -U pip + pip install esphome + echo "$GITHUB_WORKSPACE/.venv/bin" >> $GITHUB_PATH + echo "VIRTUAL_ENV=$GITHUB_WORKSPACE/.venv" >> $GITHUB_ENV + # yamllint enable rule:line-length + + # Use per check platformio cache because checks use different parts + - name: Cache platformio + uses: actions/cache@v3 + with: + path: ~/.platformio + # yamllint disable-line rule:line-length + key: platformio-${{ matrix.pio_cache_key }}-${{ hashFiles('platformio.ini') }} + if: matrix.id == 'test' || matrix.id == 'clang-tidy' + + - run: esphome compile ${{ matrix.file }} + if: matrix.id == 'test' + env: + # Also cache libdeps, store them in a ~/.platformio subfolder + PLATFORMIO_LIBDEPS_DIR: ~/.platformio/libdeps + + ci-status: + name: CI Status + runs-on: ubuntu-latest + needs: [ci] + if: always() + steps: + - name: Successful deploy + if: ${{ !(contains(needs.*.result, 'failure')) }} + run: exit 0 + - name: Failing deploy + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1