package cluster import ( "errors" "fmt" "os" "git.badhouseplants.net/allanger/shoebill/internal/utils/githelper" "git.badhouseplants.net/allanger/shoebill/pkg/lockfile" "git.badhouseplants.net/allanger/shoebill/pkg/release" ) type Cluster struct { // Public Name string Git string Releases []string Provider string DotSops string // Internal ReleasesObj release.Releases `yaml:"-"` } type Clusters []*Cluster func (c *Cluster) CloneRepo(gh githelper.Githelper, workdir string, dry bool) error { return gh.CloneRepo(workdir, c.Git, dry) } func (c *Cluster) BootstrapRepo(gh githelper.Githelper, workdir string, dry bool) error { // - Create an empty lockfile lockfilePath := fmt.Sprintf("%s/%s", workdir, lockfile.LOCKFILE_NAME) if _, err := os.Stat(lockfilePath); errors.Is(err, os.ErrNotExist) { file, err := os.Create(lockfilePath) if err != nil { return err } if _, err := file.WriteString("[]"); err != nil { return err } srcDir := fmt.Sprintf("%s/src", workdir) if err := os.MkdirAll(srcDir, 0777); err != nil { return err } _, err = os.Create(fmt.Sprintf("%s/.gitkeep", srcDir)) if err != nil { return err } if _, err := gh.AddAllAndCommit(workdir, "Bootstrap the shoebill repo"); err != nil { return err } if !dry { if err := gh.Push(workdir); err != nil { return err } } } if len(c.DotSops) > 0 { dotsopsPath := fmt.Sprintf("%s/.sops.yaml", workdir) if _, err := os.Stat(dotsopsPath); errors.Is(err, os.ErrNotExist) { file, err := os.Create(dotsopsPath) if err != nil { return err } if _, err := file.WriteString(c.DotSops); err != nil { return err } if _, err := gh.AddAllAndCommit(workdir, "Create a sops config file"); err != nil { return err } if !dry { if err := gh.Push(workdir); err != nil { return err } } } } return nil } func (c *Cluster) PopulateReleases(releases release.Releases) { c.ReleasesObj = releases } func (c *Cluster) CreateNewLockfile() error { return nil }