fm-labs / cakephp-devtools

CakePHP 开发者工具

安装: 80

依赖: 3

建议者: 1

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

语言:Shell

类型:项目

1.4.0 2023-03-18 16:36 UTC

This package is auto-updated.

Last update: 2024-09-22 17:08:21 UTC


README

常见 CakePHP 开发者工具的集合。

目标是创建一个可重用的 CakePHP 项目的构建环境,遵循 CakePHP 的“约定优于配置”哲学。

此包主要是为常见的 PHP 开发者工具(如 phpunitphpcsphpcbfphpmdphpstanphpcpdphploc)创建的一个 composer 元包,以及 CakePHP 自身的必要工具 debug_kitbakerepl

无需在每个 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