添加forwardPorts端口并完善工作流
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "PHP",
|
"name": "PHP",
|
||||||
"image": "mcr.microsoft.com/devcontainers/php:1-8.3",
|
"image": "mcr.microsoft.com/devcontainers/php:1-8.3",
|
||||||
"forwardPorts": ["8000","9000"],
|
"forwardPorts": [
|
||||||
"containerEnv": {
|
8000
|
||||||
"NODE_ENV": "development"
|
],
|
||||||
},
|
"containerEnv": {
|
||||||
|
"NODE_ENV": "development"
|
||||||
|
},
|
||||||
"customizations": {
|
"customizations": {
|
||||||
"vscode": {
|
"vscode": {
|
||||||
"settings": {},
|
"settings": {},
|
||||||
@@ -19,6 +21,5 @@
|
|||||||
"onAutoForward": "notify"
|
"onAutoForward": "notify"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"postAttachCommand": "php -S 0.0.0.0:8000"
|
"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 项目工程模板
|
Php 项目工程模板(带自动代码校验)
|
||||||
|
|
||||||
## 使用方法
|
## 使用方法
|
||||||
|
|
||||||
```
|
启动开发服务器:
|
||||||
|
```bash
|
||||||
php -S 0.0.0.0:8000
|
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
|
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