Skip to content

Commit

Permalink
installer/steps.go: Prepare a common interface to write files
Browse files Browse the repository at this point in the history
  • Loading branch information
livingsilver94 committed Nov 21, 2023
1 parent 234ab4a commit b9c12d2
Showing 1 changed file with 121 additions and 0 deletions.
121 changes: 121 additions & 0 deletions installer/steps.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
// SPDX-FileCopyrightText: Fabio Forni <[email protected]>
// SPDX-License-Identifier: MPL-2.0

package installer

import (
"log/slog"
"path/filepath"
"strings"

"github.com/livingsilver94/backee/repo"
"github.com/livingsilver94/backee/service"
)

type StepWriter interface {
Setup(script string) error
InstallPackages(fullCmd []string) error
SymlinkFile(dst service.FilePath, src string) error
CopyFile(dst service.FilePath, src string) error
Finalize(script string) error
}

type Steps struct {
srv *service.Service
log *slog.Logger
wri StepWriter
}

func NewSteps(srv *service.Service, wri StepWriter) Steps {
return Steps{
srv: srv,
log: slog.Default().WithGroup(srv.Name),
wri: wri,
}
}

func (s Steps) Setup() error {
if s.srv.Setup == nil || *s.srv.Setup == "" {
return nil
}
s.log.Info("Running setup script")
return s.wri.Setup(*s.srv.Setup)
}

func (s Steps) InstallPackages() error {
if len(s.srv.Packages) == 0 {
return nil
}
s.log.Info("Installing OS packages")
return s.wri.InstallPackages(append(s.srv.PkgManager, s.srv.Packages...))
}

func (s Steps) LinkFiles(repo repo.Repo, vars repo.Variables) error {
if len(s.srv.Links) == 0 {
return nil
}
s.log.Info("Symlinking files")

lnDir, err := repo.LinkDir(s.srv.Name)
if err != nil {
return err
}
tmpl := NewTemplate(s.srv.Name, vars)
dest := &strings.Builder{}
for srcFile, dstFile := range s.srv.Links {
err := tmpl.ReplaceString(dstFile.Path, dest)
if err != nil {
return err
}
err = s.wri.SymlinkFile(
service.FilePath{Path: dest.String(), Mode: dstFile.Mode},
filepath.Join(lnDir, srcFile))
if err != nil {
return err
}
dest.Reset()
}
return nil
}

func (s Steps) CopyFiles(repo repo.Repo, vars repo.Variables) error {
if len(s.srv.Copies) == 0 {
return nil
}
s.log.Info("Copying files")

lnDir, err := repo.DataDir(s.srv.Name)
if err != nil {
return err
}
tmpl := NewTemplate(s.srv.Name, vars)
dest := &strings.Builder{}
for srcFile, dstFile := range s.srv.Copies {
err := tmpl.ReplaceString(dstFile.Path, dest)
if err != nil {
return err
}
err = s.wri.CopyFile(
service.FilePath{Path: dest.String(), Mode: dstFile.Mode},
filepath.Join(lnDir, srcFile))
if err != nil {
return err
}
dest.Reset()
}
return nil
}

func (s Steps) Finalize(vars repo.Variables) error {
if s.srv.Finalize == nil || *s.srv.Finalize == "" {
return nil
}
s.log.Info("Running finalizer script")
tmpl := NewTemplate(s.srv.Name, vars)
script := &strings.Builder{}
err := tmpl.ReplaceString(*s.srv.Finalize, script)
if err != nil {
return err
}
return runScript(script.String())
}

0 comments on commit b9c12d2

Please sign in to comment.