fm-labs / cakephp-devtools
CakePHP 开发者工具
Requires
- php: >=7.4
- cakephp/bake: ^2
- cakephp/cakephp-codesniffer: ^5
- cakephp/debug_kit: ^4.0
- cakephp/migrations: @stable
- cakephp/repl: @stable
- dereuromark/cakephp-ide-helper: @stable
- dms/phpunit-arraysubset-asserts: ^0.4.0
- josegonzalez/dotenv: ^3.2
- pdepend/pdepend: @stable
- phing/phing: 2.*
- phpmd/phpmd: @stable
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ~8.5.0 || ^9.3
- psy/psysh: @stable
- squizlabs/php_codesniffer: 3.*
README
常见 CakePHP 开发者工具的集合。
目标是创建一个可重用的 CakePHP 项目的构建环境,遵循 CakePHP 的“约定优于配置”哲学。
此包主要是为常见的 PHP 开发者工具(如 phpunit
、phpcs
、phpcbf
、phpmd
、phpstan
、、phpcpd
)创建的一个 composer 元包,以及 CakePHP 自身的必要工具 phploc
debug_kit
、bake
和 repl
。
无需在每个 CakePHP 项目中添加和维护所有开发依赖,此包捆绑了一个常见的开发工具集和一些辅助脚本。
安装
# In your CakePHP project directory
composer require --dev fm-labs/cakephp-devtools dev-master
使用
bin/cakedev
辅助脚本,用于使用共享配置执行工具命令。
$ ./vendor/bin/cakedev [BUILD-TARGET]
// Examples
// List available build targets
$ ./vendor/bin/cakedev list
// Run PHPUnit
$ ./vendor/bin/cakedev phpunit
// Run PHPUnit without coverage
$ ./vendor/bin/cakedev phpunit-no-coverage
// Run PHPStan
$ ./vendor/bin/cakedev phpstan
// ... see full build target list below ...
vendor/bin/phing
在内部,所有构建目标都将使用 phing
执行。phing 配置文件位于 configs/phing.xml
。
// Phing command
$ ./vendor/bin/phing -Dbasedir=$(pwd) -f ./vendor/fm-labs/cakephp-devtools/configs/phing.xml [BUILD-TARGET]
composer 运行
将 "scripts" 添加到您的 composer.json
// Example scripts in composer.json
{
[...]
"scripts": {
// Run tools via cakedev script
// (shared configs apply automatically)
"phpunit": "cakedev phpunit",
"phpunit-no-coverage": "cakedev phpunit-no-coverage",
"pdepend": "cakedev pdepend",
"phpcbf": "cakedev phpcbf",
"phpcs": "cakedev phpcs",
"phpmd": "cakedev phpmd",
"phpstan": "cakedev phpstan",
// Aliases
"check": [
"@test",
"@cs-check"
],
"cs-check": "cakedev phpcs",
"cs-fix": "cakedev phpcbf",
"quick-test": "cakedev quick-test",
"test": "cakedev phpunit",
"stan": "cakedev phpstan",
"quick-build": "cakedev quick-build",
"full-build": "cakedev full-build",
"static-analysis": "cakedev static-analysis",
// Alternative: Run tools directly
// (shared configs do not apply)
"check": [
"@test",
"@cs-check"
],
"cs-check": "phpcs --colors -p --standard=vendor/cakephp/cakephp-codesniffer/CakePHP src/ tests/",
"cs-fix": "phpcbf --colors --standard=vendor/cakephp/cakephp-codesniffer/CakePHP src/ tests/",
"stan": "phpstan analyse src/",
"test": "phpunit --colors=always tests/",
},
}
# Execute script with
# composer run [script-name]
# Example:
$ composer run check
直接使用工具
任何工具也可以直接从 vendor/bin
目录使用,当然,共享的开发者工具配置不会自动应用。
# Example:
$ ./vendor/bin/phpunit --no-coverage
$ ./vendor/bin/phpstan analyse src/
...
构建目标
构建目标是多个构建步骤的别名。
报告
Phing 属性
<!-- Tools binary location properties -->
<property name="pdepend.bin" value="${basedir}/vendor/bin/pdepend"/>
<property name="phpcpd.bin" value="${basedir}/vendor/bin/phpcpd"/>
<property name="phpcs.bin" value="${basedir}/vendor/bin/phpcs"/>
<property name="phpcbf.bin" value="${basedir}/vendor/bin/phpcbf"/>
<property name="phpdox.bin" value="${basedir}/vendor/bin/phpdox"/>
<property name="phploc.bin" value="${basedir}/vendor/bin/phploc"/>
<property name="phpmd.bin" value="${basedir}/vendor/bin/phpmd"/>
<property name="phpunit.bin" value="${basedir}/vendor/bin/phpunit"/>
<property name="phpstan.bin" value="${basedir}/vendor/bin/phpstan"/>
<!-- phpunit.args: Additional command line arguments for phpunit -->
<property name="phpunit.args" value="" />
<!-- Configuration location properties -->
<property name="phpunit.configuration" value="${basedir}/phpunit.xml.dist" />
<property name="phpdox.configuration" value="${basedir}/phpdox.xml.dist" />
<property name="phpmd.configuration" value="${devtools.configdir}/phpmd.xml" />
<property name="pdepend.configuration" value="${devtools.configdir}/pdepend.xml" />
<property name="phpstan.configuration" value="${devtools.configdir}/phpstan.neon" />
<!-- Log location properties -->
<property name="phpunit.log.coverage-html-dir" value="${basedir}/build/coverage/html" />
<property name="phpunit.log.coverage-xml-dir" value="${basedir}/build/coverage/xml" />
<property name="phpunit.log.coverage-php" value="${basedir}/build/logs/phpunit.php" />
<property name="phpunit.log.coverage-text" value="${basedir}/build/logs/phpunit.txt" />
<property name="phpunit.log.coverage-clover" value="${basedir}/build/logs/clover.xml" />
<property name="phpunit.log.coverage-crap4j" value="${basedir}/build/logs/crap4j.xml" />
<property name="phpunit.log.junit" value="${basedir}/build/logs/junit.xml" />
<property name="phploc.log.csv" value="${basedir}/build/logs/phploc.csv" />
<property name="phploc.log.xml" value="${basedir}/build/logs/phploc.xml" />
<property name="phpcs.log.report-checkstyle" value="${basedir}/build/logs/checkstyle.xml" />
<property name="phpcs.log.report-diff" value="${basedir}/build/logs/checkstyle.diff" />
<property name="phpmd.log.report-xml" value="${basedir}/build/logs/pmd.xml" />
<property name="phpcpd.log.pmd-xml" value="${basedir}/build/logs/pmd-cpd.xml" />
<property name="phpstan.log.xml" value="${basedir}/build/logs/phpstan.xml" />
<property name="pdepend.log.jdepend-xml" value="${basedir}/build/logs/jdepend.xml" />
<property name="pdepend.log.jdepend-chart-svg" value="${basedir}/build/pdepend/dependencies.svg" />
<property name="pdepend.log.pyramid-svg" value="${basedir}/build/pdepend/overview-pyramid.svg" />
<property name="pdepend.log.dependency-xml" value="${basedir}/build/pdepend/dependencies.xml" />
<property name="pdepend.log.summary-xml" value="${basedir}/build/pdepend/summary.xml" />
自定义属性
在您的项目根目录中创建一个 build.properties
文件,并每行设置一个键值对。
#Example build.properties file:
phpunit.bin=/my/custom/path/to/phpunit
phpunit.log.junit=/my/custom/path/junit.xml
phpunit.args=--exclude-group someTestGroupName
phpstan.configuration=/my/custom/config/path/phpstan.neon
与 Jenkins CI 一起使用
Jenkins 项目配置
通用:描述
要在项目概述中显示 pdepend
生成的图形,请在项目描述中添加以下 HTML 片段。
<a href="ws/artifacts/pdepend/overview-pyramid.svg" target="_blank"> <img type="image/svg+xml" src="ws/build/pdepend/overview-pyramid.svg" alt="Pdepend pyramid" width="500" /> </a> <a href="ws/artifacts/pdepend/dependencies.svg" target="_blank"> <img type="image/svg+xml" src="ws/build/pdepend/dependencies.svg" alt="Pdepend dependencies" width="500" /> </a>
构建步骤:执行 Shell
示例 shell 构建步骤,用于准备构建环境。
#!/bin/bash # Github pubkey authentication for checking out private repos # Before use: # * Generate SSH-Keypair (store eg. in /var/lib/jenkins/.ssh/jenkins) # * Register public key in your Github-Account # More Information: # https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh # https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent # # Start the ssh-agent in the background. #eval "$(ssh-agent -s)" # Add your SSH private key to ssh-agent #ssh-add /var/lib/jenkins/.ssh/jenkins # Load devtools on-the-fly via composer # (not necessary if devtools are already defined in composer.json as a dependency) #composer config minimum-stability dev #composer config prefer-stable 1 #composer require --dev fm-labs/cakephp-devtools dev-master # Install composer dependencies composer install --no-interaction --no-suggest --no-progress --no-ansi #composer update --no-interaction --no-suggest --no-progress --no-ansi # Create a test database #mysql -u root -proot -e 'CREATE DATABASE IF NOT EXISTS cakephp_test'; # Define test database connection for CakePHP #export DB_DSN=mysql://root:root@127.0.0.1/cakephp_test # Create custom configuration file for CakePHP #cat > $WORKSPACE/config/app_local.php <<'CONFIG' #<?php #return [ /* ... config => here ... */ ]; #CONFIG # Create custom build properties file for phing #cat > $WORKSPACE/build.properties <<'BUILD' #phpunit.args=--exclude-group integration #BUILD # Execute a phing build target manually # Recommendation: use the Jenkins build step 'Invoke phing targets' instead # a) via cakedev #./vendor/bin/cakedev full-build # b) via phing #./vendor/bin/phing \ # -Dbasedir=$(pwd) \ # -f ./vendor/fm-labs/cakephp-devtools/configs/phing.xml \ # -propertyfile ./build.properties \ # full-build
构建步骤:调用 phing 目标
添加 Jenkins 构建步骤 '调用 phing 目标' 并使用以下配置
- Phing 版本:任何
- 目标:[目标](见目标列表)
- Phing 构建文件:$WORKSPACE/vendor/fm-labs/cakephp-devtools/configs/phing.xml
- 选项
- 属性:basedir=$WORKSPACE
- 使用 ModuleRoot 作为工作目录:是
构建后操作
[ TODO ]
提示
PhpUnit
- 排除代码块从代码覆盖率中: 在类、方法或行上使用
@codecoverageIgnore
、@codecoverageIgnoreStart
、@codecoverageIgnoreEnd
PHP 注释。阅读更多:PHPUnit 手册:忽略代码块
CodeSniffer
-
排除代码块从代码检查中: 在要忽略的代码周围使用
//phpcs:disable
和//phpcs:enable
注释行。 -
排除文件从代码检查中: 在要排除的文件顶部使用
//phpcs:ignoreFile
注释行。
致谢
此项目受到 jenkins-php (网站) (Github) 的启发。
版权 (c) 2020 fm-labs | LICENSE