development-hub/Dockerfile

95 lines
3.3 KiB
Docker

# Development Hub Ecosystem - Docker Build for Testing
#
# Tests that all ecosystem projects can be installed together.
# GUI functionality is not tested (no X11), only imports and CLI tools.
#
# Build: docker build -t development-hub .
# Test: docker run --rm development-hub
FROM python:3.12-slim
# Install system dependencies for Qt (even though we won't run GUI, imports need libs)
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
libgl1 \
libegl1 \
libxkbcommon0 \
libdbus-1-3 \
libxcb-cursor0 \
libxcb-icccm4 \
libxcb-keysyms1 \
libxcb-shape0 \
libxcb-xfixes0 \
libxcb-xinerama0 \
libxcb-render0 \
libxcb-render-util0 \
libxcb-image0 \
libglib2.0-0 \
&& rm -rf /var/lib/apt/lists/*
# Set up virtual display for Qt imports (no actual display, just for import)
ENV QT_QPA_PLATFORM=offscreen
WORKDIR /workspace
# Clone all repos
ARG GITEA_URL=https://gitea.brrd.tech/rob
RUN git clone ${GITEA_URL}/CmdForge.git CmdForge && \
git clone ${GITEA_URL}/ramble.git ramble && \
git clone ${GITEA_URL}/artifact-editor.git artifact-editor && \
git clone ${GITEA_URL}/orchestrated-discussions.git orchestrated-discussions && \
git clone ${GITEA_URL}/development-hub.git development-hub
# Apply patches for PySide6 unification (until changes are pushed to Gitea)
# Patch pyproject.toml files
RUN sed -i 's|PyQt6|PySide6|g' /workspace/development-hub/pyproject.toml && \
sed -i 's|file:///home/rob/PycharmProjects|file:///workspace|g' /workspace/development-hub/pyproject.toml && \
sed -i 's|PyQt6|PySide6|g' /workspace/artifact-editor/pyproject.toml
# Patch source files: PyQt6 -> PySide6
RUN find /workspace/development-hub/src -name "*.py" -exec sed -i \
-e 's/from PyQt6/from PySide6/g' \
-e 's/import PyQt6/import PySide6/g' \
-e 's/pyqtSignal/Signal/g' \
-e 's/pyqtSlot/Slot/g' {} \;
RUN find /workspace/artifact-editor/src -name "*.py" -exec sed -i \
-e 's/from PyQt6/from PySide6/g' \
-e 's/import PyQt6/import PySide6/g' \
-e 's/pyqtSignal/Signal/g' \
-e 's/pyqtSlot/Slot/g' {} \;
# Create venv and install
RUN python -m venv /venv
ENV PATH="/venv/bin:$PATH"
RUN pip install --upgrade pip wheel setuptools
# Install in dependency order (all patches applied above)
RUN pip install -e /workspace/CmdForge
RUN pip install -e /workspace/ramble
RUN pip install -e /workspace/artifact-editor
RUN pip install -e "/workspace/orchestrated-discussions[gui]"
RUN pip install -e /workspace/development-hub
# Verification script
RUN echo '#!/bin/bash\n\
set -e\n\
echo "Testing imports..."\n\
python -c "import cmdforge; print(\" cmdforge: OK\")"\n\
python -c "import ramble; print(\" ramble: OK\")"\n\
python -c "import artifact_editor; print(\" artifact_editor: OK\")"\n\
python -c "import discussions; print(\" discussions: OK\")"\n\
python -c "import development_hub; print(\" development_hub: OK\")"\n\
echo ""\n\
echo "Testing CLI tools..."\n\
cmdforge --help > /dev/null && echo " cmdforge CLI: OK"\n\
ramble --help > /dev/null && echo " ramble CLI: OK"\n\
artifact-editor --help > /dev/null && echo " artifact-editor CLI: OK"\n\
discussions --help > /dev/null && echo " discussions CLI: OK"\n\
echo ""\n\
echo "All tests passed!"\n\
' > /test.sh && chmod +x /test.sh
CMD ["/test.sh"]