Automate docker build on PRs (#647)

This commit is contained in:
Benoit TELLIER
2026-03-16 14:28:46 +01:00
committed by GitHub
parent 314f1985b9
commit 29f17ce86d
Vendored
+48
View File
@@ -43,6 +43,54 @@ pipeline {
sh 'npx prettier --check .' sh 'npx prettier --check .'
} }
} }
stage('Deploy docker image (PR)') {
when {
changeRequest()
}
steps {
script {
// If the PR comes from a fork, verify the fork owner is a linagora org member
if (env.CHANGE_FORK) {
def forkOwner = env.CHANGE_FORK
def memberStatus = sh(
script: """curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: token \${GITHUB_CREDENTIAL_PSW}" \
"https://api.github.com/orgs/linagora/members/${forkOwner}" """,
returnStdout: true
).trim()
echo "GitHub org membership check returned HTTP ${memberStatus} for '${forkOwner}'"
if (memberStatus == '204') {
echo "Fork owner '${forkOwner}' is a linagora org member, proceeding."
} else if (memberStatus == '404') {
error("Fork owner '${forkOwner}' is not a member of the linagora organization. Skipping deploy.")
} else if (memberStatus == '401' || memberStatus == '403') {
error("Authentication/permission error validating fork owner: ${memberStatus}")
} else {
error("GitHub API error ${memberStatus} while checking membership for '${forkOwner}'")
}
}
def dockerTag = "pr-${env.CHANGE_ID}"
env.DOCKER_TAG = dockerTag
echo "Docker tag: ${dockerTag}"
sh 'npm run build'
sh 'docker build -t linagora/twake-calendar-web:$DOCKER_TAG .'
sh 'echo $DOCKER_HUB_CREDENTIAL_PSW | docker login -u $DOCKER_HUB_CREDENTIAL_USR --password-stdin'
sh 'docker push linagora/twake-calendar-web:$DOCKER_TAG'
sh """
HTTP_STATUS=\$(curl -s -o /tmp/gh_comment_response.json -w "%{http_code}" -X POST \\
-H "Authorization: token \${GITHUB_CREDENTIAL_PSW}" \\
-H "Content-Type: application/json" \\
-d "{\\"body\\": \\"Docker image published for this PR: linagora/twake-calendar-web:${dockerTag}\\"}" \\
"https://api.github.com/repos/linagora/twake-calendar-frontend/issues/\${CHANGE_ID}/comments")
if [ "\$HTTP_STATUS" -lt 200 ] || [ "\$HTTP_STATUS" -ge 300 ]; then
echo "WARNING: GitHub API comment failed with HTTP \$HTTP_STATUS"
cat /tmp/gh_comment_response.json
fi
"""
}
}
}
stage('Deploy docker images') { stage('Deploy docker images') {
when { when {
anyOf { anyOf {