Skip to main content

automation for creation of releases

Project description

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:
    • 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)

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

disperse-0.0.5.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

disperse-0.0.5-py3-none-any.whl (22.8 kB view details)

Uploaded Python 3

File details

Details for the file disperse-0.0.5.tar.gz.

File metadata

  • Download URL: disperse-0.0.5.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.8

File hashes

Hashes for disperse-0.0.5.tar.gz
Algorithm Hash digest
SHA256 77fa378964c4677884b270af46daeffcc607cbb01479b52126fa7a6929be91f5
MD5 1b987c678129998f018aa13116b7d263
BLAKE2b-256 5b4b776fb14505805bdc2220934ad1e123de4bb9e4f6c87fdea7d6cadbdaeba4

See more details on using hashes here.

File details

Details for the file disperse-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: disperse-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 22.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.8

File hashes

Hashes for disperse-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 f219fbd8bee2d598c26803dbd267f0a1fe9d5219ccf391f5012489db62f61e79
MD5 79e5d2e81f446f9b5a40549d956d5540
BLAKE2b-256 84c614d71d1ccb52631fb3547b7f01c18c8e33388b75c457f02c3fff7b533510

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page