I've been adopting more at $work and it's been a good experience overall, even if it's a manual step it is intentional.
One thing we recently got added in Nuke (c# equivalent to mage), was working in a monorepo:
- loop through all unreleased changes
- for each project with unreleased changes
changie bump auto --project projandchangie mergeand thengit tag -a"$(changie latest --project proj)" -F".changes/$(changie latest --project proj)style command IF tag doesn't already exist. - Then this means all the tags are regularly checked and it's idempotent. New tag aka release == when unrelease tag detected all prefixed.
- Else if already released, it checks that artifact registry or in your case github release also exists and resolves missing by releasing, else skipping if not.
This has been a promising process for us to use a monorepo format with multiple packages independently released, but all based on detected unreleased changes.
The negative/compromise you make with this is you don't create a release from the GUI, but require a PR with change log entry. It's been an acceptable compromise to simplify things for us I think.
Just thought I'd add that in case you have some other tricks you recently used to better manage than this.
Simplifying releases while making them intentional is a balancing act for sure.