forked from pyodide/pyodide
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
109 lines (93 loc) · 4.51 KB
/
Dockerfile
File metadata and controls
109 lines (93 loc) · 4.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
FROM ubuntu:25.04 AS selenium-manager-image
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates curl jq wget \
&& rm -rf /var/lib/apt/lists/*
ARG SELENIUM_MANAGER_VERSION=latest
RUN SELENIUM_MANAGER_VERSION_FULL=$(curl -s https://api.github.com/repos/SeleniumHQ/selenium_manager_artifacts/releases/${SELENIUM_MANAGER_VERSION} | jq -r .name) \
&& wget --no-verbose https://github.com/SeleniumHQ/selenium_manager_artifacts/releases/download/${SELENIUM_MANAGER_VERSION_FULL}/selenium-manager-linux \
&& chmod +x selenium-manager-linux \
&& mv selenium-manager-linux /usr/local/bin/selenium-manager
ARG CHROME_VERSION="latest"
ARG FIREFOX_VERSION="latest"
RUN if [ $FIREFOX_VERSION = "latest" ]; then SE_FIREFOX_VERSION="stable"; \
else SE_FIREFOX_VERSION=${FIREFOX_VERSION}; \
fi \
&& export SE_FIREFOX_VERSION \
&& SE_FIREFOX_OUTPUT=$(selenium-manager --browser firefox --driver gecko --output json) \
&& SE_FIREFOX_BROWSER_PATH=$(echo ${SE_FIREFOX_OUTPUT} | jq -r '.result.browser_path') \
&& SE_GECKO_DRIVER_PATH=$(echo ${SE_FIREFOX_OUTPUT} | jq -r '.result.driver_path') \
&& mv $(dirname ${SE_FIREFOX_BROWSER_PATH}) /opt/firefox \
&& mv $(dirname ${SE_GECKO_DRIVER_PATH}) /opt/geckodriver
RUN if [ $CHROME_VERSION = "latest" ]; then SE_CHROME_VERSION="stable"; \
else SE_CHROME_VERSION=${CHROME_VERSION}; \
fi \
&& export SE_CHROME_VERSION \
&& SE_CHROME_OUTPUT=$(selenium-manager --browser chrome --driver chrome --output json) \
&& SE_CHROME_BROWSER_PATH=$(echo ${SE_CHROME_OUTPUT} | jq -r '.result.browser_path') \
&& SE_CHROME_DRIVER_PATH=$(echo ${SE_CHROME_OUTPUT} | jq -r '.result.driver_path') \
&& mv $(dirname ${SE_CHROME_BROWSER_PATH}) /opt/chrome \
&& mv $(dirname ${SE_CHROME_DRIVER_PATH}) /opt/chromedriver
FROM node:24.7-bookworm-slim AS node-image
FROM python:3.13.2-slim-bookworm
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
# Requirements for building packages \
bzip2 ccache f2c g++ gfortran git make \
patch pkg-config swig unzip wget xz-utils \
autoconf autotools-dev automake texinfo dejagnu \
build-essential libltdl-dev \
gnupg2 libdbus-glib-1-2 sudo sqlite3 \
ninja-build jq cmake bison \
# Dependencies of Chrome and Firefox \
ca-certificates fonts-liberation libasound2 \
libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 \
libc6 libcairo2 libcups2 libcurl4 libdbus-1-3 \
libexpat1 libgbm1 libglib2.0-0 libnspr4 libnss3 \
libpango-1.0-0 libudev1 libvulkan1 libx11-6 \
libxcb1 libxcomposite1 libxdamage1 libxext6 \
libxfixes3 libxkbcommon0 libxrandr2 xdg-utils \
libgtk-3-0 libx11-xcb1 \
libtool autoconf \
&& rm -rf /var/lib/apt/lists/*
ADD requirements.txt /
WORKDIR /
RUN pip3 --no-cache-dir install -r requirements.txt \
&& rm requirements.txt
RUN cd / \
&& git clone --recursive https://github.com/WebAssembly/wabt \
&& cd wabt \
&& git submodule update --init \
&& make install-gcc-release-no-tests \
&& cd ~ \
&& rm -rf /wabt
COPY --from=node-image /usr/local/bin/node /usr/local/bin/
COPY --from=node-image /usr/local/lib/node_modules /usr/local/lib/node_modules
RUN ln -s ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
&& ln -s ../lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx
RUN npm install -g \
jsdoc \
prettier \
rollup \
rollup-plugin-terser
# Normally, it is a bad idea to install rustup and cargo in
# system directories (it should not be shared between users),
# but this docker image is only for building packages, so I hope it is ok.
ENV RUSTUP_HOME=/usr
ENV CARGO_HOME=/usr
RUN wget -q -O - https://sh.rustup.rs | \
sh -s -- -y --profile minimal --no-modify-path
COPY --from=selenium-manager-image /opt/firefox /opt/firefox
COPY --from=selenium-manager-image /opt/geckodriver /opt/geckodriver
COPY --from=selenium-manager-image /opt/chrome /opt/chrome
COPY --from=selenium-manager-image /opt/chromedriver /opt/chromedriver
RUN ln -fs /opt/firefox/firefox /usr/local/bin/firefox \
&& ln -fs /opt/geckodriver/geckodriver /usr/local/bin/geckodriver \
&& ln -fs /opt/chrome/chrome /usr/local/bin/chrome \
&& ln -fs /opt/chromedriver/chromedriver /usr/local/bin/chromedriver \
&& echo "Using Firefox version: $(firefox --version)" \
&& echo "Using GeckoDriver version: $(geckodriver --version)" \
&& echo "Using Chrome version: $(chrome --version)" \
&& echo "Using Chrome Driver version: $(chromedriver --version)"
CMD ["/bin/sh"]
WORKDIR /src