Tag Release Ansible
Bump the version in an Ansible Galaxy collection or role, tag the release, and push.
Bump the version in an Ansible Galaxy collection or role, tag the release, and push.
Note: For team repos or any repo with a CI/CD pipeline, automated versioning and publishing via a pipeline (e.g. GitHub Actions triggered on merge to main) is strongly preferred over running this command manually. Use this command for solo projects or when no pipeline is set up.
Steps:
- Detect the project type:
- If
galaxy.ymlexists, this is an Ansible collection. - If
meta/main.ymlexists but nogalaxy.yml, this is an Ansible role. - If neither exists, tell the user this does not appear to be an Ansible Galaxy project and stop.
- If
- Read the current version from
galaxy.yml(field:version) ormeta/main.yml(field:versionundergalaxy_info). - Run
git tag --sort=-version:refname | head -1to find the most recent tag. Rungit log <last-tag>..HEAD --onelineto see commits since the last tag. If no tags exist, use all commits. If there are no new commits, tell the user there is nothing to release and stop. - Determine the version bump:
majorif any commit containsBREAKING CHANGEminorif any commit is typefeatpatchfor all other changes
- Show the user the current version, the proposed new version, the bump reason, and the list of commits that will be included.
- Ask the user to confirm before proceeding.
- On confirmation, update the
versionfield ingalaxy.ymlormeta/main.ymlto the new version. - Stage the changed file:
git add galaxy.ymlorgit add meta/main.yml. - If
CHANGELOG.mdexists, regenerate the## Unreleasedsection using the same rules as the/changelogcommand, rename it to## <new-version>, and stageCHANGELOG.mdwithgit add CHANGELOG.md. - Commit the version bump:
git commit -m "chore(release): <new-version>". - Create and push the tag:
git tag <new-version> && git push && git push origin <new-version>. - Confirm the tag was pushed and print the tag name and a reminder to import the new version on Ansible Galaxy if not using an automated import webhook.
$ARGUMENTS