100 lines
3.0 KiB
Makefile
100 lines
3.0 KiB
Makefile
SHELL := /bin/bash
|
|
BASE_PATH := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
|
VERSION ?= $(shell git describe --tags --always --match=v* 2> /dev/null || \
|
|
cat $(CURDIR)/.version 2> /dev/null || echo v0)
|
|
VERSION_HASH = $(shell git rev-parse HEAD)
|
|
|
|
BIN = $(BASE_PATH)/bin
|
|
PATH := $(BIN):$(PATH)
|
|
export PATH
|
|
|
|
# printing
|
|
V = 0
|
|
Q = $(if $(filter 1,$V),,@)
|
|
M = $(shell printf "\033[34;1m▶\033[0m")
|
|
|
|
GO = GOGC=off go
|
|
# go module
|
|
MODULE = $(shell env GO111MODULE=on $(GO) list -m)
|
|
|
|
DATE ?= $(shell date +%FT%T%z)
|
|
VERSION ?= $(shell git describe --tags --always --match=v* 2> /dev/null || \
|
|
cat $(CURDIR)/.version 2> /dev/null || echo v0)
|
|
VERSION_HASH = $(shell git rev-parse HEAD)
|
|
BRANCH = $(shell git rev-parse --abbrev-ref HEAD)
|
|
|
|
LDFLAGS += -X "$(MODULE)/varsion.Version=$(VERSION)" -X "$(MODULE)/varsion.CommitSHA=$(VERSION_HASH)"
|
|
|
|
# tools
|
|
$(BIN):
|
|
@mkdir -p $@
|
|
$(BIN)/%: | $(BIN) ; $(info $(M) installing $(PACKAGE)…)
|
|
$Q env GOBIN=$(BIN) $(GO) install $(PACKAGE)
|
|
|
|
GOLANGCI_LINT = $(BIN)/golangci-lint
|
|
$(BIN)/golangci-lint: PACKAGE=github.com/golangci/golangci-lint/cmd/golangci-lint@v1.37.1
|
|
|
|
GOIMPORTS = $(BIN)/goimports
|
|
$(BIN)/goimports: PACKAGE=golang.org/x/tools/cmd/goimports@v0.1.0
|
|
|
|
RICE = $(BIN)/rice
|
|
$(BIN)/rice: PACKAGE=github.com/GeertJohan/go.rice/rice@v1.0.2
|
|
|
|
## build: Build
|
|
.PHONY: build
|
|
build: | build-frontend build-backend ; $(info $(M) building…)
|
|
|
|
## build-frontend: Build frontend
|
|
.PHONY: build-frontend
|
|
build-frontend: | ; $(info $(M) building frontend…)
|
|
$Q cd frontend && npm ci && npm run build
|
|
|
|
## build-backend: Build backend
|
|
.PHONY: build-backend
|
|
build-backend: bundle-frontend | ; $(info $(M) building backend…)
|
|
$Q $(GO) build -ldflags '$(LDFLAGS)' -o filebrowser
|
|
|
|
bundle-frontend: | $(RICE) ; $(info $(M) building backend…)
|
|
$Q cd ./http && rm -rf rice-box.go && $(RICE) embed-go
|
|
|
|
## test: Run all tests
|
|
.PHONY: test
|
|
test: | test-frontend test-backend ; $(info $(M) running tests…)
|
|
|
|
## test-frontend: Run frontend tests
|
|
.PHONY: test-frontend
|
|
test-frontend: | ; $(info $(M) running frontend tests…)
|
|
|
|
## test-backend: Run backend tests
|
|
.PHONY: test-backend
|
|
test-backend: | $(RICE) ; $(info $(M) running backend tests…)
|
|
$Q $(GO) test -v ./...
|
|
|
|
## lint: Lint
|
|
.PHONY: lint
|
|
lint: lint-frontend lint-backend lint-commits | ; $(info $(M) running all linters…)
|
|
|
|
## lint-frontend: Lint frontend
|
|
.PHONY: lint-frontend
|
|
lint-frontend: | ; $(info $(M) running frontend linters…)
|
|
$Q cd frontend && npm ci && npm run lint
|
|
|
|
## lint-backend: Lint backend
|
|
.PHONY: lint-backend
|
|
lint-backend: | $(GOLANGCI_LINT) ; $(info $(M) running backend linters…)
|
|
$Q $(GOLANGCI_LINT) run
|
|
|
|
## lint-commits: Lint commits
|
|
.PHONY: lint-commits
|
|
lint-commits: | ; $(info $(M) running commitlint…)
|
|
$Q ./scripts/commitlint.sh
|
|
|
|
## bump-version: Bump app version
|
|
.PHONY: bump-version
|
|
bump-version: | ; $(info $(M) creating a new release…)
|
|
$Q ./scripts/bump_version.sh
|
|
|
|
## help: Show this help
|
|
.PHONY: help
|
|
help:
|
|
@sed -n 's/^## //p' $(MAKEFILE_LIST) | column -t -s ':' | sed -e 's/^/ /' | sort
|