From 3d68606ef451841d0bf07c4a07060579a824e2e8 Mon Sep 17 00:00:00 2001
From: Vivek Kumar Dutta <vivek.dutta@iopsys.eu>
Date: Mon, 11 Nov 2024 11:48:57 +0530
Subject: [PATCH] Enhance error handling

---
 docker/code-analysis/static_code_analysis.sh | 42 ++++++++++++++++++--
 static-code-analysis.yml                     | 16 ++------
 2 files changed, 43 insertions(+), 15 deletions(-)

diff --git a/docker/code-analysis/static_code_analysis.sh b/docker/code-analysis/static_code_analysis.sh
index 44c069f..3f84005 100755
--- a/docker/code-analysis/static_code_analysis.sh
+++ b/docker/code-analysis/static_code_analysis.sh
@@ -1,4 +1,5 @@
 #!/bin/bash
+set -eo pipefail
 
 log()
 {
@@ -106,7 +107,7 @@ run_cpd_check()
     exec_cmd /usr/local/pmd/bin/run.sh cpd --language c --exclude ./test/ ${CPD_OPTIONS} --files ${SOURCE_FOLDER}
 }
 
-main()
+validate_c_code()
 {
 	log "SOURCE_FOLDER: ${SOURCE_FOLDER}"
 	log "COMPILATION_FIXUP: ${COMPILATION_FIXUP}"
@@ -126,6 +127,11 @@ main()
 		fi
 	fi
 
+	if [ "${SOURCE_FOLDER}" == "SKIP" ]; then
+		log "Skipping C code analysis"
+		exit 0
+	fi
+
 	# Install pre-req if present/defined
 	if [ -f "./gitlab-ci/install-dependencies.sh" ]; then
 		log "Installing prerequisites for compilation"
@@ -147,10 +153,40 @@ main()
 	run_cppcheck_validation
 
 	# Run clang analysis
-	run_cppcheck_clang_validation
+	# run_cppcheck_clang_validation
 
 	# Run infer analysis
 	run_infer_analysis
 }
 
-main "$@"
+validate_shell_script()
+{
+	log "Running optional tests"
+	if [ -z "${SHELL_SRC}" ]; then
+		log "Skipping ShellCheck path not defined"
+		exit 0
+	fi
+
+	if [ "${SHELL_SRC}" == "SKIP" ]; then
+		log "Skipping ShellChecks ..."
+		exit 0
+	fi
+
+	log "Running shellcheck ${SHELLCHECK_OPTIONS} ${SHELL_SRC}"
+	exec_cmd shellcheck ${SHELLCHECK_OPTIONS} ${SHELL_SRC}
+}
+
+validation_type="${1}"
+
+case "${validation_type}" in
+	c_code)
+		validate_c_code "${@}"
+		;;
+	shell_script)
+		validate_shell_script "${@}"
+		;;
+	*)
+		echo "Unsupported validation type: ${validation_type}"
+		exit 1
+	;;
+esac
diff --git a/static-code-analysis.yml b/static-code-analysis.yml
index 36ecd82..b0f27b5 100644
--- a/static-code-analysis.yml
+++ b/static-code-analysis.yml
@@ -1,5 +1,5 @@
 variables:
-  COMMON_IMAGE: "dev.iopsys.eu:5050/iopsys/gitlab-ci-pipeline/code-analysis:1.2"
+  COMMON_IMAGE: "dev.iopsys.eu:5050/iopsys/gitlab-ci-pipeline/code-analysis:1.3"
   FLAWFINDER_OPTIONS: ""
   CPD_OPTIONS: "--minimum-tokens 200"
   CPPCHECK_OPTIONS: ""
@@ -14,10 +14,7 @@ run_static_code_analysis:
   stage: static_code_analysis
   allow_failure: false
   script:
-    - "static_code_analysis.sh"
-  rules:
-    - if: $SOURCE_FOLDER
-      when: always
+    - "static_code_analysis.sh c_code"
   artifacts:
     when: on_failure
     paths:
@@ -27,11 +24,6 @@ run_static_code_analysis:
 run_shell_checks:
   image: ${COMMON_IMAGE}
   stage: static_code_analysis
-  allow_failure: true
+  allow_failure: false
   script:
-    - echo "Running optional tests"
-    - echo "Running shellcheck ${SHELLCHECK_OPTIONS} ${SHELL_SRC}"
-    - "shellcheck ${SHELLCHECK_OPTIONS} ${SHELL_SRC}"
-  rules:
-    - if: $SHELL_SRC
-      when: always
+    - "static_code_analysis.sh shell_script"
-- 
GitLab