diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml new file mode 100644 index 0000000..ab14ae8 --- /dev/null +++ b/.github/workflows/golangci-lint.yml @@ -0,0 +1,55 @@ +name: golangci-lint +on: + push: + branches: + - master + pull_request: + +permissions: + contents: read + # Optional: allow read access to pull request. Use with `only-new-issues` option. + # pull-requests: read + +jobs: + golangci: + name: lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v4 + with: + go-version: '1.20' + cache: false + - name: golangci-lint + uses: golangci/golangci-lint-action@v3 + with: + # Require: The version of golangci-lint to use. + # When `install-mode` is `binary` (default) the value can be v1.2 or v1.2.3 or `latest` to use the latest version. + # When `install-mode` is `goinstall` the value can be v1.2.3, `latest`, or the hash of a commit. + version: v1.54 + args: --out-format=colored-line-number + + # Optional: working directory, useful for monorepos + # working-directory: somedir + + # Optional: golangci-lint command line arguments. + # + # Note: By default, the `.golangci.yml` file should be at the root of the repository. + # The location of the configuration file can be changed by using `--config=` + # args: --timeout=30m --config=/my/path/.golangci.yml --issues-exit-code=0 + + # Optional: show only new issues if it's a pull request. The default value is `false`. + # only-new-issues: true + + # Optional: if set to true, then all caching functionality will be completely disabled, + # takes precedence over all other caching options. + # skip-cache: true + + # Optional: if set to true, then the action won't cache or restore ~/go/pkg. + # skip-pkg-cache: true + + # Optional: if set to true, then the action won't cache or restore ~/.cache/go-build. + # skip-build-cache: true + + # Optional: The mode to install golangci-lint. It can be 'binary' or 'goinstall'. + # install-mode: "goinstall" \ No newline at end of file diff --git a/.golangci.yaml b/.golangci.yaml new file mode 100644 index 0000000..ada66b2 --- /dev/null +++ b/.golangci.yaml @@ -0,0 +1,370 @@ +# This file contains the configuration options for golangci-lint tool. It is a +# modified version of a reference file obtained from +# https://github.com/golangci/golangci-lint/blob/4deb32f2c083b244f64993e8ff40c97b52bc513a/.golangci.reference.yml + +# Options for analysis running. +run: + # The default concurrency value is the number of available CPU. + #concurrency: 4 + + # Timeout for analysis, e.g. 30s, 5m. + # Default: 1m + timeout: 10m + + # Exit code when at least one issue was found. + # Default: 1 + #issues-exit-code: 2 + + # Include test files or not. + # Default: true + #tests: false + + # List of build tags, all linters use it. + # Default: []. + + # Which dirs to skip: issues from them won't be reported. + # Can use regexp here: `generated.*`, regexp is applied on full path. + # Default value is empty list, + # but default dirs are skipped independently of this option's value (see skip-dirs-use-default). + # "/" will be replaced by current OS file path separator to properly work on Windows. + #skip-dirs: + # - src/external_libs + # - autogenerated_by_my_lib + + # Enables skipping of directories: + # - vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ + # Default: true + #skip-dirs-use-default: false + + # Which files to skip: they will be analyzed, but issues from them won't be reported. + # Default value is empty list, + # but there is no need to include all autogenerated files, + # we confidently recognize autogenerated files. + # If it's not please let us know. + # "/" will be replaced by current OS file path separator to properly work on Windows. + #skip-files: + # - ".*\\.my\\.go$" + # - lib/bad.go + + # If set we pass it to "go list -mod={option}". From "go help modules": + # If invoked with -mod=readonly, the go command is disallowed from the implicit + # automatic updating of go.mod described above. Instead, it fails when any changes + # to go.mod are needed. This setting is most useful to check that go.mod does + # not need updates, such as in a continuous integration and testing system. + # If invoked with -mod=vendor, the go command assumes that the vendor + # directory holds the correct copies of dependencies and ignores + # the dependency descriptions in go.mod. + # + # Allowed values: readonly|vendor|mod + # By default, it isn't set. + #modules-download-mode: readonly + + # Allow multiple parallel golangci-lint instances running. + # If false (default) - golangci-lint acquires file lock on start. + allow-parallel-runners: false + + # Define the Go version limit. + # Mainly related to generics support in go1.18. + # Default: use Go version from the go.mod file, fallback on the env var `GOVERSION`, fallback on 1.17 + #go: '1.18' + + +# output configuration options +output: + # Format: colored-line-number|line-number|json|tab|checkstyle|code-climate|junit-xml|github-actions + # + # Multiple can be specified by separating them by comma, output can be provided + # for each of them by separating format name and path by colon symbol. + # Output path can be either `stdout`, `stderr` or path to the file to write to. + # Example: "checkstyle:report.json,colored-line-number" + # + # Default: colored-line-number + #format: json + + # Print lines of code with issue. + # Default: true + #print-issued-lines: false + + # Print linter name in the end of issue text. + # Default: true + #print-linter-name: false + + # Make issues output unique by line. + # Default: true + #uniq-by-line: false + + # Add a prefix to the output file references. + # Default is no prefix. + #path-prefix: "" + + # Sort results by: filepath, line and column. + #sort-results: false + + +# All available settings of linters enabled. +linters-settings: + errcheck: + # Report about not checking of errors in type assertions: `a := b.(MyStruct)`. + # Such cases aren't reported by default. + # Default: false + #check-type-assertions: true + + # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`. + # Such cases aren't reported by default. + # Default: false + #check-blank: true + + # DEPRECATED comma-separated list of pairs of the form pkg:regex + # + # the regex is used to ignore names within pkg. (default "fmt:.*"). + # see https://github.com/kisielk/errcheck#the-deprecated-method for details + #ignore: fmt:.*,io/ioutil:^Read.* + + # To disable the errcheck built-in exclude list. + # See `-excludeonly` option in https://github.com/kisielk/errcheck#excluding-functions for details. + # Default: false + #disable-default-exclusions: true + + # DEPRECATED use exclude-functions instead. + # + # Path to a file containing a list of functions to exclude from checking. + # See https://github.com/kisielk/errcheck#excluding-functions for details. + #exclude: /path/to/file.txt + + # 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/ioutil.ReadFile + # - io.Copy(*bytes.Buffer) + # - io.Copy(os.Stdout) + + gofmt: + # Simplify code: gofmt with `-s` option. + # Default: true + #simplify: false + + gosimple: + # Select the Go version to target. + # Default: 1.13 + go: "1.20" + # https://staticcheck.io/docs/options#checks + checks: [ "all" ] + + govet: + # Report about shadowed variables. + # Default: false + check-shadowing: true + + # Settings per analyzer. + #settings: + # Analyzer name, run `go tool vet help` to see all analyzers. + # printf: + # Run `go tool vet help printf` to see available settings for `printf` analyzer. + # funcs: + # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof + # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf + # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf + # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf + + # Disable all analyzers. + # Default: false + #disable-all: true + # Enable analyzers by name. + # Run `go tool vet help` to see all analyzers. + #enable: + # - asmdecl + + # Enable all analyzers. + # Default: false + #enable-all: true + # Disable analyzers by name. + # Run `go tool vet help` to see all analyzers. + #disable: + # - asmdecl + + staticcheck: + # Select the Go version to target. + # Default: 1.13 + go: "1.20" + # https://staticcheck.io/docs/options#checks + checks: [ "all" ] + + # The custom section can be used to define linter plugins to be loaded at runtime. + # See README documentation for more info. + #custom: + # Each custom linter should have a unique name. + # example: + # The path to the plugin *.so. Can be absolute or local. + # Required for each custom linter. + #path: /path/to/example.so + # The description of the linter. + # Optional. + #description: This is an example usage of a plugin linter. + # Intended to point to the repo location of the linter. + # Optional. + #original-url: github.com/golangci/example-linter + + +linters: + # Disable all linters. + # Default: false + disable-all: true + # Enable specific linter + # https://golangci-lint.run/usage/linters/#enabled-by-default-linters + enable: + # Explicitly listing the linters that would be enabled by default. + - errcheck + - gosimple + - govet + - ineffassign + - staticcheck + - typecheck + - unused + # Additional linters. + - gofmt + + # Enable all available linters. + # Default: false + #enable-all: true + # Disable specific linter + # https://golangci-lint.run/usage/linters/#disabled-by-default-linters--e--enable + #disable: + # - asciicheck + + # Enable presets. + # https://golangci-lint.run/usage/linters + #presets: + # - bugs + # - comment + # - complexity + # - error + # - format + # - import + # - metalinter + # - module + # - performance + # - sql + # - style + # - test + # - unused + + # Run only fast linters from enabled linters set (first run won't be fast) + # Default: false + #fast: true + + +issues: + # List of regexps of issue texts to exclude. + # + # But independently of this option we use default exclude patterns, + # it can be disabled by `exclude-use-default: false`. + # To list all excluded by default patterns execute `golangci-lint run --help` + # + # Default: [] + exclude: + - 'declaration of "(err|ctx)" shadows declaration at' + + # Excluding configuration per-path, per-linter, per-text and per-source + exclude-rules: + # Exclude some linters from running on tests files. + #- path: _test\.go + # linters: + # - gocyclo + # - errcheck + # - dupl + # - gosec + + # Exclude known linters from partially hard-vendored code, + # which is impossible to exclude via `nolint` comments. + #- path: internal/hmac/ + # text: "weak cryptographic primitive" + # linters: + # - gosec + + # Exclude some `staticcheck` messages. + #- linters: + # - staticcheck + # text: "SA9003:" + + # Exclude `lll` issues for long lines with `go:generate`. + #- linters: + # - lll + # source: "^//go:generate " + + # "github.com/container-storage-interface/spec/lib/go/csi" still uses + # "github.com/golang/protobuf", which is the deprecated protobuf V1. + - path: ^volumes/csi-wrapper/pkg/wrapper/ + linters: [staticcheck] + text: 'SA1019: "github.com/golang/protobuf/jsonpb" is deprecated: Use the "google.golang.org/protobuf/encoding/protojson" package instead.' + + # Independently of option `exclude` we use default exclude patterns, + # it can be disabled by this option. + # To list all excluded by default patterns execute `golangci-lint run --help`. + # Default: true. + #exclude-use-default: false + + # If set to true exclude and exclude-rules regular expressions become case-sensitive. + # Default: false + exclude-case-sensitive: false + + # The list of ids of default excludes to include or disable. + # Default: [] + #include: + # - EXC0002 # disable excluding of issues about comments from golint. + + # Maximum issues count per one linter. + # Set to 0 to disable. + # Default: 50 + max-issues-per-linter: 0 + + # Maximum count of issues with the same text. + # Set to 0 to disable. + # Default: 3 + max-same-issues: 0 + + # Show only new issues: if there are unstaged changes or untracked files, + # only those changes are analyzed, else only changes in HEAD~ are analyzed. + # It's a super-useful option for integration of golangci-lint into existing large codebase. + # It's not practical to fix all existing issues at the moment of integration: + # much better don't allow issues in new code. + # + # Default: false. + #new: true + + # Show only new issues created after git revision `REV`. + #new-from-rev: HEAD + + # Show only new issues created in git patch with set file path. + #new-from-patch: path/to/patch/file + + # Fix found issues (if it's supported by the linter). + #fix: true + + +severity: + # Set the default severity for issues. + # + # If severity rules are defined and the issues do not match or no severity is provided to the rule + # this will be the default severity applied. + # Severities should match the supported severity names of the selected out format. + # - Code climate: https://docs.codeclimate.com/docs/issues#issue-severity + # - Checkstyle: https://checkstyle.sourceforge.io/property_types.html#severity + # - GitHub: https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-message + # + # Default value is an empty string. + #default-severity: error + + # If set to true `severity-rules` regular expressions become case-sensitive. + # Default: false + #case-sensitive: true + + # When a list of severity rules are provided, severity information will be added to lint issues. + # Severity rules have the same filtering capability as exclude rules + # except you are allowed to specify one matcher per severity rule. + # Only affects out formats that support setting severity information. + # + # Default: [] + #rules: + # - linters: + # - dupl + # severity: info diff --git a/pkg/zhmcclient/client.go b/pkg/zhmcclient/client.go index 20686e2..dae383b 100644 --- a/pkg/zhmcclient/client.go +++ b/pkg/zhmcclient/client.go @@ -1,3 +1,4 @@ + // Copyright 2021-2023 IBM Corp. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -36,8 +37,8 @@ import ( ) func NewZapLogger() Logger { - zapLogger, _ := zap.NewProduction() - return zapLogger + zapLogger, _ := zap.NewProduction() + return zapLogger } var logger = NewZapLogger() @@ -107,8 +108,8 @@ type Client struct { func NewClient(endpoint string, opts *Options, l Logger) (ClientAPI, *HmcError) { if l != nil { - logger = l - } + logger = l + } tslConfig, err := SetCertificate(opts, &tls.Config{}) if err != nil { diff --git a/pkg/zhmcclient/cpc.go b/pkg/zhmcclient/cpc.go index 12c40eb..0811aba 100644 --- a/pkg/zhmcclient/cpc.go +++ b/pkg/zhmcclient/cpc.go @@ -25,6 +25,7 @@ import ( ) // CpcAPI defines an interface for issuing CPC requests to ZHMC +// //go:generate counterfeiter -o fakes/cpc.go --fake-name CpcAPI . CpcAPI type CpcAPI interface { ListCPCs(query map[string]string) ([]CPC, int, *HmcError) diff --git a/pkg/zhmcclient/job.go b/pkg/zhmcclient/job.go index 2d0ce07..547ef87 100644 --- a/pkg/zhmcclient/job.go +++ b/pkg/zhmcclient/job.go @@ -24,6 +24,7 @@ import ( ) // JobAPI defines an interface for issuing Job requests to ZHMC +// //go:generate counterfeiter -o fakes/job.go --fake-name JobAPI . JobAPI type JobAPI interface { QueryJob(jobURI string) (*Job, int, *HmcError) diff --git a/pkg/zhmcclient/logger.go b/pkg/zhmcclient/logger.go index 3c9a7b4..483c18f 100644 --- a/pkg/zhmcclient/logger.go +++ b/pkg/zhmcclient/logger.go @@ -4,7 +4,6 @@ import ( "go.uber.org/zap/zapcore" ) - type Logger interface { Debug(msg string, fields ...zapcore.Field) Info(msg string, fields ...zapcore.Field) diff --git a/pkg/zhmcclient/lpar.go b/pkg/zhmcclient/lpar.go index 60dcf96..665697f 100644 --- a/pkg/zhmcclient/lpar.go +++ b/pkg/zhmcclient/lpar.go @@ -25,6 +25,7 @@ import ( ) // LparAPI defines an interface for issuing LPAR requests to ZHMC +// //go:generate counterfeiter -o fakes/lpar.go --fake-name LparAPI . LparAPI type LparAPI interface { CreateLPAR(cpcURI string, props *LparProperties) (string, int, *HmcError) diff --git a/pkg/zhmcclient/nic.go b/pkg/zhmcclient/nic.go index 1d2c08b..6aa5a4d 100644 --- a/pkg/zhmcclient/nic.go +++ b/pkg/zhmcclient/nic.go @@ -25,6 +25,7 @@ import ( ) // NicAPI defines an interface for issuing NIC requests to ZHMC +// //go:generate counterfeiter -o fakes/nic.go --fake-name NicAPI . NicAPI type NicAPI interface { CreateNic(lparURI string, nic *NIC) (string, int, *HmcError) diff --git a/pkg/zhmcclient/sgroup.go b/pkg/zhmcclient/sgroup.go index beabcf2..6f7e664 100644 --- a/pkg/zhmcclient/sgroup.go +++ b/pkg/zhmcclient/sgroup.go @@ -266,11 +266,12 @@ func (m *StorageGroupManager) UpdateStorageGroupProperties(storageGroupURI strin return status, nil } -/** -* POST /api/storage-groups/{storage-group-id}/operations/accept-mismatched- - storage-volumes -* Return: 200 -* or: 400, 404, 409 +/* +* + - POST /api/storage-groups/{storage-group-id}/operations/accept-mismatched- + storage-volumes + - Return: 200 + - or: 400, 404, 409 */ func (m *StorageGroupManager) FulfillStorageGroup(storageGroupURI string, request *StorageGroupProperties) (int, *HmcError) { requestUrl := m.client.CloneEndpointURL() diff --git a/pkg/zhmcclient/vswitch.go b/pkg/zhmcclient/vswitch.go index b019894..efa5425 100644 --- a/pkg/zhmcclient/vswitch.go +++ b/pkg/zhmcclient/vswitch.go @@ -25,6 +25,7 @@ import ( ) // VirtualSwitchAPI defines an interface for issuing VirtualSwitch requests to ZHMC +// //go:generate counterfeiter -o fakes/vswitch.go --fake-name VirtualSwitchAPI . VirtualSwitchAPI type VirtualSwitchAPI interface { ListVirtualSwitches(cpcURI string, query map[string]string) ([]VirtualSwitch, int, *HmcError)