mirror of
https://github.com/kjanat/articulate-parser.git
synced 2026-01-16 07:42:09 +01:00
chore(ci): add linting and refine workflow dependencies
Adds a golangci-lint job to the CI pipeline to enforce code quality and style. The test job is now dependent on the new linting job. The final image build job is also updated to depend on the successful completion of the test, docker-test, and dependency-review jobs, ensuring more checks pass before publishing. Additionally, Go 1.25 is added to the testing matrix.
This commit is contained in:
381
.golangci.yml
Normal file
381
.golangci.yml
Normal file
@ -0,0 +1,381 @@
|
||||
# golangci-lint configuration for articulate-parser
|
||||
# https://golangci-lint.run/usage/configuration/
|
||||
|
||||
version: "2"
|
||||
|
||||
# Options for analysis running
|
||||
run:
|
||||
# Timeout for total work
|
||||
timeout: 5m
|
||||
|
||||
# Skip directories (not allowed in config v2, will use issues exclude instead)
|
||||
|
||||
# Go version
|
||||
go: "1.24"
|
||||
|
||||
# Include test files
|
||||
tests: true
|
||||
|
||||
# Use Go module mode
|
||||
modules-download-mode: readonly
|
||||
|
||||
# Output configuration
|
||||
output:
|
||||
# Format of output
|
||||
formats:
|
||||
text:
|
||||
print-issued-lines: true
|
||||
print-linter-name: true
|
||||
|
||||
# Sort results
|
||||
sort-order:
|
||||
- linter
|
||||
- severity
|
||||
- file
|
||||
|
||||
# Show statistics
|
||||
show-stats: true
|
||||
|
||||
# Issues configuration
|
||||
issues:
|
||||
# Maximum issues count per one linter
|
||||
max-issues-per-linter: 0
|
||||
|
||||
# Maximum count of issues with the same text
|
||||
max-same-issues: 3
|
||||
|
||||
# Show only new issues
|
||||
new: false
|
||||
|
||||
# Fix found issues (if linter supports)
|
||||
fix: false
|
||||
|
||||
# Formatters configuration
|
||||
formatters:
|
||||
enable:
|
||||
- gofmt
|
||||
- goimports
|
||||
- gofumpt
|
||||
settings:
|
||||
# gofmt settings
|
||||
gofmt:
|
||||
simplify: true
|
||||
|
||||
# goimports settings
|
||||
goimports:
|
||||
local-prefixes:
|
||||
- github.com/kjanat/articulate-parser
|
||||
|
||||
# gofumpt settings
|
||||
gofumpt:
|
||||
module-path: github.com/kjanat/articulate-parser
|
||||
extra-rules: true
|
||||
|
||||
# Linters configuration
|
||||
linters:
|
||||
# Default set of linters
|
||||
default: none
|
||||
|
||||
# Enable specific linters
|
||||
enable:
|
||||
# Default/standard linters
|
||||
- errcheck # Check for unchecked errors
|
||||
- govet # Go vet
|
||||
- ineffassign # Detect ineffectual assignments
|
||||
- staticcheck # Staticcheck
|
||||
- unused # Find unused code
|
||||
|
||||
# Code quality
|
||||
- revive # Fast, configurable linter
|
||||
- gocritic # Opinionated Go source code linter
|
||||
- godot # Check comment periods
|
||||
- godox # Detect TODO/FIXME comments
|
||||
- gocognit # Cognitive complexity
|
||||
- gocyclo # Cyclomatic complexity
|
||||
- funlen # Function length
|
||||
- maintidx # Maintainability index
|
||||
|
||||
# Security
|
||||
- gosec # Security problems
|
||||
|
||||
# Performance
|
||||
- prealloc # Find slice preallocation opportunities
|
||||
- bodyclose # Check HTTP response body closed
|
||||
|
||||
# Style and formatting
|
||||
- goconst # Find repeated strings
|
||||
- misspell # Find misspellings
|
||||
- whitespace # Find unnecessary blank lines
|
||||
- unconvert # Remove unnecessary type conversions
|
||||
- dupword # Check for duplicate words
|
||||
|
||||
# Error handling
|
||||
- errorlint # Error handling improvements
|
||||
- wrapcheck # Check error wrapping
|
||||
|
||||
# Testing
|
||||
- testifylint # Testify usage
|
||||
- tparallel # Detect improper t.Parallel() usage
|
||||
- thelper # Detect test helpers without t.Helper()
|
||||
|
||||
# Best practices
|
||||
- exhaustive # Check exhaustiveness of enum switches
|
||||
- nolintlint # Check nolint directives
|
||||
- nakedret # Find naked returns
|
||||
- nilnil # Check for redundant nil checks
|
||||
- noctx # Check sending HTTP requests without context
|
||||
- contextcheck # Check context propagation
|
||||
- asciicheck # Check for non-ASCII identifiers
|
||||
- bidichk # Check for dangerous unicode sequences
|
||||
- durationcheck # Check for multiplied durations
|
||||
- makezero # Find slice declarations with non-zero length
|
||||
- nilerr # Find code returning nil with non-nil error
|
||||
- predeclared # Find code shadowing predeclared identifiers
|
||||
- promlinter # Check Prometheus metrics naming
|
||||
- reassign # Check reassignment of package variables
|
||||
- usestdlibvars # Use variables from stdlib
|
||||
- wastedassign # Find wasted assignments
|
||||
|
||||
# Documentation
|
||||
- godoclint # Check godoc comments
|
||||
|
||||
# New
|
||||
- modernize # Suggest simplifications using new Go features
|
||||
|
||||
# Exclusion rules for linters
|
||||
exclusions:
|
||||
rules:
|
||||
# Exclude some linters from test files
|
||||
- path: _test\.go
|
||||
linters:
|
||||
- gosec
|
||||
- dupl
|
||||
- errcheck
|
||||
- goconst
|
||||
- funlen
|
||||
- goerr113
|
||||
|
||||
# Exclude benchmarks from some linters
|
||||
- path: _bench_test\.go
|
||||
linters:
|
||||
- gosec
|
||||
- dupl
|
||||
- errcheck
|
||||
- goconst
|
||||
- funlen
|
||||
- goerr113
|
||||
- wrapcheck
|
||||
|
||||
# Exclude example tests
|
||||
- path: _example_test\.go
|
||||
linters:
|
||||
- gosec
|
||||
- errcheck
|
||||
- funlen
|
||||
- goerr113
|
||||
- wrapcheck
|
||||
- revive
|
||||
|
||||
# Exclude linters for main.go
|
||||
- path: ^main\.go$
|
||||
linters:
|
||||
- forbidigo
|
||||
|
||||
# Exclude certain linters for generated files
|
||||
- path: internal/version/version.go
|
||||
linters:
|
||||
- gochecknoglobals
|
||||
- gochecknoinits
|
||||
|
||||
# Allow fmt.Print* in main package
|
||||
- path: ^main\.go$
|
||||
text: "use of fmt.Print"
|
||||
linters:
|
||||
- forbidigo
|
||||
|
||||
# Exclude common false positives
|
||||
- text: "Error return value of .((os\\.)?std(out|err)\\..*|.*Close|.*Flush|os\\.Remove(All)?|.*print(f|ln)?|os\\.(Un)?Setenv). is not checked"
|
||||
linters:
|
||||
- errcheck
|
||||
|
||||
# Exclude error wrapping suggestions for well-known errors
|
||||
- text: "non-wrapping format verb for fmt.Errorf"
|
||||
linters:
|
||||
- errorlint
|
||||
|
||||
# Linters settings
|
||||
settings:
|
||||
# errcheck settings
|
||||
errcheck:
|
||||
check-type-assertions: true
|
||||
check-blank: false
|
||||
|
||||
# govet settings
|
||||
govet:
|
||||
enable-all: true
|
||||
disable:
|
||||
- fieldalignment # Too many false positives
|
||||
- shadow # Can be noisy
|
||||
|
||||
# goconst settings
|
||||
goconst:
|
||||
min-len: 3
|
||||
min-occurrences: 3
|
||||
|
||||
# godot settings
|
||||
godot:
|
||||
scope: toplevel
|
||||
exclude:
|
||||
- "^fixme:"
|
||||
- "^todo:"
|
||||
capital: true
|
||||
period: true
|
||||
|
||||
# godox settings
|
||||
godox:
|
||||
keywords:
|
||||
- TODO
|
||||
- FIXME
|
||||
- HACK
|
||||
- BUG
|
||||
- XXX
|
||||
|
||||
# misspell settings
|
||||
misspell:
|
||||
locale: US
|
||||
|
||||
# funlen settings
|
||||
funlen:
|
||||
lines: 100
|
||||
statements: 50
|
||||
|
||||
# gocognit settings
|
||||
gocognit:
|
||||
min-complexity: 20
|
||||
|
||||
# gocyclo settings
|
||||
gocyclo:
|
||||
min-complexity: 15
|
||||
|
||||
# gocritic settings
|
||||
gocritic:
|
||||
enabled-tags:
|
||||
- diagnostic
|
||||
- style
|
||||
- performance
|
||||
- experimental
|
||||
disabled-checks:
|
||||
- ifElseChain
|
||||
- singleCaseSwitch
|
||||
- commentedOutCode
|
||||
settings:
|
||||
hugeParam:
|
||||
sizeThreshold: 512
|
||||
rangeValCopy:
|
||||
sizeThreshold: 512
|
||||
|
||||
# gosec settings
|
||||
gosec:
|
||||
severity: medium
|
||||
confidence: medium
|
||||
excludes:
|
||||
- G104 # Handled by errcheck
|
||||
- G304 # File path provided as taint input
|
||||
|
||||
# revive settings
|
||||
revive:
|
||||
severity: warning
|
||||
rules:
|
||||
- name: blank-imports
|
||||
- name: context-as-argument
|
||||
- name: context-keys-type
|
||||
- name: dot-imports
|
||||
- name: empty-block
|
||||
- name: error-naming
|
||||
- name: error-return
|
||||
- name: error-strings
|
||||
- name: errorf
|
||||
- name: exported
|
||||
- name: if-return
|
||||
- name: increment-decrement
|
||||
- name: indent-error-flow
|
||||
- name: package-comments
|
||||
- name: range
|
||||
- name: receiver-naming
|
||||
- name: time-naming
|
||||
- name: unexported-return
|
||||
- name: var-declaration
|
||||
- name: var-naming
|
||||
|
||||
# errorlint settings
|
||||
errorlint:
|
||||
errorf: true
|
||||
errorf-multi: true
|
||||
asserts: true
|
||||
comparison: true
|
||||
|
||||
# wrapcheck settings
|
||||
wrapcheck:
|
||||
ignore-sigs:
|
||||
- .Errorf(
|
||||
- errors.New(
|
||||
- errors.Unwrap(
|
||||
- errors.Join(
|
||||
- .WithMessage(
|
||||
- .WithMessagef(
|
||||
- .WithStack(
|
||||
ignore-package-globs:
|
||||
- github.com/kjanat/articulate-parser/*
|
||||
|
||||
# exhaustive settings
|
||||
exhaustive:
|
||||
check:
|
||||
- switch
|
||||
- map
|
||||
default-signifies-exhaustive: true
|
||||
|
||||
# nolintlint settings
|
||||
nolintlint:
|
||||
allow-unused: false
|
||||
require-explanation: true
|
||||
require-specific: true
|
||||
|
||||
# stylecheck settings
|
||||
staticcheck:
|
||||
checks: ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022"]
|
||||
|
||||
# maintidx settings
|
||||
maintidx:
|
||||
under: 20
|
||||
|
||||
# testifylint settings
|
||||
testifylint:
|
||||
enable-all: true
|
||||
disable:
|
||||
- float-compare
|
||||
|
||||
# thelper settings
|
||||
thelper:
|
||||
test:
|
||||
first: true
|
||||
name: true
|
||||
begin: true
|
||||
benchmark:
|
||||
first: true
|
||||
name: true
|
||||
begin: true
|
||||
|
||||
# Severity rules
|
||||
severity:
|
||||
default: warning
|
||||
rules:
|
||||
- linters:
|
||||
- gosec
|
||||
severity: error
|
||||
- linters:
|
||||
- errcheck
|
||||
- staticcheck
|
||||
severity: error
|
||||
- linters:
|
||||
- godox
|
||||
severity: info
|
||||
Reference in New Issue
Block a user