diff --git a/.dockerignore b/.dockerignore index 4e9917d..9a7d26e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -24,3 +24,7 @@ venv/ .idea/ .DS_Store Thumbs.db + +# Arch pkg artifacts +*.pkg.tar.* +*.log \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 86f4b40..bdf752e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,20 +13,21 @@ ENV NIX_CONFIG="experimental-features = nix-command flakes" # 2) Unprivileged user for building Arch packages RUN useradd -m builder + +# 3) Build-Stage (optional): einmal aus /build bauen, wenn du magst WORKDIR /build - -# 3) Only PKGBUILD rein, um dein Wrapper-Paket zu bauen COPY . . - RUN chown -R builder:builder /build \ - && su builder -c "makepkg -s --noconfirm --clean" \ + && su builder -c "cd /build && rm -f package-manager-*.pkg.tar.* && makepkg -sf --noconfirm --clean" \ && pacman -U --noconfirm package-manager-*.pkg.tar.* \ && rm -rf /build -# 4) Projekt-Quellen für Tests in den Container kopieren +# 4) Runtime-Workingdir für das gemountete Repo WORKDIR /src -COPY . . -# pkgmgr (Arch-Package) ist installiert und ruft nix run auf. -ENTRYPOINT ["pkgmgr"] +# 5) Entry-Script für „always build from /src“ +COPY scripts/docker-entry-dev.sh /usr/local/bin/docker-entry-dev.sh +RUN chmod +x /usr/local/bin/docker-entry-dev.sh + +ENTRYPOINT ["/usr/local/bin/docker-entry-dev.sh"] CMD ["--help"] diff --git a/Makefile b/Makefile index 1ea6625..8b97c2b 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,20 @@ test: build --workdir /src \ --entrypoint bash \ package-manager-test \ - -c 'git config --global --add safe.directory /src && nix develop .#default --no-write-lock-file -c python3 -m unittest discover -s tests -p "test_*.py"' + -c '\ + set -e; \ + echo "Remove existing Arch package-manager (if any)..."; \ + pacman -Rns --noconfirm package-manager || true; \ + echo "Rebuild Arch package from /src..."; \ + rm -f /src/package-manager-*.pkg.tar.* || true; \ + chown -R builder:builder /src; \ + su builder -c "cd /src && makepkg -sf --noconfirm --clean"; \ + pacman -U --noconfirm /src/package-manager-*.pkg.tar.*; \ + echo "Run tests inside Nix devShell..."; \ + git config --global --add safe.directory /src && \ + nix develop .#default --no-write-lock-file -c \ + python3 -m unittest discover -s tests -p \"test_*.py\" \ + ' install: @if [ -n "$$IN_NIX_SHELL" ]; then \ diff --git a/package-manager-0.1.1-1-any.pkg.tar.zst b/package-manager-0.1.1-1-any.pkg.tar.zst new file mode 100644 index 0000000..8025ace Binary files /dev/null and b/package-manager-0.1.1-1-any.pkg.tar.zst differ diff --git a/scripts/docker-entry-dev.sh b/scripts/docker-entry-dev.sh new file mode 100644 index 0000000..e0c9dc0 --- /dev/null +++ b/scripts/docker-entry-dev.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "[entry] Using /src as working tree for package-manager..." +cd /src + +# Optional: altes Paket entfernen +echo "[entry] Removing existing 'package-manager' Arch package (if installed)..." +pacman -Rns --noconfirm package-manager || true + +# Build-Owner richtig setzen (falls /src vom Host kommt) +echo "[entry] Fixing ownership of /src for user 'builder'..." +chown -R builder:builder /src + +echo "[entry] Rebuilding Arch package from /src as user 'builder'..." +su builder -c "cd /src && makepkg -s --noconfirm --clean" + +echo "[entry] Installing freshly built package-manager-*.pkg.tar.*..." +pacman -U --noconfirm /src/package-manager-*.pkg.tar.* + +echo "[entry] Handing off to pkgmgr with args: $*" +exec pkgmgr "$@"