diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 21bab99..254c30e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -291,13 +291,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 + - uses: actions/setup-go@v6 with: - go-version-file: go.mod + go-version: stable - name: golangci-lint - uses: golangci/golangci-lint-action@v6 + uses: golangci/golangci-lint-action@v9 with: - version: latest + version: v2.11 go-test: name: Go lint/test (${{ matrix.os }}) @@ -310,7 +310,7 @@ jobs: os: [ubuntu-latest] steps: - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 + - uses: actions/setup-go@v6 with: go-version-file: go.mod cache: true @@ -324,7 +324,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 + - uses: actions/setup-go@v6 with: go-version-file: go.mod cache: true @@ -340,7 +340,7 @@ jobs: - name: Setup Go (if needed) if: ${{ needs.discover.outputs.has_go == 'true' }} - uses: actions/setup-go@v5 + uses: actions/setup-go@v6 with: go-version-file: go.mod @@ -410,7 +410,7 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: actions/setup-go@v5 + - uses: actions/setup-go@v6 with: go-version-file: go.mod diff --git a/.golangci.yml b/.golangci.yml deleted file mode 100644 index c10cbc0..0000000 --- a/.golangci.yml +++ /dev/null @@ -1,13 +0,0 @@ -run: - timeout: 5m - -linters: - enable: - - govet - - staticcheck - - errcheck - - ineffassign - - revive - -issues: - exclude-use-default: false diff --git a/authHandlers.go b/authHandlers.go index ddfb755..d1059db 100644 --- a/authHandlers.go +++ b/authHandlers.go @@ -29,7 +29,7 @@ func UserLogoutAction(w http.ResponseWriter, r *http.Request) error { return fmt.Errorf("session.Save Error: %w", err) } - data.CoreData.UserRef = "" + data.UserRef = "" return nil } @@ -106,6 +106,7 @@ func LoginWithProvider(w http.ResponseWriter, r *http.Request) error { func Oauth2CallbackPage(w http.ResponseWriter, r *http.Request) error { + //nolint:unused type ErrorData struct { *CoreData Error string diff --git a/autoRefreshPage.go b/autoRefreshPage.go index e80036e..dde86b9 100644 --- a/autoRefreshPage.go +++ b/autoRefreshPage.go @@ -24,6 +24,7 @@ func TaskDoneAutoRefreshPage(w http.ResponseWriter, r *http.Request) error { return nil } +//nolint:unused func taskRedirectWithoutQueryArgs(w http.ResponseWriter, r *http.Request) { u := r.URL u.RawQuery = "" diff --git a/bookmarkTabEdit.go b/bookmarkTabEdit.go index 5402aae..91f7e19 100644 --- a/bookmarkTabEdit.go +++ b/bookmarkTabEdit.go @@ -101,7 +101,7 @@ func ReplaceTabByIndex(bookmarks string, idx int, newName, newText string) (stri end := starts[idx+1] var replacement []string - includeHeader := !(idx == 0 && newName == "") + includeHeader := idx != 0 || newName != "" if includeHeader { if newName != "" { replacement = append(replacement, "Tab: "+newName) diff --git a/bookmark_methods_test.go b/bookmark_methods_test.go index 99b8237..7975825 100644 --- a/bookmark_methods_test.go +++ b/bookmark_methods_test.go @@ -119,7 +119,7 @@ func TestAddTab(t *testing.T) { p := &BookmarkPage{Blocks: []*BookmarkBlock{{Columns: []*BookmarkColumn{{}}}}} p.Blocks[0].Columns[0].AddCategory(&BookmarkCategory{Name: "C"}) nl.AddPage(p) - var list BookmarkList = tabs + list := BookmarkList(tabs) list.AddTab(nl) got := list.String() if got != addTabExpected { @@ -133,7 +133,7 @@ func TestInsertTab(t *testing.T) { p := &BookmarkPage{Blocks: []*BookmarkBlock{{Columns: []*BookmarkColumn{{}}}}} p.Blocks[0].Columns[0].AddCategory(&BookmarkCategory{Name: "X"}) nl.AddPage(p) - var list BookmarkList = tabs + list := BookmarkList(tabs) list.InsertTab(1, nl) got := list.String() if got != insertTabExpected { @@ -143,7 +143,7 @@ func TestInsertTab(t *testing.T) { func TestSwitchTab(t *testing.T) { tabs := ParseBookmarks(switchTabInput) - var list BookmarkList = tabs + list := BookmarkList(tabs) list.SwitchTabs(0, 1) got := list.String() if got != switchTabExpected { @@ -153,7 +153,7 @@ func TestSwitchTab(t *testing.T) { func TestMoveTab(t *testing.T) { tabs := ParseBookmarks(switchTabInput) - var list BookmarkList = tabs + list := BookmarkList(tabs) list.MoveTab(0, 1) got := list.String() if got != switchTabExpected { diff --git a/bookmark_model.go b/bookmark_model.go index 9504c08..305486d 100644 --- a/bookmark_model.go +++ b/bookmark_model.go @@ -185,7 +185,7 @@ type BookmarkTab struct { func (t *BookmarkTab) stringWithContext(first bool) string { var sb strings.Builder - if !(first && t.Name == "") { + if !first || t.Name != "" { if t.Name != "" { sb.WriteString("Tab: ") sb.WriteString(t.Name) @@ -564,6 +564,7 @@ func FindPageBySha(tabs BookmarkList, sha string) *BookmarkPage { } // indexAfterColumn returns the global index after the last category in the specified column. +//nolint:unused func indexAfterColumn(tabs BookmarkList, page *BookmarkPage, colIdx int) int { idx := 0 for _, t := range tabs { diff --git a/cmd/gobookmarks/db_reset_password_command.go b/cmd/gobookmarks/db_reset_password_command.go index 86665d0..73ece7f 100644 --- a/cmd/gobookmarks/db_reset_password_command.go +++ b/cmd/gobookmarks/db_reset_password_command.go @@ -5,7 +5,7 @@ import ( "flag" "fmt" - . "github.com/arran4/gobookmarks" + . "github.com/arran4/gobookmarks" //nolint:staticcheck ) type DbResetPasswordCommand struct { diff --git a/cmd/gobookmarks/db_users_command.go b/cmd/gobookmarks/db_users_command.go index 89005d5..6483bbb 100644 --- a/cmd/gobookmarks/db_users_command.go +++ b/cmd/gobookmarks/db_users_command.go @@ -4,7 +4,7 @@ import ( "flag" "fmt" - . "github.com/arran4/gobookmarks" + . "github.com/arran4/gobookmarks" //nolint:staticcheck ) type DbUsersCommand struct { @@ -57,14 +57,14 @@ func (c *DbUsersCommand) Execute(args []string) error { printHelp(c, err) return err } - defer db.Close() + defer func() { _ = db.Close() }() rows, err := db.Query("SELECT user FROM passwords") if err != nil { printHelp(c, err) return err } - defer rows.Close() + defer func() { _ = rows.Close() }() for rows.Next() { var user string diff --git a/cmd/gobookmarks/help_command.go b/cmd/gobookmarks/help_command.go index 1386593..d901ca1 100644 --- a/cmd/gobookmarks/help_command.go +++ b/cmd/gobookmarks/help_command.go @@ -40,7 +40,7 @@ func (c *HelpCommand) Execute(args []string) error { } } } - c.FlagSet().Parse(args) + _ = c.FlagSet().Parse(args) c.FlagSet().Usage = func() {} printHelp(target, nil) return nil diff --git a/cmd/gobookmarks/main.go b/cmd/gobookmarks/main.go index ce06b64..3171d73 100644 --- a/cmd/gobookmarks/main.go +++ b/cmd/gobookmarks/main.go @@ -6,7 +6,7 @@ import ( "log" "os" - . "github.com/arran4/gobookmarks" + . "github.com/arran4/gobookmarks" //nolint:staticcheck ) var ( diff --git a/cmd/gobookmarks/serve.go b/cmd/gobookmarks/serve.go index dc1e3ae..04752f5 100644 --- a/cmd/gobookmarks/serve.go +++ b/cmd/gobookmarks/serve.go @@ -452,7 +452,7 @@ func CreatePEMFiles() { if err != nil { log.Fatalf("Failed to create cert.pem file: %v", err) } - defer certFile.Close() + defer func() { _ = certFile.Close() }() if err := pem.Encode(certFile, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}); err != nil { log.Fatalf("Failed to write data to cert.pem: %v", err) } @@ -461,7 +461,7 @@ func CreatePEMFiles() { if err != nil { log.Fatalf("Failed to create key.pem file: %v", err) } - defer keyFile.Close() + defer func() { _ = keyFile.Close() }() privBytes, err := x509.MarshalECPrivateKey(priv) if err != nil { log.Fatalf("Failed to marshal private key: %v", err) @@ -475,10 +475,10 @@ func runHandlerChain(chain ...any) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, r *http.Request) { for _, each := range chain { switch each := each.(type) { - case http.Handler: - each.ServeHTTP(w, r) case http.HandlerFunc: each(w, r) + case http.Handler: + each.ServeHTTP(w, r) case func(http.ResponseWriter, *http.Request): each(w, r) case func(http.ResponseWriter, *http.Request) error: diff --git a/cmd/gobookmarks/test_verification_template_command.go b/cmd/gobookmarks/test_verification_template_command.go index 23f9b3f..1b9724a 100644 --- a/cmd/gobookmarks/test_verification_template_command.go +++ b/cmd/gobookmarks/test_verification_template_command.go @@ -149,9 +149,6 @@ https://example.com Example Link if input.Bookmarks != "" { bookmarksStr = input.Bookmarks } - } else { - // Just to debug if set is true or not - // fmt.Println("DEBUG: DataFromJsonFile is NOT set") } // Create a dummy request to build the context @@ -303,14 +300,14 @@ https://example.com Example Link // For serving, we need to handle main.css and favicon too, otherwise the page looks broken mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - w.Write(output) + _, _ = w.Write(output) }) mux.HandleFunc("/main.css", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/css") - w.Write(GetMainCSSData()) + _, _ = w.Write(GetMainCSSData()) }) mux.HandleFunc("/favicon.ico", func(w http.ResponseWriter, r *http.Request) { - w.Write(GetFavicon()) + _, _ = w.Write(GetFavicon()) }) // Also proxy/favicon if possible, but that might require internet or network mux.HandleFunc("/proxy/favicon", func(w http.ResponseWriter, r *http.Request) { diff --git a/config.go b/config.go index 4f365a8..5a9b38f 100644 --- a/config.go +++ b/config.go @@ -4,7 +4,6 @@ import ( "bufio" "encoding/json" "fmt" - "io/ioutil" "log" "os" "path/filepath" @@ -93,7 +92,7 @@ func LoadConfigFile(path string) (Configuration, bool, error) { log.Printf("attempting to load config from %s", path) - data, err := ioutil.ReadFile(path) + data, err := os.ReadFile(path) if err != nil { if os.IsNotExist(err) { log.Printf("config file %s not found", path) @@ -280,7 +279,7 @@ func LoadEnvFile(path string) error { } return err } - defer f.Close() + defer func() { _ = f.Close() }() scanner := bufio.NewScanner(f) for scanner.Scan() { @@ -295,7 +294,7 @@ func LoadEnvFile(path string) error { key := strings.TrimSpace(parts[0]) val := strings.TrimSpace(parts[1]) if os.Getenv(key) == "" { - os.Setenv(key, val) + _ = os.Setenv(key, val) } } return scanner.Err() diff --git a/db.go b/db.go index 76f54fb..6eaba64 100644 --- a/db.go +++ b/db.go @@ -20,12 +20,12 @@ func OpenDB() (*sql.DB, error) { } if err := db.Ping(); err != nil { - db.Close() + _ = db.Close() return nil, NewSystemError("Database error", err) } if err := ensureSQLSchema(db); err != nil { - db.Close() + _ = db.Close() return nil, NewSystemError("Database error", fmt.Errorf("failed to ensure schema: %w", err)) } return db, nil diff --git a/favicon_proxy_test.go b/favicon_proxy_test.go index a26ec33..25112e7 100644 --- a/favicon_proxy_test.go +++ b/favicon_proxy_test.go @@ -12,13 +12,13 @@ func newFaviconServer(t *testing.T, icon []byte) (*httptest.Server, *int) { hits := 0 mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("")) + _, _ = w.Write([]byte("")) }) mux.HandleFunc("/favicon.ico", func(w http.ResponseWriter, r *http.Request) { hits++ w.Header().Set("Cache-Control", "max-age=1") w.Header().Set("Content-Type", "image/png") - w.Write(icon) + _, _ = w.Write(icon) }) return httptest.NewServer(mux), &hits } diff --git a/funcs.go b/funcs.go index d703c54..dd4ca9d 100644 --- a/funcs.go +++ b/funcs.go @@ -221,7 +221,8 @@ func NewFuncs(r *http.Request) template.FuncMap { ref := r.URL.Query().Get("ref") bookmarks, _, err := GetBookmarks(r.Context(), login, ref, token) - var bookmark = defaultBookmarks + bookmark := defaultBookmarks + _ = bookmark if err != nil { if errors.Is(err, ErrRepoNotFound) { bookmark = "" @@ -250,7 +251,8 @@ func NewFuncs(r *http.Request) template.FuncMap { ref := r.URL.Query().Get("ref") bookmarks, _, err := GetBookmarks(r.Context(), login, ref, token) - var bookmark = defaultBookmarks + bookmark := defaultBookmarks + _ = bookmark if err != nil { if errors.Is(err, ErrRepoNotFound) { bookmark = "" @@ -290,7 +292,8 @@ func NewFuncs(r *http.Request) template.FuncMap { ref := r.URL.Query().Get("ref") bookmarks, _, err := GetBookmarks(r.Context(), login, ref, token) - var bookmark = defaultBookmarks + bookmark := defaultBookmarks + _ = bookmark if err != nil { if errors.Is(err, ErrRepoNotFound) { bookmark = "" @@ -332,7 +335,8 @@ func NewFuncs(r *http.Request) template.FuncMap { } bookmarks, _, err := GetBookmarks(r.Context(), login, r.URL.Query().Get("ref"), token) - var bookmark = defaultBookmarks + bookmark := defaultBookmarks + _ = bookmark if err != nil { if errors.Is(err, ErrRepoNotFound) { bookmark = "" @@ -364,7 +368,8 @@ func NewFuncs(r *http.Request) template.FuncMap { } bookmarks, _, err := GetBookmarks(r.Context(), login, r.URL.Query().Get("ref"), token) - var bookmark = defaultBookmarks + bookmark := defaultBookmarks + _ = bookmark if err != nil { if errors.Is(err, ErrRepoNotFound) { bookmark = "" diff --git a/go.mod b/go.mod index f999f7f..2fea84f 100644 --- a/go.mod +++ b/go.mod @@ -1,46 +1,48 @@ module github.com/arran4/gobookmarks -go 1.25.0 +go 1.26 require ( - github.com/PuerkitoBio/goquery v1.8.1 - github.com/arran4/gorillamuxlogic v1.0.1 - github.com/go-git/go-git/v5 v5.17.1 - github.com/go-sql-driver/mysql v1.7.1 + github.com/PuerkitoBio/goquery v1.12.0 + github.com/arran4/gorillamuxlogic v1.1.0 + github.com/go-git/go-git/v5 v5.17.2 + github.com/go-sql-driver/mysql v1.9.3 github.com/google/go-cmp v0.7.0 github.com/google/go-github/v55 v55.0.0 - github.com/gorilla/mux v1.8.0 - github.com/gorilla/securecookie v1.1.1 - github.com/gorilla/sessions v1.2.1 - github.com/mattn/go-sqlite3 v1.14.17 + github.com/gorilla/mux v1.8.1 + github.com/gorilla/securecookie v1.1.2 + github.com/gorilla/sessions v1.4.0 + github.com/mattn/go-sqlite3 v1.14.39 github.com/xanzy/go-gitlab v0.115.0 - golang.org/x/crypto v0.45.0 + golang.org/x/crypto v0.49.0 golang.org/x/image v0.38.0 - golang.org/x/oauth2 v0.27.0 + golang.org/x/oauth2 v0.36.0 ) require ( - dario.cat/mergo v1.0.0 // indirect + dario.cat/mergo v1.0.2 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/ProtonMail/go-crypto v1.1.6 // indirect - github.com/andybalholm/cascadia v1.3.1 // indirect + github.com/ProtonMail/go-crypto v1.4.1 // indirect + github.com/andybalholm/cascadia v1.3.3 // indirect github.com/cloudflare/circl v1.6.3 // indirect - github.com/cyphar/filepath-securejoin v0.4.1 // indirect + github.com/cyphar/filepath-securejoin v0.6.1 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.8.0 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect - github.com/google/go-querystring v1.1.0 // indirect + github.com/google/go-querystring v1.2.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-retryablehttp v0.7.7 // indirect + github.com/hashicorp/go-retryablehttp v0.7.8 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect - github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/pjbgf/sha1cd v0.3.2 // indirect - github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect - github.com/skeema/knownhosts v1.3.1 // indirect + github.com/kevinburke/ssh_config v1.6.0 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/pjbgf/sha1cd v0.5.0 // indirect + github.com/sergi/go-diff v1.4.0 // indirect + github.com/skeema/knownhosts v1.3.2 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - golang.org/x/net v0.47.0 // indirect - golang.org/x/sys v0.38.0 // indirect - golang.org/x/time v0.3.0 // indirect + golang.org/x/net v0.52.0 // indirect + golang.org/x/sys v0.42.0 // indirect + golang.org/x/time v0.15.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect ) diff --git a/go.sum b/go.sum index ef2466e..552cfac 100644 --- a/go.sum +++ b/go.sum @@ -1,24 +1,26 @@ -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= +dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw= -github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= -github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM= -github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ= -github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= -github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= +github.com/ProtonMail/go-crypto v1.4.1 h1:9RfcZHqEQUvP8RzecWEUafnZVtEvrBVL9BiF67IQOfM= +github.com/ProtonMail/go-crypto v1.4.1/go.mod h1:e1OaTyu5SYVrO9gKOEhTc+5UcXtTUa+P3uLudwcgPqo= +github.com/PuerkitoBio/goquery v1.12.0 h1:pAcL4g3WRXekcB9AU/y1mbKez2dbY2AajVhtkO8RIBo= +github.com/PuerkitoBio/goquery v1.12.0/go.mod h1:802ej+gV2y7bbIhOIoPY5sT183ZW0YFofScC4q/hIpQ= +github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= +github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/arran4/gorillamuxlogic v1.0.1 h1:eW6Qm06/snmJYCXpwM1KncIvNDxo+4gtlD0CUTboVG4= -github.com/arran4/gorillamuxlogic v1.0.1/go.mod h1:gld8XFVNKY7Dz4pukVKImnJ8cVyEo6ITw9J0Bt3YLGM= +github.com/arran4/gorillamuxlogic v1.1.0 h1:s2r9EIRQ4O78tp2UWUEOmMqYB0zqZ4n1VNSdwnSmB0A= +github.com/arran4/gorillamuxlogic v1.1.0/go.mod h1:09BI9c/Twmaf9UHdImLbytueFAURqlTC6ntOjsQJzTk= github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8= github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4= -github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= -github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= +github.com/cyphar/filepath-securejoin v0.6.1 h1:5CeZ1jPXEiYt3+Z6zqprSAgSWiggmpVyciv8syjIpVE= +github.com/cyphar/filepath-securejoin v0.6.1/go.mod h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -36,35 +38,39 @@ github.com/go-git/go-billy/v5 v5.8.0 h1:I8hjc3LbBlXTtVuFNJuwYuMiHvQJDq1AT6u4DwDz github.com/go-git/go-billy/v5 v5.8.0/go.mod h1:RpvI/rw4Vr5QA+Z60c6d6LXH0rYJo0uD5SqfmrrheCY= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.17.1 h1:WnljyxIzSj9BRRUlnmAU35ohDsjRK0EKmL0evDqi5Jk= -github.com/go-git/go-git/v5 v5.17.1/go.mod h1:pW/VmeqkanRFqR6AljLcs7EA7FbZaN5MQqO7oZADXpo= -github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= -github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/go-git/go-git/v5 v5.17.2 h1:B+nkdlxdYrvyFK4GPXVU8w1U+YkbsgciIR7f2sZJ104= +github.com/go-git/go-git/v5 v5.17.2/go.mod h1:pW/VmeqkanRFqR6AljLcs7EA7FbZaN5MQqO7oZADXpo= +github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= +github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-github/v55 v55.0.0 h1:4pp/1tNMB9X/LuAhs5i0KQAE40NmiR/y6prLNb9x9cg= github.com/google/go-github/v55 v55.0.0/go.mod h1:JLahOTA1DnXzhxEymmFF5PP2tSS9JVNj68mSZNDwskA= -github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= -github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= -github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/google/go-querystring v1.2.0 h1:yhqkPbu2/OH+V9BfpCVPZkNmUXhb2gBxJArfhIxNtP0= +github.com/google/go-querystring v1.2.0/go.mod h1:8IFJqpSRITyJ8QhQ13bmbeMBDfmeEJZD5A0egEOmkqU= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= +github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= +github.com/gorilla/sessions v1.4.0 h1:kpIYOp/oi6MG/p5PgxApU8srsSw9tuFbt46Lt7auzqQ= +github.com/gorilla/sessions v1.4.0/go.mod h1:FLWm50oby91+hl7p/wRxDth9bWSuk0qVL2emc7lT5ik= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= -github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= +github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48= +github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.6.0 h1:J1FBfmuVosPHf5GRdltRLhPJtJpTlMdKTBjRgTaQBFY= +github.com/kevinburke/ssh_config v1.6.0/go.mod h1:q2RIzfka+BXARoNexmF9gkxEX7DmvbW9P4hIVx2Kg4M= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -76,28 +82,28 @@ github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxec github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM= -github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.39 h1:sIwSjlJGOaRJjw44/HXaeTblZMjseqr6OOio1tz/+JI= +github.com/mattn/go-sqlite3 v1.14.39/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= -github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= +github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0= +github.com/pjbgf/sha1cd v0.5.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= -github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= +github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= +github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= -github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= +github.com/skeema/knownhosts v1.3.2 h1:EDL9mgf4NzwMXCTfaxSD/o/a5fxDw/xL9nkU28JjdBg= +github.com/skeema/knownhosts v1.3.2/go.mod h1:bEg3iQAuw+jyiw+484wwFJoKSLwcfd7fqRy+N0QTiow= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/xanzy/go-gitlab v0.115.0 h1:6DmtItNcVe+At/liXSgfE/DZNZrGfalQmBRmOcJjOn8= github.com/xanzy/go-gitlab v0.115.0/go.mod h1:5XCDtM7AM6WMKmfDdOiEpyRWUqui2iS9ILfvCZ2gJ5M= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= @@ -106,25 +112,42 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= -golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= +golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.38.0 h1:5l+q+Y9JDC7mBOMjo4/aPhMDcxEptsX+Tt3GgRQRPuE= golang.org/x/image v0.38.0/go.mod h1:/3f6vaXC+6CEanU4KJxbcUZyEePbyKbaLoDOe4ehFYY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= -golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= -golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= +golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= +golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -135,27 +158,45 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= -golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= -golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= +golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/provider_access.go b/provider_access.go index ac7a8e7..096bbb7 100644 --- a/provider_access.go +++ b/provider_access.go @@ -52,6 +52,7 @@ func getCachedBookmarks(user, ref string) (string, string, bool) { return entry.bookmarks, entry.sha, true } +//nolint:unused func setCachedBookmarks(user, ref, bookmarks, sha string) { key := cacheKey(user, ref) bookmarksCache.Lock() diff --git a/provider_github.go b/provider_github.go index 5078def..fb10358 100644 --- a/provider_github.go +++ b/provider_github.go @@ -50,6 +50,7 @@ func (GitHubProvider) client(ctx context.Context, token *oauth2.Token) *github.C if server == "" || server == "https://github.com" { return github.NewClient(httpClient) } + //nolint:staticcheck c, err := github.NewEnterpriseClient(server+"/api/v3/", server+"/upload/v3/", httpClient) if err != nil { return github.NewClient(httpClient) @@ -150,7 +151,9 @@ func (p GitHubProvider) GetBookmarks(ctx context.Context, user, ref string, toke var commitAuthor = &github.CommitAuthor{Name: SP("Gobookmarks"), Email: SP("Gobookmarks@arran.net.au")} -func (p GitHubProvider) getDefaultBranch(ctx context.Context, user string, client *github.Client, branch string) (string, error) { +func (p GitHubProvider) getDefaultBranch(ctx context.Context, user string, client *github.Client, branchIn string) (string, error) { + branch := branchIn + _ = branch rep, resp, err := client.Repositories.Get(ctx, user, Config.GetRepoName()) if resp != nil && resp.StatusCode == 404 { return "", ErrRepoNotFound diff --git a/provider_gitlab.go b/provider_gitlab.go index 9d95a7d..7f0d2df 100644 --- a/provider_gitlab.go +++ b/provider_gitlab.go @@ -53,6 +53,7 @@ func (GitLabProvider) Config(clientID, clientSecret, redirectURL string) *oauth2 } } +//nolint:staticcheck func (GitLabProvider) client(token *oauth2.Token) (*gitlab.Client, error) { server := Config.GitlabServer if server == "" { @@ -182,7 +183,10 @@ func (GitLabProvider) GetBookmarks(ctx context.Context, user, ref string, token return string(data), f.LastCommitID, nil } -func (GitLabProvider) getDefaultBranch(ctx context.Context, user string, client *gitlab.Client, branch string) (string, error) { +//nolint:staticcheck +func (GitLabProvider) getDefaultBranch(ctx context.Context, user string, client *gitlab.Client, branchIn string) (string, error) { + branch := branchIn + _ = branch p, _, err := client.Projects.GetProject(user+"/"+Config.GetRepoName(), nil) if err != nil { if respErr, ok := err.(*gitlab.ErrorResponse); ok { diff --git a/provider_sql.go b/provider_sql.go index f604cce..c155318 100644 --- a/provider_sql.go +++ b/provider_sql.go @@ -65,7 +65,7 @@ func (p *SQLProvider) GetTags(ctx context.Context, user string, token *oauth2.To if err != nil { return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() var tags []*Tag for rows.Next() { @@ -88,7 +88,7 @@ func (p *SQLProvider) GetBranches(ctx context.Context, user string, token *oauth if err != nil { return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() var branches []*Branch for rows.Next() { @@ -120,7 +120,7 @@ func (p *SQLProvider) GetCommits(ctx context.Context, user string, token *oauth2 if err != nil { return nil, fmt.Errorf("failed to query history: %v", err) } - defer rows.Close() + defer func() { _ = rows.Close() }() var commits []*Commit for rows.Next() { @@ -226,11 +226,11 @@ func (p *SQLProvider) UpdateBookmarks(ctx context.Context, user string, token *o var curSha sql.NullString err = tx.QueryRowContext(ctx, "SELECT sha FROM branches WHERE user=? AND name=?", user, branch).Scan(&curSha) if err != nil && err != sql.ErrNoRows { - tx.Rollback() + _ = tx.Rollback() return err } if expectSHA != "" && curSha.Valid && curSha.String != expectSHA { - tx.Rollback() + _ = tx.Rollback() return errors.New("sha mismatch") } @@ -241,14 +241,14 @@ func (p *SQLProvider) UpdateBookmarks(ctx context.Context, user string, token *o "INSERT INTO history(user, sha, message, text, date) VALUES(?,?,?,?,?)", user, newSha, "update", text, time.Now(), ); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } if _, err := tx.ExecContext(ctx, "UPDATE bookmarks SET list=? WHERE user=?", text, user, ); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } @@ -260,7 +260,7 @@ func (p *SQLProvider) UpdateBookmarks(ctx context.Context, user string, token *o VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE sha = VALUES(sha) `, user, branch, newSha); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } case "sqlite3": @@ -269,11 +269,11 @@ func (p *SQLProvider) UpdateBookmarks(ctx context.Context, user string, token *o VALUES (?, ?, ?) ON CONFLICT(user, name) DO UPDATE SET sha = excluded.sha `, user, branch, newSha); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } default: - tx.Rollback() + _ = tx.Rollback() return errors.New("unsupported connection provider") } @@ -301,7 +301,7 @@ func (p *SQLProvider) CreateBookmarks(ctx context.Context, user string, token *o "INSERT INTO bookmarks(user, list) VALUES(?, '') ON DUPLICATE KEY UPDATE list=list", user, ); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } case "sqlite3": @@ -309,11 +309,11 @@ func (p *SQLProvider) CreateBookmarks(ctx context.Context, user string, token *o "INSERT OR IGNORE INTO bookmarks(user, list) VALUES(?, '')", user, ); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } default: - tx.Rollback() + _ = tx.Rollback() return errors.New("unsupported connection provider") } @@ -324,14 +324,14 @@ func (p *SQLProvider) CreateBookmarks(ctx context.Context, user string, token *o "INSERT INTO history(user, sha, message, text, date) VALUES(?,?,?,?,?)", user, newSha, "create", text, time.Now(), ); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } if _, err := tx.ExecContext(ctx, "UPDATE bookmarks SET list=? WHERE user=?", text, user, ); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } @@ -343,7 +343,7 @@ func (p *SQLProvider) CreateBookmarks(ctx context.Context, user string, token *o VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE sha=VALUES(sha) `, user, branch, newSha); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } case "sqlite3": @@ -352,11 +352,11 @@ func (p *SQLProvider) CreateBookmarks(ctx context.Context, user string, token *o VALUES (?, ?, ?) ON CONFLICT(user, name) DO UPDATE SET sha = excluded.sha `, user, branch, newSha); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } default: - tx.Rollback() + _ = tx.Rollback() return errors.New("unsupported connection provider") } @@ -381,7 +381,7 @@ func (p *SQLProvider) CreateRepo(ctx context.Context, user string, token *oauth2 "INSERT INTO bookmarks(user, list) VALUES(?, '') ON DUPLICATE KEY UPDATE list=list", user, ); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } // default branch @@ -389,7 +389,7 @@ func (p *SQLProvider) CreateRepo(ctx context.Context, user string, token *oauth2 "INSERT INTO branches(user, name, sha) VALUES(?, 'main', '') ON DUPLICATE KEY UPDATE sha=sha", user, ); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } case "sqlite3": @@ -397,18 +397,18 @@ func (p *SQLProvider) CreateRepo(ctx context.Context, user string, token *oauth2 "INSERT OR IGNORE INTO bookmarks(user, list) VALUES(?, '')", user, ); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } if _, err := tx.ExecContext(ctx, "INSERT OR IGNORE INTO branches(user, name, sha) VALUES(?, 'main', '')", user, ); err != nil { - tx.Rollback() + _ = tx.Rollback() return err } default: - tx.Rollback() + _ = tx.Rollback() return errors.New("unsupported connection provider") }