29 lines
594 B
Go
29 lines
594 B
Go
|
package build
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/hashicorp/go-version"
|
||
|
)
|
||
|
|
||
|
// GoIsInstalled represents a checker of whether Go is installed locally
|
||
|
type GoIsInstalled struct {
|
||
|
RequiredVersion version.Constraints
|
||
|
}
|
||
|
|
||
|
// Check checks whether any Go version is installed locally
|
||
|
func (gii *GoIsInstalled) Check(ctx context.Context) error {
|
||
|
goVersion, err := GetGoVersion(ctx)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
if gii.RequiredVersion != nil && !gii.RequiredVersion.Check(goVersion) {
|
||
|
return fmt.Errorf("go %s required (%s available)",
|
||
|
gii.RequiredVersion, goVersion)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|