# Dockerfile for Arch Linux build environment # Automates all setup steps from the build-arch workflow job # # Usage: # docker build -f scripts/docker/Dockerfile.arch -t android-file-handler-arch-builder . # docker run -v $(pwd):/workspace -w /workspace android-file-handler-arch-builder # Use latest Arch Linux base image (rolling release) # For reproducibility, pin to a specific date tag like: archlinux:base-20251016 FROM archlinux:latest # Set build arguments ARG FPM_VERSION=1.16.0 ARG PYTHON_VERSION=3.14.3 ARG PYTHON_SHA256=d7fe130d0501ae047ca318fa92aa642603ab6f217901015a1df6ce650d5470cd # Install system dependencies (Arch) including Python build dependencies RUN pacman -Syu --noconfirm \ ruby \ ruby-bundler \ ruby-rake \ base-devel \ curl \ git \ tar \ ca-certificates \ ca-certificates-utils \ tk \ tcl \ libx11 \ libxext \ libxrender \ libxcb \ gcc \ make \ zlib \ bzip2 \ readline \ sqlite \ openssl \ libffi \ wget \ xz \ patch && \ update-ca-trust && \ pacman -Scc --noconfirm # Install erb gem (required for fpm on Arch) RUN gem install --no-document erb # Install fpm and create symlink so it's accessible in PATH # Note: Gems install to user directory on Arch, so we use Gem.user_dir RUN gem install --no-document -v "${FPM_VERSION}" fpm && \ GEM_BIN_DIR=$(ruby -e 'puts Gem.user_dir')/bin && \ echo "Gem bin directory: ${GEM_BIN_DIR}" && \ ln -sf "${GEM_BIN_DIR}/fpm" /usr/local/bin/fpm && \ /usr/local/bin/fpm --version # Download Python source and verify SHA256 checksum against python.org RUN wget -q "https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz" \ -O /tmp/Python-${PYTHON_VERSION}.tgz && \ echo "${PYTHON_SHA256} /tmp/Python-${PYTHON_VERSION}.tgz" | sha256sum -c - # Build and install Python from source RUN cd /tmp && tar xzf Python-${PYTHON_VERSION}.tgz && \ cd Python-${PYTHON_VERSION} && \ LDFLAGS="-L/usr/lib" \ CPPFLAGS="-I/usr/include" \ ./configure --enable-shared --with-ensurepip=install --prefix=/usr/local && \ make -j$(nproc) && \ make install && \ echo "/usr/local/lib" > /etc/ld.so.conf.d/python.conf && \ ldconfig && \ ln -sf /usr/local/bin/python3 /usr/local/bin/python && \ rm -rf /tmp/Python-${PYTHON_VERSION} /tmp/Python-${PYTHON_VERSION}.tgz # Update PATH to include Python installation ENV PATH="/usr/local/bin:$PATH" # Verify Python has tkinter support RUN python3 -c "import tkinter; import _tkinter; print('tkinter support verified')" || \ (echo "ERROR: Python was built without tkinter support" && exit 1) # Install Poetry RUN curl -sSL https://install.python-poetry.org | python3 - --yes # Add Poetry to PATH ENV PATH="/root/.local/bin:$PATH" # Verify Poetry installation RUN poetry --version # Set working directory WORKDIR /workspace # Set environment variables for build ENV CI_CD=true ENV DISTRO_TYPE=arch # Default command runs the build script CMD ["sh", "-c", "poetry install --no-interaction && poetry run python scripts/build_package_linux.py"]