Improve Docker-based build & test pipeline for pkgmgr
- Add .dockerignore rules to prevent Arch package artifacts from entering the build context - Rework Dockerfile to remove stale package artifacts before makepkg and use a dev entry script - Introduce docker-entry-dev.sh to always rebuild pkgmgr from the mounted /src tree - Update Makefile 'test' target to rebuild pkgmgr inside the container before running tests - Fix predictable makepkg failures caused by residual *.pkg.tar.* files Conversation reference: https://chatgpt.com/share/6935e6e8-f3fc-800f-a4e9-7537114f13d1
This commit is contained in:
@@ -24,3 +24,7 @@ venv/
|
|||||||
.idea/
|
.idea/
|
||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
|
||||||
|
# Arch pkg artifacts
|
||||||
|
*.pkg.tar.*
|
||||||
|
*.log
|
||||||
17
Dockerfile
17
Dockerfile
@@ -13,20 +13,21 @@ ENV NIX_CONFIG="experimental-features = nix-command flakes"
|
|||||||
|
|
||||||
# 2) Unprivileged user for building Arch packages
|
# 2) Unprivileged user for building Arch packages
|
||||||
RUN useradd -m builder
|
RUN useradd -m builder
|
||||||
|
|
||||||
|
# 3) Build-Stage (optional): einmal aus /build bauen, wenn du magst
|
||||||
WORKDIR /build
|
WORKDIR /build
|
||||||
|
|
||||||
# 3) Only PKGBUILD rein, um dein Wrapper-Paket zu bauen
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN chown -R builder:builder /build \
|
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.* \
|
&& pacman -U --noconfirm package-manager-*.pkg.tar.* \
|
||||||
&& rm -rf /build
|
&& rm -rf /build
|
||||||
|
|
||||||
# 4) Projekt-Quellen für Tests in den Container kopieren
|
# 4) Runtime-Workingdir für das gemountete Repo
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
COPY . .
|
|
||||||
|
|
||||||
# pkgmgr (Arch-Package) ist installiert und ruft nix run auf.
|
# 5) Entry-Script für „always build from /src“
|
||||||
ENTRYPOINT ["pkgmgr"]
|
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"]
|
CMD ["--help"]
|
||||||
|
|||||||
15
Makefile
15
Makefile
@@ -34,7 +34,20 @@ test: build
|
|||||||
--workdir /src \
|
--workdir /src \
|
||||||
--entrypoint bash \
|
--entrypoint bash \
|
||||||
package-manager-test \
|
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:
|
install:
|
||||||
@if [ -n "$$IN_NIX_SHELL" ]; then \
|
@if [ -n "$$IN_NIX_SHELL" ]; then \
|
||||||
|
|||||||
BIN
package-manager-0.1.1-1-any.pkg.tar.zst
Normal file
BIN
package-manager-0.1.1-1-any.pkg.tar.zst
Normal file
Binary file not shown.
22
scripts/docker-entry-dev.sh
Normal file
22
scripts/docker-entry-dev.sh
Normal file
@@ -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 "$@"
|
||||||
Reference in New Issue
Block a user