github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/modinstaller/resolved_mod_ref.go (about) 1 package modinstaller 2 3 import ( 4 "github.com/Masterminds/semver/v3" 5 "github.com/go-git/go-git/v5/plumbing" 6 "github.com/turbot/steampipe/pkg/steampipeconfig/modconfig" 7 "github.com/turbot/steampipe/pkg/versionhelpers" 8 ) 9 10 // ResolvedModRef is a struct to represent a resolved mod git reference 11 type ResolvedModRef struct { 12 // the FQN of the mod - also the Git URL of the mod repo 13 Name string 14 // the mod version 15 Version *semver.Version 16 // the vestion constraint 17 Constraint *versionhelpers.Constraints 18 // the Git branch/tag 19 GitReference plumbing.ReferenceName 20 // the file path for local mods 21 FilePath string 22 } 23 24 func NewResolvedModRef(requiredModVersion *modconfig.ModVersionConstraint, version *semver.Version) (*ResolvedModRef, error) { 25 res := &ResolvedModRef{ 26 Name: requiredModVersion.Name, 27 Version: version, 28 Constraint: requiredModVersion.Constraint, 29 // this may be empty strings 30 FilePath: requiredModVersion.FilePath, 31 } 32 if res.FilePath == "" { 33 res.setGitReference() 34 } 35 36 return res, nil 37 } 38 39 func (r *ResolvedModRef) setGitReference() { 40 // TODO handle branches 41 42 // NOTE: use the original version string - this will be the tag name 43 r.GitReference = plumbing.NewTagReferenceName(r.Version.Original()) 44 } 45 46 // DependencyPath returns name in the format <dependency name>@v<dependencyVersion> 47 func (r *ResolvedModRef) DependencyPath() string { 48 return modconfig.BuildModDependencyPath(r.Name, r.Version) 49 }