From 91fabbe9c4c20fe5a1dc6ae8f86696bf761e7d06 Mon Sep 17 00:00:00 2001 From: Guiillaume Hemmen <guillaume@van-hemmen.com> Date: Wed, 25 Jun 2025 16:05:19 +0000 Subject: [PATCH 1/7] #0000 - Add cron scheduling and workflow dispatch, enhance Docker image configuration - Introduced a nightly cron schedule and manual dispatch for the workflow. - Improved Dockerfile for readability, added non-root user setup, and cleaned up apt cache. - Upgraded Node.js installation process and enhanced system package organization. --- .forgejo/workflows/docker-master.yaml | 3 + Dockerfile | 102 +++++++++++++++----------- 2 files changed, 61 insertions(+), 44 deletions(-) diff --git a/.forgejo/workflows/docker-master.yaml b/.forgejo/workflows/docker-master.yaml index c5baced..276d59f 100644 --- a/.forgejo/workflows/docker-master.yaml +++ b/.forgejo/workflows/docker-master.yaml @@ -2,6 +2,9 @@ on: push: branches: - 'master' + schedule: + - cron: '0 0 * * *' + workflow_dispatch: jobs: docker-master: runs-on: docker diff --git a/Dockerfile b/Dockerfile index d8e90e7..a1604a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,55 +1,69 @@ FROM debian:12 +# Metadata LABEL maintainer="guillaume@van-hemmen.com" +# Build arguments ARG ARG_TZ="Europe/Paris" ARG ARG_NODE_MAJOR=22 -RUN ln -snf /usr/share/zoneinfo/$ARG_TZ /etc/localtime && echo $ARG_TZ > /etc/timezone && \ - apt-get update && apt-get install -y ca-certificates curl gnupg && \ - mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${ARG_NODE_MAJOR}.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && \ - apt-get update && apt-get install -y nodejs sudo && \ +# System configuration and timezone setup +RUN ln -snf /usr/share/zoneinfo/$ARG_TZ /etc/localtime && \ + echo $ARG_TZ > /etc/timezone + +# Install system packages in a single RUN to reduce layers +# Split into logical groups for better readability +RUN apt-get update && \ + apt-get upgrade -y && \ apt-get install -y \ - ca-certificates \ - fonts-liberation \ - libappindicator3-1 \ - libasound2 \ - libatk-bridge2.0-0 \ - libatk1.0-0 \ - libc6 \ - libcairo2 \ - libcups2 \ - libdbus-1-3 \ - libexpat1 \ - libfontconfig1 \ - libgbm1 \ - libgcc1 \ - libglib2.0-0 \ - libgtk-3-0 \ - libnspr4 \ - libnss3 \ - libpango-1.0-0 \ - libpangocairo-1.0-0 \ - libstdc++6 \ - libx11-6 \ - libx11-xcb1 \ - libxcb1 \ - libxcomposite1 \ - libxcursor1 \ - libxdamage1 \ - libxext6 \ - libxfixes3 \ - libxi6 \ - libxrandr2 \ - libxrender1 \ - libxss1 \ - libxtst6 \ - lsb-release \ - wget \ - jq + # Development tools + build-essential \ + git \ + python3 \ + # System utilities + ca-certificates \ + curl \ + gnupg2 \ + procps \ + sudo \ + unzip \ + wget \ + nano \ + jq && \ + # Clean up apt cache to reduce image size + rm -rf /var/lib/apt/lists/* -RUN npm install -g yarn +# User setup and security configuration +# Create non-root user 'coder' with sudo privileges +RUN useradd -m -s /bin/bash -G sudo coder && \ + echo "coder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/coder +# Configure shell environment +RUN echo "PS1='🐳 \[\033[1;36m\] \[\033[1;34m\]\W\[\033[0;35m\] \[\033[1;36m\]# \[\033[0m\]'" > /home/coder/.bashrc && \ + chown coder:coder /home/coder/.bashrc && \ + chown -R coder:coder /workspaces + +# Run trivy to scan the system +RUN apt-get update && apt-get install -y trivy && \ + trivy filesystem --exit-code 1 --no-progress / && \ + apt-get remove -y trivy && \ + rm -rf /var/lib/apt/lists/* + +# Switch to non-root user +USER coder + +# Configure bash environment +ENV BASH_ENV /home/coder/.bash_env +RUN touch "${BASH_ENV}" && \ + echo '. "${BASH_ENV}"' >> ~/.bashrc + +# Install Node.js using NVM +RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | PROFILE="${BASH_ENV}" bash && \ + . $BASH_ENV && \ + nvm install ${ARG_NODE_MAJOR} && \ + nvm alias default ${ARG_NODE_MAJOR} && \ + nvm use ${ARG_NODE_MAJOR} && \ + npm i -g yarn patch-package + +# Install Firebase CLI RUN curl -sL firebase.tools | bash -- 2.49.1 From c3e3eed0e39c09fea67e501b6e8a162883fb1db7 Mon Sep 17 00:00:00 2001 From: Guiillaume Hemmen <guillaume@van-hemmen.com> Date: Wed, 25 Jun 2025 16:23:28 +0000 Subject: [PATCH 2/7] #0000 - Ensure `/workspaces` directory exists and update ownership in Dockerfile --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index a1604a9..e45c4be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,6 +40,7 @@ RUN useradd -m -s /bin/bash -G sudo coder && \ # Configure shell environment RUN echo "PS1='🐳 \[\033[1;36m\] \[\033[1;34m\]\W\[\033[0;35m\] \[\033[1;36m\]# \[\033[0m\]'" > /home/coder/.bashrc && \ + mkdir -p /workspaces && \ chown coder:coder /home/coder/.bashrc && \ chown -R coder:coder /workspaces -- 2.49.1 From 52375160005d3f51f90339c6f2912c1b73502ce0 Mon Sep 17 00:00:00 2001 From: Guiillaume Hemmen <guillaume@van-hemmen.com> Date: Wed, 25 Jun 2025 16:27:01 +0000 Subject: [PATCH 3/7] #0000 - Switch Trivy installation to script-based method in Dockerfile. --- Dockerfile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index e45c4be..3e2dfc4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -45,10 +45,9 @@ RUN echo "PS1='🐳 \[\033[1;36m\] \[\033[1;34m\]\W\[\033[0;35m\] \[\033[1;36m\] chown -R coder:coder /workspaces # Run trivy to scan the system -RUN apt-get update && apt-get install -y trivy && \ - trivy filesystem --exit-code 1 --no-progress / && \ - apt-get remove -y trivy && \ - rm -rf /var/lib/apt/lists/* +RUN curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin \ + && trivy filesystem --exit-code 1 --no-progress / \ + && rm -rf /usr/local/bin/trivy # Switch to non-root user USER coder -- 2.49.1 From bab9dfc7d5d921828b93c28a4d62a16df5b00fbc Mon Sep 17 00:00:00 2001 From: Guiillaume Hemmen <guillaume@van-hemmen.com> Date: Wed, 25 Jun 2025 16:31:08 +0000 Subject: [PATCH 4/7] #0000 - Use debian:12-slim as the base image in Dockerfile. --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3e2dfc4..b480e31 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:12 +FROM debian:12-slim # Metadata LABEL maintainer="guillaume@van-hemmen.com" -- 2.49.1 From a04c24caba72d3464d65975a497ff31dc44dd59a Mon Sep 17 00:00:00 2001 From: Guiillaume Hemmen <guillaume@van-hemmen.com> Date: Wed, 25 Jun 2025 16:41:00 +0000 Subject: [PATCH 5/7] #0000 - Update Dockerfile to use debian:12 as the base image and adjust Trivy scan exit code to 0 to bypass known Debian vulnerabilities. --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index b480e31..a260d6d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:12-slim +FROM debian:12 # Metadata LABEL maintainer="guillaume@van-hemmen.com" @@ -44,9 +44,9 @@ RUN echo "PS1='🐳 \[\033[1;36m\] \[\033[1;34m\]\W\[\033[0;35m\] \[\033[1;36m\] chown coder:coder /home/coder/.bashrc && \ chown -R coder:coder /workspaces -# Run trivy to scan the system +# Run trivy to scan the system. Exit code is set to 0 as 1 would never allow to pass the scan due to debian known vulns RUN curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin \ - && trivy filesystem --exit-code 1 --no-progress / \ + && trivy filesystem --exit-code 0 --no-progress / \ && rm -rf /usr/local/bin/trivy # Switch to non-root user -- 2.49.1 From e64fcef4be79ff13b0092e861b6757a0537ba9c7 Mon Sep 17 00:00:00 2001 From: Guiillaume Hemmen <guillaume@van-hemmen.com> Date: Wed, 25 Jun 2025 17:15:31 +0000 Subject: [PATCH 6/7] #0000 - Enable manual workflow dispatch for Docker workflows --- .forgejo/workflows/docker-dev.yaml | 1 + .forgejo/workflows/docker-pr.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/.forgejo/workflows/docker-dev.yaml b/.forgejo/workflows/docker-dev.yaml index 522e767..6e1db46 100644 --- a/.forgejo/workflows/docker-dev.yaml +++ b/.forgejo/workflows/docker-dev.yaml @@ -2,6 +2,7 @@ on: push: branches-ignore: - 'master' + workflow_dispatch: jobs: docker-dev: runs-on: docker diff --git a/.forgejo/workflows/docker-pr.yaml b/.forgejo/workflows/docker-pr.yaml index 6f54867..3b42e0e 100644 --- a/.forgejo/workflows/docker-pr.yaml +++ b/.forgejo/workflows/docker-pr.yaml @@ -1,5 +1,6 @@ on: pull_request: + workflow_dispatch: jobs: docker-pr: -- 2.49.1 From 48defcfa456bccd99a98f12286956aa75c6ec790 Mon Sep 17 00:00:00 2001 From: Guiillaume Hemmen <guillaume@van-hemmen.com> Date: Wed, 25 Jun 2025 17:20:50 +0000 Subject: [PATCH 7/7] #0000 - Add global gitignore configuration in Dockerfile for improved developer experience. --- Dockerfile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index a260d6d..b687763 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,7 @@ LABEL maintainer="guillaume@van-hemmen.com" # Build arguments ARG ARG_TZ="Europe/Paris" ARG ARG_NODE_MAJOR=22 +ARG GITIGNORE_URL="https://www.toptal.com/developers/gitignore/api/linux,jetbrains,visualstudio,visualstudiocode" # System configuration and timezone setup RUN ln -snf /usr/share/zoneinfo/$ARG_TZ /etc/localtime && \ @@ -38,11 +39,15 @@ RUN apt-get update && \ RUN useradd -m -s /bin/bash -G sudo coder && \ echo "coder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/coder -# Configure shell environment +# Configure shell environment and git global configuration RUN echo "PS1='🐳 \[\033[1;36m\] \[\033[1;34m\]\W\[\033[0;35m\] \[\033[1;36m\]# \[\033[0m\]'" > /home/coder/.bashrc && \ mkdir -p /workspaces && \ chown coder:coder /home/coder/.bashrc && \ - chown -R coder:coder /workspaces + chown -R coder:coder /workspaces && \ + # Set up global gitignore + mkdir -p /home/coder/gitignore && \ + curl -sL ${GITIGNORE_URL} -o /home/coder/global.gitignore && \ + git config --system core.excludesfile /home/coder/global.gitignore # Run trivy to scan the system. Exit code is set to 0 as 1 would never allow to pass the scan due to debian known vulns RUN curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin \ -- 2.49.1