mirror of
https://github.com/knadh/listmonk.git
synced 2025-01-08 15:27:44 +08:00
d27e16e9ca
- Use git to get tag and commit hash or fall back to extracting the values from the VERSION file if it is (from git archive)
87 lines
2.9 KiB
Makefile
87 lines
2.9 KiB
Makefile
# Try to get the commit hash from 1) git 2) the VERSION file 3) fallback.
|
|
LAST_COMMIT := $(or $(shell git rev-parse --short HEAD 2> /dev/null),$(shell head -n 1 VERSION | grep -oP -m 1 "^[a-z0-9]+$$"),"UNKNOWN")
|
|
|
|
# Try to get the semver from 1) git 2) the VERSION file 3) fallbakc.
|
|
VERSION := $(or $(shell git describe --tags --abbrev=0 2> /dev/null),$(shell grep -oP "tag: \K(.*)(?=,)" VERSION),"v0.0.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 in dev mode. The frontend assets in dev mode are loaded from disk from frontend/dist/frontend.
|
|
.PHONY: run
|
|
run:
|
|
CGO_ENABLED=0 go run -ldflags="-s -w -X 'main.buildString=${BUILDSTR}' -X 'main.versionString=${VERSION}' -X 'main.frontendDir=frontend/dist/frontend'" cmd/*.go
|
|
|
|
# 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
|