mirror of
https://github.com/prometheus-community/postgres_exporter
synced 2025-04-23 23:45:28 +00:00
This commit implements a massive refactor of the repository, and moves the build system over to use Mage (magefile.org) which should allow seamless building across multiple platforms.
95 lines
2.5 KiB
Go
95 lines
2.5 KiB
Go
//+build mage
|
|
|
|
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/magefile/mage/sh"
|
|
)
|
|
|
|
// Runs "go install" for mage. This generates the version info the binary.
|
|
func Install() error {
|
|
ldf, err := flags()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
name := "mage"
|
|
if runtime.GOOS == "windows" {
|
|
name += ".exe"
|
|
}
|
|
gopath, err := sh.Output("go", "env", "GOPATH")
|
|
if err != nil {
|
|
return fmt.Errorf("can't determine GOPATH: %v", err)
|
|
}
|
|
paths := strings.Split(gopath, string([]rune{os.PathListSeparator}))
|
|
bin := filepath.Join(paths[0], "bin")
|
|
// specifically don't mkdirall, if you have an invalid gopath in the first
|
|
// place, that's not on us to fix.
|
|
if err := os.Mkdir(bin, 0700); err != nil && !os.IsExist(err) {
|
|
return fmt.Errorf("failed to create %q: %v", bin, err)
|
|
}
|
|
path := filepath.Join(bin, name)
|
|
|
|
// we use go build here because if someone built with go get, then `go
|
|
// install` turns into a no-op, and `go install -a` fails on people's
|
|
// machines that have go installed in a non-writeable directory (such as
|
|
// normal OS installs in /usr/bin)
|
|
return sh.RunV("go", "build", "-o", path, "-ldflags="+ldf, "github.com/magefile/mage")
|
|
}
|
|
|
|
// Generates a new release. Expects the TAG environment variable to be set,
|
|
// which will create a new tag with that name.
|
|
func Release() (err error) {
|
|
if os.Getenv("TAG") == "" {
|
|
return errors.New("MSG and TAG environment variables are required")
|
|
}
|
|
if err := sh.RunV("git", "tag", "-a", "$TAG"); err != nil {
|
|
return err
|
|
}
|
|
if err := sh.RunV("git", "push", "origin", "$TAG"); err != nil {
|
|
return err
|
|
}
|
|
defer func() {
|
|
if err != nil {
|
|
sh.RunV("git", "tag", "--delete", "$TAG")
|
|
sh.RunV("git", "push", "--delete", "origin", "$TAG")
|
|
}
|
|
}()
|
|
return sh.RunV("goreleaser")
|
|
}
|
|
|
|
// Remove the temporarily generated files from Release.
|
|
func Clean() error {
|
|
return sh.Rm("dist")
|
|
}
|
|
|
|
func flags() (string, error) {
|
|
timestamp := time.Now().Format(time.RFC3339)
|
|
hash := hash()
|
|
tag := tag()
|
|
if tag == "" {
|
|
tag = "dev"
|
|
}
|
|
return fmt.Sprintf(`-X "github.com/magefile/mage/mage.timestamp=%s" -X "github.com/magefile/mage/mage.commitHash=%s" -X "github.com/magefile/mage/mage.gitTag=%s"`, timestamp, hash, tag), nil
|
|
}
|
|
|
|
// tag returns the git tag for the current branch or "" if none.
|
|
func tag() string {
|
|
s, _ := sh.Output("git", "describe", "--tags")
|
|
return s
|
|
}
|
|
|
|
// hash returns the git hash for the current repo or "" if none.
|
|
func hash() string {
|
|
hash, _ := sh.Output("git", "rev-parse", "--short", "HEAD")
|
|
return hash
|
|
}
|