services/magefiles/mage.go

91 lines
1.7 KiB
Go
Raw Normal View History

//go: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
}