From 3ea1c5a5f2684113cf4593eb871da656fbfa72e1 Mon Sep 17 00:00:00 2001 From: General Kroll Date: Sat, 23 Aug 2025 09:15:04 +1000 Subject: [PATCH] static-analysis-v2-0-1 Summary: - Richer diagnostics. - Parallel analysis of providers and services. --- .github/workflows/aot.yml | 9 ++++-- .../aot-analysis/01-aot-analysis-compact.sh | 16 ++++++++-- .../aot-orchestration/01-aot-analyse-all.sh | 30 +++++++++++++++++++ .../02-post-aot-analysis-summary.sh | 24 +++++++++++++++ 4 files changed, 74 insertions(+), 5 deletions(-) create mode 100755 scripts/cicd/shell/aot-orchestration/01-aot-analyse-all.sh create mode 100755 scripts/cicd/shell/aot-orchestration/02-post-aot-analysis-summary.sh diff --git a/.github/workflows/aot.yml b/.github/workflows/aot.yml index 6ac654d9..771a4802 100644 --- a/.github/workflows/aot.yml +++ b/.github/workflows/aot.yml @@ -105,8 +105,11 @@ jobs: providerID="$(basename "${subdir}")" echo "Processing provider '${providerID}' at subdirectory: '${subdir}'" 1>&2 echo "" - ./scripts/cicd/shell/aot-analysis/01-aot-analysis-compact.sh ${{ github.workspace }}/stackql-any-sdk/build/anysdk "${providerID}" "${subdir}/v00.00.00000/provider.yaml" & - echo "" + for line in $(${{ github.workspace }}/stackql-any-sdk/build/anysdk interrogate services ${{ github.workspace }}/providers ${subdir}/v00.00.00000/provider.yaml); do + serviceIdentifier="${line}" + ./scripts/cicd/shell/aot-analysis/01-aot-analysis-compact.sh ${{ github.workspace }}/stackql-any-sdk/build/anysdk "${providerID}" "${subdir}/v00.00.00000/provider.yaml" "${serviceIdentifier}" & + echo "" + done done echo "" echo "All tasks initiated. Waiting for them to complete..." @@ -138,7 +141,7 @@ jobs: - name: Upload AOT analysis logs uses: actions/upload-artifact@v4.3.1 - if: success() + if: always() with: name: aot_analysis_logs path: ./test/log diff --git a/scripts/cicd/shell/aot-analysis/01-aot-analysis-compact.sh b/scripts/cicd/shell/aot-analysis/01-aot-analysis-compact.sh index b8a003f6..08c15c83 100755 --- a/scripts/cicd/shell/aot-analysis/01-aot-analysis-compact.sh +++ b/scripts/cicd/shell/aot-analysis/01-aot-analysis-compact.sh @@ -10,12 +10,24 @@ providerID="${2}" providerRootFile="${3}" +serviceIdentifier="${4}" + logDir="${REPOSITORY_ROOT}/test/log" registryDir="${REPOSITORY_ROOT}/providers" -${anySdkExe} aot "${registryDir}" "${providerRootFile}" -v > "${logDir}/aot_${providerID}.log" 2>&1 +if [ "${serviceIdentifier}" != "" ]; then + ${anySdkExe} aot "${registryDir}" "${providerRootFile}" "${serviceIdentifier}" -v > "${logDir}/aot_${providerID}_${serviceIdentifier}.log" 2>&1 +else + ${anySdkExe} aot "${registryDir}" "${providerRootFile}" -v > "${logDir}/aot_${providerID}.log" 2>&1 +fi rc="$?" -echo "${rc}" > "${logDir}/rc_aot_${providerID}.txt" \ No newline at end of file +if [ "${serviceIdentifier}" != "" ]; then + echo "${rc}" > "${logDir}/rc_aot_${providerID}_${serviceIdentifier}.txt" + echo "${SECONDS}" > "${logDir}/duration_seconds_aot_${providerID}_${serviceIdentifier}.txt" +else + echo "${rc}" > "${logDir}/rc_aot_${providerID}.txt" + echo "${SECONDS}" > "${logDir}/duration_seconds_aot_${providerID}.txt" +fi \ No newline at end of file diff --git a/scripts/cicd/shell/aot-orchestration/01-aot-analyse-all.sh b/scripts/cicd/shell/aot-orchestration/01-aot-analyse-all.sh new file mode 100755 index 00000000..7fa08f54 --- /dev/null +++ b/scripts/cicd/shell/aot-orchestration/01-aot-analyse-all.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +CUR_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" + +REPOSITORY_ROOT="$(realpath "${CUR_DIR}/../../../..")" + +anySdkCliPath="${1}" + +for sd in ${REPOSITORY_ROOT}/providers/src/*/ ; do + echo "" + subdir="$(realpath "${sd}")" + providerID="$(basename "${subdir}")" + echo "Processing provider '${providerID}' at subdirectory: '${subdir}'" 1>&2 + echo "" + for line in $(${anySdkCliPath} interrogate services ${REPOSITORY_ROOT}/providers ${subdir}/v00.00.00000/provider.yaml); do + serviceIdentifier="${line}" + ${REPOSITORY_ROOT}/scripts/cicd/shell/aot-analysis/01-aot-analysis-compact.sh ${anySdkCliPath} "${providerID}" "${subdir}/v00.00.00000/provider.yaml" "${serviceIdentifier}" & + echo "" + done +done + +echo "" +echo "All tasks initiated. Waiting for them to complete..." 1>&2 +echo "" + +wait + +echo "" +echo "All tasks completed." 1>&2 +echo "" diff --git a/scripts/cicd/shell/aot-orchestration/02-post-aot-analysis-summary.sh b/scripts/cicd/shell/aot-orchestration/02-post-aot-analysis-summary.sh new file mode 100755 index 00000000..d4d6ffa3 --- /dev/null +++ b/scripts/cicd/shell/aot-orchestration/02-post-aot-analysis-summary.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +CUR_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" + +REPOSITORY_ROOT="$(realpath "${CUR_DIR}/../../../..")" + + +rc='0' + +for rcf in ${REPOSITORY_ROOT}/test/log/rc_* ; do + thisrc="$(cat "${rcf}")" + if [ "$thisrc" != "0" ]; then + echo "AOT analysis failure detected for: '${rcf}'" 1>&2 + rc='1' + fi +done + +if [ "$rc" != "0" ]; then + echo "AOT analysis failures detected." 1>&2 + exit 1 +fi + +echo "All AOT analysis tasks completed successfully." 1>&2 +