From 313f5674529a63a0d00b991ed0ddae95b66a1a42 Mon Sep 17 00:00:00 2001
From: James Kirk <james.kirk@noc.ac.uk>
Date: Mon, 13 Feb 2023 16:46:25 +0000
Subject: [PATCH] refactor: closing files that have been opened feat:
 dockerised and composed everything up, introduced run-compose and gitlab-ci

---
 .gitlab-ci.yml                  |  8 ++++++++
 docker/Dev.Dockerfile           |  7 +++++++
 docker/Dockerfile               |  7 +++++++
 docker/docker-compose-test.yaml | 15 +++++++++++++++
 docker/docker-compose.yaml      | 15 +++++++++++++++
 generate_schema_config.py       |  7 ++++++-
 run-compose.sh                  | 30 ++++++++++++++++++++++++++++++
 tests/test_schemas.py           |  8 ++++++++
 8 files changed, 96 insertions(+), 1 deletion(-)
 create mode 100644 .gitlab-ci.yml
 create mode 100644 docker/Dev.Dockerfile
 create mode 100644 docker/Dockerfile
 create mode 100644 docker/docker-compose-test.yaml
 create mode 100644 docker/docker-compose.yaml
 create mode 100755 run-compose.sh

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..1eb05f7
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,8 @@
+include:
+  - project: oceanids/c2/infrastructure/ci-scripts
+    ref: master
+    file: python-microservice/all.yml
+
+variables:
+  DOCKER_IMAGE_NAME: backbone-message-format
+  TEST_DOCKER_COMPOSE: 1
\ No newline at end of file
diff --git a/docker/Dev.Dockerfile b/docker/Dev.Dockerfile
new file mode 100644
index 0000000..eab5243
--- /dev/null
+++ b/docker/Dev.Dockerfile
@@ -0,0 +1,7 @@
+FROM python:3.9.16-alpine
+
+WORKDIR /app
+
+COPY requirements-dev.txt requirements-dev.txt 
+
+RUN pip install -r requirements-dev.txt
\ No newline at end of file
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000..a14c3e1
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,7 @@
+FROM python:3.9.16-alpine
+
+WORKDIR /app
+
+COPY . .
+
+RUN pip install -r requirements.txt
\ No newline at end of file
diff --git a/docker/docker-compose-test.yaml b/docker/docker-compose-test.yaml
new file mode 100644
index 0000000..2461af3
--- /dev/null
+++ b/docker/docker-compose-test.yaml
@@ -0,0 +1,15 @@
+version: '3.8'
+services:
+  soar_flasgger_test:
+    build: 
+      context: ..
+      dockerfile: docker/Dev.Dockerfile
+    restart: unless-stopped
+    ports:
+      - "5000:5000"
+    container_name: soar_flasgger_test
+    environment:
+      - PYTHONDONTWRITEBYTECODE=1
+    volumes:
+      - ../:/app
+    command: "python3 -m unittest tests/test_schemas.py"
\ No newline at end of file
diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml
new file mode 100644
index 0000000..23c80c7
--- /dev/null
+++ b/docker/docker-compose.yaml
@@ -0,0 +1,15 @@
+version: '3.8'
+services:
+  soar_flasgger:
+    build: 
+      context: ..
+      dockerfile: docker/Dockerfile
+    restart: unless-stopped
+    ports:
+      - "5000:5000"
+    container_name: soar_flasgger
+    environment:
+      - FLASK_HOST=0.0.0.0
+    volumes:
+      - ../:/app
+    command: "python generate_schema_config.py"
\ No newline at end of file
diff --git a/generate_schema_config.py b/generate_schema_config.py
index 2c1c838..29b7f4d 100644
--- a/generate_schema_config.py
+++ b/generate_schema_config.py
@@ -8,6 +8,8 @@ from formats.acknowledgement import acknowledgement_schema
 from flasgger import Swagger
 from flask import Flask
 
+import os
+
 app = Flask(__name__)
 
 
@@ -74,6 +76,9 @@ swagger_config = {
 
 swag = Swagger(app, config=swagger_config, merge=True)
 
+flask_host = os.getenv(
+    "FLASK_HOST", "localhost"
+)  # Sets to whatever MQ_HOST is, or defaults to localhost
 
 if __name__ == "__main__":
-    app.run(debug=True)
+    app.run(debug=False, host=flask_host)
diff --git a/run-compose.sh b/run-compose.sh
new file mode 100755
index 0000000..4df4f2a
--- /dev/null
+++ b/run-compose.sh
@@ -0,0 +1,30 @@
+#! /usr/bin/env bash
+
+usage() {
+    echo "usage: ./run-compose.sh [<rebuild>]"
+    echo "    rebuild - will force docker-compose to rebuild the images before spinning them up."
+    echo "    tests - run the test suite rather than the application."
+}
+
+if [[ -z "${DATA_DIR}" ]]; then
+    DATA_DIR=$(pwd)
+fi
+
+while [ -n "$1" ]; do
+    case $1 in
+    rebuild)
+        EXTRA_ARGS="--build"
+        ;;
+    tests)
+        docker-compose -f docker/docker-compose-test.yaml up --build
+        exit 0
+        ;;
+    *)
+        usage
+        exit 0
+        ;;
+    esac
+    shift
+done
+
+docker-compose -f docker/docker-compose.yaml up $EXTRA_ARGS
\ No newline at end of file
diff --git a/tests/test_schemas.py b/tests/test_schemas.py
index bf8478d..e763f47 100644
--- a/tests/test_schemas.py
+++ b/tests/test_schemas.py
@@ -66,6 +66,8 @@ class TestSchema(unittest.TestCase):
                     )
                 )
 
+            f.close()
+
     def test_sample_gui_messages(self):
         """
         Test schema - GUI Messages
@@ -92,6 +94,8 @@ class TestSchema(unittest.TestCase):
                     )
                 )
 
+            f.close()
+
     def test_sample_ecosub_messages(self):
         """
         Test schema - Ecosub Messages
@@ -146,6 +150,8 @@ class TestSchema(unittest.TestCase):
                         format_checker=FormatChecker(),
                     )
                 )
+            
+            f.close()
 
     def test_sample_autonomy_engine_messages(self):
         """
@@ -237,6 +243,8 @@ class TestSchema(unittest.TestCase):
                     )
                 )
 
+            f.close()
+
 
 if __name__ == "__main__":
     unittest.main()
-- 
GitLab