From 7775c6d9745cc50f173c1c2860e85366414f3a49 Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Thu, 11 Dec 2025 09:04:17 +0100 Subject: [PATCH] Refine packaging layout and Arch build paths * Move Arch-specific ignore rules into `packaging/arch/.gitignore` and simplify top-level `.gitignore`/`.dockerignore`. * Update Arch `PKGBUILD` to sync from the project root and drop `packaging/` from the installed tree. * Fix OS-specific `package.sh` helpers to resolve the new `packaging/*` locations correctly for Arch, Debian/Ubuntu, Fedora, and CentOS. --- .dockerignore | 6 +- .gitignore | 2 - packaging/arch/.gitignore | 6 ++ packaging/arch/PKGBUILD | 12 +++- .../{fedora => arch}/package-manager.install | 0 packaging/arch/src/source/PKGBUILD | 68 +++++++++++++++++++ .../arch/src/source/package-manager.install | 11 +++ scripts/installation/arch/package.sh | 2 +- scripts/installation/centos/package.sh | 2 +- scripts/installation/debian/package.sh | 2 +- scripts/installation/fedora/package.sh | 2 +- scripts/installation/ubuntu/package.sh | 2 +- 12 files changed, 101 insertions(+), 14 deletions(-) create mode 100644 packaging/arch/.gitignore rename packaging/{fedora => arch}/package-manager.install (100%) create mode 100644 packaging/arch/src/source/PKGBUILD create mode 100644 packaging/arch/src/source/package-manager.install diff --git a/.dockerignore b/.dockerignore index 1bdbd68..3455b5f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -25,7 +25,5 @@ venv/ .DS_Store Thumbs.db -# Arch pkg artifacts -*.pkg.tar.* -*.log -packaging/arch/package-manager-* \ No newline at end of file +# Logs +*.log \ No newline at end of file diff --git a/.gitignore b/.gitignore index c35a250..18e905c 100644 --- a/.gitignore +++ b/.gitignore @@ -14,8 +14,6 @@ venv/ dist/ build/* *.egg-info/ -pkg -src/source/ package-manager-* # Editor files diff --git a/packaging/arch/.gitignore b/packaging/arch/.gitignore new file mode 100644 index 0000000..eb8e40a --- /dev/null +++ b/packaging/arch/.gitignore @@ -0,0 +1,6 @@ +# Arch pkg artifacts +*.pkg.tar.* +*.log +package-manager-* +src/ +pkg/ \ No newline at end of file diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD index f3e1e25..c016c41 100644 --- a/packaging/arch/PKGBUILD +++ b/packaging/arch/PKGBUILD @@ -15,7 +15,7 @@ makedepends=('rsync') install=${pkgname}.install # Local source checkout — avoids the tarball requirement. -# This assumes you build the package from inside the main project repository. +# We build from the project root (two levels above packaging/arch/). source=() sha256sums=() @@ -24,12 +24,17 @@ _srcdir_name="source" prepare() { mkdir -p "$srcdir/$_srcdir_name" + + local project_root + project_root="$(cd "$startdir/../.." && pwd)" + rsync -a \ --exclude=".git" \ --exclude=".github" \ --exclude="pkg" \ --exclude="srcpkg" \ - "$startdir/" "$srcdir/$_srcdir_name/" + --exclude="packaging" \ + "$project_root/" "$srcdir/$_srcdir_name/" } build() { @@ -62,7 +67,8 @@ package() { "$pkgdir/usr/lib/package-manager/PKGBUILD" \ "$pkgdir/usr/lib/package-manager/Dockerfile" \ "$pkgdir/usr/lib/package-manager/debian" \ + "$pkgdir/usr/lib/package-manager/packaging" \ "$pkgdir/usr/lib/package-manager/.gitignore" \ "$pkgdir/usr/lib/package-manager/__pycache__" \ - "$pkgdir/usr/lib/package-manager/.gitkeep" + "$pkgdir/usr/lib/package-manager/.gitkeep" || true } diff --git a/packaging/fedora/package-manager.install b/packaging/arch/package-manager.install similarity index 100% rename from packaging/fedora/package-manager.install rename to packaging/arch/package-manager.install diff --git a/packaging/arch/src/source/PKGBUILD b/packaging/arch/src/source/PKGBUILD new file mode 100644 index 0000000..f3e1e25 --- /dev/null +++ b/packaging/arch/src/source/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Kevin Veen-Birkenbach + +pkgname=package-manager +pkgver=0.9.1 +pkgrel=1 +pkgdesc="Local-flake wrapper for Kevin's package-manager (Nix-based)." +arch=('any') +url="https://github.com/kevinveenbirkenbach/package-manager" +license=('MIT') + +# Nix is the only runtime dependency; Python is provided by the Nix closure. +depends=('nix') +makedepends=('rsync') + +install=${pkgname}.install + +# Local source checkout — avoids the tarball requirement. +# This assumes you build the package from inside the main project repository. +source=() +sha256sums=() + +# Local source directory name under $srcdir +_srcdir_name="source" + +prepare() { + mkdir -p "$srcdir/$_srcdir_name" + rsync -a \ + --exclude=".git" \ + --exclude=".github" \ + --exclude="pkg" \ + --exclude="srcpkg" \ + "$startdir/" "$srcdir/$_srcdir_name/" +} + +build() { + cd "$srcdir/$_srcdir_name" + : +} + +package() { + cd "$srcdir/$_srcdir_name" + + # Install the wrapper into /usr/bin + install -Dm0755 "scripts/pkgmgr-wrapper.sh" \ + "$pkgdir/usr/bin/pkgmgr" + + # Install Nix init helper + install -Dm0755 "scripts/init-nix.sh" \ + "$pkgdir/usr/lib/package-manager/init-nix.sh" + + # Install the full repository into /usr/lib/package-manager + mkdir -p "$pkgdir/usr/lib/package-manager" + + # Copy entire project tree from our local source checkout + cp -a . "$pkgdir/usr/lib/package-manager/" + + # Remove packaging-only and development artefacts from the installed tree + rm -rf \ + "$pkgdir/usr/lib/package-manager/.git" \ + "$pkgdir/usr/lib/package-manager/.github" \ + "$pkgdir/usr/lib/package-manager/tests" \ + "$pkgdir/usr/lib/package-manager/PKGBUILD" \ + "$pkgdir/usr/lib/package-manager/Dockerfile" \ + "$pkgdir/usr/lib/package-manager/debian" \ + "$pkgdir/usr/lib/package-manager/.gitignore" \ + "$pkgdir/usr/lib/package-manager/__pycache__" \ + "$pkgdir/usr/lib/package-manager/.gitkeep" +} diff --git a/packaging/arch/src/source/package-manager.install b/packaging/arch/src/source/package-manager.install new file mode 100644 index 0000000..0bdff27 --- /dev/null +++ b/packaging/arch/src/source/package-manager.install @@ -0,0 +1,11 @@ +post_install() { + /usr/lib/package-manager/init-nix.sh || true +} + +post_upgrade() { + /usr/lib/package-manager/init-nix.sh || true +} + +post_remove() { + echo ">>> package-manager removed. Nix itself was not removed." +} diff --git a/scripts/installation/arch/package.sh b/scripts/installation/arch/package.sh index 96e526d..3a902b3 100755 --- a/scripts/installation/arch/package.sh +++ b/scripts/installation/arch/package.sh @@ -4,7 +4,7 @@ set -euo pipefail echo "[arch/package] Building Arch package (makepkg --nodeps)..." SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" PKG_DIR="${PROJECT_ROOT}/packaging/arch" if [[ ! -f "${PKG_DIR}/PKGBUILD" ]]; then diff --git a/scripts/installation/centos/package.sh b/scripts/installation/centos/package.sh index 41ab893..4e3f05a 100755 --- a/scripts/installation/centos/package.sh +++ b/scripts/installation/centos/package.sh @@ -5,7 +5,7 @@ echo "[centos/package] Setting up rpmbuild directories..." mkdir -p /root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" SPEC_PATH="${PROJECT_ROOT}/packaging/fedora/package-manager.spec" if [[ ! -f "${SPEC_PATH}" ]]; then diff --git a/scripts/installation/debian/package.sh b/scripts/installation/debian/package.sh index 60939f3..26d07a3 100755 --- a/scripts/installation/debian/package.sh +++ b/scripts/installation/debian/package.sh @@ -4,7 +4,7 @@ set -euo pipefail echo "[debian/package] Building Debian package..." SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" BUILD_ROOT="/tmp/package-manager-debian-build" rm -rf "${BUILD_ROOT}" diff --git a/scripts/installation/fedora/package.sh b/scripts/installation/fedora/package.sh index 33abe1c..f56aa44 100755 --- a/scripts/installation/fedora/package.sh +++ b/scripts/installation/fedora/package.sh @@ -5,7 +5,7 @@ echo "[fedora/package] Setting up rpmbuild directories..." mkdir -p /root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" SPEC_PATH="${PROJECT_ROOT}/packaging/fedora/package-manager.spec" if [[ ! -f "${SPEC_PATH}" ]]; then diff --git a/scripts/installation/ubuntu/package.sh b/scripts/installation/ubuntu/package.sh index bd0a531..2fbb909 100755 --- a/scripts/installation/ubuntu/package.sh +++ b/scripts/installation/ubuntu/package.sh @@ -4,7 +4,7 @@ set -euo pipefail echo "[ubuntu/package] Building Ubuntu (Debian-style) package..." SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" BUILD_ROOT="/tmp/package-manager-ubuntu-build" rm -rf "${BUILD_ROOT}"