2020-06-22 23:51:57 +00:00
|
|
|
IS_WIN =
|
|
|
|
ifeq (${SHELL}, sh.exe)
|
|
|
|
IS_WIN = true
|
|
|
|
endif
|
|
|
|
ifeq (${SHELL}, cmd)
|
|
|
|
IS_WIN = true
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef IS_WIN
|
2019-07-28 03:19:54 +00:00
|
|
|
SEPARATOR := &&
|
|
|
|
SET := set
|
Add golangci-lint workflow (#1759)
* Add golangci-lint workflow
* Add a bit more lenient linter timeout
1 Minute isn't always enough, so bump to 3.
* Document golangci, add make target
Document how to get golangci-lint in the README file. While here,
provide a QOL target in the makefile
for the linter, and make it part of validation.
* Introduce .golangci.yml
This is the default golangci-lint configuration file location. Use it.
Move configuration into the yaml file, and enable the default set of
linters; we know we pass most of those.
* Add gofmt and revive to golangci-lint
Read the golangci-lint source code to figure out the configuration format.
Copy the configuration from `revive.toml` into the linter configuration.
* Do not set simplify on gofmt
The project currently runs without simplify. So for consistency, don't
make that a requirement for the linter.
* Add new-from-rev
Older issues should not be considered a failure for new PRs and issues.
Use new-from-from to make the current develop as the point-in-time for
when we consider errors.
Once in the tree, we can go and fix the older errors in separate
patches, taking a little bit at a time.
* Move to golangci-lint
Rewrite the way we run targets in the makefile, so it is split between
frontend and backend.
Use the frontend build steps in build.yml
Update README to reflect the new world order.
* Remove check-gofmt.sh
The tool now runs as part of golangci-lint, in particular through the
'validate' target in the Makefile.
* Remove targets for golangci-lint
Fold these targets into the `lint` target. While here, update README.
2021-09-27 00:41:59 +00:00
|
|
|
else
|
2020-06-22 23:51:57 +00:00
|
|
|
SEPARATOR := ;
|
|
|
|
SET := export
|
2019-07-28 03:19:54 +00:00
|
|
|
endif
|
|
|
|
|
2020-06-29 04:44:21 +00:00
|
|
|
# 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
|
|
|
|
|
2021-05-16 09:19:56 +00:00
|
|
|
export CGO_ENABLED = 1
|
|
|
|
|
Add golangci-lint workflow (#1759)
* Add golangci-lint workflow
* Add a bit more lenient linter timeout
1 Minute isn't always enough, so bump to 3.
* Document golangci, add make target
Document how to get golangci-lint in the README file. While here,
provide a QOL target in the makefile
for the linter, and make it part of validation.
* Introduce .golangci.yml
This is the default golangci-lint configuration file location. Use it.
Move configuration into the yaml file, and enable the default set of
linters; we know we pass most of those.
* Add gofmt and revive to golangci-lint
Read the golangci-lint source code to figure out the configuration format.
Copy the configuration from `revive.toml` into the linter configuration.
* Do not set simplify on gofmt
The project currently runs without simplify. So for consistency, don't
make that a requirement for the linter.
* Add new-from-rev
Older issues should not be considered a failure for new PRs and issues.
Use new-from-from to make the current develop as the point-in-time for
when we consider errors.
Once in the tree, we can go and fix the older errors in separate
patches, taking a little bit at a time.
* Move to golangci-lint
Rewrite the way we run targets in the makefile, so it is split between
frontend and backend.
Use the frontend build steps in build.yml
Update README to reflect the new world order.
* Remove check-gofmt.sh
The tool now runs as part of golangci-lint, in particular through the
'validate' target in the Makefile.
* Remove targets for golangci-lint
Fold these targets into the `lint` target. While here, update README.
2021-09-27 00:41:59 +00:00
|
|
|
.PHONY: release pre-build
|
2020-06-29 04:44:21 +00:00
|
|
|
|
|
|
|
release: generate ui build-release
|
2019-12-28 17:53:16 +00:00
|
|
|
|
2020-06-22 23:51:57 +00:00
|
|
|
pre-build:
|
2020-06-29 04:44:21 +00:00
|
|
|
ifndef BUILD_DATE
|
|
|
|
$(eval BUILD_DATE := $(shell go run -mod=vendor scripts/getDate.go))
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifndef GITHASH
|
2019-10-16 22:46:16 +00:00
|
|
|
$(eval GITHASH := $(shell git rev-parse --short HEAD))
|
2020-06-29 04:44:21 +00:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifndef STASH_VERSION
|
2020-02-06 19:39:08 +00:00
|
|
|
$(eval STASH_VERSION := $(shell git describe --tags --exclude latest_develop))
|
2020-06-29 04:44:21 +00:00
|
|
|
endif
|
2020-06-22 23:51:57 +00:00
|
|
|
|
|
|
|
build: pre-build
|
2020-06-29 04:44:21 +00:00
|
|
|
$(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)')
|
2021-09-08 05:30:15 +00:00
|
|
|
go build $(OUTPUT) -mod=vendor -v -tags "sqlite_omit_load_extension osusergo netgo" $(GO_BUILD_FLAGS) -ldflags "$(LDFLAGS) $(EXTRA_LDFLAGS)"
|
2020-06-29 04:44:21 +00:00
|
|
|
|
|
|
|
# strips debug symbols from the release build
|
|
|
|
build-release: EXTRA_LDFLAGS := -s -w
|
2021-09-08 05:30:15 +00:00
|
|
|
build-release: GO_BUILD_FLAGS := -trimpath
|
2020-06-29 04:44:21 +00:00
|
|
|
build-release: build
|
2019-02-10 12:16:29 +00:00
|
|
|
|
2020-09-14 01:12:36 +00:00
|
|
|
build-release-static: EXTRA_LDFLAGS := -extldflags=-static -s -w
|
2021-09-08 05:30:15 +00:00
|
|
|
build-release-static: GO_BUILD_FLAGS := -trimpath
|
2020-09-14 01:12:36 +00:00
|
|
|
build-release-static: build
|
|
|
|
|
2021-05-16 09:19:56 +00:00
|
|
|
# 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
|
|
|
|
|
2021-09-08 05:30:15 +00:00
|
|
|
cross-compile-osx-intel: export GOOS := darwin
|
|
|
|
cross-compile-osx-intel: export GOARCH := amd64
|
|
|
|
cross-compile-osx-intel: export CC := o64-clang
|
|
|
|
cross-compile-osx-intel: export CXX := o64-clang++
|
|
|
|
cross-compile-osx-intel: OUTPUT := -o dist/stash-osx
|
2021-05-16 09:19:56 +00:00
|
|
|
# can't use static build for OSX
|
2021-09-08 05:30:15 +00:00
|
|
|
cross-compile-osx-intel: build-release
|
|
|
|
|
|
|
|
cross-compile-osx-applesilicon: export GOOS := darwin
|
|
|
|
cross-compile-osx-applesilicon: export GOARCH := arm64
|
|
|
|
cross-compile-osx-applesilicon: export CC := oa64e-clang
|
|
|
|
cross-compile-osx-applesilicon: export CXX := oa64e-clang++
|
|
|
|
cross-compile-osx-applesilicon: OUTPUT := -o dist/stash-osx-applesilicon
|
|
|
|
# can't use static build for OSX
|
|
|
|
cross-compile-osx-applesilicon: build-release
|
2021-05-16 09:19:56 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
|
Add golangci-lint workflow (#1759)
* Add golangci-lint workflow
* Add a bit more lenient linter timeout
1 Minute isn't always enough, so bump to 3.
* Document golangci, add make target
Document how to get golangci-lint in the README file. While here,
provide a QOL target in the makefile
for the linter, and make it part of validation.
* Introduce .golangci.yml
This is the default golangci-lint configuration file location. Use it.
Move configuration into the yaml file, and enable the default set of
linters; we know we pass most of those.
* Add gofmt and revive to golangci-lint
Read the golangci-lint source code to figure out the configuration format.
Copy the configuration from `revive.toml` into the linter configuration.
* Do not set simplify on gofmt
The project currently runs without simplify. So for consistency, don't
make that a requirement for the linter.
* Add new-from-rev
Older issues should not be considered a failure for new PRs and issues.
Use new-from-from to make the current develop as the point-in-time for
when we consider errors.
Once in the tree, we can go and fix the older errors in separate
patches, taking a little bit at a time.
* Move to golangci-lint
Rewrite the way we run targets in the makefile, so it is split between
frontend and backend.
Use the frontend build steps in build.yml
Update README to reflect the new world order.
* Remove check-gofmt.sh
The tool now runs as part of golangci-lint, in particular through the
'validate' target in the Makefile.
* Remove targets for golangci-lint
Fold these targets into the `lint` target. While here, update README.
2021-09-27 00:41:59 +00:00
|
|
|
cross-compile-all:
|
|
|
|
make cross-compile-windows
|
|
|
|
make cross-compile-osx-intel
|
|
|
|
make cross-compile-osx-applesilicon
|
|
|
|
make cross-compile-linux
|
|
|
|
make cross-compile-linux-arm64v8
|
|
|
|
make cross-compile-linux-arm32v7
|
2021-09-08 05:30:15 +00:00
|
|
|
make cross-compile-pi
|
2021-05-16 09:19:56 +00:00
|
|
|
|
2019-02-14 20:06:37 +00:00
|
|
|
# Regenerates GraphQL files
|
2021-09-08 05:30:15 +00:00
|
|
|
generate: generate-backend generate-frontend
|
|
|
|
|
|
|
|
.PHONY: generate-frontend
|
|
|
|
generate-frontend:
|
2020-04-02 21:46:23 +00:00
|
|
|
cd ui/v2.5 && yarn run gqlgen
|
2019-02-14 20:06:37 +00:00
|
|
|
|
2021-09-08 05:30:15 +00:00
|
|
|
.PHONY: generate-backend
|
|
|
|
generate-backend:
|
|
|
|
go generate -mod=vendor
|
|
|
|
|
2020-09-17 09:57:18 +00:00
|
|
|
# Regenerates stash-box client files
|
|
|
|
.PHONY: generate-stash-box-client
|
|
|
|
generate-stash-box-client:
|
|
|
|
go run -mod=vendor github.com/Yamashou/gqlgenc
|
|
|
|
|
2019-02-14 20:06:37 +00:00
|
|
|
# Runs gofmt -w on the project's source code, modifying any files that do not match its style.
|
|
|
|
.PHONY: fmt
|
|
|
|
fmt:
|
2019-07-28 03:54:27 +00:00
|
|
|
go fmt ./...
|
2019-02-14 20:06:37 +00:00
|
|
|
|
|
|
|
.PHONY: lint
|
|
|
|
lint:
|
Add golangci-lint workflow (#1759)
* Add golangci-lint workflow
* Add a bit more lenient linter timeout
1 Minute isn't always enough, so bump to 3.
* Document golangci, add make target
Document how to get golangci-lint in the README file. While here,
provide a QOL target in the makefile
for the linter, and make it part of validation.
* Introduce .golangci.yml
This is the default golangci-lint configuration file location. Use it.
Move configuration into the yaml file, and enable the default set of
linters; we know we pass most of those.
* Add gofmt and revive to golangci-lint
Read the golangci-lint source code to figure out the configuration format.
Copy the configuration from `revive.toml` into the linter configuration.
* Do not set simplify on gofmt
The project currently runs without simplify. So for consistency, don't
make that a requirement for the linter.
* Add new-from-rev
Older issues should not be considered a failure for new PRs and issues.
Use new-from-from to make the current develop as the point-in-time for
when we consider errors.
Once in the tree, we can go and fix the older errors in separate
patches, taking a little bit at a time.
* Move to golangci-lint
Rewrite the way we run targets in the makefile, so it is split between
frontend and backend.
Use the frontend build steps in build.yml
Update README to reflect the new world order.
* Remove check-gofmt.sh
The tool now runs as part of golangci-lint, in particular through the
'validate' target in the Makefile.
* Remove targets for golangci-lint
Fold these targets into the `lint` target. While here, update README.
2021-09-27 00:41:59 +00:00
|
|
|
golangci-lint run
|
2019-07-28 03:19:54 +00:00
|
|
|
|
2019-11-25 02:10:16 +00:00
|
|
|
# runs unit tests - excluding integration tests
|
|
|
|
.PHONY: test
|
Add golangci-lint workflow (#1759)
* Add golangci-lint workflow
* Add a bit more lenient linter timeout
1 Minute isn't always enough, so bump to 3.
* Document golangci, add make target
Document how to get golangci-lint in the README file. While here,
provide a QOL target in the makefile
for the linter, and make it part of validation.
* Introduce .golangci.yml
This is the default golangci-lint configuration file location. Use it.
Move configuration into the yaml file, and enable the default set of
linters; we know we pass most of those.
* Add gofmt and revive to golangci-lint
Read the golangci-lint source code to figure out the configuration format.
Copy the configuration from `revive.toml` into the linter configuration.
* Do not set simplify on gofmt
The project currently runs without simplify. So for consistency, don't
make that a requirement for the linter.
* Add new-from-rev
Older issues should not be considered a failure for new PRs and issues.
Use new-from-from to make the current develop as the point-in-time for
when we consider errors.
Once in the tree, we can go and fix the older errors in separate
patches, taking a little bit at a time.
* Move to golangci-lint
Rewrite the way we run targets in the makefile, so it is split between
frontend and backend.
Use the frontend build steps in build.yml
Update README to reflect the new world order.
* Remove check-gofmt.sh
The tool now runs as part of golangci-lint, in particular through the
'validate' target in the Makefile.
* Remove targets for golangci-lint
Fold these targets into the `lint` target. While here, update README.
2021-09-27 00:41:59 +00:00
|
|
|
test:
|
2019-11-25 02:10:16 +00:00
|
|
|
go test -mod=vendor ./...
|
|
|
|
|
|
|
|
# runs all tests - including integration tests
|
|
|
|
.PHONY: it
|
|
|
|
it:
|
|
|
|
go test -mod=vendor -tags=integration ./...
|
|
|
|
|
2020-09-15 07:28:53 +00:00
|
|
|
# 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
|
|
|
|
|
Add golangci-lint workflow (#1759)
* Add golangci-lint workflow
* Add a bit more lenient linter timeout
1 Minute isn't always enough, so bump to 3.
* Document golangci, add make target
Document how to get golangci-lint in the README file. While here,
provide a QOL target in the makefile
for the linter, and make it part of validation.
* Introduce .golangci.yml
This is the default golangci-lint configuration file location. Use it.
Move configuration into the yaml file, and enable the default set of
linters; we know we pass most of those.
* Add gofmt and revive to golangci-lint
Read the golangci-lint source code to figure out the configuration format.
Copy the configuration from `revive.toml` into the linter configuration.
* Do not set simplify on gofmt
The project currently runs without simplify. So for consistency, don't
make that a requirement for the linter.
* Add new-from-rev
Older issues should not be considered a failure for new PRs and issues.
Use new-from-from to make the current develop as the point-in-time for
when we consider errors.
Once in the tree, we can go and fix the older errors in separate
patches, taking a little bit at a time.
* Move to golangci-lint
Rewrite the way we run targets in the makefile, so it is split between
frontend and backend.
Use the frontend build steps in build.yml
Update README to reflect the new world order.
* Remove check-gofmt.sh
The tool now runs as part of golangci-lint, in particular through the
'validate' target in the Makefile.
* Remove targets for golangci-lint
Fold these targets into the `lint` target. While here, update README.
2021-09-27 00:41:59 +00:00
|
|
|
# installs UI dependencies. Run when first cloning repository, or if UI
|
2020-04-29 02:13:08 +00:00
|
|
|
# dependencies have changed
|
|
|
|
.PHONY: pre-ui
|
|
|
|
pre-ui:
|
|
|
|
cd ui/v2.5 && yarn install --frozen-lockfile
|
|
|
|
|
2021-09-22 03:08:34 +00:00
|
|
|
.PHONY: ui
|
|
|
|
ui: pre-build
|
2020-06-29 04:44:21 +00:00
|
|
|
$(SET) REACT_APP_DATE="$(BUILD_DATE)" $(SEPARATOR) \
|
2020-06-22 23:51:57 +00:00
|
|
|
$(SET) REACT_APP_GITHASH=$(GITHASH) $(SEPARATOR) \
|
|
|
|
$(SET) REACT_APP_STASH_VERSION=$(STASH_VERSION) $(SEPARATOR) \
|
2020-04-02 21:46:23 +00:00
|
|
|
cd ui/v2.5 && yarn build
|
2020-06-24 05:46:37 +00:00
|
|
|
|
|
|
|
.PHONY: ui-start
|
2020-06-22 23:51:57 +00:00
|
|
|
ui-start: pre-build
|
2020-06-29 04:44:21 +00:00
|
|
|
$(SET) REACT_APP_DATE="$(BUILD_DATE)" $(SEPARATOR) \
|
2020-06-22 23:51:57 +00:00
|
|
|
$(SET) REACT_APP_GITHASH=$(GITHASH) $(SEPARATOR) \
|
|
|
|
$(SET) REACT_APP_STASH_VERSION=$(STASH_VERSION) $(SEPARATOR) \
|
|
|
|
cd ui/v2.5 && yarn start
|
|
|
|
|
2020-06-24 05:46:37 +00:00
|
|
|
.PHONY: fmt-ui
|
2020-04-29 02:13:08 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
# runs all of the tests and checks required for a PR to be accepted
|
|
|
|
.PHONY: validate
|
Add golangci-lint workflow (#1759)
* Add golangci-lint workflow
* Add a bit more lenient linter timeout
1 Minute isn't always enough, so bump to 3.
* Document golangci, add make target
Document how to get golangci-lint in the README file. While here,
provide a QOL target in the makefile
for the linter, and make it part of validation.
* Introduce .golangci.yml
This is the default golangci-lint configuration file location. Use it.
Move configuration into the yaml file, and enable the default set of
linters; we know we pass most of those.
* Add gofmt and revive to golangci-lint
Read the golangci-lint source code to figure out the configuration format.
Copy the configuration from `revive.toml` into the linter configuration.
* Do not set simplify on gofmt
The project currently runs without simplify. So for consistency, don't
make that a requirement for the linter.
* Add new-from-rev
Older issues should not be considered a failure for new PRs and issues.
Use new-from-from to make the current develop as the point-in-time for
when we consider errors.
Once in the tree, we can go and fix the older errors in separate
patches, taking a little bit at a time.
* Move to golangci-lint
Rewrite the way we run targets in the makefile, so it is split between
frontend and backend.
Use the frontend build steps in build.yml
Update README to reflect the new world order.
* Remove check-gofmt.sh
The tool now runs as part of golangci-lint, in particular through the
'validate' target in the Makefile.
* Remove targets for golangci-lint
Fold these targets into the `lint` target. While here, update README.
2021-09-27 00:41:59 +00:00
|
|
|
validate: validate-frontend validate-backend
|
|
|
|
|
|
|
|
# runs all of the frontend PR-acceptance steps
|
|
|
|
.PHONY: validate-frontend
|
|
|
|
validate-frontend: ui-validate
|
|
|
|
|
|
|
|
# runs all of the backend PR-acceptance steps
|
|
|
|
.PHONY: validate-backend
|
|
|
|
validate-backend: lint it
|
2021-09-08 05:30:15 +00:00
|
|
|
|
|
|
|
# locally builds and tags a 'stash/build' docker image
|
|
|
|
.PHONY: docker-build
|
Add golangci-lint workflow (#1759)
* Add golangci-lint workflow
* Add a bit more lenient linter timeout
1 Minute isn't always enough, so bump to 3.
* Document golangci, add make target
Document how to get golangci-lint in the README file. While here,
provide a QOL target in the makefile
for the linter, and make it part of validation.
* Introduce .golangci.yml
This is the default golangci-lint configuration file location. Use it.
Move configuration into the yaml file, and enable the default set of
linters; we know we pass most of those.
* Add gofmt and revive to golangci-lint
Read the golangci-lint source code to figure out the configuration format.
Copy the configuration from `revive.toml` into the linter configuration.
* Do not set simplify on gofmt
The project currently runs without simplify. So for consistency, don't
make that a requirement for the linter.
* Add new-from-rev
Older issues should not be considered a failure for new PRs and issues.
Use new-from-from to make the current develop as the point-in-time for
when we consider errors.
Once in the tree, we can go and fix the older errors in separate
patches, taking a little bit at a time.
* Move to golangci-lint
Rewrite the way we run targets in the makefile, so it is split between
frontend and backend.
Use the frontend build steps in build.yml
Update README to reflect the new world order.
* Remove check-gofmt.sh
The tool now runs as part of golangci-lint, in particular through the
'validate' target in the Makefile.
* Remove targets for golangci-lint
Fold these targets into the `lint` target. While here, update README.
2021-09-27 00:41:59 +00:00
|
|
|
docker-build:
|
2021-09-22 03:08:34 +00:00
|
|
|
docker build -t stash/build -f docker/build/x86_64/Dockerfile .
|