91 lines
2.5 KiB
Docker
91 lines
2.5 KiB
Docker
ARG UBUNTU_VERSION=24.04
|
|
|
|
FROM ubuntu:${UBUNTU_VERSION} AS base-stage
|
|
|
|
ARG NODE_MAJOR=22
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
RUN apt-get update && apt-get -y upgrade && apt-get -y install ca-certificates curl gnupg
|
|
|
|
# node
|
|
RUN 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_${NODE_MAJOR}.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
|
|
|
|
RUN apt-get update && apt-get -y install nodejs
|
|
|
|
# remove unnecessary packages
|
|
RUN apt-get -y purge curl gnupg gnupg2 && \
|
|
apt-get -y autoremove && \
|
|
apt-get clean && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# timezone setting
|
|
ENV TZ="Etc/UTC"
|
|
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
|
|
|
# user app
|
|
RUN useradd -m -u 1001 app && mkdir /opt/app && chown app:app /opt/app
|
|
|
|
# install package dependencies for production
|
|
FROM base-stage AS install-stage
|
|
|
|
ARG TARGETARCH
|
|
ARG PNPM_VERSION=10.17.1
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
CI=1 \
|
|
HUSKY=0
|
|
|
|
WORKDIR /opt/app
|
|
|
|
# install system dependencies
|
|
RUN apt-get update && apt-get -y install g++ make && \
|
|
npm i -g pnpm@${PNPM_VERSION}
|
|
|
|
COPY package.json pnpm-lock.yaml .npmrc /opt/app/
|
|
|
|
RUN pnpm install --frozen-lockfile
|
|
|
|
# production running stage
|
|
FROM base-stage AS runtime-stage
|
|
|
|
ARG PLAYWRIGHT_VERSION=1.48.2
|
|
|
|
USER root
|
|
|
|
WORKDIR /opt/app
|
|
|
|
COPY --from=install-stage /opt/app/package.json /opt/app/pnpm-lock.yaml /opt/app/
|
|
COPY --from=install-stage /opt/app/node_modules /opt/app/node_modules
|
|
|
|
# split install playwright deps and browser
|
|
RUN npx playwright@${PLAYWRIGHT_VERSION} install chromium ffmpeg --with-deps --dry-run | grep --color=never 'sh -c' | sed 's|sh -c "||' | sed 's|"||' > ./deps.sh && chmod +x ./deps.sh && ./deps.sh && rm -rf ./deps.sh
|
|
|
|
# remove DejaVuSans fonts
|
|
RUN apt purge -y fonts-dejavu-core fonts-dejavu-mono
|
|
|
|
ENV PLAYWRIGHT_DOWNLOAD_HOST=https://storage.yandexcloud.net/playwright
|
|
ENV PLAYWRIGHT_BROWSERS_PATH=/opt/app/pw-browsers
|
|
|
|
RUN npx playwright@${PLAYWRIGHT_VERSION} install chromium ffmpeg && rm -rf /var/lib/apt/lists/*
|
|
|
|
# copy sources
|
|
COPY ./src/shared /opt/app/src/shared
|
|
COPY ./tests /opt/app/tests
|
|
|
|
RUN mkdir -p /opt/app/tests/artifacts && chown -R app:app /opt/app/tests
|
|
|
|
ARG app_version
|
|
ENV APP_VERSION=$app_version \
|
|
TMPDIR=/tmp \
|
|
NODE_ENV=production \
|
|
E2E_DOMAIN="http://localhost:8080" \
|
|
E2E_RETRY_TIMES=1 \
|
|
E2E_NO_AUTH=false
|
|
|
|
USER app
|
|
|
|
ENTRYPOINT ["npm", "run", "test:e2e:opensource"]
|