Release Process
Releases are driven by two GitHub Actions workflows: version_bump.yml prepares the release, and build.yml publishes it once the GitHub release is published.
Only maintainers with permission to run workflows and publish releases on the repository can cut a release.
Versioning
Meltano follows semantic versioning. Versions are managed by commitizen, configured in the [tool.commitizen] section of pyproject.toml, and tags have the format vMAJOR.MINOR.PATCH (with a prerelease suffix for pre-releases).
The changelog and the automatic version increment are derived from the titles of merged pull requests, so they must follow the conventional commit syntax.
The following files are updated with the new version:
pyproject.tomldocs/package.json.github/ISSUE_TEMPLATE/bug.yml
Cutting a release
- Make sure
mainis green and contains everything you want in the release. - Run the Version bump workflow from
mainwith the following inputs:- bump:
auto(default, inferred from commit types), or forcepatch,minorormajor. - prerelease:
nonefor a stable release, oralpha,betaorrcfor a pre-release.
- bump:
- The workflow bumps the version, refreshes
uv.lockanddocs/package-lock.json, and opens a pull request titledchore: Release vX.Y.Zfrom therelease/vX.Y.Zbranch, labeledrelease. For stable releases it also creates a draft GitHub release with the changelog fragment as its body. - Review the pull request, in particular the generated changelog, and merge it.
- Review the draft release notes on the releases page, edit them if needed, and publish the release.
- Publishing the release triggers
build.yml, which:- checks that the release tag matches the package version in
pyproject.toml, - builds the wheel and sdist,
- builds and pushes the Docker images to Docker Hub, and
- publishes the package to PyPI through trusted publishing, in the
publishingenvironment.
- checks that the release tag matches the package version in
- Verify that the new version is available on PyPI and Docker Hub.
Pre-releases
Pre-releases (alpha, beta, rc) skip changelog generation and do not create a draft GitHub release. Create the release manually from the release tag if one is needed, and mark it as a pre-release so it is not picked as the latest Docker tag.
Docker image refresh
build.yml also runs weekly (Sundays at 04:45 UTC) and rebuilds and pushes the Docker images for the latest stable release, so they pick up base image and OS security updates. It does not publish to PyPI.
Troubleshooting
Release tag ('vX') and package version ('vY') do not match!
: The release was published from a tag that doesn't match pyproject.toml. Make sure the release pull request was merged before publishing the release, and that the draft release tag is v followed by the version in pyproject.toml.