chore(ci): parametrize release workflows with an OTP matrix#246
Merged
Conversation
Replace the duplicated per-OTP build jobs in releases.yaml and testing-release.yaml with a single build job using a strategy matrix (otp: [27, 28]). Adding or removing an OTP version is now a one-line change per workflow. Since matrix legs cannot expose per-leg job outputs, checksums now travel as <artifact>.sha256 files uploaded next to each tarball, and the aggregate checksum.txt is built by concatenating them. This also allowed merging the testing-release checksum job into upload_aws and replacing the per-file prewk/s3-cp-action steps with a single aws s3 cp loop (the same command that action runs internally, using the preinstalled CLI). Risk assessment: - Impact: identical artifacts, names and checksum.txt content for releases; adding OTP versions becomes a one-line matrix change. - Blast radius: releases.yaml and testing-release.yaml only. PR CI and hot upgrade workflows untouched. - Regression risk: medium. These workflows only run on tag pushes, so the change cannot be validated by PR CI. Behavior differences: checksum.txt line order may differ, testing-release no longer stores checksum.txt as a workflow artifact (it is still uploaded to S3), and fail-fast is disabled to keep matrix legs independent like the old separate jobs. Recommend pushing a non-main test tag to exercise testing-release before the next real release. - Rollback: revert this commit.
thiagoesteves
added a commit
that referenced
this pull request
Jul 8, 2026
- Set version to 0.9.5 in mix/shared.exs (drop the rc suffix) - Remove the 🔜 marker from the 0.9.5 row in the README version table (OTP columns already match devops/releases pins) - Bump the default installer YAMLs (aws/gcp) and the YAML guide example to 0.9.5 - Set the changelog release date: 0.9.5 (2026-07-08) - Regenerate published docs via mix docs - Document the release preparation checklist in AGENTS.md Risk assessment: - Impact: version metadata and docs only, no code changes. Tagging 0.9.5 from main after merge triggers the release build. - Blast radius: version pins, README table, installer defaults, changelog heading, generated docs tarball, AGENTS.md. - Regression risk: low. The release itself is exercised by the tag-triggered workflows (now matrix-based, see #246), recommend a quick rc test tag if extra caution is wanted. - Rollback: revert this commit before tagging.
thiagoesteves
added a commit
that referenced
this pull request
Jul 8, 2026
Workflow fixes: - The rebase onto the matrix-based release workflows (#246) left them in a hybrid state: matrix still [27, 28] plus an appended old-style buildUbuntu2404Otp29 job referencing env vars that no longer exist. The matrix is now [28, 29] and the orphaned jobs are removed. Library updates (no vulnerabilities reported by mix deps.audit): - phoenix_live_view 1.0.18 -> 1.2.6 (requirement relaxed to ~> 1.2) - gettext 0.26.2 -> 1.0.2 (already using the Gettext.Backend pattern) - briefly 0.4.1 -> 0.5.1, swoosh 1.26.3, mint 1.9.1 - lazy_html added as a test dependency (required by LiveView 1.2 test helpers), which needed elixir_make 0.10.0 -> 0.9.0 - HEEx templates reformatted by the LiveView 1.2 formatter Test updates: - mode_test option assertions made tolerant to attribute order and boolean attribute serialization (lazy_html renders differently) - Foundation catalog test modules are no longer async: they share the /tmp/var/lib/deployex tree and raced with each other's rm_rf cleanup Docs consistency: - Changelog 0.10.0 section: baseline corrected to 0.9.5, the OTP-27 drop moved under backwards incompatible changes, host binary labels fixed (OTP 28/29) - README version table: OTP-29 column added, 0.10.0 🔜 row with 28.5.0.3 / 29.0.3 Validated under OTP 29 (Erlang 29.0.1, Elixir 1.20.1-otp-29): full test suite with coverage above threshold in all apps, credo --strict, format check, unused deps check, sobelow and dialyzer all pass. CI pins erlang 29.0.3 / elixir 1.20.2-otp-29, both verified to exist upstream. Risk assessment: - Impact: completes the OTP-29 rollover so PR CI runs on OTP 29 and releases build for OTP 28/29. - Blast radius: release workflows, dependency versions (LiveView minor jump 1.0 -> 1.2 is the largest), HEEx formatting, test suite, docs. - Regression risk: medium. LiveView 1.2 changes DOM test serialization and formatting; the full suite plus static checks pass, but the tag-triggered release workflows still need a real run, recommend a non-main rc tag before the 0.10.0 release. - Rollback: revert this commit (the branch remains on the previous library set via mix.lock history).
thiagoesteves
added a commit
that referenced
this pull request
Jul 14, 2026
Workflow fixes: - The rebase onto the matrix-based release workflows (#246) left them in a hybrid state: matrix still [27, 28] plus an appended old-style buildUbuntu2404Otp29 job referencing env vars that no longer exist. The matrix is now [28, 29] and the orphaned jobs are removed. Library updates (no vulnerabilities reported by mix deps.audit): - phoenix_live_view 1.0.18 -> 1.2.6 (requirement relaxed to ~> 1.2) - gettext 0.26.2 -> 1.0.2 (already using the Gettext.Backend pattern) - briefly 0.4.1 -> 0.5.1, swoosh 1.26.3, mint 1.9.1 - lazy_html added as a test dependency (required by LiveView 1.2 test helpers), which needed elixir_make 0.10.0 -> 0.9.0 - HEEx templates reformatted by the LiveView 1.2 formatter Test updates: - mode_test option assertions made tolerant to attribute order and boolean attribute serialization (lazy_html renders differently) - Foundation catalog test modules are no longer async: they share the /tmp/var/lib/deployex tree and raced with each other's rm_rf cleanup Docs consistency: - Changelog 0.10.0 section: baseline corrected to 0.9.5, the OTP-27 drop moved under backwards incompatible changes, host binary labels fixed (OTP 28/29) - README version table: OTP-29 column added, 0.10.0 🔜 row with 28.5.0.3 / 29.0.3 Validated under OTP 29 (Erlang 29.0.1, Elixir 1.20.1-otp-29): full test suite with coverage above threshold in all apps, credo --strict, format check, unused deps check, sobelow and dialyzer all pass. CI pins erlang 29.0.3 / elixir 1.20.2-otp-29, both verified to exist upstream. Risk assessment: - Impact: completes the OTP-29 rollover so PR CI runs on OTP 29 and releases build for OTP 28/29. - Blast radius: release workflows, dependency versions (LiveView minor jump 1.0 -> 1.2 is the largest), HEEx formatting, test suite, docs. - Regression risk: medium. LiveView 1.2 changes DOM test serialization and formatting; the full suite plus static checks pass, but the tag-triggered release workflows still need a real run, recommend a non-main rc tag before the 0.10.0 release. - Rollback: revert this commit (the branch remains on the previous library set via mix.lock history).
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
What changed and why
The
releases.yamlandtesting-release.yamlworkflows duplicated the whole build job per OTP version (buildUbuntu2404Otp27/buildUbuntu2404Otp28), so every toolchain change had to be applied to four places. Both now use a singlebuildjob with:All OTP-specific values derive from
matrix.otp(devops/releases/otp-${{ matrix.otp }}/.tool-versions, artifact name). Supporting OTP 29 later is a one-line change per workflow.Design notes:
outputs(they overwrite each other), so checksums now travel as<artifact>.sha256files uploaded alongside each tarball; the aggregatechecksum.txtis built withcat *.sha256. Content is the same as before (line order may differ).testing-release: the standalonechecksumjob is merged intoupload_aws, and the per-fileprewk/s3-cp-actionsteps became a singleaws s3 cploop - the same command that action runs internally, using the preinstalled AWS CLI (one less third-party action).fail-fast: falsekeeps the matrix legs independent, matching the old separate-jobs behavior.checksum.txtis no longer stored as a workflow artifact in testing-release (it is still uploaded to S3 as before).Risk assessment
releases.yamlandtesting-release.yamlonly; PR CI and hot upgrade workflows untouched.-rctag from a branch) to runtesting-releaseend to end before the next real release.🤖 Generated with Claude Code