From 8c1454882edcf1bc8e09258663fd01d40443e716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20de=20Saint=20Martin?= Date: Sun, 21 Jul 2024 11:58:06 +0200 Subject: [PATCH] use more modern syntax, upgrade to php 8.3, setup dependabot --- Dockerfile | 54 +++++++++++++++++++++++++++----------------------- dependabot.yml | 6 ++++++ package.json | 1 + 3 files changed, 36 insertions(+), 25 deletions(-) create mode 100644 dependabot.yml diff --git a/Dockerfile b/Dockerfile index 942e5b8770..b3a97cb543 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,47 +1,51 @@ -# syntax=docker/dockerfile:1 +# syntax=docker/dockerfile:1.9@sha256:5510f694edfe648d961b59dcf217026485e560d2663c73e45067b8c8d7a6d247 ### Stage 1: build client -FROM node:20 as client-builder +FROM node:20 AS client-builder WORKDIR /client-builder # Install node packages -COPY package.json . -COPY client/package.json client/ -COPY client/package-lock.json client/ -RUN npm run install-dependencies:client +RUN --mount=type=bind,source=package.json,target=package.json \ + --mount=type=bind,source=client/package.json,target=client/package.json \ + --mount=type=bind,source=client/package-lock.json,target=client/package-lock.json \ + --mount=type=cache,sharing=locked,id=npmcache,mode=0777,target=/root/.npm \ + npm run install-dependencies-ci:client # Build client COPY client/ client/ -RUN npm run build +RUN --mount=type=bind,source=package.json,target=package.json \ + --mount=type=bind,source=client/package.json,target=client/package.json \ + --mount=type=bind,source=client/package-lock.json,target=client/package-lock.json \ + --mount=type=cache,sharing=locked,id=npmcache,mode=0777,target=/root/.npm \ + npm run build ### Stage 2: final container -FROM php:8.2-apache +FROM php:8.3-apache # Install runtime & development package dependencies & php extensions # then clean-up dev package dependencies RUN export DEBIAN_FRONTEND=noninteractive \ - && apt update \ - && apt install -y --no-install-recommends \ - unzip \ - libjpeg62-turbo libpng16-16 libpq5 libonig5 libtidy5deb1 \ - libjpeg62-turbo-dev libpng-dev libpq-dev libonig-dev libtidy-dev \ - && update-ca-certificates --fresh \ - && docker-php-ext-configure gd --with-jpeg \ - && docker-php-ext-install gd mbstring pdo_pgsql pdo_mysql tidy \ - && apt remove -y libjpeg62-turbo-dev libpng-dev libpq-dev libonig-dev libtidy-dev \ - && apt autoremove -y \ - && apt clean \ - && rm -rf /var/lib/apt/lists/* + && apt update \ + && apt install -y --no-install-recommends \ + unzip \ + libjpeg62-turbo libpng16-16 libpq5 libonig5 libtidy5deb1 \ + libjpeg62-turbo-dev libpng-dev libpq-dev libonig-dev libtidy-dev \ + && update-ca-certificates --fresh \ + && docker-php-ext-configure gd --with-jpeg \ + && docker-php-ext-install -j$(nproc) gd mbstring pdo_pgsql pdo_mysql tidy \ + && apt remove -y libjpeg62-turbo-dev libpng-dev libpq-dev libonig-dev libtidy-dev \ + && apt autoremove -y \ + && apt clean \ + && rm -rf /var/lib/apt/lists/* # Install Apache modules RUN a2enmod headers rewrite # Install Selfoss PHP dependencies -COPY --from=composer:2 /usr/bin/composer /usr/bin/composer -COPY composer.json . -COPY composer.lock . -RUN COMPOSER_ALLOW_SUPERUSER=1 composer install --optimize-autoloader --no-dev -RUN rm /usr/bin/composer +RUN --mount=type=bind,source=composer.json,target=composer.json \ + --mount=type=bind,source=composer.lock,target=composer.lock \ + --mount=type=bind,from=composer:2,source=/usr/bin/composer,target=/usr/bin/composer \ + COMPOSER_ALLOW_SUPERUSER=1 composer install --optimize-autoloader --no-dev # Install Selfoss and copy frontend from the first stage WORKDIR /var/www/html diff --git a/dependabot.yml b/dependabot.yml new file mode 100644 index 0000000000..313f059221 --- /dev/null +++ b/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "daily" diff --git a/package.json b/package.json index 3a73a66792..a3da3a8e13 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "fix:helpers:cs": "black utils/ tests/", "install-dependencies": "npm run install-dependencies:client && npm run install-dependencies:server", "install-dependencies:client": "npm install --production=false --prefix client/", + "install-dependencies-ci:client": "npm ci --production=false --prefix client/", "install-dependencies:server": "composer install --dev", "test:server": "composer run-script test", "test:integration": "python3 tests/integration/run.py",