Releasing social-auth-core¶
This guide describes the social-auth-core release process implemented by
its release workflow. Other components may use different workflows; check
their repository documentation before releasing them.
Preparing a release¶
Update
project.versioninpyproject.tomlusing the project’s Semantic Versioning policy.Review the
Unreleasedentries inCHANGELOG.mdand include any missing changes. Move the release’s entries into a section matching the package version, with a release link and date. Leave an emptyUnreleasedsection above it. For example:## [Unreleased] ## [7.2.0](https://github.com/python-social-auth/social-core/releases/tag/7.2.0) - 2026-11-12 ### Added - Describe the changes included in this release.
Commit the preparation using Conventional Commits, for example
chore: release 7.2.0, and open a pull request againstmaster. Complete the pull request template and request review from the maintainers.Merge the reviewed release pull request after its checks pass.
Pushing the release tag¶
Create the version tag on the merged release commit and push that tag to the
upstream repository. For example, with origin pointing to the upstream
python-social-auth/social-core repository:
git switch master
git pull --ff-only origin master
git tag -a 7.2.0 <release-commit-sha> -m "Release 7.2.0"
git push origin 7.2.0
Replace the example version and <release-commit-sha> with the intended
version and merged release commit. Verify that the tagged commit contains the
matching package version and a nonempty changelog section. Existing core tags
use the bare version number; the workflow also accepts a leading v when
looking up changelog notes.
Push the tag first. Do not create or publish a release through GitHub’s
Draft a new release interface to start this process. The workflow runs on
tag pushes, and creating a release in advance conflicts with its release
creation step. Publishing an empty immutable release also prevents CI from
adding the distribution assets afterward.
What CI publishes¶
The workflow builds a wheel and source distribution, rebuilds a wheel from the source distribution, and checks installation, metadata, and distribution contents. Once these checks pass, two independent jobs publish the artifacts:
The PyPI job publishes the validated distributions from the upstream repository using trusted publishing through the
pypienvironment, with attestations enabled.The GitHub job extracts the tagged version’s notes from
CHANGELOG.md, creates a draft release with the wheel and source distribution attached, and then publishes the draft. Uploading all assets before publication supports immutable releases.
Monitor the Release workflow runs and verify that both publishing jobs complete. Check the version and distributions on PyPI and the notes and assets on GitHub Releases. Success on one service does not imply success on the other.
Handling a failed publication¶
Inspect the failed job and the publication state on both services before retrying. The GitHub job refuses to overwrite any existing release for the tag, including a draft. If it left an incomplete draft, inspect and remove that draft before retrying the failed GitHub job.
A published immutable release cannot have its distribution assets replaced. Asset corrections require a new version and tag. Do not move the published tag or try to replace its assets. When retrying a failed job, account for the other publishing job having already succeeded.