Use Go embed.FS instead of external tool to embed assets (#135)

* Use Go embed.FS instead of external tool to embed assets

* remove go-bindata from dockerfiles and bump ci to golang 1.16.x

* remove more go-bindata related stuff

Co-authored-by: Markus Viitamäki <markus.viitamaki@embark-studios.com>
This commit is contained in:
Thomas Frössman
2021-07-23 15:28:35 +02:00
committed by GitHub
parent 685e913dc3
commit 4f57eac902
8 changed files with 24 additions and 33 deletions
+1 -7
View File
@@ -23,11 +23,6 @@ jobs:
npm install --prefix ui
npm run --prefix ui build
- name: Get and install bindfs
uses: "cedrickring/golang-action@1.7.0"
with:
args: go get -u github.com/go-bindata/go-bindata/... && go get -u github.com/elazarl/go-bindata-assetfs/... && go-bindata-assetfs -prefix ui/dist ui/dist
- name: Check styling error
uses: "cedrickring/golang-action@1.7.0"
with:
@@ -51,8 +46,7 @@ jobs:
- name: Check security issues with gosec
uses: "cedrickring/golang-action@1.7.0"
with:
# TODO: remove `-exclude=G110` once https://github.com/go-bindata/go-bindata/pull/50 is merged and released
args: go get -u github.com/securego/gosec/cmd/gosec; gosec -exclude=G110 ./... # https://github.com/securego/gosec
args: go get -u github.com/securego/gosec/cmd/gosec; gosec ./... # https://github.com/securego/gosec
build:
name: Build wg-ui
-3
View File
@@ -7,14 +7,11 @@ RUN npm run build
FROM docker.io/golang:latest AS build
WORKDIR /wg
RUN go get github.com/go-bindata/go-bindata/...
RUN go get github.com/elazarl/go-bindata-assetfs/...
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
COPY --from=ui /ui/dist ui/dist
RUN go-bindata-assetfs -prefix ui/dist ui/dist
RUN go install .
FROM gcr.io/distroless/base
+7 -12
View File
@@ -5,7 +5,7 @@ GOCLEAN=$(GOCMD) clean
GOGET=$(GOCMD) get
BINARY_NAME=wireguard-ui
.PHONY: build container ui assets
.PHONY: build container ui
all: build
@@ -17,27 +17,22 @@ clean:
ui:
cd ui && npm install && npm run build
assets:
$(GOGET) github.com/go-bindata/go-bindata/...
$(GOGET) github.com/elazarl/go-bindata-assetfs/...
go-bindata-assetfs -prefix ui/dist ui/dist
build: ui assets
build: ui
CGO_ENABLED=0 $(GOBUILD) -o bin/$(BINARY_NAME) -v
build-amd64: ui assets
build-amd64: ui
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOBUILD) -o bin/$(BINARY_NAME)-amd64 -v
build-armv5: ui assets
build-armv5: ui
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=5 $(GOBUILD) -o bin/$(BINARY_NAME)-armv5 -v
build-armv6: ui assets
build-armv6: ui
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 $(GOBUILD) -o bin/$(BINARY_NAME)-armv6 -v
build-armv7: ui assets
build-armv7: ui
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 $(GOBUILD) -o bin/$(BINARY_NAME)-armv7 -v
build-armv8: ui assets
build-armv8: ui
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 $(GOBUILD) -o bin/$(BINARY_NAME)-armv8 -v
container:
-1
View File
@@ -133,7 +133,6 @@ make build-armv7
```
make ui
make assets
make build
```
-3
View File
@@ -7,14 +7,11 @@ RUN npm run build
FROM docker.io/golang:latest AS build
WORKDIR /wg
RUN go get github.com/go-bindata/go-bindata/...
RUN go get github.com/elazarl/go-bindata-assetfs/...
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
COPY --from=ui /ui/dist ui/dist
RUN go-bindata-assetfs -prefix ui/dist ui/dist
RUN go install .
FROM docker.io/golang:latest AS wg_go_build
+1 -2
View File
@@ -1,11 +1,10 @@
module github.com/embarkstudios/wireguard-ui
go 1.13
go 1.16
require (
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect
github.com/elazarl/go-bindata-assetfs v1.0.1
github.com/fujiwara/go-amzn-oidc v0.0.2
github.com/google/nftables v0.0.0-20200316075819-7127d9d22474
github.com/julienschmidt/httprouter v1.3.0
-3
View File
@@ -7,8 +7,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fujiwara/go-amzn-oidc v0.0.2 h1:BcniaR2fJFik2koEK6Vm80Kk/vg6uoGTyckNwuGKO48=
@@ -171,7 +169,6 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+15 -2
View File
@@ -2,8 +2,10 @@ package main
import (
"context"
"embed"
"encoding/json"
"fmt"
"io/fs"
"io/ioutil"
"net"
"net/http"
@@ -17,7 +19,6 @@ import (
"sync"
"time"
assetfs "github.com/elazarl/go-bindata-assetfs"
validator "github.com/fujiwara/go-amzn-oidc/validator"
"github.com/google/nftables"
"github.com/google/nftables/expr"
@@ -85,6 +86,9 @@ func ifname(n string) []byte {
return b
}
//go:embed ui/dist
var assetsFS embed.FS
// NewServer returns an instance of Server which contains both the webserver and the reference to Wireguard
func NewServer() *Server {
ipAddr, ipNet, err := net.ParseCIDR(*clientIPRange)
@@ -102,7 +106,16 @@ func NewServer() *Server {
config := NewServerConfig(cfgPath)
log.Debug("Configuration loaded with public key: ", config.PublicKey)
assets := http.FileServer(&assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo, Prefix: ""})
var fsys fs.FS = assetsFS
if f, err := fs.Sub(fsys, "ui/dist"); err != nil {
log.Error(fmt.Errorf("ui/dist does not exist in fs :%w", err))
} else {
fsys = f
}
fmt.Println(fs.Glob(fsys, "*"))
assets := http.FileServer(http.FS(fsys))
s := Server{
serverConfigPath: cfgPath,