Skip to content

Commit

Permalink
Dev Docker: add php extensions needed for unit testing and code cover…
Browse files Browse the repository at this point in the history
…age (#41409)

* Add additional ext needed for WordPress [unit testing] and code coverage

* Other additions from 41057 originally

* condense the build steps in attempt to make building more reliable

* Move pnpm_home declaration to avoid docker build warning

* Update needed packages

* Re-allow rec packages
  • Loading branch information
kraftbj authored Jan 30, 2025
1 parent ecb5560 commit 42477b9
Showing 1 changed file with 35 additions and 40 deletions.
75 changes: 35 additions & 40 deletions tools/docker/Dockerfile.monorepo
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,34 @@ ARG COMPOSER_VERSION
ARG NODE_VERSION
ARG PNPM_VERSION

ARG DEBIAN_FRONTEND=noninteractive

ENV LANG=en_US.UTF-8 \
LC_ALL=en_US.UTF-8 \
JETPACK_MONOREPO_ENV=1
JETPACK_MONOREPO_ENV=1 \
PNPM_HOME=/usr/local/pnpm \
PATH="/usr/local/pnpm:${PATH}" \
npm_config_update_notifier=false

WORKDIR /app

# Install basic packages and PHP
# Combine all repository setup, package installation, and cleanup into one layer
RUN --mount=type=cache,target=/var/lib/apt/lists/,sharing=private \
export DEBIAN_FRONTEND=noninteractive \
&& apt-get update \
&& apt-get install -y curl gpg language-pack-en-base ca-certificates \
# Install software-properties-common without recommended packages to avoid Python issues
&& apt-get install -y --no-install-recommends software-properties-common \
# Setup repositories and keys
apt-get update && apt-get install -y curl gpg language-pack-en-base ca-certificates \
software-properties-common \
&& add-apt-repository ppa:ondrej/php \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
# Add Docker's official GPG key
&& install -m 0755 -d /etc/apt/keyrings \
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc \
&& chmod a+r /etc/apt/keyrings/docker.asc \
# Add Docker repository
&& echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null \
# Add repositories
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
&& N=${NODE_VERSION%%.*} \
&& 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 \
# Install all packages
&& apt-get update \
&& apt-get --purge install -y \
git \
Expand All @@ -41,35 +45,37 @@ RUN --mount=type=cache,target=/var/lib/apt/lists/,sharing=private \
jq \
"php${PHP_VERSION}" \
"php${PHP_VERSION}-ast" \
"php${PHP_VERSION}-bcmath" \
"php${PHP_VERSION}-cli" \
"php${PHP_VERSION}-curl" \
"php${PHP_VERSION}-dom" \
"php${PHP_VERSION}-gd" \
"php${PHP_VERSION}-igbinary" \
"php${PHP_VERSION}-imagick" \
"php${PHP_VERSION}-intl" \
"php${PHP_VERSION}-mbstring" \
"php${PHP_VERSION}-mysqli" \
"php${PHP_VERSION}-pcov" \
"php${PHP_VERSION}-xml" \
"php${PHP_VERSION}-zip" \
rsync \
locales \
"nodejs$(apt-cache show nodejs | sed -n "/^Version: ${NODE_VERSION}-/ { s/^Version: /=/p; q }" )" \
# Cleanup
&& apt-get remove --purge -y python3-apt \
&& apt-get remove --purge --auto-remove -y gpg software-properties-common \
&& apt-get clean \
&& find /var/ -name '*-old' -delete && rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib
&& find /var/ -name '*-old' -delete \
&& rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib

# Install Composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=$COMPOSER_VERSION \
&& php -r "unlink('composer-setup.php');"

# Install Node.js
RUN --mount=type=cache,target=/var/lib/apt/lists/,sharing=private \
export DEBIAN_FRONTEND=noninteractive \
&& N=${NODE_VERSION%%.*} \
&& 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 \
&& apt-get -q update \
&& VER="$(apt-cache show nodejs | sed -n "/^Version: ${NODE_VERSION}-/ { s/^Version: /=/p; q }" )" \
&& apt-get install -y nodejs$VER \
&& apt-get clean \
&& find /var/ -name '*-old' -delete && rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib
# Set up PNPM global directory
RUN mkdir -p "${PNPM_HOME}" \
&& chmod 777 "${PNPM_HOME}"

# Install pnpm
RUN npm install --global pnpm@$PNPM_VERSION \
&& SHELL=/bin/bash pnpm setup

Expand All @@ -79,22 +85,11 @@ WORKDIR /workspace
COPY bin/monorepo-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/monorepo-entrypoint.sh

# Set up locale properly
RUN apt-get update && apt-get install -y locales \
&& locale-gen en_US.UTF-8 \
# Set up locale
RUN locale-gen en_US.UTF-8 \
&& update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 \
&& apt-get clean \
&& find /var/ -name '*-old' -delete && rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib

ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8

# Set up PNPM global directory
ENV PNPM_HOME=/usr/local/pnpm
ENV PATH="${PNPM_HOME}:${PATH}"

RUN mkdir -p "$PNPM_HOME" \
&& chmod 777 "$PNPM_HOME"
&& find /var/ -name '*-old' -delete \
&& rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib

ENTRYPOINT ["/usr/local/bin/monorepo-entrypoint.sh"]
CMD ["bash"]

0 comments on commit 42477b9

Please sign in to comment.