diff --git a/pkg/require/package.go b/pkg/require/package.go index e3f565b..95d6f95 100644 --- a/pkg/require/package.go +++ b/pkg/require/package.go @@ -25,10 +25,12 @@ func PackageExists(l log.Logger) rule.Rule[config.RequirePackage] { return func(ctx context.Context, v config.RequirePackage) error { l.Debug("validate package exists:", v.String()) if output, err := exec.LookPath(v.Name); err != nil { - l.Debug(err.Error(), output) + l.Error(v.String()) + l.Error(err.Error(), output) return errors.Errorf(v.Help, v.Version) } else if output == "" { - l.Debugf("missing executable %s", v.Name) + l.Error(v.String()) + l.Errorf("missing executable %s", v.Name) return errors.Errorf(v.Help, v.Version) } return nil @@ -38,26 +40,37 @@ func PackageExists(l log.Logger) rule.Rule[config.RequirePackage] { func PackageVersion(l log.Logger) rule.Rule[config.RequirePackage] { return func(ctx context.Context, v config.RequirePackage) error { l.Debug("validate package version:", v.String()) + + expected, err := semver.NewConstraint(v.Version) + if err != nil { + l.Error(v.String()) + return errors.Wrap(err, "failed to parse version constraint") + } + output, err := exec.CommandContext(ctx, "sh", "-c", v.Command).CombinedOutput() if err != nil { - l.Error("failed to validate package version:", v.String(), ", output:", string(output), ", err:", err.Error()) + l.Error(v.String()) return errors.Wrap(err, string(output)) } actual := strings.TrimPrefix(strings.TrimSpace(string(output)), "v") if actual == "" { - l.Error("failed to retrieve version: ", string(output)) + l.Error(v.String()) return errors.Errorf(v.Help, v.Version) } - if c, err := semver.NewConstraint(v.Version); err != nil { - return errors.Wrapf(err, "failed to create version constraint: %s", v.Version) - } else if version, err := semver.NewVersion(actual); err != nil { - return errors.Wrapf(err, "failed to create version") - } else if !c.Check(version) { + version, err := semver.NewVersion(actual) + if err != nil { + l.Error(v.String()) + return errors.Wrapf(err, "failed to parse version: %s", actual) + } + + if !expected.Check(version) { + l.Error(v.String()) l.Debug("wrong package version:", actual) return errors.Errorf(v.Help, v.Version) } + return nil } }