From 50d89760e275319aded7d68c1c663310a483c2fa Mon Sep 17 00:00:00 2001 From: Deluan Date: Wed, 22 Jan 2020 18:35:44 -0500 Subject: [PATCH] Use bindata to embed UI assets --- .gitignore | 2 ++ Makefile | 28 +++++++++++++++++++--------- assets/external.go | 13 +++++++++++++ consts/consts.go | 2 ++ server/app/app.go | 9 +++++---- 5 files changed, 41 insertions(+), 13 deletions(-) create mode 100644 assets/external.go diff --git a/.gitignore b/.gitignore index 81e98dea8..ca7d2759d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ sonic.toml master.zip Jamstash-master testDB +*.swp +*_gen.go diff --git a/Makefile b/Makefile index b751621ad..73e5746bd 100644 --- a/Makefile +++ b/Makefile @@ -26,17 +26,14 @@ testall: check_go_env test build: check_go_env go build -.PHONY: build -buildall: check_go_env build - @(cd ./ui && npm run build) - .PHONY: setup setup: Jamstash-master - @which reflex || (echo "Installing Reflex" && GO111MODULE=off go get -u github.com/cespare/reflex) - @which goconvey || (echo "Installing GoConvey" && GO111MODULE=off go get -u github.com/smartystreets/goconvey) - @which wire || (echo "Installing Wire" && GO111MODULE=off go get -u go get github.com/google/wire/cmd/wire) - @which goreman || (echo "Installing Goreman" && GO111MODULE=off go get -u github.com/mattn/goreman) - @which ginkgo || (echo "Installing Ginkgo" && GO111MODULE=off go get -u github.com/onsi/ginkgo/ginkgo) + @which reflex || (echo "Installing Reflex" && GO111MODULE=off go get -u github.com/cespare/reflex) + @which goconvey || (echo "Installing GoConvey" && GO111MODULE=off go get -u github.com/smartystreets/goconvey) + @which wire || (echo "Installing Wire" && GO111MODULE=off go get -u go get github.com/google/wire/cmd/wire) + @which goreman || (echo "Installing Goreman" && GO111MODULE=off go get -u github.com/mattn/goreman) + @which ginkgo || (echo "Installing Ginkgo" && GO111MODULE=off go get -u github.com/onsi/ginkgo/ginkgo) + @which go-bindata || (echo "Installing BinData" && GO111MODULE=off go get -u github.com/go-bindata/go-bindata/...) go mod download @(cd ./ui && npm ci) @@ -60,3 +57,16 @@ check_node_env: data: mkdir data + +UI_SRC = $(shell find ui/src -name "*.js") +UI_PUBLIC = $(shell find ui/public -name "*.js") +ui/build: $(UI_SRC) $(UI_PUBLIC) + @(cd ./ui && npm run build) + +assets/gen.go: ui/build + go-bindata -fs -prefix "ui/build" -tags embed -nocompress -pkg assets -o assets/gen.go ui/build/... + +.PHONY: buildall +buildall: check_go_env assets/gen.go + go build -tags embed + diff --git a/assets/external.go b/assets/external.go new file mode 100644 index 000000000..16040c9e7 --- /dev/null +++ b/assets/external.go @@ -0,0 +1,13 @@ +// +build !embed + +package assets + +import ( + "net/http" + + "github.com/cloudsonic/sonic-server/consts" +) + +func AssetFile() http.FileSystem { + return http.Dir(consts.UIAssetsLocalPath) +} diff --git a/consts/consts.go b/consts/consts.go index 98c2d4005..d7ab41813 100644 --- a/consts/consts.go +++ b/consts/consts.go @@ -11,4 +11,6 @@ const ( InitialUserName = "admin" InitialName = "Admin" + + UIAssetsLocalPath = "ui/build" ) diff --git a/server/app/app.go b/server/app/app.go index f028fd757..028864894 100644 --- a/server/app/app.go +++ b/server/app/app.go @@ -6,9 +6,9 @@ import ( "net/url" "strings" + "github.com/cloudsonic/sonic-server/assets" "github.com/cloudsonic/sonic-server/conf" "github.com/cloudsonic/sonic-server/model" - "github.com/cloudsonic/sonic-server/server" "github.com/deluan/rest" "github.com/go-chi/chi" "github.com/go-chi/jwtauth" @@ -39,9 +39,6 @@ func (app *Router) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (app *Router) routes() http.Handler { r := chi.NewRouter() - // Serve UI app assets - server.FileServer(r, app.path, "/", http.Dir("ui/build")) - // Basic unauthenticated ping r.Get("/ping", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`{"response":"pong"}`)) }) @@ -57,6 +54,10 @@ func (app *Router) routes() http.Handler { app.R(r, "/album", model.Album{}) app.R(r, "/artist", model.Artist{}) }) + + // Serve UI app assets + r.Handle("/*", http.StripPrefix(app.path, http.FileServer(assets.AssetFile()))) + return r }