Changelog
Changelog
All notable changes to this project are documented here. The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Unreleased
0.1.0 - 2026-07-18
First release. pkgforge stages files into a build root, records their intended install metadata in a file DB, and renders that DB into RPM/Debian packaging manifests. Built on the duho declarative CLI framework; Python 3.9+, Linux runtime.
Added
- Commands:
install(stage a source and record its entry — files, directories, symlinks, decompression, hardlinks,--exclude,--chown,--remove-source),scan(walk a tree and record entries;--missingfills gaps),dbdump(render the DB to a packaging manifest),initdb, andcompact(collapse an append-log DB to one record per live path). - Dump formats:
rpmspecfiles(RPM%fileslines with%attr/%dirand ameta.rpmprefix) anddebian(install+permissionsartifacts). The format registry supports multi-artifact formats. - Pluggable file-DB backends behind one
DbProviderinterface:jsonl(append-only JSON Lines, the default),yaml(append-only YAML), andsqlite(a real SQLite store, upserted in place). Every command behaves identically across all three. The backend is inferred from the--dbsuffix (.jsonl/.ndjson,.yaml/.yml,.db/.sqlite/.sqlite3);--db-format/PKGFORGE_DB_FORMAToverrides it, and reading auto-detects a file's actual format.register_provider()lets a third-party package add its own backend;DbProvider,open_db, andregister_providerare exported from the package. - Environment-driven configuration for unattended builds (
PKGFORGE_ROOT,PKGFORGE_DB,PKGFORGE_DB_FORMAT),--version, and shell completion. - Tar-family archives extract via stdlib
tarfile(safedatafilter where supported);bsdtaris only a fallback for other formats (e.g..iso). - Documentation site (mkdocs-material) with a guide + API reference, a
benchmarks/runner, an end-to-end example, and CI (test.yml/release.yml).
Notes
- File-DB entries store
modeas an octal permission string; two sentinels (-= OS default,--= resolve from disk) defer a field to the staged file. - Hardlink install uses
os.linkfor portability across Python 3.9–3.13 (Path.link_towas removed in 3.12;Path.hardlink_toonly exists from 3.10).