From 45c5f6fd45d15562e91a81c5ef3c151304f26c34 Mon Sep 17 00:00:00 2001 From: Pranav RK Date: Fri, 9 May 2025 09:11:11 +0530 Subject: [PATCH 1/3] feat: upgrade golangci-lint to v2 Use the latest version of `golangci-lint` and fix the CI workflow. --- .github/workflows/lint.yaml | 4 ++-- .golangci.yml | 21 ++++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index a37813e3b..374715d66 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -24,7 +24,7 @@ jobs: go mod verify go mod download - LINT_VERSION=1.64.8 + LINT_VERSION=2.1.6 curl -fsSL https://github.com/golangci/golangci-lint/releases/download/v${LINT_VERSION}/golangci-lint-${LINT_VERSION}-linux-amd64.tar.gz | \ tar xz --strip-components 1 --wildcards \*/golangci-lint mkdir -p bin && mv golangci-lint bin/ @@ -45,6 +45,6 @@ jobs: assert-nothing-changed go fmt ./... assert-nothing-changed go mod tidy - bin/golangci-lint run --out-format=colored-line-number --timeout=3m || STATUS=$? + bin/golangci-lint run --timeout=3m || STATUS=$? exit $STATUS diff --git a/.golangci.yml b/.golangci.yml index 43e3d62dc..49dc9fac9 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,3 +1,6 @@ +# https://golangci-lint.run/usage/configuration +version: "2" + run: timeout: 5m tests: true @@ -8,13 +11,9 @@ linters: - govet - errcheck - staticcheck - - gofmt - - goimports - revive - ineffassign - - typecheck - unused - - gosimple - misspell - nakedret - bodyclose @@ -22,7 +21,15 @@ linters: - makezero - gosec +formatters: + enable: + - gci + - gofmt + - goimports + - golines + output: - formats: colored-line-number - print-issued-lines: true - print-linter-name: true + formats: + text: + print-linter-name: true + print-issued-lines: true From f6d0b4a1f46ba1bdc541049c353a449075fd80df Mon Sep 17 00:00:00 2001 From: William Martin Date: Mon, 12 May 2025 11:48:02 +0200 Subject: [PATCH 2/3] Exclude and satisfy linters --- .golangci.yml | 16 ++++++++++++++-- cmd/mcpcurl/main.go | 13 +++++++------ internal/ghmcp/server.go | 3 +-- pkg/github/repositories.go | 6 +++--- pkg/translations/translations.go | 2 +- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 49dc9fac9..61302f6f7 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -20,13 +20,25 @@ linters: - gocritic - makezero - gosec + settings: + staticcheck: + checks: + - all + - '-QF1008' # Allow embedded structs to be referenced by field + - '-ST1000' # Do not require package comments + revive: + rules: + - name: exported + disabled: true + - name: exported + disabled: true + - name: package-comments + disabled: true formatters: enable: - - gci - gofmt - goimports - - golines output: formats: diff --git a/cmd/mcpcurl/main.go b/cmd/mcpcurl/main.go index dfc639b99..bc192587a 100644 --- a/cmd/mcpcurl/main.go +++ b/cmd/mcpcurl/main.go @@ -77,7 +77,7 @@ type ( Arguments map[string]interface{} `json:"arguments"` } - // Define structure to match the response format + // Content matches the response format of a text content response Content struct { Type string `json:"type"` Text string `json:"text"` @@ -284,10 +284,10 @@ func addCommandFromTool(toolsCmd *cobra.Command, tool *Tool, prettyPrint bool) { cmd.Flags().Bool(name, false, description) case "array": if prop.Items != nil { - if prop.Items.Type == "string" { + switch prop.Items.Type { + case "string": cmd.Flags().StringSlice(name, []string{}, description) - } else if prop.Items.Type == "object" { - // For complex objects in arrays, we'll use a JSON string that users can provide + case "object": cmd.Flags().String(name+"-json", "", description+" (provide as JSON array)") } } @@ -327,11 +327,12 @@ func buildArgumentsMap(cmd *cobra.Command, tool *Tool) (map[string]interface{}, } case "array": if prop.Items != nil { - if prop.Items.Type == "string" { + switch prop.Items.Type { + case "string": if values, _ := cmd.Flags().GetStringSlice(name); len(values) > 0 { arguments[name] = values } - } else if prop.Items.Type == "object" { + case "object": if jsonStr, _ := cmd.Flags().GetString(name + "-json"); jsonStr != "" { var jsonArray []interface{} if err := json.Unmarshal([]byte(jsonStr), &jsonArray); err != nil { diff --git a/internal/ghmcp/server.go b/internal/ghmcp/server.go index f75119ada..3434d9cde 100644 --- a/internal/ghmcp/server.go +++ b/internal/ghmcp/server.go @@ -14,7 +14,6 @@ import ( "github.com/github/github-mcp-server/pkg/translations" gogithub "github.com/google/go-github/v69/github" "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" "github.com/sirupsen/logrus" ) @@ -170,7 +169,7 @@ func RunStdioServer(cfg StdioServerConfig) error { logrusLogger := logrus.New() if cfg.LogFilePath != "" { - file, err := os.OpenFile(cfg.LogFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) + file, err := os.OpenFile(cfg.LogFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600) if err != nil { return fmt.Errorf("failed to open log file: %w", err) } diff --git a/pkg/github/repositories.go b/pkg/github/repositories.go index beaab7c87..4c168c204 100644 --- a/pkg/github/repositories.go +++ b/pkg/github/repositories.go @@ -612,7 +612,7 @@ func CreateBranch(getClient GetClientFn, t translations.TranslationHelperFunc) ( if err != nil { return nil, fmt.Errorf("failed to get repository: %w", err) } - defer resp.Body.Close() + defer func() { _ = resp.Body.Close() }() fromBranch = *repository.DefaultBranch } @@ -622,7 +622,7 @@ func CreateBranch(getClient GetClientFn, t translations.TranslationHelperFunc) ( if err != nil { return nil, fmt.Errorf("failed to get reference: %w", err) } - defer resp.Body.Close() + defer func() { _ = resp.Body.Close() }() // Create new branch newRef := &github.Reference{ @@ -634,7 +634,7 @@ func CreateBranch(getClient GetClientFn, t translations.TranslationHelperFunc) ( if err != nil { return nil, fmt.Errorf("failed to create branch: %w", err) } - defer resp.Body.Close() + defer func() { _ = resp.Body.Close() }() r, err := json.Marshal(createdRef) if err != nil { diff --git a/pkg/translations/translations.go b/pkg/translations/translations.go index 741ee2b50..0cc1c187d 100644 --- a/pkg/translations/translations.go +++ b/pkg/translations/translations.go @@ -56,7 +56,7 @@ func TranslationHelper() (TranslationHelperFunc, func()) { } } -// dump translationKeyMap to a json file called github-mcp-server-config.json +// DumpTranslationKeyMap writes the translation map to a json file called github-mcp-server-config.json func DumpTranslationKeyMap(translationKeyMap map[string]string) error { file, err := os.Create("github-mcp-server-config.json") if err != nil { From 52afc69cc5a5ae664455f52a61af371b32c913eb Mon Sep 17 00:00:00 2001 From: William Martin Date: Mon, 12 May 2025 11:52:17 +0200 Subject: [PATCH 3/3] Document installation of v2 --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fe307d1d2..11d63a389 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,7 +15,7 @@ Please note that this project is released with a [Contributor Code of Conduct](C These are one time installations required to be able to test your changes locally as part of the pull request (PR) submission process. 1. install Go [through download](https://go.dev/doc/install) | [through Homebrew](https://formulae.brew.sh/formula/go) -1. [install golangci-lint](https://golangci-lint.run/welcome/install/#local-installation) +1. [install golangci-lint v2](https://golangci-lint.run/welcome/install/#local-installation) ## Submitting a pull request pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy