diff --git a/Jenkinsfile.ci b/Jenkinsfile.ci index 51612d5..7e75d8f 100644 --- a/Jenkinsfile.ci +++ b/Jenkinsfile.ci @@ -97,9 +97,75 @@ pipeline { always { script { node { + junit testResults: 'backend/pytest.xml', allowEmptyResults: true + + try { + if (env.CHANGE_ID) { + def owner = null + def repo = null + def giteaBase = null + + if (env.CHANGE_URL) { + def u = new URL(env.CHANGE_URL) + giteaBase = "${u.protocol}://${u.host}" + def path = u.path // /gitea/OpenBokeron/TallerCiCd/pulls/29 + def m = (path =~ /\/gitea\/([^\/]+)\/([^\/]+)\/pulls\/\d+/) + if (m) { + owner = m[0][1] + repo = m[0][2] + } + } + + if ((!owner || !repo) && env.GIT_URL) { + def m = (env.GIT_URL =~ /[:\/]([^\/:]+)\/([^\/]+?)(?:\.git)?$/) + if (m) { + owner = m[0][1] + repo = m[0][2] + } + + if (!giteaBase) giteaBase = 'https://openbokeron.org' // AJUSTA si hace falta + } + + if (owner && repo && giteaBase) { + def pr = env.CHANGE_ID + def result = currentBuild.currentResult + def emoji = (result == 'SUCCESS') ? '✅' : (result == 'UNSTABLE') ? '⚠️' : '❌' + + def msg = "${emoji} Jenkins: **${result}**\\n\\n" + + "- Job: `${env.JOB_NAME}`\\n" + + "- Build: #${env.BUILD_NUMBER}\\n" + + "- Commit: `${env.GIT_COMMIT?.take(7) ?: env.COMMIT_SHORT}`\\n" + + "- URL: ${env.BUILD_URL}" + + def url = "${giteaBase}/gitea/api/v1/repos/${owner}/${repo}/issues/${pr}/comments" + + withCredentials([string(credentialsId: 'gitea-jenkins-bot-token', variable: 'GITEA_TOKEN')]) { + sh """ + set -e + curl -sS -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + --data @- \ + '${url}' <<'JSON' +{"body":"${msg.replace('\\', '\\\\').replace('"','\\"')}"} +JSON + """ + } + echo "Comentado en PR #${pr} (${owner}/${repo})." + } else { + echo "No pude deducir owner/repo/baseURL; no comento en la PR." + } + } else { + echo "No es build de PR (CHANGE_ID vacío); no comento." + } + } catch (err) { + echo "Fallo al comentar en PR: ${err}" + } + cleanWs() } } } } + }