From fa90e142a47700f8627e4aad619926b5fe63f3c4 Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Mon, 31 Oct 2022 22:58:16 +0100
Subject: [PATCH] Added swagger ui doc image

---
 Makefile                       | 15 ++++---
 docker-compose.yml             | 12 ++++++
 dockerhub/fda-docs.md          |  9 ++++
 dockerhub/release.py           |  2 +-
 nginx/nginx.conf               | 78 ----------------------------------
 swagger/Dockerfile             | 35 +++++++++++++++
 swagger/api-document.yaml      |  0
 swagger/docker-build.sh        | 35 +++++++++++++++
 swagger/generate.sh            |  4 +-
 swagger/index.html             | 18 ++++++++
 swagger/swagger-initializer.js | 20 +++++++++
 11 files changed, 143 insertions(+), 85 deletions(-)
 create mode 100644 docker-compose.yml
 create mode 100644 dockerhub/fda-docs.md
 delete mode 100644 nginx/nginx.conf
 create mode 100644 swagger/Dockerfile
 delete mode 100644 swagger/api-document.yaml
 create mode 100644 swagger/docker-build.sh
 create mode 100644 swagger/index.html
 create mode 100644 swagger/swagger-initializer.js

diff --git a/Makefile b/Makefile
index c2ad6ef..fc07840 100644
--- a/Makefile
+++ b/Makefile
@@ -1,17 +1,22 @@
 .PHONY: clean docs
 
+TAG ?= latest
+
 all: build
 
 clean:
 	rm -rf ./site
 
-docs: install-deps
-	python3 ./dockerhub/release.py
+release: release-docs release-dockerhub
 
-install-deps:
-	sudo pip3 install -r ./requirements.txt
+release-docs:
+	docker compose build dbrepo-docs
+	docker tag dbrepo-docs:latest "dbrepo/docs:${TAG}"
+	docker push "dbrepo/docs:${TAG}"
 
-release: install-deps
+release-dockerhub:
+	sudo pip3 install -r ./requirements.txt
+	python3 ./dockerhub/release.py
 
 verify:
 	sudo nginx -t
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..55a2995
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,12 @@
+version: "3.8"
+
+services:
+
+  dbrepo-docs:
+    image: dbrepo-docs
+    restart: on-failure
+    build: ./swagger
+    container_name: dbrepo-docs
+    hostname: dbrepo-docs
+    ports:
+      - "80:80"
\ No newline at end of file
diff --git a/dockerhub/fda-docs.md b/dockerhub/fda-docs.md
new file mode 100644
index 0000000..262f431
--- /dev/null
+++ b/dockerhub/fda-docs.md
@@ -0,0 +1,9 @@
+# How to use this image
+
+```console
+$ docker run -p 80:80
+```
+
+## Customization
+
+No customization.
\ No newline at end of file
diff --git a/dockerhub/release.py b/dockerhub/release.py
index 18a1e38..c17623b 100755
--- a/dockerhub/release.py
+++ b/dockerhub/release.py
@@ -6,6 +6,6 @@ dockerhub = Dockerhub()
 if __name__ == "__main__":
     for component in ["analyse-service", "authentication-service", "broker-service", "container-service",
                       "database-service", "discovery-service", "gateway-service", "identifier-service",
-                      "metadata-db", "query-service", "search-service", "table-service", "ui", "units-service"]:
+                      "metadata-db", "query-service", "search-service", "table-service", "ui", "units-service", "docs"]:
         response = dockerhub.modify_description(component)
         print(response)
diff --git a/nginx/nginx.conf b/nginx/nginx.conf
deleted file mode 100644
index 02aef5e..0000000
--- a/nginx/nginx.conf
+++ /dev/null
@@ -1,78 +0,0 @@
-# For more information on configuration, see:
-#   * Official English Documentation: http://nginx.org/en/docs/
-#   * Official Russian Documentation: http://nginx.org/ru/docs/
-
-user nginx;
-worker_processes auto;
-error_log /var/log/nginx/error.log;
-pid /run/nginx.pid;
-
-# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
-include /usr/share/nginx/modules/*.conf;
-
-events {
-    worker_connections 1024;
-}
-
-http {
-    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-                      '$status $body_bytes_sent "$http_referer" '
-                      '"$http_user_agent" "$http_x_forwarded_for"';
-
-    access_log  /var/log/nginx/access.log  main;
-
-    sendfile            on;
-    tcp_nopush          on;
-    tcp_nodelay         on;
-    keepalive_timeout   65;
-    types_hash_max_size 2048;
-
-    include             /etc/nginx/mime.types;
-    default_type        application/octet-stream;
-
-    # Load modular configuration files from the /etc/nginx/conf.d directory.
-    # See http://nginx.org/en/docs/ngx_core_module.html#include
-    # for more information.
-    include /etc/nginx/conf.d/*.conf;
-
-    server {
-            listen 80 default_server;
-            listen [::]:80 default_server;
-            return 301 https://$host$request_uri;
-    }
-
-    server {
-            listen 443 ssl http2;
-            listen [::]:443 ssl http2;
-            root /usr/share/nginx/html/dbrepo-docs.ossdip.at;
-            index index.html index.htm;
-            server_name dbrepo-docs.ossdip.at;
-            ssl_certificate /etc/letsencrypt/live/dbrepo-docs.ossdip.at/fullchain.pem;
-            ssl_certificate_key /etc/letsencrypt/live/dbrepo-docs.ossdip.at/privkey.pem;
-            include /etc/letsencrypt/options-ssl-nginx.conf;
-            ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
-
-       location / {
-           try_files $uri $uri/ =404;
-       }
-
-    }
-
-#    server {
-#            listen 443 ssl http2;
-#            listen [::]:443 ssl http2;
-#            root /usr/share/nginx/html/ossdip.at;
-#            index index.html index.htm;
-#            server_name ossdip.at;
-#            ssl_certificate /etc/letsencrypt/live/ossdip.at/fullchain.pem;
-#            ssl_certificate_key /etc/letsencrypt/live/ossdip.at/privkey.pem;
-#            include /etc/letsencrypt/options-ssl-nginx.conf;
-#            ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
-#
-#       location / {
-#           try_files $uri $uri/ =404;
-#       }
-#
-#    }
-
-}
diff --git a/swagger/Dockerfile b/swagger/Dockerfile
new file mode 100644
index 0000000..b7d9c03
--- /dev/null
+++ b/swagger/Dockerfile
@@ -0,0 +1,35 @@
+FROM nginx:latest AS runtime
+MAINTAINER Martin Weise <martin.weise@tuwien.ac.at>
+
+ARG SWAGGER_UI_VERSION=4.15.2
+
+RUN echo 1
+
+# reset
+RUN rm -f /usr/share/nginx/html/*
+
+WORKDIR /app
+
+ADD "https://github.com/swagger-api/swagger-ui/archive/refs/tags/v${SWAGGER_UI_VERSION}.tar.gz" /app/tmp.tar.gz
+RUN tar xzfv /app/tmp.tar.gz --strip-components 1 && rm -f /app/tmp.tar.gz
+
+COPY ./swagger-initializer.js ./swagger-initializer.js
+COPY ./docker-build.sh ./docker-build.sh
+RUN chmod +x ./docker-build.sh
+
+WORKDIR /usr/share/nginx/html/
+
+# copy api
+COPY ./index.html ./index.html
+COPY ./api-analyse.yaml ./analyse/api.yaml
+COPY ./api-authentication.yaml ./authentication/api.yaml
+COPY ./api-container.yaml ./container/api.yaml
+COPY ./api-database.yaml ./database/api.yaml
+COPY ./api-identifier.yaml ./identifier/api.yaml
+COPY ./api-metadata.yaml ./metadata/api.yaml
+COPY ./api-query.yaml ./query/api.yaml
+COPY ./api-table.yaml ./table/api.yaml
+COPY ./api-units.yaml ./units/api.yaml
+
+# generate
+RUN bash /app/docker-build.sh
\ No newline at end of file
diff --git a/swagger/api-document.yaml b/swagger/api-document.yaml
deleted file mode 100644
index e69de29..0000000
diff --git a/swagger/docker-build.sh b/swagger/docker-build.sh
new file mode 100644
index 0000000..c8d0630
--- /dev/null
+++ b/swagger/docker-build.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+declare -A services
+services[5000]=analyse
+services[5010]=units
+services[9091]=container
+services[9092]=database
+services[9093]=query
+services[9094]=table
+services[9096]=identifier
+services[9097]=authentication
+services[9098]=metadata
+
+function copy () {
+  echo "... copy dist to $1"
+  cp -r /app/dist/* "./$1"
+}
+
+function init () {
+  echo "... copy initializer to $1"
+  cp /app/swagger-initializer.js "/usr/share/nginx/html/$1"
+}
+
+function replace () {
+  echo "... replace server url of $1"
+  sed -i -e "s/localhost.*/dbrepo1.ec.tuwien.ac.at\/api/g" "./$1/api.yaml"
+  sed -i -e "s/Generated server url/TU Wien DBRepo/g" "./$1/api.yaml"
+}
+
+for key in "${!services[@]}"; do
+  echo "Preparing ${services[$key]} API"
+  replace "${services[$key]}"
+  copy "${services[$key]}"
+  init "${services[$key]}"
+done
\ No newline at end of file
diff --git a/swagger/generate.sh b/swagger/generate.sh
index 677ce85..e224539 100755
--- a/swagger/generate.sh
+++ b/swagger/generate.sh
@@ -1,13 +1,15 @@
 #!/bin/bash
 
 declare -A services
+services[5000]=analyse
 services[5010]=units
 services[9091]=container
 services[9092]=database
 services[9093]=query
 services[9094]=table
-services[9097]=authentication
 services[9096]=identifier
+services[9097]=authentication
+services[9098]=metadata
 
 function retrieve () {
   echo "... retrieve api"
diff --git a/swagger/index.html b/swagger/index.html
new file mode 100644
index 0000000..e730d64
--- /dev/null
+++ b/swagger/index.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<head>
+    <title>DBRepo Endpoint Documentation</title>
+</head>
+<body>
+    <h3>DBRepo Endpoint Documentation</h3>
+    <ul>
+        <li><a href="/analyse">Analyse Service</a></li>
+        <li><a href="/authentication">Authentication Service</a></li>
+        <li><a href="/container">Container Service</a></li>
+        <li><a href="/database">Database Service</a></li>
+        <li><a href="/identifier">Identifier Service</a></li>
+        <li><a href="/metadata">Metadata Service</a></li>
+        <li><a href="/query">Query Service</a></li>
+        <li><a href="/table">Table Service</a></li>
+        <li><a href="/units">Units Service</a></li>
+    </ul>
+</body>
\ No newline at end of file
diff --git a/swagger/swagger-initializer.js b/swagger/swagger-initializer.js
new file mode 100644
index 0000000..93d055f
--- /dev/null
+++ b/swagger/swagger-initializer.js
@@ -0,0 +1,20 @@
+window.onload = function() {
+  //<editor-fold desc="Changeable Configuration Block">
+
+  // the following lines will be replaced by docker/configurator, when it runs in a docker-container
+  window.ui = SwaggerUIBundle({
+    url: "api.yaml",
+    dom_id: '#swagger-ui',
+    deepLinking: true,
+    presets: [
+      SwaggerUIBundle.presets.apis,
+      SwaggerUIStandalonePreset
+    ],
+    plugins: [
+      SwaggerUIBundle.plugins.DownloadUrl
+    ],
+    layout: "StandaloneLayout"
+  });
+
+  //</editor-fold>
+};
\ No newline at end of file
-- 
GitLab