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.
91 lines
1.7 KiB
Go
91 lines
1.7 KiB
Go
//go:build mage
|
|
// +build mage
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/magefile/mage/sh"
|
|
)
|
|
|
|
const (
|
|
configFile string = "./config/services.json"
|
|
rootBuildDir string = "./build"
|
|
templateExtension string = ".gotmpl"
|
|
rootTemplatesDir string = "./templates"
|
|
)
|
|
|
|
// Clean cleans the workspace.
|
|
func Clean() error {
|
|
buildDir := "./build"
|
|
|
|
objects, err := os.ReadDir(buildDir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range objects {
|
|
name := objects[i].Name()
|
|
|
|
if name != ".gitkeep" {
|
|
if err := sh.Rm(buildDir + "/" + name); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Render renders the template files.
|
|
func Render(name string) error {
|
|
cfg, err := newConfig(configFile)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to load the configuration; %v", err)
|
|
}
|
|
|
|
if err := render(cfg, name); err != nil {
|
|
return fmt.Errorf("an error occurred whilst rendering the templates; %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Deploy deploys the services to the Flow Platform.
|
|
func Deploy(name string) error {
|
|
cfg, err := newConfig(configFile)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to load the configuration; %v", err)
|
|
}
|
|
|
|
os.Setenv("DOCKER_HOST", cfg.DockerHost)
|
|
|
|
return sh.Run(
|
|
"docker",
|
|
"compose",
|
|
"--project-directory",
|
|
rootBuildDir+"/compose",
|
|
"up",
|
|
"-d",
|
|
"--build",
|
|
name,
|
|
)
|
|
}
|
|
|
|
// DownloadForgejo downloads the Forgejo binary from Codeberg.
|
|
func DownloadForgejo() error {
|
|
cfg, err := newConfig(configFile)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to load the configuration; %v", err)
|
|
}
|
|
|
|
version := cfg.Forgejo.Version
|
|
|
|
if err := downloadForgejo(version); err != nil {
|
|
return fmt.Errorf("unable to download Forgejo %s; %w", version, err)
|
|
}
|
|
|
|
return nil
|
|
}
|