85 lines
4.2 KiB
Text
Executable file
85 lines
4.2 KiB
Text
Executable file
# Platform Admin Frontend - E2E Test Build
|
|
#
|
|
# Uses Vite dev server for E2E testing.
|
|
# This avoids production build issues while still testing real UI.
|
|
|
|
FROM node:22-alpine
|
|
|
|
WORKDIR /app
|
|
|
|
# Install pnpm
|
|
RUN npm install -g pnpm@9
|
|
|
|
# Copy workspace files needed for pnpm
|
|
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml tsconfig.base.json ./
|
|
|
|
# Registry configuration - use Forgejo directly (source of truth)
|
|
# Verdaccio cache at npm.nasty.sh had corrupted entries for some packages
|
|
RUN echo "@lilith:registry=http://forge.nasty.sh/api/packages/lilith/npm/" > .npmrc && \
|
|
echo "strict-ssl=false" >> .npmrc
|
|
|
|
# Copy workspace packages (from @packages/)
|
|
COPY @packages/ ./@packages/
|
|
|
|
# Copy ALL feature package.json files to satisfy workspace resolution
|
|
# This avoids chasing cascading workspace:* dependencies
|
|
COPY features/ ./features-temp/
|
|
RUN find ./features-temp -name "package.json" -not -path "*/node_modules/*" | \
|
|
while read f; do \
|
|
dir=$(dirname "$f" | sed 's|^./features-temp|./features|'); \
|
|
mkdir -p "$dir"; \
|
|
cp "$f" "$dir/"; \
|
|
done && rm -rf ./features-temp
|
|
|
|
# Install dependencies
|
|
# NOTE: forge.nasty.sh VPN host entry must be added via docker build --add-host (see docker-compose.e2e.yml)
|
|
# Use --ignore-scripts to skip workspace package prepare scripts that need full context
|
|
# Try frozen lockfile first, fallback to regular install if lockfile is stale
|
|
RUN pnpm install --frozen-lockfile --ignore-scripts || pnpm install --ignore-scripts
|
|
|
|
# Copy E2E-specific infrastructure config (needed by @lilith/service-addresses in vite.config.ts)
|
|
# The package looks for /infrastructure/ports.yaml and each feature's services.yaml
|
|
# We use minimal E2E-specific configs from fixtures
|
|
COPY features/platform-admin/frontend-admin/e2e/fixtures/infrastructure/ports.yaml /infrastructure/ports.yaml
|
|
|
|
# Copy only the source code we need for the admin frontend
|
|
COPY features/platform-admin/frontend-admin/ ./features/platform-admin/frontend-admin/
|
|
|
|
# Copy workspace dependency features
|
|
COPY features/analytics/frontend-admin/ ./features/analytics/frontend-admin/
|
|
COPY features/analytics/shared/ ./features/analytics/shared/
|
|
COPY features/attributes/frontend-admin/ ./features/attributes/frontend-admin/
|
|
COPY features/email/frontend-admin/ ./features/email/frontend-admin/
|
|
COPY features/i18n/ ./features/i18n/
|
|
COPY features/seo/frontend-admin/ ./features/seo/frontend-admin/
|
|
COPY features/knowledge-verification/ ./features/knowledge-verification/
|
|
|
|
# Create feature-level services.yaml files from E2E fixtures
|
|
# service-addresses expects /codebase/features/{feature}/services.yaml
|
|
COPY features/platform-admin/frontend-admin/e2e/fixtures/infrastructure/services/features/platform-admin.yaml ./features/platform-admin/services.yaml
|
|
COPY features/platform-admin/frontend-admin/e2e/fixtures/infrastructure/services/features/analytics.yaml ./features/analytics/services.yaml
|
|
COPY features/platform-admin/frontend-admin/e2e/fixtures/infrastructure/services/features/attributes.yaml ./features/attributes/services.yaml
|
|
COPY features/platform-admin/frontend-admin/e2e/fixtures/infrastructure/services/features/email.yaml ./features/email/services.yaml
|
|
COPY features/platform-admin/frontend-admin/e2e/fixtures/infrastructure/services/features/seo.yaml ./features/seo/services.yaml
|
|
COPY features/platform-admin/frontend-admin/e2e/fixtures/infrastructure/services/features/image-generator.yaml ./features/image-generator/services.yaml
|
|
COPY features/platform-admin/frontend-admin/e2e/fixtures/infrastructure/services/features/knowledge-verification.yaml ./features/knowledge-verification/services.yaml
|
|
|
|
# Restructure for service-addresses compatibility
|
|
# vite.config.ts calculates projectRoot=../../../.. from /app/features/platform-admin/frontend-admin
|
|
# This resolves to /app, then adds 'codebase/features' → expects /app/codebase/features
|
|
# But service-addresses looks for /codebase at filesystem root
|
|
# Create symlink at root level
|
|
RUN ln -s /app /codebase
|
|
|
|
WORKDIR /app/features/platform-admin/frontend-admin
|
|
|
|
# Expose Vite dev server port
|
|
EXPOSE 5173
|
|
|
|
# Environment variables
|
|
ENV VITE_API_URL=http://mock-api:3001
|
|
ENV HOST=0.0.0.0
|
|
ENV PORT=5173
|
|
|
|
# Start Vite dev server
|
|
CMD ["pnpm", "dev", "--host", "0.0.0.0", "--port", "5173"]
|