pkgpulse
pkgpulse is a template-driven package recipe updater with a broad scope:
- one TOML config file
nvcheckerPython API for update detection- Jinja2 templates with user-defined template and output paths
- actions as plugins, with
git,webhook, andexecat the same level
It is aimed at package recipe repositories rather than one packaging format.
Install
python -m pip install pkgpulse
If you prefer uv:
uv tool install pkgpulse
Then verify the CLI is available:
pkgpulse --help
For local development, validation, and hooks in this repository, see
CONTRIBUTING.md.
Quick Start
Start from one of the example configs under examples/config/, then run:
pkgpulse check
pkgpulse diff
pkgpulse render
The default config file is pkgpulse.toml.
Reusable CI Templates
Published automation templates are available for common forge CI systems:
- GitHub:
poesty/pkgpulse/.github/actions/pkgpulse@main - Forgejo:
https://codeberg.org/poesty/pkgpulse/.forgejo/actions/pkgpulse@main - GitLab:
codeberg.org/poesty/pkgpulse/pkgpulse@main
Outer workflow examples for GitHub Actions, GitLab CI, and Forgejo Actions live
under examples/workflows/. They show how to schedule and wrap pkgpulse
without inlining the full setup in every pipeline file.
Configuration
[state]
oldver = ".pkgpulse/oldver.json"
newver = ".pkgpulse/newver.json"
[nvchecker]
max_concurrency = 8
tries = 2
[[targets]]
name = "nvchecker-release"
template = "templates/example.recipe.j2"
output = "build/nvchecker-release.txt"
[targets.check]
source = "github"
github = "lilydjwg/nvchecker"
use_max_tag = true
[targets.context]
package_name = "nvchecker"
summary = "Example package rendered by pkgpulse"
homepage = "https://github.com/lilydjwg/nvchecker"
archive_base = "https://github.com/lilydjwg/nvchecker/archive/refs/tags"
[[targets.actions]]
type = "exec"
when = "changed"
command = ["printf", "rendered %s -> %s\\n", "{{ job.name }}", "{{ paths.output }}"]
Additional example configs live under examples/:
examples/config/pkgpulse.example.toml: render example with anexecactionexamples/config/pkgpulse-webhook-action.example.toml: webhook example for downstream triggersexamples/config/pkgpulse-git-action.example.toml: commit example with agitactionexamples/config/pkgpulse-strategies.example.toml: multi-target example showing release and latest-commit packaging side by side
Example templates live under examples/templates/.
Template Context
Every target render gets these objects:
job: target metadata, template path, output path, and user contextcheck: latest nvchecker result, includingversion,old_version,changed,url,revision,gitrefpaths: project root, template path, output pathcontext: the raw[targets.context]mappingnow: current UTC timestamp
The keys from [targets.context] are also merged into the top-level template namespace.
Action Types
execwebhookgit
Each action supports when = "always" | "changed" | "updated".
Multi-Strategy Layout
pkgpulse models this by defining multiple targets:
- one target can follow tags directly from the upstream git remote
- another target can follow the latest upstream commit with
source = "git"anduse_commit = true
See examples/config/pkgpulse-strategies.example.toml for a concrete example
that renders both a release spec and a git snapshot spec from the same upstream project.
Commands
pkgpulse checkpkgpulse renderpkgpulse diffpkgpulse validatepkgpulse run
pkgpulse run --dry-run renders in memory and prints diffs without writing files or executing actions.
Workflow Examples
Repository automation examples for GitHub Actions, GitLab CI, and Forgejo
Actions live under examples/workflows/.
They are optional outer workflow examples around the published reusable
templates listed above.
Metadata
Release files for pkgpulse 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pkgpulse-0.1.7.tar.gz | 12.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pkgpulse-0.1.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.1 kB
Release files / pkgpulse-0.1.7.tar.gz
| Download URL | pkgpulse-0.1.7.tar.gz |
|---|---|
| Size | 12.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4105b1a00afc5eb6d46418fb5050cbd2d04f9ef77d89a61f5f3db5c452d2a2d7
|
|
BLAKE2b-256 checksum How to use checksums |
f2ae27b2eae827db2ed4db2eef2d9997ebf8f3b633ddfbf6e95461d422798e21
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.9 {"installer":{"name":"uv","version":"0.11.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pkgpulse-0.1.7-py3-none-any.whl
| Download URL | pkgpulse-0.1.7-py3-none-any.whl |
|---|---|
| Size | 17.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
997e5852f682427789323fcc2a9d89dbc76f0682297a4e9b4230335beef91b59
|
|
BLAKE2b-256 checksum How to use checksums |
7099ffb248935b7d12d325f421ff5d6a834615b9d40050d2b18f1564e3d74361
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.9 {"installer":{"name":"uv","version":"0.11.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|