From 13d79c630393e44132debe826d4e1381084af249 Mon Sep 17 00:00:00 2001
From: Pavel Kirilin <win10@list.ru>
Date: Sun, 28 Jun 2020 01:43:44 +0400
Subject: [PATCH] Added CI testing. Description: - Fixed logging. - Added
 testing before deploy. - Fixed requirements. - Added pre-commit hooks. -
 Fixed Dockerfiles.

Signed-off-by: Pavel Kirilin <win10@list.ru>
---
 .gitlab-ci.yml                                |  9 ++++++++
 .pre-commit-config.yaml                       |  5 ++++
 Dockerfile => Dockerfiles/Dockerfile          |  6 ++---
 Dockerfiles/test.Dockerfile                   | 23 +++++++++++++++++++
 Makefile                                      |  9 +++++++-
 docker-compose.test.yml                       |  9 ++++++++
 docker-compose.yml                            |  4 +++-
 .../requirements.base.txt                     | 10 +++-----
 requirements/requirements.test.txt            |  6 +++++
 src/initializator.py                          |  1 -
 10 files changed, 69 insertions(+), 13 deletions(-)
 rename Dockerfile => Dockerfiles/Dockerfile (63%)
 create mode 100644 Dockerfiles/test.Dockerfile
 create mode 100644 docker-compose.test.yml
 rename requirements.txt => requirements/requirements.base.txt (57%)
 create mode 100644 requirements/requirements.test.txt

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4067891..7a876b0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,6 @@
 stages:
   - test
+  - cleanup_tests
   - deploy
 
 test:
@@ -9,6 +10,14 @@ test:
   script:
     - make test
 
+cleanup_tests:
+  stage: cleanup_tests
+  tags:
+    - bots-deployer
+  when: always
+  script:
+    - make clean_test
+
 deploy:
   stage: deploy
   only: ['master']
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 0ef602a..5672361 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -14,6 +14,11 @@ repos:
     hooks:
       - id: black
         language_version: python3.8
+  - repo: https://github.com/IamTheFij/docker-pre-commit
+    rev: master
+    hooks:
+      - id: docker-compose-check
+      - id: hadolint
   - repo: https://github.com/pre-commit/pre-commit-hooks
     rev: v3.1.0
     hooks:
diff --git a/Dockerfile b/Dockerfiles/Dockerfile
similarity index 63%
rename from Dockerfile
rename to Dockerfiles/Dockerfile
index bfda752..e3ab490 100644
--- a/Dockerfile
+++ b/Dockerfiles/Dockerfile
@@ -1,8 +1,8 @@
-FROM python:3.7
+FROM python:3.8
 
 # Installing requirements
-COPY requirements.txt /tmp/
-RUN pip install -r /tmp/requirements.txt
+COPY requirements/requirements.base.txt /tmp/
+RUN pip install -r /tmp/requirements.base.txt
 
 # Copying actuall application
 COPY src/ /app/src
diff --git a/Dockerfiles/test.Dockerfile b/Dockerfiles/test.Dockerfile
new file mode 100644
index 0000000..0374574
--- /dev/null
+++ b/Dockerfiles/test.Dockerfile
@@ -0,0 +1,23 @@
+FROM hadolint/hadolint:v1.18.0 as docker_linter
+
+FROM python:3.8
+
+RUN apt-get update -y \
+    && apt-get install -y --no-install-recommends \
+     make=4.2.1-1.2 \
+     sed=4.7-1 \
+    && apt-get clean \
+    && rm -rf /var/lib/apt/lists/*
+
+COPY --from=docker_linter /bin/hadolint /bin/
+RUN hadolint -v
+# Installing requirements
+COPY requirements/ /reqs
+RUN pip install -r /reqs/requirements.test.txt
+
+# Copying actuall application
+COPY . /app
+
+WORKDIR /app
+
+RUN sed -i 's/hadolint/hadolint-system/g' .pre-commit-config.yaml
diff --git a/Makefile b/Makefile
index 6162510..80b8baa 100644
--- a/Makefile
+++ b/Makefile
@@ -5,4 +5,11 @@ clean_prod:
 	docker-compose -f docker-compose.yml down
 
 test:
-	echo "Coming soon!"
+	docker-compose -f docker-compose.test.yml up --build
+
+clean_test:
+	docker-compose -f docker-compose.test.yml down -v
+
+_test:
+	pre-commit run -a
+	echo "Python tests coming soon..."
diff --git a/docker-compose.test.yml b/docker-compose.test.yml
new file mode 100644
index 0000000..68bd8b5
--- /dev/null
+++ b/docker-compose.test.yml
@@ -0,0 +1,9 @@
+version: '3.7'
+
+services:
+  test_bot_service:
+    container_name: 'bot_s3rius_san_test'
+    build:
+      dockerfile: Dockerfiles/test.Dockerfile
+      context: .
+    command: make _test
diff --git a/docker-compose.yml b/docker-compose.yml
index 09ab0b0..07ce292 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -8,7 +8,9 @@ networks:
 services:
   bot_service:
     container_name: 'bot_s3rius_san'
-    build: .
+    build:
+      dockerfile: Dockerfiles/Dockerfile
+      context: .
     env_file:
       - .env
     environment:
diff --git a/requirements.txt b/requirements/requirements.base.txt
similarity index 57%
rename from requirements.txt
rename to requirements/requirements.base.txt
index c78eb40..db43cd7 100644
--- a/requirements.txt
+++ b/requirements/requirements.base.txt
@@ -1,9 +1,5 @@
+Flask==1.1.2
 pydantic==1.5.1
-Telethon==1.14.0
-requests-async==0.6.2
 pytz==2020.1
-Flask==1.1.2
-pre-commit==2.5.1
-black==19.10b0
-isort==4.3.21
-flake8==3.8.3
+requests-async==0.6.2
+Telethon==1.14.0
diff --git a/requirements/requirements.test.txt b/requirements/requirements.test.txt
new file mode 100644
index 0000000..2973bde
--- /dev/null
+++ b/requirements/requirements.test.txt
@@ -0,0 +1,6 @@
+-r requirements.base.txt
+black==19.10b0
+docker-compose==1.26.0
+flake8==3.8.3
+isort==4.3.21
+pre-commit==2.5.1
diff --git a/src/initializator.py b/src/initializator.py
index 85d71c7..82dc5ad 100644
--- a/src/initializator.py
+++ b/src/initializator.py
@@ -20,7 +20,6 @@ def setup_logging():
 def get_code_from_web(token):
     async def waiter():
         while token.value is None:
-            logger.debug("Waiting for token")
             await asyncio.sleep(1)
         logger.info("Token received!")
         return token.value
-- 
GitLab