Skip to main content

🗞 Publicator

A better poetry publish experience.

PyPI - Python Version PyPI PyPI - Downloads PyPI - License Application Test Suite Libraries.io dependency status for latest release

While Poetry finally brings us a sane solution for publishing and maintaining Python packages, many developers crave for a more enhanced and safer user experience. Publicator aims to offer a convenient method for publishing your everyday libraries.

Publicator has been inspired by Sindre Sorhus' excellent np package for Node.js ecosystem and graciously funded by Futurice Spice Program.

Table of Contents

Features

  • Ensures you are publishing from your release branch (main and master by default)
  • Ensures the working directory is clean and latest changes are pulled
  • Reinstalls dependencies to ensure your project works with the latest dependency tree
  • Ensures your Python version is supported by the project and its dependencies
  • Runs the tests with custom test script
  • Bumps the version in pyproject.toml and creates a Git tag based on it
  • Publishes the new version to Python Package Index or custom repository
  • Pushes commits and tags (newly & previously created) to your Git server
  • If the project is hosted on GitHub opens a prefilled GitHub Releases draft after publishing
  • Fully configurable via command-line arguments or the pyproject.toml file
  • See what will be executed with preview mode, without pushing or publishing anything remotely

Prerequisites

  • Python 3.8 or later
  • Poetry 1.1 or later
  • Git 2.11 or later

Install

Install or run directly using pipx, which manages an isolated virtual environment for you.

pipx install publicator
pipx run publicator <version>

Alternatively, add it as dependency to your Poetry project.

poetry add --dev publicator
poetry run publicator <version>

Usage

Publicator takes one command-line argument indicating the suitable version bump. It follows semantic versioning rules accurately.

# Release a new patch version (e.g. 1.0.0 -> 1.0.1)
publicator patch

# Release a new minor version (e.g. 1.0.1 -> 1.1.0)
publicator minor

# Release a new major version (e.g. 1.1.0 -> 2.0.0)
publicator major

Run publicator --help to see the full list of supported options:

$ publicator --help

Usage: publicator [OPTIONS] version

  Handles publishing a new Python package via Poetry safely and conveniently.

Arguments:
  version  can be a valid semver or one of: patch, minor, major, prepatch,
           preminor, premajor, prerelease  [required]

Options:
  -V, --version
  --repository name               Custom repository for publishing (must be
                                  specified in pyproject.toml)
  --any-branch / --no-any-branch  Allow publishing from any branch  [default:
                                  no-any-branch]
  --clean / --no-clean            Ensure you're working with the latest
                                  changes  [default: clean]
  --tag / --no-tag                Create a new tag for Git  [default: tag]
  --publish / --no-publish        Publish the package to the registry
                                  [default: publish]
  --push / --no-push              Push commits and tags to Git  [default:
                                  push]
  --test-script TEXT              Name of the test script to run under the
                                  current virtual environment  [default:
                                  pytest -x --assert=plain]
  --template TEXT                 Commit message template (`%s` will be
                                  replaced with the new version tag)
                                  [default: release: %s]
  --release-draft / --no-release-draft
                                  Opens a pre-filled GitHub release page with
                                  browser if the current project is hosted on
                                  GitHub  [default: release-draft]
  --install-completion [bash|zsh|fish|powershell|pwsh]
                                  Install completion for the specified shell.
  --show-completion [bash|zsh|fish|powershell|pwsh]
                                  Show completion for the specified shell, to
                                  copy it or customize the installation.
  --help                          Show this message and exit.

Configuration

Publicator follows the pleasantly Pythonic way of specifying the configuration within pyproject.toml file. Below are the default configuration values.

[tool.publicator]
any-branch    = false
clean         = true
publish       = true
push          = true
release-draft = true
tag           = true
template      = "release: %s"

Values passed as command-line arguments take precedence over configuration file values.

Configuration enables for more granular usage. For example, in CI/CD pipelines you might want to disable publishing the package to registry or disable creating Git tags depending on your use case.

Preview Mode (Dry-Run)

If you'd rather skip on everything and check what would be executed, you can activate a preview mode via environment variable like so:

PUBLICATOR_PREVIEW=true publicator <version>

Shell Completion

Publicator stands on the shoulders of Typer, which is a robust CLI library for Python. You can generate TAB completions for common shells such as Bash, ZSH, Fish, and Powershell.

publicator --install-completion <shell>

Contributing

See here for instructions.

Metadata

Release files for publicator 1.3.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 publicator 1.3.0
File Size Uploaded
publicator-1.3.0.tar.gz 11.0 kB Details

Built distribution (wheel)

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

Total release size: 21.1 kB

Release files / publicator-1.3.0.tar.gz

Download URL publicator-1.3.0.tar.gz
Size 11.0 kB
Tags Source
SHA-256 checksum
How to use checksums
0b126146b5307df5433c6b929d32ae2af6ecba4fa90cd65bb50d05a02dbab28b
BLAKE2b-256 checksum
How to use checksums
4034a9d4e9efe7891c556f04ba3f4d715f26b6c1c799e568a4cdaca178885126
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.2.0 CPython/3.10.6 Darwin/21.6.0

Release files / publicator-1.3.0-py3-none-any.whl

Download URL publicator-1.3.0-py3-none-any.whl
Size 10.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
97e1e6bdc553ca9a5f52602b27202e739cc4c7599a1b06a79d27d5e773e3d123
BLAKE2b-256 checksum
How to use checksums
3e22827575dbd6cd44680d637f806227bc40908945fee145f866e807768eff3e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.2.0 CPython/3.10.6 Darwin/21.6.0
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