AJ ONeal
5 years ago
6 changed files with 193 additions and 104 deletions
@ -0,0 +1,2 @@ |
|||
watchdog |
|||
generated-version.go |
@ -0,0 +1,45 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
export CGO_ENABLED=0 |
|||
#GOOS=windows GOARCH=amd64 go install |
|||
go tool dist list |
|||
|
|||
gocmd=watchdog.go |
|||
golib="" |
|||
echo "" |
|||
|
|||
echo "" |
|||
echo "Windows amd64" |
|||
GOOS=windows GOARCH=amd64 go build -o dist/windows-amd64/watchdog.exe $gocmd $golib |
|||
echo "Windows 386" |
|||
GOOS=windows GOARCH=386 go build -o dist/windows-386/watchdog.exe $gocmd $golib |
|||
|
|||
echo "" |
|||
echo "Darwin (macOS) amd64" |
|||
GOOS=darwin GOARCH=amd64 go build -o dist/darwin-amd64/watchdog $gocmd $golib |
|||
|
|||
echo "" |
|||
echo "Linux amd64" |
|||
GOOS=linux GOARCH=amd64 go build -o dist/linux-amd64/watchdog $gocmd $golib |
|||
echo "Linux 386" |
|||
|
|||
echo "" |
|||
GOOS=linux GOARCH=386 go build -o dist/linux-386/watchdog $gocmd $golib |
|||
echo "RPi 3 B+ ARMv7" |
|||
GOOS=linux GOARCH=arm GOARM=7 go build -o dist/linux-armv7/watchdog $gocmd $golib |
|||
echo "RPi Zero ARMv5" |
|||
GOOS=linux GOARCH=arm GOARM=5 go build -o dist/linux-armv5/watchdog $gocmd $golib |
|||
|
|||
my_ver=$(git describe --tags) |
|||
pushd dist |
|||
ls -d *-* | while read my_dist |
|||
do |
|||
if [ -d "$my_dist" ]; then |
|||
#tar -czvf watchdog-$my_ver-$my_dist.tar.gz $my_dist |
|||
zip -r watchdog-$my_ver-$my_dist.zip $my_dist |
|||
fi |
|||
done |
|||
popd |
|||
|
|||
echo "" |
|||
echo "" |
@ -0,0 +1,123 @@ |
|||
// +build tools
|
|||
|
|||
package main |
|||
|
|||
import ( |
|||
"bytes" |
|||
"fmt" |
|||
"go/format" |
|||
"os" |
|||
"os/exec" |
|||
"regexp" |
|||
"strconv" |
|||
"strings" |
|||
"text/template" |
|||
"time" |
|||
) |
|||
|
|||
var exactVer *regexp.Regexp |
|||
var gitVer *regexp.Regexp |
|||
var verFile = "generated-version.go" |
|||
|
|||
func init() { |
|||
// exactly vX.Y.Z (go-compatible semver)
|
|||
exactVer = regexp.MustCompile(`^v\d+\.\d+\.\d+$`) |
|||
|
|||
// vX.Y.Z-n-g0000000 git post-release, semver prerelease
|
|||
gitVer = regexp.MustCompile(`^(v\d+\.\d+)\.(\d+)-(\d+)-g`) |
|||
} |
|||
|
|||
// Goal: Either use an exact version like v1.0.0
|
|||
// or translate the git version like v1.0.0-4-g0000000
|
|||
// to a semver like v1.0.1-pre4+g0000000
|
|||
// Don't fail when git repo isn't available.
|
|||
func main() { |
|||
desc := gitDesc() |
|||
rev := gitRev() |
|||
ver := semVer(desc) |
|||
ts := time.Now().Format(time.RFC3339) |
|||
|
|||
v := struct { |
|||
Timestamp string |
|||
Version string |
|||
GitRev string |
|||
}{ |
|||
Timestamp: ts, |
|||
Version: ver, |
|||
GitRev: rev, |
|||
} |
|||
|
|||
// Create or overwrite the go file from template
|
|||
var buf bytes.Buffer |
|||
if err := versionTpl.Execute(&buf, v); nil != err { |
|||
panic(err) |
|||
} |
|||
|
|||
// Format
|
|||
src, err := format.Source(buf.Bytes()) |
|||
if nil != err { |
|||
panic(err) |
|||
} |
|||
|
|||
// Write to disk (in the Current Working Directory)
|
|||
f, err := os.Create(verFile) |
|||
if nil != err { |
|||
panic(err) |
|||
} |
|||
if _, err := f.Write(src); nil != err { |
|||
panic(err) |
|||
} |
|||
if err := f.Close(); nil != err { |
|||
panic(err) |
|||
} |
|||
} |
|||
|
|||
func gitDesc() string { |
|||
args := strings.Split("git describe --tags --dirty --always", " ") |
|||
cmd := exec.Command(args[0], args[1:]...) |
|||
out, err := cmd.CombinedOutput() |
|||
if nil != err { |
|||
// Don't panic, just carry on
|
|||
out = []byte("v0.0.0-0-g0000000") |
|||
} |
|||
return strings.TrimSpace(string(out)) |
|||
} |
|||
|
|||
func gitRev() string { |
|||
args := strings.Split("git rev-parse HEAD", " ") |
|||
cmd := exec.Command(args[0], args[1:]...) |
|||
out, err := cmd.CombinedOutput() |
|||
if nil != err { |
|||
// Don't panic, just carry on
|
|||
out = []byte("00000000000000000") |
|||
} |
|||
return strings.TrimSpace(string(out)) |
|||
} |
|||
|
|||
func semVer(desc string) string { |
|||
var ver string |
|||
if exactVer.MatchString(desc) { |
|||
// v1.0.0
|
|||
ver = desc |
|||
} else if gitVer.MatchString(desc) { |
|||
// ((v1.0).(0)-(1))
|
|||
vers := gitVer.FindStringSubmatch(desc) |
|||
patch, err := strconv.Atoi(vers[2]) |
|||
if nil != err { |
|||
panic(err) |
|||
} |
|||
// v1.0.1-pre1
|
|||
ver = fmt.Sprintf("%s.%d-pre%s", vers[1], patch+1, vers[3]) |
|||
} |
|||
return ver |
|||
} |
|||
|
|||
var versionTpl = template.Must(template.New("").Parse(`// Code generated by go generate; DO NOT EDIT.
|
|||
package main |
|||
|
|||
func init() { |
|||
Timestamp = "{{ .Timestamp }}" |
|||
Version = "{{ .Version }}" |
|||
GitRev = "{{ .GitRev }}" |
|||
} |
|||
`)) |
Loading…
Reference in new issue