Skip to content

Commit

Permalink
Initial Installer Jenkinsfile
Browse files Browse the repository at this point in the history
  • Loading branch information
steelhead31 committed Oct 8, 2024
1 parent e2cda30 commit 3b63ceb
Showing 1 changed file with 239 additions and 0 deletions.
239 changes: 239 additions & 0 deletions linux/sfr.dev/Jenkinsfile
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"
}
}
}
}
}

0 comments on commit 3b63ceb

Please sign in to comment.