Skip to main content

disperse

disperse is a simple script that I use to create releases for some of the free software packages I maintain. It's meant to streamline the releasing process, reducing the human effort involved in creating a release as well as the likelihood of a brown-bag release.

It can do one or more of the following:

  • check if CI is currently passing (for supported platforms, like GitHub)
  • derive the intended new version by checking existing releases and version strings specified in project files
  • update NEWS files with the release date
  • make sure various files contain the correct version string
  • verify that the testsuite runs successfully
  • optionally only create a release if there were no changes to the repository in the last X days (useful for running in a cronjob)
  • upload to a repository site:
    • sources and universal wheels to pypi, if the project is a Python project
    • crates.io, if the project is a rust project
  • create a git tag for the new release
  • create "release" entries (on supported platforms, like GitHub)

After the release has completed, it can also update e.g. NEWS for the next release.

Disperse was previously known as "releaser".

Configuration

To a large extent, disperse will automatically figure out what needs to happen. It can discover the projects you maintain on pypi by reading ~/.pypirc for your username and enumerating them.

It can parse and modify setup.py and Cargo.toml files.

It uses a configuration file (disperse.conf) for anything that can not be autodetected, and which lives in the repository root.

For example:


   tag_format: "dulwich-%(release)s"
   news_path: "NEWS"

Basic usage

disperse has various subcommands. The core ones are:

  • release - create a new release for project in $CWD or at a specific URL
  • discover - find projects that the current user owns (e.g. on pypi) and release them if they have unreleased changes and are significant enough
  • validate - validate the disperse configuration

Running from docker

The easiest way to run disperse is to use the docker image at ghcr.io/jelmer/disperse. You'll need to make sure that appropriate SSH and PGP keys are available.

The author regularly runs disperse inside of a Kubernetes cronjob.

Future

In the future, I would like it to:

  • support more languages than just python and rust

Release files for disperse 0.0.7

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

Source distribution (sdist)

Source distribution for disperse 0.0.7
File Size Uploaded
disperse-0.0.7.tar.gz 36.6 kB Details

Built distribution (wheel)

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

Total release size: 64.8 kB

Release files / disperse-0.0.7.tar.gz

Download URL disperse-0.0.7.tar.gz
Size 36.6 kB
Tags Source
SHA-256 checksum
How to use checksums
26e66473966e91be1edb5c481f1d4870ac0098ea0909c47a3a6b94e1ee70fa0b
BLAKE2b-256 checksum
How to use checksums
2b32a5ef31e92f3065eba88f8eba73cd5d22ca5026b3ec9b82dd5ebc51c7cfc3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.5

Release files / disperse-0.0.7-py3-none-any.whl

Download URL disperse-0.0.7-py3-none-any.whl
Size 28.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
320b01c447ceda861f2e99d4bab4438ba0c4f0da9acb9e06f3c481b67b2d49d4
BLAKE2b-256 checksum
How to use checksums
1cf88e8e811f26d511b2476a1d113c779c7fcab187a4e2b3b066fafcb60ddce9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.5

Release history Release notifications | RSS feed

This release

0.0.7 This release

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

1 release file

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