photoprism/Makefile

229 lines
9.5 KiB
Makefile

.PHONY: ;
.SILENT: ; # no need for @
.ONESHELL: ; # recipes execute in same shell
.NOTPARALLEL: ; # wait for target to finish
.EXPORT_ALL_VARIABLES: ; # send all vars to shell
export GO111MODULE=on
GOIMPORTS=goimports
BINARY_NAME=photoprism
DOCKER_TAG=`date -u +%Y%m%d`
UID=`(id -u)`
HASRICHGO := $(shell which richgo)
ifdef HASRICHGO
GOTEST=richgo test
else
GOTEST=go test
endif
all: dep build
dep: dep-tensorflow dep-js dep-go
build: generate build-js build-go
install: install-bin install-assets
test: test-js test-go
test-go: reset-test-db run-test-go
test-short: reset-test-db run-test-short
acceptance-run-chromium: acceptance-restart acceptance acceptance-stop
acceptance-run-firefox: acceptance-restart acceptance-firefox acceptance-stop
test-all: test acceptance-run-chromium
fmt: fmt-js fmt-go fmt-imports
upgrade: dep-upgrade-js dep-upgrade
clean-local: clean-local-config clean-local-cache
clean-install: clean-local dep build-js install-bin install-assets
acceptance-restart:
cp -f storage/acceptance/backup.db storage/acceptance/index.db
cp -f storage/acceptance/config/settingsBackup.yml storage/acceptance/config/settings.yml
rm -rf storage/acceptance/originals/2010
rm -rf storage/acceptance/originals/2020
rm -rf storage/acceptance/originals/2011
rm -rf storage/acceptance/originals/2013
rm -rf storage/acceptance/originals/2017
go run cmd/photoprism/photoprism.go --public --upload-nsfw=false --database-driver sqlite --database-dsn ./storage/acceptance/index.db --import-path ./storage/acceptance/import --http-port=2343 --config-path ./storage/acceptance/config --originals-path ./storage/acceptance/originals --storage-path ./storage/acceptance --test --backup-path ./storage/acceptance/backup --disable-exiftool --disable-backups start -d
acceptance-stop:
go run cmd/photoprism/photoprism.go --public --upload-nsfw=false --database-driver sqlite --database-dsn ./storage/acceptance/index.db --import-path ./storage/acceptance/import --http-port=2343 --config-path ./storage/acceptance/config --originals-path ./storage/acceptance/originals --storage-path ./storage/acceptance --test --backup-path ./storage/acceptance/backup --disable-exiftool --disable-backups stop
acceptance-long-restart:
cp -f storage/acceptance-long/backup.db storage/acceptance-long/index.db
cp -f storage/acceptance-long/config/settingsBackup.yml storage/acceptance-long/config/settings.yml
rm -rf storage/acceptance-long/cache/thumbnails
rm -rf storage/acceptance-long/cache/json
rm -rf storage/acceptance-long/albums/folder
rm -rf storage/acceptance-long/albums/month
rm -rf storage/acceptance-long/albums/state
rm -rf storage/acceptance-long/sidecar
go run cmd/photoprism/photoprism.go --public=false --thumb-uncached=false --upload-nsfw=false --database-driver sqlite --database-dsn ./storage/acceptance-long/index.db --import-path ./storage/acceptance-long/import --http-port=2343 --config-path ./storage/acceptance-long/config --originals-path ./storage/acceptance-long/originals --storage-path ./storage/acceptance-long --test --backup-path ./storage/acceptance-long/backup start -d
acceptance-long-stop:
go run cmd/photoprism/photoprism.go --public=false --thumb-uncached=false --upload-nsfw=false --database-driver sqlite --database-dsn ./storage/acceptance-long/index.db --import-path ./storage/acceptance-long/import --http-port=2343 --config-path ./storage/acceptance-long/config --originals-path ./storage/acceptance-long/originals --storage-path ./storage/acceptance-long --test --backup-path ./storage/acceptance-long/backup stop
acceptance-restore-db:
cp -f storage/acceptance/config/settingsBackup.yml storage/acceptance/config/settings.yml
cp -f storage/acceptance/backup.db storage/acceptance/index.db
rm -rf storage/acceptance/originals/2010
rm -rf storage/acceptance/originals/2013
start:
go run cmd/photoprism/photoprism.go start -d
stop:
go run cmd/photoprism/photoprism.go stop
terminal:
docker-compose exec -u $(UID) photoprism bash
root-terminal:
docker-compose exec -u root photoprism bash
migrate:
go run cmd/photoprism/photoprism.go migrate
generate:
go generate ./pkg/... ./internal/...
go fmt ./pkg/... ./internal/...
install-bin:
scripts/build.sh prod ~/.local/bin/$(BINARY_NAME)
install-assets:
$(info Installing assets)
mkdir -p ~/.photoprism/storage/config
mkdir -p ~/.photoprism/storage/cache
mkdir -p ~/.photoprism/storage
mkdir -p ~/.photoprism/assets
mkdir -p ~/Pictures/Originals
mkdir -p ~/Pictures/Import
cp -r assets/locales assets/nasnet assets/nsfw assets/profiles assets/static assets/templates ~/.photoprism/assets
find ~/.photoprism/assets -name '.*' -type f -delete
clean-local-assets:
rm -rf ~/.photoprism/assets/*
clean-local-cache:
rm -rf ~/.photoprism/storage/cache/*
clean-local-config:
rm -f ~/.photoprism/storage/config/*
dep-list:
go list -u -m -json all | go-mod-outdated -direct
dep-js:
(cd frontend && npm install --silent --legacy-peer-deps && npm audit fix)
dep-go:
go build -v ./...
dep-upgrade:
go get -u -t ./...
dep-upgrade-js:
(cd frontend && npm --depth 3 update --legacy-peer-deps)
dep-tensorflow:
scripts/download-nasnet.sh
scripts/download-nsfw.sh
zip-nasnet:
(cd assets && zip -r nasnet.zip nasnet -x "*/.*" -x "*/version.txt")
zip-nsfw:
(cd assets && zip -r nsfw.zip nsfw -x "*/.*" -x "*/version.txt")
build-js:
(cd frontend && env NODE_ENV=production npm run build)
build-go:
rm -f $(BINARY_NAME)
scripts/build.sh debug $(BINARY_NAME)
build-race:
rm -f $(BINARY_NAME)
scripts/build.sh race $(BINARY_NAME)
build-static:
rm -f $(BINARY_NAME)
scripts/build.sh static $(BINARY_NAME)
build-tensorflow:
docker build -t photoprism/tensorflow:build docker/tensorflow
docker run -ti photoprism/tensorflow:build bash
build-tensorflow-arm64:
docker build -t photoprism/tensorflow:arm64 docker/tensorflow/arm64
docker run -ti photoprism/tensorflow:arm64 bash
watch-js:
(cd frontend && env NODE_ENV=development npm run watch)
test-js:
$(info Running JS unit tests...)
(cd frontend && env NODE_ENV=development BABEL_ENV=test npm run test)
acceptance:
$(info Running JS acceptance tests in Chrome...)
(cd frontend && npm run acceptance && cd ..)
acceptance-firefox:
$(info Running JS acceptance tests in Firefox...)
(cd frontend && npm run acceptance-firefox && cd ..)
acceptance-long:
$(info Running JS acceptance tests in Chrome...)
(cd frontend && npm run acceptance-long && cd ..)
reset-photoprism-db:
$(info Purging photoprism database...)
mysql < scripts/reset-photoprism-db.sql
reset-test-db:
$(info Purging test databases...)
mysql < scripts/reset-test-db.sql
find ./internal -type f -name '.test.*' -delete
run-test-short:
$(info Running short Go unit tests in parallel mode...)
$(GOTEST) -parallel 2 -count 1 -cpu 2 -short -timeout 5m ./pkg/... ./internal/...
run-test-go:
$(info Running all Go unit tests...)
$(GOTEST) -parallel 1 -count 1 -cpu 1 -tags slow -timeout 20m ./pkg/... ./internal/...
test-parallel:
$(info Running all Go unit tests in parallel mode...)
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags slow -timeout 20m ./pkg/... ./internal/...
test-verbose:
$(info Running all Go unit tests in verbose mode...)
$(GOTEST) -parallel 1 -count 1 -cpu 1 -tags slow -timeout 20m -v ./pkg/... ./internal/...
test-race:
$(info Running all Go unit tests with race detection in verbose mode...)
$(GOTEST) -tags slow -race -timeout 60m -v ./pkg/... ./internal/...
test-codecov:
$(info Running all Go unit tests with code coverage report for codecov...)
go test -parallel 1 -count 1 -cpu 1 -failfast -tags slow -timeout 30m -coverprofile coverage.txt -covermode atomic ./pkg/... ./internal/...
scripts/codecov.sh -t $(CODECOV_TOKEN)
test-coverage:
$(info Running all Go unit tests with code coverage report...)
go test -parallel 1 -count 1 -cpu 1 -failfast -tags slow -timeout 30m -coverprofile coverage.txt -covermode atomic ./pkg/... ./internal/...
go tool cover -html=coverage.txt -o coverage.html
clean:
rm -f $(BINARY_NAME)
rm -f *.log
rm -rf node_modules
rm -rf storage/testdata
rm -rf storage/backup
rm -rf storage/cache
rm -rf frontend/node_modules
docker-development:
docker pull ubuntu:20.04
scripts/docker-build.sh development $(DOCKER_TAG)
scripts/docker-push.sh development $(DOCKER_TAG)
docker-photoprism:
scripts/docker-build.sh photoprism $(DOCKER_TAG)
scripts/docker-push.sh photoprism $(DOCKER_TAG)
docker-photoprism-preview:
scripts/docker-build.sh photoprism
scripts/docker-push.sh photoprism
docker-photoprism-local:
scripts/docker-build.sh photoprism
docker-photoprism-pull:
docker pull photoprism/photoprism:latest
docker-photoprism-arm64-preview:
docker pull ubuntu:20.04
scripts/docker-build.sh photoprism-arm64
scripts/docker-push.sh photoprism-arm64
docker-photoprism-arm64:
scripts/docker-build.sh photoprism-arm64 $(DOCKER_TAG)
scripts/docker-push.sh photoprism-arm64 $(DOCKER_TAG)
docker-photoprism-arm32-preview:
docker pull ubuntu:20.04
scripts/docker-build.sh photoprism-arm32
scripts/docker-push.sh photoprism-arm32
docker-photoprism-arm32:
scripts/docker-build.sh photoprism-arm32 $(DOCKER_TAG)
scripts/docker-push.sh photoprism-arm32 $(DOCKER_TAG)
docker-demo:
scripts/docker-build.sh demo $(DOCKER_TAG)
scripts/docker-push.sh demo $(DOCKER_TAG)
docker-demo-local:
scripts/docker-build.sh photoprism
scripts/docker-build.sh demo $(DOCKER_TAG)
scripts/docker-push.sh demo $(DOCKER_TAG)
docker-webdav:
docker pull golang:1
scripts/docker-build.sh webdav $(DOCKER_TAG)
scripts/docker-push.sh webdav $(DOCKER_TAG)
lint-js:
(cd frontend && npm run lint)
fmt-js:
(cd frontend && npm run fmt)
fmt-imports:
goimports -w pkg internal cmd
fmt-go:
go fmt ./pkg/... ./internal/... ./cmd/...
tidy:
go mod tidy