Skip to content

chore: update changelog and versions for 3.9.0 release - #2806

Merged
tonyandrewmeyer merged 2 commits into
mainfrom
release-prep-3.9.0
Oct 8, 2026
Merged

tonyandrewmeyer merged 2 commits into
mainfrom
release-prep-3.9.0

Conversation

@github-actions

@github-actions github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Prepares the 3.9.0 release from main.

  • CHANGES.md has a new entry for 3.9.0.
  • The version strings are updated across ops, ops-scenario, ops-tracing and the tool-versions table.
  • Commits since 3.8.2

The GitHub release is titled 3.9.0: followed by the summary under "Release title", and its body is the notes under "Release notes". Edit both here: this description is where they are read from. Each is wrapped in hidden markers, which you will see when you edit; keep them.

Once this is merged, run Create the draft release with this pull request's number.

Release title

ModelError exception note and relation data fixes

Release notes

This release makes ModelError easier to diagnose, tightens how relation data permissions are enforced, and fixes a set of typing and ops.testing issues. There is also a new how-to guide on securing a charm.

New and improved

  • ModelError now tells you which hook command failed, and during which event (feat: add exception note when raising ModelError #2786). When a call to Juju fails, a traceback notes line now shows what was running, so you no longer have to work it out the long full traceback chain.
Traceback (most recent call last):
  ...
ops.model.SecretNotFoundError: db-password
Hook command 'secret-get' (label='db-password', refresh=False, peek=False) failed during the 'config-changed' hook.

Fixes worth knowing about

In ops.testing

Contributors

Thank you to @cristiangirlea.

@tonyandrewmeyer

Copy link
Copy Markdown
Collaborator

I'll look into why it credited me - I think it's because of the merge commit that came from the temporary private fork when handling the 3.8.3 security fix. But whatever the reason, it should have been able to exclude me.

@tonyandrewmeyer
tonyandrewmeyer self-requested a review October 8, 2026 03:57
Comment thread CHANGES.md Outdated
Comment thread CHANGES.md Outdated
Comment thread CHANGES.md Outdated
Comment thread CHANGES.md Outdated
Comment thread CHANGES.md Outdated
Comment thread CHANGES.md Outdated
Comment thread CHANGES.md Outdated
Comment thread CHANGES.md Outdated
@tonyandrewmeyer

Copy link
Copy Markdown
Collaborator

I'll also feed back any changes / improvements we make here into the system to see if it can do a more thorough job next time.

Co-authored-by: Tony Meyer <tony.meyer@gmail.com>

@james-garner-canonical james-garner-canonical left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking pretty good. @tonyandrewmeyer beat me to the changelog fixes (though to be fair I only caught one of the things he did). For the release notes, I'd cut "Fixes worth knowing about" and "In ops.testing".

@tonyandrewmeyer

Copy link
Copy Markdown
Collaborator

One of the problems with the drafting was something I caused: I forgot to update the PR title for the ModelError change, so it sounded like it did more than it actually did.

@cristiangirlea

cristiangirlea commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Honestly, part of my motivation for contributing is that I’d love to work with Canonical someday. I applied previously but didn’t make it through, so I’m hoping these contributions give the team a better sense of how I work if I apply again. Either way, I’m happy to help - just wanted to be upfront about it 😅

@tonyandrewmeyer
tonyandrewmeyer merged commit 28faceb into main Oct 8, 2026
65 checks passed
@tonyandrewmeyer
tonyandrewmeyer deleted the release-prep-3.9.0 branch October 8, 2026 04:52
@tonyandrewmeyer

tonyandrewmeyer commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Another adjustment that the changelog package could probably make would be to code fence the contributors section in the PR and then remove that in the release draft, so that we (GitHub) ping people only in the release, not in the PR.

Also, we probably don't need a full section for this, particularly since it's usually 0-2 people. In the release, I've switched it to a simple sentence at the very end, and I think that works just as well. GitHub also puts a spotlight on anyone tagged in a Contributors section as well.

@dwilding

dwilding commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

For the release notes, I'd cut "Fixes worth knowing about" and "In ops.testing".

I agree. I'd also drop the "A how-to guide for securing a charm" bullet. Instead, I'd update the end of the intro to include a link:

There is also a new how-to guide on securing a charm.

Then focus the rest of the release notes on explaining the ModelError improvement.

@tonyandrewmeyer

Copy link
Copy Markdown
Collaborator

Also, maybe we discourage "bullet points with bold first sentences" as a practice.

@tonyandrewmeyer

tonyandrewmeyer commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Also, "full changelog" is the wording that GitHub uses I think, but I don't think it's right to have "Changelog" and then "Full changelog". Maybe "All commits" or something like that?

Alternatively, the changelog could be titled "What's Changed", which is basically what's been there in the past, and "Full changelog" could be the link to the git log. I don't personally like that, because it's giving inaccurate names to things. I think improving our docs is more important than being consistent, in this case.

tonyandrewmeyer added a commit to canonical/charm-tech-code that referenced this pull request Oct 8, 2026
GitHub's web editor saves a pull request description with CRLF line
endings. The release marker regexes anchor on `$`, which in multiline
mode only matches before `\n`, so a trailing `\r` hides every marker:

* `changelog release-body` fails with "the description has 0 `<!--
release-notes:start -->` markers".
* `changelog release-title` quietly falls back to the bare version.

This is what failed [the canonical/operator 3.9.0 draft
release](https://github.com/canonical/operator/actions/runs/37729593784/job/113155466778):
the notes in canonical/operator#2806 had been edited in the browser.

The fix converts CRLF to LF in `release_notes_from_description` and
`release_summary_from_description` before matching, which also keeps
`\r` out of the published notes and title.

Tests: a CRLF version of the existing test descriptions, for both the
notes and the title. Both fail without the fix.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
tonyandrewmeyer added a commit to canonical/charm-tech-code that referenced this pull request Oct 8, 2026
The first ops release through the new workflows
(canonical/operator#2806) needed a fair number of edits by hand, both to
`CHANGES.md` and to the drafted notes. This handles as many of those as
I think we can do automatically.

In `changelog`:

* GitHub's "Merge commit from fork" (a security advisory's merge) is
left out. The fix was already out in 3.8.3, and the entry also credited
me (maybe partly because it seems I merged with a personal email; I'm
not sure if I had an option to pick from the GitHub UI).
* Code in a summary gets backticks: names with a leading underscore,
exception and warning classes, and calls such as `_Abort(0)`. A bare
`__init__` renders as bold, so this isn't only cosmetic.
* `release-body` ends with "Thanks @x for your contribution to this
release!", read back out of the `CHANGES.md` section's credits. The
drafted notes no longer have a contributors section, so nobody gets
pinged by the release PR.
* The compare line is "All commits" rather than "Full Changelog", which
sat oddly under a "Changelog" heading.

In `draft-release-notes`:

* `--commits` gives the model the commit messages, and `--docs-url`
turns a changed docs page into its published address. The 3.9.0 draft
asked for an example of the `ModelError` note and the link to the
security how-to, and both were in the commit messages.
* The prompt follows the 3.9.0 review: focus on the one or two main
changes, no fixes or `ops.testing` sections, no bold-led bullets, new
doc pages linked from the intro, and leave out anything it is unsure
matters rather than flagging it.

Some of the edits aren't covered: rewording the `ModelError` entry (the
PR title was my mistake), capitalising Pydantic, and folding #2781 into
#2663. The operator workflow also needs a follow-up to pass `--commits`
and `--docs-url`, and the exemplars there model the bold-led bullets and
fixes sections, so they probably need swapping too.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

5 participants