Skip to content

Commit c0e8016

Browse files
committedNov 5, 2020
Roll up static assets into the binary, rework tool deps
To make the app self-contained. Build tool changes are driven by the need to require `go-bindata`. This approach is also cleaner than just running `go mod tidy` on every CI run before the diff.
1 parent 05c834e commit c0e8016

File tree

7 files changed

+290
-10
lines changed

7 files changed

+290
-10
lines changed
 

‎.travis.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ install:
1010
- sudo apt-get install openjdk-8-jre-headless
1111
script:
1212
- source $HOME/google-cloud-sdk/path.bash.inc
13-
- go get github.com/golang/mock/mockgen@v1.4.4
1413
- go mod download
14+
- go install github.com/go-bindata/go-bindata/v3/go-bindata
15+
- go install github.com/golang/mock/mockgen
1516
- go test -v -timeout=30s ./...
1617
- gofmt -w $(go list -f '{{.Dir}}' ./...)
1718
- go generate ./...

‎Dockerfile

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ FROM golang:alpine AS builder
44
WORKDIR /go/src/ts-bridge
55

66
# Copy go.mod and go.sum first so we can cache this layer unless deps changed or have been added
7-
COPY go.mod .
8-
COPY go.sum .
7+
COPY go.mod go.sum ./
98
RUN go mod download
109

1110
COPY . .
1211

12+
# Run go generate only on web static assets as there's no need to regen test mocks here
13+
RUN go install github.com/go-bindata/go-bindata/v3/go-bindata && go generate ./web
1314
RUN go build -o /go/bin/ts-bridge ./app
1415

1516
# Runtime image

‎go.mod

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ require (
1212
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
1313
github.com/census-instrumentation/opencensus-proto v0.3.0 // indirect
1414
github.com/dustin/go-humanize v1.0.0
15+
github.com/go-bindata/go-bindata/v3 v3.1.3
1516
github.com/gogo/protobuf v1.3.1 // indirect
1617
github.com/golang/mock v1.4.4
1718
github.com/golang/protobuf v1.4.2
@@ -24,8 +25,7 @@ require (
2425
github.com/zorkian/go-datadog-api v2.29.0+incompatible
2526
go.etcd.io/bbolt v1.3.5 // indirect
2627
go.opencensus.io v0.22.4
27-
golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f // indirect
28-
golang.org/x/tools v0.0.0-20200828161849-5deb26317202 // indirect
28+
golang.org/x/tools v0.0.0-20201105001634-bc3cf281b174 // indirect
2929
google.golang.org/api v0.30.0
3030
google.golang.org/genproto v0.0.0-20200829155447-2bf3329a0021
3131
google.golang.org/grpc v1.31.1

‎go.sum

+12-4
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
6969
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
7070
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
7171
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
72+
github.com/go-bindata/go-bindata/v3 v3.1.3 h1:F0nVttLC3ws0ojc7p60veTurcOm//D4QBODNM7EGrCI=
73+
github.com/go-bindata/go-bindata/v3 v3.1.3/go.mod h1:1/zrpXsLD8YDIbhZRqXzm1Ghc7NhEvIN9+Z6R5/xH4I=
7274
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
7375
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
7476
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@@ -147,6 +149,7 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdl
147149
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
148150
github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o=
149151
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
152+
github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E=
150153
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
151154
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
152155
github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
@@ -175,6 +178,7 @@ github.com/timshannon/bolthold v0.0.0-20200817130212-4a25ab140645/go.mod h1:jUig
175178
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
176179
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
177180
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
181+
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
178182
github.com/zorkian/go-datadog-api v2.29.0+incompatible h1:uZZg0POZ6tLmVFtjUSaTZYwR6Q6RrHx6f/blTEDn8dA=
179183
github.com/zorkian/go-datadog-api v2.29.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss=
180184
go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
@@ -255,6 +259,8 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R
255259
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
256260
golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=
257261
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
262+
golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
263+
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
258264
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
259265
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
260266
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
@@ -272,6 +278,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
272278
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
273279
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=
274280
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
281+
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck=
282+
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
275283
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
276284
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
277285
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -301,8 +309,8 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w
301309
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
302310
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
303311
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
304-
golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f h1:6Sc1XOXTulBN6imkqo6XoAXDEzoQ4/ro6xy7Vn8+rOM=
305-
golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
312+
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
313+
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
306314
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
307315
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
308316
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -357,8 +365,8 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY
357365
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
358366
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
359367
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
360-
golang.org/x/tools v0.0.0-20200828161849-5deb26317202 h1:DrWbY9UUFi/sl/3HkNVoBjDbGfIPZZfgoGsGxOL1EU8=
361-
golang.org/x/tools v0.0.0-20200828161849-5deb26317202/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
368+
golang.org/x/tools v0.0.0-20201105001634-bc3cf281b174 h1:0rx0F4EjJNbxTuzWe0KjKcIzs+3VEb/Mrs/d1ciNz1c=
369+
golang.org/x/tools v0.0.0-20201105001634-bc3cf281b174/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
362370
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
363371
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
364372
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=

‎tools.go

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// This is the official recommended way to keep track of go tooling that shouldn't be compiled in. This file will never
2+
// be compiled; it is used simply to record the dependency. Build constraint name is not particularly important, 'tools'
3+
// is chosen for consistency.
4+
// See: https://github.com/golang/go/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module
5+
// +build tools
6+
7+
package tools
8+
9+
import (
10+
_ "github.com/go-bindata/go-bindata/v3"
11+
_ "github.com/golang/mock/mockgen"
12+
)

‎web/handlers.go

+12-1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ func (h *Handler) Health(w http.ResponseWriter, r *http.Request) {
8181
w.Write(response)
8282
}
8383

84+
// TODO: this needs to be removed in favour of Embed.FS when it ships, see:
85+
// https://github.com/golang/go/issues/41191
86+
// https://go.googlesource.com/proposal/+/master/design/draft-embed.md
87+
// Generate static assets needed for index to be backed into executable
88+
//go:generate go-bindata -nometadata -o static_data.go -pkg web static/
89+
8490
// Index shows a web page with metric import status.
8591
func (h *Handler) Index(w http.ResponseWriter, r *http.Request) {
8692
if h.config.Options.EnableStatusPage != true {
@@ -104,8 +110,13 @@ func (h *Handler) Index(w http.ResponseWriter, r *http.Request) {
104110
return
105111
}
106112

113+
index, err := Asset("static/index.html")
114+
if err != nil {
115+
log.Fatalf("Unable to load static assets needed for WebUI: %v", err)
116+
}
117+
107118
funcMap := template.FuncMap{"humantime": humanize.Time}
108-
t, err := template.New("index.html").Funcs(funcMap).ParseFiles("web/static/index.html")
119+
t, err := template.New("index.html").Funcs(funcMap).Parse(string(index))
109120
if err != nil {
110121
logAndReturnError(ctx, w, err)
111122
return

‎web/static_data.go

+247
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
Please sign in to comment.