From c6b933ec04c148a5ed79b8d48502afa43e5f8dcf Mon Sep 17 00:00:00 2001 From: Steven Pritchard Date: Thu, 30 Jul 2026 16:38:44 +0000 Subject: [PATCH] Freeze CHANGELOG.md; git history is the changelog now puppetsync has no versioned releases (the 17 existing tags are Jira-session markers from 2021-2022), so per-PR changelog entries had no release to collect them and turned every in-flight PR into a merge conflict with every other. - Add a freeze notice: ongoing history lives in the git log and merged PRs, whose squash-merge titles serve as the changelog - Convert the [Unreleased] section into dated sections using the dates each entry was recorded (from git blame): 2026-07-29 (the recent modernization: #49, #51-#54), 2023-08-03, and 2023-04-17 - Drop the dangling [Unreleased] reflink; keep all historical sections - Retire rakelib/keep_a_changelog.rake (release tooling for the Jira-tag era; no remaining consumers) - Update AGENTS.md's session checklist accordingly Co-Authored-By: Claude Fable 5 --- AGENTS.md | 2 +- CHANGELOG.md | 54 ++++++++++++++------- rakelib/keep_a_changelog.rake | 89 ----------------------------------- 3 files changed, 39 insertions(+), 106 deletions(-) delete mode 100644 rakelib/keep_a_changelog.rake diff --git a/AGENTS.md b/AGENTS.md index 7431363..0a86e61 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -58,7 +58,7 @@ Three layers, all data-driven via Hiera (`hiera.yaml` defines two separate hiera 1. Create or reuse a repolist in `data/sync/repolists/` and a config in `data/sync/configs/` (copy a recent dated one; the naming convention is `YYYYMMDD-description.yaml`). 2. Point the `latest.yaml` symlinks at them (optional, but lets you omit `config=`/`repolist=`). 3. If the change needs new behavior, add/modify a task (one-off transformations) or a profile (persistent baseline files), and list any new stage in the config. -4. Record notable changes in `CHANGELOG.md` (Keep a Changelog format; helper tasks in `rakelib/`). +4. Do **not** update `CHANGELOG.md` — it is frozen (no versioned releases to collect entries, and per-PR edits conflicted with every in-flight PR). Descriptive squash-merge PR titles are the changelog. ## Current context diff --git a/CHANGELOG.md b/CHANGELOG.md index 8388978..faae92b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,17 @@ # Changelog -All notable changes to this project will be documented in this file. +**This changelog is frozen.** puppetsync has no versioned releases, so +per-PR changelog entries only created merge conflicts without a release to +collect them. Ongoing history lives in the [git log] and [merged pull +requests], whose squash-merge titles serve as the changelog. -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +The entries below are historical. Section headings are either Jira-era +session tags or the date the entries were recorded. +[git log]: https://github.com/simp/puppetsync/commits/main/ +[merged pull requests]: https://github.com/simp/puppetsync/pulls?q=is%3Apr+is%3Amerged - -## [Unreleased] +## [2026-07-29] (previously Unreleased) ### Added @@ -15,15 +20,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). checks over Hiera data, task metadata, and the `latest.yaml` symlinks - Puppet syntax validation and a Bolt plan smoke test using openbolt -- New GHA workflow, `add_new_issue_to_triage_project.yml` -- New task, `generate_reference_md` - - Generates up-to-date `REFERENCE.md` - - If changed: stages and commits to git IMMEDIATELY -- New task and plan, `release_pupmods` - - Clone, tag, and push GitHub release for each repo in the repolist -- New GHA PR tests workflow override for pupmod simp/simp - - Parallelizes spec tests so they don't take three hours to run - ### Changed - Repo setup no longer wipes `_repos/` and re-clones everything on each run @@ -38,7 +34,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). them; amend detection also works for single-line commit messages) - Unchanged repos skip the GitHub fork/push/PR stages - The final summary reports three buckets: ok / unchanged / failed -- Update GHA ruby tag deploy workflows to use `$GITHUB_OUTPUT`, Ruby 2.7 - `puppetsync::pipeline_stage` now raises a clear error when a stage block returns something other than Bolt results, instead of dropping into an interactive `binding.pry` debugger that would hang unattended runs (#52) @@ -49,7 +44,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). broken on systems where `/bin/sh` is not bash (e.g. Ubuntu/dash): the old backticks + `&>` check always reported the branch as existing, so checkout failed on the first run. Found by the new idempotency e2e test in CI. -- Rubygem GHA workflow bug that prevented tagged releases/pre-releases (x2) ### Removed @@ -59,9 +53,38 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). stages, the `profile::pupmod::gitlab_ci` class (its templates were already gone), the `role::pupmod_gitlabci_only` role, and the `gitlab` gem + +## [2023-08-03] (previously Unreleased) + +### Added + +- New task, `generate_reference_md` + - Generates up-to-date `REFERENCE.md` + - If changed: stages and commits to git IMMEDIATELY +- New task and plan, `release_pupmods` + - Clone, tag, and push GitHub release for each repo in the repolist +- New GHA PR tests workflow override for pupmod simp/simp + - Parallelizes spec tests so they don't take three hours to run + +### Fixed + +- Rubygem GHA workflow bug that prevented tagged releases/pre-releases (x2) + +### Removed + - Removed `puppet-lint-empty_string-check` from pupmod Gemfiles so they can install simp-rake-helpers 5.20.0 +## [2023-04-17] (previously Unreleased) + +### Added + +- New GHA workflow, `add_new_issue_to_triage_project.yml` + +### Changed + +- Update GHA ruby tag deploy workflows to use `$GITHUB_OUTPUT`, Ruby 2.7 + ## [issue_3] - 2023-03-27 ### Added @@ -464,4 +487,3 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [SIMP-10392]: https://github.com/op-ct/puppetsync/compare/SIMP-10580...SIMP-10392 [SIMP-10633]: https://github.com/op-ct/puppetsync/compare/SIMP-10392...SIMP-10633 [issue_3]: https://github.com/op-ct/puppetsync/compare/SIMP-10633...issue_3 -[Unreleased]: https://github.com/op-ct/puppetsync/compare/issue_3...HEAD diff --git a/rakelib/keep_a_changelog.rake b/rakelib/keep_a_changelog.rake deleted file mode 100644 index 6d48ee5..0000000 --- a/rakelib/keep_a_changelog.rake +++ /dev/null @@ -1,89 +0,0 @@ - -# FIXME: only needed with this weird setup -$:.push *(Dir[File.expand_path('.gems/gems/*/lib')]) - - -class KeepAChangelogTools - - NEW_UNRELEASED_MARKUP=<<~TEXT - ## [Unreleased] - - ### Added - - ### Changed - - ### Fixed - - ### Removed - TEXT - - def initialize( file='CHANGELOG.md' ) - @file = file - end - - # - # - # Supported cases: - # - [x] Common: existing `## [Unreleased]` header + reflinks with `/compare/` - # - [x] Change [Unreleased] link to `[]` - # - [x] Add `[]: ` reflink with `/compare/...` - # - [x] Add new `[Unreleased]:` reflink with compare starting from `` - # - [ ] First release - # - [ ] Missing Unreleased reflink - # - # Additional cases: - # - [ ] `` reflink already released (fail w/error) - def release(tag_name, include_todays_date) - lines = File.open(@file,'r').readlines - - # Supported case: Common - header_idx = lines.index{|x| x =~ /^#+ \[Unreleased\]/ } - fail "ERROR: No [Unreleased] header to release!" unless header_idx - lines[header_idx].sub!(/Unreleased/, tag_name) - - if include_todays_date - require 'date' - lines[header_idx].sub!(/$/, " - #{DateTime.now.strftime('%Y-%m-%d')}") - end - - reflink_idx = lines.index{|x| x =~ %r{^\[Unreleased\]: .*/compare/.*\.\.\.} } - if reflink_idx - unrel_reflink_txt = lines[reflink_idx].dup - lines.delete_at(reflink_idx) - lines.insert( reflink_idx, unrel_reflink_txt.sub(%r{[^/]+...HEAD$}, "#{tag_name}...HEAD")) - puts "Updated `[Unreleased]` reflink to start tracking from `[#{tag_name}]`" - lines.insert( reflink_idx, unrel_reflink_txt.sub('Unreleased',tag_name).sub(/HEAD$/, tag_name)) - puts "Changed `[Unreleased]` section + reflink to `[#{tag_name}]`" - lines.insert(header_idx, "\n\n\n") - end - File.open(@file,'w'){|f| f.puts lines.join } - puts "Rewrote #{@file} with new content" - end - -end - - -namespace 'keep-a-changelog' do - - desc <<~DESC - Release a new Keep-a-changelog version of the CHANGELOG - - :tag_name => name of git tag for relese - :create_git_tag => (default: 'no') When 'yes', also create the git tag - specified in `:tag_name` - :timestamp => (default: 'yes') When 'yes', append today's date to - the release header in `YYYY-mm-dd` format - - DESC - task 'bump', [:tag_name, :create_git_tag, :timestamp] do |t,args| - args.with_defaults( - :create_git_tag => 'no', - :timestamp => 'yes' - ) - create_git_tag = args[:create_git_tag] =~ /^(yes|true)$/i - include_todays_date = args[:timestamp] !~ /^(no|false)$/i - - kacl_tools = KeepAChangelogTools.new - kacl_tools.release(args[:tag_name], include_todays_date) - end -end