Добавьте глобальные phpcs и drupal / coder в ddev в настраиваемом Dockerfile

Следуя примерам в https://www.ddev.com/ddev-local/customizing-ddev-local-images-with-a-custom-dockerfile/ и пример файла Docker, я попытался, чтобы составитель global потребовал drupal / coder:

ARG BASE_IMAGE=drud
FROM $BASE_IMAGE
RUN composer global require drupal/coder:8.3.5 --verbose
RUN composer global require dealerdirect/phpcodesniffer-composer-installer --verbose
RUN export PATH="$PATH:$HOME/.composer/vendor/bin"
RUN phpcs --config-set installed_paths ~/.composer/vendor/drupal/coder/coder

Это не сработало, как ожидалось, поскольку оно устанавливается для root. Однако пользователь, который позже попытается вызвать его, не является пользователем root.


person amitaibu    schedule 18.05.2020    source источник


Ответы (1)


Как ответил @rfay в https://github.com/drud/ddev/issues/2173#issuecomment-613671025

Все во время сборки Dockerfile (для всех Dockerfile повсюду) происходит от имени пользователя root. composer global require должен просто использовать домашний каталог root в качестве места временного хранения.

В этом случае phpcs на самом деле не устанавливается глобально, он устанавливается в кеш композитора root. Вместо этого следует сделать следующее:

ARG BASE_IMAGE
FROM $BASE_IMAGE

ENV COMPOSER_HOME=/usr/local/composer

# We try to avoid when possible relying on composer to download global, so in PHPCS case we can use the phar.
RUN curl -L https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar -o /usr/local/bin/phpcs && chmod +x /usr/local/bin/phpcs
RUN curl -L https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar -o /usr/local/bin/phpcbf && chmod +x /usr/local/bin/phpcbf

# If however we need to download a package, we use `cgr` for that.
RUN composer global require consolidation/cgr
RUN $COMPOSER_HOME/vendor/bin/cgr drupal/coder:^8.3.1
RUN $COMPOSER_HOME/vendor/bin/cgr dealerdirect/phpcodesniffer-composer-installer

# Register Drupal's code sniffer rules.
RUN phpcs --config-set installed_paths $COMPOSER_HOME/global/drupal/coder/vendor/drupal/coder/coder_sniffer --verbose
# Make Codesniffer config file writable for ordinary users in container.
RUN chmod 666 /usr/local/bin/CodeSniffer.conf
# Make COMPOSER_HOME writable if regular users need to use it.
RUN chmod -R ugo+rw $COMPOSER_HOME
# Now turn it off, because ordinary users will want to be using the default
ENV COMPOSER_HOME=""
person amitaibu    schedule 18.05.2020
comment
Нормальный способ установить это просто локально для сайта, правда? Значит, если они установлены в проекте, то ничего из этого не нужно? - person rfay; 18.05.2020
comment
Правильно, поэтому он называется Добавить глобальные phpcs. Действительно, вместо этого можно ddev composer require --dev. - person amitaibu; 18.05.2020
comment
Переход с глобальных phpcs, хотя это рекомендуемый способ установки в соответствии со страницей GitHub, давал ошибки. Поэтому я рекомендую использовать локальный PHPCS, как мы это сделали здесь - github.com/ Gizra / drupal-starter / pull / 43 - person amitaibu; 08.07.2020