ci: migrate releases to release-please#571
Merged
tolzhabayev merged 1 commit intomainfrom May 8, 2026
Merged
Conversation
The previous release flow (do-release{,-mcp}.yml → push commit + tag to
main from a workflow) is blocked by the org-level "Public repo required
PRs" ruleset. Replace the bespoke machinery with release-please, matching
the convention already used in grafana/plugin-ci-workflows and
grafana/plugin-actions.
- Add release-please-config.json with two packages (root → plugin-validator,
mcp-package → mcp); bootstrap-sha pins the root changelog start to the
v0.41.0 commit so the first release PR doesn't enumerate all of history.
- Add .release-please-manifest.json with current versions.
- Add .github/workflows/release-please.yml; on push to main it opens /
updates per-package release PRs and on merge creates the tag + GitHub
Release with the changelog body.
- Update release.yml to trigger on plugin-validator/v[0-9]* tags and pass
RELEASE_VERSION (semver only) into goreleaser.
- Update .goreleaser.yaml archives.name_template to use RELEASE_VERSION;
needed because the new tag contains a "/" which would otherwise pollute
the default {{ .Version }} archive name.
- Update package.json binWrapper urlTemplate for the new download path.
- release-mcp.yml + .goreleaser.mcp.yaml unchanged: release-please produces
mcp/v* tags that already match the existing trigger and MCP_VERSION
extraction.
- GoReleaser default release.mode is keep-existing, which preserves the
body release-please writes on the GitHub Release.
- Delete do-release.yml and do-release-mcp.yml.
- Rewrite HOW_TO_RELEASE.md for the conventional-commit-driven flow.
Supersedes #570.
6 tasks
academo
approved these changes
May 8, 2026
Collaborator
academo
left a comment
There was a problem hiding this comment.
looks good. let's do a test after this merges
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replaces the
do-release.yml/do-release-mcp.ymlworkflow_dispatch flow with release-please, aligning with the convention used ingrafana/plugin-ci-workflowsandgrafana/plugin-actions. The previous flow is blocked by the org-level "Public repo required PRs" ruleset (see failed run https://github.com/grafana/plugin-validator/actions/runs/25546676728), and bypassing it isn't an option (org-scoped, requires org owner, would weaken the policy across all public Grafana repos).Supersedes #570 — that PR's bridge fix is replaced by this convention-aligned approach.
What changes
release-please-config.json+.release-please-manifest.json: two packages,.(plugin-validator) andmcp-package(mcp),release-type: "node",tag-separator: "/", conventional-commits changelog sections matching the reference repos. Root pinsbootstrap-shato thev0.41.0commit so the first release PR doesn't enumerate all of history..github/workflows/release-please.yml: on push tomain(or workflow_dispatch), opens / updates per-package release PRs. Merging a release PR produces the version tag + GitHub Release with the changelog body. Mirrorsplugin-ci-workflows/.github/workflows/release-please.ymlbut drops the rolling major/minor tag step (not needed — this repo's consumers don't pin to floating major versions)..github/workflows/release.yml: trigger now matchesplugin-validator/v[0-9]*. NewExtract release versionstep exposesRELEASE_VERSION(the bare semver) to GoReleaser..goreleaser.yaml: addsarchives.name_templateusingRELEASE_VERSION. Required because the new tag contains a/, which would otherwise pollute the default{{ .Version }}archive name. Defaultrelease.mode: keep-existingis preserved — verified via goreleaser docs: "GoReleaser will not override [the existing release body] with its release notes, unless you configure it to do so (e.g.mode: replace).".github/workflows/release-mcp.ymland.goreleaser.mcp.yaml: unchanged. release-please naturally producesmcp/v*tags that already match the existing trigger andMCP_VERSIONextraction.package.jsonbinWrapper.urlTemplate: updated to the new download path (releases/download/plugin-validator/v{{version}}/...). Old npm versions ship with the old URL and continue to resolve from existing releases.HOW_TO_RELEASE.md: rewritten for the conventional-commit-driven flow.do-release.ymlanddo-release-mcp.yml.Tag format change
Root tags change from
v0.41.0→plugin-validator/v0.41.1. MCP keeps its existingmcp/v*format. Existing tags are untouched.Verified the downstream consumer at
grafana/community-pipeline/pkg/lib/getvalidator/get_validator.gois unaffected — it queries/repos/grafana/plugin-validator/releases/latestand filters assets by substringlinux_amd64, never pattern-matching on tag names.Test plan
mainand opens achore(plugin-validator): release X.Y.ZPR.plugin-validator/v<X.Y.Z>tag is created and a GitHub Release exists with the changelog body.plugin-validator_<ver>_<os>_<arch>.tar.gzassets,npm view @grafana/plugin-validator@<X.Y.Z>resolves, and Docker taggrafana/plugin-validator-cli:v<X.Y.Z>exists.npx -p @grafana/plugin-validator@<X.Y.Z> plugincheck2 --help— verify the binWrapper resolves the new URL path.