cadoles-profile/magefile.go

174 lines
3.5 KiB
Go

// +build mage
package main
import (
"fmt"
"io/ioutil"
"os"
"path"
"github.com/magefile/mage/mg"
"github.com/magefile/mage/sh"
"forge.cadoles.com/wpetit/mage/gitea"
"forge.cadoles.com/wpetit/mage/release"
)
var env = map[string]string{
"CGO_ENABLED": "0",
}
// Surveiller les sources avec "modd"
func Watch() error {
return sh.RunV("modd")
}
// Construire le binaire
func Build() error {
if mg.Verbose() {
fmt.Println("Building...")
}
return sh.RunWith(env, "go", "build", "-mod=vendor", "-v", "-o", "bin/server", "./cmd/server")
}
// Installer les dépendances du projet
func InstallDeps() error {
if mg.Verbose() {
fmt.Println("Installing Deps...")
}
if err := sh.RunWith(env, "go", "get", "-v", "./..."); err != nil {
return err
}
goTools := []string{
"golang.org/x/tools/cmd/godoc",
"github.com/cortesi/modd/cmd/modd",
"github.com/golangci/golangci-lint/cmd/golangci-lint",
}
disabledGoModules := map[string]string{
"GO111MODULE": "off",
}
for _, toolProject := range goTools {
if err := sh.RunWith(disabledGoModules, "go", "get", "-u", toolProject); err != nil {
return err
}
}
return nil
}
// Supprimer les dépendances obsolètes
func Tidy() error {
if mg.Verbose() {
fmt.Println("Tidying up dependencies...")
}
return sh.RunWith(env, "go", "mod", "tidy")
}
// Générer les archives de release
func Release() error {
defaultConfig, err := sh.Output("go", "run", "./cmd/server", "-dump-config")
if err != nil {
return err
}
handler := func(env map[string]string, destDir string) error {
cwd, err := os.Getwd()
if err != nil {
return err
}
err = sh.RunWith(
env,
"go", "build",
"-mod=vendor",
"-ldflags", "-s -w",
fmt.Sprintf("-gcflags=-trimpath=\"%s\"", cwd),
fmt.Sprintf("-asmflags=-trimpath=\"%s\"", cwd),
"-o", fmt.Sprintf("%s/bin/server", destDir),
"./cmd/server",
)
if err != nil {
return err
}
configFile := path.Join(destDir, "server.conf")
if err := ioutil.WriteFile(configFile, []byte(defaultConfig), os.ModePerm); err != nil {
return err
}
err = release.MultiCopy(map[string]string{
"LICENSE": path.Join(destDir, "LICENSE"),
"README.md": path.Join(destDir, "README.md"),
"cmd/server/public": path.Join(destDir, "public"),
"cmd/server/templates": path.Join(destDir, "templates"),
})
if err != nil {
return err
}
return nil
}
return release.EachTarget(
handler,
release.WithEnv(env),
release.WithArchs(release.Arch386, release.ArchAMD64),
release.WithProjectName("cadoles-profile"),
)
}
// Générer une nouvelle release et la déployer sur Gitea
func GiteaRelease() error {
mg.Deps(Release)
return gitea.Release(
"wpetit",
"cadoles-profile",
gitea.WithBaseURL("https://forge.cadoles.com"),
gitea.WithAutoUsername(),
gitea.WithAutoPassword(),
gitea.WithAttachmentPatterns(
"release/*.tar.gz",
"release/*.zip",
),
gitea.WithInteractiveTag(),
gitea.WithInteractiveTarget(),
gitea.WithInteractiveTitle(),
)
}
// Nettoyer le cache Go
func CleanGo() error {
return sh.RunWith(nil, "go", "clean", "-testcache")
}
// Exécuter les tests
func Test() error {
mg.Deps(CleanGo)
mg.Deps(Tidy)
return sh.RunWith(nil, "go", "test", "-race", "-v", "./...")
}
// Nettoyer l'espace de travail
func Clean() error {
if mg.Verbose() {
fmt.Println("Cleaning...")
}
dirs := []string{"data", "bin", "release"}
for _, d := range dirs {
if err := os.RemoveAll(d); err != nil {
return err
}
}
return nil
}