Skip to content

Commit

Permalink
Merge pull request #8 from mailgun/toutpetitadrien/dev
Browse files Browse the repository at this point in the history
Add Join() from go1.20
  • Loading branch information
ToutPetitAdrien authored Jul 24, 2024
2 parents 16aca5a + db57431 commit 37ed5bc
Show file tree
Hide file tree
Showing 10 changed files with 195 additions and 9 deletions.
39 changes: 39 additions & 0 deletions .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Lint

on:
push:
branches:
- master
- main
pull_request:

env:
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
GOLANGCI_LINT_VERSION: v1.57.2

jobs:
lint:
name: lint
strategy:
matrix:
os: [ ubuntu-latest ]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install Go
uses: actions/setup-go@v5
with:
go-version-file: ./go.mod
cache: true # caching and restoring go modules and build outputs

- name: Check that 'go mod tidy' was called before commit
run: go mod tidy && git diff --exit-code

- name: golangci-lint
uses: golangci/golangci-lint-action@v4
with:
version: ${{ env.GOLANGCI_LINT_VERSION }}
skip-cache: true # cache/restore is done by actions/setup-go@v3 step
args: -v
5 changes: 1 addition & 4 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,14 @@ on:
- master
- main
pull_request:
branches:
- master
- main

jobs:
test:
name: test
strategy:
matrix:
go-version:
- 1.19.x
- 1.21.x
os: [ ubuntu-latest ]
runs-on: ${{ matrix.os }}
steps:
Expand Down
125 changes: 125 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
linters:
# Please, do not use `enable-all`: it's deprecated and will be removed soon.
# Inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint.
# Full list of linters - https://golangci-lint.run/usage/linters
disable-all: true
enable:
- bodyclose # https://github.com/timakin/bodyclose
- gomodguard
- errcheck # Mandatory. Do not disable.
- gocritic
- goimports
- gosec
- gosimple
- govet
- noctx
- nolintlint
- ineffassign # Mandatory. Do not disable.
- staticcheck # Mandatory. Do not disable.
- stylecheck
- typecheck
- unused

# Other linters:
# - dogsled
# - dupl
# - exportloopref
# - exhaustive # e.g. missing cases in switch of type
# - funlen
# - gochecknoinits
# - gocognit
# - goconst
# - gocyclo
# - goerr113
# - gofmt
# - goprintffuncname
# - lll
# - misspell
# - nakedret
# - nlreturn
# - prealloc
# - revive
# - rowserrcheck
# - stylecheck
# - unconvert
# - unparam

linters-settings:
gocritic:
enabled-tags:
- diagnostic
- experimental
- opinionated
- performance
- style
disabled-checks:
- dupImport # https://github.com/go-critic/go-critic/issues/845
- whyNoLint # checked by nolintlint linter
- hugeParam # TODO(vtopc): configure(80 bytes is probably not so much) and enable.
- rangeValCopy # TODO(vtopc): configure(disable for tests) and enable.
- appendAssign
- commentedOutCode

errcheck:
# List of functions to exclude from checking, where each entry is a single function to exclude.
# See https://github.com/kisielk/errcheck#excluding-functions for details.
exclude-functions:
- (io.Closer).Close
- (io.ReadCloser).Close

govet:
enable-all: true
disable:
- shadow
- fieldalignment

gomodguard:
blocked:
# List of blocked modules.
# Default: []
modules:
- github.com/golang/protobuf:
recommendations:
- google.golang.org/protobuf
reason: "see https://developers.google.com/protocol-buffers/docs/reference/go/faq#modules"
- github.com/pkg/errors:
recommendations:
- errors
- github.com/mailgun/errors
reason: "Deprecated"

stylecheck:
# https://staticcheck.io/docs/options#checks
checks: ["all"]

issues:
# Maximum issues count per one linter. Set to 0 to disable. Default is 50.
max-issues-per-linter: 0

# Maximum count of issues with the same text. Set to 0 to disable. Default is 3.
max-same-issues: 50

exclude:
# Some packages have deprecated fields which continue to be useful
- SA1019

exclude-rules:
# Exclude some rules from tests.
- path: '_test\.go$'
linters:
- gosec
- noctx
- path: '_test\.go$'
text: "unnamedResult:"
- path: '.*mxresolv.*'
linters:
- gosec


run:
# include test files or not, default is true
tests: true

# Timeout for analysis, e.g. 30s, 5m.
# Default: 1m
timeout: 5m
13 changes: 13 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
GOLANGCI_LINT = $(GOPATH)/bin/golangci-lint
GOLANGCI_LINT_VERSION = v1.57.2

.PHONY: lint
lint: $(GOLANGCI_LINT)
$(GOLANGCI_LINT) run

$(GOLANGCI_LINT):
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOPATH)/bin $(GOLANGCI_LINT_VERSION)

.PHONY: test
test:
go test -p 1 ./... -short -race -timeout 1m -count=1
12 changes: 12 additions & 0 deletions errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,16 @@ func Last(err error, target any) bool {
return false
}

// Join returns an error that wraps the given errors.
// Any nil error values are discarded.
// Join returns nil if every value in errs is nil.
// The error formats as the concatenation of the strings obtained
// by calling the Error method of each element of errs, with a newline
// between each string.
//
// A non-nil error returned by Join implements the Unwrap() []error method.
func Join(errs ...error) error {
return errors.Join(errs...)
}

var errorType = reflect.TypeOf((*error)(nil)).Elem()
2 changes: 1 addition & 1 deletion fields.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ func (c *fields) Is(target error) bool {
// cause of the issue. We only support this because some code
// depends on github.com/pkg/errors.Cause() returning the cause
// of the error.
// deprecated use error.Is() or error.As() instead
// Deprecated: use error.Is() or error.As() instead
func (c *fields) Cause() error { return c.wrapped }

func (c *fields) Error() string {
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/mailgun/errors

go 1.19
go 1.21

require (
github.com/ahmetb/go-linq v3.0.0+incompatible
Expand Down
2 changes: 1 addition & 1 deletion stack.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func (w *stack) Is(target error) bool {
// cause of the issue. We only support this because some code
// depends on github.com/pkg/errors.Cause() returning the cause
// of the error.
// deprecated use error.Is() or error.As() instead
// Deprecated: use error.Is() or error.As() instead
func (w *stack) Cause() error { return w.error }

func (w *stack) HasFields() map[string]any {
Expand Down
2 changes: 1 addition & 1 deletion stack_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ func TestFormatStack(t *testing.T) {
for _, tt := range tests {
t.Run(tt.Name, func(t *testing.T) {
out := fmt.Sprintf(tt.format, tt.err)
//t.Log(out)
// t.Log(out)

for _, line := range tt.want {
assert.Contains(t, out, line)
Expand Down
2 changes: 1 addition & 1 deletion wrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ func (e *wrappedError) Is(target error) bool {
// cause of the issue. We only support this because some code
// depends on github.com/pkg/errors.Cause() returning the cause
// of the error.
// deprecated use error.Is() or error.As() instead
// Deprecated: use error.Is() or error.As() instead
func (e *wrappedError) Cause() error { return e.wrapped }

func (e *wrappedError) Error() string {
Expand Down

0 comments on commit 37ed5bc

Please sign in to comment.