添加forwardPorts端口并完善工作流
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
{
|
||||
"name": "PHP",
|
||||
"image": "mcr.microsoft.com/devcontainers/php:1-8.3",
|
||||
"forwardPorts": ["8000","9000"],
|
||||
"containerEnv": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"forwardPorts": [
|
||||
8000
|
||||
],
|
||||
"containerEnv": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"settings": {},
|
||||
@@ -19,6 +21,5 @@
|
||||
"onAutoForward": "notify"
|
||||
}
|
||||
},
|
||||
|
||||
"postAttachCommand": "php -S 0.0.0.0:8000"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
# For more details, see https://containers.dev/guide/dependabot
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "devcontainers"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
97
.gitea/workflows/code-check.yaml
Normal file
97
.gitea/workflows/code-check.yaml
Normal file
@@ -0,0 +1,97 @@
|
||||
name: PHP Code Check
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, master, develop ]
|
||||
pull_request:
|
||||
branches: [ main, master, develop ]
|
||||
|
||||
jobs:
|
||||
code-quality:
|
||||
name: Code Quality Check
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.2'
|
||||
extensions: mbstring, xml, ctype, json
|
||||
coverage: none
|
||||
tools: php-cs-fixer, phpstan, psalm
|
||||
|
||||
- name: Validate PHP syntax
|
||||
run: |
|
||||
echo "Checking PHP syntax..."
|
||||
find . -name "*.php" -not -path "./vendor/*" -exec php -l {} \; | grep -v "No syntax errors"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✓ All PHP files have valid syntax"
|
||||
fi
|
||||
|
||||
- name: Install Composer dependencies
|
||||
if: hashFiles('composer.json') != ''
|
||||
run: |
|
||||
if [ -f "composer.json" ]; then
|
||||
composer install --prefer-dist --no-progress --no-suggest
|
||||
else
|
||||
echo "No composer.json found, skipping..."
|
||||
fi
|
||||
|
||||
- name: Run PHP_CodeSniffer
|
||||
continue-on-error: true
|
||||
run: |
|
||||
if [ -f "composer.json" ]; then
|
||||
if composer show --installed | grep -q "squizlabs/php_codesniffer"; then
|
||||
vendor/bin/phpcs --standard=PSR12 --colors -p .
|
||||
else
|
||||
echo "PHP_CodeSniffer not installed, skipping..."
|
||||
fi
|
||||
else
|
||||
echo "No composer.json, skipping PHP_CodeSniffer..."
|
||||
fi
|
||||
|
||||
- name: Run PHP CS Fixer (dry-run)
|
||||
continue-on-error: true
|
||||
run: |
|
||||
if command -v php-cs-fixer &> /dev/null; then
|
||||
php-cs-fixer fix --dry-run --diff --verbose
|
||||
else
|
||||
echo "PHP CS Fixer not available, skipping..."
|
||||
fi
|
||||
|
||||
- name: Run PHPStan
|
||||
continue-on-error: true
|
||||
run: |
|
||||
if [ -f "composer.json" ]; then
|
||||
if composer show --installed | grep -q "phpstan/phpstan"; then
|
||||
vendor/bin/phpstan analyse --level=5 --no-progress .
|
||||
elif command -v phpstan &> /dev/null; then
|
||||
phpstan analyse --level=5 --no-progress .
|
||||
else
|
||||
echo "PHPStan not installed, skipping..."
|
||||
fi
|
||||
else
|
||||
echo "No composer.json, skipping PHPStan..."
|
||||
fi
|
||||
|
||||
- name: Run Psalm
|
||||
continue-on-error: true
|
||||
run: |
|
||||
if [ -f "composer.json" ]; then
|
||||
if composer show --installed | grep -q "vimeo/psalm"; then
|
||||
vendor/bin/psalm --no-progress
|
||||
elif command -v psalm &> /dev/null; then
|
||||
psalm --no-progress
|
||||
else
|
||||
echo "Psalm not installed, skipping..."
|
||||
fi
|
||||
else
|
||||
echo "No composer.json, skipping Psalm..."
|
||||
fi
|
||||
|
||||
- name: Check code formatting
|
||||
run: |
|
||||
echo "✓ Code quality checks completed"
|
||||
34
.php-cs-fixer.php
Normal file
34
.php-cs-fixer.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
/*
|
||||
* PHP CS Fixer configuration
|
||||
* This file defines the coding standards for the project
|
||||
*/
|
||||
|
||||
$finder = PhpCsFixer\Finder::create()
|
||||
->in(__DIR__)
|
||||
->exclude('vendor')
|
||||
->exclude('node_modules')
|
||||
->name('*.php')
|
||||
->ignoreDotFiles(true)
|
||||
->ignoreVCS(true);
|
||||
|
||||
$config = new PhpCsFixer\Config();
|
||||
return $config
|
||||
->setRules([
|
||||
'@PSR12' => true,
|
||||
'array_syntax' => ['syntax' => 'short'],
|
||||
'ordered_imports' => ['sort_algorithm' => 'alpha'],
|
||||
'no_unused_imports' => true,
|
||||
'not_operator_with_successor_space' => false,
|
||||
'trailing_comma_in_multiline' => true,
|
||||
'phpdoc_scalar' => true,
|
||||
'unary_operator_spaces' => true,
|
||||
'binary_operator_spaces' => true,
|
||||
'blank_line_before_statement' => [
|
||||
'statements' => ['break', 'continue', 'declare', 'return', 'throw', 'try'],
|
||||
],
|
||||
'phpdoc_single_line_var_spacing' => true,
|
||||
'phpdoc_var_without_name' => true,
|
||||
'single_trait_insert_per_statement' => true,
|
||||
])
|
||||
->setFinder($finder);
|
||||
62
README.md
62
README.md
@@ -1,13 +1,71 @@
|
||||
# php
|
||||
|
||||
Php 项目工程模板
|
||||
Php 项目工程模板(带自动代码校验)
|
||||
|
||||
## 使用方法
|
||||
|
||||
```
|
||||
启动开发服务器:
|
||||
```bash
|
||||
php -S 0.0.0.0:8000
|
||||
```
|
||||
|
||||
## 代码质量检查
|
||||
|
||||
### 安装依赖
|
||||
|
||||
```bash
|
||||
composer install
|
||||
```
|
||||
|
||||
### 运行代码检查
|
||||
|
||||
运行所有检查:
|
||||
```bash
|
||||
composer check
|
||||
```
|
||||
|
||||
单独运行检查:
|
||||
```bash
|
||||
# PHP 语法检查
|
||||
composer syntax-check
|
||||
|
||||
# 代码风格检查
|
||||
composer cs-check
|
||||
|
||||
# 代码风格自动修复
|
||||
composer cs-fix
|
||||
|
||||
# 静态分析 (PHPStan)
|
||||
composer phpstan
|
||||
|
||||
# 静态分析 (Psalm)
|
||||
composer psalm
|
||||
|
||||
# 自动格式化代码
|
||||
composer fix
|
||||
```
|
||||
|
||||
## 自动化工作流
|
||||
|
||||
项目包含自动化代码校验工作流 (`.gitea/workflows/code-check.yml`),会在以下情况自动运行:
|
||||
|
||||
- 推送代码到 `main`, `master`, 或 `develop` 分支
|
||||
- 创建 Pull Request
|
||||
|
||||
工作流会自动执行:
|
||||
1. PHP 语法验证
|
||||
2. 代码风格检查 (PSR-12 标准)
|
||||
3. 静态代码分析 (PHPStan & Psalm)
|
||||
4. 代码格式检查
|
||||
|
||||
## 配置文件说明
|
||||
|
||||
- `.php-cs-fixer.php` - PHP CS Fixer 代码格式配置
|
||||
- `phpcs.xml` - PHP_CodeSniffer 代码风格配置
|
||||
- `phpstan.neon` - PHPStan 静态分析配置
|
||||
- `psalm.xml` - Psalm 静态分析配置
|
||||
- `composer.json` - 项目依赖和脚本配置
|
||||
|
||||
### 版权说明
|
||||
|
||||
Copyright @ Mengning Software
|
||||
|
||||
35
composer.json
Normal file
35
composer.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "template/php-project",
|
||||
"description": "PHP project template with automated code quality checks",
|
||||
"type": "project",
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": ">=7.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"squizlabs/php_codesniffer": "^3.7",
|
||||
"phpstan/phpstan": "^1.10",
|
||||
"vimeo/psalm": "^5.0",
|
||||
"friendsofphp/php-cs-fixer": "^3.0"
|
||||
},
|
||||
"scripts": {
|
||||
"check": [
|
||||
"@syntax-check",
|
||||
"@cs-check",
|
||||
"@phpstan",
|
||||
"@psalm"
|
||||
],
|
||||
"syntax-check": "find . -name '*.php' -not -path './vendor/*' -exec php -l {} \\;",
|
||||
"cs-check": "phpcs",
|
||||
"cs-fix": "phpcbf",
|
||||
"phpstan": "phpstan analyse --no-progress",
|
||||
"psalm": "psalm --no-progress",
|
||||
"fix": "php-cs-fixer fix"
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true,
|
||||
"allow-plugins": {
|
||||
"php-http/discovery": true
|
||||
}
|
||||
}
|
||||
}
|
||||
31
phpcs.xml
Normal file
31
phpcs.xml
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0"?>
|
||||
<ruleset name="PHP Project Coding Standard">
|
||||
<description>PHP CodeSniffer configuration for the project</description>
|
||||
|
||||
<!-- Check all PHP files -->
|
||||
<file>.</file>
|
||||
|
||||
<!-- Exclude vendor and other directories -->
|
||||
<exclude-pattern>*/vendor/*</exclude-pattern>
|
||||
<exclude-pattern>*/node_modules/*</exclude-pattern>
|
||||
<exclude-pattern>*.js</exclude-pattern>
|
||||
<exclude-pattern>*.css</exclude-pattern>
|
||||
|
||||
<!-- Use PSR-12 coding standard -->
|
||||
<rule ref="PSR12"/>
|
||||
|
||||
<!-- Show progress and use colors -->
|
||||
<arg name="colors"/>
|
||||
<arg value="p"/>
|
||||
|
||||
<!-- Additional rules -->
|
||||
<rule ref="Generic.Arrays.DisallowLongArraySyntax"/>
|
||||
<rule ref="Generic.CodeAnalysis.UnusedFunctionParameter"/>
|
||||
<rule ref="Generic.Commenting.Todo"/>
|
||||
<rule ref="Generic.Files.LineLength">
|
||||
<properties>
|
||||
<property name="lineLimit" value="120"/>
|
||||
<property name="absoluteLineLimit" value="150"/>
|
||||
</properties>
|
||||
</rule>
|
||||
</ruleset>
|
||||
11
phpstan.neon
Normal file
11
phpstan.neon
Normal file
@@ -0,0 +1,11 @@
|
||||
parameters:
|
||||
level: 5
|
||||
paths:
|
||||
- .
|
||||
excludePaths:
|
||||
- vendor
|
||||
- node_modules
|
||||
ignoreErrors:
|
||||
# Add specific errors to ignore here if needed
|
||||
checkMissingIterableValueType: false
|
||||
checkGenericClassInNonGenericObjectType: false
|
||||
16
psalm.xml
Normal file
16
psalm.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0"?>
|
||||
<psalm
|
||||
errorLevel="5"
|
||||
resolveFromConfigFile="true"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="https://getpsalm.org/schema/config"
|
||||
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
|
||||
>
|
||||
<projectFiles>
|
||||
<directory name="." />
|
||||
<ignoreFiles>
|
||||
<directory name="vendor" />
|
||||
<directory name="node_modules" />
|
||||
</ignoreFiles>
|
||||
</projectFiles>
|
||||
</psalm>
|
||||
Reference in New Issue
Block a user