Skip to content

chore: prepare release 0.9.13 - #291

Merged
thiagoesteves merged 2 commits into
mainfrom
thiagoesteves/prepare-release-0.9.13
Aug 14, 2026
Merged

chore: prepare release 0.9.13#291
thiagoesteves merged 2 commits into
mainfrom
thiagoesteves/prepare-release-0.9.13

Conversation

@thiagoesteves

Copy link
Copy Markdown
Owner

What ships

0.9.13, applied as a full deployment.

The release carries the deployment notification work:

  • PULL-288 the completion message names the versions a hot upgrade moved between, and a deployment names the version it deployed
  • PULL-288 and PULL-289 the completion message is sent only when a deployment has actually finished, not for every application that reports itself running
  • PULL-290 application_ready covers that report on its own, including a crash restart and a restart asked for from the UI

Hot upgrade: not supported for this release

Six of the seven checks in AGENTS.md come back clean. No toolchain change, no runtime.exs change, no config provider change, no dependency change, no function values added, and no change to the supervision tree or the applications in the umbrella.

Check 6 fails. Deployer.Engine.Deployment backs the worker's GenServer state and gained the deploying? field in #289. That PR carried a code_change/3 so a hot upgrade into this release would keep working, and this PR removes it, since the release is going out as a full deployment and that rebuilds the state from the catalog anyway. Keeping it would leave the project's only code_change/3 on a path nothing exercises.

The changelog states what happens to an installation that hot-upgrades regardless: the engine worker raises on the next deployment, restarts, and rebuilds its state from the catalog. It recovers, but the deployment in flight is lost.

Release preparation

Every step from the checklist in AGENTS.md:

Step Change
mix/shared.exs 0.9.13-rc2 to 0.9.13
README.md compatibility row for 0.9.13, OTP 27.3.4.15 and OTP 28.5.0.4, matching the pinned toolchains in devops/releases/otp-*/.tool-versions
devops/installer/deployex-aws.yaml version: "0.9.13"
devops/installer/deployex-gcp.yaml version: "0.9.13"
guides/docs/yaml/README.md version: "0.9.13" in the example
CHANGELOG.md heading dated ## 0.9.13 🚀 (2026-08-12), plus the full deployment entry
mix docs regenerated apps/deployex_web/priv/static/docs/docs.tar.gz

Risk assessment

Impact: publishes 0.9.13, applied as a full deployment. Deployment notifications name their versions and are sent for deployments only, and an installation subscribed to "all" starts receiving application_ready.

Blast radius: version, changelog, compatibility table, the two installer configurations, the YAML guide example and the generated documentation, plus the removal of the engine worker code_change/3. No other application code changes.

Regression risk: low. Nothing in this PR changes behaviour while the release runs. A hot upgrade from 0.9.12 is the one unsupported path and the changelog says so.

Rollback: plain commit revert, and delete the tag if it has already been pushed.

Checks

mix format --check-formatted and mix credo --strict clean, deployer and foundation suites green after the callback and its test were removed.

🤖 Generated with Claude Code

@thiagoesteves thiagoesteves self-assigned this Aug 13, 2026
@thiagoesteves
thiagoesteves force-pushed the thiagoesteves/prepare-release-0.9.13 branch 3 times, most recently from 1d08fae to 1871a44 Compare August 14, 2026 14:46
The deployment struct the engine worker holds in its state gained the deploying?
field in PULL-289, and the worker carried a code_change/3 to fill it in for
deployments built by the previous version, so that a hot upgrade into this
release would keep working.

0.9.13 is going out as a full deployment, which rebuilds that state from the
catalog anyway, so the callback has nothing left to do and is removed rather than
kept as the only one in the project with no way to exercise it in production.

The changelog says so under backwards incompatible changes, with what would
happen to an installation that hot-upgraded regardless: the worker raises on the
next deployment, restarts, and rebuilds its state.

Risk assessment

Impact: operators apply 0.9.13 as a full deployment. Nothing changes for an
installation that does.

Blast radius: Deployer.Engine.Worker loses a callback, and the changelog gains
the entry describing it. No behaviour change while the release runs.

Regression risk: none for a full deployment, which is the supported path for
this release. A hot upgrade from 0.9.12 crashes the engine worker once on the
next deployment, which the changelog states.

Rollback: plain commit revert, which restores the callback.
Version set to 0.9.13, with the changelog, the compatibility row, the installer
configurations for AWS and GCP, the YAML guide example and the published
documentation updated to match. The Erlang versions are unchanged from 0.9.12,
27.3.4.15 and 28.5.0.4, taken from the pinned toolchains.

The release carries the deployment notification work, the DeployEx Beam limits
in the watchdog, the application URLs and logo in the UI, the certificate field
level diff, and the fixes to the restart backoff, the log retention timer and
the metrics handlers. The changelog gains an entry for every PR merged since the
release was first prepared, PULL-294, PULL-295, PULL-298, PULL-299, PULL-300,
PULL-301, PULL-302, PULL-303, PULL-304 and PULL-305.

Hot upgrade from 0.9.12 is not supported, and the changelog says so. The checks
in AGENTS.md were re-run against 0.9.12 over the full diff. Six come back clean,
no toolchain, runtime.exs, config provider or dependency change, no function
value that outlives a code swap, the watchdog closures are built and applied
inside the same check, and no change to the supervision tree or the applications
in the umbrella. The GenServer state check fails in four places: the deployment
the engine worker holds, the monitor, the logs server and the watchdog all
changed shape and the release ships no code_change/3 for any of them.

Risk assessment

Impact: publishes 0.9.13, applied as a full deployment. Deployment notifications
name their versions and are sent for deployments only, an installation
subscribed to "all" starts receiving application_ready, and a DeployEx instance
without an explicit memory entry in the top level monitoring section stops
having its host memory checked against the built-in defaults.

Blast radius: version, changelog, compatibility table, the two installer
configurations, the YAML guide example and the generated documentation. No
application code changes.

Regression risk: low, there is no behaviour change in this commit.

Rollback: plain commit revert, and delete the tag if it has already been pushed.
@thiagoesteves
thiagoesteves force-pushed the thiagoesteves/prepare-release-0.9.13 branch from 1871a44 to d3f171a Compare August 14, 2026 18:33
@thiagoesteves
thiagoesteves merged commit bb56af1 into main Aug 14, 2026
3 checks passed
@thiagoesteves
thiagoesteves deleted the thiagoesteves/prepare-release-0.9.13 branch August 14, 2026 18:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant