From e16f05b13025cdc913b8dc86892fc7033a1c6f6c Mon Sep 17 00:00:00 2001 From: Harvey Tindall Date: Thu, 1 Apr 2021 14:22:11 +0100 Subject: [PATCH] use build constraints for embed, clean up makefile internal-files/external-files and compile-debug are gone, the environment variables INTERNAL=on/off and DEBUG=on/off replace them. --- .gitignore | 1 - .goreleaser.yml | 1 - Dockerfile | 4 +- Makefile | 108 ++++++++++++++++++------------- embed/README.md | 1 - embed/external.go => external.go | 2 + go.mod | 7 +- go.sum | 11 ++++ embed/internal.go => internal.go | 2 + scripts/embed.py | 22 ------- 10 files changed, 84 insertions(+), 75 deletions(-) delete mode 100644 embed/README.md rename embed/external.go => external.go (97%) rename embed/internal.go => internal.go (97%) delete mode 100755 scripts/embed.py diff --git a/.gitignore b/.gitignore index f802803..0731938 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ dist/ build/ data/ version.go -embed.go notes docs/* lang/langtostruct.py diff --git a/.goreleaser.yml b/.goreleaser.yml index f947c18..7942e30 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -27,7 +27,6 @@ before: - npx esbuild --bundle ts/setup.ts --outfile=./data/web/js/setup.js --minify - go get -u github.com/swaggo/swag/cmd/swag - swag init -g main.go - - python3 scripts/embed.py internal builds: - dir: ./ env: diff --git a/Dockerfile b/Dockerfile index b5aac25..c0c4136 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update -y \ && apt-get install build-essential python3-pip curl software-properties-common sed -y \ && (curl -sL https://deb.nodesource.com/setup_14.x | bash -) \ && apt-get install nodejs \ - && (cd /opt/build; make configuration npm email typescript bundle-css swagger copy external-files GOESBUILD=on) \ + && (cd /opt/build; make configuration npm email typescript bundle-css swagger copy INTERNAL=off GOESBUILD=on) \ && sed -i 's#id="password_resets-watch_directory" placeholder="/config/jellyfin"#id="password_resets-watch_directory" value="/jf" disabled#g' /opt/build/build/data/html/setup.html @@ -16,7 +16,7 @@ ENV GOARCH=$TARGETARCH COPY --from=support /opt/build /opt/build -RUN (cd /opt/build; make compile UPDATER=docker) +RUN (cd /opt/build; make compile INTERNAL=off UPDATER=docker) FROM golang:latest diff --git a/Makefile b/Makefile index 1ef17ff..d9ae9da 100644 --- a/Makefile +++ b/Makefile @@ -11,11 +11,27 @@ VERSION := $(shell echo $(VERSION) | sed 's/v//g') COMMIT ?= $(shell git rev-parse --short HEAD || echo unknown) UPDATER ?= off -BUILDFLAGS := -X main.version=$(VERSION) -X main.commit=$(COMMIT) +LDFLAGS := -X main.version=$(VERSION) -X main.commit=$(COMMIT) ifeq ($(UPDATER), on) - BUILDFLAGS := $(BUILDFLAGS) -X main.updater=binary + LDFLAGS := $(LDFLAGS) -X main.updater=binary else ifneq ($(UPDATER), off) - BUILDFLAGS := $(BUILDFLAGS) -X main.updater=$(UPDATER) + LDFLAGS := $(LDFLAGS) -X main.updater=$(UPDATER) +endif + +DEBUG ?= off +ifeq ($(DEBUG), on) + LDFLAGS := -s -w $(LDFLAGS) +endif + +INTERNAL ?= on +ifeq ($(INTERNAL), on) + # GOFILES := $(addprefix ../,$(filter-out external.go, $(wildcard *.go))) + TAGS := + DATA := data +else + # GOFILES := $(addprefix ../,$(filter-out internal.go, $(wildcard *.go))) + DATA := build/data + TAGS := -tags external endif npm: @@ -29,33 +45,33 @@ npm: configuration: $(info Fixing config-base) - -mkdir -p data - python3 scripts/enumerate_config.py -i config/config-base.json -o data/config-base.json + -mkdir -p $(DATA) + python3 scripts/enumerate_config.py -i config/config-base.json -o $(DATA)/config-base.json $(info Generating config-default.ini) - python3 scripts/generate_ini.py -i config/config-base.json -o data/config-default.ini + python3 scripts/generate_ini.py -i config/config-base.json -o $(DATA)/config-default.ini email: $(info Generating email html) - python3 scripts/compile_mjml.py -o data/ + python3 scripts/compile_mjml.py -o $(DATA)/ typescript: $(info compiling typescript) - -mkdir -p data/web/js - -$(ESBUILD) --bundle ts/admin.ts --outfile=./data/web/js/admin.js --minify - -$(ESBUILD) --bundle ts/pwr.ts --outfile=./data/web/js/pwr.js --minify - -$(ESBUILD) --bundle ts/form.ts --outfile=./data/web/js/form.js --minify - -$(ESBUILD) --bundle ts/setup.ts --outfile=./data/web/js/setup.js --minify + -mkdir -p $(DATA)/web/js + -$(ESBUILD) --bundle ts/admin.ts --outfile=./$(DATA)/web/js/admin.js --minify + -$(ESBUILD) --bundle ts/pwr.ts --outfile=./$(DATA)/web/js/pwr.js --minify + -$(ESBUILD) --bundle ts/form.ts --outfile=./$(DATA)/web/js/form.js --minify + -$(ESBUILD) --bundle ts/setup.ts --outfile=./$(DATA)/web/js/setup.js --minify ts-debug: $(info compiling typescript w/ sourcemaps) - -mkdir -p data/web/js - -$(ESBUILD) --bundle ts/admin.ts --sourcemap --outfile=./data/web/js/admin.js - -$(ESBUILD) --bundle ts/pwr.ts --sourcemap --outfile=./data/web/js/pwr.js - -$(ESBUILD) --bundle ts/form.ts --sourcemap --outfile=./data/web/js/form.js - -$(ESBUILD) --bundle ts/setup.ts --sourcemap --outfile=./data/web/js/setup.js - -rm -r data/web/js/ts + -mkdir -p $(DATA)/web/js + -$(ESBUILD) --bundle ts/admin.ts --sourcemap --outfile=./$(DATA)/web/js/admin.js + -$(ESBUILD) --bundle ts/pwr.ts --sourcemap --outfile=./$(DATA)/web/js/pwr.js + -$(ESBUILD) --bundle ts/form.ts --sourcemap --outfile=./$(DATA)/web/js/form.js + -$(ESBUILD) --bundle ts/setup.ts --sourcemap --outfile=./$(DATA)/web/js/setup.js + -rm -r $(DATA)/web/js/ts $(info copying typescript) - cp -r ts data/web/js + cp -r ts $(DATA)/web/js swagger: $(GOBINARY) get github.com/swaggo/swag/cmd/swag @@ -66,47 +82,47 @@ compile: $(GOBINARY) mod download $(info Building) mkdir -p build - cd build && CGO_ENABLED=0 $(GOBINARY) build -ldflags="-s -w $(BUILDFLAGS)" -o ./jfa-go ../*.go - -compile-debug: - $(info Downloading deps) - $(GOBINARY) mod download - $(info Building) - mkdir -p build - cd build && CGO_ENABLED=0 $(GOBINARY) build -ldflags "$(BUILDFLAGS)" -o ./jfa-go ../*.go + # cd build && CGO_ENABLED=0 $(GOBINARY) build -ldflags="-s -w $(LDFLAGS)" -o ./jfa-go ../*.go + CGO_ENABLED=0 $(GOBINARY) build -ldflags="-s -w $(LDFLAGS)" $(TAGS) -o build/jfa-go compress: upx --lzma build/jfa-go bundle-css: - -mkdir -p data/web/css + -mkdir -p $(DATA)/web/css $(info bundling css) - $(ESBUILD) --bundle css/base.css --outfile=data/web/css/bundle.css --external:remixicon.css --minify + $(ESBUILD) --bundle css/base.css --outfile=$(DATA)/web/css/bundle.css --external:remixicon.css --minify copy: $(info copying fonts) - cp -r node_modules/remixicon/fonts/remixicon.css node_modules/remixicon/fonts/remixicon.woff2 data/web/css/ + cp -r node_modules/remixicon/fonts/remixicon.css node_modules/remixicon/fonts/remixicon.woff2 $(DATA)/web/css/ $(info copying html) - cp -r html data/ + cp -r html $(DATA)/ $(info copying static data) - -mkdir -p data/web - cp -r static/* data/web/ + -mkdir -p $(DATA)/web + cp -r static/* $(DATA)/web/ $(info copying language files) - cp -r lang data/ - cp LICENSE data/ + cp -r lang $(DATA)/ + cp LICENSE $(DATA)/ -internal-files: - python3 scripts/embed.py internal - -external-files: - python3 scripts/embed.py external - -mkdir -p build - $(info copying internal data into build/) - cp -r data build/ +# internal-files: +# python3 scripts/embed.py internal +# +# external-files: +# python3 scripts/embed.py external +# -mkdir -p build +# $(info copying internal data into build/) +# cp -r data build/ install: cp -r build $(DESTDIR)/jfa-go -all: configuration npm email typescript bundle-css swagger copy internal-files compile -all-external: configuration npm email typescript bundle-css swagger copy external-files compile -debug: configuration npm email ts-debug bundle-css swagger copy external-files compile-debug +clean: + -rm -r $(DATA) + -rm -r build + -rm mail/*.html + -rm embed.go + -rm docs/docs.go docs/swagger.json docs/swagger.yaml + go clean + +all: configuration npm email typescript bundle-css swagger copy compile diff --git a/embed/README.md b/embed/README.md deleted file mode 100644 index 5055915..0000000 --- a/embed/README.md +++ /dev/null @@ -1 +0,0 @@ -`scripts/embed.py [internal/external]` will copy the respective file into the main directory. If internal, `//go:embed` is used to embed the `data/` directory in the binary. If external, `os.DirFS` is used to access the `data/` directory, which should be placed next to the executable. diff --git a/embed/external.go b/external.go similarity index 97% rename from embed/external.go rename to external.go index 060ad16..a34d5d2 100644 --- a/embed/external.go +++ b/external.go @@ -1,3 +1,5 @@ +// +build external + package main import ( diff --git a/go.mod b/go.mod index 9e46874..eacadf7 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ replace github.com/hrfee/jfa-go/common => ./common replace github.com/hrfee/jfa-go/ombi => ./ombi require ( + github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/fatih/color v1.10.0 github.com/fsnotify/fsnotify v1.4.9 @@ -17,6 +18,7 @@ require ( github.com/gin-gonic/gin v1.6.3 github.com/go-chi/chi v4.1.2+incompatible // indirect github.com/go-openapi/spec v0.20.3 // indirect + github.com/go-openapi/swag v0.19.15 // indirect github.com/go-playground/validator/v10 v10.4.1 // indirect github.com/golang/protobuf v1.4.3 // indirect github.com/gomarkdown/markdown v0.0.0-20210208175418-bda154fe17d8 @@ -31,6 +33,7 @@ require ( github.com/mailgun/mailgun-go/v4 v4.3.0 github.com/mailru/easyjson v0.7.7 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/smartystreets/goconvey v1.6.4 // indirect github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14 github.com/swaggo/gin-swagger v1.3.0 @@ -38,8 +41,8 @@ require ( github.com/ugorji/go v1.2.0 // indirect github.com/writeas/go-strip-markdown v2.0.1+incompatible golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9 // indirect - golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 // indirect - golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b // indirect + golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c // indirect + golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54 // indirect golang.org/x/tools v0.1.0 // indirect google.golang.org/protobuf v1.25.0 // indirect gopkg.in/ini.v1 v1.62.0 diff --git a/go.sum b/go.sum index dd675d5..32b7815 100644 --- a/go.sum +++ b/go.sum @@ -17,6 +17,8 @@ github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -84,6 +86,8 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.11/go.mod h1:Uc0gKkdR+ojzsEpjh39QChyu92vPgIr72POcgHMAgSY= github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= @@ -188,6 +192,8 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCb github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= @@ -267,6 +273,8 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c h1:KHUzaHIpjWVlVVNh65G3hhuj3KB1HnjY6Cq5cTvRQT8= +golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -291,6 +299,9 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b h1:ggRgirZABFolTmi3sn6Ivd9SipZwLedQ5wR0aAKnFxU= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54 h1:rF3Ohx8DRyl8h2zw9qojyLHLhrJpEMgyPOImREEryf0= +golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/embed/internal.go b/internal.go similarity index 97% rename from embed/internal.go rename to internal.go index 9833a6a..92732c3 100644 --- a/embed/internal.go +++ b/internal.go @@ -1,3 +1,5 @@ +// +build !external + package main import ( diff --git a/scripts/embed.py b/scripts/embed.py deleted file mode 100755 index c1c75ff..0000000 --- a/scripts/embed.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/python -import shutil -import sys -from pathlib import Path - -external = ["false", "external", "no", "n"] - -with open("embed.go", "w") as f: - choice = "" - try: - choice = sys.argv[1] - except IndexError: - pass - folder = Path("embed") - if choice in external: - embed = False - shutil.copy(folder / "external.go", "embed.go") - print("Embedding disabled. \"data\" must be placed alongside the executable.") - else: - shutil.copy(folder / "internal.go", "embed.go") - print("Embedding enabled.") -