Add tools command for direct binary downloads from GitHub releases

Introduces a new 'tools' command that installs development tools (golangci-lint, gotestsum)
by downloading pre-built binaries directly from GitHub releases instead of using 'go get -tool'.
This prevents modifications to plugin go.mod files and improves build reliability.

Features:
- Cross-platform support (Windows, macOS, Linux) with automatic architecture detection
- Version-specific binary naming with symlinks for easy access
- Configurable installation directory via --bin-dir flag
- Tar.gz archive extraction with binary validation
- Updated Makefile integration to use downloaded binaries

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Felipe M 2025-08-04 13:41:54 +02:00
parent f8e3266029
commit c1399f5107
No known key found for this signature in database
GPG key ID: 52E5D65FCF99808A
9 changed files with 596 additions and 102 deletions

View file

@ -31,57 +31,57 @@ linters:
# Enable specific linters
enable:
# Enabled by default
- errcheck # Check for unchecked errors
- gosimple # Simplify code
- govet # Examine Go source code and reports suspicious constructs
- ineffassign # Detect ineffectual assignments
- staticcheck # Advanced Go linter
- unused # Check for unused constants, variables, functions and types
- errcheck # Check for unchecked errors
- gosimple # Simplify code
- govet # Examine Go source code and reports suspicious constructs
- ineffassign # Detect ineffectual assignments
- staticcheck # Advanced Go linter
- unused # Check for unused constants, variables, functions and types
# Additional linters
- asciicheck # Check for non-ASCII characters
- bodyclose # Check HTTP response body is closed
- contextcheck # Check context.Context is propagated
- cyclop # Check cyclomatic complexity
- dupl # Check for duplicate code
- durationcheck # Check for two durations multiplied together
- errorlint # Check for error wrapping
- exhaustive # Check exhaustiveness of enum switch statements
- copyloopvar # Check for pointers to enclosing loop variables
- asciicheck # Check for non-ASCII characters
- bodyclose # Check HTTP response body is closed
- contextcheck # Check context.Context is propagated
- cyclop # Check cyclomatic complexity
- dupl # Check for duplicate code
- durationcheck # Check for two durations multiplied together
- errorlint # Check for error wrapping
- exhaustive # Check exhaustiveness of enum switch statements
- copyloopvar # Check for pointers to enclosing loop variables
- forcetypeassert # Find forced type assertions
- funlen # Check function length
- gci # Control Go package import order
- gocognit # Check cognitive complexity
- goconst # Find repeated strings that could be constants
- gocritic # Various checks
- gocyclo # Check cyclomatic complexity
- godot # Check if comments end in a period
- gofmt # Check if the code was gofmt-ed
- goimports # Check if imports are sorted
- mnd # Check for magic numbers
- funlen # Check function length
- gci # Control Go package import order
- gocognit # Check cognitive complexity
- goconst # Find repeated strings that could be constants
- gocritic # Various checks
- gocyclo # Check cyclomatic complexity
- godot # Check if comments end in a period
- gofmt # Check if the code was gofmt-ed
- goimports # Check if imports are sorted
- mnd # Check for magic numbers
- gomoddirectives # Check for //go:build directives
- gomodguard # Check for blocked module dependencies
- gomodguard # Check for blocked module dependencies
- goprintffuncname # Check printf-like function names
- gosec # Security checker
- lll # Check line length
- makezero # Find slice declarations that are not initialized with zero length
- misspell # Find commonly misspelled English words
- nakedret # Check for naked returns
- nilerr # Check for nil errors
- nlreturn # Check for new line before return
- noctx # Check for HTTP requests without context
- prealloc # Find slice declarations that could be preallocated
- predeclared # Check for predeclared identifiers
- revive # Fast, configurable, extensible linter
- rowserrcheck # Check SQL rows.Err
- sqlclosecheck # Check SQL Close() calls
- stylecheck # Stylecheck is a replacement for golint
- thelper # Check test helpers
- tparallel # Check test parallelization
- unconvert # Check for unnecessary type conversions
- unparam # Check for unused function parameters
- wastedassign # Check for wasted assignment statements
- whitespace # Check for unnecessary whitespace
- gosec # Security checker
- lll # Check line length
- makezero # Find slice declarations that are not initialized with zero length
- misspell # Find commonly misspelled English words
- nakedret # Check for naked returns
- nilerr # Check for nil errors
- nlreturn # Check for new line before return
- noctx # Check for HTTP requests without context
- prealloc # Find slice declarations that could be preallocated
- predeclared # Check for predeclared identifiers
- revive # Fast, configurable, extensible linter
- rowserrcheck # Check SQL rows.Err
- sqlclosecheck # Check SQL Close() calls
- stylecheck # Stylecheck is a replacement for golint
- thelper # Check test helpers
- tparallel # Check test parallelization
- unconvert # Check for unnecessary type conversions
- unparam # Check for unused function parameters
- wastedassign # Check for wasted assignment statements
- whitespace # Check for unnecessary whitespace
# Linters settings
linters-settings:
@ -181,7 +181,7 @@ linters-settings:
# Settings for lll
lll:
line-length: 120
line-length: 140
# Settings for misspell
misspell:
@ -203,7 +203,7 @@ linters-settings:
rules:
- name: atomic
- name: line-length-limit
arguments: [120]
arguments: [140]
- name: argument-limit
arguments: [4]
- name: cyclomatic
@ -219,10 +219,50 @@ linters-settings:
# Settings for stylecheck
stylecheck:
checks: ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022"]
checks:
["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022"]
dot-import-whitelist:
- fmt
initialisms: ["ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS"]
initialisms:
[
"ACL",
"API",
"ASCII",
"CPU",
"CSS",
"DNS",
"EOF",
"GUID",
"HTML",
"HTTP",
"HTTPS",
"ID",
"IP",
"JSON",
"QPS",
"RAM",
"RPC",
"SLA",
"SMTP",
"SQL",
"SSH",
"TCP",
"TLS",
"TTL",
"UDP",
"UI",
"GID",
"UID",
"UUID",
"URI",
"URL",
"UTF8",
"VM",
"XML",
"XMPP",
"XSRF",
"XSS",
]
http-status-code-whitelist: ["200", "400", "404", "500"]
# Settings for unparam
@ -234,24 +274,24 @@ issues:
# List of regexps of issue texts to exclude
exclude:
# Exclude some linters from running on tests files
- "G104:" # Errors unhandled (gosec)
- "G204:" # Subprocess launched with variable (gosec)
- "G304:" # File path provided as taint input (gosec)
- "G104:" # Errors unhandled (gosec)
- "G204:" # Subprocess launched with variable (gosec)
- "G304:" # File path provided as taint input (gosec)
# Skip files
exclude-files:
- ".*_test.go"
- ".*\\.pb\\.go"
# Skip directories
exclude-dirs:
- vendor
- node_modules
- .git
# Make issues output unique by line
uniq-by-line: true
# Excluding configuration per-path, per-linter, per-text and per-source
exclude-rules:
# Exclude some linters from running on tests files
@ -370,4 +410,4 @@ issues:
new-from-patch: ""
# Fix found issues (if it's supported by the linter)
fix: false
fix: false