mirror of
https://github.com/truenas/scale-build.git
synced 2026-02-15 07:29:12 +00:00
NAS-136793 / TEN-2441 Correction to Publish-ISO pipeline file creation (#890)
* Correction to Publish-ISO pipeline file creation * Temporary change to avoid repush * Correction to sort * Correction to sort * Adding logging to check which builds are being added * Adding debug to investigate why file is not being updated * Removing the skip parameter
This commit is contained in:
@@ -18,53 +18,118 @@ pipeline {
|
||||
sh 'ssh jenkins@staging.sys.ixsystems.net mkdir -p /zdata/update.sys.truenas.net/scale/TrueNAS-SCALE-Goldeye-Nightlies || true'
|
||||
sh 'scp upload/files/manifest.json upload/files/TrueNAS-SCALE-*.update jenkins@staging.sys.ixsystems.net:/zdata/update.sys.truenas.net/scale/TrueNAS-SCALE-Goldeye-Nightlies/'
|
||||
}
|
||||
}
|
||||
stage('Update Releases JSON') {
|
||||
steps {
|
||||
script {
|
||||
// Download existing releases.json if it exists
|
||||
sh '''scp jenkins@staging.sys.ixsystems.net:/zdata/update.sys.truenas.net/scale/TrueNAS-SCALE-Goldeye-Nightlies/releases.json upload/files/releases.json || echo "{}" > upload/files/releases.json'''
|
||||
|
||||
// Read manifest.json and extract information
|
||||
def manifestContent = readFile('upload/files/manifest.json')
|
||||
def manifest = readJSON text: manifestContent
|
||||
|
||||
// Read existing releases.json
|
||||
def existingReleasesContent = readFile('upload/files/releases.json')
|
||||
def existingReleases = readJSON text: existingReleasesContent
|
||||
|
||||
// Add new release entry to existing releases dictionary
|
||||
// Copy all manifest fields and add profile
|
||||
def releaseEntry = [:]
|
||||
manifest.each { key, value ->
|
||||
releaseEntry[key] = value
|
||||
}
|
||||
releaseEntry.profile = 'DEVELOPER'
|
||||
existingReleases[manifest.version] = releaseEntry
|
||||
|
||||
// Keep only the last 30 entries by date
|
||||
if (existingReleases.size() > 30) {
|
||||
// Sort entries by date and keep only the 30 most recent
|
||||
def sortedEntries = existingReleases.sort { a, b ->
|
||||
Date.parse("yyyy-MM-dd'T'HH:mm:ss'Z'", b.value.date).compareTo(
|
||||
Date.parse("yyyy-MM-dd'T'HH:mm:ss'Z'", a.value.date)
|
||||
)
|
||||
}
|
||||
def recentEntries = sortedEntries.take(30)
|
||||
existingReleases = [:]
|
||||
recentEntries.each { entry ->
|
||||
existingReleases[entry.key] = entry.value
|
||||
}
|
||||
}
|
||||
|
||||
// Write updated releases.json
|
||||
writeJSON file: 'upload/files/releases.json', json: existingReleases, pretty: 4
|
||||
|
||||
// Upload updated releases.json
|
||||
sh '''scp upload/files/releases.json jenkins@staging.sys.ixsystems.net:/zdata/update.sys.truenas.net/scale/TrueNAS-SCALE-Goldeye-Nightlies/'''
|
||||
sh 'rm -rf upload/files'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Update Releases JSON') {
|
||||
steps {
|
||||
script {
|
||||
// Download existing releases.json if it exists
|
||||
sh '''scp jenkins@staging.sys.ixsystems.net:/zdata/update.sys.truenas.net/scale/TrueNAS-SCALE-Goldeye-Nightlies/releases.json upload/files/releases.json || echo "{}" > upload/files/releases.json'''
|
||||
|
||||
// Read manifest.json and extract information
|
||||
def manifestContent = readFile('upload/files/manifest.json')
|
||||
def manifest = readJSON text: manifestContent
|
||||
|
||||
// Read existing releases.json
|
||||
def existingReleasesContent = readFile('upload/files/releases.json')
|
||||
def existingReleases = readJSON text: existingReleasesContent
|
||||
|
||||
// Add new release entry to existing releases dictionary
|
||||
// Copy all manifest fields and add profile
|
||||
def releaseEntry = [:]
|
||||
manifest.each { key, value ->
|
||||
releaseEntry[key] = value
|
||||
}
|
||||
releaseEntry.profile = 'DEVELOPER'
|
||||
existingReleases[manifest.version] = releaseEntry
|
||||
|
||||
echo "Adding new build to releases.json: ${manifest.version} (date: ${manifest.date})"
|
||||
|
||||
// Keep only the last 30 entries by date
|
||||
if (existingReleases.size() > 30) {
|
||||
// Convert map to list of entries with dates
|
||||
def entriesList = []
|
||||
existingReleases.each { version, data ->
|
||||
entriesList.add([version: version, data: data, dateStr: data.date])
|
||||
}
|
||||
|
||||
// Manual bubble sort (Jenkins-safe, no closures or comparators)
|
||||
for (int i = 0; i < entriesList.size() - 1; i++) {
|
||||
for (int j = 0; j < entriesList.size() - i - 1; j++) {
|
||||
// Compare dates as strings (ISO 8601 format is lexicographically sortable)
|
||||
if (entriesList[j].dateStr < entriesList[j + 1].dateStr) {
|
||||
// Swap entries
|
||||
def temp = entriesList[j]
|
||||
entriesList[j] = entriesList[j + 1]
|
||||
entriesList[j + 1] = temp
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Keep only the first 30 entries
|
||||
def maxEntries = Math.min(30, entriesList.size())
|
||||
def recentEntries = entriesList[0..(maxEntries - 1)]
|
||||
|
||||
echo "Total builds before cleanup: ${entriesList.size()}"
|
||||
echo "Keeping the ${maxEntries} most recent builds"
|
||||
|
||||
// Log which builds are being removed
|
||||
if (entriesList.size() > 30) {
|
||||
echo "Removing ${entriesList.size() - 30} old builds:"
|
||||
for (int i = 30; i < entriesList.size(); i++) {
|
||||
echo " - Removing: ${entriesList[i].version} (date: ${entriesList[i].dateStr})"
|
||||
}
|
||||
}
|
||||
|
||||
// Rebuild the releases map
|
||||
existingReleases = [:]
|
||||
recentEntries.each { entry ->
|
||||
existingReleases[entry.version] = entry.data
|
||||
}
|
||||
}
|
||||
|
||||
// Log final list of builds in releases.json
|
||||
echo "\nFinal releases.json will contain ${existingReleases.size()} builds:"
|
||||
def sortedVersions = []
|
||||
existingReleases.each { version, data ->
|
||||
sortedVersions.add([version: version, date: data.date])
|
||||
}
|
||||
// Sort for display
|
||||
for (int i = 0; i < sortedVersions.size() - 1; i++) {
|
||||
for (int j = 0; j < sortedVersions.size() - i - 1; j++) {
|
||||
if (sortedVersions[j].date < sortedVersions[j + 1].date) {
|
||||
def temp = sortedVersions[j]
|
||||
sortedVersions[j] = sortedVersions[j + 1]
|
||||
sortedVersions[j + 1] = temp
|
||||
}
|
||||
}
|
||||
}
|
||||
sortedVersions.each { build ->
|
||||
echo " - ${build.version} (date: ${build.date})"
|
||||
}
|
||||
|
||||
// Write updated releases.json
|
||||
writeJSON file: 'upload/files/releases.json', json: existingReleases, pretty: 4
|
||||
|
||||
// Verify the file was written
|
||||
sh 'ls -la upload/files/releases.json'
|
||||
echo "releases.json file size: "
|
||||
sh 'wc -c upload/files/releases.json'
|
||||
|
||||
// Show first few lines of the file for verification
|
||||
echo "First 10 lines of releases.json:"
|
||||
sh 'head -10 upload/files/releases.json'
|
||||
|
||||
// Upload updated releases.json
|
||||
echo "Uploading releases.json to staging server..."
|
||||
sh '''scp upload/files/releases.json jenkins@staging.sys.ixsystems.net:/zdata/update.sys.truenas.net/scale/TrueNAS-SCALE-Goldeye-Nightlies/'''
|
||||
|
||||
// Verify upload succeeded
|
||||
echo "Verifying remote file..."
|
||||
sh '''ssh jenkins@staging.sys.ixsystems.net "ls -la /zdata/update.sys.truenas.net/scale/TrueNAS-SCALE-Goldeye-Nightlies/releases.json"'''
|
||||
|
||||
sh 'rm -rf upload/files'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user