delete tfinstall packages
diff --git a/cmd/tfinstall/main.go b/cmd/tfinstall/main.go
deleted file mode 100644
index 04ccc4e..0000000
--- a/cmd/tfinstall/main.go
+++ /dev/null
@@ -1,132 +0,0 @@
-package main
-
-import (
-	"context"
-	"flag"
-	"io/ioutil"
-	"log"
-	"os"
-	"strings"
-
-	"github.com/hashicorp/logutils"
-	"github.com/mitchellh/cli"
-
-	"github.com/hashicorp/terraform-exec/tfinstall"
-	"github.com/hashicorp/terraform-exec/tfinstall/gitref"
-)
-
-// TODO: add versioning to this?
-const userAgentAppend = "tfinstall-cli"
-
-func main() {
-	filter := &logutils.LevelFilter{
-		Levels:   []logutils.LogLevel{"DEBUG", "WARN", "ERROR"},
-		MinLevel: logutils.LogLevel("WARN"),
-		Writer:   os.Stderr,
-	}
-	log.SetOutput(filter)
-
-	ui := &cli.ColoredUi{
-		ErrorColor: cli.UiColorRed,
-		WarnColor:  cli.UiColorYellow,
-		Ui: &cli.BasicUi{
-			Reader:      os.Stdin,
-			Writer:      os.Stdout,
-			ErrorWriter: os.Stderr,
-		},
-	}
-
-	exitStatus := run(ui, os.Args[1:])
-
-	os.Exit(exitStatus)
-}
-
-func help() string {
-	return `Usage: tfinstall [--dir=DIR] VERSION-OR-REF
-
-  Downloads, verifies, and installs a official releases of the Terraform binary
-  from releases.hashicorp.com or downloads, compiles, and installs a version of
-  the Terraform binary from the GitHub repository.
-
-  To download an official release, pass "latest" or a valid semantic versioning
-  version string.
-
-  To download and compile a version of the Terraform binary from the GitHub
-  repository pass a ref in the form "refs/...", some examples are shown below.
-
-  If a binary is successfully installed, its path will be printed to stdout.
-
-  Unless --dir is given, the default system temporary directory will be used.
-
-Options:
-  --dir          Directory into which to install the terraform binary. The
-                 directory must exist.
-
-Examples:
-  tfinstall 0.12.28
-  tfinstall latest
-  tfinstall 0.13.0-beta3
-  tfinstall --dir=/home/kmoe/bin 0.12.28
-  tfinstall refs/heads/main
-  tfinstall refs/tags/v0.12.29
-  tfinstall refs/pull/25633/head
-`
-}
-
-func run(ui cli.Ui, args []string) int {
-	ctx := context.Background()
-
-	args = os.Args[1:]
-	flags := flag.NewFlagSet("", flag.ExitOnError)
-	var tfDir string
-	flags.StringVar(&tfDir, "dir", "", "Local directory into which to install terraform")
-
-	err := flags.Parse(args)
-	if err != nil {
-		ui.Error(err.Error())
-		return 1
-	}
-
-	if flags.NArg() != 1 {
-		ui.Error("Please specify VERSION-OR-REF")
-		ui.Output(help())
-		return 127
-	}
-
-	tfVersion := flags.Args()[0]
-
-	if tfDir == "" {
-		tfDir, err = ioutil.TempDir("", "tfinstall")
-		if err != nil {
-			ui.Error(err.Error())
-			return 1
-		}
-	}
-
-	var findArgs []tfinstall.ExecPathFinder
-
-	switch {
-	case tfVersion == "latest":
-		finder := tfinstall.LatestVersion(tfDir, false)
-		finder.UserAgent = userAgentAppend
-		findArgs = append(findArgs, finder)
-	case strings.HasPrefix(tfVersion, "refs/"):
-		findArgs = append(findArgs, gitref.Install(tfVersion, "", tfDir))
-	default:
-		if strings.HasPrefix(tfVersion, "v") {
-			tfVersion = tfVersion[1:]
-		}
-		finder := tfinstall.ExactVersion(tfVersion, tfDir)
-		finder.UserAgent = userAgentAppend
-		findArgs = append(findArgs, finder)
-	}
-
-	tfPath, err := tfinstall.Find(ctx, findArgs...)
-	if err != nil {
-		ui.Error(err.Error())
-		return 1
-	}
-
-	ui.Output(tfPath)
-	return 0
-}
diff --git a/tfinstall/doc.go b/tfinstall/doc.go
deleted file mode 100644
index e48ea41..0000000
--- a/tfinstall/doc.go
+++ /dev/null
@@ -1,4 +0,0 @@
-// Package tfinstall offers multiple strategies for finding and/or installing
-// a binary version of Terraform. Some of the strategies can also authenticate
-// the source of the binary as an official HashiCorp release.
-package tfinstall
diff --git a/tfinstall/download.go b/tfinstall/download.go
deleted file mode 100644
index 69c51f0..0000000
--- a/tfinstall/download.go
+++ /dev/null
@@ -1,125 +0,0 @@
-package tfinstall
-
-import (
-	"context"
-	"fmt"
-	"io/ioutil"
-	"os"
-	"path/filepath"
-	"runtime"
-	"strings"
-
-	"github.com/hashicorp/go-getter"
-	"golang.org/x/crypto/openpgp"
-)
-
-func ensureInstallDir(installDir string) (string, error) {
-	if installDir == "" {
-		return ioutil.TempDir("", "tfexec")
-	}
-
-	if _, err := os.Stat(installDir); err != nil {
-		return "", fmt.Errorf("could not access directory %s for installing Terraform: %w", installDir, err)
-	}
-
-	return installDir, nil
-}
-
-func downloadWithVerification(ctx context.Context, tfVersion string, installDir string, appendUserAgent string) (string, error) {
-	osName := runtime.GOOS
-	archName := runtime.GOARCH
-
-	// setup: ensure we have a place to put our downloaded terraform binary
-	tfDir, err := ensureInstallDir(installDir)
-	if err != nil {
-		return "", err
-	}
-
-	httpGetter := &getter.HttpGetter{
-		Netrc:  true,
-		Client: newHTTPClient(appendUserAgent),
-	}
-	client := getter.Client{
-		Ctx: ctx,
-		Getters: map[string]getter.Getter{
-			"https": httpGetter,
-		},
-	}
-	client.Mode = getter.ClientModeAny
-
-	// firstly, download and verify the signature of the checksum file
-
-	sumsTmpDir, err := ioutil.TempDir("", "tfinstall")
-	if err != nil {
-		return "", err
-	}
-	defer os.RemoveAll(sumsTmpDir)
-
-	sumsFilename := "terraform_" + tfVersion + "_SHA256SUMS"
-	sumsSigFilename := sumsFilename + ".72D7468F.sig"
-
-	sumsURL := fmt.Sprintf("%s/%s/%s", baseURL, tfVersion, sumsFilename)
-	sumsSigURL := fmt.Sprintf("%s/%s/%s", baseURL, tfVersion, sumsSigFilename)
-
-	client.Src = sumsURL
-	client.Dst = sumsTmpDir
-	err = client.Get()
-	if err != nil {
-		return "", fmt.Errorf("error fetching checksums at URL %s: %w", sumsURL, err)
-	}
-
-	client.Src = sumsSigURL
-	err = client.Get()
-	if err != nil {
-		return "", fmt.Errorf("error fetching checksums signature: %s", err)
-	}
-
-	sumsPath := filepath.Join(sumsTmpDir, sumsFilename)
-	sumsSigPath := filepath.Join(sumsTmpDir, sumsSigFilename)
-
-	err = verifySumsSignature(sumsPath, sumsSigPath)
-	if err != nil {
-		return "", err
-	}
-
-	// secondly, download Terraform itself, verifying the checksum
-	url := tfURL(tfVersion, osName, archName)
-	client.Src = url
-	client.Dst = tfDir
-	client.Mode = getter.ClientModeDir
-	err = client.Get()
-	if err != nil {
-		return "", err
-	}
-
-	return filepath.Join(tfDir, "terraform"), nil
-}
-
-// verifySumsSignature downloads SHA256SUMS and SHA256SUMS.sig and verifies
-// the signature using the HashiCorp public key.
-func verifySumsSignature(sumsPath, sumsSigPath string) error {
-	el, err := openpgp.ReadArmoredKeyRing(strings.NewReader(hashicorpPublicKey))
-	if err != nil {
-		return err
-	}
-	data, err := os.Open(sumsPath)
-	if err != nil {
-		return err
-	}
-	sig, err := os.Open(sumsSigPath)
-	if err != nil {
-		return err
-	}
-	_, err = openpgp.CheckDetachedSignature(el, data, sig)
-
-	return err
-}
-
-func tfURL(tfVersion, osName, archName string) string {
-	sumsFilename := "terraform_" + tfVersion + "_SHA256SUMS"
-	sumsURL := fmt.Sprintf("%s/%s/%s", baseURL, tfVersion, sumsFilename)
-	return fmt.Sprintf(
-		"%s/%s/terraform_%s_%s_%s.zip?checksum=file:%s",
-		baseURL, tfVersion, tfVersion, osName, archName, sumsURL,
-	)
-}
diff --git a/tfinstall/exact_path.go b/tfinstall/exact_path.go
deleted file mode 100644
index 010cc50..0000000
--- a/tfinstall/exact_path.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package tfinstall
-
-import (
-	"context"
-	"os"
-)
-
-type ExactPathOption struct {
-	execPath string
-}
-
-var _ ExecPathFinder = &ExactPathOption{}
-
-func ExactPath(execPath string) *ExactPathOption {
-	opt := &ExactPathOption{
-		execPath: execPath,
-	}
-	return opt
-}
-
-func (opt *ExactPathOption) ExecPath(context.Context) (string, error) {
-	if _, err := os.Stat(opt.execPath); err != nil {
-		// fall through to the next strategy if the local path does not exist
-		return "", nil
-	}
-	return opt.execPath, nil
-}
diff --git a/tfinstall/exact_path_test.go b/tfinstall/exact_path_test.go
deleted file mode 100644
index 2c037cd..0000000
--- a/tfinstall/exact_path_test.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package tfinstall
-
-import (
-	"context"
-	"fmt"
-	"os/exec"
-	"strings"
-	"testing"
-)
-
-// test that Find returns an appropriate error when given an exact path
-// which exists, but is not a terraform executable
-func TestExactPath(t *testing.T) {
-	// we just want the path to a local executable that definitely exists
-	execPath, err := exec.LookPath("go")
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	_, err = Find(context.Background(), ExactPath(execPath))
-	if err == nil {
-		t.Fatalf("expected Find() to fail when given ExactPath(%s), but it did not", execPath)
-	}
-
-	expected := fmt.Sprintf("executable found at path %s is not terraform", execPath)
-	if !strings.HasPrefix(err.Error(), expected) {
-		t.Fatalf("expected Find() to return %s, but got %s", expected, err)
-	}
-}
diff --git a/tfinstall/exact_version.go b/tfinstall/exact_version.go
deleted file mode 100644
index afcb9ac..0000000
--- a/tfinstall/exact_version.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package tfinstall
-
-import (
-	"context"
-
-	"github.com/hashicorp/go-version"
-)
-
-type ExactVersionOption struct {
-	tfVersion  string
-	installDir string
-
-	UserAgent string
-}
-
-var _ ExecPathFinder = &ExactVersionOption{}
-
-func ExactVersion(tfVersion string, installDir string) *ExactVersionOption {
-	opt := &ExactVersionOption{
-		tfVersion:  tfVersion,
-		installDir: installDir,
-	}
-
-	return opt
-}
-
-func (opt *ExactVersionOption) ExecPath(ctx context.Context) (string, error) {
-	// validate version
-	_, err := version.NewVersion(opt.tfVersion)
-	if err != nil {
-		return "", err
-	}
-
-	return downloadWithVerification(ctx, opt.tfVersion, opt.installDir, opt.UserAgent)
-}
diff --git a/tfinstall/exact_version_test.go b/tfinstall/exact_version_test.go
deleted file mode 100644
index d5c7db3..0000000
--- a/tfinstall/exact_version_test.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package tfinstall
-
-import (
-	"context"
-	"io/ioutil"
-	"os"
-	"os/exec"
-	"strings"
-	"testing"
-)
-
-// downloads terraform 0.12.26 from the live releases site
-func TestFindExactVersion(t *testing.T) {
-	tmpDir, err := ioutil.TempDir("", "tfinstall-test")
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer os.RemoveAll(tmpDir)
-
-	tfpath, err := Find(context.Background(), ExactVersion("0.12.26", tmpDir))
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	// run "terraform version" to check we've downloaded a terraform 0.12.26 binary
-	cmd := exec.Command(tfpath, "version")
-
-	out, err := cmd.Output()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	expected := "Terraform v0.12.26"
-	actual := string(out)
-	if !strings.HasPrefix(actual, expected) {
-		t.Fatalf("ran terraform version, expected %s, but got %s", expected, actual)
-	}
-}
-
-// downloads terraform 0.13.0-beta1 from the live releases site
-func TestFindExactVersionPrerelease(t *testing.T) {
-	tmpDir, err := ioutil.TempDir("", "tfinstall-test")
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer os.RemoveAll(tmpDir)
-
-	tfpath, err := Find(context.Background(), ExactVersion("0.13.0-beta1", tmpDir))
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	// run "terraform version" to check we've downloaded a terraform 0.12.26 binary
-	cmd := exec.Command(tfpath, "version")
-
-	out, err := cmd.Output()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	expected := "Terraform v0.13.0-beta1"
-	actual := string(out)
-	if !strings.HasPrefix(actual, expected) {
-		t.Fatalf("ran terraform version, expected %s, but got %s", expected, actual)
-	}
-}
diff --git a/tfinstall/gitref/git_ref.go b/tfinstall/gitref/git_ref.go
deleted file mode 100644
index d738b71..0000000
--- a/tfinstall/gitref/git_ref.go
+++ /dev/null
@@ -1,103 +0,0 @@
-package gitref
-
-import (
-	"context"
-	"fmt"
-	"io/ioutil"
-	"log"
-	"os"
-	"os/exec"
-	"path/filepath"
-	"runtime"
-
-	"github.com/go-git/go-git/v5"
-	"github.com/go-git/go-git/v5/plumbing"
-)
-
-type Option struct {
-	installDir string
-	repoURL    string
-	ref        string
-}
-
-func Install(ref, repo, installDir string) *Option {
-	return &Option{
-		installDir: installDir,
-		repoURL:    repo,
-		ref:        ref,
-	}
-}
-
-func (opt *Option) ExecPath(ctx context.Context) (string, error) {
-	installDir, err := ensureInstallDir(opt.installDir)
-	if err != nil {
-		return "", err
-	}
-
-	ref := plumbing.ReferenceName(opt.ref)
-	if opt.ref == "" {
-		ref = plumbing.ReferenceName("refs/heads/main")
-	}
-
-	repoURL := opt.repoURL
-	if repoURL == "" {
-		repoURL = "https://github.com/hashicorp/terraform.git"
-	}
-
-	_, err = git.PlainClone(installDir, false, &git.CloneOptions{
-		URL:           repoURL,
-		ReferenceName: ref,
-
-		Depth: 1,
-		Tags:  git.NoTags,
-	})
-	if err != nil {
-		return "", fmt.Errorf("unable to clone %q: %w", repoURL, err)
-	}
-
-	var binName string
-	{
-		// TODO: maybe there is a better way to make sure this filename is available?
-		// I guess we could locate it in a different dir, or nest the git underneath
-		// the root tmp dir, etc.
-		binPattern := "terraform"
-		if runtime.GOOS == "windows" {
-			binPattern = "terraform*.exe"
-		}
-		binFile, err := ioutil.TempFile(installDir, binPattern)
-		if err != nil {
-			return "", fmt.Errorf("unable to create bin file: %w", err)
-		}
-		binName = binFile.Name()
-		binFile.Close()
-	}
-
-	goArgs := []string{"build", "-o", binName}
-
-	vendorDir := filepath.Join(installDir, "vendor")
-	if fi, err := os.Stat(vendorDir); err == nil && fi.IsDir() {
-		goArgs = append(goArgs, "-mod", "vendor")
-	}
-
-	cmd := exec.CommandContext(ctx, "go", goArgs...)
-	cmd.Dir = installDir
-	out, err := cmd.CombinedOutput()
-	log.Print(string(out))
-	if err != nil {
-		return "", fmt.Errorf("unable to build Terraform: %w\n%s", err, out)
-	}
-
-	return binName, nil
-}
-
-func ensureInstallDir(installDir string) (string, error) {
-	if installDir == "" {
-		return ioutil.TempDir("", "tfexec")
-	}
-
-	if _, err := os.Stat(installDir); err != nil {
-		return "", fmt.Errorf("could not access directory %s for installing Terraform: %w", installDir, err)
-	}
-
-	return installDir, nil
-}
diff --git a/tfinstall/gitref/git_ref_test.go b/tfinstall/gitref/git_ref_test.go
deleted file mode 100644
index b116da5..0000000
--- a/tfinstall/gitref/git_ref_test.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package gitref_test
-
-import (
-	"context"
-	"io/ioutil"
-	"os"
-	"os/exec"
-	"strings"
-	"testing"
-
-	"github.com/hashicorp/terraform-exec/tfinstall"
-	"github.com/hashicorp/terraform-exec/tfinstall/gitref"
-)
-
-// ensure the option satisfies the interface
-var _ tfinstall.ExecPathFinder = &gitref.Option{}
-
-func TestGitRef(t *testing.T) {
-	if testing.Short() {
-		t.Skip("skipping git ref tests for short run")
-	}
-
-	cmd := exec.Command("go", "version")
-	out, err := cmd.CombinedOutput()
-	if err != nil {
-		t.Fatalf("error with Go installation: %s\n%s", err, string(out))
-	}
-	t.Logf("go version\n%s", string(out))
-
-	for n, c := range map[string]struct {
-		expectedVersion string
-		ref             string
-	}{
-		"branch v0.12": {"Terraform v0.12.", "refs/heads/v0.12"},
-		"tag v0.12.29": {"Terraform v0.12.29", "refs/tags/v0.12.29"},
-		// "commit 83630a7": {"Terraform v0.12.29", "83630a7003fb8b868a3bf940798326634c3c6acc"},
-		"empty": {"Terraform v1.", ""}, // should pull main, which is currently v1 dev
-	} {
-		c := c
-		t.Run(n, func(t *testing.T) {
-			// these are really long running due to the compilation, run them in parallel
-			t.Parallel()
-
-			ctx := context.Background()
-
-			// hacking this tmpdir to local dir due to circle perms, should be env var
-			tmpDir, err := ioutil.TempDir("", "tfinstall-test")
-			if err != nil {
-				t.Fatal(err)
-			}
-			t.Cleanup(func() {
-				os.RemoveAll(tmpDir)
-			})
-
-			t.Logf("finding / building ref %q...", c.ref)
-			tfpath, err := tfinstall.Find(ctx, gitref.Install(c.ref, "", tmpDir))
-			if err != nil {
-				t.Fatalf("%T %s", err, err)
-			}
-
-			t.Logf("testing version cmd...")
-			cmd := exec.Command(tfpath, "version")
-
-			out, err := cmd.Output()
-			if err != nil {
-				t.Fatalf("%s\n\n%s", err, out)
-			}
-
-			actual := string(out)
-			if !strings.Contains(actual, c.expectedVersion) {
-				t.Fatalf("ran terraform version, expected %s, but got %s", c.expectedVersion, actual)
-			}
-		})
-	}
-}
diff --git a/tfinstall/http.go b/tfinstall/http.go
deleted file mode 100644
index 70d95a6..0000000
--- a/tfinstall/http.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package tfinstall
-
-import (
-	"fmt"
-	"net/http"
-	"os"
-	"strings"
-
-	cleanhttp "github.com/hashicorp/go-cleanhttp"
-
-	intversion "github.com/hashicorp/terraform-exec/internal/version"
-)
-
-type userAgentRoundTripper struct {
-	inner     http.RoundTripper
-	userAgent string
-}
-
-func (rt *userAgentRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
-	if _, ok := req.Header["User-Agent"]; !ok {
-		req.Header.Set("User-Agent", rt.userAgent)
-	}
-	return rt.inner.RoundTrip(req)
-}
-
-func newHTTPClient(appendUA string) *http.Client {
-	appendUA = strings.TrimSpace(appendUA + " " + os.Getenv("TF_APPEND_USER_AGENT"))
-	userAgent := strings.TrimSpace(fmt.Sprintf("HashiCorp-tfinstall/%s %s", intversion.ModuleVersion(), appendUA))
-
-	cli := cleanhttp.DefaultPooledClient()
-	cli.Transport = &userAgentRoundTripper{
-		userAgent: userAgent,
-		inner:     cli.Transport,
-	}
-
-	return cli
-}
diff --git a/tfinstall/latest_version.go b/tfinstall/latest_version.go
deleted file mode 100644
index f01735c..0000000
--- a/tfinstall/latest_version.go
+++ /dev/null
@@ -1,51 +0,0 @@
-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
-}
diff --git a/tfinstall/latest_version_test.go b/tfinstall/latest_version_test.go
deleted file mode 100644
index 1467090..0000000
--- a/tfinstall/latest_version_test.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package tfinstall
-
-import (
-	"context"
-	"encoding/json"
-	"io/ioutil"
-	"os"
-	"os/exec"
-	"testing"
-
-	"github.com/hashicorp/go-version"
-)
-
-// latest version calculation itself is handled by checkpoint, so the test can be straightforward -
-// just test that we've managed to download a version of terraform later than 0.12.27
-func TestLatestVersion(t *testing.T) {
-	lowerBound := "0.12.27"
-
-	tmpDir, err := ioutil.TempDir("", "tfinstall-test")
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer os.RemoveAll(tmpDir)
-
-	tfpath, err := Find(context.Background(), LatestVersion(tmpDir, false))
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	cmd := exec.Command(tfpath, "version", "-json")
-
-	out, err := cmd.Output()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	lowerBoundVersion, err := version.NewVersion("0.15.0")
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	type versionOutput struct {
-		TerraformVersion string `json:"terraform_version"`
-	}
-	vOut := versionOutput{}
-	err = json.Unmarshal(out, &vOut)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	actualVersion, err := version.NewVersion(vOut.TerraformVersion)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	if actualVersion.LessThan(lowerBoundVersion) {
-		t.Fatalf("ran terraform version, expected version to be greater than %s, but got %s", lowerBound, out)
-	}
-}
diff --git a/tfinstall/look_path.go b/tfinstall/look_path.go
deleted file mode 100644
index 2ebec09..0000000
--- a/tfinstall/look_path.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package tfinstall
-
-import (
-	"context"
-	"log"
-	"os/exec"
-)
-
-type LookPathOption struct {
-}
-
-var _ ExecPathFinder = &LookPathOption{}
-
-func LookPath() *LookPathOption {
-	opt := &LookPathOption{}
-
-	return opt
-}
-
-func (opt *LookPathOption) ExecPath(context.Context) (string, error) {
-	p, err := exec.LookPath("terraform")
-	if err != nil {
-		if notFoundErr, ok := err.(*exec.Error); ok && notFoundErr.Err == exec.ErrNotFound {
-			log.Printf("[WARN] could not locate a terraform executable on system path; continuing")
-			return "", nil
-		}
-		return "", err
-	}
-	return p, nil
-}
diff --git a/tfinstall/pubkey.go b/tfinstall/pubkey.go
deleted file mode 100644
index c545595..0000000
--- a/tfinstall/pubkey.go
+++ /dev/null
@@ -1,124 +0,0 @@
-package tfinstall
-
-const hashicorpPublicKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----
-
-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
-ZF5q4h4I33PSGDdSvGXn9UMY5Isjpg==
-=7pIB
------END PGP PUBLIC KEY BLOCK-----`
diff --git a/tfinstall/tfinstall.go b/tfinstall/tfinstall.go
deleted file mode 100644
index 3dd6963..0000000
--- a/tfinstall/tfinstall.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package tfinstall
-
-import (
-	"context"
-	"fmt"
-	"os/exec"
-	"strings"
-)
-
-const baseURL = "https://releases.hashicorp.com/terraform"
-
-type ExecPathFinder interface {
-	ExecPath(context.Context) (string, error)
-}
-
-func Find(ctx context.Context, opts ...ExecPathFinder) (string, error) {
-	var terraformPath string
-
-	// go through the options in order
-	// until a valid terraform executable is found
-	for _, opt := range opts {
-		p, err := opt.ExecPath(ctx)
-		if err != nil {
-			return "", fmt.Errorf("unexpected error: %s", err)
-		}
-
-		if p == "" {
-			// strategy did not locate an executable - fall through to next
-			continue
-		} else {
-			terraformPath = p
-			break
-		}
-	}
-
-	if terraformPath == "" {
-		return "", fmt.Errorf("could not find terraform executable")
-	}
-
-	err := runTerraformVersion(terraformPath)
-	if err != nil {
-		return "", fmt.Errorf("executable found at path %s is not terraform: %s", terraformPath, err)
-	}
-
-	return terraformPath, nil
-}
-
-func runTerraformVersion(execPath string) error {
-	cmd := exec.Command(execPath, "version")
-
-	out, err := cmd.Output()
-	if err != nil {
-		return err
-	}
-
-	// very basic sanity check
-	if !strings.Contains(string(out), "Terraform v") {
-		return fmt.Errorf("located executable at %s, but output of `terraform version` was:\n%s", execPath, out)
-	}
-
-	return nil
-}
diff --git a/tfinstall/tfinstall_test.go b/tfinstall/tfinstall_test.go
deleted file mode 100644
index 3b34225..0000000
--- a/tfinstall/tfinstall_test.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package tfinstall
-
-import (
-	"context"
-	"io/ioutil"
-	"os"
-	"os/exec"
-	"strings"
-	"testing"
-)
-
-// test that Find falls back to the next working strategy when the file at
-// ExactPath does not exist
-func TestFindFallback(t *testing.T) {
-	tmpDir, err := ioutil.TempDir("", "tfinstall-test")
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer os.RemoveAll(tmpDir)
-
-	tfpath, err := Find(context.Background(), ExactPath("/hopefully/completely/nonexistent/path"), ExactVersion("0.12.26", tmpDir))
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	// run "terraform version" to check we've downloaded a terraform 0.12.26 binary
-	cmd := exec.Command(tfpath, "version")
-
-	out, err := cmd.Output()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	expected := "Terraform v0.12.26"
-	actual := string(out)
-	if !strings.HasPrefix(actual, expected) {
-		t.Fatalf("ran terraform version, expected %s, but got %s", expected, actual)
-	}
-}