Add data/skill/SKILL.md in the agent-skills open format: a skill directory that agents (Claude Code, Codex, OpenCode, ...) discover and load on demand. It documents the shared option surface, the pull, chlog, build, deb, lint, put workflow and the flags that keep runs non-interactive; the command reference was generated from the live --help output of every subcommand. It lives under data/ so a later module can embed it and ship it with the binary, for example a 'pkh skill' installer writing it into the agent skill directories.
6.6 KiB
name, description
| name | description |
|---|---|
| pkh | Drive pkh, a Debian/Ubuntu packaging helper: pull source packages, generate changelog entries, build .dsc/.deb, lint, and upload to a PPA. Use it whenever the task touches Debian or Ubuntu packaging: patching an existing package, preparing an SRU, backport or NMU, scaffolding a new .deb, rebuilding for a PPA, or uploading a source package. Trigger on "update the changelog", "package this", or a bare package name, even when the user never mentions Debian. |
pkh
pkh wraps the Debian packaging toolchain (dch, dpkg-buildpackage,
sbuild, dpkg-source, quilt, lintian, PPA uploads) in one CLI.
The subcommands share one set of option names, so -s always targets
the series and --ppa always names the PPA. Each step also does more
than the raw tool it replaces: pull fetches the orig tarball with the
source, chlog commits the entry it writes, deb sets up a chroot and
installs the build dependencies.
Check the install with pkh --version. Each command lists its flags
with pkh <command> --help, so check there instead of guessing. pkh
shells out to host tools (git, dpkg-dev, quilt, mmdebstrap, lintian,
pristine-tar, schroot, ...). Install the ones your workflow uses, or
use the classic snap, which carries them.
Shared options
| Option | Meaning |
|---|---|
-d, --dist <dist> |
Target distribution, debian or ubuntu |
-s, --series <series> |
Target series, for example resolute or noble |
-v, --version <version> |
Target package version |
-a, --arch <arch> |
Target architecture, for example amd64 or riscv64 |
-p, --pocket <pocket> |
Distribution pocket: updates, security, proposed |
--ppa <user/ppa> |
Act on the named PPA |
Defaults come from the host vendor, its development series, and its
architecture. When the target differs, pass the flags: packaging for
Ubuntu on a Debian host needs -d ubuntu, and a series or architecture
that differs from the host needs -s or -a.
Patch an Ubuntu package
pkh pull hello # source and orig tarball; add -d ubuntu off an Ubuntu host
# edit the package, committing each patch to git
pkh chlog # generates the entry, opens it for editing, commits it
git add debian/changelog && git commit -m "d/changelog"
pkh build # source package, written next to the tree
pkh deb # binary build in a chroot with build deps installed
pkh lint # lintian plus pkh-native checks
pkh put --ppa user/hello_xxx # uploads the .changes file from the build
git push xxx user-fork # push the branch to your fork
Run pkh chlog and pkh build from the root of the source tree; they
act on the package in the current directory.
Command reference
-
pkh new [name]scaffolds a buildable source package.--langpicks the build system (rust,python,meson,cmake,autotools,go,shell,makefile);--source <PATH>packages existing sources instead.--upstream-versionand--revisionset the version.--description,--homepage,--license <SPDX>,--command,--maintainer "Name <email>", and--dependsfill in the package metadata, with the maintainer defaulting toDEBFULLNAME/DEBEMAILand then git config.--quiltand--nativechoose the source format;--orig-from release|git|path|snapshotand--orig-pathcontrol the orig tarball. The changelog starts asUNRELEASED;--releasetargets--seriesinstead.--defaultsanswers every remaining question with its default, which keeps the run non-interactive. -
pkh pull <package>fetches a source package from the archive or git.--archiveskips git.--ppa user/ppaand--repository <suite-url>pull from a PPA or an external flat repository instead.-d,-s,-v, and-ptarget an exact source. -
pkh chloggenerates the changelog entry from the commits since the last version tag, opens it for editing, and commits it.--backport,--nmu, and--rebuildapply the matching numbering scheme (3.1-1ubuntu2~24.04.1,1.0-1.1,1.0-1build1);-vsets an explicit version instead. -
pkh buildproduces the .dsc.--orig auto|always|nevercontrols whether the upload includes the orig tarball; the default,auto, includes it only when the upstream version changed. -
pkh debbuilds the binary packages in an isolated context with the build dependencies installed.--ppa(repeatable) adds dependency sources,--inject <package|.deb>preinstalls a package, and-jcaps parallel jobs.--crosscross-compiles instead of using qemu-binfmt, but most packages cannot cross-compile, so prefer qemu. Leave--modeunset unless you need a specific build context. -
pkh lint [path]runs lintian plus the pkh-native checks.--jsonemits a machine-readable report and--list-tagsprints the native tag catalog.--fail-onsets the severities that fail the run (errors by default),--suppress-tagsignores tags,--checkruns a single native check, and--info,--pedantic, and--experimentaladd detail.--repackpacks the tree fresh instead of reusing the existing build output. -
pkh put [changes]uploads a .changes file to--ppa user/ppa. With no argument it uploads the .changes from this package's last build, found next to the source tree.--forcere-uploads a file that was already uploaded. -
pkh pruneremoves build artifacts and caches. Run it with--dry-runfirst to list them.--allalso deletes the cached chroot tarballs, which take long to download again, so use it when you need the disk space.
Notes for agent runs
- Pass
-d,-s, and-awhenever the target differs from the host, so runs are reproducible. - Keep runs non-interactive. Pass explicit flags, use
pkh new --defaults, and setEDITORbeforepkh chlog(EDITOR=truekeeps the generated text). Commands may ask short questions on the terminal; flags avoid most prompts. - Pass
RUST_LOG=debugfor pkh's own logs.--verboseonpkh buildandpkh debprints raw tool output instead of the live view. - pkh writes the build artifacts (.dsc, .changes, logs) next to the
source tree.
pkh putfinds them without arguments, andpkh pruneremoves them again. - Run
pkh lintbeforepkh put. It exits nonzero when findings reach the--fail-onlevel, which defaults to errors. - pkh intercepts Ctrl+C, runs its cleanup hooks, and exits with status
130.
pkh pruneremoves anything left over.
The upstream repository is https://git.vhaudiquet.fr/vhaudiquet/pkh. Its README has longer workflow examples.