diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..acbc2bf72b0aea84c5defbb57f1b7fe64edf48af
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,25 @@
+stages:
+  - test
+
+before_script:
+  - ln -s /builds /go/src/code.vereign.com
+  - cd /go/src/code.vereign.com/${CI_PROJECT_PATH}
+
+lint:
+  image: golangci/golangci-lint:v1.44.2
+  stage: test
+  tags:
+    - amd64-docker
+  script:
+    - golangci-lint --version
+    - golangci-lint run
+
+unit tests:
+  image: golang:1.17.7
+  stage: test
+  tags:
+    - amd64-docker
+  script:
+    - go version
+    - go test -race ./... -coverprofile=coverage.out
+    - go tool cover -func=coverage.out
diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e6ba71d0fff71ba18fa18f4bd0f55fbaad679ab2
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,31 @@
+run:
+  deadline: 5m
+  skip-dirs:
+    - vendor/
+    - .*fakes/
+    - .*generated/
+  skip-files:
+    - .*generated.go
+
+linters:
+  disable-all: true
+  enable:
+    - megacheck
+    - govet
+    - deadcode
+    - errcheck
+    - goconst
+    - gocyclo
+    - goimports
+    - revive
+    - gosec
+    - ineffassign
+    - nakedret
+    - staticcheck
+    - structcheck
+    - unconvert
+    - varcheck
+    - vet
+    - vetshadow
+    - misspell
+    - staticcheck