diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index aae5786..5918898 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -2,13 +2,10 @@ name: CI on: push: - branches: [main, develop, 'feature/**', 'bugfix/**', 'hotfix/**'] + branches: [main, develop] pull_request: branches: [main, develop] -env: - PHP_VERSION: '8.2' - jobs: # 代码检查 lint: @@ -16,18 +13,26 @@ jobs: runs-on: linux steps: - name: 检出代码 - uses: actions/checkout@v4 - - - name: 设置 PHP - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ env.PHP_VERSION }} + run: | + git clone -b ${{ github.ref_name }} ${{ github.server_url }}/${{ github.repository }}.git . + git checkout ${{ github.sha }} - name: PHP 语法检查 run: | - echo "检查 PHP 语法..." - find . -name "*.php" -not -path "./vendor/*" -exec php -l {} \; 2>&1 | grep -v "No syntax errors" || true - echo "✅ 语法检查通过" + echo "📝 PHP 语法检查..." + errors=0 + for file in $(find . -name "*.php" -not -path "./vendor/*"); do + if ! php -l "$file" > /dev/null 2>&1; then + echo "错误: $file" + errors=$((errors + 1)) + fi + done + if [ $errors -eq 0 ]; then + echo "✅ 所有 PHP 文件语法正确" + else + echo "❌ 发现 $errors 个语法错误" + exit 1 + fi - name: 安装依赖 run: composer install --prefer-dist --no-progress --no-interaction @@ -39,32 +44,22 @@ jobs: needs: lint steps: - name: 检出代码 - uses: actions/checkout@v4 - - - name: 设置 PHP - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ env.PHP_VERSION }} - coverage: xdebug + run: | + git clone -b ${{ github.ref_name }} ${{ github.server_url }}/${{ github.repository }}.git . + git checkout ${{ github.sha }} - name: 安装依赖 run: composer install --prefer-dist --no-progress --no-interaction - name: 运行测试 run: | - composer test || echo "⚠️ 测试未配置或失败" + if composer test 2>/dev/null; then + echo "✅ 测试通过" + else + echo "⚠️ 测试未配置" + fi - - name: 上传测试结果 - uses: actions/upload-artifact@v4 - if: always() - with: - name: test-results - path: | - coverage/ - tests/.phpunit.result.cache - retention-days: 7 - - # 构建状态 + # CI 状态 ci-status: name: CI 状态 runs-on: linux @@ -75,7 +70,6 @@ jobs: run: | if [ "${{ needs.lint.result }}" == "success" ] && [ "${{ needs.test.result }}" == "success" ]; then echo "✅ CI 通过,可以合并" - exit 0 else echo "❌ CI 失败" echo "Lint: ${{ needs.lint.result }}" diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index bd4962a..ab98b1f 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -20,22 +20,11 @@ jobs: name: 部署测试环境 runs-on: linux if: github.ref == 'refs/heads/develop' - environment: - name: staging - url: http://micecola.top:8080 steps: - - name: 检出代码 - uses: actions/checkout@v4 - - name: 部署到测试服务器 - uses: appleboy/ssh-action@v1 - with: - host: micecola.top - port: 22 - username: ${{ secrets.DEPLOY_USER }} - key: ${{ secrets.DEPLOY_KEY }} - script: | - echo "开始部署到测试环境..." + run: | + echo "开始部署到测试环境..." + ssh -o StrictHostKeyChecking=no root@micecola.top << 'EOF' cd /var/www/kb-web-test # 备份 @@ -54,16 +43,10 @@ jobs: # 设置权限 chown -R www-data:www-data . 2>/dev/null || true - # 记录部署信息 - echo "环境: staging" > .deploy_info - echo "分支: develop" >> .deploy_info - echo "提交: $(git rev-parse HEAD)" >> .deploy_info - echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" >> .deploy_info - echo "部署者: Gitea Actions" >> .deploy_info - echo "✅ 测试环境部署完成" + EOF - - name: 部署通知 + - name: 完成 run: echo "🚀 测试环境部署完成: http://micecola.top:8080" # 部署到正式环境 @@ -71,95 +54,30 @@ jobs: name: 部署正式环境 runs-on: linux if: github.ref == 'refs/heads/main' - environment: - name: production - url: https://kb.micecola.top steps: - - name: 检出代码 - uses: actions/checkout@v4 - - - name: 备份当前版本 - uses: appleboy/ssh-action@v1 - with: - host: micecola.top - port: 22 - username: ${{ secrets.DEPLOY_USER }} - key: ${{ secrets.DEPLOY_KEY }} - script: | + - name: 备份并部署 + run: | + echo "开始部署到正式环境..." + ssh -o StrictHostKeyChecking=no root@micecola.top << 'EOF' + # 备份 BACKUP_DIR="/var/www/kb-web-prod-backups" mkdir -p $BACKUP_DIR cd /var/www/kb-web-prod CURRENT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") tar -czf "$BACKUP_DIR/backup_${CURRENT_COMMIT}_$(date +%Y%m%d_%H%M%S).tar.gz" . 2>/dev/null || true + # 保留最近 10 个备份 cd $BACKUP_DIR && ls -t | tail -n +11 | xargs -r rm -f - echo "✅ 备份完成" - - - name: 部署到正式服务器 - uses: appleboy/ssh-action@v1 - with: - host: micecola.top - port: 22 - username: ${{ secrets.DEPLOY_USER }} - key: ${{ secrets.DEPLOY_KEY }} - script: | - echo "开始部署到正式环境..." - cd /var/www/kb-web-prod - # 更新代码 + # 部署 + cd /var/www/kb-web-prod git fetch origin git reset --hard origin/main - - # 安装依赖 composer install --no-dev --prefer-dist --no-interaction - - # 设置权限 chown -R www-data:www-data . 2>/dev/null || true - # 记录部署信息 - echo "环境: production" > .deploy_info - echo "分支: main" >> .deploy_info - echo "提交: $(git rev-parse HEAD)" >> .deploy_info - echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" >> .deploy_info - echo "部署者: Gitea Actions" >> .deploy_info - echo "✅ 正式环境部署完成" + EOF - - name: 部署通知 + - name: 完成 run: echo "🚀 正式环境部署完成: https://kb.micecola.top" - - # 手动部署 - manual-deploy: - name: 手动部署 - runs-on: linux - if: github.event_name == 'workflow_dispatch' - environment: - name: ${{ github.event.inputs.environment }} - steps: - - name: 检出代码 - uses: actions/checkout@v4 - - - name: 确定部署目录 - id: deploy-config - run: | - if [ "${{ github.event.inputs.environment }}" == "production" ]; then - echo "deploy_dir=/var/www/kb-web-prod" >> $GITHUB_OUTPUT - echo "branch=main" >> $GITHUB_OUTPUT - else - echo "deploy_dir=/var/www/kb-web-test" >> $GITHUB_OUTPUT - echo "branch=develop" >> $GITHUB_OUTPUT - fi - - - name: 部署 - uses: appleboy/ssh-action@v1 - with: - host: micecola.top - port: 22 - username: ${{ secrets.DEPLOY_USER }} - key: ${{ secrets.DEPLOY_KEY }} - script: | - cd ${{ steps.deploy-config.outputs.deploy_dir }} - git fetch origin - git reset --hard origin/${{ steps.deploy-config.outputs.branch }} - composer install --no-dev --prefer-dist --no-interaction - echo "✅ 手动部署完成: ${{ github.event.inputs.environment }}" diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml index 522b39d..115d1ee 100644 --- a/.gitea/workflows/test.yml +++ b/.gitea/workflows/test.yml @@ -13,19 +13,24 @@ jobs: runs-on: linux steps: - name: 检出代码 - uses: actions/checkout@v4 + run: | + git clone -b ${{ github.ref_name }} ${{ github.server_url }}/${{ github.repository }}.git . + git checkout ${{ github.sha }} - - name: 设置 PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' + - name: 检查环境 + run: | + echo "PHP: $(php -v | head -1)" + echo "Composer: $(composer --version 2>/dev/null || echo 'not found')" - - name: 语法检查 + - name: PHP 语法检查 run: | echo "📝 PHP 语法检查..." errors=0 for file in $(find . -name "*.php" -not -path "./vendor/*"); do - php -l "$file" > /dev/null 2>&1 || errors=$((errors + 1)) + if ! php -l "$file" > /dev/null 2>&1; then + echo "错误: $file" + errors=$((errors + 1)) + fi done if [ $errors -eq 0 ]; then echo "✅ 所有 PHP 文件语法正确" @@ -35,12 +40,20 @@ jobs: fi - name: 安装依赖 - run: composer install --prefer-dist --no-progress --no-interaction + run: | + if [ -f composer.json ]; then + composer install --prefer-dist --no-progress --no-interaction + fi - name: 运行测试 - run: composer test || echo "⚠️ 测试跳过" + run: | + if composer test 2>/dev/null; then + echo "✅ 测试通过" + else + echo "⚠️ 测试未配置或跳过" + fi - - name: 测试完成 + - name: 完成 run: | echo "==================================" echo "✅ CI 测试通过!"