diff --git a/.github/workflows/mocks.yml b/.github/workflows/mocks.yml new file mode 100644 index 0000000000..806e1f7a79 --- /dev/null +++ b/.github/workflows/mocks.yml @@ -0,0 +1,32 @@ +--- +name: Check Mock Generation +on: + push: + branches: + - master + pull_request: +jobs: + mocks: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: 1.17 + - name: Intsall go-mock + run: go install github.com/golang/mock/mockgen@latest + - name: Generate mocks + run: make gen-mocks + - name: Check for uncommited files + run: | + export FILES=$(git ls-files -o -m --directory --exclude-standard --no-empty-directory) + export LINES=$(echo "$FILES" | awk 'NF' | wc -l) + if [ $LINES -ne 0 ]; then + echo "Detected files that need to be committed:" + echo "$FILES" | sed -e "s/^/ /" + echo "" + echo "Try running: make gen-mocks" + exit 1 + fi diff --git a/internal/latestrelease/finder.go b/internal/latestrelease/finder.go index 0d56b6d31f..05fbacff89 100644 --- a/internal/latestrelease/finder.go +++ b/internal/latestrelease/finder.go @@ -17,13 +17,14 @@ package latestrelease import ( "context" "strings" + "time" "github.com/Masterminds/semver/v3" "github.com/google/go-github/v42/github" "github.com/mongodb/mongocli/internal/version" ) -//go:generate mockgen -destination=../mocks/mock_release_version.go -package=mocks github.com/mongodb/mongocli/internal/version VersionFinder +//go:generate mockgen -destination=../mocks/mock_release_version.go -package=mocks github.com/mongodb/mongocli/internal/latestrelease VersionFinder type VersionFinder interface { HasNewVersionAvailable(v, tool string) (newVersionAvailable bool, newVersion string, err error) @@ -45,14 +46,25 @@ func versionFromTag(release *github.RepositoryRelease, toolName string) string { return release.GetTagName() } +const ( + mongoCLI = "mongocli" + atlasCLI = "atlascli" +) + func isValidTagForTool(tag, tool string) bool { - if tool == version.MongoCLI { - return !strings.Contains(tag, version.AtlasCLI) + if tool == mongoCLI { + return !strings.Contains(tag, atlasCLI) } return strings.Contains(tag, tool) } -func (s *latestReleaseVersionFinder) searchLatestVersionPerTool(currentVersion *semver.Version, toolName string) (bool, *version.ReleaseInformation, error) { +// ReleaseInformation Release information. +type ReleaseInformation struct { + Version string + PublishedAt time.Time +} + +func (s *latestReleaseVersionFinder) searchLatestVersionPerTool(currentVersion *semver.Version, toolName string) (bool, *ReleaseInformation, error) { release, err := s.r.LatestWithCriteria(minPageSize, isValidTagForTool, toolName) if err != nil || release == nil { @@ -66,7 +78,7 @@ func (s *latestReleaseVersionFinder) searchLatestVersionPerTool(currentVersion * } if currentVersion.Compare(v) < 0 { - return true, &version.ReleaseInformation{ + return true, &ReleaseInformation{ Version: v.Original(), PublishedAt: release.GetPublishedAt().Time, }, nil diff --git a/internal/mocks/mock_tool_latest_version_finder.go b/internal/mocks/mock_tool_latest_version_finder.go deleted file mode 100644 index 45dff9c3fe..0000000000 --- a/internal/mocks/mock_tool_latest_version_finder.go +++ /dev/null @@ -1,47 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/mongodb/mongocli/internal/version (interfaces: LatestVersionFinder) - -// Package mocks is a generated GoMock package. -package mocks - -import ( - io "io" - reflect "reflect" - - gomock "github.com/golang/mock/gomock" -) - -// MockLatestVersionFinder is a mock of LatestVersionFinder interface. -type MockLatestVersionFinder struct { - ctrl *gomock.Controller - recorder *MockLatestVersionFinderMockRecorder -} - -// MockLatestVersionFinderMockRecorder is the mock recorder for MockLatestVersionFinder. -type MockLatestVersionFinderMockRecorder struct { - mock *MockLatestVersionFinder -} - -// NewMockLatestVersionFinder creates a new mock instance. -func NewMockLatestVersionFinder(ctrl *gomock.Controller) *MockLatestVersionFinder { - mock := &MockLatestVersionFinder{ctrl: ctrl} - mock.recorder = &MockLatestVersionFinderMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockLatestVersionFinder) EXPECT() *MockLatestVersionFinderMockRecorder { - return m.recorder -} - -// PrintNewVersionAvailable mocks base method. -func (m *MockLatestVersionFinder) PrintNewVersionAvailable(arg0 io.Writer, arg1, arg2 string) { - m.ctrl.T.Helper() - m.ctrl.Call(m, "PrintNewVersionAvailable", arg0, arg1, arg2) -} - -// PrintNewVersionAvailable indicates an expected call of PrintNewVersionAvailable. -func (mr *MockLatestVersionFinderMockRecorder) PrintNewVersionAvailable(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PrintNewVersionAvailable", reflect.TypeOf((*MockLatestVersionFinder)(nil).PrintNewVersionAvailable), arg0, arg1, arg2) -} diff --git a/internal/version/release_version.go b/internal/version/release_version.go index 05f542cfe5..ef712991ce 100644 --- a/internal/version/release_version.go +++ b/internal/version/release_version.go @@ -55,9 +55,10 @@ func (s *releaseVersionFetcher) LatestWithCriteria(n int, matchCriteria Criteria return true } } - + const owner = "mongodb" + const project = "mongodb-atlas-cli" for { - releases, resp, err := client.Repositories.ListReleases(s.ctx, owner, "mongodb-atlas-cli", opt) + releases, resp, err := client.Repositories.ListReleases(s.ctx, owner, project, opt) if err != nil { return nil, err } diff --git a/internal/version/version.go b/internal/version/version.go index b168b67cd5..97371cee87 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -14,22 +14,8 @@ package version -import "time" - -const ( - MongoCLI = "mongocli" - AtlasCLI = "atlascli" - owner = "mongodb" -) - // Version for CLI. var Version string // GitCommit git sha of the build. var GitCommit string - -// ReleaseInformation Release information. -type ReleaseInformation struct { - Version string - PublishedAt time.Time -}