name: upgrade-changelog description: "Generates CHANGELOG.md entries for upgrade versions found in upgrades/software/ by parsing init.go and upgrade.go"
Instructions
Generate changelog entries in upgrades/CHANGELOG.md for any upgrade version under upgrades/software/ that doesn't already have an entry.
Steps
Find semver directories — list all directories under
upgrades/software/whose names matchv<major>.<minor>.<patch>(e.g.,v2.0.0,v1.0.0).Read
upgrades/CHANGELOG.md— identify which versions already have entries by scanning for##### vX.Y.Zheadings. If a version already has a heading, skip it entirely.For each new version (no existing heading), gather data from two files:
3a. Parse
upgrades/software/<version>/init.goFind all
utypes.RegisterMigration(...)calls. Each call has the form:utypes.RegisterMigration(moduleName, version, handlerFn)moduleNameis a Go constant (e.g.,dv1.ModuleName). Resolve it:- Find the import alias (e.g.,
dv1 "pkg.akt.dev/go/node/deployment/v1") - Search the imported package for
ModuleNameconstant definition to get the actual string value
- Find the import alias (e.g.,
versionis auint64— this is the from version. The to version isversion + 1.- Record each migration as:
moduleName version -> version+1
3b. Parse
upgrades/software/<version>/upgrade.goFind the
StoreLoader()method. It returns a*storetypes.StoreUpgradesstruct with optional fields:Added: []string{...}— new storesRenamed: []storetypes.StoreRename{...}— renamed storesDeleted: []string{...}— removed stores
If
StoreLoader()returnsnil, there are no store changes.For each store key constant (e.g.,
epochstypes.StoreKey,ttypes.ModuleName):- Find the import alias in the file
- Search the imported package for the constant definition to get the actual string value
Insert the new entry in
upgrades/CHANGELOG.mdimmediately after the line:Add new upgrades after this line based on the template abovefollowed by
-----.Use this format (newest entries go first, right after the delimiter):
##### vX.Y.Z ###### Description - Stores - added - `storeName`: brief description if available - renamed - `oldName` -> `newName` - deleted - `storeName`: brief description if available - Migrations - moduleName `from -> to`Omission rules (match existing CHANGELOG style):
- Omit the entire
Storessection if there are no added, renamed, or deleted stores - Omit
added/renamed/deletedsubsections individually if empty - Omit the entire
Migrationssection if there are no migrations - Always include the
###### Descriptionheading (leave it for the user to fill in)
- Omit the entire
Report results — list each version processed and what was added. For skipped versions (already in CHANGELOG), mention they were skipped.
Important notes
- Store key constants may be named
StoreKeyorModuleName— both are used as store identifiers. Resolve whichever constant appears in the code. - When resolving Go constants from external packages, search under the Go module cache or use
go docif needed. The packages typically follow the patternpkg.akt.dev/go/node/<module>/<version>. - If a constant cannot be resolved, use the raw Go expression as a placeholder (e.g.,
`epochstypes.StoreKey`) and warn the user. - Multiple versions may need entries — process them all in one run, inserting newest first after the delimiter.