-
Notifications
You must be signed in to change notification settings - Fork 20
129 lines (115 loc) · 3.64 KB
/
ci.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
name: CI
# yamllint disable-line rule:truthy
on:
workflow_dispatch:
inputs:
esphome_version:
description: "ESPHome PyPi Package version to use"
required: false
type: string
push:
branches: [main, dev]
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
max-parallel: 5
matrix:
include:
- id: test
file: tests/full.yaml
name: Test tests/full.yaml
pio_cache_key: full
- id: test
file: tests/base.yaml
name: Test tests/base.yaml
pio_cache_key: base
- id: clang-format
name: Run clang-format
- id: yamllint
name: Run yamllint
- id: black-format
name: Run black-format
- id: isort
name: Run isort
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 }}
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 -r requirements.txt
if [ ${{ github.event.inputs.esphome_version != '' }} == true ]; then pip install ESPHome==${{ github.event.inputs.esphome_version }}; else pip install -U ESPHome; fi
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'
- run: esphome compile ${{ matrix.file }}
if: matrix.id == 'test'
env:
# Also cache libdeps, store them in a ~/.platformio subfolder
PLATFORMIO_LIBDEPS_DIR: ~/.platformio/libdeps
- name: Run clang-format
uses: jidicula/[email protected]
with:
clang-format-version: "13"
check-path: "components"
if: matrix.id == 'clang-format'
- name: Run yamllint
if: matrix.id == 'yamllint'
uses: frenck/[email protected]
- name: Run black-format
if: matrix.id == 'black-format'
uses: psf/black@stable
with:
options: "--check --verbose"
version: "~= 24.1"
- name: Run isort
if: matrix.id == 'isort'
uses: isort/isort-action@master
with:
requirementsFiles: "requirements.txt"
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