Skip to content

fix: make the release dispatch ask which bump it wants (ENG-9233) - #5

Merged
johnsca merged 1 commit into
mainfrom
johnsca/fix/ENG-9233/first-release-guard
Oct 20, 2026
Merged

johnsca merged 1 commit into
mainfrom
johnsca/fix/ENG-9233/first-release-guard

Conversation

@johnsca

@johnsca johnsca commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

ENG-9233

what

  • Opens the caller's bump dropdown on (choose one) rather than defaulting
    to patch, so a dispatch has to answer the question. The called workflow
    already rejects anything but the three real values, so the placeholder needs
    no new validation.
  • Drops the step that required a first release to be a major bump.
  • Updates the README to match, in the prose about refusals and in the caller
    block it offers for copying.

why

patch was a poor default on a dispatch that cannot be taken back. On a
repository with no tags it opens at v0.0.1, and immutable releases burn that
name for good. On any later release it quietly ships a patch for work that
earned a minor, which nothing caught, because the guard only ever looked at
first releases.

Asking the question fixes both, and it fixes them at the point where the
default was wrong rather than downstream of it. The guard can then go. A
repository that explicitly asks for a patch on an empty tag history means
v0.0.1, and a minor bump climbs out of it, so there is nothing left worth
refusing. Whether a repository opens at v0.0.1, v0.1.0 or v1.0.0 is its
own call, and cut-release.yml no longer holds a view on it.

testing

  • just lint passes here and in the five module repositories.
  • uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/ reports no
    findings, with the five online audits scheduled rather than skipped.
  • Ran the bump check against (choose one), patch, minor, major,
    Patch, empty and majorly. Only the three lowercase values pass, so
    the placeholder stops a run the same way any other unrecognised bump
    does.
  • Parsed each caller to confirm the placeholder survives YAML as the
    literal (choose one) and that no default key remains.
  • After merge, dispatch Release here and confirm the dropdown opens on
    (choose one) and that submitting it fails at the bump check.
  • Dispatch Release with a minor bump and confirm v1.1.0 publishes
    against v1.0.0 as previous.

docs

The README's account of the refusals now covers the placeholder, and says what
each bump opens at on a repository with no tags rather than naming one of them
as required.

@johnsca
johnsca marked this pull request as ready for review October 20, 2026 19:10
@johnsca
johnsca requested a review from a team as a code owner October 20, 2026 19:10

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No issues found across 3 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.
Architecture diagram
sequenceDiagram
    participant Dispatch as Manual Dispatch
    participant Inputs as Inputs (bump)
    participant Validate as Validate Job
    participant Version as Version Step
    participant BumpCheck as Bump Check
    participant Guard as First Release Guard
    participant Publish as Publish Job

    Dispatch->>Inputs: Select bump type (patch/minor/major)
    Dispatch->>Validate: Start workflow

    Validate->>Version: Compute version info
    Version-->>Validate: previous_version = 0.0.0 (first release)

    alt previous_version == 0.0.0 (first release)
        Validate->>BumpCheck: Validate bump input (lowercase check)
        BumpCheck-->>Validate: pass (patch/minor/major)
        
        alt bump == patch
            Validate->>Guard: Refuse to open at v0.0.1
            Guard-->>Validate: error (exit 1)
            Note over Validate: Prevents permanent v0.0.1
        else bump == minor
            Validate->>Guard: Allow minor bump
            Note over Validate: Opens at v0.1.0
        else bump == major
            Validate->>Guard: Allow major bump
            Note over Validate: Opens at v1.0.0
        end
    else previous_version != 0.0.0 (subsequent release)
        Validate->>Guard: No first-release guard needed
        Note over Validate: Standard version walk
    end

    Validate->>Publish: Pass version info
    Publish->>Publish: Create release tag
Loading

Re-trigger cubic

@johnsca
johnsca force-pushed the johnsca/fix/ENG-9233/first-release-guard branch from d351ecc to 897da79 Compare October 20, 2026 19:49
@johnsca johnsca changed the title fix: let a first release open at v0.1.0 (ENG-9233) fix: make the release dispatch ask which bump it wants (ENG-9233) Oct 20, 2026
johnsca added a commit to stacklet/terraform-aws-onboarding-account that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to the commit that repository's v1.0.0
  names.
- Adds a Versioning section to the README covering the registry address and the
  `version` constraints it accepts.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow, so its two tags were cut by hand and
  neither carries a GitHub release.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.1.1` as previous and `v0.2.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.2.0` publishes.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for, and a
Migrating to 0.2.0 section covering the two inputs ENG-8761 changed. Both
examples now pin `0.2.0`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-aws-onboarding-org-read that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to the commit that repository's v1.0.0
  names.
- Adds a Versioning section to the README covering the registry address and the
  `version` constraints it accepts.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow, so its one tag was cut by hand and
  carries no GitHub release.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.1.0` as previous and `v0.1.1` as new.
- [ ] Dispatch Release with a `patch` bump and confirm `v0.1.1` publishes, so
      this repository carries a GitHub release rather than only a tag.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for. The example
now pins `0.1.1`. Nothing changes for callers, so there is no migration
section.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-aws-stacklet-cur-setup that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to the commit that repository's v1.0.0
  names.
- Points the README example at the Terraform Registry address rather than the
  GitHub URL, and adds a Versioning section.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow and no tags, so there is no version a
  caller can pin to.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.0.0` as previous and `v0.1.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.1.0` publishes.
      This is the first run anywhere to open a repository on a minor, so it is
      where the dropdown change gets exercised for real.
- [ ] Publish the module to the registry, since the README now sends readers to
      an address that holds nothing yet.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for. The
example now pins `0.1.0`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-azure-stacklet-cost-setup that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Replaces the release workflow with a dispatch caller for `cut-release.yml` in
  `stacklet/github-tooling`, pinned to the commit that repository's v1.0.0
  names. The workflow there is this one, lifted.
- Points both README examples at the Terraform Registry address rather than a
  GitHub URL with a tag ref, rewrites the Versioning section around `version`
  constraints, and updates the migration note to match.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository held the only copy of the workflow. The other five module
  repositories need it, and copying it five more times leaves six sets of the
  same guards to keep in step.
- The guards are the part worth sharing, because a published release is
  immutable and a slip cannot be taken back.
- The lifted copy is not identical. It takes `bump` as a string and rejects
  anything but patch, minor, or major, compares against the caller's default
  branch rather than the literal `main`, hardens the runner on the job that
  runs a third-party action, and claims the tag before publishing the release
  rather than letting `gh release create` make it. The PR on `github-tooling`
  covers each.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v1.0.0` as previous and `v1.0.1` as new. That shows
      the shared workflow reads this repository's tag history the way the copy
      it replaces did.
- [ ] Publish the module to the registry, since the README now sends readers to
      an address that holds nothing yet.

Docs
----

The README Versioning section drops the note about immutable tags and explains
`version` constraints instead, because the registry address is what callers now
set. The migration note no longer tells the reader to update a tag ref.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-azure-stacklet-relay that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to the commit that repository's v1.0.0
  names.
- Points both README examples at the Terraform Registry address rather than a
  GitHub URL with a commit ref, and adds a Versioning section. The migration
  note now tells the reader to move `source` and set `version` rather than to
  update a SHA.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow and no tags, so callers pin a raw
  commit and there is no version to read notes against.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.0.0` as previous and `v0.1.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.1.0` publishes.
      This is the first run anywhere to open a repository on a minor, so it is
      where the dropdown change gets exercised for real.
- [ ] Publish the module to the registry, since the README now sends readers to
      an address that holds nothing yet.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for. The
example now pins `0.1.0`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Opens the caller's `bump` dropdown on `(choose one)` rather than defaulting
  to `patch`, so a dispatch has to answer the question. The called workflow
  already rejects anything but the three real values, so the placeholder needs
  no new validation.
- Drops the step that required a first release to be a major bump.
- Updates the README to match, in the prose about refusals and in the caller
  block it offers for copying.

Why
----

`patch` was a poor default on a dispatch that cannot be taken back. On a
repository with no tags it opens at `v0.0.1`, and immutable releases burn that
name for good. On any later release it quietly ships a patch for work that
earned a minor, which nothing caught, because the guard only ever looked at
first releases.

Asking the question fixes both, and it fixes them at the point where the
default was wrong rather than downstream of it. The guard can then go. A
repository that explicitly asks for a patch on an empty tag history means
`v0.0.1`, and a minor bump climbs out of it, so there is nothing left worth
refusing. Whether a repository opens at `v0.0.1`, `v0.1.0` or `v1.0.0` is its
own call, and `cut-release.yml` no longer holds a view on it.

Testing
----

- [x] `just lint` passes here and in the five module repositories.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] Ran the bump check against `(choose one)`, `patch`, `minor`, `major`,
      `Patch`, empty and `majorly`. Only the three lowercase values pass, so
      the placeholder stops a run the same way any other unrecognised bump
      does.
- [x] Parsed each caller to confirm the placeholder survives YAML as the
      literal `(choose one)` and that no `default` key remains.
- [ ] After merge, dispatch Release here and confirm the dropdown opens on
      `(choose one)` and that submitting it fails at the bump check.
- [ ] Dispatch Release with a `minor` bump and confirm `v1.1.0` publishes
      against `v1.0.0` as previous.

Docs
----

The README's account of the refusals now covers the placeholder, and says what
each bump opens at on a repository with no tags rather than naming one of them
as required.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@johnsca
johnsca force-pushed the johnsca/fix/ENG-9233/first-release-guard branch from 897da79 to 45ca79a Compare October 20, 2026 19:53
johnsca added a commit to stacklet/terraform-aws-onboarding-account that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to the commit that repository's v1.0.0
  names.
- Adds a Versioning section to the README covering the registry address and the
  `version` constraints it accepts.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow, so its two tags were cut by hand and
  neither carries a GitHub release.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.1.1` as previous and `v0.2.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.2.0` publishes.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for, and a
Migrating to 0.2.0 section covering the two inputs ENG-8761 changed. Both
examples now pin `0.2.0`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@jtroup jtroup left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Thanks @johnsca

johnsca added a commit to stacklet/terraform-aws-onboarding-org-read that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to the commit that repository's v1.0.0
  names.
- Adds a Versioning section to the README covering the registry address and the
  `version` constraints it accepts.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow, so its one tag was cut by hand and
  carries no GitHub release.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.1.0` as previous and `v0.1.1` as new.
- [ ] Dispatch Release with a `patch` bump and confirm `v0.1.1` publishes, so
      this repository carries a GitHub release rather than only a tag.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for. The example
now pins `0.1.1`. Nothing changes for callers, so there is no migration
section.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-aws-stacklet-cur-setup that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to the commit that repository's v1.0.0
  names.
- Points the README example at the Terraform Registry address rather than the
  GitHub URL, and adds a Versioning section.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow and no tags, so there is no version a
  caller can pin to.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.0.0` as previous and `v0.1.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.1.0` publishes.
      This is the first run anywhere to open a repository on a minor, so it is
      where the dropdown change gets exercised for real.
- [ ] Publish the module to the registry, since the README now sends readers to
      an address that holds nothing yet.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for. The
example now pins `0.1.0`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-azure-stacklet-cost-setup that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Replaces the release workflow with a dispatch caller for `cut-release.yml` in
  `stacklet/github-tooling`, pinned to the commit that repository's v1.0.0
  names. The workflow there is this one, lifted.
- Points both README examples at the Terraform Registry address rather than a
  GitHub URL with a tag ref, rewrites the Versioning section around `version`
  constraints, and updates the migration note to match.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository held the only copy of the workflow. The other five module
  repositories need it, and copying it five more times leaves six sets of the
  same guards to keep in step.
- The guards are the part worth sharing, because a published release is
  immutable and a slip cannot be taken back.
- The lifted copy is not identical. It takes `bump` as a string and rejects
  anything but patch, minor, or major, compares against the caller's default
  branch rather than the literal `main`, hardens the runner on the job that
  runs a third-party action, and claims the tag before publishing the release
  rather than letting `gh release create` make it. The PR on `github-tooling`
  covers each.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v1.0.0` as previous and `v1.0.1` as new. That shows
      the shared workflow reads this repository's tag history the way the copy
      it replaces did.
- [ ] Publish the module to the registry, since the README now sends readers to
      an address that holds nothing yet.

Docs
----

The README Versioning section drops the note about immutable tags and explains
`version` constraints instead, because the registry address is what callers now
set. The migration note no longer tells the reader to update a tag ref.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-azure-stacklet-relay that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to the commit that repository's v1.0.0
  names.
- Points both README examples at the Terraform Registry address rather than a
  GitHub URL with a commit ref, and adds a Versioning section. The migration
  note now tells the reader to move `source` and set `version` rather than to
  update a SHA.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow and no tags, so callers pin a raw
  commit and there is no version to read notes against.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.0.0` as previous and `v0.1.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.1.0` publishes.
      This is the first run anywhere to open a repository on a minor, so it is
      where the dropdown change gets exercised for real.
- [ ] Publish the module to the registry, since the README now sends readers to
      an address that holds nothing yet.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for. The
example now pins `0.1.0`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@johnsca
johnsca merged commit d5b3816 into main Oct 20, 2026
4 checks passed
@johnsca
johnsca deleted the johnsca/fix/ENG-9233/first-release-guard branch October 20, 2026 19:54
johnsca added a commit to stacklet/terraform-aws-onboarding-account that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to a commit on
  that repository's main.
- Adds a Versioning section to the README covering the registry address and the
  `version` constraints it accepts.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow, so its two tags were cut by hand and
  neither carries a GitHub release.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.1.1` as previous and `v0.2.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.2.0` publishes.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for, and a
Migrating to 0.2.0 section covering the two inputs ENG-8761 changed. Both
examples now pin `0.2.0`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-aws-onboarding-org-read that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to a commit on
  that repository's main.
- Adds a Versioning section to the README covering the registry address and the
  `version` constraints it accepts.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow, so its one tag was cut by hand and
  carries no GitHub release.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.1.0` as previous and `v0.1.1` as new.
- [ ] Dispatch Release with a `patch` bump and confirm `v0.1.1` publishes, so
      this repository carries a GitHub release rather than only a tag.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for. The example
now pins `0.1.1`. Nothing changes for callers, so there is no migration
section.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-aws-stacklet-cur-setup that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to a commit on
  that repository's main.
- Points the README example at the Terraform Registry address rather than the
  GitHub URL, and adds a Versioning section.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow and no tags, so there is no version a
  caller can pin to.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.0.0` as previous and `v0.1.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.1.0` publishes.
      This is the first run anywhere to open a repository on a minor, so it is
      where the dropdown change gets exercised for real.
- [ ] Publish the module to the registry, since the README now sends readers to
      an address that holds nothing yet.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for. The
example now pins `0.1.0`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-azure-stacklet-cost-setup that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Replaces the release workflow with a dispatch caller for `cut-release.yml` in
  `stacklet/github-tooling`, pinned to a commit on
  that repository's main. The workflow there is this one, lifted.
- Points both README examples at the Terraform Registry address rather than a
  GitHub URL with a tag ref, rewrites the Versioning section around `version`
  constraints, and updates the migration note to match.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository held the only copy of the workflow. The other five module
  repositories need it, and copying it five more times leaves six sets of the
  same guards to keep in step.
- The guards are the part worth sharing, because a published release is
  immutable and a slip cannot be taken back.
- The lifted copy is not identical. It takes `bump` as a string and rejects
  anything but patch, minor, or major, compares against the caller's default
  branch rather than the literal `main`, hardens the runner on the job that
  runs a third-party action, and claims the tag before publishing the release
  rather than letting `gh release create` make it. The PR on `github-tooling`
  covers each.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v1.0.0` as previous and `v1.0.1` as new. That shows
      the shared workflow reads this repository's tag history the way the copy
      it replaces did.
- [ ] Publish the module to the registry, since the README now sends readers to
      an address that holds nothing yet.

Docs
----

The README Versioning section drops the note about immutable tags and explains
`version` constraints instead, because the registry address is what callers now
set. The migration note no longer tells the reader to update a tag ref.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-azure-stacklet-relay that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

What
----

- Adds `.github/workflows/release.yml`, a dispatch caller for `cut-release.yml`
  in `stacklet/github-tooling`, pinned to a commit on
  that repository's main.
- Points both README examples at the Terraform Registry address rather than a
  GitHub URL with a commit ref, and adds a Versioning section. The migration
  note now tells the reader to move `source` and set `version` rather than to
  update a SHA.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
  `patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

Why
----

- This repository has no release workflow and no tags, so callers pin a raw
  commit and there is no version to read notes against.
- Five module repositories need the same workflow, and the sixth already had
  it. Calling one copy beats keeping six in step. The guards are the part worth
  sharing, because a published release is immutable and a slip cannot be taken
  back.

Testing
----

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports no
      findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and confirm
      the summary reports `v0.0.0` as previous and `v0.1.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.1.0` publishes.
      This is the first run anywhere to open a repository on a minor, so it is
      where the dropdown change gets exercised for real.
- [ ] Publish the module to the registry, since the README now sends readers to
      an address that holds nothing yet.

Docs
----

The README gains a Versioning section naming the registry address this module
publishes to, with the patch-level constraint a 0.x line calls for. The
example now pins `0.1.0`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-aws-onboarding-account that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

### what

- Adds `.github/workflows/release.yml`, a dispatch caller for
`cut-release.yml`
  in `stacklet/github-tooling`, pinned to a commit on
  that repository's main.
- Adds a Versioning section to the README covering the registry address
and the
  `version` constraints it accepts.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
`patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

### why

- This repository has no release workflow, so its two tags were cut by
hand and
  neither carries a GitHub release.
- Five module repositories need the same workflow, and the sixth already
had
it. Calling one copy beats keeping six in step. The guards are the part
worth
sharing, because a published release is immutable and a slip cannot be
taken
  back.

### testing

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports
no
findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [x] Checked the documented constraint against semver: `~> 0.2.0`
accepts
      `0.2.1` and rejects `0.3.0`.
- [ ] After merge, dispatch Release on `main` with dry run checked and
confirm
      the summary reports `v0.1.1` as previous and `v0.2.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.2.0`
publishes.

### docs

The README gains a Versioning section naming the registry address this
module
publishes to. It documents a patch-level constraint, `~> 0.2.0`, rather
than
the `~> 1.0` the 1.x modules use. This module is on a `0.x` line, where
a minor
bump is free to break callers and where `~> 1.0` matches nothing the
registry
holds.


[ENG-9233]:
https://stacklet.atlassian.net/browse/ENG-9233?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-aws-onboarding-org-read that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

### what

- Adds `.github/workflows/release.yml`, a dispatch caller for
`cut-release.yml`
in `stacklet/github-tooling`, pinned to the commit that repository's
v1.0.0
  names.
- Adds a Versioning section to the README covering the registry address
and the
  `version` constraints it accepts.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
`patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

### why

- This repository has no release workflow, so its one tag was cut by
hand and
  carries no GitHub release.
- Five module repositories need the same workflow, and the sixth already
had
it. Calling one copy beats keeping six in step. The guards are the part
worth
sharing, because a published release is immutable and a slip cannot be
taken
  back.

### testing

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports
no
findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and
confirm
      the summary reports `v0.1.0` as previous and `v0.1.1` as new.
- [ ] Dispatch Release with a `patch` bump and confirm `v0.1.1`
publishes, so
      this repository carries a GitHub release rather than only a tag.

### docs

The README gains a Versioning section naming the registry address this
module
publishes to, with the patch-level constraint a 0.x line calls for. The
example
now pins `0.1.1`. Nothing changes for callers, so there is no migration
section.


[ENG-9233]:
https://stacklet.atlassian.net/browse/ENG-9233?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-aws-stacklet-cur-setup that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

### what

- Adds `.github/workflows/release.yml`, a dispatch caller for
`cut-release.yml`
  in `stacklet/github-tooling`, pinned to a commit on
  that repository's main.
- Points the README example at the Terraform Registry address rather
than the
  GitHub URL, and adds a Versioning section.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
`patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

### why

- This repository has no release workflow and no tags, so there is no
version a
  caller can pin to.
- Five module repositories need the same workflow, and the sixth already
had
it. Calling one copy beats keeping six in step. The guards are the part
worth
sharing, because a published release is immutable and a slip cannot be
taken
  back.

### testing

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports
no
findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and
confirm
      the summary reports `v0.0.0` as previous and `v0.1.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.1.0`
publishes.
This is the first run anywhere to open a repository on a minor, so it is
      where the dropdown change gets exercised for real.
- [ ] Publish the module to the registry, since the README now sends
readers to
      an address that holds nothing yet.

### docs

The README gains a Versioning section naming the registry address this
module
publishes to, with the patch-level constraint a 0.x line calls for. The
example now pins `0.1.0`.


[ENG-9233]:
https://stacklet.atlassian.net/browse/ENG-9233?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-azure-stacklet-cost-setup that referenced this pull request Oct 20, 2026
…3) (#8)

[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

### what

- Replaces the release workflow with a dispatch caller for
`cut-release.yml` in
  `stacklet/github-tooling`, pinned to a commit on
  that repository's main. The workflow there is this one, lifted.
- Points both README examples at the Terraform Registry address rather
than a
GitHub URL with a tag ref, rewrites the Versioning section around
`version`
  constraints, and updates the migration note to match.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
`patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

### why

- This repository held the only copy of the workflow. The other five
module
repositories need it, and copying it five more times leaves six sets of
the
  same guards to keep in step.
- The guards are the part worth sharing, because a published release is
  immutable and a slip cannot be taken back.
- The lifted copy is not identical. It takes `bump` as a string and
rejects
anything but patch, minor, or major, compares against the caller's
default
branch rather than the literal `main`, hardens the runner on the job
that
runs a third-party action, and claims the tag before publishing the
release
rather than letting `gh release create` make it. The PR on
`github-tooling`
  covers each.

### testing

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports
no
findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and
confirm
the summary reports `v1.0.0` as previous and `v1.0.1` as new. That shows
the shared workflow reads this repository's tag history the way the copy
      it replaces did.
- [ ] Publish the module to the registry, since the README now sends
readers to
      an address that holds nothing yet.

### docs

The README Versioning section drops the note about immutable tags and
explains
`version` constraints instead, because the registry address is what
callers now
set. The migration note no longer tells the reader to update a tag ref.


[ENG-9233]:
https://stacklet.atlassian.net/browse/ENG-9233?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
johnsca added a commit to stacklet/terraform-azure-stacklet-relay that referenced this pull request Oct 20, 2026
[ENG-9233](https://stacklet.atlassian.net/browse/ENG-9233)

### what

- Adds `.github/workflows/release.yml`, a dispatch caller for
`cut-release.yml`
  in `stacklet/github-tooling`, pinned to a commit on
  that repository's main.
- Points both README examples at the Terraform Registry address rather
than a
GitHub URL with a commit ref, and adds a Versioning section. The
migration
note now tells the reader to move `source` and set `version` rather than
to
  update a SHA.
- The `bump` dropdown opens on `(choose one)` rather than defaulting to
`patch`, matching stacklet/github-tooling#5. A dispatch has to say which
  bump it wants.

### why

- This repository has no release workflow and no tags, so callers pin a
raw
  commit and there is no version to read notes against.
- Five module repositories need the same workflow, and the sixth already
had
it. Calling one copy beats keeping six in step. The guards are the part
worth
sharing, because a published release is immutable and a slip cannot be
taken
  back.

### testing

- [x] `just lint` passes.
- [x] `uvx zizmor@1.23.1 -v --gh-token=... .github/workflows/` reports
no
findings, with the five online audits scheduled rather than skipped.
- [x] The pin resolves to a commit via
      `gh api repos/stacklet/github-tooling/commits/<sha>`.
- [ ] After merge, dispatch Release on `main` with dry run checked and
confirm
      the summary reports `v0.0.0` as previous and `v0.1.0` as new.
- [ ] Dispatch Release with a `minor` bump and confirm `v0.1.0`
publishes.
This is the first run anywhere to open a repository on a minor, so it is
      where the dropdown change gets exercised for real.
- [ ] Publish the module to the registry, since the README now sends
readers to
      an address that holds nothing yet.

### docs

The README gains a Versioning section naming the registry address this
module
publishes to, with the patch-level constraint a 0.x line calls for. The
example now pins `0.1.0`.


[ENG-9233]:
https://stacklet.atlassian.net/browse/ENG-9233?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

Co-authored-by: Claude Opus 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.

2 participants