Closed
Description
Create the following Dockerfile:
FROM golang:1.8.3-jessie
RUN go get github.com/gopherjs/gopherjs
RUN mkdir -p /go/src/github.com/nmiyake/test-gen
RUN echo 'package main; import "reflect"; import "github.com/gopherjs/gopherjs/js"; func main() { js.Global.Set("tester", map[string]interface{}{"Tester": tester})}; func tester(input string) string { reflect.DeepEqual(nil, nil); return input; }' > /go/src/github.com/nmiyake/test-gen/main.go
CMD gopherjs build /go/src/github.com/nmiyake/test-gen/main.go -m -o /go/src/github.com/nmiyake/test-gen/go.js && shasum -a 256 /go/src/github.com/nmiyake/test-gen/go.js
This Dockerfile simply creates a main.go
with the content:
package main
import (
"reflect"
"github.com/gopherjs/gopherjs/js"
)
func main() {
js.Global.Set("tester", map[string]interface{}{
"Tester": tester,
})
}
func tester(input string) string {
reflect.DeepEqual(nil, nil)
return input
}
And runs gopherjs
to created minified output.
Run docker build .
to build the image and get the tag. Then, perform a docker run
on the tag multiple times. Observe that the SHA-256 for the generated Javascript varies between 2-3 different values:
➜ test-gen git:(master) ✗ docker build .
Sending build context to Docker daemon 2.334MB
Step 1/5 : FROM golang:1.8.3-jessie
---> 6ce094895555
Step 2/5 : RUN go get github.com/gopherjs/gopherjs
---> Using cache
---> 6121ddb6b270
Step 3/5 : RUN mkdir -p /go/src/github.com/nmiyake/test-gen
---> Running in 1f68a04174e7
---> 66ffb7a46058
Removing intermediate container 1f68a04174e7
Step 4/5 : RUN echo 'package main; import "reflect"; import "github.com/gopherjs/gopherjs/js"; func main() { js.Global.Set("tester", map[string]interface{}{"Tester": tester})}; func tester(input string) string { reflect.DeepEqual(nil, nil); return input; }' > /go/src/github.com/nmiyake/test-gen/main.go
---> Running in 0c5ce4c8190f
---> 28a14a14a9a7
Removing intermediate container 0c5ce4c8190f
Step 5/5 : CMD gopherjs build /go/src/github.com/nmiyake/test-gen/main.go -m -o /go/src/github.com/nmiyake/test-gen/go.js && shasum -a 256 /go/src/github.com/nmiyake/test-gen/go.js
---> Running in 9821e908d992
---> ae0c83e503e7
Removing intermediate container 9821e908d992
Successfully built ae0c83e503e7
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
9114154ee82cd9669adbde686cdf5e3069b318b1796283ddee0d682f58c10823 /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
fd206b8212d419b1be819227eedb5608a2cf531bddfbfc9e8c20276195080bd3 /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
9114154ee82cd9669adbde686cdf5e3069b318b1796283ddee0d682f58c10823 /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
9114154ee82cd9669adbde686cdf5e3069b318b1796283ddee0d682f58c10823 /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
9114154ee82cd9669adbde686cdf5e3069b318b1796283ddee0d682f58c10823 /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
9114154ee82cd9669adbde686cdf5e3069b318b1796283ddee0d682f58c10823 /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
9114154ee82cd9669adbde686cdf5e3069b318b1796283ddee0d682f58c10823 /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
fd206b8212d419b1be819227eedb5608a2cf531bddfbfc9e8c20276195080bd3 /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
9114154ee82cd9669adbde686cdf5e3069b318b1796283ddee0d682f58c10823 /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
9114154ee82cd9669adbde686cdf5e3069b318b1796283ddee0d682f58c10823 /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
46d5461347510fd0421f11647c6d7f5b7652bd4197eca7dd964af93d9429eafa /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
fd206b8212d419b1be819227eedb5608a2cf531bddfbfc9e8c20276195080bd3 /go/src/github.com/nmiyake/test-gen/go.js
➜ test-gen git:(master) ✗ docker run ae0c83e503e7
fd206b8212d419b1be819227eedb5608a2cf531bddfbfc9e8c20276195080bd3 /go/src/github.com/nmiyake/test-gen/go.js
Interestingly, if I run the same command within the same docker run -it
session (or locally), I cannot get the value to change.
However, this is still frustrating because, as of yet, I have been unable to create a workflow where the minified content for a given Go file can be reliably reproduced across different platforms (whether it be by running in a Docker container or by setting GOOS
manually)