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) 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 }