blob: f01735cac401835199489aa6a45ede7fe1b6b17f [file] [log] [blame]
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
}