diff --git a/Jenkinsfile b/Jenkinsfile index 9990ba9..657e473 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,36 +1,118 @@ 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" + deleteDir() + checkout scm - 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 + bat ''' + call "C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Auxiliary\\Build\\vcvars64.bat" - cmake --build build\\windows + 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 - if exist dist\\windows rmdir /s /q dist\\windows - mkdir dist\\windows + cmake --build build\\windows - copy build\\windows\\test_app.exe dist\\windows\\test_app.exe + if exist dist\\windows rmdir /s /q dist\\windows + mkdir dist\\windows - for /f "delims=" %%i in ('dir /b /s C:\\vcpkg\\installed\\x64-windows\\tools\\Qt6\\windeployqt.exe') do set WINDEPLOYQT=%%i + copy build\\windows\\test_app.exe dist\\windows\\test_app.exe - "%WINDEPLOYQT%" --release --no-translations 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 - xcopy /Y /I C:\\vcpkg\\installed\\x64-windows\\bin\\*.dll dist\\windows\\ -''' + "%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 + """) + } + } + } + } + } } \ No newline at end of file