From 4b5c3e24ef236dd9e8a806cc274fd7af666a4365 Mon Sep 17 00:00:00 2001 From: andrew clark Date: Thu, 18 Dec 2025 13:15:33 -0700 Subject: [PATCH] Supporting Custom Build Trace File Names (#3443) * Removing hard-coded trace filename * Including stage name in notification * Simplifying capture setup and tagging file names with arch * Removed test property from notification message * Fixing regex to get arch name * Fixing error in notification and modified regex [ROCm/composable_kernel commit: e77a7ca2bc65651b5e87a0127e0335733aca2f35] --- Jenkinsfile | 37 ++++++---------------- script/infra_helper/capture_build_trace.js | 3 +- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index cf4f13eff1..1f3ca6d78b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -74,7 +74,9 @@ def sendFailureNotifications() { def generateAndArchiveBuildTraceVisualization(String buildTraceFileName) { try { - // Attempt to download the build trace file to check if it exists + checkout scm + + // Retrieve the build trace artifact def traceFileExists = false try { copyArtifacts( @@ -84,35 +86,14 @@ def generateAndArchiveBuildTraceVisualization(String buildTraceFileName) { ) traceFileExists = fileExists(buildTraceFileName) } catch (Exception e) { - echo "Could not copy artifacts: ${e.getMessage()}" + echo "Could not copy build trace artifact: ${e.getMessage()}" traceFileExists = false - } - - sh """ - echo "post download:" - ls -la - """ - - if (traceFileExists) { - // Move the build trace file to a temporary location to preserve it during checkout - sh """ - mkdir -p /tmp/jenkins_artifacts - cp ${buildTraceFileName} /tmp/jenkins_artifacts/${buildTraceFileName} - ls -la /tmp/jenkins_artifacts/ - """ - } else { - echo "Build trace archive not found" return } - - // Checkout source code to get required files - checkout scm - // Restore the build trace file after checkout sh """ + echo "post artifact download:" ls -la - cp /tmp/jenkins_artifacts/${buildTraceFileName} ${buildTraceFileName} - ls -la ${buildTraceFileName} """ // Pull image @@ -132,10 +113,11 @@ def generateAndArchiveBuildTraceVisualization(String buildTraceFileName) { """ // Run container to get snapshot - def dockerOpts = "--cap-add=SYS_ADMIN -v \"\$(pwd)/workspace:/workspace\" -e NODE_PATH=/home/pptruser/node_modules" + def dockerOpts = "--cap-add=SYS_ADMIN -v \"\$(pwd)/workspace:/workspace\" -e NODE_PATH=/home/pptruser/node_modules -e BUILD_TRACE_FILE=${buildTraceFileName}" // Create unique image name by sanitizing job name def sanitizedJobName = env.JOB_NAME.replaceAll(/[\/\\:*?"<>| ]/, '_') - def imageName = "perfetto_snapshot_${sanitizedJobName}_build_${env.BUILD_NUMBER}.png" + def architectureName = (buildTraceFileName =~ /(gfx[0-9a-zA-Z]+)/)[0][1] + def imageName = "perfetto_snapshot_${sanitizedJobName}_build_${env.BUILD_NUMBER}_${architectureName}.png" sh """ docker run --rm ${dockerOpts} ${image} node /workspace/capture_build_trace.js mv ./workspace/perfetto_snapshot_build.png ./workspace/${imageName} @@ -151,7 +133,7 @@ def generateAndArchiveBuildTraceVisualization(String buildTraceFileName) { withCredentials([string(credentialsId: 'ck_ci_build_perf_webhook_url', variable: 'WEBHOOK_URL')]) { sh ''' # Create build trace filename with build number based on the original filename - BUILD_TRACE_WITH_NUMBER=$(echo "''' + buildTraceFileName + '''" | sed 's/.json/_''' + sanitizedJobName + '''_''' + env.BUILD_NUMBER + '''.json/') + BUILD_TRACE_WITH_NUMBER=$(echo "''' + buildTraceFileName + '''" | sed 's/.json/_''' + sanitizedJobName + '''_''' + env.BUILD_NUMBER + '''_''' + architectureName + '''.json/') # Convert image to base64 echo "Converting image to base64..." @@ -171,6 +153,7 @@ def generateAndArchiveBuildTraceVisualization(String buildTraceFileName) { printf ' "buildNumber": "%s",\n' "''' + env.BUILD_NUMBER + '''" printf ' "jobUrl": "%s",\n' "''' + env.RUN_DISPLAY_URL + '''" printf ' "imageName": "%s",\n' "''' + imageName + '''" + printf ' "architecture": "%s",\n' "''' + architectureName + '''" printf ' "imageData": "%s",\n' "$IMAGE_BASE64" printf ' "buildTraceName": "%s",\n' "$BUILD_TRACE_WITH_NUMBER" printf ' "buildTraceData": "%s"\n' "$BUILD_TRACE_BASE64" diff --git a/script/infra_helper/capture_build_trace.js b/script/infra_helper/capture_build_trace.js index e484a815cc..0853b5e493 100644 --- a/script/infra_helper/capture_build_trace.js +++ b/script/infra_helper/capture_build_trace.js @@ -1,4 +1,5 @@ const puppeteer = require('puppeteer'); +const buildTraceFileName = process.env.BUILD_TRACE_FILE; (async () => { try { @@ -31,7 +32,7 @@ const puppeteer = require('puppeteer'); page.waitForFileChooser(), element.click() ]); - await fileChooser.accept(['/workspace/ck_build_trace.json']); + await fileChooser.accept([`/workspace/${buildTraceFileName}`]); } else { throw new Error('Element not found'); }