mirror of https://github.com/stashapp/stash.git
193 lines
5.4 KiB
Makefile
193 lines
5.4 KiB
Makefile
IS_WIN =
|
|
ifeq (${SHELL}, sh.exe)
|
|
IS_WIN = true
|
|
endif
|
|
ifeq (${SHELL}, cmd)
|
|
IS_WIN = true
|
|
endif
|
|
|
|
ifdef IS_WIN
|
|
SEPARATOR := &&
|
|
SET := set
|
|
else
|
|
SEPARATOR := ;
|
|
SET := export
|
|
endif
|
|
|
|
# set LDFLAGS environment variable to any extra ldflags required
|
|
# set OUTPUT to generate a specific binary name
|
|
|
|
LDFLAGS := $(LDFLAGS)
|
|
ifdef OUTPUT
|
|
OUTPUT := -o $(OUTPUT)
|
|
endif
|
|
|
|
export CGO_ENABLED = 1
|
|
export GO111MODULE = on
|
|
|
|
.PHONY: release pre-build install clean
|
|
|
|
release: generate ui build-release
|
|
|
|
pre-build:
|
|
ifndef BUILD_DATE
|
|
$(eval BUILD_DATE := $(shell go run -mod=vendor scripts/getDate.go))
|
|
endif
|
|
|
|
ifndef GITHASH
|
|
$(eval GITHASH := $(shell git rev-parse --short HEAD))
|
|
endif
|
|
|
|
ifndef STASH_VERSION
|
|
$(eval STASH_VERSION := $(shell git describe --tags --exclude latest_develop))
|
|
endif
|
|
|
|
build: pre-build
|
|
$(eval LDFLAGS := $(LDFLAGS) -X 'github.com/stashapp/stash/pkg/api.version=$(STASH_VERSION)' -X 'github.com/stashapp/stash/pkg/api.buildstamp=$(BUILD_DATE)' -X 'github.com/stashapp/stash/pkg/api.githash=$(GITHASH)')
|
|
go build $(OUTPUT) -mod=vendor -v -tags "sqlite_omit_load_extension osusergo netgo" -ldflags "$(LDFLAGS) $(EXTRA_LDFLAGS)"
|
|
|
|
# strips debug symbols from the release build
|
|
# consider -trimpath in go build if we move to go 1.13+
|
|
build-release: EXTRA_LDFLAGS := -s -w
|
|
build-release: build
|
|
|
|
build-release-static: EXTRA_LDFLAGS := -extldflags=-static -s -w
|
|
build-release-static: build
|
|
|
|
# cross-compile- targets should be run within the compiler docker container
|
|
cross-compile-windows: export GOOS := windows
|
|
cross-compile-windows: export GOARCH := amd64
|
|
cross-compile-windows: export CC := x86_64-w64-mingw32-gcc
|
|
cross-compile-windows: export CXX := x86_64-w64-mingw32-g++
|
|
cross-compile-windows: OUTPUT := -o dist/stash-win.exe
|
|
cross-compile-windows: build-release-static
|
|
|
|
cross-compile-osx: export GOOS := darwin
|
|
cross-compile-osx: export GOARCH := amd64
|
|
cross-compile-osx: export CC := o64-clang
|
|
cross-compile-osx: export CXX := o64-clang++
|
|
cross-compile-osx: OUTPUT := -o dist/stash-osx
|
|
# can't use static build for OSX
|
|
cross-compile-osx: build-release
|
|
|
|
cross-compile-linux: export GOOS := linux
|
|
cross-compile-linux: export GOARCH := amd64
|
|
cross-compile-linux: OUTPUT := -o dist/stash-linux
|
|
cross-compile-linux: build-release-static
|
|
|
|
cross-compile-linux-arm64v8: export GOOS := linux
|
|
cross-compile-linux-arm64v8: export GOARCH := arm64
|
|
cross-compile-linux-arm64v8: export CC := aarch64-linux-gnu-gcc
|
|
cross-compile-linux-arm64v8: OUTPUT := -o dist/stash-linux-arm64v8
|
|
cross-compile-linux-arm64v8: build-release-static
|
|
|
|
cross-compile-linux-arm32v7: export GOOS := linux
|
|
cross-compile-linux-arm32v7: export GOARCH := arm
|
|
cross-compile-linux-arm32v7: export GOARM := 7
|
|
cross-compile-linux-arm32v7: export CC := arm-linux-gnueabihf-gcc
|
|
cross-compile-linux-arm32v7: OUTPUT := -o dist/stash-linux-arm32v7
|
|
cross-compile-linux-arm32v7: build-release-static
|
|
|
|
cross-compile-pi: export GOOS := linux
|
|
cross-compile-pi: export GOARCH := arm
|
|
cross-compile-pi: export GOARM := 6
|
|
cross-compile-pi: export CC := arm-linux-gnueabi-gcc
|
|
cross-compile-pi: OUTPUT := -o dist/stash-pi
|
|
cross-compile-pi: build-release-static
|
|
|
|
cross-compile-all: cross-compile-windows cross-compile-osx cross-compile-linux cross-compile-linux-arm64v8 cross-compile-linux-arm32v7 cross-compile-pi
|
|
|
|
install:
|
|
packr2 install
|
|
|
|
clean:
|
|
packr2 clean
|
|
|
|
# Regenerates GraphQL files
|
|
.PHONY: generate
|
|
generate:
|
|
go generate -mod=vendor
|
|
cd ui/v2.5 && yarn run gqlgen
|
|
|
|
# Regenerates stash-box client files
|
|
.PHONY: generate-stash-box-client
|
|
generate-stash-box-client:
|
|
go run -mod=vendor github.com/Yamashou/gqlgenc
|
|
|
|
# Runs gofmt -w on the project's source code, modifying any files that do not match its style.
|
|
.PHONY: fmt
|
|
fmt:
|
|
go fmt ./...
|
|
|
|
# Ensures that changed files have had gofmt run on them
|
|
.PHONY: fmt-check
|
|
fmt-check:
|
|
sh ./scripts/check-gofmt.sh
|
|
|
|
# Runs go vet on the project's source code.
|
|
.PHONY: vet
|
|
vet:
|
|
go vet -mod=vendor ./...
|
|
|
|
.PHONY: lint
|
|
lint:
|
|
revive -config revive.toml -exclude ./vendor/... ./...
|
|
|
|
# runs unit tests - excluding integration tests
|
|
.PHONY: test
|
|
test:
|
|
go test -mod=vendor ./...
|
|
|
|
# runs all tests - including integration tests
|
|
.PHONY: it
|
|
it:
|
|
go test -mod=vendor -tags=integration ./...
|
|
|
|
# generates test mocks
|
|
.PHONY: generate-test-mocks
|
|
generate-test-mocks:
|
|
go run -mod=vendor github.com/vektra/mockery/v2 --dir ./pkg/models --name '.*ReaderWriter' --outpkg mocks --output ./pkg/models/mocks
|
|
|
|
# installs UI dependencies. Run when first cloning repository, or if UI
|
|
# dependencies have changed
|
|
.PHONY: pre-ui
|
|
pre-ui:
|
|
cd ui/v2.5 && yarn install --frozen-lockfile
|
|
|
|
.PHONY: ui-only
|
|
ui-only: pre-build
|
|
$(SET) REACT_APP_DATE="$(BUILD_DATE)" $(SEPARATOR) \
|
|
$(SET) REACT_APP_GITHASH=$(GITHASH) $(SEPARATOR) \
|
|
$(SET) REACT_APP_STASH_VERSION=$(STASH_VERSION) $(SEPARATOR) \
|
|
cd ui/v2.5 && yarn build
|
|
|
|
.PHONY: ui
|
|
ui: ui-only
|
|
packr2
|
|
|
|
.PHONY: ui-start
|
|
ui-start: pre-build
|
|
$(SET) REACT_APP_DATE="$(BUILD_DATE)" $(SEPARATOR) \
|
|
$(SET) REACT_APP_GITHASH=$(GITHASH) $(SEPARATOR) \
|
|
$(SET) REACT_APP_STASH_VERSION=$(STASH_VERSION) $(SEPARATOR) \
|
|
cd ui/v2.5 && yarn start
|
|
|
|
.PHONY: fmt-ui
|
|
fmt-ui:
|
|
cd ui/v2.5 && yarn format
|
|
|
|
# runs tests and checks on the UI and builds it
|
|
.PHONY: ui-validate
|
|
ui-validate:
|
|
cd ui/v2.5 && yarn run validate
|
|
|
|
# just repacks the packr files - use when updating migrations and packed files without
|
|
# rebuilding the UI
|
|
.PHONY: packr
|
|
packr:
|
|
packr2
|
|
|
|
# runs all of the tests and checks required for a PR to be accepted
|
|
.PHONY: validate
|
|
validate: ui-validate fmt-check vet lint it
|