deploy: 支持 STOP_BEFORE_START 小内存先停后启,更新 workflows 文档 #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Database Schema Verification | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - master | |
| paths: | |
| - 'scripts/**/*.sql' | |
| - 'src/backend/**/entity/*.java' | |
| - '.github/workflows/database-schema-verify.yml' | |
| pull_request: | |
| branches: | |
| - main | |
| - master | |
| paths: | |
| - 'scripts/**/*.sql' | |
| - 'src/backend/**/entity/*.java' | |
| workflow_dispatch: | |
| inputs: | |
| database_host: | |
| description: 'Database host' | |
| required: false | |
| default: 'localhost' | |
| database_port: | |
| description: 'Database port' | |
| required: false | |
| default: '3306' | |
| database_name: | |
| description: 'Database name' | |
| required: false | |
| default: 'security_teaching_system' | |
| env: | |
| DB_HOST: ${{ github.event.inputs.database_host || 'localhost' }} | |
| DB_PORT: ${{ github.event.inputs.database_port || '3306' }} | |
| DB_USER: root | |
| DB_PASSWORD: ${{ secrets.DB_PASSWORD || 'root' }} | |
| DB_NAME: ${{ github.event.inputs.database_name || 'security_teaching_system' }} | |
| jobs: | |
| verify-schema: | |
| name: Verify Database Schema | |
| runs-on: ubuntu-latest | |
| services: | |
| mysql: | |
| image: mysql:8.0 | |
| env: | |
| MYSQL_ROOT_PASSWORD: ${{ env.DB_PASSWORD }} | |
| MYSQL_DATABASE: ${{ env.DB_NAME }} | |
| ports: | |
| - 3306:3306 | |
| options: >- | |
| --health-cmd="mysqladmin ping" | |
| --health-interval=10s | |
| --health-timeout=5s | |
| --health-retries=3 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.9' | |
| - name: Install MySQL client | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y mysql-client | |
| - name: Wait for MySQL to be ready | |
| run: | | |
| for i in {1..30}; do | |
| if mysql -h 127.0.0.1 -P 3306 -u root -p${{ env.DB_PASSWORD }} -e "SELECT 1" &>/dev/null; then | |
| echo "MySQL is ready" | |
| break | |
| fi | |
| echo "Waiting for MySQL... ($i/30)" | |
| sleep 2 | |
| done | |
| - name: Initialize test database | |
| run: | | |
| chmod +x scripts/init-database.sh | |
| export DB_HOST=127.0.0.1 | |
| export DB_PORT=3306 | |
| export DB_USER=root | |
| export DB_PASSWORD=${{ env.DB_PASSWORD }} | |
| export DB_NAME=${{ env.DB_NAME }} | |
| echo "${{ env.DB_PASSWORD }}" | scripts/init-database.sh || true | |
| - name: Run schema verification | |
| run: | | |
| chmod +x scripts/verify-database-schema.sh | |
| export DB_HOST=127.0.0.1 | |
| export DB_PORT=3306 | |
| export DB_USER=root | |
| export DB_PASSWORD=${{ env.DB_PASSWORD }} | |
| export DB_NAME=${{ env.DB_NAME }} | |
| echo "${{ env.DB_PASSWORD }}" | scripts/verify-database-schema.sh | |
| continue-on-error: true | |
| - name: Upload verification report | |
| if: always() | |
| uses: actions/upload-artifact@v3 | |
| with: | |
| name: schema-verification-report | |
| path: | | |
| scripts/schema-verification-reports/*.txt | |
| scripts/schema-verification-reports/*.json | |
| retention-days: 30 | |
| - name: Check verification result | |
| run: | | |
| REPORT_FILE=$(ls -t scripts/schema-verification-reports/schema_verification_*.txt 2>/dev/null | head -1) | |
| if [ -z "$REPORT_FILE" ]; then | |
| echo "❌ 未找到核对报告" | |
| exit 1 | |
| fi | |
| # 检查是否有缺失的表 | |
| MISSING_COUNT=$(grep -c "✗ 缺失的表" "$REPORT_FILE" || echo "0") | |
| if [ "$MISSING_COUNT" -gt 0 ]; then | |
| echo "❌ 发现缺失的表,请查看报告" | |
| cat "$REPORT_FILE" | |
| exit 1 | |
| fi | |
| echo "✅ 数据库结构核对通过" | |
| cat "$REPORT_FILE" | |