42fcfc2dfa91091b3b199c147144451635b322cf
Extend the metadata writers to binary-only uploads and wire them into the 'pkh deb' flow: - build/binary.rs generates <pkg>_<ver>_<arch>.buildinfo/.changes through any Context: debian/files consumption, encounter-order Architecture accumulation (sorted in .buildinfo like dpkg-genbuildinfo), sorted Binary lists, dpkg-formatted Description lines with udeb suffixes, Installed-Build-Depends closure over the context status DB, and binNMU handling (Source: pkg (prev), Binary-Only-Changes, previous .dsc redistribution); - artifact digests are computed inside the context via coreutils (md5sum/sha1sum/sha256sum/stat) so chrooted/remote trees work; - deb/local.rs runs the generation after 'rules binary', exports SOURCE_DATE_EPOCH from the changelog (reproducibility), and resolves vendor/profiles inside the context; deb/mod.rs retrieves the new artifacts alongside the debs; - reusable helpers added: FilesList::parse/render, parse_changelog_entry_from_str, parse_previous_version_from_str, installed_build_depends_from_content. Differential gate: same tree built with real 'dpkg-buildpackage -b' and with the pkh flow; .changes/.buildinfo compared field-by-field modulo machine-dependent fields, artifact checksums included.
pkh
pkh is a packaging helper for Debian/Ubuntu packages.
Usage and features
Basic concepts
pkh aims at wrapping the different debian tools and workflows
(git, git-ubuntu, pull-debian-sources, pull-lp-sources, pull-ppa-sources,
dch, dpkg-buildpackage, sbuild, dpkg-source, quilt, ...) into one tool, that
would have the same interface for everything, while being smarter at integrating all workflows.
Thus, pkh uses similar options for all subcommands (with very few command-specific options):
Options:
-s, --series <series> Target package distribution series
-d, --dist <dist> Target package distribution (debian, ubuntu)
-v, --version <version> Target package version
-a, --arch <arch> Target architecture (amd64, arm64, riscv64, ...)
-p, --pocket <pocket> Target distribution pocket (updates, security, proposed, ...)
--ppa <ppa> Do the action in/for a specific PPA
Commands and workflows include:
Commands:
pull Pull a source package from the archive or git
chlog Auto-generate changelog entry, editing it, committing it afterwards
build Build the source package (into a .dsc)
deb Build the source package into binary package (.deb)
help Print this message or the help of the given subcommand(s)
Examples
A typical workflow to patch an Ubuntu package hello on the development release could be:
# Obtain the package source
git ubuntu clone hello
cd hello
# Apply the patch to the package
...
dpkg-source --commit
# Increment version number
dch
# Test that the patch builds
git ubuntu export-orig
dpkg-buildpackage -S -I -i -nc -d
sbuild --dist resolute --arch amd64 ../hello_xxx.dsc
# Upload the package to a ppa
dput ppa:user/hello_xxx ../hello_xxx_source.changes
# Commit the changes to git
git add debian/patches/xxx.patch
git commit -m "Applied patch xxx"
git add debian/changelog
git commit -m "changelog"
git checkout -b xxx
git push xxx user-fork
That is a lot of different tools and operations. With pkh, the same workflow:
# Obtain the package source (and orig tarball)
pkh pull hello # needs -d ubuntu if you are not running Ubuntu
# Apply the patch to the package
...
pkh commit -m "Applied patch xxx"
pkh chlog
# Test that the package builds
pkh build
pkh deb
# Upload the package to a ppa
pkh put --ppa user/hello_xxx
# Push previously commited changes
git push xxx user-fork
Roadmap: features needed for 1.0
Basically, wrapping the basic debian workflows. Missing features:
pkh pull- Obtain package sources from git
- Obtain package sources from the archive (fallback)
- Obtain package source from PPA (--ppa)
- Obtain a specific version of the package
- Fetch the correct git branch for series on Ubuntu
- Try to fetch the correct git branch for series on Debian, or fallback to the archive
pkh chlog- Auto-generate changelog entry
- Extra flags: backport, non-maintainer upload, no change rebuild, ...
- Commit changelog entry
pkh build- Build the source package
pkh deb- Build the binary package
- Build for a specific architecture
- Three build modes:
- Build locally (discouraged)
- Build using unshare chroot, with binary emulation (default)
- Cross-compilation
- Async build
pkh status- Show build status
pkh put- Upload the source package to a PPA
- Upload the source package to the archive
pkh commit- Commit the changes to git
pkh lint- Lint the package
pkh test- Run autopkgtest
- Provide options: local (discouraged), chroot, VM?, ppa
- Async test
Nice-to-have features
- 'pkh pull'
- Cache the Sources.gz files, to improve speed
- Work in an already downloaded package, to git pull and re-fetch orig tar gz
- 'pkh context'
- Select, add, remove, list contexts
- Context-scoped command execution
- Context-scoped deb and test commands
- Per-architecture contexts
- Per-series contexts
- ssh contexts
- docker, lxc contexts?
- context push, context pop: context stack
Languages
Rust
100%