func (s *initScaffolder) Scaffold() error {
	fmt.Println("Writing scaffolds for you to edit...")
	scaffold := machinery.NewScaffold(s.fs,
		machinery.WithDirectoryPermissions(0755),
		machinery.WithFilePermissions(0644),
		machinery.WithConfig(s.config),
	)
	bpFile := &hack.Boilerplate{
		License: s.license,
		Owner:   s.owner,
	}
	bpFile.Path = s.boilerplatePath
	if err := scaffold.Execute(bpFile); err != nil {
		return err
	}
	boilerplate, err := afero.ReadFile(s.fs.FS, s.boilerplatePath)
	if err != nil {
		return err
	}
	scaffold = machinery.NewScaffold(s.fs,
		machinery.WithConfig(s.config),
		machinery.WithBoilerplate(string(boilerplate)),
	)
	err = createDirectories([]string{chartutil.HelmChartsDir, "api", "controllers"})
	if err != nil {
		return err
	}
	err = scaffold.Execute(
		&templates.Main{},
		&templates.GoMod{ControllerRuntimeVersion: ControllerRuntimeVersion},
		&templates.GitIgnore{},
		&templates.Watches{},
		&rbac.ManagerRole{},
		&templates.Makefile{
			Image:                    imageName,
			KustomizeVersion:         KustomizeVersion,
			HybridOperatorVersion:    hybridOperatorVersion,
			ControllerToolsVersion:   ControllerToolsVersion,
			ControllerRuntimeVersion: ControllerRuntimeVersion,
		},
		&templates.Dockerfile{},
		&templates.DockerIgnore{},
	)
	if err != nil {
		return err
	}
	err = util.RunCmd("Get helm-operator-plugins", "go", "get",
		"github.com/operator-framework/helm-operator-plugins@"+helmPluginVersion)
	if err != nil {
		return err
	}
	return nil
}
Scaffold implements scaffolder
package scaffolds
import (
	"fmt"
	"os"
	"github.com/operator-framework/helm-operator-plugins/pkg/plugins/helm/v1/chartutil"
	"github.com/operator-framework/helm-operator-plugins/pkg/plugins/hybrid/v1alpha/scaffolds/internal/templates"
	"github.com/operator-framework/helm-operator-plugins/pkg/plugins/hybrid/v1alpha/scaffolds/internal/templates/hack"
	"github.com/operator-framework/helm-operator-plugins/pkg/plugins/hybrid/v1alpha/scaffolds/internal/templates/rbac"
	"github.com/spf13/afero"
	"sigs.k8s.io/kubebuilder/v3/pkg/config"
	"sigs.k8s.io/kubebuilder/v3/pkg/machinery"
	"sigs.k8s.io/kubebuilder/v3/pkg/plugin/util"
	"sigs.k8s.io/kubebuilder/v3/pkg/plugins"
)
const (
	ControllerRuntimeVersion = "v0.10.0"
	ControllerToolsVersion = "v0.6.2"
	KustomizeVersion = "v3.8.7"
	imageName = "controller:latest"
	hybridOperatorVersion = "0.0.8"
	helmPluginVersion = "v0.0.8"
)
var _ plugins.Scaffolder = &initScaffolder{}
type initScaffolder struct {
	fs machinery.Filesystem
	config          config.Config
	boilerplatePath string
	license         string
	owner           string
}
func NewInitScaffolder(config config.Config, license, owner string) plugins.Scaffolder {
	return &initScaffolder{
		config:          config,
		boilerplatePath: hack.DefaultBoilerplatePath,
		license:         license,
		owner:           owner,
	}
}
func (s *initScaffolder) InjectFS(fs machinery.Filesystem) {
	s.fs = fs
}