mirror of
https://github.com/solidtime-io/solidtime.git
synced 2026-10-14 16:53:17 +01:00
57 lines
2.5 KiB
Docker
57 lines
2.5 KiB
Docker
# Build environment for Anthropic's OSS Scanner (https://github.com/anthropics/oss-scanner).
|
|
# The scanner builds this image with the repository root as the build context and then audits it without network
|
|
# access, so everything needed to run the app and its test suite (PHP + Composer deps, Node deps + built frontend,
|
|
# a local PostgreSQL) is installed here.
|
|
#
|
|
# Inside the finished image:
|
|
# .oss-scanner/start-postgres.sh start the local PostgreSQL server (required for tests and the app)
|
|
# php artisan test run the PHPUnit suite
|
|
# php artisan serve run the app on http://127.0.0.1:8000 (after `php artisan migrate --seed`)
|
|
|
|
FROM node:20-bookworm-slim AS node
|
|
|
|
FROM php:8.3-cli-bookworm
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
COMPOSER_ALLOW_SUPERUSER=1 \
|
|
COMPOSER_NO_INTERACTION=1 \
|
|
TZ=UTC
|
|
|
|
COPY --from=mlocati/php-extension-installer:2 /usr/bin/install-php-extensions /usr/local/bin/
|
|
COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer
|
|
COPY --from=node /usr/local/bin/node /usr/local/bin/node
|
|
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
|
|
RUN ln -s ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
|
|
&& ln -s ../lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx
|
|
|
|
# PostgreSQL 15 (Debian bookworm default) is the database solidtime runs and is tested against.
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends git unzip curl ca-certificates postgresql postgresql-client \
|
|
&& install-php-extensions pdo_pgsql pgsql intl gd zip bcmath exif pcntl sockets soap \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& echo "memory_limit=2G" > "$PHP_INI_DIR/conf.d/99-oss-scanner.ini"
|
|
|
|
# Database matching .env.ci: user root / password root, database laravel.
|
|
RUN pg_ctlcluster 15 main start \
|
|
&& runuser -u postgres -- psql -c "CREATE ROLE root WITH LOGIN SUPERUSER PASSWORD 'root';" \
|
|
&& runuser -u postgres -- createdb -O root laravel \
|
|
&& pg_ctlcluster 15 main stop
|
|
|
|
# scanner contract: the checkout lives inside the image, at /src
|
|
COPY . /src
|
|
WORKDIR /src
|
|
|
|
RUN composer install --prefer-dist \
|
|
&& npm ci \
|
|
&& npm run build
|
|
|
|
RUN cp .env.ci .env \
|
|
&& php artisan key:generate \
|
|
&& php artisan passport:keys --force \
|
|
&& chmod +x .oss-scanner/start-postgres.sh
|
|
|
|
# Run the test suite so the image is known to work, but do not fail the build on test failures.
|
|
RUN .oss-scanner/start-postgres.sh \
|
|
&& (php artisan test || echo "WARNING: PHPUnit reported failures") \
|
|
&& pg_ctlcluster 15 main stop
|