alfred-yubico-auth/magefile.go

147 lines
2.8 KiB
Go
Raw Permalink Normal View History

2022-06-01 21:12:36 +00:00
//go:build mage
2020-12-10 16:42:50 +00:00
package main
import (
"fmt"
"io/ioutil"
"path/filepath"
"github.com/deanishe/awgo/util"
"github.com/deanishe/awgo/util/build"
"github.com/magefile/mage/mg"
"github.com/magefile/mage/sh"
)
const (
2020-12-10 16:42:50 +00:00
buildDir = "./build"
distDir = "./dist"
binName = "alfred-yubico-auth"
)
var (
info *build.Info
2020-12-10 16:42:50 +00:00
// Default mage target
Default = Run
// Output binary path
binPath = filepath.Join(buildDir, binName)
2020-12-10 16:42:50 +00:00
)
func InfoWithVersion(v int) build.Option {
return func(i *build.Info) {
i.AlfredMajorVersion = v
}
}
2020-12-10 16:42:50 +00:00
func init() {
var err error
if info, err = build.NewInfo(InfoWithVersion(5)); err != nil {
2020-12-10 16:42:50 +00:00
panic(err)
}
}
2021-01-08 21:45:05 +00:00
// Build workflow.
2020-12-10 16:42:50 +00:00
func Build() error {
mg.Deps(cleanBuild)
fmt.Println("Building...")
2021-01-08 21:45:05 +00:00
if err := sh.RunWith(info.Env(), "go", "build", "-o", binPath, "."); err != nil {
2021-01-08 21:45:05 +00:00
return fmt.Errorf("error building binary %w", err)
2020-12-10 16:42:50 +00:00
}
globs := build.Globs(
"*.png",
"info.plist",
"README.md",
"LICENSE.txt",
"password-prompt.js",
)
return build.SymlinkGlobs(buildDir, globs...)
}
2021-01-08 21:45:05 +00:00
// Run workflow.
2020-12-10 16:42:50 +00:00
func Run() error {
mg.Deps(Build)
fmt.Println("Running...")
2021-01-08 21:45:05 +00:00
return sh.RunWith(info.Env(), binPath)
2020-12-10 16:42:50 +00:00
}
2021-01-08 21:45:05 +00:00
// Dist packages workflow for distribution.
2020-12-10 16:42:50 +00:00
func Dist() error {
mg.SerialDeps(Clean, Build)
2023-04-04 16:35:25 +00:00
fmt.Println("Exporting dist...")
2021-01-08 21:45:05 +00:00
2020-12-10 16:42:50 +00:00
p, err := build.Export(buildDir, distDir)
if err != nil {
return err
}
2021-01-08 21:45:05 +00:00
2020-12-10 16:42:50 +00:00
fmt.Printf("Exported %q\n", p)
2021-01-08 21:45:05 +00:00
2020-12-10 16:42:50 +00:00
return nil
}
2021-01-08 21:45:05 +00:00
// Install symlinked workflow to Alfred.
2020-12-10 16:42:50 +00:00
func Install() error {
mg.Deps(Build)
fmt.Printf("Installing (linking) %q to %q...\n", buildDir, info.InstallDir)
2021-01-08 21:45:05 +00:00
2020-12-10 16:42:50 +00:00
if err := sh.Rm(info.InstallDir); err != nil {
2021-01-08 21:45:05 +00:00
return fmt.Errorf("error cleaning previously installed workflow: %w", err)
2020-12-10 16:42:50 +00:00
}
2021-01-08 21:45:05 +00:00
2020-12-10 16:42:50 +00:00
return build.Symlink(info.InstallDir, buildDir, true)
}
2021-01-08 21:45:05 +00:00
// InstallHooks will install pre-commit hooks.
2020-12-10 16:42:50 +00:00
func InstallHooks() error {
return sh.RunV("pre-commit", "install", "--overwrite", "--install-hooks")
}
2021-01-08 21:45:05 +00:00
// Check will run all pre-commit hooks.
2020-12-10 16:42:50 +00:00
func Check() error {
return sh.RunV("pre-commit", "run", "--all-files")
}
2021-01-08 21:45:05 +00:00
// Clean build files.
2020-12-10 16:42:50 +00:00
func Clean() error {
fmt.Println("Cleaning...")
mg.Deps(cleanBuild, cleanMage)
2021-01-08 21:45:05 +00:00
2020-12-10 16:42:50 +00:00
return nil
}
2021-01-08 21:45:05 +00:00
// DistClean build files and distribution files.
2020-12-10 16:42:50 +00:00
func DistClean() error {
mg.Deps(Clean, cleanDist)
2021-01-08 21:45:05 +00:00
2020-12-10 16:42:50 +00:00
return nil
}
func cleanDir(name string) error {
if !util.PathExists(name) {
return nil
}
infos, err := ioutil.ReadDir(name)
if err != nil {
2021-01-08 21:45:05 +00:00
return fmt.Errorf("cleanDir could not read folder: %w", err)
2020-12-10 16:42:50 +00:00
}
for _, fi := range infos {
if err := sh.Rm(filepath.Join(name, fi.Name())); err != nil {
2021-01-08 21:45:05 +00:00
return fmt.Errorf("cleanDir could not remove file: %w", err)
2020-12-10 16:42:50 +00:00
}
}
2021-01-08 21:45:05 +00:00
2020-12-10 16:42:50 +00:00
return nil
}
func cleanBuild() error { return cleanDir(buildDir) }
func cleanDist() error { return cleanDir(distDir) }
func cleanMage() error { return sh.Run("mage", "-clean") }