Skip to main content

Template-driven package recipe updater powered by nvchecker

Project description

pkgpulse

pkgpulse is a template-driven package recipe updater with a broad scope:

  • one TOML config file
  • nvchecker Python API for update detection
  • Jinja2 templates with user-defined template and output paths
  • actions as plugins, with git, webhook, and exec at 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 an exec action
  • examples/config/pkgpulse-webhook-action.example.toml: webhook example for downstream triggers
  • examples/config/pkgpulse-git-action.example.toml: commit example with a git action
  • examples/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 context
  • check: latest nvchecker result, including version, old_version, changed, url, revision, gitref
  • paths: project root, template path, output path
  • context: the raw [targets.context] mapping
  • now: current UTC timestamp

The keys from [targets.context] are also merged into the top-level template namespace.

Action Types

  • exec
  • webhook
  • git

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" and use_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 check
  • pkgpulse render
  • pkgpulse diff
  • pkgpulse validate
  • pkgpulse 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.

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

pkgpulse-0.1.7.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pkgpulse-0.1.7-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file pkgpulse-0.1.7.tar.gz.

File metadata

  • Download URL: pkgpulse-0.1.7.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for pkgpulse-0.1.7.tar.gz
Algorithm Hash digest
SHA256 4105b1a00afc5eb6d46418fb5050cbd2d04f9ef77d89a61f5f3db5c452d2a2d7
MD5 5bafd43e88a484fc5f8536a64f0125f3
BLAKE2b-256 f2ae27b2eae827db2ed4db2eef2d9997ebf8f3b633ddfbf6e95461d422798e21

See more details on using hashes here.

File details

Details for the file pkgpulse-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: pkgpulse-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 17.2 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for pkgpulse-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 997e5852f682427789323fcc2a9d89dbc76f0682297a4e9b4230335beef91b59
MD5 34be48ec977d79e9de1918cceda5154b
BLAKE2b-256 7099ffb248935b7d12d325f421ff5d6a834615b9d40050d2b18f1564e3d74361

See more details on using hashes here.

Supported by

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