From 585b4d4c14accc32ee4e7dc31efd41da84478d1a Mon Sep 17 00:00:00 2001
From: onyx-and-iris <code@onyxandiris.online>
Date: Mon, 10 Mar 2025 15:32:25 +0000
Subject: [PATCH] add golang-ci config + action

---
 .github/workflows/golang-ci.yml | 29 ++++++++++++++++++
 .golangci.yml                   | 54 +++++++++++++++++++++++++++++++++
 2 files changed, 83 insertions(+)
 create mode 100644 .github/workflows/golang-ci.yml
 create mode 100644 .golangci.yml

diff --git a/.github/workflows/golang-ci.yml b/.github/workflows/golang-ci.yml
new file mode 100644
index 0000000..bd13d40
--- /dev/null
+++ b/.github/workflows/golang-ci.yml
@@ -0,0 +1,29 @@
+name: CI
+
+on:
+  push:
+    branches: [ "main" ]
+    paths:
+      - '**.go'
+  pull_request:
+    branches: [ "main" ]
+    paths:
+      - '**.go'
+jobs:
+  lint:
+    name: Lint
+    runs-on: ubuntu-latest
+    if: github.event_name == 'pull_request'
+    timeout-minutes: 3
+    steps:
+      - uses: actions/checkout@v4
+        with:
+          fetch-depth: 1
+      - name: Setup Go
+        uses: actions/setup-go@v5
+        with:
+          go-version: '1.24'
+      - name: Install golangci-lint
+        run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
+      - name: Run golangci-lint
+        run: golangci-lint run ./...
\ No newline at end of file
diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 0000000..55de51c
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,54 @@
+run:
+  # timeout for analysis, e.g. 30s, 3m, default is 1m
+  timeout: 3m
+  # exclude test files
+  tests: true
+
+linters:
+  # Set to true runs only fast linters.
+  # Good option for 'lint on save', pre-commit hook or CI.
+  fast: true
+
+  disable-all: true
+
+  enable:
+    - gosimple
+    - govet
+    - ineffassign
+    - staticcheck
+    - unused
+    - gofmt
+    - gofumpt
+    - misspell
+    - unparam
+    - gosec
+    - asciicheck
+    - errname
+    - gci
+    - godot
+    - goimports
+    - revive
+
+linters-settings:
+  gofmt:
+    rewrite-rules:
+      - pattern: 'interface{}'
+        replacement: 'any'
+      - pattern: 'a[b:len(a)]'
+        replacement: 'a[b:]'
+
+  misspell:
+    locale: UK
+
+  errcheck:
+    check-type-assertions: true
+
+issues:
+  max-same-issues: 0
+  max-issues-per-linter: 0
+  exclude-use-default: false
+  exclude:
+    # gosec: Duplicated errcheck checks
+    - G104
+    # gosec: integer overflow conversion int -> uint32
+    - G115