2016-12-02 06:07:22 -05:00
// This script is used as input to the Jenkins Job DSL plugin to create all the build-jobs that
2020-08-16 06:58:54 -04:00
// Apache POI uses on the public Jenkins instance at https://ci-builds.apache.org/job/POI/
2016-12-02 06:07:22 -05:00
//
// See https://github.com/jenkinsci/job-dsl-plugin/wiki for information about the DSL, you can
2020-03-08 16:17:11 -04:00
// use https://job-dsl.herokuapp.com/ to validate the code before checkin
2020-01-07 16:15:33 -05:00
//
2016-12-01 14:09:26 -05:00
2016-12-01 15:49:29 -05:00
def triggerSundays = '' '
# only run this once per week on Sundays
H H * * 0
'' '
2016-12-01 14:09:31 -05:00
2020-02-09 03:05:16 -05:00
def xercesUrl = 'https://repo1.maven.org/maven2/xerces/xercesImpl/2.6.1/xercesImpl-2.6.1.jar'
2018-09-07 16:47:08 -04:00
def xercesLib = './xercesImpl-2.6.1.jar'
2017-07-31 18:56:08 -04:00
2016-12-01 14:09:26 -05:00
def poijobs = [
2021-08-09 18:34:23 -04:00
[ name: 'POI-DSL-1.8' , trigger: 'H */12 * * *' , gradle: true
2017-09-16 05:08:45 -04:00
] ,
2020-03-18 18:16:51 -04:00
[ name: 'POI-DSL-OpenJDK' , jdk: 'OpenJDK 1.8' , trigger: 'H */12 * * *' ,
// only a limited set of nodes still have OpenJDK 8 (on Ubuntu) installed
2020-08-16 09:06:29 -04:00
slaves: 'ubuntu' ,
2021-08-16 18:17:05 -04:00
skipcigame: true , gradle: true
2020-03-18 18:16:51 -04:00
] ,
2021-09-12 17:15:25 -04:00
// [ name: 'POI-DSL-1.10', jdk: '1.10', trigger: triggerSundays, skipcigame: true,
// // let's save some CPU cycles here, 10 had EOL in September 2018
// disabled: true
// ],
2021-08-16 19:09:54 -04:00
[ name: 'POI-DSL-1.11' , jdk: '1.11' , trigger: triggerSundays , skipcigame: true , gradle: true
2018-08-26 07:41:25 -04:00
] ,
2021-09-12 17:15:25 -04:00
// [ name: 'POI-DSL-1.12', jdk: '1.12', trigger: triggerSundays, skipcigame: true,
// // let's save some CPU cycles here, 12 is not a LTS and JDK 13 is GA as of 17 September 2019
// disabled: true
// ],
// [ name: 'POI-DSL-1.13', jdk: '1.13', trigger: triggerSundays, skipcigame: true,
// // let's save some CPU cycles here, 13 is not a LTS and JDK 14 is GA as of 17 March 2020
// disabled: true
// ],
// [ name: 'POI-DSL-1.14', jdk: '1.14', trigger: triggerSundays, skipcigame: true,
// // let's save some CPU cycles here, 14 is not a LTS and JDK 15 is GA as of 15 September 2020
// disabled: true
// ],
2021-10-14 07:12:59 -04:00
[ name: 'POI-DSL-1.15' , jdk: '1.15' , trigger: triggerSundays , skipcigame: true , gradle: true ,
2021-11-30 01:19:53 -05:00
// let's save some CPU cycles here, 15 is not a LTS and JDK 16 is GA
2021-10-14 06:46:53 -04:00
disabled: true
2020-04-11 19:16:18 -04:00
] ,
2021-11-30 01:19:53 -05:00
[ name: 'POI-DSL-1.16' , jdk: '1.16' , trigger: 'H */12 * * *' , skipcigame: true , gradle: true ,
// let's save some CPU cycles here, 16 is not a LTS and JDK 17 is GA
disabled: true
2020-10-25 05:24:01 -04:00
] ,
2021-09-23 13:03:27 -04:00
[ name: 'POI-DSL-1.17' , jdk: '1.17' , trigger: 'H */12 * * *' , skipcigame: true , gradle: true
] ,
2021-12-02 08:45:50 -05:00
[ name: 'POI-DSL-1.18' , jdk: '1.18' , trigger: triggerSundays , skipcigame: true , gradle: true
2021-11-30 01:19:53 -05:00
] ,
2021-08-29 15:11:57 -04:00
[ name: 'POI-DSL-IBM-JDK' , jdk: 'IBMJDK' , trigger: triggerSundays , skipcigame: true , gradle: true
2017-09-16 05:08:45 -04:00
] ,
2021-09-23 13:03:27 -04:00
[ name: 'POI-DSL-old-Xerces' , trigger: triggerSundays , skipcigame: true ,
2020-02-21 17:11:26 -05:00
shell: "test -s ${xercesLib} || wget -O ${xercesLib} ${xercesUrl}\n" ,
2017-09-16 05:08:45 -04:00
// the property triggers using Xerces as XML Parser and previously showed some exception that can occur
2017-09-22 16:06:31 -04:00
properties: [ "-Dadditionaljar=${xercesLib}" ]
2017-09-16 05:08:45 -04:00
] ,
2021-09-12 17:15:25 -04:00
// [ name: 'POI-DSL-Maven', trigger: 'H */4 * * *', maven: true,
// // not needed any more now that we use Gradle for SonarQube
// disabled: true
// ],
2017-09-16 05:08:45 -04:00
[ name: 'POI-DSL-regenerate-javadoc' , trigger: triggerSundays , javadoc: true
] ,
2021-03-28 15:54:54 -04:00
// it was impossible to make this run stable in Gradle, thus disabling this for now
[ name: 'POI-DSL-API-Check' , trigger: '@daily' , apicheck: true , disabled: true
2017-09-16 05:08:45 -04:00
] ,
2021-09-12 17:15:25 -04:00
// [ name: 'POI-DSL-Gradle', trigger: triggerSundays, email: 'centic@apache.org', gradle: true
// ],
2021-09-01 18:32:48 -04:00
[ name: 'POI-DSL-no-scratchpad' , trigger: triggerSundays , noScratchpad: true , gradle: true
2017-09-16 05:08:45 -04:00
] ,
2021-11-25 05:05:00 -05:00
[ name: 'POI-DSL-saxon-test' , trigger: triggerSundays , saxonTest: true , gradle: true
] ,
2021-09-12 16:31:43 -04:00
// [ name: 'POI-DSL-SonarQube', jdk: '1.11', trigger: 'H 7 * * *', maven: true, sonar: true, skipcigame: true,
// email: 'kiwiwings@apache.org',
// // replaced by Gradle-based build now
// disabled: true
// ],
2021-05-14 07:38:27 -04:00
[ name: 'POI-DSL-SonarQube-Gradle' , jdk: '1.11' , trigger: 'H 7 * * *' , gradle: true , sonar: true , skipcigame: true
2017-09-16 05:08:45 -04:00
] ,
2021-08-20 16:35:13 -04:00
[ name: 'POI-DSL-Windows-1.8' , trigger: 'H */12 * * *' , windows: true , slaves: 'Windows' , gradle: true
2017-09-16 05:08:45 -04:00
] ,
2021-09-12 17:15:25 -04:00
// [ name: 'POI-DSL-Windows-1.12', jdk: '1.12', trigger: triggerSundays, windows: true, slaves: 'Windows', skipcigame: true, gradle: true,
// // let's save some CPU cycles here, 12 is not a LTS and JDK 13 is GA now
// disabled: true
// ],
// [ name: 'POI-DSL-Windows-1.14', jdk: '1.14', trigger: triggerSundays, windows: true, slaves: 'Windows', skipcigame: true, gradle: true,
// // let's only verify the latest two JDKs
// disabled: true
// ],
2021-10-14 07:19:00 -04:00
[ name: 'POI-DSL-Windows-1.15' , jdk: '1.15' , trigger: triggerSundays , windows: true , slaves: 'Windows' , skipcigame: true , gradle: true ,
2021-11-30 01:19:53 -05:00
// let's save some CPU cycles here, 14 is not a LTS and JDK 15 is GA as of 15 September 2020
2021-10-14 06:46:53 -04:00
disabled: true
] ,
2021-11-30 01:19:53 -05:00
[ name: 'POI-DSL-Windows-1.16' , jdk: '1.16' , trigger: 'H */12 * * *' , windows: true , slaves: 'Windows' , skipcigame: true , gradle: true ,
// let's save some CPU cycles here, 16 is not a LTS and JDK 17 is GA
disabled: true
2021-05-23 15:15:26 -04:00
] ,
2021-10-14 06:46:53 -04:00
[ name: 'POI-DSL-Windows-1.17' , jdk: '1.17' , trigger: 'H */12 * * *' , windows: true , slaves: 'Windows' , skipcigame: true , gradle: true
2019-01-22 05:07:02 -05:00
] ,
2021-12-02 08:45:50 -05:00
[ name: 'POI-DSL-Windows-1.18' , jdk: '1.18' , trigger: triggerSundays , windows: true , slaves: 'Windows' , skipcigame: true , gradle: true
2021-11-30 01:19:53 -05:00
] ,
2018-12-28 16:43:49 -05:00
[ name: 'POI-DSL-Github-PullRequests' , trigger: '' , githubpr: true , skipcigame: true ,
// ensure the file which is needed from the separate documentation module does exist
// as we are checking out from git, we do not have the reference checked out here
2019-05-12 19:34:29 -04:00
addShell: 'mkdir -p src/documentation\ntouch src/documentation/RELEASE-NOTES.txt'
2018-12-28 06:17:57 -05:00
] ,
2016-12-01 14:09:26 -05:00
]
2018-10-02 04:15:41 -04:00
def xmlbeansjobs = [
2019-06-09 06:04:42 -04:00
[ name: 'POI-XMLBeans-DSL-1.8' , jdk: '1.8' , trigger: 'H */12 * * *' , skipcigame: true ,
2018-12-28 06:17:57 -05:00
] ,
[ name: 'POI-XMLBeans-DSL-1.11' , jdk: '1.11' , trigger: triggerSundays , skipcigame: true ,
2019-03-03 09:09:58 -05:00
] ,
[ name: 'POI-XMLBeans-DSL-1.12' , jdk: '1.12' , trigger: triggerSundays , skipcigame: true ,
2020-01-10 16:04:14 -05:00
// let's save some CPU cycles here, 12 is not a LTS and JDK 13 is GA now
disabled: true
] ,
[ name: 'POI-XMLBeans-DSL-1.14' , jdk: '1.14' , trigger: triggerSundays , skipcigame: true ,
2020-11-13 13:18:05 -05:00
// let's save some CPU cycles here, 14 is not a LTS and JDK 15 is GA now
disabled: true
] ,
[ name: 'POI-XMLBeans-DSL-1.15' , jdk: '1.15' , trigger: triggerSundays , skipcigame: true ,
2021-03-20 06:03:36 -04:00
// let's save some CPU cycles here, 15 is not a LTS and JDK 16 is GA now
disabled: true
] ,
[ name: 'POI-XMLBeans-DSL-1.16' , jdk: '1.16' , trigger: triggerSundays , skipcigame: true ,
2021-11-30 01:19:53 -05:00
// let's save some CPU cycles here, 16 is not a LTS and JDK 17 is GA
disabled: true
2021-10-01 09:28:10 -04:00
] ,
[ name: 'POI-XMLBeans-DSL-1.17' , jdk: '1.17' , trigger: triggerSundays , skipcigame: true ,
2021-11-30 01:19:53 -05:00
] ,
[ name: 'POI-XMLBeans-DSL-1.18' , jdk: '1.18' , trigger: triggerSundays , skipcigame: true ,
2018-10-02 04:15:41 -04:00
]
]
2016-12-08 04:36:48 -05:00
def svnBase = 'https://svn.apache.org/repos/asf/poi/trunk'
2018-10-02 04:15:41 -04:00
def xmlbeansSvnBase = 'https://svn.apache.org/repos/asf/xmlbeans/trunk'
2017-09-16 09:06:59 -04:00
def defaultJdk = '1.8'
2016-12-31 04:43:13 -05:00
def defaultTrigger = 'H/15 * * * *' // check SCM every 60/15 = 4 minutes
2016-12-01 14:09:31 -05:00
def defaultEmail = 'dev@poi.apache.org'
2020-10-19 18:02:00 -04:00
def defaultAnt = 'ant_1.10_latest'
def defaultAntWindows = 'ant_1.10_latest_windows'
def defaultMaven = 'maven_3_latest'
2020-08-16 09:06:29 -04:00
// H29 seems to have very little memory
def defaultSlaves = '(ubuntu)&&!beam&&!cloud-slave&&!H29'
2016-12-01 14:09:26 -05:00
def jdkMapping = [
2020-10-19 17:10:00 -04:00
'1.8' : 'jdk_1.8_latest' ,
'1.10' : 'jdk_10_latest' ,
'1.11' : 'jdk_11_latest' ,
'1.12' : 'jdk_12_latest' ,
'1.13' : 'jdk_13_latest' ,
'1.14' : 'jdk_14_latest' ,
'1.15' : 'jdk_15_latest' ,
2020-10-25 05:24:01 -04:00
'1.16' : 'jdk_16_latest' ,
2021-10-01 06:45:15 -04:00
'1.17' : 'jdk_17_latest' ,
2021-11-30 01:19:53 -05:00
'1.18' : 'jdk_18_latest' ,
2021-08-16 18:17:05 -04:00
'OpenJDK 1.8' : 'adoptopenjdk_hotspot_8u282' ,
2020-10-19 17:10:00 -04:00
'IBMJDK' : 'ibmjdk_1.8.0_261' ,
2016-12-01 14:09:26 -05:00
]
2017-09-16 05:08:45 -04:00
static def shellEx ( def context , String cmd , def poijob ) {
if ( poijob . windows ) {
context . batchFile ( cmd )
} else {
context . shell ( cmd )
}
2017-07-31 14:21:48 -04:00
}
2017-07-31 18:56:08 -04:00
def defaultDesc = '' '
2018-09-28 13:43:07 -04:00
< img src = "https://poi.apache.org/images/project-header.png" / >
2016-12-01 15:49:29 -05:00
< p >
Apache POI - the Java API for Microsoft Documents
< / p >
< p >
2016-12-30 17:12:14 -05:00
< b > This is an automatically generated Job Config , do not edit it here !
2017-01-30 17:05:29 -05:00
Instead change the Jenkins Job DSL at < a href = "https://svn.apache.org/repos/asf/poi/trunk/jenkins" > https: //svn.apache.org/repos/asf/poi/trunk/jenkins</a>,
2016-12-30 17:12:14 -05:00
see < a href = "https://github.com/jenkinsci/job-dsl-plugin/wiki" > https: //github.com/jenkinsci/job-dsl-plugin/wiki</a>
for more details about the DSL . < / b >
2016-12-03 14:50:28 -05:00
< / p > '' '
2017-07-31 18:56:08 -04:00
def apicheckDesc = '' '
2016-12-03 14:50:28 -05:00
< p >
2019-11-13 12:18:15 -05:00
< b > < a href = "https://sonarcloud.io/dashboard?id=poi-parent" target = "_blank" > Sonar reports < /a></ b > -
2016-12-30 17:12:14 -05:00
< p >
2021-04-08 16:10:53 -04:00
< b > < a href = "lastSuccessfulBuild/artifact/build/poi/build/reports/japi.html" > API Check POI < /a></ b >
< b > < a href = "lastSuccessfulBuild/artifact/build/poi-ooxml/build/reports/japi.html" > API Check POI - OOXML < /a></ b >
< b > < a href = "lastSuccessfulBuild/artifact/build/poi-excelant/build/reports/japi.html" > API Check POI - Excelant < /a></ b >
< b > < a href = "lastSuccessfulBuild/artifact/build/poi-scratchpad/build/reports/japi.html" > API Check POI - Scratchpad < /a></ b >
2016-12-30 17:12:14 -05:00
2016-12-01 15:49:29 -05:00
< / p >
2016-12-03 14:50:28 -05:00
'' '
2017-07-31 18:56:08 -04:00
def sonarDesc = '' '
2016-12-01 15:49:29 -05:00
< p >
2016-12-30 17:12:14 -05:00
< b > < a href = "lastSuccessfulBuild/findbugsResult/" target = "_blank" > Findbugs report of latest build < /a></ b > -
2019-11-13 12:18:15 -05:00
< b > < a href = "https://sonarcloud.io/dashboard?id=poi-parent" target = "_blank" > Sonar reports < /a></ b > -
2016-12-30 17:12:14 -05:00
< b > < a href = "lastSuccessfulBuild/artifact/build/coverage/index.html" target = "_blank" > Coverage of latest build < /a></ b >
2016-12-01 15:49:29 -05:00
< / p >
2017-07-31 18:56:08 -04:00
'' '
def shellCmdsUnix =
2021-04-26 11:12:15 -04:00
'' ' # remove some outdated directories that should not be there any more
rm - rf examples excelant integrationtest main ooxml ooxml - schema scratchpad build . javacheck . xml
# show which files are currently modified in the working copy
2019-04-13 09:06:43 -04:00
svn status | | true
2021-05-15 03:20:46 -04:00
# make sure no changed module - class - files are lingering on
2021-05-23 15:15:29 -04:00
svn revert poi * /src/ * /java9/ module - info . * | | true
2017-07-31 18:56:08 -04:00
# print out information about which exact version of java we are using
echo Java - Home: $JAVA_HOME
ls - al $JAVA_HOME /
2017-10-09 15:35:43 -04:00
ls - al $JAVA_HOME / bin
2017-07-31 18:56:08 -04:00
$JAVA_HOME /bin/ java - version
2017-10-09 15:35:43 -04:00
echo which java
which java
java - version
echo which javac
which javac
javac - version
2019-03-03 09:09:58 -05:00
echo Ant - Home: $ANT_HOME
ls - al $ANT_HOME
echo which ant
2019-04-22 15:32:07 -04:00
which ant | | true
2019-03-03 09:09:58 -05:00
ant - version
2017-10-09 15:35:43 -04:00
echo '<project default="test"><target name="test"><echo>Java ${ant.java.version}/${java.version}</echo><exec executable="javac"><arg value="-version"/></exec></target></project>' > build . javacheck . xml
ant - f build . javacheck . xml - v
2017-07-31 18:56:08 -04:00
POIJOBSHELL
# ignore any error message
exit 0 '' '
def shellCmdsWin =
2017-09-16 05:08:45 -04:00
'' ' @echo off
2017-07-31 18:56:08 -04:00
: : show which files are currently modified in the working copy
svn status
2021-05-15 03:20:46 -04:00
: : make sure no changed module - class - files are lingering on
2021-05-23 15:15:29 -04:00
svn revert poi * \ \ src \ \ * \ \ java9 \ \ module - info . *
2017-07-31 18:56:08 -04:00
: : print out information about which exact version of java we are using
echo Java - Home: % JAVA_HOME %
dir "%JAVA_HOME:\\\\=\\%"
"%JAVA_HOME%/bin/java" - version
POIJOBSHELL
: : ignore any error message
exit / b 0 '' '
poijobs . each { poijob - >
def jdkKey = poijob . jdk ? : defaultJdk
def trigger = poijob . trigger ? : defaultTrigger
def email = poijob . email ? : defaultEmail
def slaves = poijob . slaves ? : defaultSlaves + ( poijob . slaveAdd ? : '' )
2019-04-22 14:48:35 -04:00
def antRT = poijob . windows ? defaultAntWindows : defaultAnt
2017-07-31 18:56:08 -04:00
2020-08-16 05:51:23 -04:00
job ( 'POI/' + poijob . name ) {
2017-07-31 18:56:08 -04:00
if ( poijob . disabled ) {
disabled ( )
}
description ( defaultDesc + ( poijob . apicheck ? apicheckDesc : sonarDesc ) )
2016-12-30 17:12:14 -05:00
logRotator {
numToKeep ( 5 )
artifactNumToKeep ( 1 )
}
label ( slaves )
environmentVariables {
env ( 'LANG' , 'en_US.UTF-8' )
2021-11-07 09:59:48 -05:00
env ( 'CI_BUILD' , 'TRUE' )
2018-09-28 13:43:07 -04:00
if ( jdkKey = = '1.10' ) {
2018-08-23 05:03:49 -04:00
// when using JDK 9/10 for running Ant, we need to provide more modules for the forbidden-api-checks task
2018-08-26 07:41:25 -04:00
// on JDK 11 and newer there is no such module any more, so do not add it here
2017-08-19 12:31:33 -04:00
env ( 'ANT_OPTS' , '--add-modules=java.xml.bind --add-opens=java.xml/com.sun.org.apache.xerces.internal.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED' )
2016-12-01 15:49:29 -05:00
}
2018-07-19 18:55:51 -04:00
env ( 'FORREST_HOME' , poijob . windows ? 'f:\\jenkins\\tools\\forrest\\latest' : '/home/jenkins/tools/forrest/latest' )
2016-12-30 17:12:14 -05:00
}
2020-08-16 05:51:23 -04:00
2016-12-30 17:12:14 -05:00
wrappers {
timeout {
2021-11-30 01:19:56 -05:00
absolute ( 300 )
2016-12-30 17:12:14 -05:00
abortBuild ( )
writeDescription ( 'Build was aborted due to timeout' )
2018-05-28 15:43:19 -04:00
}
preBuildCleanup {
2020-06-20 12:31:10 -04:00
/* remove xmlbeans while 4.0 is not stable */
includePattern ( '**/lib/ooxml/xmlbeans*.jar' )
2020-06-20 01:27:08 -04:00
includePattern ( '**/lib/ooxml/ooxml*.jar' )
2020-12-13 13:11:48 -05:00
/* remove ooxml-schemas while the builds migrate to 5th edition */
includePattern ( 'build/xmlbean-*/**' )
2021-03-27 19:16:45 -04:00
/* remove remaining src debris */
includePattern ( 'src/*/build/**' )
2018-05-28 15:43:19 -04:00
}
2016-12-30 17:12:14 -05:00
if ( poijob . sonar ) {
2019-11-12 19:00:26 -05:00
credentialsBinding {
string ( 'POI_SONAR_TOKEN' , 'sonarcloud-poi' )
}
2016-12-30 17:12:14 -05:00
configure { project - >
project / buildWrappers < < 'hudson.plugins.sonar.SonarBuildWrapper' { }
2016-12-30 15:35:13 -05:00
}
2016-12-01 15:49:29 -05:00
}
2016-12-30 17:12:14 -05:00
}
jdk ( jdkMapping . get ( jdkKey ) )
scm {
2018-12-28 06:17:57 -05:00
if ( poijob . githubpr ) {
git {
remote {
github ( 'apache/poi' )
refspec ( '+refs/pull/*:refs/remotes/origin/pr/*' )
}
branch ( '${sha1}' )
}
} else {
svn ( svnBase ) { svnNode - >
svnNode / browser(class: 'hudson.scm.browsers.ViewSVN') /
2020-03-08 16:17:11 -04:00
url < < 'https://svn.apache.org/viewcvs.cgi/?root=Apache-SVN'
2018-12-28 06:17:57 -05:00
}
2017-09-16 05:08:45 -04:00
}
2016-12-30 17:12:14 -05:00
}
2017-09-16 05:08:45 -04:00
checkoutRetryCount ( 3 )
2018-12-28 06:17:57 -05:00
if ( poijob . githubpr ) {
2018-12-28 15:19:58 -05:00
throttleConcurrentBuilds {
maxPerNode ( 1 )
maxTotal ( 1 )
}
2018-12-28 06:17:57 -05:00
parameters {
2018-12-28 14:52:54 -05:00
/ * plugin not available:
2018-12-28 06:17:57 -05:00
gitParam ( 'sha1' ) {
description ( 'Pull request' )
type ( 'BRANCH' )
2018-12-28 14:52:54 -05:00
} * /
stringParam ( 'sha1' , 'origin/pr/9/head' , 'Provide a branch-spec, e.g. origin/pr/9/head' )
2018-12-28 06:17:57 -05:00
}
triggers {
2020-08-16 05:51:23 -04:00
pullRequestBuildTrigger ( )
/ * githubPullRequest {
2018-12-28 06:17:57 -05:00
admins ( [ 'centic9' , 'poi-benchmark' , 'tballison' , 'gagravarr' , 'onealj' , 'pjfanning' , 'Alain-Bearez' ] )
userWhitelist ( [ 'centic9' , 'poi-benchmark' , 'tballison' , 'gagravarr' , 'onealj' , 'pjfanning' , 'Alain-Bearez' ] )
orgWhitelist ( [ 'apache' ] )
cron ( 'H/5 * * * *' )
triggerPhrase ( 'OK to test' )
2020-08-16 05:51:23 -04:00
} * /
2018-12-28 06:17:57 -05:00
}
} else {
triggers {
scm ( trigger )
}
2016-12-30 17:12:14 -05:00
}
2017-07-31 18:56:08 -04:00
def shellcmds = ( poijob . windows ? shellCmdsWin : shellCmdsUnix ) . replace ( 'POIJOBSHELL' , poijob . shell ? : '' )
2016-12-30 17:12:14 -05:00
// Create steps and publishers depending on the type of Job that is selected
2021-09-12 16:31:43 -04:00
if ( poijob . javadoc ) {
2016-12-30 17:12:14 -05:00
steps {
2017-07-31 14:21:48 -04:00
shellEx ( delegate , shellcmds , poijob )
2016-12-30 17:12:14 -05:00
ant {
targets ( [ 'clean' , 'javadocs' ] + ( poijob . properties ? : [ ] ) )
prop ( 'coverage.enabled' , true )
// Properties did not work, so I had to use targets instead
//properties(poijob.properties ?: '')
2017-07-31 11:29:28 -04:00
antInstallation ( antRT )
2016-12-30 17:12:14 -05:00
}
2018-07-19 17:49:49 -04:00
shellEx ( delegate , 'zip -r build/javadocs.zip build/site/apidocs' , poijob )
2016-12-01 15:49:29 -05:00
}
2016-12-30 17:12:14 -05:00
publishers {
if ( ! poijob . skipcigame ) {
configure { project - >
2017-03-10 15:13:46 -05:00
project / publishers < < 'hudson.plugins.cigame.GamePublisher' { }
}
}
mailer ( email , false , false )
}
} else if ( poijob . sonar ) {
steps {
2019-11-12 19:00:26 -05:00
shellEx ( delegate , shellcmds , poijob )
2019-11-12 18:30:01 -05:00
2019-11-12 19:00:26 -05:00
gradle {
switches ( '-PenableSonar' )
2020-10-25 15:29:46 -04:00
switches ( '-Dsonar.login=${POI_SONAR_TOKEN}' )
2020-10-25 12:07:58 -04:00
switches ( '-Dsonar.organization=apache' )
2020-10-25 15:29:46 -04:00
switches ( '-Dsonar.projectKey=poi-parent' )
2020-12-25 14:19:32 -05:00
switches ( '-Dsonar.host.url=https://sonarcloud.io' )
2021-09-14 17:33:56 -04:00
tasks ( 'clean' )
2020-10-25 15:30:00 -04:00
tasks ( 'check' )
2020-10-25 15:30:14 -04:00
tasks ( 'jacocoTestReport' )
2019-11-12 19:00:26 -05:00
tasks ( 'sonarqube' )
2021-04-06 16:23:44 -04:00
useWrapper ( true )
2017-03-10 15:13:46 -05:00
}
}
publishers {
2021-11-07 09:59:43 -05:00
// in archive, junit and jacoco publishers, matches beneath build/*/build/... are for Gradle-build results
archiveArtifacts ( 'build/dist/*.tar.gz,*/build/reports/**,poi-integration/build/test-results/**,*/build/libs/*.jar' )
archiveJunit ( '*/build/test-results/**/TEST-*.xml' ) {
testDataPublishers {
publishTestStabilityData ( )
}
}
jacocoCodeCoverage {
classPattern ( '*/build/classes' )
execPattern ( '*/build/*.exec,*/build/jacoco/*.exec' )
sourcePattern ( '*/src/main/java' )
exclusionPattern ( 'com/microsoft/**,org/openxmlformats/**,org/etsi/**,org/w3/**,schemaorg*/**,schemasMicrosoft*/**,org/apache/poi/hdf/model/hdftypes/definitions/*.class,org/apache/poi/hwpf/model/types/*.class,org/apache/poi/hssf/usermodel/DummyGraphics2d.class,org/apache/poi/sl/draw/binding/*.class' )
}
if ( ! poijob . skipcigame ) {
2017-03-10 15:13:46 -05:00
configure { project - >
2016-12-30 17:12:14 -05:00
project / publishers < < 'hudson.plugins.cigame.GamePublisher' { }
2016-12-01 15:49:29 -05:00
}
}
2016-12-30 17:12:14 -05:00
mailer ( email , false , false )
}
} else {
steps {
2017-07-31 14:21:48 -04:00
shellEx ( delegate , shellcmds , poijob )
2016-12-30 17:12:14 -05:00
if ( poijob . addShell ) {
2017-07-31 14:21:48 -04:00
shellEx ( delegate , poijob . addShell , poijob )
2016-12-30 17:12:14 -05:00
}
// For Jobs that should still have the default set of publishers we can configure different steps here
if ( poijob . gradle ) {
2021-08-20 16:53:13 -04:00
if ( ! poijob . windows ) {
// Gradle will not run any tests if the code is up-to-date, therefore manually mark the files as updated
shellEx ( delegate , 'touch --no-create build/*/build/test-results/TEST-*.xml build/*/build/test-results/test/TEST-*.xml' , poijob )
}
2021-04-06 16:42:32 -04:00
2016-12-30 17:12:14 -05:00
gradle {
2021-08-09 20:20:25 -04:00
tasks ( 'clean jenkins' )
2021-04-06 16:23:44 -04:00
useWrapper ( true )
2021-09-01 18:32:48 -04:00
if ( poijob . noScratchpad ) {
switches ( '-Pscratchpad.ignore=true' )
}
2021-11-25 05:05:00 -05:00
if ( poijob . saxonTest ) {
switches ( '-Psaxon.test=true' )
}
2016-12-30 17:12:14 -05:00
}
} else {
ant {
targets ( [ 'clean' , 'jenkins' ] + ( poijob . properties ? : [ ] ) )
2016-12-01 15:49:29 -05:00
prop ( 'coverage.enabled' , true )
// Properties did not work, so I had to use targets instead
//properties(poijob.properties ?: '')
2017-07-31 11:29:28 -04:00
antInstallation ( antRT )
2016-12-01 15:49:29 -05:00
}
2016-12-30 17:12:14 -05:00
ant {
targets ( [ 'run' ] + ( poijob . properties ? : [ ] ) )
2021-04-08 13:54:42 -04:00
buildFile ( 'poi-integration/build.xml' )
2016-12-30 17:12:14 -05:00
// Properties did not work, so I had to use targets instead
//properties(poijob.properties ?: '')
2017-07-31 11:29:28 -04:00
antInstallation ( antRT )
2016-12-01 15:49:29 -05:00
}
}
2016-12-30 17:12:14 -05:00
}
publishers {
2020-08-15 13:09:04 -04:00
recordIssues {
tools {
2020-08-16 05:51:23 -04:00
spotBugs {
2021-12-19 09:40:19 -05:00
pattern ( '*/build/reports/spotbugs/*.xml' )
2020-08-15 13:09:04 -04:00
reportEncoding ( 'UTF-8' )
}
}
2016-12-01 16:08:22 -05:00
}
2016-12-30 17:12:14 -05:00
// in archive, junit and jacoco publishers, matches beneath build/*/build/... are for Gradle-build results
2021-10-20 09:08:53 -04:00
archiveArtifacts ( 'build/dist/*.zip,build/dist/*.tgz,build/dist/maven/*/*.jar,build/coverage/**,build/hs_err*.log' )
2016-12-30 17:12:14 -05:00
warnings ( [ 'Java Compiler (javac)' , 'JavaDoc Tool' ] , null ) {
resolveRelativePaths ( )
2016-12-01 15:49:29 -05:00
}
2021-04-07 01:33:18 -04:00
archiveJunit ( '*/build/test-results/**/TEST-*.xml' ) {
2016-12-30 17:12:14 -05:00
testDataPublishers {
publishTestStabilityData ( )
2016-12-01 16:08:22 -05:00
}
2016-12-01 15:49:29 -05:00
}
2016-12-30 17:12:14 -05:00
jacocoCodeCoverage {
2021-03-27 21:12:58 -04:00
classPattern ( '*/build/classes' )
execPattern ( '*/build/*.exec,*/build/jacoco/*.exec' )
sourcePattern ( '*/src/main/java' )
2016-12-30 17:12:14 -05:00
exclusionPattern ( 'com/microsoft/**,org/openxmlformats/**,org/etsi/**,org/w3/**,schemaorg*/**,schemasMicrosoft*/**,org/apache/poi/hdf/model/hdftypes/definitions/*.class,org/apache/poi/hwpf/model/types/*.class,org/apache/poi/hssf/usermodel/DummyGraphics2d.class,org/apache/poi/sl/draw/binding/*.class' )
}
2016-12-02 07:52:05 -05:00
2016-12-30 17:12:14 -05:00
if ( ! poijob . skipcigame ) {
configure { project - >
project / publishers < < 'hudson.plugins.cigame.GamePublisher' { }
2016-12-01 15:49:29 -05:00
}
}
2016-12-30 17:12:14 -05:00
mailer ( email , false , false )
2016-12-01 15:49:29 -05:00
}
}
2020-08-16 05:51:23 -04:00
if ( poijob . githubpr ) {
configure {
it / 'properties' < < 'com.cloudbees.jenkins.plugins.git.vmerge.JobPropertyImpl' ( plugin: 'git-validated-merge' ) {
credentialsId ( 'ASF_Cloudbees_Jenkins_ci-builds' )
postBuildPushFailureHandler ( class: 'com.cloudbees.jenkins.plugins.git.vmerge.pbph.PushFailureIsFailure' )
}
}
}
2016-12-01 15:49:29 -05:00
}
2016-11-27 06:06:48 -05:00
}
2017-05-04 04:40:12 -04:00
2018-10-02 04:15:41 -04:00
xmlbeansjobs . each { xjob - >
def jdkKey = xjob . jdk ? : defaultJdk
def trigger = xjob . trigger ? : defaultTrigger
def email = xjob . email ? : defaultEmail
def slaves = xjob . slaves ? : defaultSlaves + ( xjob . slaveAdd ? : '' )
2019-04-22 14:48:35 -04:00
def antRT = xjob . windows ? defaultAntWindows : defaultAnt
2018-10-02 04:15:41 -04:00
2020-08-16 05:51:23 -04:00
job ( 'POI/' + xjob . name ) {
2018-10-02 04:15:41 -04:00
if ( xjob . disabled ) {
disabled ( )
}
description ( defaultDesc + ( xjob . apicheck ? apicheckDesc : sonarDesc ) )
logRotator {
numToKeep ( 5 )
artifactNumToKeep ( 1 )
}
label ( slaves )
environmentVariables {
env ( 'LANG' , 'en_US.UTF-8' )
if ( jdkKey = = '1.10' ) {
// when using JDK 9/10 for running Ant, we need to provide more modules for the forbidden-api-checks task
// on JDK 11 and newer there is no such module any more, so do not add it here
env ( 'ANT_OPTS' , '--add-modules=java.xml.bind --add-opens=java.xml/com.sun.org.apache.xerces.internal.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED' )
2021-10-01 09:28:10 -04:00
} else if ( jdkKey = = '1.11' | | jdkKey = = '1.12' | | jdkKey = = '1.13' | | jdkKey = = '1.14' | | jdkKey = = '1.15' | | jdkKey = = '1.16' | | jdkKey = = '1.17' ) {
2019-03-03 09:09:58 -05:00
env ( 'ANT_OPTS' , '--add-opens=java.xml/com.sun.org.apache.xerces.internal.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED' )
2018-10-02 04:15:41 -04:00
}
2019-03-03 09:09:58 -05:00
// will be needed for forbidden-apis-check: env('ANT_HOME', xjob.windows ? 'f:\\jenkins\\tools\\ant\\latest' : '/usr/share/ant')
2018-10-02 04:15:41 -04:00
env ( 'FORREST_HOME' , xjob . windows ? 'f:\\jenkins\\tools\\forrest\\latest' : '/home/jenkins/tools/forrest/latest' )
}
wrappers {
timeout {
absolute ( 180 )
abortBuild ( )
writeDescription ( 'Build was aborted due to timeout' )
}
}
jdk ( jdkMapping . get ( jdkKey ) )
scm {
svn ( xmlbeansSvnBase ) { svnNode - >
svnNode / browser(class: 'hudson.scm.browsers.ViewSVN') /
2020-03-08 16:17:11 -04:00
url < < 'https://svn.apache.org/viewcvs.cgi/?root=Apache-SVN'
2018-10-02 04:15:41 -04:00
}
}
checkoutRetryCount ( 3 )
triggers {
scm ( trigger )
}
2018-10-02 10:55:09 -04:00
def shellcmds = ( xjob . windows ? shellCmdsWin : shellCmdsUnix ) . replace ( 'POIJOBSHELL' , xjob . shell ? : '' )
2018-10-02 04:15:41 -04:00
// Create steps and publishers depending on the type of Job that is selected
steps {
shellEx ( delegate , shellcmds , xjob )
if ( xjob . addShell ) {
shellEx ( delegate , xjob . addShell , xjob )
}
ant {
targets ( [ 'clean' ] )
antInstallation ( antRT )
}
ant {
2019-03-03 09:09:58 -05:00
targets ( [ 'jenkins' ] )
2018-10-02 18:36:25 -04:00
antInstallation ( antRT )
}
2018-10-02 04:15:41 -04:00
}
publishers {
2021-10-20 09:08:53 -04:00
archiveArtifacts ( 'build/*.jar,build/*.zip,build/*.tgz,build/hs_err*.log' )
2018-10-02 04:15:41 -04:00
2019-03-03 09:09:58 -05:00
warnings ( [ 'Java Compiler (javac)' , 'JavaDoc Tool' ] , null ) {
resolveRelativePaths ( )
}
2021-04-07 01:33:18 -04:00
archiveJunit ( 'build/test-results/**/TEST-*.xml' ) {
2019-03-03 09:09:58 -05:00
testDataPublishers {
publishTestStabilityData ( )
}
}
2020-08-18 17:04:17 -04:00
recordIssues {
tools {
spotBugs {
pattern ( 'build/findbugs.xml' )
reportEncoding ( 'UTF-8' )
}
}
}
2019-03-03 09:09:58 -05:00
2018-10-02 04:15:41 -04:00
if ( ! xjob . skipcigame ) {
configure { project - >
project / publishers < < 'hudson.plugins.cigame.GamePublisher' { }
}
}
mailer ( email , false , false )
}
}
}
2017-09-17 07:07:21 -04:00
/ *
Add a special job which spans a two - dimensional matrix of all JDKs that we want to use and
2020-12-15 18:04:14 -05:00
all worker nodes that we would like to use and test if the java and ant binaries are available
2017-09-17 07:07:21 -04:00
on that machine correctly .
* /
2020-08-16 05:51:23 -04:00
matrixJob ( 'POI/POI-DSL-Test-Environment' ) {
2017-09-16 05:08:45 -04:00
description (
2020-08-16 05:51:23 -04:00
'' ' Check installed version of Java / Ant on all build - nodes
2017-09-16 05:08:45 -04:00
This job is used to verify which machines actually have the required programs installed .
2018-11-16 17:28:23 -05:00
Unfortunately we often see builds break because of changes / new machines . . . '' ' )
2017-09-16 05:08:45 -04:00
/ * throttleConcurrentBuilds {
maxPerNode ( 1 )
maxTotal ( 1 )
} * /
logRotator {
2018-11-16 17:28:23 -05:00
numToKeep ( 1 )
2017-09-16 05:08:45 -04:00
artifactNumToKeep ( 1 )
}
axes {
jdk (
2020-10-25 05:24:01 -04:00
'jdk_1.8_latest' ,
'jdk_10_latest' ,
'jdk_11_latest' ,
2021-11-30 01:19:53 -05:00
/ * don ' t look for JDKs that are out of support
2020-10-25 05:24:01 -04:00
'jdk_12_latest' ,
'jdk_13_latest' ,
'jdk_14_latest' ,
'jdk_15_latest' ,
2021-11-30 01:19:53 -05:00
'jdk_16_latest' , * /
2021-10-01 06:45:15 -04:00
'jdk_17_latest' ,
2021-11-30 01:19:53 -05:00
'jdk_18_latest' ,
2021-08-16 18:17:05 -04:00
'adoptopenjdk_hotspot_8u282' ,
2020-10-25 05:24:01 -04:00
'ibmjdk_1.8.0_261'
2017-09-16 05:08:45 -04:00
)
2020-10-25 12:07:58 -04:00
// Note H50 is reserved according to it's node-descripion
label ( 'Nodes' , 'H22' , 'H23' , 'H24' , 'H25' , 'H26' , 'H27' , 'H28' , 'H29' , 'H30' , 'H31' , 'H32' , 'H33' , 'H34' , 'H35' , 'H36' , 'H37' , 'H38' , 'H39' , 'H40' , 'H41' , 'H42' , 'H43' , 'H44' , 'H48' , 'lucene1' , 'lucene2' , 'master' )
2017-09-16 05:08:45 -04:00
}
steps {
2018-11-16 17:28:23 -05:00
conditionalSteps {
condition {
2021-11-07 10:00:07 -05:00
fileExists ( '/usr' , BaseDir . WORKSPACE )
}
runner ( 'DontRun' )
steps {
shell (
'' ' which svn | | true
2019-04-13 03:41:21 -04:00
which javac
2017-09-16 05:08:45 -04:00
javac - version
echo '<?xml version="1.0"?><project name="POI Build" default="test"><target name="test"><echo>Using Ant: ${ant.version} from ${ant.home}</echo></target></project>' > build . xml
'' ' )
2021-11-07 10:00:07 -05:00
ant {
antInstallation ( defaultAnt )
}
2017-09-16 05:08:45 -04:00
2021-11-07 10:00:07 -05:00
shell (
'' ' which mvn | | true
2019-10-26 02:35:15 -04:00
mvn - version | | true
2019-10-26 14:17:38 -04:00
echo '<project><modelVersion>4.0.0</modelVersion><groupId>org.apache.poi</groupId><artifactId>build-tst</artifactId><version>1.0.0</version></project>' > pom . xml
2019-10-26 01:37:32 -04:00
'' ' )
2021-11-07 10:00:07 -05:00
maven {
goals ( 'package' )
mavenInstallation ( defaultMaven )
}
}
2018-11-16 17:28:23 -05:00
}
conditionalSteps {
condition {
2021-11-07 10:00:07 -05:00
fileExists ( 'c:\\windows' , BaseDir . WORKSPACE )
}
runner ( 'DontRun' )
steps {
batchFile (
'' ' @echo off
2018-11-16 17:28:23 -05:00
echo .
where javac . exe
echo .
javac - version
echo .
2019-01-27 16:17:01 -05:00
echo ^ < ? xml version = ^ "1.0^" ? ^ > ^ < project name = ^ "POI Build^" default = ^ "test^" ^ > ^ < target name = ^ "test^" ^ > ^ < echo ^ > Using Ant: $ { ant . version } from $ { ant . home } , ant detected Java $ { ant . java . version } ( may be different than actual Java sometimes . . . ) , using Java: $ { java . version } /${java.runtime.version}/ $ { java . vm . version } /${java.vm.name} from ${java.vm.vendor} on ${os.name}: ${os.version}^</ echo ^ > ^ < /target^>^</ project ^ > > build . xml
2018-11-16 17:28:23 -05:00
'' ' )
2021-11-07 10:00:07 -05:00
ant {
antInstallation ( defaultAntWindows )
}
}
2018-11-16 17:28:23 -05:00
}
2017-09-16 05:08:45 -04:00
}
}
2017-05-04 04:52:44 -04:00
/* I tried to put the view into a sub-folder/ sub - view , but failed , there are multiple related
plugins so this is all a bit confusing : ( , see also https: //issues.apache.org/jira/browse/INFRA-14002
2017-05-04 04:40:12 -04:00
dashboardView ( "P/POI-new" ) {
columns {
status ( )
weather ( )
configureProject ( )
buildButton ( )
cronTrigger ( )
lastBuildConsole ( )
name ( )
lastSuccess ( )
lastFailure ( )
lastDuration ( )
//lastSuccessDescription()
jacoco ( )
}
2018-10-26 05:32:13 -04:00
description ( "<table>\n" +
" <tr>\n" +
" <td><img src=\"https://poi.apache.org/images/project-header.png\" /></td>\n" +
" <td> \n" +
" <p>Apache POI - the Java API for Microsoft Documents</p>\n" +
" <p><b>Most of the POI Jobs are automatically generated by Jenkins Job DSL\n" +
" at <a href=\"https://svn.apache.org/repos/asf/poi/trunk/jenkins\">https://svn.apache.org/repos/asf/poi/trunk/jenkins</a>,<br/>\n" +
" see <a href=\"https://github.com/jenkinsci/job-dsl-plugin/wiki\">https://github.com/jenkinsci/job-dsl-plugin/wiki</a>\n" +
" for more details about the DSL.</b>\n" +
" </p>\n" +
" <p>\n" +
" <b><a href=\"job/POI-DSL-1.8/lastSuccessfulBuild/findbugsResult/\" target=\"_blank\">Findbugs report of latest build</a></b> -\n" +
2019-11-13 12:18:15 -05:00
" <b><a href=\"https://sonarcloud.io/dashboard?id=poi-parent\" target=\"_blank\">Sonar reports</a></b> -\n" +
2018-10-26 05:32:13 -04:00
" <b><a href=\"job/POI-DSL-1.8/lastSuccessfulBuild/artifact/build/coverage/index.html\" target=\"_blank\">Coverage of latest build</a></b>\n" +
" </p>\n" +
" </td>\n" +
" </tr>\n" +
"</table>" )
2017-05-04 04:52:44 -04:00
filterBuildQueue ( false )
2017-05-04 04:40:12 -04:00
filterExecutors ( false )
// Job selection
2017-05-04 04:52:44 -04:00
jobs { * /
2017-09-16 05:08:45 -04:00
//regex(/.*POI.*/)
/ * }
2017-05-04 04:40:12 -04:00
2017-09-16 05:08:45 -04:00
// Layout
topPortlets {
jenkinsJobsList {
displayName ( 'POI jobs' )
2017-05-04 04:40:12 -04:00
}
2017-09-16 05:08:45 -04:00
}
leftPortlets {
testStatisticsChart ( )
}
rightPortlets {
testTrendChart ( )
}
bottomPortlets {
testStatisticsGrid ( )
buildStatistics ( )
}
2020-11-13 13:18:05 -05:00
} * /