Files
android-assistant/scripts/docker/Dockerfile.arch
T

104 lines
3.1 KiB
Docker

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