From 35a541de0d0309602c43c46ef42ee4aea40b30a8 Mon Sep 17 00:00:00 2001
From: Alan Nelson <alan.nelson@nebraska.edu>
Date: Mon, 19 Aug 2024 17:28:09 -0500
Subject: [PATCH] Integrate new bash script into approval check flow

---
 merge-request-check/Dockerfile            |  3 +++
 merge-request-check/approval_check.py     | 17 +++++++++++++++--
 merge-request-check/merge_review_check.sh |  3 +++
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/merge-request-check/Dockerfile b/merge-request-check/Dockerfile
index a1cae24..c42327b 100644
--- a/merge-request-check/Dockerfile
+++ b/merge-request-check/Dockerfile
@@ -14,9 +14,12 @@ LABEL org.label-schema.build-date=$BUILD_DATE \
 RUN mkdir /code
 WORKDIR /code
 
+RUN apk add --no-cache bash git
+
 COPY requirements.txt ./
 RUN pip install --no-cache-dir -r requirements.txt
 
 COPY approval_check.py ./
+COPY merge_review_check.sh ./
 
 CMD ["python", "approval_check.py"]
diff --git a/merge-request-check/approval_check.py b/merge-request-check/approval_check.py
index 628158d..45e7019 100644
--- a/merge-request-check/approval_check.py
+++ b/merge-request-check/approval_check.py
@@ -1,5 +1,6 @@
 import os
 import requests
+import subprocess
 import sys
 
 '''
@@ -18,11 +19,23 @@ response = requests.post('https://its-lampprod1-whm.unl.edu/merge_auth_check.php
     'user': os.environ.get('GITLAB_USER_LOGIN')
 })
 
-if (response.status_code == 200):
+if response.status_code == 200:
     # Merge is allowed, print response and exit cleanly (status 0)
     print(response.content.decode('utf-8'))
     exit(0)
+elif response.status_code == 403:
+    # Merge is not allowed, run further checks to see if a review is needed.
+    result = subprocess.run(['bash', '/code/merge_review_check.sh'], capture_output=True, text=True)
+
+    # Print output from additional checks script
+    print(result.stdout)
+    print(result.stderr, file=sys.stderr)
+
+    # Exit using the exit code form the check script
+    exit(result.returncode)
 else:
-    # Merge is not allowed, print response and exit with an error (status 1)
+    # API call failed. Server may be down, or other setup failure. Exit with an error (status 1)
+    print('Merge request approval check API call failed')
+    print(f'API Call Status Code: {response.status_code}')
     print(response.content.decode('utf-8'), file=sys.stderr)
     exit(1)
diff --git a/merge-request-check/merge_review_check.sh b/merge-request-check/merge_review_check.sh
index 35570d2..b92f5f5 100644
--- a/merge-request-check/merge_review_check.sh
+++ b/merge-request-check/merge_review_check.sh
@@ -6,6 +6,9 @@
 #CI_COMMIT_BEFORE_SHA=""
 #CI_COMMIT_SHA=""
 
+# If any commands in this scprt fail, exit with a non-zero exit code
+set -e
+
 # Function to check for ASP.NET controls and directives
 check_aspx() {
     local content="$1"
-- 
GitLab