Initial version

This commit is contained in:
Benjamin Renard 2024-02-29 17:44:55 +01:00
commit fc99ec5f7d
Signed by: bn8
GPG key ID: 3E2E1CE1907115BC
12 changed files with 182 additions and 0 deletions

6
.codespellrc Normal file
View file

@ -0,0 +1,6 @@
[codespell]
ignore-words-list = equipments
skip = ./.*,*.csv,*.json,*.ini,*.subject,*.txt,*.html,*.log,*.conf
quiet-level = 2
ignore-regex = .*codespell-ignore$

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*~

31
.pre-commit-config.yaml Normal file
View file

@ -0,0 +1,31 @@
# Pre-commit hooks to run tests and ensure code is cleaned.
# See https://pre-commit.com for more information
---
repos:
- repo: https://github.com/codespell-project/codespell
rev: v2.2.2
hooks:
- id: codespell
args:
- --config .codespellrc
#- --write-changes # Uncomment to write changes
exclude_types: [csv, json]
- repo: https://github.com/digitalpulp/pre-commit-php.git
rev: 1.4.0
hooks:
- id: php-stan
files: \.(php)$
args: ["--configuration=phpstan.neon"]
- repo: https://github.com/adrienverge/yamllint
rev: v1.32.0
hooks:
- id: yamllint
args: ["-c", ".yamllint.yml"]
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v2.7.1
hooks:
- id: prettier
args: ["--print-width", "100"]

6
.yamllint.yml Normal file
View file

@ -0,0 +1,6 @@
---
extends: default
rules:
line-length:
max: 100

8
Dockerfile.common Normal file
View file

@ -0,0 +1,8 @@
RUN mkdir /src && \
git config --global --add safe.directory /src
COPY .pre-commit-config.yaml .yamllint.yml .codespellrc fake_php_project /src/
RUN cd /src && \
git init && \
git add * && \
pre-commit run --all-files && \
rm -fr /src

16
Dockerfile.common.init Normal file
View file

@ -0,0 +1,16 @@
ENV PYTHON_APT_PACKAGES="python3-all python3-dev python3-pip python3-venv"
ENV PHP_APT_PACKAGES="composer php-apcu php-cli php-curl php-deepcopy php-gd php-gnupg php-imagick php-intl php-json php-ldap php-mbstring php-memcache php-mysql php-pgsql php-rrd php-xdebug php-xml php-xmlrpc php-yaml php-zip php-gmp"
ENV DEB_APT_PACKAGES="apt-file dpkg-dev fakeroot build-essential devscripts debhelper dh-python equivs"
ENV TOOLS_APT_PACKAGES="sed lsb-release gnupg2 curl jq git rsync gitdch wget ca-certificates"
ENV APT_PACKAGES="$PYTHON_APT_PACKAGES $PHP_APT_PACKAGES $DEB_APT_PACKAGES $TOOLS_APT_PACKAGES"
ENV PIP_PACKAGES="pre-commit"
RUN echo "deb http://debian.zionetrix.net stable main" > /etc/apt/sources.list.d/zionetrix.list && \
apt-get -o Acquire::AllowInsecureRepositories=true -o Acquire::AllowDowngradeToInsecureRepositories=true update && \
apt-get -o APT::Get::AllowUnauthenticated=true install --yes zionetrix-archive-keyring && \
apt-get update && \
apt-get install --no-install-recommends -y $APT_PACKAGES && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
apt-file update

10
Dockerfile.debian10 Normal file
View file

@ -0,0 +1,10 @@
# syntax = edrevo/dockerfile-plus
FROM debian:10-slim
INCLUDE+ Dockerfile.common.init
RUN python3 -m pip install -U pip && \
python3 -m pip install $PIP_PACKAGES
INCLUDE+ Dockerfile.common

9
Dockerfile.debian11 Normal file
View file

@ -0,0 +1,9 @@
# syntax = edrevo/dockerfile-plus
FROM debian:11-slim
INCLUDE+ Dockerfile.common.init
RUN python3 -m pip install $PIP_PACKAGES
INCLUDE+ Dockerfile.common

9
Dockerfile.debian12 Normal file
View file

@ -0,0 +1,9 @@
# syntax = edrevo/dockerfile-plus
FROM debian:12-slim
INCLUDE+ Dockerfile.common.init
RUN python3 -m pip install --break-system-packages $PIP_PACKAGES
INCLUDE+ Dockerfile.common

67
README.md Normal file
View file

@ -0,0 +1,67 @@
# Docker image to run pre-commit on PHP apps/libraries
Debian slim based images with common dependencies to run `pre-commit` on PHP apps/libraries:
- common PHP packages: `php-apcu php-cli php-curl php-deepcopy php-gd php-gnupg php-imagick php-intl php-json php-ldap php-mbstring php-memcache php-mysql php-pgsql php-rrd php-xdebug php-xml php-xmlrpc php-yaml php-zip php-gmp`
- common PHP tools: `composer`
- common python packages: `python3-all python3-dev python3-pip python3-venv`
- `build-essential` to allow local python package using `pip`
- `pre-commit` and `git` commands
- initialized `pre-commit` environments in `/src` according to provided `.pre-commit-config.yaml`
example file.
**Note:** Multiple tagged images are provided to allow test on the right Debian version you are
using in your production environment. Tags are named `debianX` with `XX` corresponding to the Debian
version. Currently supported Debian version:
- `debian10` (Debian Buster)
- `debian11` (Debian Bullseye)
- `debian12` (Debian Bookworm)
## Usage
To use it:
```bash
docker run \
-it --rm \
-v "$(pwd)":/src -w /src \
brenard/php-pre-commit \
pre-commit run --all-files
```
**Note:** To test your project with the provided `.pre-commit-config.yaml` file, use to following
command:
```bash
docker run \
-it --rm \
-v "$(pwd)":/src -w /src \
-v "$(pwd)/.pre-commit-config.yaml":/src/.pre-commit-config.yaml \
brenard/php-pre-commit \
pre-commit run --all-files
```
## Build
```bash
# Need to use Dockerfile+ (https://github.com/edrevo/dockerfile-plus)
export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1
for deb_version in 10 11 12
do
docker build -t docker.io/brenard/php-pre-commit:debian${deb_version} -f Dockerfile.debian${deb_version} .
done
docker build -t docker.io/brenard/php-pre-commit:latest -f Dockerfile.debian${deb_version} .
```
## Publish
```bash
for deb_version in 10 11 12
do
docker push docker.io/brenard/php-pre-commit:debian${deb_version}
done
docker push docker.io/brenard/php-pre-commit:latest
```

2
fake_php_project/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
vendor
composer.lock

View file

@ -0,0 +1,17 @@
{
"name": "brenard/fake_php_project",
"description": "Fake project",
"type": "project",
"autoload": {
"psr-4": {
"Brenard\\FakePhpProject\\": "src/"
}
},
"authors": [
{
"name": "Benjamin Renard",
"email": "brenard@easter-eggs.com"
}
],
"require": {}
}