diff --git a/.circleci/build-examples b/.circleci/build-examples
deleted file mode 100755
index 473b453290ecb26829463e0bfb4d9416876e4fba..0000000000000000000000000000000000000000
--- a/.circleci/build-examples
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-for i in examples/*; do
-  echo "building $i"
-  go install github.com/bio-routing/bio-rd/$i
-done
diff --git a/.circleci/check-gofmt b/.circleci/check-gofmt
deleted file mode 100755
index b9c4731eae06ebaafafc9ee0fff3d4566144f903..0000000000000000000000000000000000000000
--- a/.circleci/check-gofmt
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-result="$(gofmt -e -s -l . 2>&1 | grep -v '^vendor/' )"
-if [ -n "$result" ]; then
-  echo "Go code is not formatted, run 'gofmt -e -s -w .'" >&2
-  echo "$result"
-  exit 1
-else
-  echo "Go code is formatted well"
-fi
diff --git a/.circleci/config.yml b/.circleci/config.yml
deleted file mode 100644
index 4741b535c40db7fbcb286b461c8e21d64dee87c8..0000000000000000000000000000000000000000
--- a/.circleci/config.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-# Golang CircleCI 2.0 configuration file
-#
-# Check https://circleci.com/docs/2.0/language-go/ for more details
-version: 2
-jobs:
-  build:
-    docker:
-      - image: circleci/golang:1.13
-    steps:
-      - checkout
-
-      - run: go test -v -cover -coverprofile=coverage.txt ./...
-      - run: bash <(curl -s https://codecov.io/bash)
-
-      - run: .circleci/build-examples
-      - run: .circleci/check-gofmt
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index a8eaa48e93a84ffce181f5224b85c264218a330d..0000000000000000000000000000000000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**Steps to Reproduce**
-Give us clear and precise steps how to reproduce the bug.
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Configuration used**
-Please show us your config, what settings did u used?
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1412d587485e7f221678369a8ee01f34a9bb6d36
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,15 @@
+variables:
+  SECURE_ANALYZERS_PREFIX: registry.gitlab.com/gitlab-org/security-products/analyzers
+
+stages:
+  - test
+
+test:cover:
+  image: golang:1.15
+  stage: test
+  script:
+    - go test -v -cover ./...
+
+include:
+#  - local: '/build/ci/.code-quality-ci.yml'
+  - local: '/build/ci/.security-and-compliance-ci.yml'
diff --git a/build/ci/.code-quality-ci.yml b/build/ci/.code-quality-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..aa3ae0eb8b9411b8cb9fa839801efe11478b0632
--- /dev/null
+++ b/build/ci/.code-quality-ci.yml
@@ -0,0 +1,33 @@
+code-quality-master:
+  stage: test
+  allow_failure: true
+  tags:
+    - baremetal
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
+    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+  script:
+    # writes golangci-lint output to gl-code-quality-report.json
+    - /home/gitlab-runner/go/bin/golangci-lint run --config build/ci/.golangci-config/.golangci-master.yml --out-format code-climate | tee gl-code-quality-report.json
+  artifacts:
+    reports:
+      codequality: gl-code-quality-report.json
+    paths:
+      - gl-code-quality-report.json
+
+
+code-quality:
+  stage: test
+  allow_failure: true
+  tags:
+    - baremetal
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != $CI_DEFAULT_BRANCH
+  script:
+    # writes golangci-lint output to gl-code-quality-report.json
+    - /home/gitlab-runner/go/bin/golangci-lint run --config build/ci/.golangci-config/.golangci.yml --out-format code-climate | tee gl-code-quality-report.json
+  artifacts:
+    reports:
+      codequality: gl-code-quality-report.json
+    paths:
+      - gl-code-quality-report.json
diff --git a/build/ci/.golangci-config/.golangci-master.yml b/build/ci/.golangci-config/.golangci-master.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1a21937d63f0d30e5daf6bf57d4f35763bf42da4
--- /dev/null
+++ b/build/ci/.golangci-config/.golangci-master.yml
@@ -0,0 +1,23 @@
+run:
+  timeout: 5m
+  issues-exit-code: 1
+output:
+  format: code-climate
+  print-issued-lines: true
+  print-linter-name: true
+  uniq-by-line: true
+  path-prefix: ""
+linters-settings:
+  gocyclo:
+    min-complexity: 15
+  golint:
+    min-confidence: 0.8
+linters:
+  disable-all: true
+  enable:
+    - gofmt
+    - golint
+    - gocyclo
+    - govet
+issues:
+  exclude-use-default: false
diff --git a/build/ci/.golangci-config/.golangci.yml b/build/ci/.golangci-config/.golangci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5c4c88e8338b257ad41a8b594d2aae8a27f82f2a
--- /dev/null
+++ b/build/ci/.golangci-config/.golangci.yml
@@ -0,0 +1,21 @@
+run:
+  timeout: 5m
+  issues-exit-code: 1
+output:
+  format: code-climate
+  print-issued-lines: true
+  print-linter-name: true
+  uniq-by-line: true
+  path-prefix: ""
+linters-settings:
+  gocyclo:
+    min-complexity: 15
+  golint:
+    min-confidence: 0.8
+linters:
+  disable-all: true
+  enable:
+    - gofmt
+    - golint
+    - gocyclo
+    - govet
diff --git a/build/ci/.golangci-config/.runlint.sh b/build/ci/.golangci-config/.runlint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..7b0012a32e7d08ffa9de118104d51f8d129c6aee
--- /dev/null
+++ b/build/ci/.golangci-config/.runlint.sh
@@ -0,0 +1,4 @@
+golangci-lint run\
+  --config .ci/.golangci-master.yml\
+  --out-format code-climate |\
+  jq -r '.[] | "\(.location.path):\(.location.lines.begin) \(.description)"'
diff --git a/build/ci/.security-and-compliance-ci.yml b/build/ci/.security-and-compliance-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3e98b739e62763538a6e6fe0d5bcf9259b91fbbd
--- /dev/null
+++ b/build/ci/.security-and-compliance-ci.yml
@@ -0,0 +1,10 @@
+sast:
+  variables:
+    SAST_ANALYZER_IMAGE_TAG: '2'
+    SAST_EXCLUDED_PATHS: spec, test, tests, tmp
+    SEARCH_MAX_DEPTH: '4'
+
+include:
+  - template: Security/SAST.gitlab-ci.yml
+  - template: Dependency-Scanning.gitlab-ci.yml
+  - template: Security/License-Scanning.gitlab-ci.yml