forked from adoptium/installer
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e2cda30
commit 3b63ceb
Showing
1 changed file
with
239 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,239 @@ | ||
/* Used By Jenkins Job sfr-build-linux-package-modular */ | ||
|
||
/* Constant Declarations */ | ||
|
||
def NODE_LABEL = 'linux&&x64' // Default node | ||
def PRODUCT = 'temurin' | ||
def JVM = 'hotspot' | ||
def baseURL = "https://github.com/adoptium/" | ||
def binaryRepo = "${params.Version.replace('jdk', 'temurin')}-binaries/releases/tag/${params.Tag}" | ||
def binaryDLRepo = "${params.Version.replace('jdk', 'temurin')}-binaries/releases/download/${params.Tag}" | ||
def fullURL = "${baseURL}/${binaryRepo}" | ||
def dlURL = "${baseURL}/${binaryDLRepo}" | ||
|
||
// Global Variables | ||
def DLfilenames = [] | ||
def JDKArray = [] | ||
def ModifiedJDKArray = [] | ||
def distro = "" | ||
def arch = "" | ||
def ReleaseVersion = "" | ||
|
||
/* Pipeline Declaration */ | ||
|
||
pipeline { | ||
agent { | ||
label NODE_LABEL | ||
} | ||
tools { | ||
jfrog 'jfrog-cli' | ||
} | ||
options { | ||
timeout(time: 2, unit: 'HOURS') | ||
} | ||
|
||
parameters { | ||
string(name: 'Tag', defaultValue: 'jdk-23+37', description: 'Release Tag') | ||
string(name: 'Version', defaultValue: 'jdk23', description: 'Release Version') | ||
string(name: 'Artifacts_To_Copy', defaultValue: '**/alpine-linux/aarch64/temurin/*.tar.gz,**/alpine-linux/aarch64/temurin/*.zip,**/alpine-linux/aarch64/temurin/*.sha256.txt,**/alpine-linux/aarch64/temurin/*.msi,**/alpine-linux/aarch64/temurin/*.pkg,**/alpine-linux/aarch64/temurin/*.json,**/alpine-linux/aarch64/temurin/*.sig', description: 'Artifacts String') | ||
booleanParam(name: 'Release', defaultValue: false, description: 'Release Flag' ) | ||
booleanParam(name: 'Dry_Run', defaultValue: false, description: 'Release Dry Run') | ||
} | ||
|
||
stages { | ||
stage('Print Parameters') { | ||
steps { | ||
script { | ||
echo "Tag : ${params.Tag}" | ||
echo "Version : ${params.Version}" | ||
echo "Artifacts : ${params.Artifacts_To_Copy}" | ||
echo "Release : ${params.Release}" | ||
echo "Dry Run : ${params.Dry_Run}" | ||
} | ||
} | ||
} | ||
stage('Process Parameters') { | ||
when { | ||
expression { return params.Release } | ||
} | ||
steps { | ||
script{ | ||
// Figure Out Which Dist This Run Is For | ||
|
||
if (params.Artifacts_To_Copy.contains('alpine-linux')) { | ||
distro = "alpine-linux" | ||
} else if (params.Artifacts_To_Copy.contains('linux')) { | ||
distro = "linux" | ||
} else { | ||
error("The Artifacts Are For Neither Linux OR Alpine") | ||
} | ||
|
||
// Figure Out Which Arch This Run Is For | ||
if (params.Artifacts_To_Copy.contains('aarch64')) { | ||
arch = "aarch64" | ||
} else if (params.Artifacts_To_Copy.contains('x64')) { | ||
arch = "x64" | ||
} else { | ||
error("The Artifacts Are For An Unsupported Architecture") | ||
} | ||
|
||
// Parse The Version Tag, Into Usable Components | ||
def vername = '' | ||
def verversion = '' | ||
def verbuild = '' | ||
def split = (params.Tag =~ /(jdk)-(\d[\d.]*)([+_]\d+)?/) | ||
|
||
if (split.find()) { | ||
vername = split.group(1) | ||
verversion = split.group(2) | ||
verbuild = split.group(3)?.replaceAll("[+_]", "") | ||
} else { | ||
error("The version string format does not match the expected pattern.") | ||
} | ||
|
||
// Construct the Filename | ||
def filennameFinal ="" | ||
def filenamePrefix = "Open" | ||
def filenameSuffix = "tar.gz" | ||
def filenameVersion = params.Version.toUpperCase() + "U" | ||
def packageTypes = ['jdk', 'jre'] | ||
|
||
packageTypes.each { packageType -> | ||
filenameFinal = "${filenamePrefix}${filenameVersion}-${packageType}_${arch}_${distro}_${JVM}_${verversion}_${verbuild ?: 'N/A'}" | ||
def JDKFinal = "${filenameFinal}.${filenameSuffix}" | ||
def SHAFinal = "${JDKFinal}.sha256.txt" | ||
ReleaseVersion = "${verversion}_${verbuild ?: 'N/A'}" | ||
echo "JDK File Name : ${JDKFinal}" | ||
echo "SHA File Name : ${SHAFinal}" | ||
DLfilenames << JDKFinal | ||
DLfilenames << SHAFinal | ||
|
||
JDKArray << [ "${packageType}" , "${JDKFinal}", "${SHAFinal}" , "${distro}" , "${arch}" , "${ReleaseVersion}" ] | ||
} | ||
} | ||
} | ||
} | ||
stage('Validate Artifacts') { | ||
when { | ||
expression { return params.Release } | ||
} | ||
steps { | ||
script { | ||
echo "Validating Artifacts" | ||
// Debugging | ||
echo "Tuples :" | ||
echo "${JDKArray}" | ||
|
||
JDKArray.each { ArrayElement -> | ||
def PTYPE = ArrayElement[0] | ||
def PFILE = ArrayElement[1] | ||
def PSIGN = ArrayElement[2] | ||
def PDIST = ArrayElement[3] | ||
def PARCH = ArrayElement[4] | ||
def PVERS = ArrayElement[5] | ||
|
||
// Prepare For Downloads & Verification | ||
def Binurl = "${dlURL}/${PFILE}" | ||
def SHAurl = "${dlURL}/${PSIGN}" | ||
def Bincommand = "curl -L -O ${Binurl}" | ||
def Shacommand = "curl -L -O ${SHAurl}" | ||
|
||
echo "Downloading Binary: ${Binurl}" | ||
echo "Command : ${Bincommand}" | ||
echo "Downloading Signature: ${SHAurl}" | ||
echo "Command : ${Shacommand}" | ||
|
||
// Download Binary | ||
|
||
def Binresult = sh(script: Bincommand, returnStatus: true) | ||
|
||
if (Binresult != 0) { | ||
error("Failed to download ${PFILE}. File not found or an error occurred.") | ||
} else { | ||
echo "Downloaded: ${PFILE}" | ||
} | ||
// Download SHA | ||
def Sharesult = sh(script: Shacommand, returnStatus: true) | ||
if (Sharesult != 0) { | ||
error("Failed to download ${PSIGN}. File not found or an error occurred.") | ||
} else { | ||
echo "Downloaded: ${PSIGN}" | ||
} | ||
|
||
// Validate Checksum Of Binary Using Signature | ||
|
||
def expectedChecksum = sh(script: "cat ${PSIGN} | awk '{print \$1}'", returnStdout: true).trim() | ||
def calculatedChecksum = sh(script: "sha256sum ${PFILE} | awk '{print \$1}'", returnStdout: true).trim() | ||
if (expectedChecksum != calculatedChecksum) { | ||
error("Checksum mismatch for ${PFILE}. Expected: ${expectedChecksum}, but found: ${calculatedChecksum}.") | ||
} else { | ||
echo "Checksum validation successful for ${PFILE}." | ||
} | ||
// Remove This Later | ||
sh "rm -rf ${PFILE}" | ||
sh "rm -rf ${PSIGN}" | ||
echo "Expected Sum : ${expectedChecksum}" | ||
echo "Actual Sum : ${calculatedChecksum}" | ||
// Remove | ||
// Create New Array With Checksum | ||
echo "Debug 00" | ||
//echo "${PTYPE} , ${PFILE} , ${PSIGN} , ${PDIST} , ${PARCH} , ${PVERS} , ${calculatedChecksum}" | ||
ModifiedJDKArray << [ "${PTYPE}" , "${PFILE}" , "${PSIGN}" , "${PDIST}" , "${PARCH}" , "${PVERS}" , "${calculatedChecksum}" ] | ||
|
||
} | ||
JDKArray = ModifiedJDKArray | ||
} | ||
} | ||
} | ||
stage('Generate Spec File') { | ||
when { | ||
expression { return params.Release } | ||
} | ||
steps { | ||
script { | ||
echo "Validating Required Parameters For Generate Spec File Program" | ||
// sh "pwd" | ||
// sh "ls -ltr" | ||
echo "Debug 01" | ||
// echo "${JDKArray}" | ||
ModifiedJDKArray.each { ArrayElement -> | ||
echo "${ArrayElement}" | ||
|
||
} | ||
} | ||
} | ||
} | ||
stage('Build & Archive Package') { | ||
when { | ||
expression { return params.Release } | ||
} | ||
steps { | ||
script { | ||
echo "Build Packages" | ||
|
||
} | ||
} | ||
} | ||
stage('Publish Packages') { | ||
when { | ||
expression { return params.Release } | ||
} | ||
steps { | ||
script { | ||
echo "Publish Packages" | ||
} | ||
} | ||
} | ||
stage('Store Spec File') { | ||
when { | ||
expression { return params.Release } | ||
} | ||
steps { | ||
script { | ||
echo "Store Spec File" | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|