@@ -6,30 +6,34 @@ ARG COMPOSER_VERSION
6
6
ARG NODE_VERSION
7
7
ARG PNPM_VERSION
8
8
9
+ ARG DEBIAN_FRONTEND=noninteractive
10
+
9
11
ENV LANG=en_US.UTF-8 \
10
12
LC_ALL=en_US.UTF-8 \
11
- JETPACK_MONOREPO_ENV=1
13
+ JETPACK_MONOREPO_ENV=1 \
14
+ PNPM_HOME=/usr/local/pnpm \
15
+ PATH="/usr/local/pnpm:${PATH}" \
16
+ npm_config_update_notifier=false
12
17
13
18
WORKDIR /app
14
19
15
- # Install basic packages and PHP
20
+ # Combine all repository setup, package installation, and cleanup into one layer
16
21
RUN --mount=type=cache,target=/var/lib/apt/lists/,sharing=private \
17
- export DEBIAN_FRONTEND=noninteractive \
18
- && apt-get update \
19
- && apt-get install -y curl gpg language-pack-en-base ca-certificates \
20
- # Install software-properties-common without recommended packages to avoid Python issues
21
- && apt-get install -y --no-install-recommends software-properties-common \
22
+ # Setup repositories and keys
23
+ apt-get update && apt-get install -y curl gpg language-pack-en-base ca-certificates \
24
+ software-properties-common \
22
25
&& add-apt-repository ppa:ondrej/php \
23
26
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
24
27
# Add Docker's official GPG key
25
28
&& install -m 0755 -d /etc/apt/keyrings \
26
29
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc \
27
30
&& chmod a+r /etc/apt/keyrings/docker.asc \
28
- # Add Docker repository
29
- && echo \
30
- "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
31
- $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
32
- tee /etc/apt/sources.list.d/docker.list > /dev/null \
31
+ # Add repositories
32
+ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
33
+ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
34
+ && N=${NODE_VERSION%%.*} \
35
+ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$N.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
36
+ # Install all packages
33
37
&& apt-get update \
34
38
&& apt-get --purge install -y \
35
39
git \
@@ -41,35 +45,37 @@ RUN --mount=type=cache,target=/var/lib/apt/lists/,sharing=private \
41
45
jq \
42
46
"php${PHP_VERSION}" \
43
47
"php${PHP_VERSION}-ast" \
48
+ "php${PHP_VERSION}-bcmath" \
44
49
"php${PHP_VERSION}-cli" \
45
50
"php${PHP_VERSION}-curl" \
46
51
"php${PHP_VERSION}-dom" \
52
+ "php${PHP_VERSION}-gd" \
53
+ "php${PHP_VERSION}-igbinary" \
54
+ "php${PHP_VERSION}-imagick" \
55
+ "php${PHP_VERSION}-intl" \
47
56
"php${PHP_VERSION}-mbstring" \
57
+ "php${PHP_VERSION}-mysqli" \
58
+ "php${PHP_VERSION}-pcov" \
48
59
"php${PHP_VERSION}-xml" \
49
60
"php${PHP_VERSION}-zip" \
50
61
rsync \
62
+ locales \
63
+ "nodejs$(apt-cache show nodejs | sed -n "/^Version: ${NODE_VERSION}-/ { s/^Version: /=/p; q }" )" \
64
+ # Cleanup
51
65
&& apt-get remove --purge -y python3-apt \
52
66
&& apt-get remove --purge --auto-remove -y gpg software-properties-common \
53
- && apt-get clean \
54
- && find /var/ -name '*-old' -delete && rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib
67
+ && find /var/ -name '*-old' -delete \
68
+ && rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib
55
69
56
70
# Install Composer
57
71
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
58
72
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=$COMPOSER_VERSION \
59
73
&& php -r "unlink('composer-setup.php');"
60
74
61
- # Install Node.js
62
- RUN --mount=type=cache,target=/var/lib/apt/lists/,sharing=private \
63
- export DEBIAN_FRONTEND=noninteractive \
64
- && N=${NODE_VERSION%%.*} \
65
- && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$N.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
66
- && apt-get -q update \
67
- && VER="$(apt-cache show nodejs | sed -n "/^Version: ${NODE_VERSION}-/ { s/^Version: /=/p; q }" )" \
68
- && apt-get install -y nodejs$VER \
69
- && apt-get clean \
70
- && find /var/ -name '*-old' -delete && rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib
75
+ # Set up PNPM global directory
76
+ RUN mkdir -p "${PNPM_HOME}" \
77
+ && chmod 777 "${PNPM_HOME}"
71
78
72
- # Install pnpm
73
79
RUN npm install --global pnpm@$PNPM_VERSION \
74
80
&& SHELL=/bin/bash pnpm setup
75
81
@@ -79,22 +85,11 @@ WORKDIR /workspace
79
85
COPY bin/monorepo-entrypoint.sh /usr/local/bin/
80
86
RUN chmod +x /usr/local/bin/monorepo-entrypoint.sh
81
87
82
- # Set up locale properly
83
- RUN apt-get update && apt-get install -y locales \
84
- && locale-gen en_US.UTF-8 \
88
+ # Set up locale
89
+ RUN locale-gen en_US.UTF-8 \
85
90
&& update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 \
86
- && apt-get clean \
87
- && find /var/ -name '*-old' -delete && rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib
88
-
89
- ENV LANG=en_US.UTF-8
90
- ENV LC_ALL=en_US.UTF-8
91
-
92
- # Set up PNPM global directory
93
- ENV PNPM_HOME=/usr/local/pnpm
94
- ENV PATH="${PNPM_HOME}:${PATH}"
95
-
96
- RUN mkdir -p "$PNPM_HOME" \
97
- && chmod 777 "$PNPM_HOME"
91
+ && find /var/ -name '*-old' -delete \
92
+ && rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib
98
93
99
94
ENTRYPOINT ["/usr/local/bin/monorepo-entrypoint.sh"]
100
95
CMD ["bash"]
0 commit comments