Replace git-release Docker action with gh release + getChangelog - #10
Merged
Conversation
antonyurchenko/git-release hasn't been updated since Jan 2024 and ran its own independent Keep a Changelog parser, separate from the one already configured via org.jetbrains.changelog for patching. Using two different parsers for the same file risked them disagreeing on what counts as a valid section. Replaced it with plain `gh release create`/`gh release delete` (already available on runners, no Docker pull), fed by the changelog plugin's own `getChangelog` task: - Tag-triggered runs: `getChangelog --project-version=X` extracts that version's notes, `gh release create` publishes the tagged release. - Branch-triggered runs: `getChangelog --unreleased` extracts the current Unreleased content, and the `latest-snapshot` pre-release is deleted and recreated pointing at the new commit (same "update in place" behavior git-release provided via PRE_RELEASE/UNRELEASED). Verified `getChangelog --no-header --output-file` locally for both the --project-version and --unreleased cases against the real changelog: clean section content, no header line, no reference-link footer - ready to use directly as release notes.
There was a problem hiding this comment.
Pull request overview
This PR modernizes the release automation by removing reliance on the unmaintained antonyurchenko/git-release Docker action and instead using the GitHub CLI (gh release) with release notes generated by the already-configured org.jetbrains.changelog Gradle plugin.
Changes:
- Generate release notes via
./gradlew getChangelog(tag builds use--project-version, branch builds use--unreleased) and feed them directly togh release createvia--notes-file. - Publish tagged releases using
gh release create, and update the movinglatest-snapshotprerelease by deleting/recreating it on branch pushes. - Document the workflow change in the Unreleased changelog.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
CHANGELOG.md |
Adds an Unreleased entry describing the migration from git-release to gh release + getChangelog. |
.github/workflows/publish-workflow.yml |
Replaces the Docker-based release step with Gradle-extracted notes and gh release create/delete for tags and the latest-snapshot prerelease. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
tajobe
added a commit
that referenced
this pull request
Jul 22, 2026
…log (#10) antonyurchenko/git-release hasn't been updated since Jan 2024 and ran its own independent Keep a Changelog parser, separate from the one already configured via org.jetbrains.changelog for patching. Using two different parsers for the same file risked them disagreeing on what counts as a valid section. Replaced it with plain `gh release create`/`gh release delete` (already available on runners, no Docker pull), fed by the changelog plugin's own `getChangelog` task: - Tag-triggered runs: `getChangelog --project-version=X` extracts that version's notes, `gh release create` publishes the tagged release. - Branch-triggered runs: `getChangelog --unreleased` extracts the current Unreleased content, and the `latest-snapshot` pre-release is deleted and recreated pointing at the new commit (same "update in place" behavior git-release provided via PRE_RELEASE/UNRELEASED). Verified `getChangelog --no-header --output-file` locally for both the --project-version and --unreleased cases against the real changelog: clean section content, no header line, no reference-link footer - ready to use directly as release notes.
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
antonyurchenko/git-releasehasn't been updated since Jan 2024 and runs its own independent Keep a Changelog parser, separate from the one already configured viaorg.jetbrains.changelogfor patching — two different parsers for the same file risked them disagreeing on what counts as a valid section.gh release create/gh release delete(already available on runners, no Docker pull needed), fed by the changelog plugin's owngetChangelogtask:getChangelog --project-version=Xextracts that version's notes,gh release createpublishes the tagged release.getChangelog --unreleasedextracts the current Unreleased content, and thelatest-snapshotpre-release is deleted and recreated pointing at the new commit — the same "update in place" behaviorgit-releaseprovided via itsPRE_RELEASE/UNRELEASEDenv vars.Test plan
./gradlew clean buildpassesgetChangelog --no-header --output-filelocally for both the--project-version=Xand--unreleasedcases against the real changelog: clean section content, no header line, no reference-link footer — ready to use directly as release notes via--notes-filegh release create/gh release deleteflag usage (--cleanup-tag,--target,--prerelease,--notes-file,--title) confirmed againstgh release create --help/gh release delete --helpSince
publish-workflow.ymlonly triggers on pushes (not PRs), thegh release create/deletesteps themselves can only be exercised end-to-end by an actual push tomainafter merging — same as the verification approach used for the earlier release-workflow fixes in this session.