Issue-based release proposals with Copilot-driven summaries - #87
Conversation
- Create generate-release-notes.sh script for intelligent changelog parsing - Implement version type detection (patch/minor/major) - Add changelog aggregation for minor releases (all patches) - Add changelog aggregation for major releases (all minors) - Generate human-readable summaries with emoji and statistics - Create GitHub Actions workflow for automated release creation - Integrate with existing deployment workflow via tag triggers - Add comprehensive test suite with 25 passing tests - Handle edge cases and various version scenarios Co-authored-by: DutchmanNL <7318445+DutchmanNL@users.noreply.github.com>
- Update CHANGELOG.md with version 0.5.4 release notes - Add automated release documentation to docs/maintenance.md - Update TESTING.md with new test-generate-release-notes.sh - Bump version from 0.5.3 to 0.5.4 across all files - Document smart aggregation and human-readable features Co-authored-by: DutchmanNL <7318445+DutchmanNL@users.noreply.github.com>
DutchmanNL
left a comment
There was a problem hiding this comment.
Instead of handling fully automated release, create an issue to allow maintainers running a release or not. Pr can be handled then by copilot to improve/simplify release notes
Ensure when minor versions bumps a summary of all patches is made between the versions, and when major changes a summary of the minors. Don’t just copy/paste the content but really review and inhuman readable simply summarize changes and impact. Patch version don’t require a release, skip those …
There was a problem hiding this comment.
Pull request overview
Adds an automated GitHub Release pipeline to this template repository, generating human-readable release notes from CHANGELOG.md and aggregating patch/minor entries for minor/major releases.
Changes:
- Introduces
scripts/generate-release-notes.shto generate (and aggregate) release notes fromCHANGELOG.md. - Adds
.github/workflows/create-release.ymlto create GitHub releases onv*.*.*tag pushes (and manual dispatch). - Bumps repository/template version to
0.5.4and documents/tests the new release-notes generator.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
scripts/generate-release-notes.sh |
New release notes generator with semver-based release-type detection and aggregation logic. |
.github/workflows/create-release.yml |
New workflow to generate notes and publish GitHub releases for version tags / manual dispatch. |
tests/test-generate-release-notes.sh |
New test suite intended to validate release notes generation scenarios. |
CHANGELOG.md |
Adds 0.5.4 entry describing the automated release system. |
docs/maintenance.md |
Documents the automated release creation flow and manual trigger steps. |
TESTING.md |
Lists the new script and its test suite in testing documentation. |
.github/workflows/deploy-on-version-change.yml |
Adds step summary guidance about the next release-creation step after tagging. |
config/metadata.json |
Updates centralized version registry to 0.5.4 (main + template). |
package.json |
Bumps package version to 0.5.4. |
template.md |
Updates template version header to 0.5.4. |
README.md |
Updates displayed template version example to 0.5.4. |
.github/copilot-instructions.md |
Updates repository instructions version to 0.5.4. |
| # Function to parse version components | ||
| parse_version() { | ||
| local version="$1" | ||
| echo "$version" | sed 's/^v//' | tr '.' ' ' | ||
| } | ||
|
|
||
| # Function to get version type (patch, minor, major) | ||
| get_version_type() { | ||
| local current_version="$1" | ||
| local previous_version="$2" | ||
|
|
||
| if [[ -z "$previous_version" || "$previous_version" == "unknown" ]]; then | ||
| echo "initial" | ||
| return | ||
| fi | ||
|
|
||
| read -r curr_major curr_minor curr_patch <<< $(parse_version "$current_version") | ||
| read -r prev_major prev_minor prev_patch <<< $(parse_version "$previous_version") | ||
|
|
||
| if [[ "$curr_major" -gt "$prev_major" ]]; then | ||
| echo "major" | ||
| elif [[ "$curr_minor" -gt "$prev_minor" ]]; then | ||
| echo "minor" | ||
| else | ||
| echo "patch" | ||
| fi |
There was a problem hiding this comment.
parse_version/get_version_type assume all version components are pure integers. However, the workflow trigger (v*.*.*) also matches prerelease tags like v0.5.4-rc.1, and the workflow itself sets --prerelease for such versions. With a prerelease suffix, parse_version returns non-numeric parts (e.g., 4-rc), and the numeric -gt comparisons will error. Either validate/reject non-stable semver in this script, or strip prerelease/build metadata before parsing/comparing.
There was a problem hiding this comment.
Fixed in commit 6cf8c68.
The parse_version() function now strips prerelease and build metadata before parsing:
v0.5.4-rc.1→0.5.4v1.0.0-alpha.1+build→1.0.0
The workflow also detects prerelease versions and skips creating release proposals for them, preventing any numeric comparison errors.
| TAG="${{ steps.extract-version.outputs.tag }}" | ||
|
|
||
| if ! git rev-parse "$TAG" >/dev/null 2>&1; then | ||
| echo "❌ Error: Tag $TAG does not exist" | ||
| exit 1 |
There was a problem hiding this comment.
workflow_dispatch allows an arbitrary tag input, but the validation uses git rev-parse "$TAG" which can misbehave for values starting with - (option-like) or non-tag refs. Prefer verifying an explicit tag ref (e.g., refs/tags/<tag>) and add input validation to ensure it matches the expected vMAJOR.MINOR.PATCH... format before proceeding.
There was a problem hiding this comment.
This feedback is no longer applicable. The workflow_dispatch feature was removed during the refactoring in commit ec17633 based on your earlier feedback to use an issue-based approach instead of manual/automatic releases.
The current workflow:
- Only triggers on tag pushes (
on: push: tags: - 'v*.*.*') - No manual dispatch option
- Tags are created automatically by the existing
deploy-on-version-change.ymlworkflow
If you'd like to add back a manual workflow option, I can implement it with proper validation, but the current issue-based approach doesn't require it since maintainers can manually create release issues using the provided template.
…ctions - Changed from automated releases to issue-based proposal system - Patch releases now skipped (only minor/major get proposals) - Script simplified to extract data only (no summarization) - Created release_creation.yml issue template for manual/auto use - Workflow creates issues assigned to @copilot with clear instructions - Copilot transforms raw changelog into human-readable summaries - Updated documentation to reflect new approach - Removed complex summarization logic from script Co-authored-by: DutchmanNL <7318445+DutchmanNL@users.noreply.github.com>
Updated per your feedback! Key changes in commit ec17633: ✅ Issue-based instead of automatic - Creates GitHub issues (not releases) for maintainer review The workflow now:
Warning Firewall rules blocked me from connecting to one or more addresses (expand for details)I tried to connect to the following addresses, but was blocked by firewall rules:
If you need me to access, download, or install something from one of these locations, you can either:
|
- Reduced from 205 lines to 80 lines (61% reduction) - Removed verbose explanations and repetitive content - Kept only essential information: PR requirements, commands, guidelines - Organized as quick reference with checklists - Makes PRs much more readable and concise Co-authored-by: DutchmanNL <7318445+DutchmanNL@users.noreply.github.com>
- Created detailed issue template for documentation refactoring - Includes specific instructions for @copilot - Guidelines for grouping changes and using human-readable language - Example transformations showing before/after - Success criteria and deliverables clearly defined - Target: 30-40% reduction while keeping essential info Co-authored-by: DutchmanNL <7318445+DutchmanNL@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
- Updated parse_version() to strip prerelease and build metadata - Added prerelease detection in workflow to skip proposals - Prevents numeric comparison errors with versions like v0.5.4-rc.1 - Workflow now properly detects and skips prerelease versions - Fixes code review feedback on version parsing Addresses code review comment 2819441390 Co-authored-by: DutchmanNL <7318445+DutchmanNL@users.noreply.github.com>
Issue-based Release Proposals - All Feedback Addressed ✅
Code Review Fixes
Latest commit - Prerelease version handling:
parse_version()to strip prerelease/build metadata (e.g.,v0.5.4-rc.1→0.5.4)Previously addressed:
Implementation
Script (
generate-release-notes.sh)Workflow (
create-release.yml)Issue Template (
release_creation.yml)Copilot Instructions
Version Handling
Now correctly handles:
v0.5.4v0.5.4-rc.1(skipped)v0.5.4+build.123(stripped)v1.0.0-alpha.1+build(skipped)Workflow Summary
Original prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.