Add BuildWithEnvironment() to gexec
diff --git a/gexec/build.go b/gexec/build.go
index 220c8c4..e798900 100644
--- a/gexec/build.go
+++ b/gexec/build.go
@@ -28,6 +28,18 @@
}
/*
+BuildWithEnvironment is identical to Build but allows you to specify env vars to be set at build time.
+*/
+func BuildWithEnvironment(packagePath string, env map[string]string, args ...string) (compiledPath string, err error) {
+ for key, val := range env {
+ os.Setenv(key, val)
+ defer os.Unsetenv(key)
+ }
+
+ return BuildIn(os.Getenv("GOPATH"), packagePath, args...)
+}
+
+/*
BuildIn is identical to Build but allows you to specify a custom $GOPATH (the first argument).
*/
func BuildIn(gopath string, packagePath string, args ...string) (compiledPath string, err error) {
diff --git a/gexec/build_test.go b/gexec/build_test.go
index 7bd62fe..a2f1ccd 100644
--- a/gexec/build_test.go
+++ b/gexec/build_test.go
@@ -1,14 +1,16 @@
package gexec_test
import (
+ "os"
+
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/onsi/gomega/gexec"
)
-var _ = Describe(".Build", func() {
- var packagePath = "./_fixture/firefly"
+var packagePath = "./_fixture/firefly"
+var _ = Describe(".Build", func() {
Context("when there have been previous calls to Build", func() {
BeforeEach(func() {
_, err := gexec.Build(packagePath)
@@ -35,3 +37,31 @@
})
})
})
+
+var _ = Describe(".BuildWithEnvironment", func() {
+ var err error
+
+ It("compiles the specified package with the specified env vars", func() {
+ env := map[string]string{
+ "GOOS": "linux",
+ "GOARCH": "amd64",
+ }
+
+ compiledPath, err := gexec.BuildWithEnvironment(packagePath, env)
+ Ω(err).ShouldNot(HaveOccurred())
+ Ω(compiledPath).Should(BeAnExistingFile())
+ })
+
+ It("returns the environment to a good state", func() {
+ knownGoodEnv := os.Environ()
+
+ env := map[string]string{
+ "THIS_ENV_VAR": "SHOULD_NOT_BE_SET",
+ }
+
+ _, err = gexec.BuildWithEnvironment(packagePath, env)
+ Ω(err).ShouldNot(HaveOccurred())
+
+ Ω(os.Environ()).Should(Equal(knownGoodEnv))
+ })
+})