Dan Anglin
3340ddc475
We shall now use Go and Mage to manage the Flow services. The templates have been converted to Go templates, Mage has replaced Make and the helper bash scripts have been rewritten in Go.
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
//go:build mage
|
|
// +build mage
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"text/template"
|
|
)
|
|
|
|
func render(cfg config, component string) error {
|
|
buildDirName := filepath.Join(rootBuildDir, component)
|
|
if err := os.MkdirAll(buildDirName, 0o750); err != nil {
|
|
return fmt.Errorf("unable to make %s; %w", buildDirName, err)
|
|
}
|
|
|
|
templateDirName := filepath.Join(rootTemplatesDir, component)
|
|
|
|
files, err := os.ReadDir(templateDirName)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to read files from %s; %w ", templateDirName, err)
|
|
}
|
|
|
|
for _, f := range files {
|
|
err := func() error {
|
|
templateFilename := f.Name()
|
|
|
|
if f.IsDir() || !strings.HasSuffix(templateFilename, templateExtension) {
|
|
return nil
|
|
}
|
|
|
|
outputFilename := strings.TrimSuffix(templateFilename, templateExtension)
|
|
outputPath := filepath.Join(buildDirName, outputFilename)
|
|
|
|
file, err := os.Create(outputPath)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to create the file '%s'; %w", outputPath, err)
|
|
}
|
|
defer file.Close()
|
|
|
|
templatePath := filepath.Join(templateDirName, templateFilename)
|
|
tmpl, err := template.New(templateFilename).ParseFiles(templatePath)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to create a new template value from '%s'; %w", templateFilename, err)
|
|
}
|
|
|
|
if err = tmpl.Execute(file, cfg); err != nil {
|
|
return fmt.Errorf("unable to render the template to '%s'; %w", outputPath, err)
|
|
}
|
|
|
|
return nil
|
|
}()
|
|
if err != nil {
|
|
return fmt.Errorf("an error occurred whilst rendering the templates for '%s'; %w", component, err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|