blob: 10cd043898ec9666741b75cba15b051bd571b855 [file] [edit]
# Change to build directory.
# SPDX-FileCopyrightText: The Eigen Authors
# SPDX-License-Identifier: MPL-2.0
$rootdir = Get-Location
# The affected-tests tier (see scripts/affected_tests.py) passes its CTest
# filter as a file rather than a variable so the regex is not bounded by CI
# variable limits. "ALL" means run everything the paired build produced,
# "NONE" means the merge request affects no test at all.
if (${EIGEN_CI_CTEST_REGEX_FILE}) {
$regex_file = ${EIGEN_CI_CTEST_REGEX_FILE}
if (-Not [System.IO.Path]::IsPathRooted($regex_file)) {
$regex_file = Join-Path ${rootdir} $regex_file
}
# Fail loudly rather than falling through: a missing selection would
# otherwise silently run the whole suite against a partial build.
if (-Not (Test-Path $regex_file)) {
Write-Error ("EIGEN_CI_CTEST_REGEX_FILE=${EIGEN_CI_CTEST_REGEX_FILE} does not exist. " +
"The select:tests artifact is missing; refusing to guess a test filter.")
Exit 1
}
$selection = (Get-Content $regex_file -Raw).Trim()
if ($selection -eq "NONE") {
Write-Host "No tests are affected by this merge request; nothing to run."
Exit 0
} elseif ($selection -eq "ALL") {
$EIGEN_CI_CTEST_REGEX = ""
} else {
$EIGEN_CI_CTEST_REGEX = $selection
}
}
cd $EIGEN_CI_BUILDDIR
# Determine number of processors for parallel tests.
$NPROC=${Env:NUMBER_OF_PROCESSORS}
# Total attempts for flaky tests, matching test.linux.script.sh. No job sets
# this, and an empty value made the retry below spell "until-pass:", which ctest
# rejects as a usage error -- so the retry never ran and its exit status masked
# the test failure that triggered it.
if (-Not ${EIGEN_CI_CTEST_REPEAT}) { $EIGEN_CI_CTEST_REPEAT = 3 }
# @(), not "": an "ALL" selection leaves no regex and no label, so the
# no-filter case is reachable and must contribute no argument to ctest.
$target = @()
if (${EIGEN_CI_CTEST_REGEX}) {
$target = "-R","${EIGEN_CI_CTEST_REGEX}"
} elseif (${EIGEN_CI_CTEST_LABEL}) {
$target = "-L","${EIGEN_CI_CTEST_LABEL}"
}
# Same knob as test.linux.script.sh, for tests this runner cannot execute.
$exclude = @()
if (${EIGEN_CI_CTEST_EXCLUDE}) {
$exclude = "-E","${EIGEN_CI_CTEST_EXCLUDE}"
}
$ctest_cmd = { ctest ${EIGEN_CI_CTEST_ARGS} --parallel ${NPROC} --output-on-failure --no-compress-output --build-noclean ${target} ${exclude} @args }
Write-Host "Running initial tests..."
& $ctest_cmd "-T" "test"
$exit_code = $LASTEXITCODE
if ($exit_code -eq 0) {
Write-Host "Tests passed on the first attempt."
}
else {
Write-Host "Initial tests failed with exit code $exit_code. Retrying up to $EIGEN_CI_CTEST_REPEAT times..."
& $ctest_cmd "--rerun-failed" "--repeat" "until-pass:$EIGEN_CI_CTEST_REPEAT"
$exit_code = $LASTEXITCODE
if ($exit_code -eq 0) {
Write-Host "Tests passed on retry."
$exit_code = 42
}
}
# Return to root directory.
cd ${rootdir}
Exit $exit_code