pipeline { agent none environment { TAIGA_PROJECT_ID = '1' TAIGA_URL = 'https://taiga.grigowashere.ru' } stages { stage('Build Windows Qt') { agent { label 'windows' } steps { deleteDir() checkout scm bat ''' call "C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Auxiliary\\Build\\vcvars64.bat" cmake -S . -B build\\windows -G Ninja ^ -DCMAKE_BUILD_TYPE=Release ^ -DCMAKE_TOOLCHAIN_FILE=C:\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake ^ -DVCPKG_TARGET_TRIPLET=x64-windows cmake --build build\\windows if exist dist\\windows rmdir /s /q dist\\windows mkdir dist\\windows copy build\\windows\\test_app.exe dist\\windows\\test_app.exe for /f "delims=" %%i in ('dir /b /s C:\\vcpkg\\installed\\x64-windows\\tools\\Qt6\\windeployqt.exe') do set WINDEPLOYQT=%%i "%WINDEPLOYQT%" --release --no-translations dist\\windows\\test_app.exe xcopy /Y /I C:\\vcpkg\\installed\\x64-windows\\bin\\*.dll dist\\windows\\ ''' archiveArtifacts artifacts: 'dist/windows/**', fingerprint: true } } } post { always { node('windows') { script { def result = currentBuild.currentResult ?: 'UNKNOWN' withCredentials([string(credentialsId: 'TAIGA_TOKEN', variable: 'TAIGA_TOKEN')]) { powershell(returnStatus: true, script: """ \$commitMsg = git log -1 --pretty=%B \$match = [regex]::Match(\$commitMsg, 'TG-(\\d+)') if (-not \$match.Success) { Write-Host "No TG-* reference found" exit 0 } \$ref = \$match.Groups[1].Value \$headers = @{ Authorization = "Bearer \$env:TAIGA_TOKEN" "Content-Type" = "application/json" } \$targets = @( @{ endpoint = "userstories"; label = "User Story" }, @{ endpoint = "issues"; label = "Issue" }, @{ endpoint = "tasks"; label = "Task" } ) \$found = \$null foreach (\$target in \$targets) { try { \$url = "\$env:TAIGA_URL/api/v1/\$(\$target.endpoint)/by_ref?project=\$env:TAIGA_PROJECT_ID&ref=\$ref" \$data = Invoke-RestMethod -Uri \$url -Headers \$headers -Method Get if (\$data.id) { \$found = @{ endpoint = \$target.endpoint label = \$target.label data = \$data } break } } catch { Write-Host "Taiga lookup warning: \$($_.Exception.Message)" } } if (-not \$found) { Write-Host "Taiga TG-\$ref not found" exit 0 } \$comment = "Jenkins Windows Qt build #$env:BUILD_NUMBER: ${result}`n$env:BUILD_URL" \$body = @{ comment = \$comment version = \$found.data.version } | ConvertTo-Json try { \$url = "\$env:TAIGA_URL/api/v1/\$(\$found.endpoint)/\$(\$found.data.id)" Invoke-RestMethod -Uri \$url -Headers \$headers -Method Patch -Body \$body Write-Host "Commented Taiga TG-\$ref (\$(\$found.label))" } catch { Write-Host "Taiga comment warning: \$($_.Exception.Message)" } exit 0 """) } } } } } }