1+ name : Publish
2+ env :
3+ DEVICE_NAME : r_pro-1
4+
5+ on :
6+ push :
7+ branches :
8+ - main
9+ # Uncomment if needed:
10+ # workflow_dispatch:
11+ # inputs:
12+ # version:
13+ # description: 'The version of the firmware to build'
14+ # required: true
15+ # release:
16+ # types: [published]
17+
18+ jobs :
19+ check-for-yaml :
20+ name : Check for YAML Changes
21+ runs-on : ubuntu-latest
22+ outputs :
23+ yaml_changed : ${{ steps.check.outputs.yaml_changed }}
24+ steps :
25+ - name : Checkout code
26+ uses : actions/checkout@v3
27+ with :
28+ fetch-depth : 2 # So we can diff the previous commit
29+
30+ - name : Find .yaml Changes in Last PR Merge
31+ id : check
32+ run : |
33+ BASE_COMMIT=$(git rev-parse HEAD^1)
34+ MERGE_COMMIT=$(git rev-parse HEAD)
35+
36+ if git diff --name-only $BASE_COMMIT $MERGE_COMMIT | grep -q '\.yaml$'; then
37+ echo "yaml_changed=true" >> $GITHUB_OUTPUT
38+ else
39+ echo "yaml_changed=false" >> $GITHUB_OUTPUT
40+ fi
41+
42+ set-version :
43+ name : Set Version
44+ runs-on : ubuntu-latest
45+ needs : [check-for-yaml]
46+ if : needs.check-for-yaml.outputs.yaml_changed == 'true'
47+
48+ # Expose job-level outputs so other jobs can access them
49+ outputs :
50+ version : ${{ steps.read_version.outputs.version }}
51+ upload_url : ${{ steps.run-release-drafter.outputs.upload_url }}
52+ body : ${{ steps.run-release-drafter.outputs.body }}
53+ html_url : ${{ steps.run-release-drafter.outputs.html_url }}
54+ permissions :
55+ contents : write
56+ pages : write
57+ id-token : write
58+ pull-requests : write
59+
60+ steps :
61+ - name : Checkout code
62+ uses : actions/checkout@v3
63+
64+ - name : Read version from YAML file
65+ id : read_version
66+ run : |
67+ version=$(awk '/substitutions:/ {found=1} found && /version:/ {print $2; exit}' Integrations/ESPHome/Core.yaml | tr -d '"')
68+ echo "version=$version" >> $GITHUB_OUTPUT
69+ echo "Detected version: $version"
70+
71+ - name : Fetch Last Merged PR Body
72+ id : last_pr
73+ env :
74+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
75+ run : |
76+ PR_INFO=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
77+ "https://api.github.com/repos/${{ github.repository }}/pulls?state=closed&sort=updated&direction=desc&per_page=1")
78+ PR_BODY=$(echo "$PR_INFO" | jq -r '.[0].body')
79+ echo "$PR_BODY" > pr_body.txt
80+
81+ - name : 🚀 Run Release Drafter
82+ id : run-release-drafter
83+ uses : release-drafter/release-drafter@v6
84+ with :
85+ version : ${{ steps.read_version.outputs.version }}
86+ publish : true
87+ tag : ${{ steps.read_version.outputs.version }}
88+ name : Release ${{ steps.read_version.outputs.version }}
89+ env :
90+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
91+
92+ build-firmware-e :
93+ name : Build And Release (Firmware)
94+ uses : esphome/workflows/.github/workflows/build.yml@main
95+ needs :
96+ - check-for-yaml
97+ - set-version
98+ if : needs.check-for-yaml.outputs.yaml_changed == 'true'
99+ with :
100+ files : |
101+ Integrations/ESPHome/R_PRO-1_ETH.yaml
102+ esphome-version : stable
103+ combined-name : firmware-e
104+ release-summary : ${{ needs.set-version.outputs.body }}
105+ release-version : ${{ needs.set-version.outputs.version }}
106+
107+ build-firmware-w :
108+ name : Build And Release (Firmware W)
109+ uses : esphome/workflows/.github/workflows/build.yml@main
110+ needs :
111+ - check-for-yaml
112+ - set-version
113+ if : needs.check-for-yaml.outputs.yaml_changed == 'true'
114+ with :
115+ files : |
116+ Integrations/ESPHome/R_PRO-1_W.yaml
117+ esphome-version : stable
118+ combined-name : firmware-w
119+ release-summary : ${{ needs.set-version.outputs.body }}
120+ release-url : ${{ needs.set-version.outputs.html_url }}
121+ release-version : ${{ needs.set-version.outputs.version }}
122+
123+ build-site :
124+ name : Build Site
125+ runs-on : ubuntu-latest
126+ needs :
127+ - check-for-yaml
128+ - build-firmware-e
129+ - build-firmware-w
130+ - set-version
131+ if : needs.check-for-yaml.outputs.yaml_changed == 'true'
132+ steps :
133+ - name : Checkout source code
134+ uses : actions/checkout@v4
135+
136+ - name : Build
137+ 138+ with :
139+ source : ./static
140+ destination : ./output
141+
142+ - name : Upload
143+ uses : actions/upload-artifact@v4
144+ with :
145+ name : site
146+ path : output
147+
148+ publish :
149+ name : Publish to GitHub Pages
150+ runs-on : ubuntu-latest
151+ needs :
152+ - build-site
153+ - build-firmware-e
154+ - build-firmware-w
155+ - set-version
156+ if : needs.check-for-yaml.outputs.yaml_changed == 'true' && ${{ github.run_attempt == 1 }}
157+ permissions :
158+ contents : write
159+ pages : write
160+ id-token : write
161+ steps :
162+ - name : Checkout code
163+ uses : actions/checkout@v3
164+
165+ # 1) Download Firmware
166+ - uses : actions/download-artifact@v4
167+ with :
168+ name : firmware-e
169+ path : firmware-e
170+
171+ # 2) Download Firmware-B
172+ - uses : actions/download-artifact@v4
173+ with :
174+ name : firmware-w
175+ path : firmware-w
176+
177+ # 3) Zip them up
178+ - name : Zip firmware
179+ run : |
180+ zip -r firmware-e.zip firmware-e
181+ zip -r firmware-w.zip firmware-w
182+
183+ # 4) Upload firmware.zip as an asset
184+ - name : Upload firmware.zip
185+ id : upload-firmware
186+ uses : actions/upload-release-asset@v1
187+ env :
188+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
189+ with :
190+ # Use the job-level output from set-version:
191+ upload_url : ${{ needs.set-version.outputs.upload_url }}
192+ asset_path : firmware-e.zip
193+ asset_name : firmware-e.zip
194+ asset_content_type : application/zip
195+
196+ # 5) Upload firmware-w.zip
197+ - name : Upload firmware-w.zip
198+ id : upload-firmware-w
199+ uses : actions/upload-release-asset@v1
200+ env :
201+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
202+ with :
203+ # Use the job-level output from set-version:
204+ upload_url : ${{ needs.set-version.outputs.upload_url }}
205+ asset_path : firmware-w.zip
206+ asset_name : firmware-w.zip
207+ asset_content_type : application/zip
208+
209+ - name : Copy firmware and manifest
210+ run : |-
211+ mkdir -p output/firmware-e
212+ cp -r firmware-e/${{ needs.build-firmware-e.outputs.version }}/* output/firmware-e/
213+
214+ - name : Copy firmware and manifest
215+ run : |-
216+ mkdir -p output/firmware-w
217+ cp -r firmware-w/${{ needs.build-firmware-w.outputs.version }}/* output/firmware-w/
218+
219+ - uses : actions/download-artifact@v4
220+ with :
221+ name : site
222+ path : output
223+
224+ - uses : actions/upload-pages-artifact@v3
225+ with :
226+ path : output
227+ retention-days : 1
228+
229+ - name : Setup Pages
230+ uses : actions/configure-pages@v5
231+
232+ - name : Deploy to GitHub Pages
233+ id : deployment
234+ uses : actions/deploy-pages@v4
0 commit comments