1+ ARG SLIM_BUILD
2+ ARG MAYBE_BASE_BUILD=${SLIM_BUILD:+server-base-slim}
3+ ARG BASE_BUILD=${MAYBE_BASE_BUILD:-server-base}
4+
15# ################## Asset Builder
26
3- FROM node:22 AS build-assets
4- SHELL [ "/bin/bash" , "-euo" , "pipefail" , "-c" ]
7+ FROM node:24-alpine AS build-assets
58ENV NO_UPDATE_NOTIFIER=1
9+ SHELL [ "/bin/sh" , "-euo" , "pipefail" , "-c" ]
610
711WORKDIR /build/
812
2428
2529HEALTHCHECK CMD [ "test" , "-e" , "root/assets/assets.json" ]
2630
27- # ################## Web Server
28- # hadolint ignore=DL3007
29- FROM metacpan/metacpan-base:latest AS server
31+ # ################## Web Server Base
32+ FROM metacpan/metacpan-base:main-20250531-090128 AS server-base
33+ FROM metacpan/metacpan-base:main-20250531-090129-slim AS server-base-slim
34+
35+ # ################## CPAN Prereqs
36+ FROM server-base AS build-cpan-prereqs
3037SHELL [ "/bin/bash" , "-euo" , "pipefail" , "-c" ]
3138
3239RUN \
@@ -46,32 +53,54 @@ RUN \
4653 cpm install --show-build-log-on-failure --resolver=snapshot
4754EOT
4855
49- ENV PERL5LIB="/app/local/lib/perl5"
50- ENV PATH="/app/local/bin:${PATH}"
56+ # ################## Web Server
57+ # false positive
58+ # hadolint ignore=DL3006
59+ FROM ${BASE_BUILD} AS server
60+ SHELL [ "/bin/bash" , "-euo" , "pipefail" , "-c" ]
61+
62+ RUN \
63+ --mount=type=cache,target=/var/cache/apt,sharing=private \
64+ --mount=type=cache,target=/var/lib/apt/lists,sharing=private \
65+ <<EOT
66+ apt-get update
67+ apt-get satisfy -y -f --no-install-recommends 'libcmark-dev (>= 0.30.2)'
68+ EOT
69+
70+ WORKDIR /app/
5171
5272COPY *.md app.psgi log4perl* metacpan_web.* metacpan_web_local.* ./
5373COPY bin bin
5474COPY lib lib
5575COPY root root
76+
5677COPY --from=build-assets /build/root/assets root/assets
78+ COPY --from=build-cpan-prereqs /app/local local
79+
80+ ENV PERL5LIB="/app/local/lib/perl5"
81+ ENV PATH="/app/local/bin:${PATH}"
82+ ENV METACPAN_WEB_HOME=/app
5783
5884CMD [ \
5985 "/uwsgi.sh" , \
60- "--http-socket" , ":80 " \
86+ "--http-socket" , ":8000 " \
6187]
6288
63- EXPOSE 80
89+ EXPOSE 8000
6490
65- HEALTHCHECK --start-period=3s CMD [ "curl" , "--fail" , "http://localhost/healthcheck" ]
91+ HEALTHCHECK --start-period=3s CMD [ "curl" , "--fail" , "http://localhost:8000 /healthcheck" ]
6692
6793# ################## Development Server
6894FROM server AS develop
95+ SHELL [ "/bin/bash" , "-euo" , "pipefail" , "-c" ]
6996
7097ENV COLUMNS=120
7198ENV PLACK_ENV=development
7299
73100USER root
74101
102+ COPY cpanfile cpanfile.snapshot ./
103+
75104RUN \
76105 --mount=type=cache,target=/root/.perl-cpm \
77106<<EOT
@@ -83,6 +112,7 @@ USER metacpan
83112
84113# ################## Test Runner
85114FROM develop AS test
115+ SHELL [ "/bin/bash" , "-euo" , "pipefail" , "-c" ]
86116
87117ENV NO_UPDATE_NOTIFIER=1
88118ENV PLACK_ENV=
@@ -94,10 +124,10 @@ RUN \
94124 --mount=type=cache,target=/var/lib/apt/lists,sharing=private \
95125 --mount=type=cache,target=/root/.npm,sharing=private \
96126<<EOT
97- curl -fsSL https://deb.nodesource.com/setup_21 .x | bash -
127+ curl -fsSL https://deb.nodesource.com/setup_24 .x | bash -
98128 apt-get update
99- apt-get satisfy -y -f --no-install-recommends 'nodejs (>= 21.6.1 )'
100- npm install -g npm@^10 .4.0
129+ apt-get satisfy -y -f --no-install-recommends 'nodejs (>= 24.1.0 )'
130+ npm install -g npm@^11 .4.1
101131EOT
102132
103133COPY package.json package-lock.json ./
0 commit comments