Skip to content

Commit 082b9b0

Browse files
committed
Ship rewire: retire self-contained core, consume valar-core v0.2.0
Make the valar-core rewire the canonical Ropener firmware: - delete firmware/common/ropener-core.yaml and the old per-board wrappers - Ropener-VAL3000.yml / Ropener-VAL3100.yml now pull valar-core + scheduling from Valar-Systems/valar-motion pinned to tag v0.2.0, + ropener-product.yaml - bump fw_version 2.6.4 -> 2.7.0 - replace the verify workflow with build-release.yml: builds every board and, on a tag, attaches factory.bin + ota.bin + ota.bin.md5 with the stable Ropener-VAL3000 / Ropener-VAL3100 asset names (the md5 the OTA button needs) Verified on real hardware against the identical core commit (v0.2.0 = bc869f7): 0 entity regressions, OTA button URL + asset names unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XpCz2RvuxV5uV8bFwCEpkL
1 parent 8e04d60 commit 082b9b0

8 files changed

Lines changed: 75 additions & 1939 deletions

File tree

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Build the Ropener firmware for every board and, on a tag, attach the factory
2+
# + OTA binaries (and the .ota.bin.md5 the on-device "Update Firmware" button
3+
# needs) to the GitHub release. Field units self-update by asset name, so keep
4+
# the Ropener-VAL3000 / Ropener-VAL3100 names stable.
5+
name: Build firmware
6+
7+
on:
8+
push:
9+
branches: [main, 'rewire/valar-core'] # rewire/* verifies the branch pre-merge; remove after merge
10+
tags: ['v*']
11+
pull_request:
12+
workflow_dispatch:
13+
14+
jobs:
15+
build:
16+
runs-on: ubuntu-latest
17+
strategy:
18+
fail-fast: false
19+
matrix:
20+
include:
21+
- config: firmware/VAL3000/Ropener-VAL3000.yml
22+
asset: Ropener-VAL3000
23+
- config: firmware/VAL3100/Ropener-VAL3100.yml
24+
asset: Ropener-VAL3100
25+
steps:
26+
- uses: actions/checkout@v4
27+
- uses: actions/setup-python@v5
28+
with:
29+
python-version: '3.11'
30+
- name: Install ESPHome
31+
run: pip install esphome
32+
33+
# On a tag build, stamp the release version (strip a leading "v") so the
34+
# on-device "Firmware Version" matches the release the unit is running.
35+
- name: Compile ${{ matrix.asset }}
36+
run: |
37+
if [ "${{ github.ref_type }}" = "tag" ]; then
38+
V="${{ github.ref_name }}"; V="${V#v}"
39+
esphome -s fw_version "$V" compile "${{ matrix.config }}"
40+
else
41+
esphome compile "${{ matrix.config }}"
42+
fi
43+
44+
- name: Collect binaries + md5
45+
run: |
46+
mkdir -p dist
47+
F=$(find . -path "*/.pioenvs/*/firmware.factory.bin" | head -1)
48+
O=$(find . -path "*/.pioenvs/*/firmware.ota.bin" | head -1)
49+
cp "$F" "dist/${{ matrix.asset }}.factory.bin"
50+
cp "$O" "dist/${{ matrix.asset }}.ota.bin"
51+
md5sum "dist/${{ matrix.asset }}.ota.bin" | cut -d' ' -f1 > "dist/${{ matrix.asset }}.ota.bin.md5"
52+
53+
- uses: actions/upload-artifact@v4
54+
with:
55+
name: ${{ matrix.asset }}
56+
path: dist/*
57+
58+
- name: Attach to release
59+
if: startsWith(github.ref, 'refs/tags/')
60+
uses: softprops/action-gh-release@v2
61+
with:
62+
files: dist/*

‎.github/workflows/verify-rewire.yml‎

Lines changed: 0 additions & 43 deletions
This file was deleted.

‎.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ docs/dist/
1616
# Python bytecode cache
1717
__pycache__/
1818
*.pyc
19+
secrets.yaml

‎firmware/VAL3000/Ropener-VAL3000-2.6.4.yml‎

Lines changed: 0 additions & 35 deletions
This file was deleted.

firmware/VAL3000/Ropener-VAL3000-rewired.yml renamed to firmware/VAL3000/Ropener-VAL3000.yml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
# =============================================================================
2-
# Ropener — VAL3000 (ESP32-C3) [REWIRED: consumes valar-core remotely]
2+
# Ropener — VAL3000 (ESP32-C3)
33
# =============================================================================
4-
# Board wrapper: sets this board's chip, GPIO map, and OTA identity, then pulls
5-
# in the shared valar-core + scheduling from the valar-motion repo as remote
6-
# packages and layers the Ropener product on top. This board has no status LED.
4+
# Board wrapper: pulls valar-core + scheduling from Valar-Systems/valar-motion
5+
# as remote packages and layers the Ropener product on top. No status LED.
76
# =============================================================================
87
substitutions:
98
device_name: "ropener"
@@ -13,8 +12,7 @@ substitutions:
1312
log_uart: "USB_SERIAL_JTAG"
1413
ota_repo: "Valar-Systems/Ropener"
1514
ota_asset: "Ropener-VAL3000"
16-
fw_version: "2.6.4"
17-
# GPIO map (ESP32-C3)
15+
fw_version: "2.7.0"
1816
pin_uart_tx: "6"
1917
pin_uart_rx: "5"
2018
pin_enn: "8"
@@ -32,12 +30,12 @@ esphome:
3230
packages:
3331
valar_core:
3432
url: https://github.com/Valar-Systems/valar-motion
35-
ref: bc869f79de63a1b2fa39234f81bdd500bef94669
33+
ref: v0.2.0
3634
files: [common/valar-core.yaml]
3735
refresh: 1d
3836
scheduling:
3937
url: https://github.com/Valar-Systems/valar-motion
40-
ref: bc869f79de63a1b2fa39234f81bdd500bef94669
38+
ref: v0.2.0
4139
files: [common/scheduling.yaml]
4240
refresh: 1d
4341
product: !include ../common/ropener-product.yaml

‎firmware/VAL3100/Ropener-VAL3100-2.6.4.yml‎

Lines changed: 0 additions & 58 deletions
This file was deleted.

firmware/VAL3100/Ropener-VAL3100-rewired.yml renamed to firmware/VAL3100/Ropener-VAL3100.yml

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# =============================================================================
2-
# Ropener — VAL3100 (ESP32-C6) [REWIRED: consumes valar-core remotely]
2+
# Ropener — VAL3100 (ESP32-C6)
33
# =============================================================================
44
# Board wrapper: sets this board's chip, GPIO map, and OTA identity, then pulls
5-
# in the shared valar-core + scheduling from the valar-motion repo as remote
5+
# in the shared valar-core + scheduling from Valar-Systems/valar-motion as remote
66
# packages and layers the Ropener product on top. No board firmware is copied.
77
# =============================================================================
88
substitutions:
@@ -11,12 +11,9 @@ substitutions:
1111
board_id: "VAL3100 (ESP32-C6)"
1212
esp_board: "esp32-c6-devkitc-1"
1313
log_uart: "USB_SERIAL_JTAG"
14-
# OTA target: keep pointing at the Ropener repo's own releases so field units
15-
# self-update from exactly where they always have (asset name unchanged).
16-
ota_repo: "Valar-Systems/Ropener"
14+
ota_repo: "Valar-Systems/Ropener" # field units self-update from Ropener's own releases
1715
ota_asset: "Ropener-VAL3100"
18-
fw_version: "2.6.4"
19-
# GPIO map (ESP32-C6)
16+
fw_version: "2.7.0"
2017
pin_uart_tx: "0"
2118
pin_uart_rx: "1"
2219
pin_enn: "5"
@@ -34,17 +31,16 @@ esphome:
3431
packages:
3532
valar_core:
3633
url: https://github.com/Valar-Systems/valar-motion
37-
ref: bc869f79de63a1b2fa39234f81bdd500bef94669
34+
ref: v0.2.0
3835
files: [common/valar-core.yaml]
3936
refresh: 1d
4037
scheduling:
4138
url: https://github.com/Valar-Systems/valar-motion
42-
ref: bc869f79de63a1b2fa39234f81bdd500bef94669
39+
ref: v0.2.0
4340
files: [common/scheduling.yaml]
4441
refresh: 1d
4542
product: !include ../common/ropener-product.yaml
4643

47-
# Status LED (VAL3100 / ESP32-C6 onboard LED on GPIO23)
4844
light:
4945
- platform: status_led
5046
name: "Status LED"

0 commit comments

Comments
 (0)