From 404ca7d7df4c9bf5a51524abe3c7ae7a056bc237 Mon Sep 17 00:00:00 2001 From: Diego Solis Franco Date: Wed, 18 Mar 2026 16:36:30 +0100 Subject: [PATCH 1/4] feat: add base container dockerfile --- images/base/.dockerignore | 4 ++++ images/base/Dockerfile | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 images/base/.dockerignore create mode 100644 images/base/Dockerfile diff --git a/images/base/.dockerignore b/images/base/.dockerignore new file mode 100644 index 0000000..050fa4c --- /dev/null +++ b/images/base/.dockerignore @@ -0,0 +1,4 @@ +.git +.github +*.md +LICENSE diff --git a/images/base/Dockerfile b/images/base/Dockerfile new file mode 100644 index 0000000..0e658db --- /dev/null +++ b/images/base/Dockerfile @@ -0,0 +1,33 @@ +FROM ubuntu:24.04 + +ARG USERNAME=vscode +ARG USER_UID=1000 +ARG USER_GID=$USER_UID + +ENV DEBIAN_FRONTEND=noninteractive +ENV LANG=en_US.UTF-8 +ENV LC_ALL=en_US.UTF-8 + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + apt-transport-https \ + apt-utils \ + ca-certificates \ + curl \ + gnupg2 \ + locales \ + lsb-release \ + sudo \ + tzdata \ + && locale-gen en_US.UTF-8 \ + && apt-get autoremove -y \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN groupadd --gid $USER_GID $USERNAME \ + && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \ + && echo "$USERNAME ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/$USERNAME \ + && chmod 0440 /etc/sudoers.d/$USERNAME + +USER $USERNAME +WORKDIR /home/$USERNAME From e98341fdf9389d2a09f21e40ad121ffc941b2600 Mon Sep 17 00:00:00 2001 From: Diego Solis Franco Date: Wed, 18 Mar 2026 16:40:08 +0100 Subject: [PATCH 2/4] feat: add workflow for container image --- .github/workflows/build-base-image.yaml | 55 +++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 .github/workflows/build-base-image.yaml diff --git a/.github/workflows/build-base-image.yaml b/.github/workflows/build-base-image.yaml new file mode 100644 index 0000000..77ca9e5 --- /dev/null +++ b/.github/workflows/build-base-image.yaml @@ -0,0 +1,55 @@ +name: "Build and publish base container image" + +on: + push: + branches: [main] + paths: + - "images/base/**" + workflow_dispatch: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }}/base + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GHCR + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Generate image metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=latest + type=raw,value={{date 'YYYYMMDD'}} + type=sha,prefix= + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: images/base + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max From b356ef2daecf0cc322d2d49fe202d8e94c3e51b5 Mon Sep 17 00:00:00 2001 From: Diego Solis Franco Date: Wed, 18 Mar 2026 16:40:34 +0100 Subject: [PATCH 3/4] chore: add .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7d0ade7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.cursor + From 64b1e06716cdfeb781f76451ee2a80c4380538db Mon Sep 17 00:00:00 2001 From: Diego Solis Franco Date: Fri, 20 Mar 2026 15:48:32 +0100 Subject: [PATCH 4/4] fix: remove default ubuntu user before creating vscode user Ubuntu 24.04 ships with a default `ubuntu` user at UID/GID 1000, causing `groupadd` to fail with exit code 4. Remove it first. Co-Authored-By: Claude Opus 4.6 --- images/base/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/images/base/Dockerfile b/images/base/Dockerfile index 0e658db..2bbccde 100644 --- a/images/base/Dockerfile +++ b/images/base/Dockerfile @@ -24,7 +24,8 @@ RUN apt-get update \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* -RUN groupadd --gid $USER_GID $USERNAME \ +RUN userdel -r ubuntu 2>/dev/null; groupdel ubuntu 2>/dev/null; \ + groupadd --gid $USER_GID $USERNAME \ && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \ && echo "$USERNAME ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/$USERNAME \ && chmod 0440 /etc/sudoers.d/$USERNAME