From 854f59a95a6721c7aa2fa9fc14763388df04df1f Mon Sep 17 00:00:00 2001 From: Josh Knapp Date: Sat, 28 Feb 2026 20:43:14 +0000 Subject: [PATCH] Fix Docker/CI: reproducible Windows build, Dockerfile cleanup - Fix Windows CI build to use npm ci instead of deleting lockfile and running npm install, ensuring reproducible cross-platform builds - Remove duplicate uv/ruff root installations from Dockerfile (only need the claude user installations) - Make AWS CLI install architecture-aware using uname -m for arm64 compatibility - Remove unused SiblingContainers component (dead code) Co-Authored-By: Claude Opus 4.6 --- .gitea/workflows/build-app.yml | 3 +- .../containers/SiblingContainers.tsx | 67 ------------------- container/Dockerfile | 13 ++-- 3 files changed, 8 insertions(+), 75 deletions(-) delete mode 100644 app/src/components/containers/SiblingContainers.tsx diff --git a/.gitea/workflows/build-app.yml b/.gitea/workflows/build-app.yml index 100a59d..2ded9f3 100644 --- a/.gitea/workflows/build-app.yml +++ b/.gitea/workflows/build-app.yml @@ -192,8 +192,7 @@ jobs: run: | set "PATH=%USERPROFILE%\.cargo\bin;C:\Program Files\nodejs;%PATH%" if exist node_modules rmdir /s /q node_modules - if exist package-lock.json del package-lock.json - npm install + npm ci - name: Build frontend working-directory: ./app diff --git a/app/src/components/containers/SiblingContainers.tsx b/app/src/components/containers/SiblingContainers.tsx deleted file mode 100644 index f6d1bee..0000000 --- a/app/src/components/containers/SiblingContainers.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { useState, useEffect, useCallback } from "react"; -import { listSiblingContainers } from "../../lib/tauri-commands"; -import type { SiblingContainer } from "../../lib/types"; - -export default function SiblingContainers() { - const [containers, setContainers] = useState([]); - const [loading, setLoading] = useState(false); - - const refresh = useCallback(async () => { - setLoading(true); - try { - const list = await listSiblingContainers(); - setContainers(list); - } catch { - // Silently fail - } finally { - setLoading(false); - } - }, []); - - useEffect(() => { - refresh(); - }, [refresh]); - - return ( -
-
-

Sibling Containers

- -
- {containers.length === 0 ? ( -

No other containers found.

- ) : ( -
- {containers.map((c) => ( -
-
- - - {c.names?.[0]?.replace(/^\//, "") ?? c.id.slice(0, 12)} - -
-
- {c.image} — {c.status} -
-
- ))} -
- )} -
- ); -} diff --git a/container/Dockerfile b/container/Dockerfile index aa2ff9a..9803456 100644 --- a/container/Dockerfile +++ b/container/Dockerfile @@ -50,9 +50,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ python3 \ python3-pip \ python3-venv \ - && rm -rf /var/lib/apt/lists/* \ - && curl -LsSf https://astral.sh/uv/install.sh | sh \ - && curl -LsSf https://astral.sh/ruff/install.sh | sh + && rm -rf /var/lib/apt/lists/* # ── Docker CLI (not daemon) ───────────────────────────────────────────────── RUN install -m 0755 -d /etc/apt/keyrings \ @@ -65,8 +63,11 @@ RUN install -m 0755 -d /etc/apt/keyrings \ && rm -rf /var/lib/apt/lists/* # ── AWS CLI v2 ─────────────────────────────────────────────────────────────── -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \ - && unzip awscliv2.zip && ./aws/install && rm -rf awscliv2.zip aws +RUN ARCH=$(uname -m) && \ + curl "https://awscli.amazonaws.com/awscli-exe-linux-${ARCH}.zip" -o "awscliv2.zip" && \ + unzip -q awscliv2.zip && \ + ./aws/install && \ + rm -rf awscliv2.zip aws # ── Non-root user with passwordless sudo ───────────────────────────────────── RUN useradd -m -s /bin/bash -u 1000 claude \ @@ -83,7 +84,7 @@ WORKDIR /home/claude RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y ENV PATH="/home/claude/.cargo/bin:${PATH}" -# Add uv/ruff to PATH (installed to /root by default, reinstall for claude user) +# Install uv and ruff for claude user RUN curl -LsSf https://astral.sh/uv/install.sh | sh \ && curl -LsSf https://astral.sh/ruff/install.sh | sh ENV PATH="/home/claude/.local/bin:/home/claude/.cargo/bin:${PATH}"