Dtctl Release

dynatrace-oss/dtctl/.agents/skills/dtctl-release

作者 dynatrace-ossf4102b1712f2b6e7b3e2502c84799ff59ea3e801无许可证195 个星标收录于 2026年10月9日更新于 2026年10月9日仓库今天更新

Explain and operate the dtctl release process, which is automated by release-please. Use this skill whenever the user says "release", "ship it", "cut a release", "new version", "bump version", "publish", or asks how dtctl releases work, why a release PR exists, or how to trigger/finish a release.

仅含说明DevOps & Cloud
AI 生成的概览

说明并操作 dtctl 发布流程,该流程由 release-please 自动化并需手动触发。

功能
该技能说明 dtctl 的发布方式:release-please 根据 Conventional Commits 计算版本号和发布说明,完整发布需要两次手动触发工作流,中间合并一次发布 PR。内容涵盖按提交类型决定版本号提升的规则、触发工作流、合并发布 PR 和确认发布的命令,以及可选的发布说明润色。它还提供故障排查指引和发布检查清单。
适用场景
当用户提到 release、ship it、cut a release、new version、bump version 或 publish(针对 dtctl),或询问 dtctl 发布如何运作、为什么存在发布 PR、如何触发或完成发布时使用。
运行要求
仅为说明性内容,不附带脚本。需要访问 dtctl 仓库、具备运行工作流和合并 PR 权限的 GitHub CLI(gh),以及该仓库的发布工作流和相关密钥。

dtctl Release Process (release-please)

dtctl releases use release-please but are triggered manually — nothing releases on ordinary merges to main. There is no manual version bump, no CHANGELOG.md to edit, and no tag to push by hand. The release notes and version are computed from the Conventional Commits since the last release.

How it works

The .github/workflows/release.yml workflow runs only when you trigger it (workflow_dispatch — the "Run workflow" button on the Actions tab, or gh workflow run). A full release is two dispatches with a merge in between:

  1. Dispatch #1 — the release-please job inspects the conventional commits since the last release and opens/updates a release PR titled like chore(main): release 0.31.0. That PR:
    • bumps .release-please-manifest.json,
    • bumps the fallback version in pkg/version/version.go (via the // x-release-please-version annotation),
    • and contains the pending release notes (in the PR body).
  2. Merge the release PR once you're happy with the version + notes.
  3. Dispatch #2 — release-please detects the merged release PR, creates the git tag (vX.Y.Z) and the GitHub Release with generated notes, and release_created == true gates the goreleaser job, which builds cross-platform binaries, signs checksums with cosign, generates SBOMs with syft, attaches everything to the release (without overwriting the notes — release.mode: keep-existing), and pushes the updated Homebrew cask to dynatrace-oss/homebrew-tap.

⚠️ Don't forget Dispatch #2: merging the release PR alone does not publish anything, because the workflow only runs on manual dispatch.

There is no CHANGELOG.md file in the repo by design — the GitHub Release is the canonical changelog (skip-changelog: true in release-please-config.json).

Version bumps are determined by commit type

Commit prefixBump (pre-1.0)Example
feat:MINOR0.30.3 → 0.31.0
fix: / perf:PATCH0.30.3 → 0.30.4
feat!: / fix!: or BREAKING CHANGE: footerMINOR (pre-1.0)0.30.3 → 0.31.0
docs: / test: / chore: / ci: / refactor:no release on its own—

So the way to "control the version" is to write good conventional commits (see CONTRIBUTING.md). PRs are squash-merged, so the PR title becomes the release-relevant commit.

To cut a release

bash
# 1. Dispatch the workflow to build/update the release PR from commits since the last releasegh workflow run release.ymlgh run watch    # wait for the release-please run to finish
# 2. Review the proposed version + notes, then merge the release PRgh pr list --search "chore(main): release in:title" --state opengh pr merge <number> --squash
# 3. Dispatch AGAIN to create the tag + GitHub Release and publish artifactsgh workflow run release.ymlgh run watch
# 4. Confirmgh release view "$(gh release list --limit 1 --json tagName -q '.[0].tagName')"

The tag, GitHub Release, binaries, signatures, SBOMs, and Homebrew cask are produced by the second dispatch.

Polishing release notes (optional)

release-please generates notes grouped by commit type with PR links. They're good by default. If you want richer prose, edit the GitHub Release after it's published — GoReleaser uses keep-existing, so it won't clobber your edits:

bash
gh release edit vX.Y.Z --notes-file notes.md

Troubleshooting

  • No release PR appeared — did you dispatch the workflow? It does not run on merges; run gh workflow run release.yml. If it ran and still no PR, there are no releasable commits since the last release (only docs/chore/test/etc.), or a commit isn't a valid conventional commit. Check gh run list --workflow=release.yml.
  • Merged the release PR but nothing published — that's expected: dispatch the workflow a second time so release-please creates the tag/Release and GoReleaser runs.
  • Wrong version bump — caused by the commit types. To force a specific bump, use a Release-As: x.y.z footer in a commit on main.
  • Release created but no binaries — inspect the goreleaser job in the release workflow run; the release-please job must have output release_created: true for it to run.
  • Homebrew didn't update — check the HOMEBREW_TAP_APP_ID / HOMEBREW_TAP_APP_PRIVATE_KEY secrets and the GoReleaser step logs; skip_upload: auto intentionally skips pre-release tags.

Checklist

  1. All intended changes merged to main as conventional commits
  2. Dispatch #1: gh workflow run release.yml → release PR created/updated
  3. Open release PR reflects the expected version and notes
  4. Merge the release PR (squash)
  5. Dispatch #2: gh workflow run release.yml → tag + Release created
  6. release.yml run is green for both release-please and goreleaser jobs
  7. GitHub Release shows binaries, checksums, signatures, and SBOMs
  8. (Optional) Polished the release notes via gh release edit

来源与署名

来源:dynatrace-oss/dtctl位于.agents/skills/dtctl-release提交f4102b1

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架