-
Notifications
You must be signed in to change notification settings - Fork 24
Release 26.7.9.1: merge beta into main #97
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
42 commits
Select commit
Hold shift + click to select a range
17acd21
chore(esphome): parameterize OTA password (preserve current default)
Tycorc 90a6706
Run label-check and auto-assign via pull_request_target
bharvey88 5dafde0
Merge pull request #81 from Tycorc/parameterize-ota-password
bharvey88 98865af
Add HTTP request OTA update system from R_PRO-1
bharvey88 64494c6
Check for updates when WiFi connects
bharvey88 250f272
Raise min_version to 2025.11.0 to match R_PRO-1's update-system floor
bharvey88 3c6eb13
Build and publish the BLE variant to its own firmware-ble manifest
bharvey88 b6efb98
Release notes: compact formatting for the HA update dialog
bharvey88 7711c8a
Merge pull request #83 from ApolloAutomation/fix-fork-pr-workflows
TrevorSchirmer ad32901
Merge pull request #84 from ApolloAutomation/add-managed-update-system
TrevorSchirmer c624ed0
Bump Core.yaml version to 26.6.17.1
bharvey88 e0e7c29
Merge pull request #85 from ApolloAutomation/bump-version-26.6.17.1
bharvey88 7616da5
Add Firmware Channel switching from HA
bharvey88 73fd740
Merge pull request #89 from ApolloAutomation/firmware-channel
TrevorSchirmer 6d3ebcf
Rename rolling beta release tag to beta-fw (branch/tag collision)
bharvey88 f802653
Merge pull request #91 from ApolloAutomation/fix-beta-tag-collision
bharvey88 289f939
Default the Firmware Channel select to Beta on beta-channel builds
bharvey88 1cc0b3a
Merge pull request #92 from ApolloAutomation/beta-channel-default
bharvey88 3f5d351
Add Bluetooth Proxy firmware switching from HA
bharvey88 ddec791
Merge pull request #90 from ApolloAutomation/ble-proxy-select
TrevorSchirmer 3635ac7
Fix beta manifest fetch and guard force-install against stale manifests
bharvey88 34c7677
Merge pull request #93 from ApolloAutomation/fix-beta-fetch-and-guard
bharvey88 0b7f590
Raise http_request rx buffer to 5120 for GitHub's CSP header
bharvey88 b5a8de4
Merge pull request #94 from ApolloAutomation/fix-buffer-size
bharvey88 8ea86a8
Set http_request buffer_size_tx: 2048 - the real Out of buffer fix
bharvey88 a798e0a
Merge pull request #95 from ApolloAutomation/fix-tx-buffer
bharvey88 6673941
Bump Core.yaml version to 26.7.9.1 for release
bharvey88 adf9bd8
Merge pull request #96 from ApolloAutomation/bump-version-26.7.9.1
bharvey88 c686c79
Merge main into beta; converge CI on shared reusable workflows
bharvey88 2581189
Merge pull request #98 from ApolloAutomation/sync-main-into-beta
bharvey88 9a00325
Add API encryption with no pre-configured key
bharvey88 9134ab2
Merge pull request #99 from ApolloAutomation/add-api-encryption
bharvey88 a6d9f2a
Unify BLE into one firmware: runtime Bluetooth Proxy switch + channel…
bharvey88 bd24876
Merge pull request #100 from ApolloAutomation/unified/ble-switch
bharvey88 502c4e7
Remove vestigial ble_firmware substitution; fix build.yml device-name
bharvey88 4be81c3
Consolidate http_request block into Core.yaml
bharvey88 9de835c
Remove pre-OTA BLE stack disable/re-enable from Firmware Update
bharvey88 b46e1c5
Merge pull request #101 from ApolloAutomation/cleanup/vestigial-ble-f…
bharvey88 3736a18
Merge pull request #102 from ApolloAutomation/consolidate/http-request
bharvey88 6885b3f
Merge pull request #103 from ApolloAutomation/remove/ble-stop-before-ota
bharvey88 a5200c5
Drop redundant bluetooth_proxy active: true
bharvey88 0b69a22
Merge pull request #104 from ApolloAutomation/remove/bluetooth-proxy-…
bharvey88 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,105 @@ | ||
| name: Build and Publish Beta | ||
|
|
||
| # Builds MSR-1 firmware from the beta branch and publishes it as assets on a | ||
| # rolling "beta-fw" pre-release. The on-device "Firmware Channel" select points | ||
| # OTA updates at these assets. Stable firmware is built/published separately | ||
| # by build.yml (push to main -> GitHub Pages). | ||
|
|
||
| on: | ||
| push: | ||
| branches: [beta] | ||
| paths: | ||
| - 'Integrations/ESPHome/**' | ||
| workflow_dispatch: | ||
|
|
||
| # Least privilege: read-only by default; only publish-beta is elevated to write. | ||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| version: | ||
| name: Read version | ||
| runs-on: ubuntu-latest | ||
| outputs: | ||
| v: ${{ steps.read.outputs.v }} | ||
| steps: | ||
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | ||
| with: | ||
| persist-credentials: false | ||
| - id: read | ||
| run: | | ||
| v=$(awk '/substitutions:/ {f=1} f && /version:/ {print $2; exit}' \ | ||
| Integrations/ESPHome/Core.yaml | tr -d '"') | ||
| echo "v=$v" >> "$GITHUB_OUTPUT" | ||
| echo "Beta version: $v" | ||
|
|
||
| build: | ||
| name: Build ${{ matrix.name }} | ||
| needs: version | ||
| strategy: | ||
| matrix: | ||
| include: | ||
| # Beta serves OTA updates only, so it builds the end-user image | ||
| # (MSR-1.yaml), not the first-flash Factory image. | ||
| - { yaml: Integrations/ESPHome/beta-channel/MSR-1.yaml, name: firmware-standard } | ||
| - { yaml: Integrations/ESPHome/beta-channel/MSR-1_BLE.yaml, name: firmware-ble-beta } | ||
| uses: esphome/workflows/.github/workflows/build.yml@025a1e6255610c498ed590403b7e510b69e474df # 2026.4.1 | ||
| with: | ||
| files: ${{ matrix.yaml }} | ||
| esphome-version: stable | ||
| combined-name: ${{ matrix.name }} | ||
| release-version: ${{ needs.version.outputs.v }} | ||
|
|
||
| publish-beta: | ||
| name: Publish beta release assets | ||
| needs: [version, build] | ||
| runs-on: ubuntu-latest | ||
| permissions: | ||
| contents: write | ||
| steps: | ||
| - name: Download firmware artifacts | ||
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | ||
| with: | ||
| path: fw | ||
| pattern: firmware* | ||
|
|
||
| - name: Ensure rolling 'beta-fw' pre-release exists | ||
| env: | ||
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| run: | | ||
| gh release view beta-fw -R "${{ github.repository }}" >/dev/null 2>&1 \ | ||
| || gh release create beta-fw -R "${{ github.repository }}" \ | ||
| --prerelease --title "Beta (rolling)" \ | ||
| --notes "Latest MSR-1 beta firmware. Auto-updated on every push to the beta branch." | ||
|
|
||
| - name: Rewrite manifests to absolute URLs and upload assets | ||
| env: | ||
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| run: | | ||
| BASE="https://github.com/${{ github.repository }}/releases/download/beta-fw" | ||
| declare -A DIRS=( [standard]=firmware-standard [ble]=firmware-ble-beta ) | ||
| for v in standard ble; do | ||
| src="fw/${DIRS[$v]}" | ||
| man=$(find "$src" -name manifest.json | head -1) | ||
| if [ -z "$man" ]; then | ||
| echo "::error::manifest.json not found for ${DIRS[$v]}" | ||
| exit 1 | ||
| fi | ||
| # Both variants share a device name, so their bin filenames match. | ||
| # Release assets are a flat namespace: prefix per variant. | ||
| find "$src" -name '*.bin' | while read -r bin; do | ||
| mv "$bin" "$(dirname "$bin")/$v-$(basename "$bin")" | ||
| done | ||
| echo "Rewriting $man" | ||
| # Make ota.path and parts[].path absolute release-asset URLs so the | ||
| # device never has to resolve a relative path against a redirect. | ||
| jq --arg base "$BASE" --arg pfx "$v-" ' | ||
| .builds[0].ota.path = ($base + "/" + $pfx + (.builds[0].ota.path | sub(".*/"; ""))) | ||
| | .builds[0].parts |= map(.path = ($base + "/" + $pfx + (.path | sub(".*/"; "")))) | ||
| ' "$man" > "manifest-$v.json" | ||
| cat "manifest-$v.json" | ||
| gh release upload beta-fw "manifest-$v.json" -R "${{ github.repository }}" --clobber | ||
| find "$src" -name '*.bin' -print -exec \ | ||
| gh release upload beta-fw {} -R "${{ github.repository }}" --clobber \; | ||
| done | ||
| echo "Beta assets published." |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| name: Label Check | ||
|
|
||
| # pull_request_target (not pull_request) so the job gets a write token on | ||
| # fork-submitted PRs too; plain pull_request runs from forks are read-only | ||
| # and cannot add labels. Safe because the called workflow only reads the PR | ||
| # body and never checks out or executes PR code. The "edited" type re-runs | ||
| # the check when the template checkboxes are changed. | ||
| on: | ||
| pull_request_target: | ||
| types: [opened, edited, reopened, synchronize] | ||
|
|
||
| permissions: | ||
| pull-requests: write | ||
| issues: write | ||
| contents: read | ||
|
|
||
| jobs: | ||
| label-check: | ||
| name: Label Check | ||
| uses: ApolloAutomation/Workflows/.github/workflows/label-check.yml@main |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift
Avoid racing the manifest refresh before starting OTA.
This flow schedules the manifest refresh, waits a fixed 5s, then forces
perform(true). Since the comment says the fetch runs in another task, slow TLS/GitHub responses can leave this using stale or missing manifest data after a channel switch. Gate the install on refresh completion, or add a bounded retry/state check before forcing the update.🤖 Prompt for AI Agents