Skip to content

v0.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 18 Jul 22:56

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; --missing fills
    gaps), dbdump (render the DB to a packaging manifest), initdb, and
    compact (collapse an append-log DB to one record per live path).
  • Dump formats: rpmspecfiles (RPM %files lines with %attr/%dir and a
    meta.rpmprefix) and debian (install + permissions artifacts). The
    format registry supports multi-artifact formats.
  • Pluggable file-DB backends behind one DbProvider interface: jsonl
    (append-only JSON Lines, the default), yaml (append-only YAML), and sqlite
    (a real SQLite store, upserted in place). Every command behaves identically
    across all three. The backend is inferred from the --db suffix
    (.jsonl/.ndjson, .yaml/.yml, .db/.sqlite/.sqlite3); --db-format
    / PKGFORGE_DB_FORMAT overrides it, and reading auto-detects a file's actual
    format. register_provider() lets a third-party package add its own backend;
    DbProvider, open_db, and register_provider are 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 (safe data filter where
    supported); bsdtar is 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 mode as an octal permission string; two sentinels
    (- = OS default, -- = resolve from disk) defer a field to the staged file.
  • Hardlink install uses os.link for portability across Python 3.9–3.13
    (Path.link_to was removed in 3.12; Path.hardlink_to only exists from 3.10).

Full Changelog: https://github.com/jose-pr/pkgforge/commits/v0.1.0