1
0
forked from icd/rentgen
rentgen/Dockerfile
Jacek Wielemborek 1668d4e911 refactor(build): move Makefile commands to npm scripts
- Added docker:verify and docker:clean scripts to package.json
- Removed Makefile (all commands now in package.json)
- Updated compose.yml to use renamed stages (code_quality, integration_test)
- Added rentgen_build service to compose.yml

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 17:41:39 +01:00

91 lines
2.5 KiB
Docker

# Rentgen Browser Extension - Docker Build
# See README.md for detailed usage instructions
# Build stage
FROM node:lts AS builder
WORKDIR /app
# Copy package files for dependency installation (better layer caching)
COPY package.json package-lock.json ./
# Install dependencies
RUN npm install
# FIXME: COPY . . invalidates cache, so we need to optionally install Firefox
# and jump back to the correct stage. It might be too complex though, so we
# either need to use build args (if cache properly) or heavily document the
# stage transitions, maybe even with a graph.
# Copy source code (respecting .dockerignore)
COPY . .
# Build the extension for Firefox (default)
RUN npm run build
# Create the package
RUN npm run create-package
# Code quality stage - for running quality checks
FROM builder AS code_quality
RUN npm run typecheck && npm run lint
# Artifacts stage - only contains the built artifacts (for --output)
FROM scratch AS artifacts
# Copy only the built extension zip file to root
COPY --from=builder /app/web-ext-artifacts/*.zip /
# Default stage - full development environment
FROM builder
# Default command shows the built artifact
CMD ["ls", "-lh", "/app/web-ext-artifacts/"]
# Runtime stage - for running extension in Firefox
FROM node:lts AS runtime
WORKDIR /app
# Copy built extension from builder
COPY --from=builder /app /app
# Install Firefox and Xvfb for headless execution (cached layer)
RUN apt-get update && apt-get install -y \
firefox-esr \
xvfb \
procps \
&& rm -rf /var/lib/apt/lists/*
# Install Python and pip in a separate layer for better caching
RUN apt-get update && apt-get install -y \
python3-pip \
wget \
&& rm -rf /var/lib/apt/lists/*
# Install geckodriver for WebDriver protocol
RUN wget -q https://github.com/mozilla/geckodriver/releases/download/v0.34.0/geckodriver-v0.34.0-linux64.tar.gz \
&& tar -xzf geckodriver-v0.34.0-linux64.tar.gz \
&& mv geckodriver /usr/local/bin/ \
&& rm geckodriver-v0.34.0-linux64.tar.gz \
&& chmod +x /usr/local/bin/geckodriver
# Install Python dependencies for testing
RUN pip3 install --break-system-packages marionette_driver
# Set display for Xvfb
ENV DISPLAY=:99
# Start script (not used in verify stage)
CMD ["echo", "Use verify stage for testing"]
# Integration test stage - automated testing with exit code
FROM runtime AS integration_test
# Copy verification script
COPY tests/test_verify.py /app/test_verify.py
RUN chmod +x /app/test_verify.py
# Run verification and exit with proper exit code
CMD ["python3", "/app/test_verify.py"]