name: GUI Version Release on: push: branches: [ master, develop ] # 临时添加 develop 用于测试 jobs: gui-version-release: runs-on: windows defaults: run: working-directory: E:\shuidrop_gui steps: # Step 1: Pull latest code - name: Pull latest code shell: powershell run: | Write-Host "=========================================="; Write-Host "Pulling latest code"; Write-Host "=========================================="; Write-Host "Working directory: $(Get-Location)"; Write-Host "Branch: ${{ github.ref_name }}"; Write-Host "Commit: ${{ github.sha }}"; Write-Host ""; git config core.autocrlf false; git config core.longpaths true; Write-Host "Fetching from origin..."; git fetch origin; Write-Host "Checking out branch: ${{ github.ref_name }}"; git checkout ${{ github.ref_name }}; Write-Host "Pulling latest changes..."; git reset --hard origin/${{ github.ref_name }}; Write-Host ""; Write-Host "Current status:"; git log -1 --oneline; Write-Host "=========================================="; # Step 2: Check Python environment - name: Check Python environment shell: powershell run: | Write-Host "Python version:" try { python --version } catch { Write-Host "Python not installed" } Write-Host "Pip version:" try { pip --version } catch { Write-Host "Pip not installed" } # Step 3: Install dependencies - name: Install dependencies shell: powershell run: | Write-Host "Installing psycopg2-binary..." python -m pip install --upgrade pip if ($LASTEXITCODE -ne 0) { Write-Host "Failed to upgrade pip" exit 1 } pip install psycopg2-binary if ($LASTEXITCODE -ne 0) { Write-Host "Failed to install psycopg2-binary" exit 1 } Write-Host "Dependencies installed successfully" # Step 4: Create GUI version record - name: Create version record id: create_version shell: powershell run: | Write-Host "Starting GUI version release process..." Write-Host "Commit hash: ${{ github.sha }}" Write-Host "Commit author: ${{ github.actor }}" Write-Host "Branch: ${{ github.ref_name }}" # Retry mechanism: maximum 3 attempts $SUCCESS = $false for ($i = 1; $i -le 3; $i++) { Write-Host "Attempt $i to create version record..." python .gitea/scripts/gui_version_creator.py if ($LASTEXITCODE -eq 0) { Write-Host "Version record created successfully" $SUCCESS = $true break } else { Write-Host "Attempt $i failed" if ($i -eq 3) { Write-Host "All 3 attempts failed" } else { Write-Host "Waiting 5 seconds before retry..." Start-Sleep -Seconds 5 } } } if (-not $SUCCESS) { Write-Host "Version creation failed" exit 1 } # Verify version was updated if (Test-Path "config.py") { $configContent = Get-Content "config.py" -Raw if ($configContent -match 'APP_VERSION\s*=\s*"([\d.]+)"') { $VERSION = $matches[1] Write-Host "Version updated successfully: $VERSION" } } env: DB_HOST: 8.155.9.53 DB_NAME: ai_web DB_USER: user_emKCAb DB_PASSWORD: password_ee2iQ3 DB_PORT: 5400 # Step 4.5: Build production executable - name: Build production executable if: success() shell: powershell run: | Write-Host "=========================================="; Write-Host "Step 4.5: Build production executable"; Write-Host "=========================================="; python build_production.py; if ($LASTEXITCODE -ne 0) { Write-Host "Build failed"; exit 1; } Write-Host "Production build completed successfully"; Write-Host ""; # Step 4.6: Build NSIS installer - name: Build NSIS installer if: success() shell: powershell run: | Write-Host "=========================================="; Write-Host "Step 4.6: Build NSIS installer"; Write-Host "=========================================="; cd installer; python build_installer.py; if ($LASTEXITCODE -ne 0) { Write-Host "Installer build failed"; exit 1; } $installers = Get-ChildItem -Path "output" -Filter "*.exe" -ErrorAction SilentlyContinue; if (-not $installers -or $installers.Count -eq 0) { Write-Host "No installer file found"; exit 1; } $installerName = $installers[0].Name; $installerSize = [math]::Round($installers[0].Length / 1MB, 2); Write-Host "Installer built successfully"; Write-Host " Filename: $installerName"; Write-Host " Size: $installerSize MB"; Write-Host ""; # Step 4.7: Upload installer to KS3 - name: Upload installer to KS3 if: success() shell: powershell run: | Write-Host "=========================================="; Write-Host "Step 4.7: Upload installer to KS3"; Write-Host "=========================================="; pip install ks3 2>$null; python .gitea/scripts/upload_installer_to_ks3.py; if ($LASTEXITCODE -ne 0) { Write-Host "KS3 upload failed, but version release continues"; Write-Host " You can manually upload the installer later"; } else { Write-Host "Installer uploaded to KS3 successfully"; } Write-Host ""; # Step 5: Commit version changes - name: Commit version changes if: success() shell: powershell run: | Write-Host "Committing version changes..."; $VERSION = ""; if (Test-Path "config.py") { $configContent = Get-Content "config.py" -Raw; if ($configContent -match 'APP_VERSION\s*=\s*"([\d.]+)"') { $VERSION = $matches[1]; Write-Host "New version: $VERSION"; } } git config user.name "Gitea Actions Bot"; git config user.email "bot@gitea.local"; Write-Host "Adding files..."; git add config.py; git add version_history.json; Write-Host "Checking changes..."; git status; $hasChanges = git diff --staged --quiet; if ($LASTEXITCODE -ne 0) { $BRANCH = "${{ github.ref_name }}"; Write-Host "Committing to branch: $BRANCH"; git commit -m "[skip ci] Update version to v$VERSION"; Write-Host "Pulling latest changes before push..."; git pull --rebase origin $BRANCH; if ($LASTEXITCODE -eq 0) { Write-Host "Pushing changes..."; git push origin $BRANCH; Write-Host "Changes committed and pushed"; } else { Write-Host "Pull failed, trying force push..."; git push origin $BRANCH; } } else { Write-Host "No changes to commit"; } # Step 6: Display summary - name: Display summary if: always() shell: powershell run: | $VERSION = "Unknown"; if (Test-Path "config.py") { $configContent = Get-Content "config.py" -Raw; if ($configContent -match 'APP_VERSION\s*=\s*"([\d.]+)"') { $VERSION = $matches[1]; } } Write-Host "=========================================="; Write-Host "GUI Version Release Summary"; Write-Host "=========================================="; Write-Host "Author: ${{ github.actor }}"; Write-Host "Branch: ${{ github.ref_name }}"; Write-Host "Version: $VERSION"; Write-Host "Time: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"; Write-Host "Commit: ${{ github.sha }}"; Write-Host "==========================================";