Skip to main content

releasing

Release helpers for projects that publish from a Git-tracked source tree.

Important: This tooling is built for foundata's release process(es). You are welcome to use it but Pull Requests to adapt our toolset to different release policies or processes are out of scope.

Components and tools:

  • release: command that covers the error-prone steps around a release: preparing repository Markdown for package indexes, and, as the package grows, version sites, changelogs, artifacts, tags and post-publish verification. Each step is one subcommand; the order of steps stays in each project's own procedure.


⭐ Found this useful? Support open-source and star this project:

GitHub repository


Installation

Add it to a development dependency group of the project that releases:

[dependency-groups]
dev = ["releasing"]

Run it without installing anything into the project:

uvx --from git+https://github.com/foundata/releasing release --help

Python 3.11 to 3.14 are supported. The minimum is 3.11 rather than the 3.12 baseline of the foundata Python guide because the package is a development dependency of projects that target Debian 12, which ships Python 3.11.

Commands

Project-aware commands read the release declaration, one table in pyproject.toml or releasing.toml. Markdown preparation and explicit-version artifact operations also work independently; see The release declaration.

  • release config check: validate the declaration and every file it names, and print the effective values.
  • release version check and release version bump: every declared version site, the lockfile, lockstep pins and the tag agree, or move them all to a new version. See Version sites.
  • release changelog check, show and release: Keep a Changelog sections, dates and links are consistent, one section is printed for a release description, or the unreleased entries become a dated section. See Changelog sections.
  • release build: export a committed revision, prepare the index Markdown inside that export, build, check and record a manifest. See Building from an exported revision.
  • release tag create, check and delete: a guarded annotated tag, and a deletion that stays legal only while no release exists. See Release tags.
  • release status: report which steps of a release are done, pending or broken. See Where a release stands.
  • release push: publish the release branch and its tag together, after re-checking both. See Publishing the branch and the tag.
  • release publish: upload exactly the files a manifest names, refusing any other file beside them. See Uploading what was validated.
  • release forge release-create: create the forge's release entry from the changelog and the manifest. See The forge's release entry.
  • release verify: the index serves the validated files, an isolated install reports the version and the forge reports the tag as latest. See Verifying a published release.
  • release artifacts check, manifest and verify: distributions carry the right version, a description without relative links and no litter; their digests are recorded and later compared. See Artifacts.
  • release markdown prepare: rewrite repository-relative link and image destinations to absolute URLs without reformatting the document. See Preparing Markdown for package indexes.

The end-to-end order for a Python project is in Releasing a Python package.

Output

Stdout is the product, stderr is the story. One rule for every command, so output can be redirected without knowing which command is in hand.

Stdout carries what the command produced and nothing else: the tag it created, the files it built, the changelog section, the manifest JSON, the report. A check produces nothing there and answers with its exit status.

Stderr carries what happened on the way: what is being done, every command that changed something, and every request to a forge or an index.

$ release tag create 2.2.0 --manifest ../dist-2.2.0/artifacts.json
» the manifest records artifacts built from 41db3420c2d6
» the working tree is clean
» exporting 41db3420c2d6 into a temporary directory
$ git -C /home/example/project archive --format=tar 41db3420c2d6...
» checking version sites, lockfile, pins and changelog in the export
» GET https://api.github.com/repos/foundata/releasing/releases/tags/v2.2.0 → 404
$ git -C /home/example/project tag -a v2.2.0 41db3420c2d6 -m 'version 2.2.0'
v2.2.0

--quiet (-q), accepted before or after the command, keeps the product and drops the story. It never suppresses an error. 2>/dev/null does the same, and 2>&1 | tee release.log keeps both together.

Every command that changes something accepts --dry-run: it reports what it would do, marks the commands it would run, and changes nothing. A command that only reads does not offer the flag.

Every command exits with 0 on success, 1 when a check or operation fails and 2 on invalid usage.

Releasing this package

releasing releases itself with its own commands. The procedure is in the development guide; the recipe it follows is Releasing a Python package. The declaration is the [tool.releasing] table in pyproject.toml.

Development

See the development guide for the checks, the test layout and the corpus maintenance.

Copyright (c) 2026 foundata GmbH (https://foundata.com)

This project is licensed under the GNU General Public License v3.0 or later (SPDX-License-Identifier: GPL-3.0-or-later), see LICENSES/GPL-3.0-or-later.txt for the full text.

The REUSE.toml file provides detailed licensing and copyright information in a human- and machine-readable format. This includes parts that may be subject to different licensing or usage terms, such as third-party components. The repository conforms to the REUSE specification. You can use reuse spdx to create a SPDX software bill of materials (SBOM).

REUSE status

Author information

This project was created and is maintained by foundata.

Release files for releasing 3.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for releasing 3.0.0
File Size Uploaded
releasing-3.0.0.tar.gz 69.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for releasing 3.0.0
File Interpreter ABI Platform
releasing-3.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 148.5 kB

Release files / releasing-3.0.0.tar.gz

Download URL releasing-3.0.0.tar.gz
Size 69.4 kB
Tags Source
SHA-256 checksum
How to use checksums
5c11ab2b4844354dc329def5b5cd83a015fb1de8c584dea8a86a4fa165364dec
BLAKE2b-256 checksum
How to use checksums
080babcb0dc61638cca8bdf57b87d2c545290e6545ff87dc28f947d5d64916f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / releasing-3.0.0-py3-none-any.whl

Download URL releasing-3.0.0-py3-none-any.whl
Size 79.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
970b14711aa0805196b263609b88411e8e0cd9bced9916f274194b585a912704
BLAKE2b-256 checksum
How to use checksums
1329f751359b0595b39750bf2d5e496f1f3a4d78ebb51dde892a5b1d448d1f03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

4.2.0

2 release files

4.1.0

2 release files

4.0.0

2 release files

This release

3.0.0 This release

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page