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')]) { writeFile file: 'taiga-post.ps1', text: ''' $ErrorActionPreference = "Continue" $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: $env:BUILD_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 ''' withEnv(["BUILD_RESULT=${result}"]) { powershell(returnStatus: true, file: 'taiga-post.ps1') } } } } } } }