(Go version) Multi platform build (#319)
This commit is contained in:
3
.github/workflows/build.yml
vendored
3
.github/workflows/build.yml
vendored
@@ -20,8 +20,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
go-version: ^1.15
|
go-version: ^1.15
|
||||||
- name: Build binaries
|
- name: Build binaries
|
||||||
working-directory: cmd/blackbox
|
run: go run build/build.go
|
||||||
run: go build
|
|
||||||
- name: Run unit tests
|
- name: Run unit tests
|
||||||
run: go test ./...
|
run: go test ./...
|
||||||
- name: Run integration tests
|
- name: Run integration tests
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -8,7 +8,6 @@ __pycache__/
|
|||||||
# Distribution / packaging
|
# Distribution / packaging
|
||||||
.Python
|
.Python
|
||||||
env/
|
env/
|
||||||
build/
|
|
||||||
develop-eggs/
|
develop-eggs/
|
||||||
dist/
|
dist/
|
||||||
eggs/
|
eggs/
|
||||||
|
|||||||
75
build/build.go
Normal file
75
build/build.go
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var sha = flag.String("sha", "", "SHA of current commit")
|
||||||
|
|
||||||
|
var goos = flag.String("os", "", "OS to build (linux, windows, or darwin) Defaults to all.")
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.Parse()
|
||||||
|
flags := fmt.Sprintf(`-s -w -X main.SHA="%s" -X main.BuildTime=%d`, getVersion(), time.Now().Unix())
|
||||||
|
pkg := "github.com/StackExchange/blackbox/v2/cmd/blackbox"
|
||||||
|
|
||||||
|
build := func(out, goos string) {
|
||||||
|
log.Printf("Building %s", out)
|
||||||
|
cmd := exec.Command("go", "build", "-o", out, "-ldflags", flags, pkg)
|
||||||
|
os.Setenv("GOOS", goos)
|
||||||
|
os.Setenv("GO111MODULE", "on")
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
err := cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, env := range []struct {
|
||||||
|
binary, goos string
|
||||||
|
}{
|
||||||
|
{"blackbox-Linux", "linux"},
|
||||||
|
{"blackbox.exe", "windows"},
|
||||||
|
{"blackbox-Darwin", "darwin"},
|
||||||
|
} {
|
||||||
|
if *goos == "" || *goos == env.goos {
|
||||||
|
build(env.binary, env.goos)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func getVersion() string {
|
||||||
|
if *sha != "" {
|
||||||
|
return *sha
|
||||||
|
}
|
||||||
|
// check teamcity build version
|
||||||
|
if v := os.Getenv("BUILD_VCS_NUMBER"); v != "" {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
// check git
|
||||||
|
cmd := exec.Command("git", "rev-parse", "HEAD")
|
||||||
|
v, err := cmd.CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
ver := strings.TrimSpace(string(v))
|
||||||
|
// see if dirty
|
||||||
|
cmd = exec.Command("git", "diff-index", "--quiet", "HEAD", "--")
|
||||||
|
err = cmd.Run()
|
||||||
|
// exit status 1 indicates dirty tree
|
||||||
|
if err != nil {
|
||||||
|
if err.Error() == "exit status 1" {
|
||||||
|
ver += "[dirty]"
|
||||||
|
} else {
|
||||||
|
log.Printf("!%s!", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ver
|
||||||
|
}
|
||||||
@@ -4,9 +4,10 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"syscall"
|
|
||||||
|
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
|
|
||||||
|
"github.com/StackExchange/blackbox/v2/pkg/bbutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flags() *cli.App {
|
func flags() *cli.App {
|
||||||
@@ -14,8 +15,8 @@ func flags() *cli.App {
|
|||||||
app.Version = "2.0.0"
|
app.Version = "2.0.0"
|
||||||
app.Usage = "Maintain encrypted files in a VCS (Git, Hg, Svn)"
|
app.Usage = "Maintain encrypted files in a VCS (Git, Hg, Svn)"
|
||||||
|
|
||||||
defUmask := syscall.Umask(0)
|
defUmask := bbutil.Umask(0)
|
||||||
syscall.Umask(defUmask)
|
bbutil.Umask(defUmask)
|
||||||
defUmaskS := fmt.Sprintf("%04o", defUmask)
|
defUmaskS := fmt.Sprintf("%04o", defUmask)
|
||||||
|
|
||||||
app.Flags = []cli.Flag{
|
app.Flags = []cli.Flag{
|
||||||
|
|||||||
11
pkg/bbutil/umask_posix.go
Normal file
11
pkg/bbutil/umask_posix.go
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// +build !windows
|
||||||
|
|
||||||
|
package bbutil
|
||||||
|
|
||||||
|
import "syscall"
|
||||||
|
|
||||||
|
// Umask is a no-op on Windows, and calls syscall.Umask on all other
|
||||||
|
// systems. On Windows it returns 0, which is a decoy.
|
||||||
|
func Umask(mask int) int {
|
||||||
|
return syscall.Umask(mask)
|
||||||
|
}
|
||||||
9
pkg/bbutil/umask_windows.go
Normal file
9
pkg/bbutil/umask_windows.go
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
// +build windows
|
||||||
|
|
||||||
|
package bbutil
|
||||||
|
|
||||||
|
// Umask is a no-op on Windows, and calls syscall.Umask on all other
|
||||||
|
// systems. On Windows it returns 0, which is a decoy.
|
||||||
|
func Umask(mask int) int {
|
||||||
|
return 0o000
|
||||||
|
}
|
||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"syscall"
|
|
||||||
|
|
||||||
"github.com/StackExchange/blackbox/v2/pkg/bblog"
|
"github.com/StackExchange/blackbox/v2/pkg/bblog"
|
||||||
"github.com/StackExchange/blackbox/v2/pkg/bbutil"
|
"github.com/StackExchange/blackbox/v2/pkg/bbutil"
|
||||||
@@ -66,9 +65,9 @@ func (crypt CrypterHandle) Decrypt(filename string, umask int, overwrite bool) e
|
|||||||
}
|
}
|
||||||
a = append(a, filename+".gpg")
|
a = append(a, filename+".gpg")
|
||||||
|
|
||||||
oldumask := syscall.Umask(umask)
|
oldumask := bbutil.Umask(umask)
|
||||||
err := bbutil.RunBash(crypt.GPGCmd, a...)
|
err := bbutil.RunBash(crypt.GPGCmd, a...)
|
||||||
syscall.Umask(oldumask)
|
bbutil.Umask(oldumask)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,10 +117,10 @@ func (crypt CrypterHandle) Encrypt(filename string, umask int, receivers []strin
|
|||||||
a = append(a, filename)
|
a = append(a, filename)
|
||||||
//err = bbutil.RunBash("ls", "-la")
|
//err = bbutil.RunBash("ls", "-la")
|
||||||
|
|
||||||
oldumask := syscall.Umask(umask)
|
oldumask := bbutil.Umask(umask)
|
||||||
crypt.logDebug.Printf("Args = %q", a)
|
crypt.logDebug.Printf("Args = %q", a)
|
||||||
err = bbutil.RunBash(crypt.GPGCmd, a...)
|
err = bbutil.RunBash(crypt.GPGCmd, a...)
|
||||||
syscall.Umask(oldumask)
|
bbutil.Umask(oldumask)
|
||||||
|
|
||||||
return encrypted, err
|
return encrypted, err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user