services/magefiles/mage.go
Dan Anglin 3340ddc475
build: automation with Go and Mage
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.
2023-02-12 20:59:55 +00:00

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
}