From 508dd9f6fdb00616ac1a164197ca2afeb5edab0a Mon Sep 17 00:00:00 2001 From: George Adams Date: Tue, 6 Jan 2026 13:41:55 -0500 Subject: [PATCH 1/2] remove: Remove servicelogger tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Servicelogger has been superseded by the managed-notifications MCP server (https://github.com/openshift/managed-notifications/tree/master/mcp) and has not received any updates in a long time. Removing it from the tools collection to reduce maintenance overhead. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 (1M context) --- pkg/tools/servicelogger/servicelogger.go | 104 ----------------------- pkg/tools/tools.go | 4 - 2 files changed, 108 deletions(-) delete mode 100644 pkg/tools/servicelogger/servicelogger.go diff --git a/pkg/tools/servicelogger/servicelogger.go b/pkg/tools/servicelogger/servicelogger.go deleted file mode 100644 index ec7ebfc..0000000 --- a/pkg/tools/servicelogger/servicelogger.go +++ /dev/null @@ -1,104 +0,0 @@ -package servicelogger - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - gogithub "github.com/google/go-github/v51/github" - "github.com/openshift/backplane-tools/pkg/sources/github" - "github.com/openshift/backplane-tools/pkg/tools/base" - "github.com/openshift/backplane-tools/pkg/utils" -) - -// Tool implements the interface to manage the 'osdctl' binary -type Tool struct { - base.Github -} - -func New() *Tool { - t := &Tool{ - Github: base.Github{ - Default: base.NewDefault("servicelogger"), - Source: github.NewSource("geowa4", "servicelogger"), - }, - } - return t -} - -func (t *Tool) Install() error { - // Pull latest release from GH - release, err := t.Source.FetchLatestRelease() - if err != nil { - return err - } - - matches := github.FindAssetsForArchAndOS(release.Assets) - if len(matches) != 1 { - return fmt.Errorf("unexpected number of assets found matching system spec: expected 1, got %d.\nMatching assets: %v", len(matches), matches) - } - toolArchiveAsset := matches[0] - - matches = github.FindAssetsContaining([]string{"checksums.txt"}, release.Assets) - if len(matches) != 1 { - return fmt.Errorf("unexpected number of checksum assets found: expected 1, got %d.\nMatching assets: %v", len(matches), matches) - } - checksumAsset := matches[0] - - // Download the arch- & os-specific assets - toolDir := t.ToolDir() - versionedDir := filepath.Join(toolDir, release.GetTagName()) - err = os.MkdirAll(versionedDir, os.FileMode(0o755)) - if err != nil { - return fmt.Errorf("failed to create version-specific directory '%s': %w", versionedDir, err) - } - - err = t.Source.DownloadReleaseAssets([]*gogithub.ReleaseAsset{checksumAsset, toolArchiveAsset}, versionedDir) - if err != nil { - return fmt.Errorf("failed to download one or more assets: %w", err) - } - - // Verify checksum of downloaded assets - toolArchiveFilepath := filepath.Join(versionedDir, toolArchiveAsset.GetName()) - binarySum, err := utils.Sha256sum(toolArchiveFilepath) - if err != nil { - return fmt.Errorf("failed to calculate checksum for '%s': %w", toolArchiveFilepath, err) - } - - checksumFilePath := filepath.Join(versionedDir, checksumAsset.GetName()) - checksumLine, err := utils.GetLineInFileMatchingKey(checksumFilePath, toolArchiveAsset.GetName()) - if err != nil { - return fmt.Errorf("failed to retrieve checksum from file '%s': %w", checksumFilePath, err) - } - checksumTokens := strings.Fields(checksumLine) - if len(checksumTokens) != 2 { - return fmt.Errorf("the checksum file '%s' is invalid: expected 2 fields, got %d", checksumFilePath, len(checksumTokens)) - } - actual := checksumTokens[0] - - toolExecutable := t.ExecutableName() - if strings.TrimSpace(binarySum) != strings.TrimSpace(actual) { - return fmt.Errorf("warning: Checksum for '%s' does not match the calculated value. Please retry installation. If issue persists, this tool can be downloaded manually at %s", toolExecutable, toolArchiveAsset.GetBrowserDownloadURL()) - } - - // Untar binary bundle - err = utils.Unarchive(toolArchiveFilepath, versionedDir) - if err != nil { - return fmt.Errorf("failed to unarchive the '%s' asset file '%s': %w", toolExecutable, toolArchiveFilepath, err) - } - - // Link as latest - latestFilePath := t.SymlinkPath() - err = os.Remove(latestFilePath) - if err != nil && !os.IsNotExist(err) { - return fmt.Errorf("failed to remove existing '%s' binary at '%s': %w", toolExecutable, base.LatestDir, err) - } - - toolBinaryFilepath := filepath.Join(versionedDir, toolExecutable) - err = os.Symlink(toolBinaryFilepath, latestFilePath) - if err != nil { - return fmt.Errorf("failed to link new '%s' binary to '%s': %w", toolExecutable, base.LatestDir, err) - } - return nil -} diff --git a/pkg/tools/tools.go b/pkg/tools/tools.go index 9289901..c0619ef 100644 --- a/pkg/tools/tools.go +++ b/pkg/tools/tools.go @@ -18,7 +18,6 @@ import ( "github.com/openshift/backplane-tools/pkg/tools/osdctl" "github.com/openshift/backplane-tools/pkg/tools/rosa" "github.com/openshift/backplane-tools/pkg/tools/self" - "github.com/openshift/backplane-tools/pkg/tools/servicelogger" "github.com/openshift/backplane-tools/pkg/tools/yq" "github.com/openshift/backplane-tools/pkg/utils" ) @@ -98,9 +97,6 @@ func initMap() { toolMap[gcloudTool.Name()] = gcloudTool } - serviceloggerTool := servicelogger.New() - toolMap[serviceloggerTool.Name()] = serviceloggerTool - ocmContainerTool := ocmcontainer.New() toolMap[ocmContainerTool.Name()] = ocmContainerTool } From ac1ef25abf8bf874eed97148ed342d809b3f5c1f Mon Sep 17 00:00:00 2001 From: George Adams Date: Tue, 6 Jan 2026 16:31:27 -0500 Subject: [PATCH 2/2] chore: upgrade Go version from 1.21 to 1.24 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update go.mod to Go 1.24 and toolchain to go1.24.0 - Bump golangci-lint to v1.62.2 for Go 1.24 compatibility - Remove deprecated linters (execinquery, exportloopref) - Add copyloopvar linter - Fix linting issue in mirror.go (string concatenation) Fixes #81 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 (1M context) --- .golangci.yaml | 3 +-- Makefile | 2 +- go.mod | 4 ++-- pkg/tools/base/mirror.go | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index 65dc0cc..df3b5ed 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -53,8 +53,7 @@ linters: - errchkjson - errname - errorlint - - execinquery - - exportloopref + - copyloopvar - ginkgolinter - gocheckcompilerdirectives - gochecksumtype diff --git a/Makefile b/Makefile index 81e7649..b120349 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ OS := $(shell go env GOOS | sed 's/[a-z]/\U&/') ARCH := $(shell go env GOARCH) GORELEASER_VERSION="v1.15.0" -GOLANGCI_LINT_VERSION="v1.55.0" +GOLANGCI_LINT_VERSION="v1.62.2" .PHONY: download-goreleaser download-goreleaser: diff --git a/go.mod b/go.mod index 86cd54a..0ce99bb 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,8 @@ module github.com/openshift/backplane-tools -go 1.21 +go 1.24 -toolchain go1.22.1 +toolchain go1.24.0 require ( cloud.google.com/go/storage v1.36.0 diff --git a/pkg/tools/base/mirror.go b/pkg/tools/base/mirror.go index ed12eab..8e6cda4 100644 --- a/pkg/tools/base/mirror.go +++ b/pkg/tools/base/mirror.go @@ -20,7 +20,7 @@ type Mirror struct { // LatestVersion retrieves the version info contained within the provided release.txt file func (t *Mirror) _LatestVersion() (string, error) { // Retrieve latest release info to determine which version we're operating on - releaseSlug := fmt.Sprintf("%s/release.txt", t.BaseSlug) + releaseSlug := t.BaseSlug + "/release.txt" releaseData, err := t.Source.GetFileContents(releaseSlug) if err != nil { return "", fmt.Errorf("failed to retrieve release info from %s: %w", releaseSlug, err)