Skip to main content

agent-publish (Python)

CI Spec License

Idiomatic Python port of @p-vbordei/agent-publish (npm v0.1.2). One-shot multi-registry release publisher for OSS packages. Reads a strict publish.yaml, runs prechecks (clean tree, tag exists, version match), invokes npm publish and gh release create, and emits a canonical (RFC 8785 JCS) JSON release manifest.

What's in the box

  • load_publish_config(path) — strict YAML schema for publish.yaml
  • precheck(cwd, version, *, from_tag=None) — clean tree, tag exists, version match
  • build_manifest(...) + canonical_manifest_bytes(...) — JCS-canonical release manifest
  • npm_publish(...) / github_release(...) — registry adapters
  • CLI: agent-publish manifest | publish [--dry-run] [--from-tag vX.Y.Z]
  • SpawnFn callable injection — tests stub npm / gh without real network

Install

pip install agent-publish

(Python 3.10+.)

Quickstart

# In a tagged repo with package.json + CHANGELOG.md + publish.yaml:
agent-publish manifest               # preview the JSON release manifest
agent-publish publish --dry-run      # full flow, no network writes
agent-publish publish                # real: npm + GH release + manifest

Library example

The runnable version is examples/quickstart.py. It builds a manifest in memory, stubs npm via SpawnFn so nothing hits the network, and prints the canonical JCS bytes:

$ python examples/quickstart.py
{"registries":[{"name":"npm","package":"agent-id","provenance":true,"sha256":"sha512-Ki1ScEwgQ8K0bV2W9k7CWnHFq2x8K3T8sZ3X7K0Ld5g=","url":"https://www.npmjs.com/package/agent-id/v/0.1.0","version":"0.1.0"}],"repo":"p-vbordei/agent-id","schema":"agent-publish/release-manifest/v1","tagged_at":"2025-01-01T00:00:00.000Z","version":"0.1.0"}

Keys are RFC 8785-sorted, no whitespace — byte-identical to the TS and Rust ports on the same input.

How it relates

Repo Language Status
agent-publish TypeScript / Bun (reference) @p-vbordei/agent-publish v0.1.2
agent-publish-py Python (this repo) v0.1.0
agent-publish-rs Rust v0.1.0

All three pass the same C1–C5 conformance clauses on the same fixtures.

Conformance

uv sync --extra dev
uv run pytest -v
  • C1 — manifest JCS bytes are deterministic and byte-identical across ports.
  • C2 — publish --dry-run performs zero network writes (verified via stubbed SpawnFn).
  • C3 — partial registry failure still emits a manifest with successful results recorded; exit code 3.
  • C4 — manifest matches the v1 schema (schema, version, repo, tagged_at, registries[]).
  • C5 — publish.yaml rejects unknown keys, missing required fields, and invalid types.

Plus S1–S5 security checks (token leakage, command injection, .npmrc permissions, env scrubbing, dirty-tree guard) embedded in tests/security/.

Architecture

See docs/architecture.md for the module map, dependency choices, and the SpawnFn injection pattern.

Development

git clone https://github.com/p-vbordei/agent-publish-py
cd agent-publish-py
uv sync --extra dev
uv run pytest
uv run python examples/quickstart.py

See CONTRIBUTING.md and CHANGELOG.md.

License

Apache-2.0 — see LICENSE.

Metadata

Release files for agent-publish 0.1.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 agent-publish 0.1.0
File Size Uploaded Provenance
agent_publish-0.1.0.tar.gz 40.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for agent-publish 0.1.0
File Interpreter ABI Platform
agent_publish-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 58.0 kB

Release files / agent_publish-0.1.0.tar.gz

Download URL agent_publish-0.1.0.tar.gz
Size 40.8 kB
Tags Source
SHA-256 checksum
How to use checksums
51553c0fa27079c66d2a83f8c0b0c177534e5609c4bbc156ae24595319a9f8d5
BLAKE2b-256 checksum
How to use checksums
fb92152b0f0dc5109e33b8c453196a1cc8a0ad9d4ddf301c62ead1bbbb8ed5dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 20, 2026.

Transparency log

Release files / agent_publish-0.1.0-py3-none-any.whl

Download URL agent_publish-0.1.0-py3-none-any.whl
Size 17.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8a87ce05c3284f0873f8ba444c4c27837e3a644a83bf98c1151d77b6461f2b8c
BLAKE2b-256 checksum
How to use checksums
14d1820412b20a50aeb32e4c844cc89c75055d782b354dfde4f91724f510bcaa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 20, 2026.

Transparency log

Security for agent-publish 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for agent_publish-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 20, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

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