diff --git a/.dockerignore b/.dockerignore
index 6026c9c..4da4366 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -4,6 +4,7 @@ binaries
 dodo
 .git
 .gitignore
+.golangci.yml
 README.md
 LICENSE
 config.json
diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml
new file mode 100644
index 0000000..cbbb4cf
--- /dev/null
+++ b/.github/workflows/golangci-lint.yml
@@ -0,0 +1,25 @@
+name: golangci-lint
+
+on:
+  push:
+    branches:
+      - main
+  pull_request:
+
+permissions:
+  contents: read
+
+jobs:
+  golangci:
+    name: lint
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      - uses: actions/setup-go@v5
+        with:
+          go-version: stable
+      - name: golangci-lint
+        uses: golangci/golangci-lint-action@v6
+        with:
+          version: v1.64
+          args: --timeout=10m --config=.golangci.yml
diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 0000000..a40ea69
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,27 @@
+run:
+  go: "1.23"
+  concurrency: 8
+  timeout: 10m
+
+linters:
+  disable-all: true
+  enable:
+    - asasalint
+    - asciicheck
+    - gofmt
+    - goimports
+    - gomodguard
+    - goprintffuncname
+    - govet
+    - ineffassign
+    - misspell
+    - nakedret
+    - nolintlint
+    - prealloc
+    - prealloc
+    - reassign
+    - staticcheck
+    - typecheck
+    - unconvert
+    - unused
+    - whitespace
\ No newline at end of file