diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 261dae42ee5..99f26c0203a 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,2 @@ eclipse.preferences.version=1 -encoding//eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/testResults.php=UTF-8 encoding/=UTF-8 diff --git a/JenkinsJobs/AutomatedTests/integrationTests.jenkinsfile b/JenkinsJobs/AutomatedTests/integrationTests.jenkinsfile index 05d2f12709d..1e679480e21 100644 --- a/JenkinsJobs/AutomatedTests/integrationTests.jenkinsfile +++ b/JenkinsJobs/AutomatedTests/integrationTests.jenkinsfile @@ -55,6 +55,9 @@ pipeline { extensions: [cloneOption(depth: 1, shallow: true, noTags: true), sparseCheckout([ [path: 'JenkinsJobs/buildConfigurations.json'], [path: 'JenkinsJobs/shared/utilities.groovy'], + [path: 'scripts/releng'], + [path: 'eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles'], + ])]) script { def buildConfigurations = readJSON(file: 'JenkinsJobs/buildConfigurations.json') @@ -104,20 +107,34 @@ pipeline { localResultsDirectory="workarea/${buildId}/eclipse-testing/results" ssh genie.releng@projects-storage.eclipse.org mkdir -p ${remoteResultsDirectory} if [ -d "${localResultsDirectory}/xml" ] && [ -z "$(find ${localResultsDirectory}/xml -maxdepth 0 -empty)" ]; then + + # As long as not all tests run with Java-25 (or later) we cannot use multi-file Source Programs and have to compile manually + pushd scripts/releng + javac TestResultsGenerator.java + javac utilities/JSON.java + javac utilities/OS.java + javac utilities/XmlProcessorFactoryRelEng.java + # Generate new summary file + java \ + -DxmlDirectory="${WORKSPACE}/${localResultsDirectory}/xml" \ + -DtestsConfigExpected=${JOB_BASE_NAME} \ + -DtestManifestFile="${WORKSPACE}/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/testManifest.xml" \ + TestResultsGenerator + popd + # First delete result files from a previous run of the same configuration (in case that test configuration was run again), then transfer the new results. ssh genie.releng@projects-storage.eclipse.org rm -rfv ${remoteResultsDirectory}/${JOB_BASE_NAME}* ${remoteResultsDirectory}/*/*${JOB_BASE_NAME}* scp -r ${localResultsDirectory}/* genie.releng@projects-storage.eclipse.org:${remoteResultsDirectory} + # Download the result summary directly to the storage server ssh genie.releng@projects-storage.eclipse.org \ - curl --fail --location --output "${remoteResultsDirectory}/${JOB_BASE_NAME}.xml" "${BUILD_URL}/testReport/api/xml?tree=failCount,passCount,skipCount,duration" + curl --fail --location --output "${remoteResultsDirectory}/${JOB_BASE_NAME}.xml" "${BUILD_URL}/testReport/api/json?tree=failCount,passCount,skipCount,duration" fi ''' } } if (currentBuild.result == 'SUCCESS' || currentBuild.result == 'UNSTABLE') { - build job: 'Releng/updateTestResultIndex', wait: false, parameters: [ - string(name: 'buildID', value: "${params.buildId}") - ] + build job: 'Releng/updateIndex', wait: false } } } diff --git a/JenkinsJobs/Builds/build.jenkinsfile b/JenkinsJobs/Builds/build.jenkinsfile index d5e82464817..5ebef75caf4 100644 --- a/JenkinsJobs/Builds/build.jenkinsfile +++ b/JenkinsJobs/Builds/build.jenkinsfile @@ -34,6 +34,7 @@ pipeline { environment { MAVEN_OPTS = '-Xmx4G' CJE_ROOT = "${WORKSPACE}/cje-production" + SCRIPTS = "${WORKSPACE}/scripts" AGG_DIR = "${CJE_ROOT}/gitCache/eclipse.platform.releng.aggregator" logDir = "$CJE_ROOT/buildlogs" @@ -168,31 +169,38 @@ pipeline { } // Git log creation sh '''#!/bin/bash -xe - reportTimestamp=$(TZ="America/New_York" date +%Y%m%d-%H%M) + reportTimestamp=$(TZ='UTC' date +%Y%m%d-%H%M) export lastTag=$(cat "${WORKSPACE}/lastTag") if [[ -n "$lastTag" ]]; then - export gitLogFile="${DROP_DIR}/$BUILD_ID/gitLog.html" + export gitLogFile="${DROP_DIR}/$BUILD_ID/gitLog.json" mkdir -p $(dirname "${gitLogFile}") - echo -e "

Git log from $lastTag (previous) to $BUILD_ID (current)

" > $gitLogFile - echo -e "

The tagging, and this report, were done at about $reportTimestamp

" >> $gitLogFile + echo '{' > $gitLogFile + echo "\\"label\\": \\"${BUILD_ID}\\"," >> $gitLogFile + echo "\\"logFrom\\": \\"${lastTag}\\"," >> $gitLogFile + echo "\\"logTo\\": \\"${BUILD_ID}\\"," >> $gitLogFile + echo "\\"timestamp\\": \\"${reportTimestamp}\\"," >> $gitLogFile + echo "\\"repositories\\": [" >> $gitLogFile >> $gitLogFile function createGitLog() { gitURL=$(git config remote.origin.url | sed --expression 's,git@github.com:,https://github.com/,' | sed 's/\\.git$//') gitName="${gitURL##*/}" - gitLog=$(git log $lastTag..$BUILD_ID --date=short --format=format:"%cd%s%aN") + #TODO: handle potential double-quotes in commit message? + gitLog=$(git log $lastTag..$BUILD_ID --date=short --format=format:"{ \\"date\\": \\"%cd\\", \\"message\\": \\"%s\\", \\"author\\": \\"%aN\\", \\"url\\": \\"${gitURL}/commit/%H\\"},") if [ -n "$gitLog" ]; then echo "Record changes in ${gitName}" - echo "" >> $gitLogFile - echo "" >> $gitLogFile - echo "${gitLog}" >> $gitLogFile - echo "
Repository: ${gitName}
Date Commit message Author


" >> $gitLogFile - echo '' >> $gitLogFile + echo "{" >> $gitLogFile + echo "\\"name\\": \\"${gitName}\\"," >> $gitLogFile + echo "\\"commits\\": [" >> $gitLogFile + echo "${gitLog%,}" >> $gitLogFile + echo "]}," >> $gitLogFile fi } export -f createGitLog createGitLog git submodule foreach 'createGitLog' + + echo "{}]}" >> $gitLogFile # Append empty object to keep JSON valid else echo -e "\n\tGit log not generated because a reasonable previous tag could not be found." > $gitLogFile fi @@ -291,14 +299,18 @@ pipeline { stage('Gather Eclipse parts') { tools { jdk 'temurin-jdk25-latest' - } + } environment { KEYRING = credentials('secret-subkeys-releng.asc') KEYRING_PASSPHRASE = credentials('secret-subkeys-releng.asc-passphrase') } steps { + dir("${DROP_DIR}/${BUILD_ID}") { + script { + utilities.copyStaticWebsiteFiles("${AGG_DIR}", 'eclipse/build') + } + } sh '''#!/bin/bash -xe - mkdir -p ${DROP_DIR}/${BUILD_ID} cp $CJE_ROOT/buildproperties.* ${DROP_DIR}/${BUILD_ID} source $CJE_ROOT/buildproperties.shsource @@ -441,20 +453,12 @@ pipeline { bash ${CJE_ROOT}/scripts/produceChecksum.sh eclipse popd - cp -r ${ECLIPSE_BUILDER_DIR}/eclipse/publishingFiles/staticDropFiles/. ${DROP_DIR}/${BUILD_ID} - java \ - -DisBuildTested=true \ - -DbuildType=${BUILD_TYPE} \ - -DdropTokenList='%repository%,%sdk%,%tests%,%runtime%,%jdtc%,%swt%' \ - -DdropHtmlFileName=index.php \ - -DxmlDirectoryName=${DROP_DIR}/${BUILD_ID}/testresults/xml \ - -DdropDirectoryName=${DROP_DIR}/${BUILD_ID} \ - -DdropTemplateFileName=${ECLIPSE_BUILDER_DIR}/eclipse/publishingFiles/templateFiles/index.template.php \ - -DcompileLogsDirectoryName=${DROP_DIR}/${BUILD_ID}/compilelogs/plugins \ - -DtestManifestFileName=${ECLIPSE_BUILDER_DIR}/eclipse/publishingFiles/testManifest.xml \ - -DtestsConfigExpected=${TEST_CONFIGURATIONS_EXPECTED} \ - ${WORKSPACE}/scripts/releng/TestResultsGenerator.java + -DdropDirectory=${DROP_DIR}/${BUILD_ID} \ + ${SCRIPTS}/releng/BuildDropDataGenerator.java mainEclipse + java \ + -DdropDirectory=${DROP_DIR}/${BUILD_ID} \ + ${SCRIPTS}/releng/CompilerSummaryGenerator.java ''' } } @@ -479,14 +483,18 @@ pipeline { stage('Gather Equinox parts') { tools { jdk 'temurin-jdk25-latest' - } + } environment { KEYRING = credentials('secret-subkeys-releng.asc') KEYRING_PASSPHRASE = credentials('secret-subkeys-releng.asc-passphrase') } steps { + dir("${EQUINOX_DROP_DIR}/${BUILD_ID}") { + script { + utilities.copyStaticWebsiteFiles("${AGG_DIR}", 'equinox/build') + } + } sh '''#!/bin/bash -xe - mkdir -p ${EQUINOX_DROP_DIR}/${BUILD_ID} cp $CJE_ROOT/buildproperties.* ${EQUINOX_DROP_DIR}/${BUILD_ID} source $CJE_ROOT/buildproperties.shsource @@ -518,20 +526,18 @@ pipeline { cat $f done - # Publish Equinox + # Build Equinox Launcher archives pushd $CJE_ROOT mkdir -p $ECLIPSE_BUILDER_DIR/equinox/$TMP_DIR mkdir -p $CJE_ROOT/$TMP_DIR $BASE_BUILDER_ECLIPSE_EXE \ -application org.eclipse.ant.core.antRunner \ - -buildfile $ECLIPSE_BUILDER_DIR/equinox/helper.xml \ + -buildfile ${ECLIPSE_BUILDER_DIR}/equinox/buildConfigs/equinox-launchers/build.xml \ -data $CJE_ROOT/$TMP_DIR/workspace-publishEquinox \ - -DEBuilderDir=$ECLIPSE_BUILDER_DIR \ -DbuildDir=$BUILD_ID \ -DbuildId=$BUILD_ID \ -DbuildRepo=$PLATFORM_REPO_DIR \ -DequinoxPostingDirectory=${EQUINOX_DROP_DIR} \ - -DeqpublishingContent=$ECLIPSE_BUILDER_DIR/equinox/publishingFiles \ -Dequinox.build.configs=$ECLIPSE_BUILDER_DIR/equinox/buildConfigs \ -Djava.io.tmpdir=$CJE_ROOT/$TMP_DIR \ -v \ @@ -542,19 +548,9 @@ pipeline { bash ${CJE_ROOT}/scripts/produceChecksum.sh equinox popd - cp -r ${ECLIPSE_BUILDER_DIR}/equinox/publishingFiles/staticDropFiles/. ${EQUINOX_DROP_DIR}/${BUILD_ID} - java \ - -DisBuildTested=false \ - -DbuildType=${BUILD_TYPE} \ - -DdropTokenList='%equinox%,%framework%,%extrabundles%,%other%,%launchers%,%osgistarterkits%' \ - -DdropHtmlFileName=index.php \ - -DxmlDirectoryName=${DROP_DIR}/$BUILD_ID/testresults/xml \ - -DdropDirectoryName=${EQUINOX_DROP_DIR}/${BUILD_ID} \ - -DdropTemplateFileName=${ECLIPSE_BUILDER_DIR}/equinox/publishingFiles/templateFiles/index.template.php \ - -DcompileLogsDirectoryName=${EQUINOX_DROP_DIR}/${BUILD_ID}/compilelogs/plugins \ - -DtestManifestFileName=${ECLIPSE_BUILDER_DIR}/equinox/publishingFiles/testManifest.xml \ - ${WORKSPACE}/scripts/releng/TestResultsGenerator.java + -DdropDirectory=${EQUINOX_DROP_DIR}/${BUILD_ID} \ + ${SCRIPTS}/releng/BuildDropDataGenerator.java mainEquinox ''' } } @@ -599,6 +595,9 @@ pipeline { } } stage('Archive build logs') { + tools { + jdk 'temurin-jdk25-latest' + } steps { script { // See https://github.com/jenkinsci/pipeline-stage-view-plugin/tree/master/rest-api#get-jobjob-namewfapiruns @@ -607,7 +606,7 @@ pipeline { for (jobStage in description['stages']) { if (jobStage.status != 'IN_PROGRESS') { def prefix = 's' + String.format('%03d', stageIndex++) // prefix with index to establish stable order - def logFileName = "${logDir}/" + prefix + '_' + jobStage.name.replace(' ', '_').replace('Declarative:_', '') + '.log' + def logFileName = "${DROP_DIR}/${BUILD_ID}/buildlogs/" + prefix + '_' + jobStage.name.replace(' ', '_').replace('Declarative:_', '') + '.log' sh """ curl --fail --silent --output '${logFileName}' ${BUILD_URL}/pipeline-overview/log?nodeId=${jobStage.id} # Test (efficiently) if the file starts with the no-logs message and if yes, ensure it doesn't contain more other lines @@ -620,8 +619,10 @@ pipeline { } sshagent(['projects-storage.eclipse.org-bot-ssh']) { sh '''#!/bin/bash -xe - dropPath=${EP_ECLIPSE_DROPS}/${BUILD_ID} - scp -r $logDir/* genie.releng@projects-storage.eclipse.org:${dropPath}/buildlogs/ + java \ + -DdropDirectory=${DROP_DIR}/${BUILD_ID} \ + ${SCRIPTS}/releng/BuildDropDataGenerator.java buildLogs + rsync -avzh ${DROP_DIR}/${BUILD_ID}/buildlogs/ genie.releng@projects-storage.eclipse.org:${EP_ECLIPSE_DROPS}/${BUILD_ID}/buildlogs/ ''' } } diff --git a/JenkinsJobs/Releng/promoteBuild.jenkinsfile b/JenkinsJobs/Releng/promoteBuild.jenkinsfile index 7f8abb63c4a..f0e06b72647 100644 --- a/JenkinsJobs/Releng/promoteBuild.jenkinsfile +++ b/JenkinsJobs/Releng/promoteBuild.jenkinsfile @@ -215,7 +215,6 @@ pipeline { -DnewPrevious-release.baseline="${RELEASE_P2_REPOSITORY}" ''' utilities.replaceAllInFile('cje-production/buildproperties.txt', [ - 'API_PREV_REF_LABEL=".*?"' : "API_PREV_REF_LABEL=\"${BUILD_MAJOR}.${BUILD_MINOR}\"", 'PREVIOUS_RELEASE_VER=".*?"' : "PREVIOUS_RELEASE_VER=\"${BUILD_MAJOR}.${BUILD_MINOR}\"", 'PREVIOUS_RELEASE_REPO_ID=".*?"' : "PREVIOUS_RELEASE_REPO_ID=\"${BUILD_MAJOR}.${BUILD_MINOR}\"", 'BASEBUILD_ID=".*?"' : "BASEBUILD_ID=\"${DL_DROP_ID}\"", @@ -371,11 +370,10 @@ EOF BUILD_ID: "${newBuildLabel}", BUILD_TYPE: "${DL_TYPE}", BUILD_TYPE_NAME: "${newTypeName}", - BUILD_DIR_SEG: "${newDropID}", - EQ_BUILD_DIR_SEG: "${newDropID}", ] def buildPropertiesPHP = sh(returnStdout: true, script: "ssh genie.releng@projects-storage.eclipse.org cat ${sourcePath}/buildproperties.php") for (entry in newProperties) { + //TODO: update this to modify the buildproperties.json with the new names/labels and updated filenames/size(?) buildPropertiesPHP = buildPropertiesPHP.replaceFirst('\\$' + entry.key + ' = "[^"]+"', '\\$' + entry.key + ' = "' + entry.value + '"') } writeFile(file: 'buildproperties.php', text: buildPropertiesPHP) diff --git a/JenkinsJobs/Releng/updateIndex.jenkinsfile b/JenkinsJobs/Releng/updateIndex.jenkinsfile index d51a08ca0e8..3e31f405ab6 100644 --- a/JenkinsJobs/Releng/updateIndex.jenkinsfile +++ b/JenkinsJobs/Releng/updateIndex.jenkinsfile @@ -6,26 +6,174 @@ pipeline { options { skipDefaultCheckout() timestamps() - buildDiscarder(logRotator(numToKeepStr:'10')) + buildDiscarder(logRotator(numToKeepStr:'10', artifactNumToKeepStr: '2')) } agent { label 'basic' } + environment { + GIT_REPO = "${WORKSPACE}/git-repo" + BUILD_SEPARATOR = 'BUILD-SEPARATOR' + // Download server paths + EP_ROOT = '/home/data/httpd/download.eclipse.org' + EP_ECLIPSE_DROPS = "${EP_ROOT}/eclipse/downloads/drops4" + EP_EQUINOX_DROPS = "${EP_ROOT}/equinox/drops" + } stages { - stage('Update index'){ + stage('Update index') { steps { + dir("${GIT_REPO}") { + checkout scmGit(userRemoteConfigs: [[url: "${scm.userRemoteConfigs[0].url}"]], branches: [[name: "${scm.branches[0].name}"]], + extensions: [cloneOption(depth: 1, shallow: true, noTags: true), sparseCheckout([ + [path: 'JenkinsJobs/shared/utilities.groovy'], + [path: 'sites/eclipse'], + [path: 'sites/equinox'], + ])]) + } + script { + def utilities = load "${GIT_REPO}/JenkinsJobs/shared/utilities.groovy" + dir('site-eclipse'){ + utilities.copyStaticWebsiteFiles("${GIT_REPO}", 'eclipse/overview') + } + dir('site-equinox'){ + utilities.copyStaticWebsiteFiles("${GIT_REPO}", 'equinox/overview') + } + def buildDropsData; + sshagent(['projects-storage.eclipse.org-bot-ssh']) { + buildDropsData = sh(script: """ + ssh genie.releng@projects-storage.eclipse.org ' + cd ${EP_ECLIPSE_DROPS} + for drop in \$(ls); do + if [ -d \${drop} ] && [ ! -f \${drop}/buildHidden ]; then + echo "\${drop}" + # Count elements in list of expected tests + grep "^TEST_CONFIGURATIONS_EXPECTED" \${drop}/buildproperties.properties | awk -F= "{print \\\$2}" | grep -o "ep[0-9A-Za-z]*-unit-" | wc -l + # Count number of test-result overview files + find \${drop}/testresults -maxdepth 1 -type f -name "ep*-unit-*.json" | wc -l + # Count number of old-style test-result overview files (still relevant for not yet archived releases) + find \${drop}/testresults -maxdepth 1 -type f -name "ep*-unit-*.xml" | wc -l + if [ -f \${drop}/index.html ]; then + echo "style-new" + else + echo "style-old" + fi + if [ -f \${drop}/buildUnstable ]; then + echo "unstable" + fi + echo "${BUILD_SEPARATOR}" + fi + done + + echo "DROP-TYPES-SEPARATOR" + + cd ${EP_EQUINOX_DROPS} + for drop in \$(ls); do + if [ -d \${drop} ] && [ ! -f \${drop}/buildHidden ]; then + echo "\${drop}" + if [ -f \${drop}/buildUnstable ]; then + echo "unstable" + fi + echo "${BUILD_SEPARATOR}" + fi + done + ' + """.stripIndent(), returnStdout: true) + } + def dropData = buildDropsData.split('DROP-TYPES-SEPARATOR') + def eclipseOverviewData = parseEclipseBuildDrops(dropData[0]) + utilities.writeJSON('site-eclipse/data.json', eclipseOverviewData) + def equinoxOverviewData = parseEquinoxBuildDrops(dropData[1]) + utilities.writeJSON('site-equinox/data.json', equinoxOverviewData) + } sshagent(['projects-storage.eclipse.org-bot-ssh']) { - sh '''#!/bin/bash -xe - PHP_PAGE="createIndex4x.php" - HTML_PAGE="index.html" - TEMP_INDEX="tempIndex.html" - - wget --no-verbose -O ${TEMP_INDEX} https://download.eclipse.org/eclipse/downloads/${PHP_PAGE} 2>&1 - - scp ${TEMP_INDEX} genie.releng@projects-storage.eclipse.org:/home/data/httpd/download.eclipse.org/eclipse/downloads/${HTML_PAGE} + sh ''' + rsync -avzh site-eclipse/. genie.releng@projects-storage.eclipse.org:${EP_ROOT}/eclipse/downloads/ + rsync -avzh site-equinox/. genie.releng@projects-storage.eclipse.org:${EP_ROOT}/equinox/ ''' } } } } + post { + always { + archiveArtifacts artifacts: '**/*', excludes: 'git-repo/**' + } + } +} + +@NonCPS +def parseEclipseBuildDrops(String buildDrops) { + def overview = [releases: [], stableBuilds: [], iBuilds: [], yBuilds: []] + for (dropData in buildDrops.trim().split("${BUILD_SEPARATOR}")) { + if (dropData.isEmpty()) { + continue; + } + def dropDataElements = dropData.trim().split('\\s+') + def String dropID = dropDataElements[0] + def int testsExpected = Integer.parseInt(dropDataElements[1]) + def int testsFinishedNew = Integer.parseInt(dropDataElements[2]) + def int testsFinishedOld = Integer.parseInt(dropDataElements[3]) + def boolean isNewStyleDrop = dropDataElements[4] == 'style-new' + def boolean isUnstable = dropDataElements.length > 5 && dropDataElements[5] == 'unstable' + def drop = createDropEntry(dropID, 'drops4', isUnstable, overview) + drop.testsCompletion = "${ testsFinishedNew + testsFinishedOld } of ${testsExpected}".toString() + drop.testsPath = isNewStyleDrop ? 'tests.html' : 'testResults.php' + } + overview.values().each{ list -> list.sort({d1, d2 -> -d1.label.compareTo(d2.label)})} + return overview +} + +@NonCPS +def parseEquinoxBuildDrops(String buildDrops) { + def overview = [releases: [], stableBuilds: [], iBuilds: [], yBuilds: []] + for (dropData in buildDrops.trim().split("${BUILD_SEPARATOR}")) { + if (dropData.isEmpty()) { + continue; + } + def dropDataElements = dropData.trim().split('\\s+') + def String dropID = dropDataElements[0] + def boolean isUnstable = dropDataElements.length > 1 && dropDataElements[1] == 'unstable' + createDropEntry(dropID, 'drops', isUnstable, overview) + } + overview.values().each{ list -> list.sort({d1, d2 -> -d1.label.compareTo(d2.label)})} + return overview +} + +@NonCPS +def createDropEntry(String dropID, String containerPath, boolean isUnstable, Map overview) { + def drop = [ path: "${containerPath}/${dropID}".toString(), status: isUnstable ? 'unstable' : 'success' ] + if (dropID.startsWith('R-')) { + drop.label = dropID.substring(2, dropID.lastIndexOf('-')) + drop.date = toUTCdateTime(dropID.substring(dropID.lastIndexOf('-') + 1)) + overview.releases += drop + } else if (dropID.startsWith('S-')) { + drop.label = dropID.substring(2, dropID.lastIndexOf('-')) + drop.date = toUTCdateTime(dropID.substring(dropID.lastIndexOf('-') + 1)) + overview.stableBuilds += drop + } else if (dropID.startsWith('I20')) { + drop.label = dropID + drop.date = toUTCdateTime(dropID.substring(1).replace('-', '')) + overview.iBuilds += drop + } else if (dropID.startsWith('Y20')) { + drop.label = dropID + drop.date = toUTCdateTime(dropID.substring(1).replace('-', '')) + overview.yBuilds += drop + } + return drop +} + +@NonCPS +def toUTCdateTime(String dateTime) { + if (dateTime.length() != 12) { + throw new IllegalArgumentException('Not an expected date-time string: ' + dateTime) + } + def int year = Integer.parseInt(dateTime.substring(0, 4)) + def int month = Integer.parseInt(dateTime.substring(4, 6)) + def int day = Integer.parseInt(dateTime.substring(6, 8)) + def int hour = Integer.parseInt(dateTime.substring(8, 10)) + def int minute = Integer.parseInt(dateTime.substring(10, 12)) + return java.time.LocalDateTime.of(year, month, day, hour, minute) + .atZone(java.time.ZoneId.of("America/New_York")) + .withZoneSameInstant(java.time.ZoneOffset.UTC) + .toLocalDateTime().toString() + 'Z'; } diff --git a/JenkinsJobs/Releng/updateTestResultIndex.jenkinsfile b/JenkinsJobs/Releng/updateTestResultIndex.jenkinsfile deleted file mode 100644 index dd9c7f0c544..00000000000 --- a/JenkinsJobs/Releng/updateTestResultIndex.jenkinsfile +++ /dev/null @@ -1,68 +0,0 @@ -// Constants read by job creation -private static final _JOB_DESCRIPTION = 'Performs some summary analysis and writes unit test results to the download page.' - -pipeline { - options { - skipDefaultCheckout() - timestamps() - timeout(time: 30, unit: 'MINUTES') - buildDiscarder(logRotator(numToKeepStr:'15')) - disableConcurrentBuilds() - } - parameters { - string(name: 'buildID', trim: true, description: 'ID of the I-build being tested.') - } - agent { - label 'basic' - } - tools { - jdk 'temurin-jdk25-latest' - } - stages { - stage('Checkout SCM') { - steps { - dir("${WORKSPACE}/git-repo") { - checkout scmGit(userRemoteConfigs: [[url: "${scm.userRemoteConfigs[0].url}"]], branches: [[name: "${scm.branches[0].name}"]], - extensions: [cloneOption(depth: 1, shallow: true, noTags: true), sparseCheckout([ - [path: 'scripts/releng/'], - [path: 'eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/testManifest.xml'], - ])]) - } - } - } - stage('Update test results'){ - environment { - // Download Server locations (seldomly change) - EP_ECLIPSE_DROPS = '/home/data/httpd/download.eclipse.org/eclipse/downloads/drops4' - } - steps { - sshagent(['projects-storage.eclipse.org-bot-ssh']) { - sh '''#!/bin/bash -xe - - curl -L -o "${WORKSPACE}/buildproperties.shsource" http://download.eclipse.org/eclipse/downloads/drops4/${buildID}/buildproperties.shsource - source "${WORKSPACE}/buildproperties.shsource" - - buildDirectory="${WORKSPACE}/postingDir/${buildID}" - testResultsDir="${buildDirectory}/testresults" - mkdir -p "${testResultsDir}" - - # Fetch previously collected test results of all completed runs - rsync -avzh genie.releng@projects-storage.eclipse.org:${EP_ECLIPSE_DROPS}/${buildID}/testresults/xml ${testResultsDir} - - java \ - -DisBuildTested=true \ - -DbuildType=${BUILD_TYPE} \ - -DdropDirectoryName=${buildDirectory} \ - -DxmlDirectoryName=${buildDirectory}/testresults/xml \ - -DtestManifestFileName=${WORKSPACE}/git-repo/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/testManifest.xml \ - -DtestsConfigExpected=${TEST_CONFIGURATIONS_EXPECTED} \ - ${WORKSPACE}/git-repo/scripts/releng/TestResultsGenerator.java - - rsync -avzh ${buildDirectory} genie.releng@projects-storage.eclipse.org:${EP_ECLIPSE_DROPS} - ''' - } - build job: 'Releng/updateIndex', wait: false - } - } - } -} diff --git a/JenkinsJobs/shared/utilities.groovy b/JenkinsJobs/shared/utilities.groovy index 1d78432c57f..f2853f3995c 100644 --- a/JenkinsJobs/shared/utilities.groovy +++ b/JenkinsJobs/shared/utilities.groovy @@ -24,10 +24,39 @@ def replaceAllInFile(String filePath, Map replacements) { def modifyJSON(String jsonFilePath, Closure transformation) { def json = readJSON(file: jsonFilePath) transformation.call(json) + writeJSON(jsonFilePath, json) +} + +def writeJSON(String jsonFilePath, def json) { // This leads to prettier results than using the writeJSON() step, even with the pretty parameter set. writeFile(file: jsonFilePath, text: JsonOutput.prettyPrint(JsonOutput.toJson(json)).replace(' ','\t'), encoding :'UTF-8') } +// --- website generation --- + +def copyStaticWebsiteFiles(String gitRoot, String website) { + def pathToReplace; + if (website.startsWith('eclipse')) { + pathToReplace = '..' + } else if (website.startsWith('equinox')) { + pathToReplace = '../../eclipse' + } else { + error("Unknown website: ${website}") + } + sh """#!/bin/bash -xe + cp -r ${gitRoot}/sites/${website}/. . + + # Copy the share files into this the current stite to make each site self-contained + cp ${gitRoot}/sites/eclipse/page.css . + cp ${gitRoot}/sites/eclipse/page.js . + # Replace references to shared java-script/css files to contained files + find . -type f -name "*.html" -exec sed --in-place \ + --expression='s|${pathToReplace}/page.js">|page.js">|g' \ + --expression='s|${pathToReplace}/page.css" />|page.css" />|g' \ + {} + + """ +} + // --- git operations --- def runHereAndForEachGitSubmodule(Closure task) { diff --git a/cje-production/buildproperties.txt b/cje-production/buildproperties.txt index a887ed0ecc4..ab1a9733831 100644 --- a/cje-production/buildproperties.txt +++ b/cje-production/buildproperties.txt @@ -28,9 +28,6 @@ BUILD_TO_COMPARE_SITE="ftp.osuosl.org/pub/eclipse/eclipse/updates" LOCAL_REPO="localMavenRepo" NEXT_JAVA_RELEASE_DATE="2026-03-17" -# Base builder parameters -API_PREV_REF_LABEL="4.38" - PREVIOUS_RELEASE_VER="4.38" PREVIOUS_RELEASE_REPO_ID="4.38" #build id for getting repo diff --git a/cje-production/mbscripts/mb010_createEnvfiles.sh b/cje-production/mbscripts/mb010_createEnvfiles.sh index d56df657cb3..c0d97f7602f 100755 --- a/cje-production/mbscripts/mb010_createEnvfiles.sh +++ b/cje-production/mbscripts/mb010_createEnvfiles.sh @@ -75,7 +75,5 @@ fn-addToPropFiles BUILD_ENV_FILE_PROP "\"$BUILD_ENV_FILE_PROP\"" fn-addToPropFiles BUILD_TYPE "\"${BUILD_TYPE}\"" fn-addToPropFiles BUILD_TYPE_NAME "\"${BUILD_TYPE_NAME}\"" fn-addToPropFiles BUILD_ID "\"$BUILD_TYPE$TIMESTAMP\"" -fn-addToPropFiles BUILD_DIR_SEG "\"$BUILD_TYPE$TIMESTAMP\"" -fn-addToPropFiles EQ_BUILD_DIR_SEG "\"$BUILD_TYPE$TIMESTAMP\"" fn-addToPropFiles ECLIPSE_BUILDER_DIR "\"$AGG_DIR/eclipse.platform.releng.tychoeclipsebuilder\"" fn-addToPropFiles TEST_CONFIGURATIONS_EXPECTED "\"${TEST_CONFIGURATIONS_EXPECTED}\"" diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/DL.thin.header.php.html b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/DL.thin.header.php.html deleted file mode 100644 index 8cb6c2819ce..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/DL.thin.header.php.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - -<?= $pageTitle; ?> - - - - - - - - - - - - - - - Skip to main content - -
-
-
- -
-
-
- - -
-

- Back to the top -

\ No newline at end of file diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/FAIL.gif b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/FAIL.gif deleted file mode 100644 index 73d7516efb8..00000000000 Binary files a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/FAIL.gif and /dev/null differ diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/FAIL_ORIG.gif b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/FAIL_ORIG.gif deleted file mode 100644 index 28bba66102a..00000000000 Binary files a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/FAIL_ORIG.gif and /dev/null differ diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/NONE-FAIL.gif b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/NONE-FAIL.gif deleted file mode 100644 index 22ad3ee2415..00000000000 Binary files a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/NONE-FAIL.gif and /dev/null differ diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/NONE-OK.gif b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/NONE-OK.gif deleted file mode 100644 index 22ad3ee2415..00000000000 Binary files a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/NONE-OK.gif and /dev/null differ diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/OK.gif b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/OK.gif deleted file mode 100644 index 73d7516efb8..00000000000 Binary files a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/OK.gif and /dev/null differ diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/OK_ORIG.gif b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/OK_ORIG.gif deleted file mode 100644 index 689e5234f3b..00000000000 Binary files a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/OK_ORIG.gif and /dev/null differ diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/buildlogs.php b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/buildlogs.php deleted file mode 100644 index 2c65c6da615..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/buildlogs.php +++ /dev/null @@ -1,121 +0,0 @@ - - - - -read()) { - $path = $cdir . "/" . $myDir . "/" . $anEntry; - if (is_file($path)) { - $entries[$index] = $anEntry; - $index++; - } - } - - $aDirectory->close(); - if (!empty($entries)) { - sort($entries); - } - - if ($index < 0) { - echo "
There are no logs for this build."; - return; - } - echo "
    "; - for ($i = 0; $i < $index; $i++) { - $anEntry = $entries[$i]; - $label = $anEntry; - if ($filterNames) { - if (strpos($anEntry, 's') !== 0) { - continue; - } - $label = preg_replace('/^s\d+|\.log$/', '', $anEntry); - $label = str_replace('_', ' ', $label); - } - $line = "$label " . fileSizeForDisplay("$myDir/$anEntry"); - echo "
  • $line
  • "; - } - echo "
"; -} - - -?> - - - -Drop Test Results - - - - - - - - - - - - - - -
-

Release Engineering logs for

-
-

Build Properties for

-

Key Maven Properties

-

Other Build Properties

-

Release Engineering Logs for

- - - -

Comparator Logs for

-

For explaination, see Platform Build Comparator Logs wiki.

- -

For an archive of all relevant baseline-versus-current build artifact byte codes download and 'diff' matching files of - artifact comparisons.

- - -
-
- - - - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/compilerSummaryPending.html b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/compilerSummaryPending.html deleted file mode 100644 index 5d265e2a548..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/compilerSummaryPending.html +++ /dev/null @@ -1,7 +0,0 @@ - -
-

This section will (eventually) show compile errors or warnings. -Once the build is complete and the logs processed.

-
diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/computeRepoURLs.php b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/computeRepoURLs.php deleted file mode 100644 index 49a60a398c8..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/computeRepoURLs.php +++ /dev/null @@ -1,103 +0,0 @@ -\n"; - // We will make an assumption that might work. - $STREAM_REPO_NAME=$STREAM_MAJOR.".".$STREAM_MINOR."-".$BUILD_TYPE."-"."builds"; - } - } - } - } - } - return $STREAM_REPO_NAME; -} - -function computeSTREAM_REPO_URL () { - $STREAM_REPO_URL="https://download.eclipse.org/eclipse/updates/".computeSTREAM_REPO_NAME ()."/"; - return $STREAM_REPO_URL; -} - -function computeBUILD_REPO_NAME () { - global $BUILD_ID, $BUILD_TYPE, $TIMESTAMP ; - // There are two types of M builds, some RCs, some not. - if ($BUILD_TYPE === "N" || $BUILD_TYPE === "I" || $BUILD_TYPE === "P" || $BUILD_TYPE === "U" || $BUILD_TYPE === "X" || $BUILD_TYPE === "Y" || $BUILD_TYPE === "M" && ! ((isSRRC($BUILD_ID)) || isRRC($BUILD_ID))) { - $BUILD_REPO_NAME=computeSTREAM_REPO_NAME ()."/".$BUILD_ID; - } else { - if ($BUILD_TYPE === "S") { - $BUILD_REPO_NAME=computeSTREAM_REPO_NAME ()."/"."I"."$TIMESTAMP"; - } else { - $timestamp = str_replace('-', '', $TIMESTAMP); - if ($BUILD_TYPE === "R" || ($BUILD_TYPE === "M" && (isSRRC($BUILD_ID) || isRRC($BUILD_ID)))) { - $BUILD_REPO_NAME=computeSTREAM_REPO_NAME ()."/".$BUILD_TYPE."-".$BUILD_ID."-"."$timestamp"; - } else { - echo "Unexpected value of BUILD_TYPE: $BUILD_TYPE.
\n"; - // We will make an assumption that might work. - $BUILD_REPO_NAME=computeSTREAM_REPO_NAME ()."/".$BUILD_ID; - } - } - } - return $BUILD_REPO_NAME; -} -function computeBUILD_REPO_URL () { - $BUILD_REPO_URL="https://download.eclipse.org/eclipse/updates/".computeBUILD_REPO_NAME()."/"; - return $BUILD_REPO_URL; -} - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/download.php b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/download.php deleted file mode 100644 index 7c17b9406e1..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/download.php +++ /dev/null @@ -1,152 +0,0 @@ - - -Eclipse Download Click Through - - - $edpos) { - $dropsuffix=substr($refurl,$edpos,($bidpos - $edpos -1)); - } - } - } - return $dropsuffix; -} - - -if (array_key_exists("SERVER_NAME", $_SERVER)) { - $servername = $_SERVER["SERVER_NAME"]; - if ($servername === "build.eclipse.org") { - // leave relative - $dlprefix=""; - } else { - // if not on build.elcipse.org, assume we are on downloads. - // we "compute" based on matching /eclipse/downloads/*/$BUILD_ID in the request URI. - // we want the /eclipse/downloads/* part, such as - // /eclipse/downloads/drops4, or - // /eclipse/downloads/drops, or - // function can return empty string - $refurl=$_SERVER["REQUEST_URI"]; - // We expect $BUILD_ID to be defined in buildproperties.php - // But it can be defined several times in reference URI, such as once in directory name, - // and once in filename. We want the directory-like part. - // And to complicate things, in S and R builds, the segment is no longer BUILD_ID, - // but a more complicated concatination. And M builds even more complicated, since - // there are two types, some are "RCs", and some not. - - $pos = strpos($BUILD_ID, "RC"); - if ($pos === false) { - $isRC = false; - } else { - $isRC = true; - } - - if ($BUILD_TYPE === "N" || $BUILD_TYPE === "I" || $BUILD_TYPE === "P" || $BUILD_TYPE === "U" || $BUILD_TYPE === "X" || $BUILD_TYPE === "Y" || ($BUILD_TYPE === "M" && ! $isRC)) { - $BUILD_DIR_NAME = $BUILD_ID; - } else { - if ($BUILD_TYPE === "R" || $BUILD_TYPE === "S" || $BUILD_TYPE === "P" || $BUILD_TYPE === "U" || $BUILD_TYPE === "X" || $BUILD_TYPE === "Y" || ($BUILD_TYPE === "M" && $isRC)) { - $timestamp = str_replace('-', '', $TIMESTAMP); - $BUILD_DIR_NAME = $BUILD_TYPE."-".$BUILD_ID."-".$timestamp; - } else { - echo "Unexpected value of BUILD_TYPE: $BUILD_TYPE.
"; - // We'll make an assumption that might work. - $BUILD_DIR_NAME = $BUILD_ID; - } - } - $dlprefix=computeMirrorKey($refurl,$BUILD_DIR_NAME."/"); - } -} -else { - // not sure what to put here (we are essentially not running on a host?) - // we _might_ need to assume "downloads" here, for "convert to html to work?" - // or, on build machine? - $servername=localhost; -} - -$script = $_SERVER['SCRIPT_NAME']; -$patharray = pathinfo($_SERVER['SCRIPT_NAME']); -$path = $patharray['dirname']; -$buildLabel = array_pop(split("/",$path,-1)); -// this script should nearly always have a query string, -// but we check, to avoid warning when testing -if (array_key_exists("QUERY_STRING", $_SERVER)) { - $qstring = $_SERVER['QUERY_STRING']; - $dropFile=array_pop(split("=",$qstring,-1)); -} - - -$mirror=true; -if (strstr($servername,"eclipse.org")) { - $mirror=false; - $eclipselink="https://www.eclipse.org/downloads/download.php?file="."$dlprefix/$buildLabel/$dropFile"; -} else { - $mirrorlink = "https://$servername$path/$dropFile"; -} - -$clickFile = "clickThroughs/"; -$clickFileName = str_replace("-$BUILD_ID","",$dropFile); -$clickFile = $clickFile.$clickFileName.".txt"; - -if (file_exists($clickFile)) { - $fileHandle = fopen($clickFile, "r"); - while (!feof($fileHandle)) { - $aLine = fgets($fileHandle, 4096); - $result = $result.$aLine; - } - fclose($fileHandle); -} else { - if ($mirror) { - echo ''; - echo 'Downloading: '.$mirrorlink.''; - } else { - echo ''; - echo 'Downloading: '.$eclipselink.''; - } - echo '
'; - echo '
'; - if ($mirror) { - echo 'If your download does not begin automatically click here.'; - } else { - echo 'If your download does not begin automatically click here.'; - } -} -?> - - - -Important Notes
'; - echo '

-

It is very important to read the following notes in order to run this version - of Eclipse. Once you have read the notes you can click on the Download link - to download the drop.

- '; - echo ''; - echo '
'; - echo '
'; - - if ($mirror) { - echo 'Download'; - } else { - echo 'Download'; - } - - echo ""; - echo ""; -} -?> - - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/dropSectionUtils.php b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/dropSectionUtils.php deleted file mode 100644 index 40dbf2173e7..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/dropSectionUtils.php +++ /dev/null @@ -1,64 +0,0 @@ -"; - return; -} - -// The 'col-md-n' classes refer to Bootstraps grid system, and must total 12. -// See http://www.w3schools.com/bootstrap/bootstrap_grid_system.asp -// and especially http://donnapeplinskie.com/using-tables-with-bootstrap-grids/ -function columnHeads() { - echo "Platform"; - echo "Download"; - echo "Size"; - //echo "Checksum"; - return; -} - -function getDropSize($zipfile) { - - $filesize = "N/A"; - if (file_exists($zipfile)) - { - $filesizebytes = filesize($zipfile); - if($filesizebytes > 0) { - if($filesizebytes < 1048576) { - $filesize = round($filesizebytes / 1048576, 2) . " MB"; - } elseif ($filesizebytes >= 1048576 && $filesizebytes < 10485760) { - $filesize = round($filesizebytes / 1048576, 1) . " MB"; - } else { - $filesize = round($filesizebytes / 1048576, 0) . " MB"; - } - } - } - return($filesize); -} - -// This function is generated "in line" by the "index" custom ant task. -// Hence, must "stay coordinated" with what is there. -function genLinks($zipfile) { - - global $clickthroughstr; - global $BUILD_DIR_SEG; - - $filetarget = "$clickthroughstr$zipfile"; - if (file_exists("./buildUnstable")) - { - $filelink = "\"Build$zipfile"; - } else { - $filelink = "$zipfile"; - } - $filesize = getDropSize($zipfile); - - echo "$filelink\n"; - echo "$filesize\n"; - // TODO: investgate using https:// to Eclipse Foundation's database of checksums - // TODO: can make some future variables so it has one value on "build" server, and another value on - // downloads, such as in buildproperties.php (value would get changed in "promtoe" script). - // Also handy/needed when doing "local test builds". - // Remember, md5 and sha1 are still in "checksum" directory, for at least initial Luna release, just not linked to. See bug - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=423714 - // echo "[SHA512]"; -} - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/eclipseDownloadPage.css b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/eclipseDownloadPage.css deleted file mode 100644 index 402ca70f630..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/eclipseDownloadPage.css +++ /dev/null @@ -1,70 +0,0 @@ -h1, h2, h3, h4, h5, h6 { - line-height: 1; - /* font-size: 12px; */ - font-weight: bold; -} - -h1 { - font-size: 18px; -} - -h2 { - font-size: 16px; -} - -h3 { - font-size: 14px; - background-color: #9999CC; - clear: both; - width: 90%; - padding: 2px 2px 2px 2px; -} - -table.testTable { - border-collapse: collapse; - border: 1px solid black; - width: 90%; -} - -.testTable caption { - padding: 6px 2px 6px 2px; -} - -.testTable th { - text-align: center; - padding: 2px; - border: 1px solid black; -} - -.testTable td { - text-align: right; - padding: 2px; - border: 1px solid black; -} - -div.dropSection { - clear: both; - width: 90%; - margin-left: 5%; - margin-right: 5%; -} - -div.dropSection h3 { - margin-left: 5%; - margin-right: 5%; -} - -table.dropSection { - width: 80%; - margin-left: 10%; - margin-right: 10%; - border-collapse: collapse; - border-spacing: 1px; -} - -td, th { - line-height: 1; - padding: 1px; - text-align: left; - vertical-align: top; -} \ No newline at end of file diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/eclipseDownloadPage.js b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/eclipseDownloadPage.js deleted file mode 100644 index 7a04dbc9676..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/eclipseDownloadPage.js +++ /dev/null @@ -1,17 +0,0 @@ - - sfHover = function() { - var sfEls = document.getElementById("leftnav").getElementsByTagName( - "li"); - for (var i = 0; i < sfEls.length; i++) { - sfEls[i].onmouseover = function() { - this.className += " sfhover"; - } - sfEls[i].onmouseout = function() { - this.className = this.className.replace(new RegExp( - " sfhover\\b"), ""); - } - } - } - if (window.attachEvent) - window.attachEvent("onload", sfHover); - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/gitLog.php b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/gitLog.php deleted file mode 100644 index f804c42f805..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/gitLog.php +++ /dev/null @@ -1,58 +0,0 @@ -$BUILD_ID
  • Git Log
  • "; - -require("DL.thin.header.php.html"); - -?> - - - - -Git Log for ".$BUILD_ID; -echo "".PHP_EOL; -echo "
    "; -if (file_exists("gitLog.html")) { - $log_file = file_get_contents("gitLog.html"); - echo "$log_file"; -} -?> - -
    -
    - - - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/gitLogSection.css b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/gitLogSection.css deleted file mode 100644 index 8073de5d469..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/gitLogSection.css +++ /dev/null @@ -1,111 +0,0 @@ -div.gitLogSection { - clear: both; - width: 100%; -} - -div.gitLogSection P { - text-indent: 30pt; - margin: inherit; -} - -div.gitLogSection table { - border-collapse: collapse; - background-color: #d9d9d9; - margin-top: 20px; - margin-bottom: 20px; - margin-right: 2%; - margin-left: 2%; - border: 1px solid black; - width: 96%; -} - -div.gitLogSection table tr { - border-bottom: 1px solid black; - background-color: #ffffff; - color: black; -} - -div.gitLogSection th { - background-color: #9999CC; -} - -div.gitLogSection h2, div.gitLogSection h3 { - margin-left: 5%; - margin-right: 5%; -} - -div.gitLogSection table tr:nth-child(even) { - background-color: #ededed -} -/* hover must come after "stripped" to have desired effect. */ -div.gitLogSection table tr:hover { - background-color: #a3a3e5; -} - -div.gitLogSection table th, div.gitLogSection table td { - padding: 1px 5px; -} - -div.gitLogSection table th.cell { - text-align: left; - color: black; -} - -div.gitLogSection table td.cell { - text-align: left; - width: 15em; - color: black; -} - -div.gitLogSection table th.datecell { - text-align: left; - color: black; -} - -div.gitLogSection table td.datecell { - text-align: left; - color: black; - width: 15%; - text-overflow: ellipsis; -} - -div.gitLogSection table th.authorcell { - text-align: left; - color: black; -} - - -div.gitLogSection table td.authorcell { - text-align: left; - width: 15%; - color: black; - text-overflow: ellipsis; -} - -div.gitLogSection table th.commitcell { - text-align: left; - color: black; -} - -div.gitLogSection table td.commitcell { - text-align: left; - width: 70%; - color: black; - overflow: hidden; - display: inline-block; - white-space: nowrap; - text-overflow: ellipsis; -} - -div.gitLogSection table td.errorcell { - text-align: left; - width: 15em; - color: red; -} - -div.gitLogSection table td.namecell { - text-align: left; - width: 30em; - color: black; - white-space: nowrap; -} diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/images/light.gif b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/images/light.gif deleted file mode 100644 index 542dddca3f2..00000000000 Binary files a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/images/light.gif and /dev/null differ diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/images/more.gif b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/images/more.gif deleted file mode 100644 index dec0ebc1f25..00000000000 Binary files a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/images/more.gif and /dev/null differ diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/logPhpUtils.php b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/logPhpUtils.php deleted file mode 100644 index 115de7019bb..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/logPhpUtils.php +++ /dev/null @@ -1,88 +0,0 @@ -read()) { - $path = $cdir . "/" . $myDir . "/" . $anEntry; - # if ((is_file($path)) && (preg_match("/.txt/i", $path))) { - $c = checkFile($path); - if ($c == 1) { - $entries[$index] = $anEntry; - $index++; - } - } - - $aDirectory->close(); - if (count($entries) > 0) { - sort($entries); - } - - if ($index < 0) { - echo "

    There are no test logs for this build.

    \n"; - return; - } - echo "\n"; -} - -function listDetailedLogs ($testresults, $machineplatform) { - if (file_exists("$testresults/$machineplatform")) { - echo "

    Individual $machineplatform test logs

    \n"; - listLogs("$testresults/$machineplatform"); - } - if (file_exists("$testresults/$machineplatform/crashlogs")) { - echo "

    Crash logs captured on $machineplatform

    \n"; - listLogs("$testresults/$machineplatform/crashlogs"); - } - if (file_exists("$testresults/$machineplatform/timeoutScreens")) { - echo "

    Screen captures for tests timing out on $machineplatform

    \n"; - listLogs("$testresults/$machineplatform/timeoutScreens"); - } - if (file_exists("$testresults/$machineplatform/directorLogs")) { - echo "

    p2 director logs while installing tests on $machineplatform

    \n"; - listLogs("$testresults/$machineplatform/directorLogs"); - } -} diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/logs.php b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/logs.php deleted file mode 100644 index e14e97974ad..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/logs.php +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - -Test Logs for <?= $BUILD_ID ?> - - - - - - - - -
    -

    Unit Test Logs for

    -
    - -

    Console Logs

    -

    These logs contain the console output captured while running the JUnit automated tests.

    - - - -
    -
    - - - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/new.gif b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/new.gif deleted file mode 100644 index 58c548e3b61..00000000000 Binary files a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/new.gif and /dev/null differ diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/resultsSection.css b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/resultsSection.css deleted file mode 100644 index 09ef1cc4aaf..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/resultsSection.css +++ /dev/null @@ -1,71 +0,0 @@ -div.resultsSection { - clear: both; - width: 80%; - margin-left: 10%; - margin-right: 10%; -} - -div.resultsSection P { - text-indent: 30pt; - margin: inherit; -} - -div.resultsSection table { - border-collapse: collapse; - background-color: #d9d9d9; - margin-top: 20px; - margin-bottom: 20px; - margin-right: 10%; - margin-left: 10%; - border: 1px solid black; -} - -div.resultsSection table tr { - border-bottom: 1px solid black; - background-color: #ffffff; - color: black; -} - -div.resultsSection th { - background-color: #9999CC; -} - -div.resultsSection h2, div.resultsSection h3 { - margin-left: 5%; - margin-right: 5%; -} - -div.resultsSection table tr:nth-child(even) { - background-color: #ededed -} -/* hover must come after "stripped" to have desired effect. */ -div.resultsSection table tr:hover { - background-color: #a3a3e5; -} - -div.resultsSection table th, div.resultsSection table td { - padding: 1px 5px; -} - -div.resultsSection table th.cell { - text-align: center; - color: black; -} - -div.resultsSection table td.cell { - text-align: center; - width: 15em; - color: black; -} - -div.resultsSection table td.errorcell { - text-align: center; - width: 15em; - color: red; -} - -div.resultsSection table td.namecell { - text-align: left; - width: 30em; - color: black; -} \ No newline at end of file diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/testResults.php b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/testResults.php deleted file mode 100644 index fefd3a96cdf..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/testResults.php +++ /dev/null @@ -1,134 +0,0 @@ -$BUILD_ID
  • Test Results
  • "; - -require("DL.thin.header.php.html"); - -?> - - - - - - - - -".PHP_EOL; - -echo "

    Test Results for ".$BUILD_ID; -if (file_exists("buildUnstable")) { - echo " Unstable!\n"; -} -echo "

    ".PHP_EOL; -if (file_exists("buildUnstable")) { - $bu_file = file_get_contents("buildUnstable"); - echo "$bu_file"; -} -echo "

    Logs for ".$BUILD_ID."

    ".PHP_EOL; -echo "\n"; - -?> - -
    - - -
    - - - - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/testResultsTablesPending.html b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/testResultsTablesPending.html deleted file mode 100644 index d701736fd4c..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/testResultsTablesPending.html +++ /dev/null @@ -1,8 +0,0 @@ - - -

    Unit Test Results

    -

    Unit tests are running on the Jenkins releng instance. -The results will be summarized here as each platform completes.

    \ No newline at end of file diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/utilityFunctions.php b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/utilityFunctions.php deleted file mode 100644 index 47084cfacbd..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/staticDropFiles/utilityFunctions.php +++ /dev/null @@ -1,303 +0,0 @@ - 0) { - // minus 1 is taken as numeric code that "build failed". - $boxes=-1; - unset ($BUILD_FAILED); - } - } - - // will be empty until there is at least one test result uploaded? - if (empty($testResultsDirName)) { - // contrived code to mean "no results yet" - $boxes = -3; - } - if ($boxes != -1 && $boxes != -2 && $boxes != -3) { - - // TEMP? appears "old style" builds had directories named "results", but now "testresults" - // and we want to look in $testResultsDirName/consolelogs - if (file_exists("$testResultsDirName/consolelogs")) { - $consolelogDir = dir("$testResultsDirName/consolelogs"); - //echo "
    DEBUG: count of expectedTestConfigs: ".count($expectedTestConfigs)."
    "; - //echo "
    DEBUG: and var_dump of expectedTestConfigs was:
    "; - //var_dump($expectedTestConfigs); - //echo "
    "; - while ($file = $consolelogDir->read()) { - for ($i = 0 ; $i < count($expectedTestConfigs) ; $i++) { - //echo "file: ".$file."
    "; - //echo "expectTestConfigs[$i] ". $expectedTestConfigs[$i]. "
    "; - if ((strpos($file, $expectedTestConfigs[$i])) !== FALSE) { - $boxes++; - - // First make sure we get "fresh" list of ALL test summary files, each time. - $testResultsSummaryFiles = glob($testResultsDirName."/ep*-unit-*.xml"); - foreach ($testResultsSummaryFiles as $summFileName) { - // echo "DEBUG: processing $summFileName
    "; - $jobname=jobname($expectedTestConfigs[$i]); - //echo "DEBUG: jobname: " . $jobname; - if (substr_startswith($summFileName, $testResultsDirName."/".$jobname)) { - //echo "DEBUG: found matching summary file: $summFileName
    "; - $xmlResults = simplexml_load_file($summFileName); - $testResults[$expectedTestConfigs[$i]]["duration"]=$xmlResults->duration; - $testResults[$expectedTestConfigs[$i]]["failCount"]=$xmlResults->failCount; - $testResults[$expectedTestConfigs[$i]]["passCount"]=$xmlResults->passCount; - $testResults[$expectedTestConfigs[$i]]["skipCount"]=$xmlResults->skipCount; - } - } - } - } - } - } - } - //echo "DEBUG: boxes: $boxes"; - return $boxes; -} - -/* -This function was originally copied from 'createIndex4x.php', where -the function was named 'printBuildColumns'. It's be heavily modified -to be used on individual build DL page. - -Its purpose is to return a short summary of "state of the tests". - */ -function printTestSummaryStatus() { - - include_once("buildproperties.php"); - - - // date and time of build, and elapsed time - - $buildTime=timeOfBuild($TIMESTAMP); - - // compute minutes elapsed since build started - $day=intval(date("Ymd")); - $time=intval(date("H"))*60+intval(date("i")); - $diff=($day-$buildDay)*24*60+$time-$buildTime; - - - - if (file_exists("testresults")) { - $testResultsDirName="testresults"; - } elseif (file_exists("results")) { - $testResultsDirName="results"; - } else { - // Neither directory exists at first ... until a tests completes and one result uploaded. - $testResultsDirName=""; - } - - $boxes=calcTestConfigsRan($fileName, $testResultsDirName); - // boxes == -1 is code that "bulid failed" and no tests are expected. - if ($boxes == -1) { - $buildimage="build_failed.gif"; - $buildalt="Build failed"; - } else { - $buildimage="build_done.gif"; - $buildalt="Build is available"; - } - - // set to zero globally, but computed in calcTestConfigsRan - global $expectedtestConfigs; - - $boxesTitle=""; - - // We skip the main "tests" part for patch builds, since don't expect any (for now). - if ($BUILD_TYPE !== "P" && $BUILD_TYPE !== "U" && $boxes !== -2) { - - // always put in links, since someone may want to look at logs, even if not tests results, per se - // don't forget to end link, after images decided. - - if ($boxes > -1) { - $boxesTitle=$boxes." of ".count($expectedTestConfigs)." test platforms finished."; - } - if ($testResultsDirName === "results") { - echo ""; - } else { - echo ""; - } - - if ($boxes == -1) { - $testimage="caution.gif"; - $testalt="Integration tests did not run due to failed build"; - } elseif ($boxes == 0 && $diff > 720) { - // assume if no results at all, after 12 hours, assume they didn't run for unknown reasosn - $testimage="caution.gif"; - $testalt="Integration tests did not run, due to unknown reasons."; - } elseif ($boxes > 0 && $boxes < count($expectedTestConfigs)) { - if ($diff > 1440) { - $testimage="junit.gif"; - $testalt="Tests results are available but did not finish on all machines"; - } else { - $testimage="runtests.gif"; - $testalt="Integration tests are running ..."; - } - } elseif ($boxes == count($expectedTestConfigs)) { - $testimage="junit.gif"; - $testalt="Tests results are available"; - } else { - $testimage="runtests.gif"; - $testalt="Integration tests are running ..."; - } - echo "\"$testalt\""; - if ($boxes > -1) { - echo " (".$boxes." of ".count($expectedTestConfigs)." platforms)"; - } - echo "\n"; - } else { - echo ""; - $testimage="results.gif"; - $testalt="Logs from build"; - echo "\"$testalt\""; - if ($BUILD_TYPE == "P" || $BUILD_TYPE == "U") { - echo " (No automated tests)"; - } elseif ($boxes == -2) { - echo " (No expected tests)"; - } else { - echo " (unexpected test boxes)"; - } - } - echo "\n"; -} - -function fileSizeForDisplay($filename) { - $onekilo=1024; - $onemeg=$onekilo * $onekilo; - $criteria = 10 * $onemeg; - $scaleChar = " "; - if (file_exists($filename)) { - $zipfilesize=filesize($filename); - if ($zipfilesize > $criteria) { - $zipfilesize=round($zipfilesize/$onemeg, 0); - $scaleChar = " MiB"; - } - else { - if ($zipfilesize > $onekilo) { - $zipfilesize=round($zipfilesize/$onekilo, 0); - $scaleChar = " KiB"; - } else { - // use raw size in bytes if less that one 1K - $scaleChar = " B"; - } - } - } - else { - $zipfilesize = 0; - } - $result = "(" . $zipfilesize . $scaleChar . ")"; - return $result; -} - -/* Deprecated. This function moved to "generate test results table" ant task. -This function "breaks" the full config string at meaningful -underscores, for improved display in tables and similar. -Remember, some config values can have more than two underscores, -such as ep46N-unit-lin64_linux.gtk.x86_64_8.0, which should -be split as - ep46N-unit-lin64 - lin64_linux.gtk.x86_64 - 8.0 - */ -function computeDisplayConfig($config) { - $lastUnderscore = strrpos ($config, "_"); - $firstUnderscore = strpos ($config, "_", strpos($config, "x86_64") + 6); - $platformLength=$lastUnderscore - $firstUnderscore - 1; - //echo "
    DEBUG: config: $config firstUnderscore: $firstUnderscore lastUnderscore: $lastUnderscore lastMinusFirst: $platformLength" - $jobname = substr($config,0,$firstUnderscore); - $platformconfig = substr($config,$firstUnderscore + 1,$platformLength); - $vmused = substr($config,$lastUnderscore+1); - //echo "DEBUG: jobname: ".$jobname."
    "; - //echo "DEBUG: platformconfig: ".$platformconfig."
    "; - //echo "DEBUG: vmused: ".$vmused."
    "; - return $jobname."
    ".$platformconfig."
    ".$vmused; - -} - -/* This function gets the first segment of the config - which is 'jobname' on Hudson. - */ -function jobname($config) { - $firstUnderscore = strpos ($config, "_", strpos($config, "x86_64") + 6); - $jobname = substr($config,0,$firstUnderscore); - return $jobname; -} - -function substr_startswith($haystack, $needle) { - return substr($haystack, 0, strlen($needle)) === $needle; -} diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/templateFiles/buildproperties.phpHoldForLocalTests b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/templateFiles/buildproperties.phpHoldForLocalTests deleted file mode 100644 index a2a55b6a060..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/templateFiles/buildproperties.phpHoldForLocalTests +++ /dev/null @@ -1,57 +0,0 @@ -rt.equinox.framework"; -$API_PREV_REF_LABEL = "4.4.0"; -$API_FREEZE_REF_LABEL = " "; -// finished properties for N20140707-2000 -?> diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/templateFiles/index.template.php b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/templateFiles/index.template.php deleted file mode 100644 index 45fff1194f4..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/templateFiles/index.template.php +++ /dev/null @@ -1,431 +0,0 @@ -$BUILD_ID"; -require("DL.thin.header.php.html"); - -?> - - - - - - - - - -
    -

    Eclipse Build: -Unstable!\n"; - } -?> -

    - -

    This page provides access to the various deliverables of Eclipse Platform build along with -its logs and tests.

    -Test-Build-Only flag found set. Input was not tagged.

    \n"; -} - -// $NEWS_ID needs to be added to buildproperties.php, such as $NEWS_ID="4.5/M4"; -// Once ready to display it. -if (isset ($NEWS_ID)) { - echo "New and Noteworthy
    \n"; -} -else { -// Show N&N link on the I-Build download page - echo "New and Noteworthy
    \n"; -} -// Similar for $ACK_ID and $README_ID, but they are added only for 'R builds', -// And, are added by the promotion scripts, as long as we keep same conventions. -if (isset ($ACK_ID)) { - echo "Acknowledgments
    \n"; -} -if (isset ($README_ID)) { - echo "Eclipse Project ${BUILD_ID} Readme
    \n"; -} -echo "Eclipse Project Plan
    \n"; - -if (isset ($BUILD_FAILED) ) { - echo "

    Build Failed

    See logs.

    \n"; - $PATTERN='!(.*)(/buildlogs/)(.*)!'; - $result = preg_match($PATTERN, $BUILD_FAILED, $MATCHES); - // cheap short cut, since we expect only 1 such file - $summaryFile=glob("buildFailed-*"); - if ($result !== FALSE) { - $SPECIFIC_LOG=$MATCHES[3]; - echo "

    Specifically, see the log with errors, \n"; - echo "or a summary.
    \n"; - echo "Or see traditional Compile Logs (if any).\n"; - echo "See recent changes in the git log.

    \n"; - } - -} -else { -?> - -

    Logs and Test Links

    - -"; - echo "
      "; - - // We will always display link to logs (as normal link, not using color:inherit;) - echo "
    • View the logs for the current build.
    • \n"; - - // This section if for overall status if anything failed, overall is failed - // -3 is special code meaning no testResults directory exists yet. - if ($boxes == -3) { - $testResultsStatus = "pending"; - } else { - /* since boxes is not -3, there must be at least one */ - $totalFailed = 0; - $expectedBoxes = count($expectedTestConfigs); - foreach ($expectedTestConfigs as $config) { - - if (isset($testResults[$config])) { - $testRes = $testResults[$config]; - $failed = $testRes['failCount']; - $totalFailed = $totalFailed + $failed; - } - } - if ($totalFailed == 0 && $boxes == $expectedBoxes) { - $testResultsStatus = "success"; - } elseif ($totalFailed == 0 && $boxes < $expectedBoxes) { - $testResultsStatus = "inProgress"; - } elseif ($totalFailed > 0 && $boxes > 0) { - $testResultsStatus = "failed"; - } else { - // This is some sort of programming error? - // Don't think we should get to here? - // Will flag as "unknown" but not sure how to convey that .... - // would only be useful if debugging. - $testResultsStatus = "unknown"; - } - } - - if (file_exists("overrideTestColor")) { - $linkColor='text-success'; - } - else { - if ($testResultsStatus === "failed") { - /* note we don't override 'inherit' cases, just 'failed'. */ - if (file_exists("overrideTestColor")) { - $linkColor='text-success'; - } else { - $linkColor = 'text-danger'; - } - } elseif ($testResultsStatus === "success") { - $linkColor='text-success'; - } elseif ($testResultsStatus === "pending") { - $linkColor='text-muted'; - } elseif ($testResultsStatus === "inProgress") { - $linkColor='text-muted'; - } - } - - - if ($testResultsStatus == "pending") { - echo "
    • Integration and unit tests are pending.
    • \n"; - } else { - echo "
    • View the integration and unit test results for the current build.
    • \n"; - } - - echo "
    \n"; - - if (file_exists("TEST_INVOCATION_FAILED.html")) { - $tf_file = file_get_contents("TEST_INVOCATION_FAILED.html"); - echo "

    Test Invocation Failed for some Machines

    $tf_file"; - } - - echo "

    Summary of Unit Tests Results

    "; - echo "\n"; - echo " \n"; - echo "\n"; - - foreach ($expectedTestConfigs as $config) { - //var_dump($testResults); - $displayConfig = computeDisplayConfig($config); - if (isset($testResults[$config])) { - $testRes = $testResults[$config]; - $failed = $testRes['failCount']; - $passed = $testRes['passCount']; - $total = $failed + $passed; - $duration = $testRes['duration']; - if (file_exists("overrideTestColor")) { - $linkColor='text-success'; - } - else { - if ($failed > 0) { - // note we don't override 'inherit' cases, just 'failed'. - if (file_exists("overrideTestColor")) { - $linkColor='text-success'; - } else { - $linkColor = 'text-danger'; - } - } else { - $linkColor='text-success'; - } - } - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - } - else { - // Yes, all configs intentionally links, since all go to the same place, but if no results yet, would not look like one. - $linkColor = 'text-muted'; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - } - } - echo "
    \n"; - echo "

    ".$boxesDisplay." of ".count($expectedTestConfigs)." integration and unit test configurations are complete.

    \n"; - if (file_exists("testNotes.html")) { - $my_file = file_get_contents("testNotes.html"); - echo $my_file; - } - echo "
    Tested PlatformFailedPassedTotalTest Time (s)
    \n"; - echo "".$displayConfig.""; - echo "$failed$passed$total$duration
    \n"; - echo "".$displayConfig.""; - echo "    
    \n"; - -?> - -

    Related Links

    - -SHA512 Checksums for $BUILD_ID (GPG)

    "; - } else if (file_exists($sums512file)) { - echo "

    SHA512 Checksums for $BUILD_ID"; - } - -?> -Report of changes from previous build.

    "; - } -?> - -
    - - - -
    -

    Eclipse p2 Repository  

    - - - - \n"; - echo "To update your Eclipse installation to this development stream, you can use the software repository at
    \n"; - echo "  $STREAM_REPO_URL
    \n"; - echo " \n"; - } - if ((file_exists("$relativePath3/updates/"."$BUILD_REPO_NAME")) || (file_exists("$relativePath4/updates/"."$BUILD_REPO_NAME")) ) { - echo " \n"; - echo "To update your build to use this specific build, you can use the software repository at
    \n"; - echo "  $BUILD_REPO_URL
    \n"; - echo " \n"; - } -?> - - - - - - -%repository% - - - - - -

    Eclipse SDK   -

    - - - - - - -%sdk% - - - -

    Tests and Testing Framework   -

    - - - - -%tests% - - - - -

    Platform Runtime Binary   -

    - - - - -%runtime% - - -

    JDT Core Batch Compiler    -

    - - - - -%jdtc% - - -

    SWT Binary and Source   -

    - - - - -%swt% - - - -
    - - - - - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/templateFiles/testNotesExample.html b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/templateFiles/testNotesExample.html deleted file mode 100644 index 7152837c878..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/templateFiles/testNotesExample.html +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/testManifest.xml b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/testManifest.xml index 255d4e50b36..dd1322c075d 100644 --- a/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/testManifest.xml +++ b/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/testManifest.xml @@ -1,548 +1,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/equinox/helper.xml b/eclipse.platform.releng.tychoeclipsebuilder/equinox/helper.xml deleted file mode 100644 index 462f786b478..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/equinox/helper.xml +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/staticDropFiles/build.php b/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/staticDropFiles/build.php deleted file mode 100644 index ed6e98becf6..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/staticDropFiles/build.php +++ /dev/null @@ -1,29 +0,0 @@ -$filesize"; -} - -function getDropSize($zipfile) { - $filesize = "N/A"; - $filesizebytes = filesize($zipfile); - if($filesizebytes > 0) { - if($filesizebytes < 1048576) - $filesize = round($filesizebytes / 1024, 0) . "K"; - else if ($filesizebytes >= 1048576 && $filesizebytes < 10485760) - $filesize = round($filesizebytes / 1048576, 1) . "M"; - else - $filesize = round($filesizebytes / 1048576, 0) . "M"; - } - return($filesize); -} - -// TODO: change build index tool not to generate these "calls" at all. -// In the mean time, we will just return empty string. -function generateChecksumLinks($zipfile, $buildDir) { - //return "\"md5\"/\"sha1\"/"; - //return "\"sha512\"/"; - return ""; -} -?> diff --git a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/staticDropFiles/download.php b/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/staticDropFiles/download.php deleted file mode 100644 index 675b2480a2b..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/staticDropFiles/download.php +++ /dev/null @@ -1,92 +0,0 @@ - - -Eclipse Download Click Through - - -'; - echo 'Downloading: '.$mirrorlink.''; - } else { - echo ''; - echo 'Downloading: '.$eclipselink.''; - } - echo '
    '; - echo '
    '; - if ($mirror) { - echo 'If your download does not begin automatically click here.'; - } else { - echo 'If your download does not begin automatically click here.'; - } -} -?> - - - -Important Notes
    '; - echo '

    -

    It is very important to read the following notes in order to run this version - of Eclipse. Once you have read the notes you can click on the Download link - to download the drop.

    - '; - echo ''; - echo '
    '; - echo '
    '; - - if ($mirror) { - echo 'Download'; - } else { - echo 'Download'; - } -} -?> - - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/staticDropFiles/equinox.css b/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/staticDropFiles/equinox.css deleted file mode 100644 index e24688b4600..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/staticDropFiles/equinox.css +++ /dev/null @@ -1,18 +0,0 @@ -#popupcontent { - position: absolute; - visibility: hidden; - overflow: hidden; - background-color: #F9F9F9; - border: 0px solid #333; - padding: 5px; -} - -.hidden { - position: absolute; - visibility: hidden; - overflow: hidden; -} - -div.collapsable { - display: none; -} \ No newline at end of file diff --git a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/templateFiles/index.template.php b/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/templateFiles/index.template.php deleted file mode 100644 index 51aa2d46c69..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/templateFiles/index.template.php +++ /dev/null @@ -1,130 +0,0 @@ -getProjectCommon()); - # Begin: page-specific settings. Change these. - $pageTitle = "Equinox $BUILD_TYPE_NAME Build: $BUILD_ID"; - $pageKeywords = "equinox, osgi, framework, runtime, download"; - $pageAuthor = "Equinox committers"; - $generateDropSize = 'generateDropSize'; - $generateChecksumLinks = 'generateChecksumLinks'; - $buildlabel = "$EQ_BUILD_DIR_SEG"; - $sums512file = "checksum/equinox-$BUILD_ID-SUMSSHA512"; - $sums512file_asc = $sums512file.".asc"; - if ((file_exists($sums512file)) && (file_exists($sums512file_asc))) { - $gpgchecksumline = "

    SHA512 Checksums for $BUILD_ID (GPG)

    "; - } else if (file_exists($sums512file)) { - $gpgchecksumline = "

    SHA512 Checksums for $BUILD_ID"; - } - $html = << - -

    -

    Equinox $BUILD_TYPE_NAME Build: $BUILD_ID

    -

    $BUILD_PRETTY_DATE

    - -
    -

    All of Equinox

    -

    A complete set of all bundles and launchers produced by the Equinox project. This zip is also a p2 repo.

    - - - %equinox% -
    -
    - -
    -

    Framework Only

    -

    The Equinox OSGi R4 framework implementation in a standalone package. -

    - - - %framework% -
    -
    - -
    -

     Add-on Bundles

    -

    Individual bundles that provide - standalone OSGi specified services or add-on mechanisms (e.g., the Eclipse extension registry) of interest to OSGi programmers.

    -
    - - - %extrabundles% -
    -
    -
    - - -
    -

     Other Required Bundles

    -

    A convenient set of bundles that are required by some of the Equinox bundles.

    -
    - - - %other% -
    -
    -
    - - -
    -

     Native Launchers

    -

    Platform-specific native launchers (e.g., eclipse.exe) for the Equinox framework. See the list - of supported OS configurations. -

    - - - %launchers% -
    -
    -
    - -
    -

     OSGi starter kits

    -

    A useful collection of Equinox bundles packaged as a ready to run system. This include the framework, p2 and other frequently used service implementations.

    -
    - - - %osgistarterkits% -
    -
    -
    - -
    -

    Other Information

    -

    How to verify a download.

    - $gpgchecksumline -
    - - -
    - -EOHTML; - generateRapPage( $App, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html ); -?> \ No newline at end of file diff --git a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/templateFiles/testResults.template.php b/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/templateFiles/testResults.template.php deleted file mode 100644 index c599ee7fc4f..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/templateFiles/testResults.template.php +++ /dev/null @@ -1,57 +0,0 @@ - - - -Test Results for $buildType $buildName "; -?> - - - - - - - - - - - - - %compilelogs% - -
    Compile Logs (Jar Files)ErrorsWarnings
    - - - - - - - - - - %accesseslogs% - -
    Compile Logs (Jar Files)Forbidden Access WarningsDiscouraged Access WarningsInformational Warnings
    - - - - - - - diff --git a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/testManifest.xml b/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/testManifest.xml deleted file mode 100644 index dc95c8700ae..00000000000 --- a/eclipse.platform.releng.tychoeclipsebuilder/equinox/publishingFiles/testManifest.xml +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scripts/releng/BuildDropDataGenerator.java b/scripts/releng/BuildDropDataGenerator.java new file mode 100644 index 00000000000..5a9a39eddac --- /dev/null +++ b/scripts/releng/BuildDropDataGenerator.java @@ -0,0 +1,241 @@ + +/******************************************************************************* + * Copyright (c) 2025, 2025 Hannes Wellmann and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Hannes Wellmann - initial API and implementation + *******************************************************************************/ + +import java.util.Map.Entry; + +import utilities.JSON; +import utilities.OS; + +Path DIRECTORY; +Optional FILES_LIST_FILE; + +/** + * Considered JVM properties are: + *
      + *
    • {@code directory} (required) -- path to the drop directory root.
    • + *
    • {@code filesList} (optional) -- path to a file listing all files and + * their size in the directory.
      + * Can be generated using the UNIX command + * {@code find . -exec stat --format "%n %s" {} \; }
    • + *
    + * The generated data files (mainly JSON) are written at locations within the + * specified directory where the website pages expect them. + */ +void main(String[] args) throws IOException { + DIRECTORY = Path.of(OS.readProperty("dropDirectory")).toRealPath(); + FILES_LIST_FILE = Optional.ofNullable(System.getProperty("filesList")).map(Path::of); + IO.println("INFO: Generating drop data file for"); + IO.println("\t" + DIRECTORY); + FILES_LIST_FILE.ifPresent(list -> { + IO.println("INFO: Reading files from:"); + IO.println("\t" + list); + }); + + switch (args[0]) { + case "mainEclipse" -> mainEclipsePageData(); + case "mainEquinox" -> mainEquinoxPageData(); + case "buildLogs" -> buildLogsPageData(); + default -> throw new IllegalArgumentException("Unexpected value: " + args[0]); + } +} + +final Pattern COMMA = Pattern.compile(","); + +void mainEclipsePageData() throws IOException { + Map files = OS.listFileTree(DIRECTORY, FILES_LIST_FILE, null, 1); + Map properties = OS.loadProperties(DIRECTORY.resolve("buildproperties.properties")); + String buildId = properties.get("BUILD_ID"); + ZonedDateTime buildDate = buildTimestamp(buildId); + + JSON.Object buildProperties = JSON.Object.create(); + // basic data + buildProperties.add("identifier", JSON.String.create(buildId)); + buildProperties.add("label", JSON.String.create(buildId)); + buildProperties.add("kind", JSON.String.create(properties.get("BUILD_TYPE_NAME"))); + buildProperties.add("release", JSON.String.create(properties.get("STREAM"))); + buildProperties.add("releaseShort", JSON.String.create(properties.get("RELEASE_VER"))); + buildProperties.add("previousReleaseAPILabel", JSON.String.create(previousReleaseAPILabel(properties))); + buildProperties.add("timestamp", JSON.String.create(buildDate.toString())); + + // tests + JSON.Array testConfigurations = COMMA.splitAsStream(properties.get("TEST_CONFIGURATIONS_EXPECTED")).map(c -> { + var config = c.split("-"); + return config[2] + "-" + config[3] + "-" + config[4].substring(0, config[4].indexOf('_')); + }).map(JSON.String::new).collect(JSON.Array.toJSONArray()); + buildProperties.add("expectedTests", testConfigurations); + + // files + buildProperties.add("p2Repository", JSON.Array.create(// + createFileEntry("repository-" + buildId + ".zip", files, "All", "repo.gif"))); + + buildProperties.add("sdkProducts", + collectFileEntries(files, filename -> filename.startsWith("eclipse-SDK-") && !OS.isMacTarGZ(filename))); + + buildProperties.add("eclipseTests", JSON.Array.create( // + createFileEntry("eclipse-Automated-Tests-" + buildId + ".zip", files, "All"))); + + JSON.Array platformProducts = collectFileEntries(files, + filename -> filename.startsWith("eclipse-platform-") && !OS.isMacTarGZ(filename)); + platformProducts.add(createFileEntry( // Add separate entry for eclipse-platform product p2-repository + "org.eclipse.platform-" + buildId + ".zip", files, "Platform Runtime Repo", "repo.gif")); + buildProperties.add("platformProducts", platformProducts); + + buildProperties.add("jdtCompiler", JSON.Array.create( // + createFileEntry("ecj-" + buildId + ".jar", files, "All"), + createFileEntry("ecjsrc-" + buildId + ".jar", files, "All"))); + + buildProperties.add("swtBinaries", collectFileEntries(files, filename -> filename.startsWith("swt-"))); + + Path file = DIRECTORY.resolve("buildproperties.json"); + IO.println("Write Eclipse drop main data to: " + file); + JSON.write(buildProperties, file); +} + +void mainEquinoxPageData() throws IOException { + Map files = OS.listFileTree(DIRECTORY, FILES_LIST_FILE, null, 1); + Map properties = OS.loadProperties(DIRECTORY.resolve("buildproperties.properties")); + String buildId = properties.get("BUILD_ID"); + ZonedDateTime buildDate = buildTimestamp(buildId); + + JSON.Object buildProperties = JSON.Object.create(); + // basic data + buildProperties.add("identifier", JSON.String.create(buildId)); + buildProperties.add("label", JSON.String.create(buildId)); + buildProperties.add("kind", JSON.String.create(properties.get("BUILD_TYPE_NAME"))); + buildProperties.add("timestamp", JSON.String.create(buildDate.toString())); + + // files + buildProperties.add("equinoxRepository", + collectFileEntries(files, filename -> filename.startsWith("equinox-SDK-"))); + + buildProperties.add("equinoxFramework", + collectFileEntries(files, filename -> filename.startsWith("org.eclipse.osgi_"))); + + Predicate isAddonBundle = filename -> (filename.startsWith("org.eclipse.equinox.") + || filename.startsWith("org.eclipse.osgi.")) && !filename.startsWith("org.eclipse.equinox.p2."); + Predicate isJar = filename -> filename.endsWith(".jar"); + + buildProperties.add("addonBundles", collectFileEntries(files, isAddonBundle.and(isJar))); + buildProperties.add("otherBundles", collectFileEntries(files, isAddonBundle.negate().and(isJar))); + + buildProperties.add("launchers", collectFileEntries(files, filename -> filename.startsWith("launchers-"))); + + buildProperties.add("starterKits", collectFileEntries(files, + filename -> filename.startsWith("EclipseRT-OSGi-StarterKit-") && !OS.isMacTarGZ(filename))); + + Path file = DIRECTORY.resolve("buildproperties.json"); + IO.println("Write Equinox drop main data to: " + file); + JSON.write(buildProperties, file); +} + +void buildLogsPageData() throws IOException { + Path buildLogsDirectory = Path.of("buildlogs"); + Path comparatorLogsDirectory = Path.of("buildlogs/comparatorlogs"); + Map files = OS.listFileTree(DIRECTORY, FILES_LIST_FILE, buildLogsDirectory, 3); + + JSON.Object logFiles = JSON.Object.create(); + JSON.Array buildLogs = colleFilesInDirectory(buildLogsDirectory, filename -> filename.startsWith("s"), files); + logFiles.add("build", buildLogs); + JSON.Array comparatorLogs = colleFilesInDirectory(comparatorLogsDirectory, _ -> true, files); + logFiles.add("comparator", comparatorLogs); + + Path file = DIRECTORY.resolve("buildlogs/logFiles.json"); + IO.println("Write RelEng logs data to: " + file); + JSON.write(logFiles, file); +} + +// --- data conversion/collection --- + +String previousReleaseAPILabel(Map buildProps) { + int major = Integer.parseInt(buildProps.get("STREAMMajor")); + int minor = Integer.parseInt(buildProps.get("STREAMMinor")); + if (minor == 0) { + throw new IllegalStateException("New major version not yet handled"); + } + return major + "." + (minor - 1); +} + +JSON.Array collectFileEntries(Map buildFiles, Predicate filenameFilter) { + return colleFilesInDirectory(null, filenameFilter, buildFiles); +} + +JSON.Array colleFilesInDirectory(Path inDirectory, Predicate filenameFilter, Map buildFiles) { + Function, String> getFilename = f -> f.getKey().getFileName().toString(); + int expectedNameCount = inDirectory != null ? inDirectory.getNameCount() + 1 : 1; + return buildFiles.entrySet().stream().filter(f -> { + Path file = f.getKey(); + if (file.getNameCount() != expectedNameCount || (inDirectory != null && !file.startsWith(inDirectory))) { + return false; + } + return filenameFilter.test(getFilename.apply(f)); + }).sorted(Comparator.comparing(getFilename, BY_OS_ARCH_FILE_NAME)) + .map(e -> createFileDescription(e.getKey().getFileName(), e.getValue())).collect(JSON.Array.toJSONArray()); +} + +final Comparator BY_OS_ARCH_FILE_NAME = Comparator.comparing((String filename) -> { // first sort by OS + if (OS.isWindowsArtifact(filename)) { + return 1; + } else if (OS.isLinuxArtifact(filename)) { + return 2; + } else if (OS.isMacOSArtifact(filename)) { + return 3; + } + return 100; +}).thenComparing(Comparator.comparing(filename -> { // then sort by arch + if (filename.contains("-x86_64")) { + return 1; + } + return 100; +})).thenComparing(Comparator.naturalOrder()); + +JSON.Object createFileEntry(String filename, Map buildFiles, String platform, String icon) { + return createFileEntry(Path.of(filename), buildFiles, platform, icon); +} + +JSON.Object createFileEntry(String filename, Map buildFiles, String platform) { + return createFileEntry(Path.of(filename), buildFiles, platform, null); +} + +JSON.Object createFileEntry(Path filename, Map buildFiles, String platform, String icon) { + JSON.Object file = createFileDescription(filename, buildFiles.get(filename)); + if (platform != null) { + file.add("platform", JSON.String.create(platform)); + } + if (icon != null) { + file.add("icon", JSON.String.create(icon)); + } + return file; +} + +JSON.Object createFileDescription(Path file, Long fileSize) { + JSON.Object fileEntry = JSON.Object.create(); + fileEntry.add("name", JSON.String.create(file.toString().replace(File.separatorChar, '/'))); + fileEntry.add("size", JSON.String.create(OS.fileSizeAsString(fileSize))); + return fileEntry; +} + +final Pattern INTEGRATION_BUILD_ID = Pattern.compile("(I|Y)(?\\d{8})-(?