From 32a8c8e162446a7098e482de9c826ecd6a441fc6 Mon Sep 17 00:00:00 2001 From: SynthLuvr <131367121+SynthLuvr@users.noreply.github.com> Date: Wed, 26 Nov 2025 15:51:35 +0100 Subject: [PATCH 1/3] Updated node 22 --- node-22/node-base.Dockerfile | 12 ++++++------ node-22/node-dev.Dockerfile | 18 +++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/node-22/node-base.Dockerfile b/node-22/node-base.Dockerfile index 492d0c9..228eb40 100644 --- a/node-22/node-base.Dockerfile +++ b/node-22/node-base.Dockerfile @@ -10,14 +10,14 @@ RUN apt-get update -qq && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* -ADD https://nodejs.org/dist/v22.18.0/node-v22.18.0-linux-x64.tar.xz . +ADD https://nodejs.org/dist/v22.21.1/node-v22.21.1-linux-x64.tar.xz . RUN mkdir -p /usr/local/lib/nodejs && \ - tar -xJf node-v22.18.0-linux-x64.tar.xz && \ - mv node-v22.18.0-linux-x64 /usr/local/lib/nodejs && \ - rm node-v22.18.0-linux-x64.tar.xz + tar -xJf node-v22.21.1-linux-x64.tar.xz && \ + mv node-v22.21.1-linux-x64 /usr/local/lib/nodejs && \ + rm node-v22.21.1-linux-x64.tar.xz -ENV PATH=$PATH:/usr/local/lib/nodejs/node-v22.18.0-linux-x64/bin +ENV PATH=$PATH:/usr/local/lib/nodejs/node-v22.21.1-linux-x64/bin FROM ubuntu:24.04 COPY --from=build /tini /sbin/tini @@ -31,7 +31,7 @@ RUN useradd --create-home --shell /bin/bash noddy && \ chown -R noddy:noddy /app COPY --from=build /usr/local/lib/nodejs /usr/local/lib/nodejs -ENV PATH=/app/node_modules/.bin:/usr/local/lib/nodejs/node-v22.18.0-linux-x64/bin:$PATH +ENV PATH=/app/node_modules/.bin:/usr/local/lib/nodejs/node-v22.21.1-linux-x64/bin:$PATH USER noddy ENV NODE_ENV=production diff --git a/node-22/node-dev.Dockerfile b/node-22/node-dev.Dockerfile index 5328541..c4facaf 100644 --- a/node-22/node-dev.Dockerfile +++ b/node-22/node-dev.Dockerfile @@ -10,15 +10,15 @@ RUN apt-get update -qq && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* -ADD https://nodejs.org/dist/v22.18.0/node-v22.18.0-linux-x64.tar.xz . +ADD https://nodejs.org/dist/v22.21.1/node-v22.21.1-linux-x64.tar.xz . RUN mkdir -p /usr/local/lib/nodejs && \ - tar -xJf node-v22.18.0-linux-x64.tar.xz && \ - mv node-v22.18.0-linux-x64 /usr/local/lib/nodejs && \ - rm node-v22.18.0-linux-x64.tar.xz + tar -xJf node-v22.21.1-linux-x64.tar.xz && \ + mv node-v22.21.1-linux-x64 /usr/local/lib/nodejs && \ + rm node-v22.21.1-linux-x64.tar.xz -ENV PATH=$PATH:/usr/local/lib/nodejs/node-v22.18.0-linux-x64/bin -RUN npm install -g corepack@0.34.0 && \ +ENV PATH=$PATH:/usr/local/lib/nodejs/node-v22.21.1-linux-x64/bin +RUN npm install -g corepack@0.34.5 && \ npm config set update-notifier false FROM ubuntu:24.04 @@ -34,11 +34,11 @@ RUN useradd --create-home --shell /bin/bash noddy && \ COPY --from=build /usr/local/lib/nodejs /usr/local/lib/nodejs ENV PNPM_HOME=/home/noddy/.local/share/pnpm -ENV PATH=$PNPM_HOME:/app/node_modules/.bin:/usr/local/lib/nodejs/node-v22.18.0-linux-x64/bin:$PATH +ENV PATH=$PNPM_HOME:/app/node_modules/.bin:/usr/local/lib/nodejs/node-v22.21.1-linux-x64/bin:$PATH # hadolint ignore=DL3008 RUN corepack enable && \ - corepack prepare pnpm@10.14.0 --activate && \ + corepack prepare pnpm@10.23.0 --activate && \ apt-get update -qq && \ apt-get install -y --no-install-recommends \ python3.12 \ @@ -48,7 +48,7 @@ RUN corepack enable && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ ln -s /usr/bin/python3.12 /usr/bin/python && \ - npm install -g node-gyp@11.3.0 turbo@2.5.5 + npm install -g node-gyp@12.1.0 turbo@2.6.1 USER noddy ENV NODE_ENV=development From c469bd204f7bb712ebbb8ea173bb48de373d215f Mon Sep 17 00:00:00 2001 From: SynthLuvr <131367121+SynthLuvr@users.noreply.github.com> Date: Wed, 26 Nov 2025 15:56:21 +0100 Subject: [PATCH 2/3] Created image for node 24 --- .github/workflows/node-24.yml | 50 ++++ Makefile | 10 + examples/node-24/.dockerignore | 30 +++ examples/node-24/.gitignore | 1 + examples/node-24/Dockerfile | 11 + examples/node-24/entrypoint.ts | 5 + examples/node-24/package.json | 16 ++ examples/node-24/pnpm-lock.yaml | 343 +++++++++++++++++++++++++++ examples/node-24/pnpm-workspace.yaml | 2 + examples/node-24/tsconfig.json | 15 ++ node-22/node-dev.Dockerfile | 12 +- node-24/node-base.Dockerfile | 38 +++ node-24/node-dev.Dockerfile | 54 +++++ 13 files changed, 581 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/node-24.yml create mode 100644 examples/node-24/.dockerignore create mode 100644 examples/node-24/.gitignore create mode 100644 examples/node-24/Dockerfile create mode 100644 examples/node-24/entrypoint.ts create mode 100644 examples/node-24/package.json create mode 100644 examples/node-24/pnpm-lock.yaml create mode 100644 examples/node-24/pnpm-workspace.yaml create mode 100644 examples/node-24/tsconfig.json create mode 100644 node-24/node-base.Dockerfile create mode 100644 node-24/node-dev.Dockerfile diff --git a/.github/workflows/node-24.yml b/.github/workflows/node-24.yml new file mode 100644 index 0000000..55cb286 --- /dev/null +++ b/.github/workflows/node-24.yml @@ -0,0 +1,50 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + +jobs: + test-node-24: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Check node-24/node-base.Dockerfile + uses: hadolint/hadolint-action@v3.1.0 + with: + dockerfile: node-24/node-base.Dockerfile + + - name: Check node-24/node-dev.Dockerfile + uses: hadolint/hadolint-action@v3.1.0 + with: + dockerfile: node-24/node-dev.Dockerfile + + - name: Check examples/node-24/Dockerfile + uses: hadolint/hadolint-action@v3.1.0 + with: + dockerfile: examples/node-24/Dockerfile + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y build-essential wait-for-it + + - name: Build containers + run: make node-24 + + - name: Run node-24-example container + run: | + docker run -d --name node-24-example -p 3000:3000 node-24-example + + - name: Wait for node-24-example container + run: wait-for-it localhost:3000 + + - name: Check node-24-example endpoint is working + run: | + for i in {1..10}; do curl http://localhost:3000/ && break || sleep 1; done + + - name: Stop node-24-example container + run: docker stop node-24-example diff --git a/Makefile b/Makefile index c39d88b..52f4d84 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ all: node-22 python node-22: build-node-22-base build-node-22-dev build-node-22-example +node-24: build-node-24-base build-node-24-dev build-node-24-example python: build-python-base build-python-dev build-python-example build-node-22-base: @@ -11,6 +12,15 @@ build-node-22-dev: build-node-22-example: docker build -t node-22-example examples/node-22 +build-node-24-base: + docker build -t quay.io/mynth/node:24-base -f node-24/node-base.Dockerfile node-24 + +build-node-24-dev: + docker build -t quay.io/mynth/node:24-dev -f node-24/node-dev.Dockerfile node-24 + +build-node-24-example: + docker build -t node-24-example examples/node-24 + build-python-base: docker build -t quay.io/mynth/python:base -f python/python-base.Dockerfile python diff --git a/examples/node-24/.dockerignore b/examples/node-24/.dockerignore new file mode 100644 index 0000000..c7cdd6e --- /dev/null +++ b/examples/node-24/.dockerignore @@ -0,0 +1,30 @@ +Dockerfile + +# Ignore node_modules, as they will be installed during the build process +node_modules + +# Ignore logs +*.log + +# Ignore any local environment files +.env + +# Ignore any build or distribution folders +dist +build + +# Ignore any test or coverage folders +test +coverage + +# Ignore any editor or OS specific files +*.swp +*.swo +*.swn +*.bak +*.tmp +*.sublime* +*.idea +*.vscode +.DS_Store +Thumbs.db diff --git a/examples/node-24/.gitignore b/examples/node-24/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/examples/node-24/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/examples/node-24/Dockerfile b/examples/node-24/Dockerfile new file mode 100644 index 0000000..ead2e34 --- /dev/null +++ b/examples/node-24/Dockerfile @@ -0,0 +1,11 @@ +FROM quay.io/mynth/node:24-dev AS builder + +# Build the project +WORKDIR /app +COPY --chown=noddy:noddy . ./ +RUN pnpm install --prod + +FROM quay.io/mynth/node:24-base +WORKDIR /app +COPY --from=builder --chown=noddy:noddy /app ./ +CMD ["node", "--import", "tsx", "entrypoint.ts"] diff --git a/examples/node-24/entrypoint.ts b/examples/node-24/entrypoint.ts new file mode 100644 index 0000000..cf26af4 --- /dev/null +++ b/examples/node-24/entrypoint.ts @@ -0,0 +1,5 @@ +const main = () => { + console.log("hello"); +}; + +main(); diff --git a/examples/node-24/package.json b/examples/node-24/package.json new file mode 100644 index 0000000..5119142 --- /dev/null +++ b/examples/node-24/package.json @@ -0,0 +1,16 @@ +{ + "name": "hello-node", + "version": "0.1.0", + "private": true, + "packageManager": "pnpm@10.23.0", + "scripts": { + "build": "pnpm tsc" + }, + "dependencies": { + "tsx": "^4.20.6" + }, + "devDependencies": { + "@types/node": "^24.10.1", + "typescript": "^5.9.3" + } +} diff --git a/examples/node-24/pnpm-lock.yaml b/examples/node-24/pnpm-lock.yaml new file mode 100644 index 0000000..acb81cd --- /dev/null +++ b/examples/node-24/pnpm-lock.yaml @@ -0,0 +1,343 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + tsx: + specifier: ^4.20.6 + version: 4.20.6 + devDependencies: + '@types/node': + specifier: ^24.10.1 + version: 24.10.1 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + +packages: + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + tsx@4.20.6: + resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==} + engines: {node: '>=18.0.0'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + +snapshots: + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@types/node@24.10.1': + dependencies: + undici-types: 7.16.0 + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + fsevents@2.3.3: + optional: true + + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + resolve-pkg-maps@1.0.0: {} + + tsx@4.20.6: + dependencies: + esbuild: 0.25.12 + get-tsconfig: 4.13.0 + optionalDependencies: + fsevents: 2.3.3 + + typescript@5.9.3: {} + + undici-types@7.16.0: {} diff --git a/examples/node-24/pnpm-workspace.yaml b/examples/node-24/pnpm-workspace.yaml new file mode 100644 index 0000000..efc037a --- /dev/null +++ b/examples/node-24/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +onlyBuiltDependencies: + - esbuild diff --git a/examples/node-24/tsconfig.json b/examples/node-24/tsconfig.json new file mode 100644 index 0000000..7516605 --- /dev/null +++ b/examples/node-24/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true + }, + "include": ["**/*"], + "exclude": ["node_modules"] +} diff --git a/node-22/node-dev.Dockerfile b/node-22/node-dev.Dockerfile index c4facaf..371d5b1 100644 --- a/node-22/node-dev.Dockerfile +++ b/node-22/node-dev.Dockerfile @@ -10,14 +10,14 @@ RUN apt-get update -qq && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* -ADD https://nodejs.org/dist/v22.21.1/node-v22.21.1-linux-x64.tar.xz . +ADD https://nodejs.org/dist/v24.11.1/node-v24.11.1-linux-x64.tar.xz . RUN mkdir -p /usr/local/lib/nodejs && \ - tar -xJf node-v22.21.1-linux-x64.tar.xz && \ - mv node-v22.21.1-linux-x64 /usr/local/lib/nodejs && \ - rm node-v22.21.1-linux-x64.tar.xz + tar -xJf node-v24.11.1-linux-x64.tar.xz && \ + mv node-v24.11.1-linux-x64 /usr/local/lib/nodejs && \ + rm node-v24.11.1-linux-x64.tar.xz -ENV PATH=$PATH:/usr/local/lib/nodejs/node-v22.21.1-linux-x64/bin +ENV PATH=$PATH:/usr/local/lib/nodejs/node-v24.11.1-linux-x64/bin RUN npm install -g corepack@0.34.5 && \ npm config set update-notifier false @@ -34,7 +34,7 @@ RUN useradd --create-home --shell /bin/bash noddy && \ COPY --from=build /usr/local/lib/nodejs /usr/local/lib/nodejs ENV PNPM_HOME=/home/noddy/.local/share/pnpm -ENV PATH=$PNPM_HOME:/app/node_modules/.bin:/usr/local/lib/nodejs/node-v22.21.1-linux-x64/bin:$PATH +ENV PATH=$PNPM_HOME:/app/node_modules/.bin:/usr/local/lib/nodejs/node-v24.11.1-linux-x64/bin:$PATH # hadolint ignore=DL3008 RUN corepack enable && \ diff --git a/node-24/node-base.Dockerfile b/node-24/node-base.Dockerfile new file mode 100644 index 0000000..4de28fc --- /dev/null +++ b/node-24/node-base.Dockerfile @@ -0,0 +1,38 @@ +FROM ubuntu:24.04 AS build + +ENV TINI_VERSION=v0.19.0 +ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini +RUN chmod +x /tini + +# hadolint ignore=DL3008 +RUN apt-get update -qq && \ + apt-get install -y --no-install-recommends xz-utils && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +ADD https://nodejs.org/dist/v24.11.1/node-v24.11.1-linux-x64.tar.xz . + +RUN mkdir -p /usr/local/lib/nodejs && \ + tar -xJf node-v24.11.1-linux-x64.tar.xz && \ + mv node-v24.11.1-linux-x64 /usr/local/lib/nodejs && \ + rm node-v24.11.1-linux-x64.tar.xz + +ENV PATH=$PATH:/usr/local/lib/nodejs/node-v24.11.1-linux-x64/bin + +FROM ubuntu:24.04 +COPY --from=build /tini /sbin/tini +ENTRYPOINT ["/sbin/tini", "--"] + +# hadolint ignore=DL3022 +COPY --from=quay.io/mynth/docker-vault-cli /usr/local/bin/vault-cli /usr/local/bin/vault-cli + +RUN useradd --create-home --shell /bin/bash noddy && \ + mkdir /app && \ + chown -R noddy:noddy /app + +COPY --from=build /usr/local/lib/nodejs /usr/local/lib/nodejs +ENV PATH=/app/node_modules/.bin:/usr/local/lib/nodejs/node-v24.11.1-linux-x64/bin:$PATH + +USER noddy +ENV NODE_ENV=production +RUN npm config set update-notifier false diff --git a/node-24/node-dev.Dockerfile b/node-24/node-dev.Dockerfile new file mode 100644 index 0000000..c4facaf --- /dev/null +++ b/node-24/node-dev.Dockerfile @@ -0,0 +1,54 @@ +FROM ubuntu:24.04 AS build + +ENV TINI_VERSION=v0.19.0 +ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini +RUN chmod +x /tini + +# hadolint ignore=DL3008 +RUN apt-get update -qq && \ + apt-get install -y --no-install-recommends xz-utils && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +ADD https://nodejs.org/dist/v22.21.1/node-v22.21.1-linux-x64.tar.xz . + +RUN mkdir -p /usr/local/lib/nodejs && \ + tar -xJf node-v22.21.1-linux-x64.tar.xz && \ + mv node-v22.21.1-linux-x64 /usr/local/lib/nodejs && \ + rm node-v22.21.1-linux-x64.tar.xz + +ENV PATH=$PATH:/usr/local/lib/nodejs/node-v22.21.1-linux-x64/bin +RUN npm install -g corepack@0.34.5 && \ + npm config set update-notifier false + +FROM ubuntu:24.04 +COPY --from=build /tini /sbin/tini +ENTRYPOINT ["/sbin/tini", "--"] + +# hadolint ignore=DL3022 +COPY --from=quay.io/mynth/docker-vault-cli /usr/local/bin/vault-cli /usr/local/bin/vault-cli + +RUN useradd --create-home --shell /bin/bash noddy && \ + mkdir /app && \ + chown -R noddy:noddy /app + +COPY --from=build /usr/local/lib/nodejs /usr/local/lib/nodejs +ENV PNPM_HOME=/home/noddy/.local/share/pnpm +ENV PATH=$PNPM_HOME:/app/node_modules/.bin:/usr/local/lib/nodejs/node-v22.21.1-linux-x64/bin:$PATH + +# hadolint ignore=DL3008 +RUN corepack enable && \ + corepack prepare pnpm@10.23.0 --activate && \ + apt-get update -qq && \ + apt-get install -y --no-install-recommends \ + python3.12 \ + python3.12-dev \ + build-essential \ + && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* && \ + ln -s /usr/bin/python3.12 /usr/bin/python && \ + npm install -g node-gyp@12.1.0 turbo@2.6.1 + +USER noddy +ENV NODE_ENV=development From 3a8e0991fa963a11d777ec8855c922a7cb8dd2fc Mon Sep 17 00:00:00 2001 From: SynthLuvr <131367121+SynthLuvr@users.noreply.github.com> Date: Wed, 26 Nov 2025 15:57:50 +0100 Subject: [PATCH 3/3] Added publish instructions for node-24 --- .github/workflows/publish.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 5d039bc..1888d70 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -38,6 +38,36 @@ jobs: docker push quay.io/mynth/node:22-dev-$TAG if: github.ref == 'refs/heads/main' + publish-node-24: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Login to Quay.io + uses: docker/login-action@v2 + with: + registry: quay.io + username: ${{ secrets.QUAY_ID }} + password: ${{ secrets.QUAY_PW }} + + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Build node container + run: | + make build-node-24-base + make build-node-24-dev + + - name: Publish container + run: | + TAG=$(git rev-parse --short HEAD) + docker tag quay.io/mynth/node:24-base quay.io/mynth/node:24-base-$TAG + docker tag quay.io/mynth/node:24-dev quay.io/mynth/node:24-dev-$TAG + docker push quay.io/mynth/node:24-base + docker push quay.io/mynth/node:24-dev + docker push quay.io/mynth/node:24-base-$TAG + docker push quay.io/mynth/node:24-dev-$TAG + if: github.ref == 'refs/heads/main' + publish-python: runs-on: ubuntu-latest timeout-minutes: 10