Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
TCK:GF GENERIC API INTEGRATION
This Job creates a glassfish that integrates every Jakarta EE API into a Glassfish. For most API, a GF jar is simply replaced. For EL, JSF, JPA, JSON-P, MAIL, JWS, SAAJ, and JAX-WS, the API is packaged into a respective JAR in Glassfish. The modified JARS are archived with a API MANIFEST.MF and pom files included.
The Pipeline script uses Jenkins Multiline Script Parameter API_URLS, containing one or more links to OSS staging repository:
- https://oss.sonatype.org/content/groups/staging/jakarta/annotation/jakarta.annotation-api/1.3.4/jakarta.annotation-api-1.3.4.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/batch/jakarta.batch-api/1.0.1/jakarta.batch-api-1.0.1.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/ejb/jakarta.ejb-api/3.2.5/jakarta.ejb-api-3.2.5.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/el/jakarta.el-api/3.0.2/jakarta.el-api-3.0.2.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/enterprise/concurrent/jakarta.enterprise.concurrent-api/1.1.1/jakarta.enterprise.concurrent-api-1.1.1.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/enterprise/deploy/jakarta.enterprise.deploy-api/1.7.1/jakarta.enterprise.deploy-api-1.7.1.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/faces/jakarta.faces-api/2.3.1/jakarta.faces-api-2.3.1.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/interceptor/jakarta.interceptor-api/1.2.4/jakarta.interceptor-api-1.2.4.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/jms/jakarta.jms-api/2.0.2/jakarta.jms-api-2.0.2.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/json/jakarta.json-api/1.1.5/jakarta.json-api-1.1.5.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/jws/jakarta.jws-api/1.1.2-SNAPSHOT/jakarta.jws-api-1.1.2-20190620.133842-1.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/mail/jakarta.mail-api/1.6.4-SNAPSHOT/jakarta.mail-api-1.6.4-20190325.214843-5.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/management/j2ee/jakarta.management.j2ee-api/1.1.3/jakarta.management.j2ee-api-1.1.3.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/persistence/jakarta.persistence-api/2.2.2/jakarta.persistence-api-2.2.2.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/resource/jakarta.resource-api/1.7.3/jakarta.resource-api-1.7.3.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/security/auth/message/jakarta.security.auth.message-api/1.1.2/jakarta.security.auth.message-api-1.1.2.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/security/enterprise/jakarta.security.enterprise-api/1.0.1/jakarta.security.enterprise-api-1.0.1.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/security/jacc/jakarta.security.jacc-api/1.6.1/jakarta.security.jacc-api-1.6.1.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/servlet/jakarta.servlet-api/4.0.2/jakarta.servlet-api-4.0.2.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/servlet/jsp/jakarta.servlet.jsp-api/2.3.5/jakarta.servlet.jsp-api-2.3.5.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/servlet/jsp/jstl/jakarta.servlet.jsp.jstl-api/1.2.4/jakarta.servlet.jsp.jstl-api-1.2.4.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/transaction/jakarta.transaction-api/1.3.3-SNAPSHOT/jakarta.transaction-api-1.3.3-20181218.100605-5.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/websocket/jakarta.websocket-api/1.1.1/jakarta.websocket-api-1.1.1.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/json/bind/jakarta.json.bind-api/1.0.1/jakarta.json.bind-api-1.0.1.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/ws/rs/jakarta.ws.rs-api/2.1.5/jakarta.ws.rs-api-2.1.5.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/xml/bind/jakarta.xml.bind-api/2.4.0-SNAPSHOT/jakarta.xml.bind-api-2.4.0-20190620.133031-2.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/xml/registry/jakarta.xml.registry-api/1.0.9/jakarta.xml.registry-api-1.0.9.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/xml/rpc/jakarta.xml.rpc-api/1.1.3/jakarta.xml.rpc-api-1.1.3.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/xml/soap/jakarta.xml.soap-api/1.5.0-SNAPSHOT/jakarta.xml.soap-api-1.5.0-20190620.133129-1.jar
- https://oss.sonatype.org/content/groups/staging/jakarta/xml/ws/jakarta.xml.ws-api/2.4.0-SNAPSHOT/jakarta.xml.ws-api-2.4.0-20190620.134201-1.jar
#!/usr/bin/env groovy node { def GF_URL="http://central.maven.org/maven2/org/glassfish/main/distributions/glassfish/5.1.0/glassfish-5.1.0.zip" //def API_URLS="" MODULES="glassfish5/glassfish/modules" env.MODULES="${MODULES}" stage("Grab and unzip Glassfish") { sh '''#!/bin/bash -ex mkdir -p download cd download wget -q ${GF_URL} -O glassfish.zip #unzip unzip -q glassfish.zip -d ${WORKSPACE} [ -f "${WORKSPACE}/${MODULES}/javax.batch-api.jar" ] && mv ${WORKSPACE}/${MODULES}/javax.batch-api.jar ${WORKSPACE}/${MODULES}/jakarta.batch-api.jar ''' } stage ("Grab the APis") { sh '''#!/bin/bash -ex mkdir -p download/api cd download/api while IFS= read -r line; do wget -q $line; done <<< "${API_URLS}" #strip the api name of RC, SNAPSHOT, and version for jarfile in ${WORKSPACE}/download/api/*.jar; do echo $(basename $jarfile) | sed -e 's/-RC[0-9][0-9]*//' | sed -e 's/-SNAPSHOT//' | sed -e 's/-[0-9][0-9]*//' | sed -e 's/\\.[0-9][0-9]*//' | sed -e 's/-[0-9][0-9]*//' | sed -e 's/\\.[0-9][0-9]*//' | sed -e 's/\\.[0-9][0-9]*//' | sed -e 's/-[0-9][0-9]*//' | while IFS= read -r apijarname; do mv -v $(basename $jarfile) $apijarname; done done ''' } stage("Simple Replace API") { //sh 'mkdir -p ${MODULES}/endorsed' copyIfExistAndArchive("endorsed/jakarta.annotation-api.jar") copyIfExistAndArchive("jakarta.batch-api.jar") copyIfExistAndArchive("jakarta.ejb-api.jar") copyIfExistAndArchive("jakarta.enterprise.concurrent-api.jar") copyIfExistAndArchive("jakarta.enterprise.deploy-api.jar") copyIfExistAndArchive("jakarta.interceptor-api.jar") copyIfExistAndArchive("jakarta.jms-api.jar") copyIfExistAndArchive("jakarta.json.bind-api.jar") copyIfExistAndArchive("jakarta.management.j2ee-api.jar") copyIfExistAndArchive("jakarta.resource-api.jar") copyIfExistAndArchive("jakarta.security.auth.message-api.jar") copyIfExistAndArchive("jakarta.security.enterprise-api.jar") copyIfExistAndArchive("jakarta.security.jacc-api.jar") copyIfExistAndArchive("jakarta.servlet-api.jar") copyIfExistAndArchive("jakarta.servlet.jsp-api.jar") copyIfExistAndArchive("jakarta.servlet.jsp.jstl-api.jar") copyIfExistAndArchive("jakarta.transaction-api.jar") copyIfExistAndArchive("jakarta.websocket-api.jar") copyIfExistAndArchive("jakarta.ws.rs-api.jar") copyIfExistAndArchive("endorsed/jakarta.xml.bind-api.jar") copyIfExistAndArchive("jakarta.xml.registry-api.jar") copyIfExistAndArchive("jakarta.xml.rpc-api.jar") } stage("EL") { replaceApiInJar("jakarta.el-api.jar", "jakarta.el.jar", "EL") } stage("JSF") { replaceApiInJar("jakarta.faces-api.jar", "jakarta.faces.jar", "JSF") } stage("JSON-P") { replaceApiInJar("jakarta.json-api.jar", "jakarta.json.jar", "JSONP") } stage("JWS") { replaceApiInJar("jakarta.jws-api.jar", "endorsed/webservices-api-osgi.jar", "JWS") } stage("Mail") { replaceApiInJar("jakarta.mail-api.jar", "jakarta.mail.jar", "Mail") } stage("JPA") { replaceApiInJar("jakarta.persistence-api.jar", "jakarta.persistence.jar", "JPA") } stage("SAAJ") { replaceApiInJar("jakarta.xml.soap-api.jar", "endorsed/webservices-api-osgi.jar", "SAAJ") } stage("JAX-WS") { replaceApiInJar("jakarta.xml.ws-api.jar", "endorsed/webservices-api-osgi.jar", "JAXWS") } stage("Archive the GF") { sh '''#!/bin/bash -ex cd ${WORKSPACE} zip -r -q glassfish.zip glassfish5 ''' archiveArtifacts 'glassfish.zip' } } def copyIfExistAndArchive(String name) { env.JAR_NAME=name sh '''#!/bin/bash -ex if [ -f "download/api/$(basename ${JAR_NAME})" ]; then cp -v download/api/$(basename ${JAR_NAME}) ${MODULES}/${JAR_NAME} fi ''' archiveArtifacts artifacts: "${MODULES}/${name}", allowEmptyArchive: true } def replaceApiInJar(String apiJarName, String bundleJarName, String abbreviation) { env.API_JAR_NAME=apiJarName env.BUNDLE_JAR_NAME=bundleJarName env.ABBREVIATION=abbreviation if (fileExists("${env.WORKSPACE}/download/api/${apiJarName}")) { sh '''#!/bin/bash -ex #extract original api mkdir ${WORKSPACE}/download/bundlejar cd ${WORKSPACE}/download/bundlejar jar -xf ${WORKSPACE}/${MODULES}/${BUNDLE_JAR_NAME} #extract new api mkdir ${WORKSPACE}/download/newapi cd ${WORKSPACE}/download/newapi jar -xf ${WORKSPACE}/download/api/${API_JAR_NAME} mv ${WORKSPACE}/download/newapi/META-INF/MANIFEST.MF ${WORKSPACE}/download/newapi/META-INF/MANIFEST.${ABBREVIATION}.MF mv ${WORKSPACE}/download/newapi/META-INF/maven ${WORKSPACE}/download/newapi/META-INF/maven.${ABBREVIATION} #copy the content cp -a ${WORKSPACE}/download/newapi/. ${WORKSPACE}/download/bundlejar #recreate api jar cd ${WORKSPACE}/download jar cfm $(basename ${BUNDLE_JAR_NAME}) bundlejar/META-INF/MANIFEST.MF -C bundlejar . #replace the API in GF cp $(basename ${BUNDLE_JAR_NAME}) ${WORKSPACE}/${MODULES}/${BUNDLE_JAR_NAME} mkdir -p ${WORKSPACE}/archive cp $(basename ${BUNDLE_JAR_NAME}) ${WORKSPACE}/archive/$(basename ${BUNDLE_JAR_NAME} .jar).${ABBREVIATION}.jar #cleanup rm -rf ${WORKSPACE}/download/newapi rm -rf ${WORKSPACE}/download/bundlejar ''' def archiveJarName = sh ( script: "echo archive/\$(basename \${BUNDLE_JAR_NAME} .jar).\${ABBREVIATION}.jar", returnStdout:true ) archiveArtifacts artifacts: "${archiveJarName}" } }