it-nsk/dev-tools

Shared PHP CS Fixer, PHPStan and Git hook commands for PHP projects

Maintainers

Package info

github.com/it-nsk/dev-scripts

Language:Shell

pkg:composer/it-nsk/dev-tools

Transparency log

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.1 2026-07-23 10:33 UTC

This package is auto-updated.

Last update: 2026-07-23 10:56:33 UTC


README

Общие PHP CS Fixer, PHPStan и Git hooks для PHP/Symfony-проектов. Пакет хранит логику инструментов в одном месте, а каждый проект задаёт только пути и режим запуска в .dev-tools.yaml.

Возможности

  • единый набор правил PHP CS Fixer;
  • общая конфигурация PHPStan для Symfony и Doctrine;
  • запуск инструментов локально или через Docker Compose;
  • pre-commit hook, исправляющий только staged PHP-файлы;
  • готовые Makefile-цели без копирования команд между проектами.

Требования

  • PHP 8.3 или новее;
  • Composer 2;
  • Git — для установки и выполнения hook;
  • Docker Compose — только для Docker-режима.

Установка

composer require --dev it-nsk/dev-tools

Создайте .dev-tools.yaml:

cs_fixer:
    mode: local
    paths: [src]

phpstan:
    mode: local
    paths: [src]

hooks:
    mode: local

Проверьте подключение:

vendor/bin/dev-tools help
vendor/bin/dev-tools cs:check
vendor/bin/dev-tools phpstan

Docker

Инструменты можно запускать в сервисе приложения:

cs_fixer:
    mode: docker
    paths: [src]

phpstan:
    mode: docker
    paths: [src]

hooks:
    mode: docker

docker:
    command: [docker, compose]
    service: app
    env_files: [.env, .env.local]

Режим из YAML можно переопределить для одного запуска:

vendor/bin/dev-tools cs:check --mode=local
vendor/bin/dev-tools cs:check --mode=docker
vendor/bin/dev-tools phpstan --mode=local
vendor/bin/dev-tools phpstan --mode=docker

Команды

dev-tools cs:check [--mode=local|docker]
dev-tools cs:fix [--mode=local|docker]
dev-tools phpstan [path...] [--mode=local|docker]
dev-tools hooks:install [--mode=local|docker]

cs:check только показывает нарушения. cs:fix изменяет настроенные файлы.

Git hook

vendor/bin/dev-tools hooks:install --mode=local
# либо
vendor/bin/dev-tools hooks:install --mode=docker

Hook копируется в .git/hooks/pre-commit, форматирует staged PHP-файлы и снова добавляет их в Git index. Если PHP-файл добавлен частично, после форматирования он станет полностью staged.

Makefile

Подключите общие цели:

-include vendor/it-nsk/dev-tools/make/dev-tools.mk

Доступные команды:

make cs-check
make cs-check-local
make cs-check-docker
make cs-fix
make cs-fix-local
make cs-fix-docker
make phpstan
make phpstan-local
make phpstan-docker
make phpstan-files FILES="src/Foo.php src/Bar.php"
make hooks-local
make hooks-docker

Проектная конфигурация PHPStan

Для baseline или проектных исключений укажите:

phpstan:
    config: phpstan.dist.neon

И подключите общий конфиг:

includes:
    - vendor/it-nsk/dev-tools/config/phpstan.neon
    - phpstan-baseline.neon

Не подключайте расширения Symfony и Doctrine повторно: они уже входят в общий конфиг.

Разработка

composer install
composer test
composer test-docker-e2e
composer test-dev-tools-global-e2e
composer test-dev-tools-global-docker-e2e

Local E2E создаёт временный Composer/Git-проект и проверяет fixer, PHPStan и hook. Docker E2E повторяет сценарий в PHP 8.3-контейнере и удаляет созданные ресурсы после завершения.

Подробности:

Глобальный Docker CLI

Глобальный dev-tools устанавливается один раз и доступен до запуска Docker и composer install:

curl -fsSL https://raw.githubusercontent.com/it-nsk/dev-scripts/ITNSK-37-docker-migration/install.sh | sh

По умолчанию бинарник устанавливается в /usr/local/bin. Общие команды:

dev-tools init
dev-tools up
dev-tools down
dev-tools build
dev-tools logs
dev-tools shell
dev-tools dump:download
dev-tools dump:import
dev-tools cs:check
dev-tools phpstan
dev-tools hooks:install
dev-tools migrate
dev-tools self-update

Уникальные настройки проекта задаются переменными BGT_* в .env и при необходимости переопределяются в .env.local. Dockerfile, конфигурация Nginx и docker-compose.example.yml остаются в репозитории проекта.

Лицензия

MIT