| package tfinstall |
| |
| import ( |
| "context" |
| "fmt" |
| |
| "github.com/hashicorp/go-checkpoint" |
| ) |
| |
| type LatestVersionOption struct { |
| forceCheckpoint bool |
| installDir string |
| |
| UserAgent string |
| } |
| |
| var _ ExecPathFinder = &LatestVersionOption{} |
| |
| func LatestVersion(installDir string, forceCheckpoint bool) *LatestVersionOption { |
| opt := &LatestVersionOption{ |
| forceCheckpoint: forceCheckpoint, |
| installDir: installDir, |
| } |
| |
| return opt |
| } |
| |
| func (opt *LatestVersionOption) ExecPath(ctx context.Context) (string, error) { |
| v, err := latestVersion(opt.forceCheckpoint) |
| if err != nil { |
| return "", err |
| } |
| |
| return downloadWithVerification(ctx, v, opt.installDir, opt.UserAgent) |
| } |
| |
| func latestVersion(forceCheckpoint bool) (string, error) { |
| resp, err := checkpoint.Check(&checkpoint.CheckParams{ |
| Product: "terraform", |
| Force: forceCheckpoint, |
| }) |
| if err != nil { |
| return "", err |
| } |
| |
| if resp.CurrentVersion == "" { |
| return "", fmt.Errorf("could not determine latest version of terraform using checkpoint: CHECKPOINT_DISABLE may be set") |
| } |
| |
| return resp.CurrentVersion, nil |
| } |