insert buildinfo at compile time
This commit is contained in:
parent
402b269bf4
commit
f91780d6ce
@ -35,10 +35,7 @@ func Compile(cfg *CompileConfig, ch chan<- *CompileReport, wg *sync.WaitGroup) {
|
|||||||
|
|
||||||
ch <- &CompileReport{Config: cfg, State: StateCompiling}
|
ch <- &CompileReport{Config: cfg, State: StateCompiling}
|
||||||
|
|
||||||
args := []string{"build", "-o", filePath}
|
args := []string{"build", "-o", filePath, BuildLdFlags(cfg.OS, cfg.Arch)}
|
||||||
if !*KeepDebugFlags {
|
|
||||||
args = append(args, "-ldflags=-s -w")
|
|
||||||
}
|
|
||||||
|
|
||||||
compileCmd := exec.Command("go", args...)
|
compileCmd := exec.Command("go", args...)
|
||||||
compileCmd.Dir = ModulePath
|
compileCmd.Dir = ModulePath
|
||||||
|
1
go.mod
1
go.mod
@ -3,6 +3,7 @@ module git.milar.in/milarin/gocc
|
|||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
git.milar.in/milarin/buildinfo v1.0.0
|
||||||
git.milar.in/milarin/channel v0.0.7
|
git.milar.in/milarin/channel v0.0.7
|
||||||
git.milar.in/milarin/configfile v1.0.2
|
git.milar.in/milarin/configfile v1.0.2
|
||||||
git.milar.in/milarin/gmath v0.0.1
|
git.milar.in/milarin/gmath v0.0.1
|
||||||
|
2
go.sum
2
go.sum
@ -1,3 +1,5 @@
|
|||||||
|
git.milar.in/milarin/buildinfo v1.0.0 h1:tw98GupUYl/0a/3aPGuezhE4wseycOSsbcLp70hy60U=
|
||||||
|
git.milar.in/milarin/buildinfo v1.0.0/go.mod h1:arI9ZoENOgcZcanv25k9y4dKDUhPp0buJrlVerGruas=
|
||||||
git.milar.in/milarin/channel v0.0.7 h1:cVKtwgH/EE7U+XTHcoFCClJ4LR349KanzjX9xKwRcNg=
|
git.milar.in/milarin/channel v0.0.7 h1:cVKtwgH/EE7U+XTHcoFCClJ4LR349KanzjX9xKwRcNg=
|
||||||
git.milar.in/milarin/channel v0.0.7/go.mod h1:We83LTI8S7u7II3pD+A2ChCDWJfCkcBUCUqii9HjTtM=
|
git.milar.in/milarin/channel v0.0.7/go.mod h1:We83LTI8S7u7II3pD+A2ChCDWJfCkcBUCUqii9HjTtM=
|
||||||
git.milar.in/milarin/configfile v1.0.2 h1:QgZVSVDsFm3HK7PEg6a2ANeZxqo0JlIooyyJv8VaCNI=
|
git.milar.in/milarin/configfile v1.0.2 h1:QgZVSVDsFm3HK7PEg6a2ANeZxqo0JlIooyyJv8VaCNI=
|
||||||
|
3
init.go
3
init.go
@ -8,6 +8,7 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
|
"git.milar.in/milarin/buildinfo"
|
||||||
"git.milar.in/milarin/configfile"
|
"git.milar.in/milarin/configfile"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -16,7 +17,7 @@ func Init() {
|
|||||||
var err error
|
var err error
|
||||||
|
|
||||||
if *ShowVersion {
|
if *ShowVersion {
|
||||||
fmt.Printf("gocc %s\n", VERSION)
|
buildinfo.Print(buildinfo.Options{})
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
main.go
11
main.go
@ -16,15 +16,19 @@ import (
|
|||||||
"git.milar.in/milarin/channel"
|
"git.milar.in/milarin/channel"
|
||||||
)
|
)
|
||||||
|
|
||||||
var VERSION = "v1.0.3"
|
|
||||||
|
|
||||||
// globals
|
// globals
|
||||||
var (
|
var (
|
||||||
OutputFileTmpl = template.New("output-file")
|
OutputFileTmpl = template.New("output-file")
|
||||||
|
|
||||||
ModulePath string
|
ModulePath string
|
||||||
ProjectName string
|
ProjectName string
|
||||||
Runner channel.Runner
|
|
||||||
|
// meta data for executables
|
||||||
|
VersionTag string
|
||||||
|
CommitHash string
|
||||||
|
BuildTime string
|
||||||
|
|
||||||
|
Runner channel.Runner
|
||||||
|
|
||||||
MaxConfigStringLength int
|
MaxConfigStringLength int
|
||||||
)
|
)
|
||||||
@ -63,6 +67,7 @@ var (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
Init()
|
Init()
|
||||||
|
GatherMetaData()
|
||||||
|
|
||||||
ch := make(chan *CompileReport, len(CompileConfigs))
|
ch := make(chan *CompileReport, len(CompileConfigs))
|
||||||
wg := new(sync.WaitGroup)
|
wg := new(sync.WaitGroup)
|
||||||
|
153
metadata.go
Normal file
153
metadata.go
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetCommitHash(hashfmt string) (string, error) {
|
||||||
|
gitCmd := exec.Command("git", "log", "-n", "1", "--pretty=format:"+hashfmt)
|
||||||
|
gitCmd.Dir = ModulePath
|
||||||
|
|
||||||
|
stdout, err := gitCmd.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gitCmd.Start(); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
hashData, err := io.ReadAll(stdout)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gitCmd.Wait(); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
trimmedHash := strings.TrimSpace(string(hashData))
|
||||||
|
if trimmedHash == "" {
|
||||||
|
return "", errors.New("no valid hash found")
|
||||||
|
}
|
||||||
|
|
||||||
|
return trimmedHash, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetVersionTag() (string, error) {
|
||||||
|
gitCmd := exec.Command("git", "log", "-n", "1", "--pretty=format:%(describe:tags)")
|
||||||
|
gitCmd.Dir = ModulePath
|
||||||
|
|
||||||
|
stdout, err := gitCmd.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gitCmd.Start(); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
tagData, err := io.ReadAll(stdout)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gitCmd.Wait(); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
trimmedTag := strings.TrimSpace(string(tagData))
|
||||||
|
if trimmedTag == "" {
|
||||||
|
return "", errors.New("no valid version tag found")
|
||||||
|
}
|
||||||
|
|
||||||
|
return trimmedTag, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func WorkTreeChanged() bool {
|
||||||
|
gitCmd := exec.Command("git", "status", "--porcelain")
|
||||||
|
gitCmd.Dir = ModulePath
|
||||||
|
|
||||||
|
stdout, err := gitCmd.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gitCmd.Start(); err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := io.ReadAll(stdout)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gitCmd.Wait(); err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return len(data) != 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func GatherMetaData() {
|
||||||
|
if !WorkTreeChanged() {
|
||||||
|
VersionTag, _ = GetVersionTag()
|
||||||
|
CommitHash, _ = GetCommitHash("%H")
|
||||||
|
} else {
|
||||||
|
hash, _ := GetCommitHash("%h")
|
||||||
|
VersionTag = fmt.Sprintf("(devel-%s)", hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
BuildTime = time.Now().Format(time.RFC3339)
|
||||||
|
}
|
||||||
|
|
||||||
|
func BuildLdFlags(os, arch string) string {
|
||||||
|
b := &strings.Builder{}
|
||||||
|
|
||||||
|
b.WriteString("-ldflags=")
|
||||||
|
|
||||||
|
if !*KeepDebugFlags {
|
||||||
|
b.WriteString("-s -w")
|
||||||
|
}
|
||||||
|
|
||||||
|
if CommitHash != "" {
|
||||||
|
b.WriteString(" -X ")
|
||||||
|
b.WriteString("git.milar.in/milarin/buildinfo.Commit")
|
||||||
|
b.WriteString("=")
|
||||||
|
b.WriteString(CommitHash)
|
||||||
|
}
|
||||||
|
|
||||||
|
if VersionTag != "" {
|
||||||
|
b.WriteString(" -X ")
|
||||||
|
b.WriteString("git.milar.in/milarin/buildinfo.Version")
|
||||||
|
b.WriteString("=")
|
||||||
|
b.WriteString(VersionTag)
|
||||||
|
}
|
||||||
|
|
||||||
|
b.WriteString(" -X ")
|
||||||
|
b.WriteString("git.milar.in/milarin/buildinfo.Name")
|
||||||
|
b.WriteString("=")
|
||||||
|
b.WriteString(ProjectName)
|
||||||
|
|
||||||
|
b.WriteString(" -X ")
|
||||||
|
b.WriteString("git.milar.in/milarin/buildinfo.BuildTime")
|
||||||
|
b.WriteString("=")
|
||||||
|
b.WriteString(BuildTime)
|
||||||
|
|
||||||
|
b.WriteString(" -X ")
|
||||||
|
b.WriteString("git.milar.in/milarin/buildinfo.OS")
|
||||||
|
b.WriteString("=")
|
||||||
|
b.WriteString(os)
|
||||||
|
|
||||||
|
b.WriteString(" -X ")
|
||||||
|
b.WriteString("git.milar.in/milarin/buildinfo.Arch")
|
||||||
|
b.WriteString("=")
|
||||||
|
b.WriteString(arch)
|
||||||
|
|
||||||
|
return b.String()
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user