| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| ARG repo |
| ARG arch |
| ARG python="3.12" |
| FROM ${repo}:${arch}-conda-python-${python} |
| |
| ARG selenium_version="4.15.2" |
| ARG pyodide_version="0.26.0" |
| ARG chrome_version="latest" |
| ARG required_python_min="(3,12)" |
| # fail if python version < 3.12 |
| RUN echo "check PYTHON>=${required_python_min}" && python -c "import sys;sys.exit(0 if sys.version_info>=${required_python_min} else 1)" |
| |
| # install selenium and recent pyodide-build and recent python |
| |
| # needs to be a login shell so ~/.profile is read |
| SHELL ["/bin/bash", "--login", "-c", "-o", "pipefail"] |
| |
| RUN python -m pip install --no-cache-dir selenium==${selenium_version} && \ |
| python -m pip install --no-cache-dir --upgrade pyodide-build>=${pyodide_version} |
| |
| # install pyodide dist directory to /pyodide |
| RUN pyodide_dist_url="https://github.com/pyodide/pyodide/releases/download/${pyodide_version}/pyodide-${pyodide_version}.tar.bz2" && \ |
| wget -q "${pyodide_dist_url}" -O- | tar -xj -C / |
| |
| # install node 20 (needed for async call support) |
| # and pthread-stubs for build, and unzip needed for chrome build to work |
| # xz is needed by emsdk to extract node tarballs |
| RUN conda install nodejs=20 unzip pthread-stubs make xz -c conda-forge |
| |
| # install correct version of emscripten for this pyodide |
| COPY ci/scripts/install_emscripten.sh /arrow/ci/scripts/ |
| RUN bash /arrow/ci/scripts/install_emscripten.sh ~ /pyodide |
| |
| # make sure zlib is cached in the EMSDK folder |
| RUN source ~/emsdk/emsdk_env.sh && embuilder --pic build zlib |
| |
| # install chrome for testing browser based runner |
| COPY ci/scripts/install_chromedriver.sh /arrow/ci/scripts/ |
| RUN /arrow/ci/scripts/install_chromedriver.sh "${chrome_version}" |
| |
| # make the version of make that is installed by conda be available everywhere |
| # or else pyodide's isolated build fails to find it |
| RUN ln -s "$(type -P make)" /bin/make |
| |
| ENV ARROW_BUILD_TESTS="OFF" \ |
| ARROW_BUILD_TYPE="release" \ |
| ARROW_DEPENDENCY_SOURCE="BUNDLED" \ |
| ARROW_EMSCRIPTEN="ON" |