// Copyright IBM Corp. 2014, 2026 // SPDX-License-Identifier: BUSL-1.1 package pluginshared import ( "context" "fmt" "net/url" svchost "github.com/hashicorp/terraform-svchost" ) // StacksBinaryManager downloads, caches, and returns information about the // terraform-stacksplugin binary downloaded from the specified backend. type StacksBinaryManager struct { BinaryManager } // NewStacksBinaryManager initializes a new BinaryManager to broker data between the // specified directory location containing stacksplugin package data and a // HCP Terraform backend URL. func NewStacksBinaryManager(ctx context.Context, stacksPluginDataDir, overridePath string, serviceURL *url.URL, goos, arch string) (*StacksBinaryManager, error) { client, err := NewStacksPluginClient(ctx, serviceURL) if err != nil { return nil, fmt.Errorf("could not initialize stacksplugin version manager: %w", err) } // read from the data dir to find the cached stacksplugin binary location return &StacksBinaryManager{ BinaryManager{ pluginDataDir: stacksPluginDataDir, overridePath: overridePath, host: svchost.Hostname(serviceURL.Host), client: client, binaryName: "tfstacks", pluginName: "stacksplugin", goos: goos, arch: arch, ctx: ctx, }}, nil }