diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..6f7f6522ccc7094640a0b273661502680b156911
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+vendor/**/* -diff
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e5a6f57f8844673bac5247019a0d7928bb3c6340
--- /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.8
+  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
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..b764780e09c573e513f0995d4436921ac58d389f
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,3 @@
+module code.vereign.com/gaiax/tsa/infohub
+
+go 1.17