datalens-ui/tests/Dockerfile
2026-06-24 20:31:05 +05:00

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"]