Introduces Regression for 32 and 64 bit threadx and smp kernel in Debug, MinSizeRel and Release configuration #4

Merged
alex merged 79 commits from feature/test into main 2026-04-02 14:09:29 +01:00
Showing only changes of commit ea1945983f - Show all commits

32
Jenkinsfile vendored
View File

@@ -1,5 +1,7 @@
def suites = ['threadx', 'smp'] def suites = ['threadx', 'smp']
def presets = ['Debug32', 'Release32'] def presets = ['Debug32', 'Release32']
def simulatorImageLatest = 'git.minres.com/here/here-vp:latest'
def threadxTestSimulator = '/usr/local/bin/riscv-vp'
def runOneRegression(String suite, String preset, String simulatorPath) { def runOneRegression(String suite, String preset, String simulatorPath) {
def suiteDir = "test/${suite}" def suiteDir = "test/${suite}"
@@ -43,11 +45,11 @@ def resolveImageCommit(String image) {
} }
} }
def runRegressionLane(String image, String simulatorPath, boolean allowFailure) { def runRegressionLane(String image, String simulatorPath, boolean allowFailure, List suiteNames, List presetNames) {
def parallelTasks = [:] def parallelTasks = [:]
for (String suite : suites) { for (String suite : suiteNames) {
for (String preset : presets) { for (String preset : presetNames) {
def suiteName = suite def suiteName = suite
def presetName = preset def presetName = preset
def taskName = "${suiteName}-${presetName}" def taskName = "${suiteName}-${presetName}"
@@ -79,16 +81,6 @@ properties([
name: 'SIMULATOR_IMAGE_PINNED', name: 'SIMULATOR_IMAGE_PINNED',
defaultValue: 'git.minres.com/here/here-vp:ac4f736', defaultValue: 'git.minres.com/here/here-vp:ac4f736',
description: 'Version-pinned Docker image used for the blocking regression lane' description: 'Version-pinned Docker image used for the blocking regression lane'
),
string(
name: 'SIMULATOR_IMAGE_LATEST',
defaultValue: 'git.minres.com/here/here-vp:latest',
description: 'Moving Docker image tag used for the canary lane'
),
string(
name: 'THREADX_TEST_SIMULATOR',
defaultValue: '/usr/local/bin/riscv-vp',
description: 'Absolute path to the simulator executable inside the Docker image'
) )
]) ])
]) ])
@@ -104,31 +96,31 @@ node {
stage('Check Canary Divergence') { stage('Check Canary Divergence') {
def pinnedCommit = resolveImageCommit(params.SIMULATOR_IMAGE_PINNED) def pinnedCommit = resolveImageCommit(params.SIMULATOR_IMAGE_PINNED)
def latestCommit = resolveImageCommit(params.SIMULATOR_IMAGE_LATEST) def latestCommit = resolveImageCommit(simulatorImageLatest)
if (!pinnedCommit) { if (!pinnedCommit) {
error "Missing git-commit label on ${params.SIMULATOR_IMAGE_PINNED}" error "Missing git-commit label on ${params.SIMULATOR_IMAGE_PINNED}"
} }
if (!latestCommit) { if (!latestCommit) {
error "Missing git-commit label on ${params.SIMULATOR_IMAGE_LATEST}" error "Missing git-commit label on ${simulatorImageLatest}"
} }
canaryShouldRun = (pinnedCommit != latestCommit) canaryShouldRun = (pinnedCommit != latestCommit)
if (canaryShouldRun) { if (canaryShouldRun) {
echo "Canary enabled: ${params.SIMULATOR_IMAGE_LATEST} (${latestCommit}) diverges from ${params.SIMULATOR_IMAGE_PINNED} (${pinnedCommit})" echo "Canary enabled: ${simulatorImageLatest} (${latestCommit}) diverges from ${params.SIMULATOR_IMAGE_PINNED} (${pinnedCommit})"
} else { } else {
echo "Canary skipped: ${params.SIMULATOR_IMAGE_LATEST} and ${params.SIMULATOR_IMAGE_PINNED} both use git-commit ${pinnedCommit}" echo "Canary skipped: ${simulatorImageLatest} and ${params.SIMULATOR_IMAGE_PINNED} both use git-commit ${pinnedCommit}"
} }
} }
stage('Stable Regression') { stage('Stable Regression') {
runRegressionLane(params.SIMULATOR_IMAGE_PINNED, params.THREADX_TEST_SIMULATOR, false) runRegressionLane(params.SIMULATOR_IMAGE_PINNED, threadxTestSimulator, false, suites, presets)
} }
stage('Simulator Canary') { stage('Simulator Canary') {
if (canaryShouldRun) { if (canaryShouldRun) {
runRegressionLane(params.SIMULATOR_IMAGE_LATEST, params.THREADX_TEST_SIMULATOR, true) runRegressionLane(simulatorImageLatest, threadxTestSimulator, true, suites, presets)
} else { } else {
echo 'Skipping canary lane because latest and pinned images are identical.' echo 'Skipping canary lane because latest and pinned images are identical.'
} }
@@ -143,7 +135,7 @@ node {
if (currentBuild.currentResult == 'SUCCESS') { if (currentBuild.currentResult == 'SUCCESS') {
rocketSend ":thumbsup: ThreadX regression run passed, results at ${env.RUN_DISPLAY_URL} " rocketSend ":thumbsup: ThreadX regression run passed, results at ${env.RUN_DISPLAY_URL} "
} else if (currentBuild.currentResult == 'UNSTABLE') { } else if (currentBuild.currentResult == 'UNSTABLE') {
rocketSend ":warning: ThreadX canary regression is unstable on ${params.SIMULATOR_IMAGE_LATEST}, please check ${env.RUN_DISPLAY_URL} " rocketSend ":warning: ThreadX canary regression is unstable on ${simulatorImageLatest}, please check ${env.RUN_DISPLAY_URL} "
} else if (currentBuild.currentResult == 'FAILURE') { } else if (currentBuild.currentResult == 'FAILURE') {
archiveArtifacts artifacts: 'failed_seeds_*.txt', followSymlinks: false, onlyIfSuccessful: false archiveArtifacts artifacts: 'failed_seeds_*.txt', followSymlinks: false, onlyIfSuccessful: false
rocketSend ":thumbsdown: ThreadX regression failed, please check ${env.RUN_DISPLAY_URL} " rocketSend ":thumbsdown: ThreadX regression failed, please check ${env.RUN_DISPLAY_URL} "