mirror of
https://github.com/knadh/listmonk.git
synced 2024-12-27 17:37:57 +08:00
82735bba69
Ref: https://github.com/knadh/listmonk/issues/409 - Introduce `main.appDir` and `main.fronendDir` Go compile-time flags to hardcode custom paths for loading frontend assets (frontend/dist/frontend in the repo after build) and app assets (queries.sql, schema.sql, config.toml.sample) in environments where embedding files in the binary is not feasible. These default to CWD unless explicitly set during compilation. - Fix the Vue favicon path oddity by copying the icon into the built frontend dir in the `make-frontend` step.
83 lines
2.4 KiB
Makefile
83 lines
2.4 KiB
Makefile
LAST_COMMIT := $(shell git rev-parse --short HEAD)
|
|
VERSION := $(shell git describe --tags --abbrev=0)
|
|
BUILDSTR := ${VERSION} (\#${LAST_COMMIT} $(shell date -u +"%Y-%m-%dT%H:%M:%S%z"))
|
|
|
|
YARN ?= yarn
|
|
GOPATH ?= $(HOME)/go
|
|
STUFFBIN ?= $(GOPATH)/bin/stuffbin
|
|
FRONTEND_YARN_MODULES = frontend/node_modules
|
|
FRONTEND_DIST = frontend/dist
|
|
FRONTEND_DEPS = \
|
|
$(FRONTEND_YARN_MODULES) \
|
|
frontend/package.json \
|
|
frontend/vue.config.js \
|
|
frontend/babel.config.js \
|
|
$(shell find frontend/fontello frontend/public frontend/src -type f)
|
|
|
|
BIN := listmonk
|
|
STATIC := config.toml.sample \
|
|
schema.sql queries.sql \
|
|
static/public:/public \
|
|
static/email-templates \
|
|
frontend/dist/frontend:/frontend \
|
|
i18n:/i18n
|
|
|
|
.PHONY: build
|
|
build: $(BIN)
|
|
|
|
$(STUFFBIN):
|
|
go get -u github.com/knadh/stuffbin/...
|
|
|
|
$(FRONTEND_YARN_MODULES): frontend/package.json frontend/yarn.lock
|
|
cd frontend && $(YARN) install
|
|
touch --no-create $(FRONTEND_YARN_MODULES)
|
|
|
|
# Build the backend to ./listmonk.
|
|
$(BIN): $(shell find . -type f -name "*.go")
|
|
CGO_ENABLED=0 go build -o ${BIN} -ldflags="-s -w -X 'main.buildString=${BUILDSTR}' -X 'main.versionString=${VERSION}'" cmd/*.go
|
|
|
|
# Run the backend.
|
|
.PHONY: run
|
|
run: $(BIN)
|
|
./${BIN}
|
|
|
|
# Build the JS frontend into frontend/dist.
|
|
$(FRONTEND_DIST): $(FRONTEND_DEPS)
|
|
export VUE_APP_VERSION="${VERSION}" && cd frontend && $(YARN) build && mv dist/favicon.png dist/frontend/favicon.png
|
|
touch --no-create $(FRONTEND_DIST)
|
|
|
|
|
|
.PHONY: build-frontend
|
|
build-frontend: $(FRONTEND_DIST)
|
|
|
|
# Run the JS frontend server in dev mode.
|
|
.PHONY: run-frontend
|
|
run-frontend:
|
|
export VUE_APP_VERSION="${VERSION}" && cd frontend && $(YARN) serve
|
|
|
|
# Run Go tests.
|
|
.PHONY: test
|
|
test:
|
|
go test ./...
|
|
|
|
# Bundle all static assets including the JS frontend into the ./listmonk binary
|
|
# using stuffbin (installed with make deps).
|
|
.PHONY: dist
|
|
dist: $(STUFFBIN) build build-frontend
|
|
$(STUFFBIN) -a stuff -in ${BIN} -out ${BIN} ${STATIC}
|
|
|
|
# pack-releases runns stuffbin packing on the given binary. This is used
|
|
# in the .goreleaser post-build hook.
|
|
.PHONY: pack-bin
|
|
pack-bin: $(STUFFBIN)
|
|
$(STUFFBIN) -a stuff -in ${BIN} -out ${BIN} ${STATIC}
|
|
|
|
# Use goreleaser to do a dry run producing local builds.
|
|
.PHONY: release-dry
|
|
release-dry:
|
|
goreleaser --parallelism 1 --rm-dist --snapshot --skip-validate --skip-publish
|
|
|
|
# Use goreleaser to build production releases and publish them.
|
|
.PHONY: release
|
|
release:
|
|
goreleaser --parallelism 1 --rm-dist --skip-validate
|