MCPInstall

dtctl-release

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.

Installs
601
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/dynatrace/dtctl --skill dtctl-release
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads dtctl-release automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

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

# 1. Dispatch the workflow to build/update the release PR from commits since the last release
gh workflow run release.yml
gh run watch    # wait for the release-please run to finish

# 2. Review the proposed version + notes, then merge the release PR
gh pr list --search "chore(main): release in:title" --state open
gh pr merge <number> --squash

# 3. Dispatch AGAIN to create the tag + GitHub Release and publish artifacts
gh workflow run release.yml
gh run watch

# 4. Confirm
gh 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:

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

FAQ

What does the dtctl-release skill do?

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.

How do I install dtctl-release?

Run npx skills add https://github.com/dynatrace/dtctl --skill dtctl-release in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/dtctl-release/ (personal) or .claude/skills/dtctl-release/ (project).

Which AI agents can use dtctl-release?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is dtctl-release safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains dtctl-release?

It is published by dynatrace in dynatrace/dtctl. It has 601 recorded installs.

More from dynatrace/dtctl

View all →

dtctl

dynatrace/dtctl

Investigate incidents, debug performance issues, analyze logs, and manage observability resources in Dynatrace using the dtctl CLI. Use this skill whenever the user asks about error rates, latency spikes, service health, crash-looping pods, web vitals, SLO status, open problems, root cause analysis, log patterns, trace analysis, or building dashboards — even if they don't mention Dynatrace by name. Also covers DQL queries, workflow management, notebook and dashboard creation, settings configuration, and any operations against a Dynatrace environment.

pr-review

dynatrace/dtctl

Perform a thorough quality review of a pull request or feature branch before merging. Use this skill whenever the user asks to review a PR, check if code is production-ready, assess quality, verify docs are updated, or asks "is this ready to merge?", "review this PR", "check quality", "is this production ready?", or similar. Also use when reviewing your own work before submitting.

Popular code quality & workflow skills

View category →

grill-me

mattpocock/skills

A relentless interview to sharpen a plan or design.

Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.

handoff

mattpocock/skills

Compact the current conversation into a handoff document for another agent to pick up.

domain-modeling

mattpocock/skills

Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.

codebase-design

mattpocock/skills

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

diagnosing-bugs

mattpocock/skills

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.