Files
git.stella-ops.org/devops/services/scanner-ci-runner/run-scanner-ci.sh
2025-12-26 18:11:06 +02:00

89 lines
3.2 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# Scanner CI runner harness (DEVOPS-SCANNER-CI-11-001)
# Builds Scanner solution and runs grouped test buckets with warmed NuGet cache.
repo_root="$(cd "$(dirname "$0")/../../.." && pwd)"
ts="$(date -u +%Y%m%dT%H%M%SZ)"
out_dir="$repo_root/ops/devops/artifacts/scanner-ci/$ts"
logs_dir="$out_dir/tests"
mkdir -p "$logs_dir"
export DOTNET_CLI_TELEMETRY_OPTOUT=${DOTNET_CLI_TELEMETRY_OPTOUT:-1}
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=${DOTNET_SKIP_FIRST_TIME_EXPERIENCE:-1}
export NUGET_PACKAGES=${NUGET_PACKAGES:-$repo_root/.nuget/packages}
export NUGET_SOURCES=${NUGET_SOURCES:-"$repo_root/local-nugets;$repo_root/.nuget/packages"}
export TEST_FILTER=${TEST_FILTER:-""}
export DOTNET_RESTORE_DISABLE_PARALLEL=${DOTNET_RESTORE_DISABLE_PARALLEL:-1}
mkdir -p "$NUGET_PACKAGES"
rsync -a "$repo_root/local-nugets/" "$NUGET_PACKAGES/" >/dev/null 2>&1 || true
restore_sources=()
IFS=';' read -ra SRC_ARR <<< "$NUGET_SOURCES"
for s in "${SRC_ARR[@]}"; do
[[ -n "$s" ]] && restore_sources+=(--source "$s")
done
solution="$repo_root/src/Scanner/StellaOps.Scanner.sln"
dotnet restore "$solution" --ignore-failed-sources "${restore_sources[@]}"
build_binlog="$out_dir/build.binlog"
dotnet build "$solution" -c Release /p:ContinuousIntegrationBuild=true /bl:"$build_binlog"
common_test_args=( -c Release --no-build --results-directory "$logs_dir" )
if [[ -n "$TEST_FILTER" ]]; then
common_test_args+=( --filter "$TEST_FILTER" )
fi
run_tests() {
local project="$1" name="$2"
dotnet test "$project" "${common_test_args[@]}" --logger "trx;LogFileName=${name}.trx"
}
run_tests "$repo_root/src/Scanner/__Tests/StellaOps.Scanner.Core.Tests/StellaOps.Scanner.Core.Tests.csproj" core
run_tests "$repo_root/src/Scanner/__Tests/StellaOps.Scanner.Analyzers.OS.Tests/StellaOps.Scanner.Analyzers.OS.Tests.csproj" analyzers-os
run_tests "$repo_root/src/Scanner/__Tests/StellaOps.Scanner.Analyzers.Lang.Tests/StellaOps.Scanner.Analyzers.Lang.Tests.csproj" analyzers-lang
run_tests "$repo_root/src/Scanner/__Tests/StellaOps.Scanner.WebService.Tests/StellaOps.Scanner.WebService.Tests.csproj" web
run_tests "$repo_root/src/Scanner/__Tests/StellaOps.Scanner.Worker.Tests/StellaOps.Scanner.Worker.Tests.csproj" worker
summary="$out_dir/summary.json"
{
printf '{
'
printf ' "timestamp_utc": "%s",
' "$ts"
printf ' "build_binlog": "%s",
' "${build_binlog#${repo_root}/}"
printf ' "tests": [
'
printf ' {"name":"core","trx":"%s"},
' "${logs_dir#${repo_root}/}/core.trx"
printf ' {"name":"analyzers-os","trx":"%s"},
' "${logs_dir#${repo_root}/}/analyzers-os.trx"
printf ' {"name":"analyzers-lang","trx":"%s"},
' "${logs_dir#${repo_root}/}/analyzers-lang.trx"
printf ' {"name":"web","trx":"%s"},
' "${logs_dir#${repo_root}/}/web.trx"
printf ' {"name":"worker","trx":"%s"}
' "${logs_dir#${repo_root}/}/worker.trx"
printf ' ],
'
printf ' "nuget_packages": "%s",
' "${NUGET_PACKAGES#${repo_root}/}"
printf ' "sources": [
'
for i in "${!SRC_ARR[@]}"; do
sep=","; [[ $i -eq $((${#SRC_ARR[@]}-1)) ]] && sep=""
printf ' "%s"%s
' "${SRC_ARR[$i]}" "$sep"
done
printf ' ]
'
printf '}
'
} > "$summary"
echo "Artifacts written to ${out_dir#${repo_root}/}"