Skip to content

chore(release): add release-please automation for versioning#243

Merged
so0k merged 7 commits into
mainfrom
claude/release-please-monorepo-setup-utyui
Jun 8, 2026
Merged

chore(release): add release-please automation for versioning#243
so0k merged 7 commits into
mainfrom
claude/release-please-monorepo-setup-utyui

Conversation

@so0k

@so0k so0k commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Description

This PR adds release-please automation to manage versioning, CHANGELOG.md generation, and the release PR from Conventional Commits.

The setup is additive: release-please owns versioning and the release PR, while the existing publishing pipeline (release.yml + release-publish.yml, the Sentry release tracking, and the @next prerelease channel) is left untouched and continues to key off package.json as before.

Key design decisions

  1. Single root release — this is a locked-version JSII monorepo where all packages ship at the same version. release-please manages only the root "." package; sub-package package.jsons stay at 0.0.0 and are aligned at build time by tools/align-version.sh. Tags are v<version> (include-component-in-tag: false).

  2. Pre-1.0 (alpha) bump policybump-minor-pre-major + bump-patch-for-minor-pre-major keep breaking changes from prematurely cutting 1.0.0. While the version is 0.x:

    Commit Bump Example
    feat! / fix! / BREAKING CHANGE minor 0.23.3 → 0.24.0
    feat (non-breaking) patch 0.23.3 → 0.23.4
    fix patch 0.23.3 → 0.23.4
    chore (dep bumps), docs, … patch-level rides along

    Drop these flags to graduate to standard semver / v1 later.

  3. GitHub-release ownership stays with release.ymlskip-github-release: true, so release-please only maintains the release PR (version bump + CHANGELOG.md + manifest) and does not create the git tag or GitHub release. release.yml's release_github job (tools/release-github.sh) remains the single, test-gated owner of tag + GitHub release + multi-language publish. No double-create race, and no changes to release.yml.

  4. GitHub App token — the workflow mints a short-lived token from the open-constructs-cdktn GitHub App instead of GITHUB_TOKEN, because GITHUB_TOKEN-authored PRs do not trigger downstream workflows (the release PR's own CI would never run).

  5. The release PR passes the repo's CI gates:

    • Titlegroup-pull-request-title-pattern (the pattern that actually applies in manifest mode) yields chore(release): release vX.Y.Z, which passes pr-lint (amannn/action-semantic-pull-request): type chore, scope release.
    • Labelsextra-label attaches the repo's ci/skip-* labels (unit, examples, integration, provider-integration) so the release PR skips the heavy suites it doesn't need, on top of release-please's default autorelease: pending tracking label.

Files added

  • release-please-config.json — release-type node, single root package, pre-major bump flags, skip-github-release, conventional title patterns, ci/skip-* labels, and changelog sections mapped to conventional commit types.
  • .release-please-manifest.json — source of truth for the last released version, seeded at 0.23.3.
  • .github/workflows/release-please.yml — runs on every push to main; mints the App token and maintains the release PR.
  • docs/release-please.md — full documentation: versioning model, pre-1.0 policy, release ownership, title/linter interaction, CI-skip labels, App setup, bootstrap, and the future migration path off standard-version.

How it works

  1. Conventional commits land on main.
  2. release-please.yml keeps one release PR open, rebasing it as more commits land. It bumps the root package.json and prepends a CHANGELOG.md section following the pre-1.0 policy above (breaking → minor; feat/fix → patch).
  3. When ready to release, merge the release PR (squash recommended — the conventional title yields a clean chore(release): release vX.Y.Z commit). release-please updates .release-please-manifest.json but does not tag/release (skip-github-release: true).
  4. The merge push triggers release.yml, whose stable channel (gated on the release tests) creates the v<version> tag + GitHub release and publishes to npm, PyPI, Maven, NuGet, and Go via release-publish.yml.

Normal (non-release) pushes to main continue publishing the @next prerelease channel as before — release-please only touches the release PR.

bootstrap-sha is pinned to the v0.23.3 release commit so the first release PR collects only the commits after it (no re-scan of history into the changelog).

Checklist

  • I have updated the PR title to match CDKTN's style guide
  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation if applicable

GitHub App: The open-constructs-cdktn App is installed on this repository with Contents (Read & write) and Pull requests (Read & write) permissions, and its credentials are stored as CDKTN_MAINTAINERS_APP_ID and CDKTN_MAINTAINERS_APP_PRIVATE_KEY repository secrets. ✅

https://claude.ai/code/session_0168ykjbd1W96iSBoQUEkSLE

@so0k so0k requested a review from a team as a code owner June 5, 2026 07:01
@so0k so0k added ci/skip-examples Skip Examples Testing in PR ci/skip-integration Skips Integration Testing on PR ci/skip-provider-integration Skips Provider Integration Tests on PR ci/skip-unit Skips Unit Testing on PR labels Jun 5, 2026
@sakul-learning

Copy link
Copy Markdown
Contributor

Ran zizmor v1.25.2 against the new .github/workflows/release-please.yml and, ignoring the other findings, its auto-fix suggests these full SHA pins:

-        uses: actions/create-github-app-token@v2
+        uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2

-        uses: googleapis/release-please-action@v4
+        uses: googleapis/release-please-action@5c625bfb5d1ff62eadeeb3772007f7f66fdcf071 # v4

If Dependabot is configured for GitHub Actions updates, it should be able to maintain these SHA pins while preserving the version comments.

so0k pushed a commit that referenced this pull request Jun 5, 2026
- Pin the two new actions to full commit SHAs (per zizmor review on #243),
  keeping the version comments so Dependabot can maintain them:
    actions/create-github-app-token  -> fee1f7d... # v2
    googleapis/release-please-action -> 5c625bf... # v4
- Seed release-please from the now-released v0.23.3 (PR #240): bump the
  manifest to 0.23.3 and move bootstrap-sha to the v0.23.3 release commit
  so the first release PR collects only commits after it.

https://claude.ai/code/session_0168ykjbd1W96iSBoQUEkSLE
@so0k so0k force-pushed the claude/release-please-monorepo-setup-utyui branch from c68ff7c to e6a97d8 Compare June 5, 2026 08:33

so0k commented Jun 5, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @sakul-learning — applied both SHA pins in e6a97d8, keeping the # v2/# v4 comments so Dependabot (already configured for github-actions) maintains them:

uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2
uses: googleapis/release-please-action@5c625bfb5d1ff62eadeeb3772007f7f66fdcf071 # v4

Worth noting 5c625bf (release-please-action) is the actual commit the v4 tag resolves to — an earlier API lookup of mine had returned the annotated-tag object SHA instead, so good catch pinning via zizmor.

Also rebased onto main now that v0.23.3 landed (#240): bumped the manifest to 0.23.3 and moved bootstrap-sha to the release commit so release-please takes over from there.


Generated by Claude Code

@so0k

This comment was marked as outdated.

claude added 3 commits June 5, 2026 22:01
Add an additive release-please setup that owns versioning, CHANGELOG and
the release PR, while the existing release.yml / release-publish.yml
publish pipeline, Sentry tracking and @next channel are left untouched and
continue to key off package.json.

- release-please-config.json: locked-version monorepo modelled as a single
  root "." package (release-type node, tags v<version>), with changelog
  sections mirroring the project's conventional-commit scopes.
- .release-please-manifest.json: seeded at the current released 0.23.2.
- .github/workflows/release-please.yml: maintains one rebased release PR on
  pushes to main, authoring via the "CDKTN maintainers" GitHub App token so
  the release PR triggers downstream CI.
- docs/release-please.md: flow, required App permissions/secrets and the
  future full-migration path off standard-version.

https://claude.ai/code/session_0168ykjbd1W96iSBoQUEkSLE
Today cdktn-maintainers is only a GitHub team and existing PR automation
uses the TERRAFORM_CDK_PUSH_GITHUB_TOKEN PAT, so note the App must be
created/installed before release-please.yml can run.

https://claude.ai/code/session_0168ykjbd1W96iSBoQUEkSLE
- Pin the two new actions to full commit SHAs (per zizmor review on #243),
  keeping the version comments so Dependabot can maintain them:
    actions/create-github-app-token  -> fee1f7d... # v2
    googleapis/release-please-action -> 5c625bf... # v4
- Seed release-please from the now-released v0.23.3 (PR #240): bump the
  manifest to 0.23.3 and move bootstrap-sha to the v0.23.3 release commit
  so the first release PR collects only commits after it.

https://claude.ai/code/session_0168ykjbd1W96iSBoQUEkSLE
@so0k so0k force-pushed the claude/release-please-monorepo-setup-utyui branch from e6a97d8 to 6ad79d5 Compare June 5, 2026 15:01
@so0k so0k enabled auto-merge (squash) June 5, 2026 15:01
@sakul-learning

Copy link
Copy Markdown
Contributor

The existing release.yml still has release_github, which runs after release tests and calls yarn release-github. That script also creates a GitHub release for v<version> unless it already exists.

This creates a race / ownership conflict:

  • If release-please wins, release_github no-ops.
  • If release_github wins, release-please may attempt to create an already-existing release.
  • More importantly, release-please creates the GitHub release immediately on the release-PR merge, while release.yml only publishes package artifacts later.

I think this PR should make one workflow the clear owner of GitHub release creation before enabling release-please.

Addresses review on #243: both release.yml's release_github job and
release-please would create the v<version> GitHub release, racing each
other and creating it at different points in the pipeline.

Set skip-github-release: true so release-please only maintains the release
PR (version bump, CHANGELOG, manifest) and does NOT create the tag or
release. release.yml remains the single, test-gated owner of tag + GitHub
release + artifact publishing, unchanged. release-please tracks released
versions via the manifest and the v<version> tags release.yml creates
(matching include-component-in-tag: false). Docs and workflow comments
updated accordingly.

https://claude.ai/code/session_0168ykjbd1W96iSBoQUEkSLE

so0k commented Jun 6, 2026

Copy link
Copy Markdown
Contributor Author

Good catch — fixed in 973b16c by assigning a single owner.

Set skip-github-release: true in release-please-config.json, so release-please now only maintains the release PR (version bump + CHANGELOG.md + manifest) and does not create the tag or GitHub release on merge. release.yml's release_github job (tools/release-github.sh) stays the sole, test-gated owner of tag + GitHub release + artifact publishing — unchanged.

This addresses all three of your points:

  • No double-create: only release.yml creates the v<version> release.
  • No "already-exists" attempt from release-please — it no longer tries.
  • Ordering is preserved: tag + release + artifacts all happen together after the release tests pass, instead of the release appearing immediately on PR merge.

release-please still tracks released versions via .release-please-manifest.json (updated in the merged PR) plus the v<version> tags release.yml creates, which match its expected pattern (include-component-in-tag: false). Docs (docs/release-please.md) now have a "Who owns the GitHub release?" section, and note the alternative if you'd rather flip ownership to release-please later (drop skip-github-release + remove release_github) — kept out of scope to honor the additive/coexist approach.


Generated by Claude Code

@sakul-learning

Copy link
Copy Markdown
Contributor

I ran a release-please release-pr --dry-run against this PR’s release-please config and also simulated main at this PR head to approximate what would happen after merge.

The release mechanics look broadly healthy:

  • release-please finds the seeded release v0.23.3.
  • It computes the next version as 0.23.4.
  • It would open one release PR.
  • It would update 7 files, including CHANGELOG.md, root package.json, and .release-please-manifest.json.
  • skip-github-release: true means this remains release-PR/version/changelog automation only; tag + GitHub release creation stays with the existing release.yml path.

However, there is one blocking-looking issue from the dry-run: the generated release PR title does not match the repository’s PR title lint requirements.

Dry-run output from the main simulation:

Would open 1 pull requests
fork: false
title: chore: release main
branch: release-please--branches--main
draft: false
updates: 7

The repository PR title lint workflow uses amannn/action-semantic-pull-request and documents/validates titles in the conventional form. The lint error text says:

The format is "type(scope): message"

with release included as an allowed scope. So the generated title:

chore: release main

is unlikely to satisfy the repo’s expected release PR title format. The intended title appears to be something like:

chore(release): release v0.23.4

The CLI output also points at why this is happening. During the dry-run it emitted:

⚠ pullRequestTitlePattern miss the part of '${scope}'
⚠ pullRequestTitlePattern miss the part of '${component}'
⚠ pullRequestTitlePattern miss the part of '${version}'

The configured pattern is:

"pull-request-title-pattern": "chore(release): release v${version}"

but in manifest/merge mode the effective generated title falls back to release-please’s manifest branch-shaped title behavior (chore: release ${branch}), hence chore: release main. I would verify/fix the title pattern in the exact manifest mode used here before merging, otherwise the release PR created by this automation may fail the repo’s own PR title linter.

I also checked the repository merge settings via GitHub GraphQL:

mergeCommitAllowed: true
squashMergeAllowed: true
rebaseMergeAllowed: true
autoMergeAllowed: true
deleteBranchOnMerge: true
squashMergeCommitTitle: PR_TITLE
squashMergeCommitMessage: PR_BODY

So the repository is not squash-only; it allows merge commits, squash merge, and rebase merge. That said, squash merge is enabled and configured to use the PR title/body, which is the important path for preserving a clean conventional commit message from PRs.

This aligns with release-please guidance: release-please supports both squash merge and merge commits for release PRs, but strongly recommends squash merge for cleaner history and more predictable release notes. Given this repo’s PR-title-driven release/changelog conventions, I’d recommend using squash merge for release-please PRs and ensuring the generated release PR title passes the semantic PR title linter.

The release PR title is driven by group-pull-request-title-pattern in
manifest mode (not pull-request-title-pattern), whose default
"chore: release ${branch}" renders as "chore: release main". Set
group-pull-request-title-pattern to "chore(release): release v${version}"
so the generated title (e.g. "chore(release): release v0.23.4") passes the
repo's pr-lint (amannn/action-semantic-pull-request) unchanged — type
chore, scope release. Keeps the shared PR-title gate intact rather than
loosening it for release PRs. Documented the title/linter interaction.

https://claude.ai/code/session_0168ykjbd1W96iSBoQUEkSLE

so0k commented Jun 6, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the dry-run @sakul-learning — spot on. Fixed in 88f091c.

Root cause: in manifest mode the release PR title is driven by group-pull-request-title-pattern (default chore: release ${branch}chore: release main), not the pull-request-title-pattern I'd set. Per the docs, group-pull-request-title-pattern inherits ${version} from the root . package, so I set both patterns to:

"pull-request-title-pattern": "chore(release): release v${version}",
"group-pull-request-title-pattern": "chore(release): release v${version}"

The generated title becomes chore(release): release v0.23.4, which passes the existing pr-lint (amannn/action-semantic-pull-request) unchanged — type chore, allowed scope release. I went with fixing the bot's title rather than loosening the linter so the shared PR-title gate stays intact for all release PRs. Documented the title/linter interaction in docs/release-please.md.

On squash merge: agreed, and the repo already allows it with squashMergeCommitTitle: PR_TITLE. With the conventional title above, squashing the release PR yields a clean chore(release): release vX.Y.Z commit on main (and release-please skips its own release commits on the next run). 👍

One thing I'll verify on the first real release PR: your dry-run noted it would update 7 files. With only the root . package configured (and no node-workspace plugin), I expect just root package.json, CHANGELOG.md, and .release-please-manifest.json — the sub-package package.jsons must stay at 0.0.0 (they're aligned in CI by align-version.sh). If the first release PR touches more than those three, I'll constrain it. Couldn't reproduce your --dry-run from here (no token / egress), so thanks for running it.


Generated by Claude Code

@sakul-learning

Copy link
Copy Markdown
Contributor

I reran the release-please release-pr --dry-run after the latest change (88f091c) using a fresh temp clone that simulates this PR having landed on main.

Simulation directory:

/tmp/cdk-terrain-pr243-merged-to-main-sim-v2

Simulated main at:

88f091c1b fix(release): use conventional release PR title in manifest mode

Dry-run log:

/tmp/cdk-terrain-pr243-release-please-dry-run-main-sim-v2.log

The title issue is fixed. The dry-run now produces:

Would open 1 pull requests
fork: false
title: chore(release): release v0.23.4
branch: release-please--branches--main
draft: false
updates: 7

I also checked that generated title against this repo’s semantic PR title requirements:

title: chore(release): release v0.23.4
shape_match: True
type: chore allowed: True
scope: release allowed: True
subject: release v0.23.4

So the generated release PR title should now pass pr-lint (amannn/action-semantic-pull-request).

On the updates: 7 point: I looked into this in more detail and I do not think it indicates unwanted broad package changes.

The dry-run prints:

updates: 7
❯ Fetching file contents for file package-lock.json on branch main
file package-lock.json did not exist
❯ Fetching file contents for file npm-shrinkwrap.json on branch main
file npm-shrinkwrap.json did not exist
❯ Fetching file contents for file samples/package.json on branch main
file samples/package.json did not exist
❯ Fetching file contents for file CHANGELOG.md on branch main
❯ Fetching file contents for file package.json on branch main
✔ updating from 0.23.3 to 0.23.4
❯ Fetching file contents for file changelog.json on branch main
file changelog.json did not exist
❯ Fetching file contents for file .release-please-manifest.json on branch main

Release-please’s Node strategy creates updater entries for these possible files:

package-lock.json
npm-shrinkwrap.json
samples/package.json
CHANGELOG.md
package.json
changelog.json
.release-please-manifest.json

But the optional files that do not exist are configured with createIfMissing: false. I verified the release-please implementation skips those missing files:

if (!update.createIfMissing) {
  console.warn(`file ${update.path} did not exist`);
  continue;
}

So although the dry-run reports updates: 7, four of those are optional missing-file updater entries and are skipped:

package-lock.json         missing, skipped
npm-shrinkwrap.json       missing, skipped
samples/package.json      missing, skipped
changelog.json            missing, skipped

The actual existing update targets are therefore the expected three files:

CHANGELOG.md
package.json
.release-please-manifest.json

I did not see any sub-package package.json updates in the dry-run output. That matches the intended setup: root . package only, no node-workspace plugin, and subpackages staying at 0.0.0 for the existing build-time alignment flow.

One small remaining note: the CLI still warns that the title pattern is missing ${scope} and ${component}:

⚠ pullRequestTitlePattern miss the part of '${scope}'
⚠ pullRequestTitlePattern miss the part of '${component}'

Since this config intentionally hard-codes the conventional scope as release, and the generated title is now valid, I read those warnings as harmless here rather than a blocker.

Overall: the latest dry-run validates successfully, the generated title now matches the repo linter, and the updates: 7 output does not appear to mean release-please will touch extra workspace package manifests.

@jsteinich

Copy link
Copy Markdown
Contributor

I still need to look into the action a bit more, but we should add all of the ci/skip-x labels as the release PR doesn't need to run any of those (only updating a version and the changelog).

Release PRs only change package.json, CHANGELOG.md and the manifest, so
they don't need the unit/integration/provider-integration/examples suites
(per maintainer request on #243). Add the repo's ci/skip-* labels to every
release PR via extra-label, which adds them on top of the default
"autorelease: pending" identifier (vs. label, which would replace it and
break release-please's own PR tracking). Documented in release-please.md.

https://claude.ai/code/session_0168ykjbd1W96iSBoQUEkSLE
@sakul-learning

Copy link
Copy Markdown
Contributor

I ran the follow-up release-please simulations against a temporary main-based workspace with this PR's release-please config/manifest applied, then added one synthetic conventional commit per scenario and ran release-please release-pr --dry-run --local.

Results

Scenario Synthetic commit Generated release PR title Version bump
Non-breaking feature feat: add simulated non-breaking feature chore(release): release v0.24.0 0.23.30.24.0
Breaking feature feat!: add simulated breaking feature chore(release): release v1.0.0 0.23.31.0.0

Both dry-runs opened one release PR and kept the previously validated release PR title shape.

Labels confirmed

The generated release PR object includes these labels:

autorelease: pending
ci/skip-unit
ci/skip-examples
ci/skip-integration
ci/skip-provider-integration

So the configured skip labels are being attached in addition to release-please's default autorelease: pending label.

Pre-v1 / alpha note

Because this repo is still pre-1.0.0, the breaking-change result is the important finding: with the config as currently written, release-please treats a feat! commit as a major release and proposes 1.0.0.

If the intended alpha/pre-v1 policy is instead:

  • breaking changes stay within 0.x and bump minor, e.g. 0.23.30.24.0; and optionally
  • regular feat commits bump patch, e.g. 0.23.30.23.4,

then the config should explicitly set the pre-major bump behavior. I verified the knobs behave as expected in the same simulation:

"bump-minor-pre-major": true
feat! => 0.24.0

"bump-patch-for-minor-pre-major": true
feat => 0.23.4

both options together
feat! => 0.24.0

So I would clarify the intended pre-v1 release policy before merging this automation. If feat! should not cut 1.0.0 yet, add the pre-major bump option(s) now so the first breaking change on main does not unexpectedly graduate the project to v1.

The project is still alpha (0.x); a single feat!/BREAKING CHANGE would
otherwise cut 1.0.0. Set the pre-major bump flags so, while < 1.0.0:
breaking changes bump minor (0.24.0), and non-breaking feat (plus fix and
chore content) bump patch (0.23.4):

  bump-minor-pre-major: true
  bump-patch-for-minor-pre-major: true

Verified against @sakul-learning's dry-run simulation on #243. Documented
the policy table and how to graduate to v1 in release-please.md.

https://claude.ai/code/session_0168ykjbd1W96iSBoQUEkSLE

so0k commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the thorough simulation @sakul-learning — and confirming the skip labels attach. Pre-v1 policy is now set in 2920baf.

Confirmed intent: the project stays alpha (0.x) for now — a feat! should not cut 1.0.0. So I added both pre-major flags:

"bump-minor-pre-major": true,
"bump-patch-for-minor-pre-major": true

Which gives exactly the policy you verified, while < 1.0.0:

Commit Bump Example
feat! / fix! / BREAKING CHANGE minor 0.23.3 → 0.24.0
feat (non-breaking) patch 0.23.3 → 0.23.4
fix patch 0.23.3 → 0.23.4
chore (dep bumps), docs, … patch rides along

Documented the table in docs/release-please.md, including how to graduate to standard semver later (drop the flags). One nuance I called out there: per standard release-please behavior, a chore/docs-only batch won't open a release PR on its own (only feat/fix/breaking do) — those changes ride along as patch-level content in the next release. If you'd want dependency bumps to trigger a patch release on their own, that's a separate cadence decision — happy to look into it if desired.


Generated by Claude Code

@so0k so0k merged commit c759eec into main Jun 8, 2026
15 checks passed
@so0k so0k deleted the claude/release-please-monorepo-setup-utyui branch June 8, 2026 01:28
so0k pushed a commit that referenced this pull request Jul 3, 2026
🤖 Release PR — merge to cut a new release. Kept open and rebased
as commits land on `main`.
---


<details><summary>0.23.4</summary>

##
[0.23.4](v0.23.3...v0.23.4)
(2026-07-02)


### Features

* **cli:** validate Terraform CLI feature versions
([#237](#237))
([32d434c](32d434c))
* declared Terraform/OpenTofu target versions (validation foundation)
([#269](#269))
([0aa2343](0aa2343))
* **lib:** S3-backend - Add `useLockfile` field and update
`dynamodbTable` deprecated JSDoc
([#234](#234))
([32a408f](32a408f))
* **lib:** validate Fn usage against Terraform/OpenTofu versions
([#268](#268))
([cdf8115](cdf8115))


### Bug Fixes

* **cli:** don't mistake terraform error output for a missing-variable
prompt
([#267](#267))
([0ea946f](0ea946f))
* **cli:** release terraform state lock when interrupting diff/deploy
([#284](#284))
([de617db](de617db))
* **cli:** resolve prebuilt Java provider versions via repo1.maven.org
([#285](#285))
([d5af07d](d5af07d))
* **gha:** Adding CHANGELOG.md to prettier ignore list
([#258](#258))
([5160469](5160469))
* **gha:** pull jsii-terraform CI image from GHCR instead of Docker Hub
([#261](#261))
([f19d34b](f19d34b))
* **provider-generator:** copy only publishable files into the jsii
compile bundle
([#292](#292))
([562d4c7](562d4c7))
* **provider-generator:** match shorthand provider sources against
OpenTofu schema keys
([#293](#293))
([fda0103](fda0103))
* **release:** add Changelog title for correct release-please insertion
([#255](#255))
([004818a](004818a))
* **release:** drop devEngines.packageManager that broke npm publish
([ef508a6](ef508a6))
* **tools:** repair generate-function-bindings tool
([#273](#273))
([821e1cf](821e1cf))


### Miscellaneous Chores

* Add Gradle to Mise config
([#271](#271))
([1578270](1578270))
* add pnpm to mise
([#266](#266))
([48ab91f](48ab91f))
* add uv to mise
([#260](#260))
([163cf3d](163cf3d))
* **deps:** bump nrwl/nx-set-shas from
38457b511e60ee4e1da09255b658e480748a1af4 to
afb73a62d26e41464e9254689e1fd6122ee683c1
([#236](#236))
([b5ac018](b5ac018))
* **deps:** bump the github-actions-backward-compatible group across 1
directory with 7 updates
([#235](#235))
([de67d9f](de67d9f))
* **deps:** replace uuid dependency with node:crypto.randomUUID
([#291](#291))
([6d3657a](6d3657a))
* ESLint ignore test edge-provider-bindings
([#270](#270))
([ba407bb](ba407bb))
* Fix Verdaccio logging config
([#272](#272))
([aded64b](aded64b))
* **gha:** parallelize provider binding generation for documentation
examples
([#244](#244))
([0a9c955](0a9c955))
* Migrate package manager from yarn to pnpm
([#170](#170))
([d23da4e](d23da4e))
* migrate planning artifacts to cdktn-planning [skip ci]
([968c358](968c358))
* **release:** add release-please automation for versioning
([#243](#243))
([c759eec](c759eec))
* Remove dependency-pinner tool
([#250](#250))
([42c27d5](42c27d5))
* Remove unused dependencies
([#281](#281))
([c7de65e](c7de65e))
* **tests:** run verdaccio in-process
([#248](#248))
([c17677d](c17677d))
* Update JSII version constraint
([#245](#245))
([d89558f](d89558f))
* Update scheduled workflows to only run on open-constructs/cdk-terrain
([#256](#256))
([ba408cf](ba408cf))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: open-constructs-cdktn[bot] <291052431+open-constructs-cdktn[bot]@users.noreply.github.com>
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

I'm going to lock this pull request because it has been closed for 30 days. This helps our maintainers find and focus on the active issues. If you've found a problem that seems related to this change, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.

@github-actions github-actions Bot locked as resolved and limited conversation to collaborators Jul 8, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ci/skip-examples Skip Examples Testing in PR ci/skip-integration Skips Integration Testing on PR ci/skip-provider-integration Skips Provider Integration Tests on PR ci/skip-unit Skips Unit Testing on PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants