2022-02-23 07:18:03 -05:00
@Library('hibernate-jenkins-pipeline-helpers@1.5') _
2022-05-12 06:44:38 -04:00
// Avoid running the pipeline on branch indexing
if (currentBuild.getBuildCauses().toString().contains('BranchIndexingCause')) {
2023-10-06 09:01:00 -04:00
print "INFO: Build skipped due to trigger being Branch Indexing"
currentBuild.result = 'NOT_BUILT'
return
2022-05-12 06:44:38 -04:00
}
2023-10-09 10:05:39 -04:00
def throttleCount
// Don't build the TCK on PRs, unless they use the tck label
if ( env.CHANGE_ID != null ) {
if ( !pullRequest.labels.contains( 'tck' ) ) {
print "INFO: Build skipped because pull request doesn't have 'tck' label"
return
}
throttleCount = 20
}
else {
throttleCount = 1
}
2022-05-12 06:44:38 -04:00
2022-02-23 07:18:03 -05:00
pipeline {
agent {
label 'LongDuration'
}
tools {
jdk 'OpenJDK 11 Latest'
}
2022-04-25 10:06:53 -04:00
options {
2023-10-09 10:05:39 -04:00
rateLimitBuilds(throttle: [count: throttleCount, durationName: 'day', userBoost: true])
2022-04-25 10:06:53 -04:00
buildDiscarder(logRotator(numToKeepStr: '3', artifactNumToKeepStr: '3'))
2022-05-12 06:44:38 -04:00
disableConcurrentBuilds(abortPrevious: true)
2022-04-25 10:06:53 -04:00
}
2022-02-23 07:18:03 -05:00
parameters {
choice(name: 'IMAGE_JDK', choices: ['jdk11'], description: 'The JDK base image version to use for the TCK image.')
2024-05-02 09:45:03 -04:00
string(name: 'TCK_VERSION', defaultValue: '3.1.4', description: 'The version of the Jakarta JPA TCK i.e. `2.2.0` or `3.0.1`')
string(name: 'TCK_SHA', defaultValue: 'a78631a230169eea9b952b4743fd48c31ed2bcdc4ff4cff88418113463798d76', description: 'The SHA256 of the Jakarta JPA TCK that is distributed under https://download.eclipse.org/jakartaee/persistence/3.1/jakarta-persistence-tck-${TCK_VERSION}.zip.sha256')
2024-03-07 05:30:13 -05:00
string(name: 'TCK_URL', defaultValue: '', description: 'The URL from which to download the TCK ZIP file. Only needed for testing staged builds. Ensure the TCK_VERSION variable matches the ZIP file name suffix.')
2022-02-23 07:18:03 -05:00
booleanParam(name: 'NO_SLEEP', defaultValue: true, description: 'Whether the NO_SLEEP patch should be applied to speed up the TCK execution')
}
stages {
stage('Build') {
steps {
script {
docker.withRegistry('https://index.docker.io/v1/', 'hibernateci.hub.docker.com') {
docker.image('openjdk:11-jdk').pull()
}
}
dir('hibernate') {
checkout scm
2023-10-09 09:27:12 -04:00
sh './gradlew publishToMavenLocal -PmavenMirror=nexus-load-balancer-c4cf05fd92f43ef8.elb.us-east-1.amazonaws.com -DjakartaJpaVersion=3.1.0'
2022-02-23 07:18:03 -05:00
script {
env.HIBERNATE_VERSION = sh (
script: "grep hibernateVersion gradle/version.properties|cut -d'=' -f2",
returnStdout: true
).trim()
}
}
dir('tck') {
checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[url: 'https://github.com/hibernate/jakarta-tck-runner.git']]]
2024-03-07 05:30:13 -05:00
script {
if ( params.TCK_URL == null || params.TCK_URL.isEmpty() ) {
sh "cd jpa-3.1; docker build -f Dockerfile.${params.IMAGE_JDK} -t jakarta-tck-runner --build-arg TCK_VERSION=${params.TCK_VERSION} --build-arg TCK_SHA=${params.TCK_SHA} ."
}
else {
2024-04-30 13:12:18 -04:00
sh "cd jpa-3.1; docker build -f Dockerfile.${params.IMAGE_JDK} -t jakarta-tck-runner --build-arg TCK_VERSION=${params.TCK_VERSION} --build-arg TCK_SHA=${params.TCK_SHA} --build-arg TCK_URL=${params.TCK_URL} ."
2024-03-07 05:30:13 -05:00
}
}
2022-02-23 07:18:03 -05:00
}
}
}
stage('Run TCK') {
steps {
sh """ \
2022-03-29 10:03:19 -04:00
rm -Rf ./results
2022-02-23 07:18:03 -05:00
docker rm -f tck || true
docker volume rm -f tck-vol || true
docker volume create tck-vol
docker run -v ~/.m2/repository/org/hibernate:/root/.m2/repository/org/hibernate:z -v tck-vol:/tck/persistence-tck/tmp/:z -e NO_SLEEP=${params.NO_SLEEP} -e HIBERNATE_VERSION=$HIBERNATE_VERSION --name tck jakarta-tck-runner
docker cp tck:/tck/persistence-tck/tmp/ ./results
"""
archiveArtifacts artifacts: 'results/**'
script {
failures = sh (
script: """ \
set +x
while read line; do
if [[ "\$line" != *"Passed." ]]; then
echo "\$line"
fi
done <results/JTreport/text/summary.txt
""",
returnStdout: true
).trim()
if ( !failures.isEmpty() ) {
echo "Some TCK tests failed:"
echo failures
currentBuild.result = 'FAILURE'
}
}
}
}
}
post {
always {
2022-05-12 06:44:38 -04:00
configFileProvider([configFile(fileId: 'job-configuration.yaml', variable: 'JOB_CONFIGURATION_FILE')]) {
notifyBuildResult maintainers: (String) readYaml(file: env.JOB_CONFIGURATION_FILE).notification?.email?.recipients
}
2022-02-23 07:18:03 -05:00
}
}
}