mirror of
https://github.com/kopia/kopia.git
synced 2025-12-23 22:57:50 -05:00
530 lines
20 KiB
Makefile
530 lines
20 KiB
Makefile
COVERAGE_PACKAGES=./repo/...,./fs/...,./snapshot/...,./cli/...,./internal/...,./notification/...
|
|
TEST_FLAGS?=
|
|
KOPIA_INTEGRATION_EXE=$(CURDIR)/dist/testing_$(GOOS)_$(GOARCH)/kopia.exe
|
|
TESTING_ACTION_EXE=$(CURDIR)/dist/testing_$(GOOS)_$(GOARCH)/testingaction.exe
|
|
FIO_DOCKER_TAG=ljishen/fio
|
|
REPEAT_TEST=1
|
|
|
|
# get a list all go files
|
|
rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
|
|
go_source_dirs=cli fs internal repo snapshot
|
|
all_go_sources=$(foreach d,$(go_source_dirs),$(call rwildcard,$d/,*.go)) $(wildcard *.go)
|
|
|
|
all:
|
|
$(MAKE) test
|
|
$(MAKE) lint
|
|
|
|
include tools/tools.mk
|
|
|
|
KOPIA_BUILD_TAGS=
|
|
KOPIA_BUILD_FLAGS=-trimpath -ldflags "-s -w -X github.com/kopia/kopia/repo.BuildVersion=$(KOPIA_VERSION_NO_PREFIX) -X github.com/kopia/kopia/repo.BuildInfo=$(shell git rev-parse HEAD) -X github.com/kopia/kopia/repo.BuildGitHubRepo=$(GITHUB_REPOSITORY)"
|
|
|
|
kopia_ui_embedded_exe=dist/kopia_$(GOOS)_$(GOARCH)/kopia$(exe_suffix)
|
|
|
|
ifeq ($(GOOS),darwin)
|
|
# on macOS, Kopia uses universal binary that works for AMD64 and ARM64
|
|
kopia_ui_embedded_exe=dist/kopia_darwin_universal/kopia
|
|
endif
|
|
|
|
ifeq ($(GOOS),linux)
|
|
|
|
ifeq ($(GOARCH),arm)
|
|
kopia_ui_embedded_exe=dist/kopia_linux_armv7l/kopia
|
|
endif
|
|
|
|
ifeq ($(GOARCH),amd64)
|
|
kopia_ui_embedded_exe=dist/kopia_linux_x64/kopia
|
|
endif
|
|
|
|
endif
|
|
|
|
GOTESTSUM_FORMAT=pkgname-and-test-fails
|
|
GOTESTSUM_FLAGS=--format=$(GOTESTSUM_FORMAT) --no-summary=skipped
|
|
GO_TEST?=$(gotestsum) $(GOTESTSUM_FLAGS) --
|
|
|
|
LINTER_DEADLINE=1200s
|
|
UNIT_TESTS_TIMEOUT=1200s
|
|
|
|
ifeq ($(GOARCH),amd64)
|
|
PARALLEL=8
|
|
else
|
|
# tweaks for less powerful platforms
|
|
PARALLEL=2
|
|
endif
|
|
|
|
-include ./Makefile.local.mk
|
|
|
|
install:
|
|
go install $(KOPIA_BUILD_FLAGS) -tags "$(KOPIA_BUILD_TAGS)" github.com/kopia/kopia
|
|
|
|
install-noui: KOPIA_BUILD_TAGS=nohtmlui
|
|
install-noui: install
|
|
|
|
install-race:
|
|
go install -race $(KOPIA_BUILD_FLAGS) -tags "$(KOPIA_BUILD_TAGS)"
|
|
|
|
check-locks: $(checklocks)
|
|
ifneq ($(GOOS)/$(GOARCH),linux/arm64)
|
|
ifneq ($(GOOS)/$(GOARCH),linux/arm)
|
|
go vet -vettool=$(checklocks) ./...
|
|
endif
|
|
endif
|
|
|
|
lint: $(linter)
|
|
ifneq ($(GOOS)/$(GOARCH),linux/arm64)
|
|
ifneq ($(GOOS)/$(GOARCH),linux/arm)
|
|
$(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags)
|
|
endif
|
|
endif
|
|
|
|
lint-fix: $(linter)
|
|
ifneq ($(GOOS)/$(GOARCH),linux/arm64)
|
|
ifneq ($(GOOS)/$(GOARCH),linux/arm)
|
|
$(linter) --timeout $(LINTER_DEADLINE) run --fix $(linter_flags)
|
|
endif
|
|
endif
|
|
|
|
lint-and-log: $(linter)
|
|
$(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) | tee .linterr.txt
|
|
|
|
lint-all: $(linter)
|
|
GOOS=windows GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags)
|
|
GOOS=linux GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags)
|
|
GOOS=linux GOARCH=arm64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags)
|
|
GOOS=linux GOARCH=arm $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags)
|
|
GOOS=darwin GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags)
|
|
GOOS=darwin GOARCH=arm64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags)
|
|
GOOS=openbsd GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags)
|
|
GOOS=freebsd GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags)
|
|
|
|
vet:
|
|
go vet -all .
|
|
|
|
go-modules:
|
|
go mod download
|
|
|
|
app-node-modules: $(npm)
|
|
ifeq ($(GOARCH),amd64)
|
|
$(MAKE) -C app deps
|
|
endif
|
|
|
|
ci-setup: go-modules all-tools app-node-modules
|
|
ifeq ($(CI),true)
|
|
-git checkout go.mod go.sum
|
|
endif
|
|
|
|
website:
|
|
$(MAKE) -C site build
|
|
|
|
kopia-ui: $(kopia_ui_embedded_exe)
|
|
$(MAKE) -C app build-electron
|
|
|
|
MAYBE_XVFB=
|
|
ifeq ($(GOOS),linux)
|
|
# on Linux
|
|
MAYBE_XVFB=xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" --
|
|
endif
|
|
|
|
kopia-ui-test:
|
|
ifeq ($(GOOS)/$(GOARCH),linux/amd64)
|
|
# on Linux we run from installed location due to AppArmor requirement on Ubuntu 24.04
|
|
sudo apt-get install -y ./dist/kopia-ui/kopia-ui*_amd64.deb
|
|
endif
|
|
$(MAYBE_XVFB) $(MAKE) -C app e2e-test
|
|
|
|
# use this to test htmlui changes in full build of KopiaUI, this is rarely needed
|
|
# except when testing htmlui specific features that only light up when running under Electron.
|
|
#
|
|
# You need to have 3 repositories checked out in parallel:
|
|
#
|
|
# https://github.com/kopia/kopia
|
|
# https://github.com/kopia/htmlui
|
|
# https://github.com/kopia/htmluibuild
|
|
|
|
kopia-ui-with-local-htmlui-changes:
|
|
(cd ../htmlui && npm run build && ./push_local.sh)
|
|
rm -f $(kopia_ui_embedded_exe)
|
|
GOWORK=$(CURDIR)/tools/localhtmlui.work $(MAKE) kopia-ui
|
|
|
|
install-with-local-htmlui-changes: export GOWORK=$(CURDIR)/tools/localhtmlui.work
|
|
install-with-local-htmlui-changes:
|
|
ifeq ($(GOOS),windows)
|
|
(cd ../htmlui && npm run build && push_local.cmd)
|
|
else
|
|
(cd ../htmlui && npm run build && ./push_local.sh)
|
|
endif
|
|
$(MAKE) install
|
|
|
|
# build-current-os-noui compiles a binary for the current os/arch in the same location as goreleaser
|
|
# kopia-ui build needs this particular location to embed the correct server binary.
|
|
# note we're not building or embedding HTML UI to speed up PR testing process.
|
|
build-current-os-noui:
|
|
go build $(KOPIA_BUILD_FLAGS) -o $(kopia_ui_embedded_exe) github.com/kopia/kopia
|
|
|
|
# on macOS build and sign AMD64, ARM64 and Universal binary and *.tar.gz files for them
|
|
dist/kopia_darwin_universal/kopia dist/kopia_darwin_amd64/kopia dist/kopia_darwin_arm6/kopia: $(all_go_sources)
|
|
GOARCH=arm64 go build $(KOPIA_BUILD_FLAGS) -o dist/kopia_darwin_arm64/kopia -tags "$(KOPIA_BUILD_TAGS)" github.com/kopia/kopia
|
|
GOARCH=amd64 go build $(KOPIA_BUILD_FLAGS) -o dist/kopia_darwin_amd64/kopia -tags "$(KOPIA_BUILD_TAGS)" github.com/kopia/kopia
|
|
mkdir -p dist/kopia_darwin_universal
|
|
lipo -create -output dist/kopia_darwin_universal/kopia dist/kopia_darwin_arm64/kopia dist/kopia_darwin_amd64/kopia
|
|
ifneq ($(MACOS_SIGNING_IDENTITY),)
|
|
codesign -v --keychain $(MACOS_KEYCHAIN) -s $(MACOS_SIGNING_IDENTITY) --force dist/kopia_darwin_amd64/kopia
|
|
codesign -v --keychain $(MACOS_KEYCHAIN) -s $(MACOS_SIGNING_IDENTITY) --force dist/kopia_darwin_arm64/kopia
|
|
codesign -v --keychain $(MACOS_KEYCHAIN) -s $(MACOS_SIGNING_IDENTITY) --force dist/kopia_darwin_universal/kopia
|
|
endif
|
|
tools/make-tgz.sh dist kopia-$(KOPIA_VERSION_NO_PREFIX)-macOS-x64 dist/kopia_darwin_amd64/kopia
|
|
tools/make-tgz.sh dist kopia-$(KOPIA_VERSION_NO_PREFIX)-macOS-arm64 dist/kopia_darwin_arm64/kopia
|
|
tools/make-tgz.sh dist kopia-$(KOPIA_VERSION_NO_PREFIX)-macOS-universal dist/kopia_darwin_universal/kopia
|
|
|
|
# on Windows build and sign AMD64 and *.zip file
|
|
dist/kopia_windows_amd64/kopia.exe: $(all_go_sources)
|
|
GOOS=windows GOARCH=amd64 go build $(KOPIA_BUILD_FLAGS) -o dist/kopia_windows_amd64/kopia.exe -tags "$(KOPIA_BUILD_TAGS)" github.com/kopia/kopia
|
|
ifneq ($(WINDOWS_SIGN_TOOL),)
|
|
tools/.tools/signtool.exe sign //sha1 $(WINDOWS_CERT_SHA1) //fd sha256 //tr "http://timestamp.digicert.com" //v dist/kopia_windows_amd64/kopia.exe
|
|
endif
|
|
mkdir -p dist/kopia-$(KOPIA_VERSION_NO_PREFIX)-windows-x64
|
|
cp dist/kopia_windows_amd64/kopia.exe LICENSE README.md dist/kopia-$(KOPIA_VERSION_NO_PREFIX)-windows-x64
|
|
(cd dist && zip -r kopia-$(KOPIA_VERSION_NO_PREFIX)-windows-x64.zip kopia-$(KOPIA_VERSION_NO_PREFIX)-windows-x64)
|
|
rm -rf dist/kopia-$(KOPIA_VERSION_NO_PREFIX)-windows-x64
|
|
|
|
# On Linux use use goreleaser which will build Kopia for all supported Linux architectures
|
|
# and creates .tar.gz, rpm and deb packages.
|
|
dist/kopia_linux_x64/kopia dist/kopia_linux_arm64/kopia dist/kopia_linux_armv7l/kopia: $(all_go_sources)
|
|
ifeq ($(GOARCH),amd64)
|
|
$(MAKE) goreleaser
|
|
rm -f dist/kopia_linux_x64
|
|
ln -sf kopia_linux_amd64 dist/kopia_linux_x64
|
|
rm -f dist/kopia_linux_armv7l
|
|
ln -sf kopia_linux_arm_6 dist/kopia_linux_armv7l
|
|
else
|
|
go build $(KOPIA_BUILD_FLAGS) -o $(kopia_ui_embedded_exe) -tags "$(KOPIA_BUILD_TAGS)" github.com/kopia/kopia
|
|
endif
|
|
|
|
# builds kopia CLI binary that will be later used as a server for kopia-ui.
|
|
kopia: $(kopia_ui_embedded_exe)
|
|
|
|
ci-build:
|
|
# install Apple API key needed to notarize Apple binaries
|
|
ifeq ($(GOOS),darwin)
|
|
ifneq ($(APPLE_API_KEY_BASE64),)
|
|
ifneq ($(APPLE_API_KEY),)
|
|
@ echo "$(APPLE_API_KEY_BASE64)" | base64 -d > "$(APPLE_API_KEY)"
|
|
endif
|
|
endif
|
|
endif
|
|
$(MAKE) kopia
|
|
ifneq ($(GOOS)/$(GOARCH),linux/arm64)
|
|
$(retry) $(MAKE) kopia-ui
|
|
$(retry) $(MAKE) kopia-ui-test
|
|
endif
|
|
ifeq ($(GOOS)/$(GOARCH),linux/amd64)
|
|
$(MAKE) generate-change-log
|
|
$(MAKE) download-rclone
|
|
endif
|
|
|
|
# remove API key
|
|
ifeq ($(GOOS),darwin)
|
|
ifneq ($(APPLE_API_KEY),)
|
|
@ rm -f "$(APPLE_API_KEY)"
|
|
endif
|
|
endif
|
|
|
|
|
|
download-rclone:
|
|
go run ./tools/gettool --tool rclone:$(RCLONE_VERSION) --output-dir dist/kopia_linux_amd64/ --goos=linux --goarch=amd64
|
|
go run ./tools/gettool --tool rclone:$(RCLONE_VERSION) --output-dir dist/kopia_linux_arm64/ --goos=linux --goarch=arm64
|
|
go run ./tools/gettool --tool rclone:$(RCLONE_VERSION) --output-dir dist/kopia_linux_arm_6/ --goos=linux --goarch=arm
|
|
|
|
|
|
ci-tests: vet test
|
|
|
|
ci-integration-tests:
|
|
$(MAKE) robustness-tool-tests socket-activation-tests
|
|
|
|
ci-publish-coverage:
|
|
ifeq ($(GOOS)/$(GOARCH),linux/amd64)
|
|
-bash -c "bash <(curl -s https://codecov.io/bash) -f coverage.txt"
|
|
endif
|
|
|
|
# goreleaser - builds packages for all platforms when on linux/amd64,
|
|
# but don't publish here, we'll upload to GitHub separately.
|
|
GORELEASER_OPTIONS=--rm-dist --parallelism=6 --skip-publish --skip-sign
|
|
|
|
ifeq ($(CI_TAG),)
|
|
GORELEASER_OPTIONS+=--snapshot
|
|
endif
|
|
|
|
print_build_info:
|
|
@echo CI_TAG: $(CI_TAG)
|
|
@echo IS_PULL_REQUEST: $(IS_PULL_REQUEST)
|
|
@echo GOOS: $(GOOS)
|
|
@echo GOARCH: $(GOARCH)
|
|
|
|
goreleaser: export GITHUB_REPOSITORY:=$(GITHUB_REPOSITORY)
|
|
goreleaser: $(goreleaser) print_build_info
|
|
-git diff | cat
|
|
$(goreleaser) release $(GORELEASER_OPTIONS)
|
|
|
|
dev-deps:
|
|
GO111MODULE=off go get -u golang.org/x/tools/cmd/gorename
|
|
GO111MODULE=off go get -u golang.org/x/tools/cmd/guru
|
|
GO111MODULE=off go get -u github.com/nsf/gocode
|
|
GO111MODULE=off go get -u github.com/rogpeppe/godef
|
|
GO111MODULE=off go get -u github.com/lukehoban/go-outline
|
|
GO111MODULE=off go get -u github.com/newhook/go-symbols
|
|
GO111MODULE=off go get -u github.com/sqs/goreturns
|
|
|
|
test-with-coverage: export KOPIA_COVERAGE_TEST=1
|
|
test-with-coverage: export TESTING_ACTION_EXE ?= $(TESTING_ACTION_EXE)
|
|
test-with-coverage: $(gotestsum) $(TESTING_ACTION_EXE)
|
|
$(GO_TEST) $(UNIT_TEST_RACE_FLAGS) -tags testing -count=$(REPEAT_TEST) -short -covermode=atomic -coverprofile=coverage.txt --coverpkg $(COVERAGE_PACKAGES) -timeout $(UNIT_TESTS_TIMEOUT) ./...
|
|
|
|
test: GOTESTSUM_FLAGS=--format=$(GOTESTSUM_FORMAT) --no-summary=skipped --jsonfile=.tmp.unit-tests.json
|
|
test: export TESTING_ACTION_EXE ?= $(TESTING_ACTION_EXE)
|
|
test: $(gotestsum) $(TESTING_ACTION_EXE)
|
|
$(GO_TEST) $(UNIT_TEST_RACE_FLAGS) -tags testing -count=$(REPEAT_TEST) -timeout $(UNIT_TESTS_TIMEOUT) -skip '^TestIndexBlobManagerStress$$' ./...
|
|
-$(gotestsum) tool slowest --jsonfile .tmp.unit-tests.json --threshold 1000ms
|
|
|
|
test-index-blob-v0: GOTESTSUM_FLAGS=--format=pkgname --no-summary=output,skipped
|
|
test-index-blob-v0: $(gotestsum) $(TESTING_ACTION_EXE)
|
|
$(GO_TEST) $(UNIT_TEST_RACE_FLAGS) -tags testing -count=$(REPEAT_TEST) -timeout $(UNIT_TESTS_TIMEOUT) -run '^TestIndexBlobManagerStress$$' ./repo/content/indexblob/...
|
|
|
|
provider-tests-deps: $(gotestsum) $(rclone) $(MINIO_MC_PATH)
|
|
|
|
PROVIDER_TEST_TARGET=...
|
|
|
|
provider-tests: export KOPIA_PROVIDER_TEST=true
|
|
provider-tests: export RCLONE_EXE=$(rclone)
|
|
provider-tests: GOTESTSUM_FLAGS=--format=$(GOTESTSUM_FORMAT) --no-summary=skipped --jsonfile=.tmp.provider-tests.json
|
|
provider-tests: $(gotestsum) $(rclone) $(MINIO_MC_PATH)
|
|
$(GO_TEST) $(UNIT_TEST_RACE_FLAGS) -count=$(REPEAT_TEST) -timeout 15m ./repo/blob/$(PROVIDER_TEST_TARGET)
|
|
-$(gotestsum) tool slowest --jsonfile .tmp.provider-tests.json --threshold 1000ms
|
|
|
|
ALLOWED_LICENSES=Apache-2.0;MIT;BSD-2-Clause;BSD-3-Clause;CC0-1.0;ISC;MPL-2.0;CC-BY-3.0;CC-BY-4.0;ODC-By-1.0;WTFPL;0BSD;Python-2.0;BSD;Unlicense
|
|
|
|
license-check: $(wwhrd) app-node-modules
|
|
$(wwhrd) check
|
|
(cd app && npx license-checker --summary --production --onlyAllow "$(ALLOWED_LICENSES)")
|
|
|
|
vtest: $(gotestsum)
|
|
$(GO_TEST) -count=$(REPEAT_TEST) -short -v -timeout $(UNIT_TESTS_TIMEOUT) ./...
|
|
|
|
build-integration-test-binary:
|
|
go build $(KOPIA_BUILD_FLAGS) $(INTEGRATION_TEST_RACE_FLAGS) -o $(KOPIA_INTEGRATION_EXE) -tags testing github.com/kopia/kopia
|
|
|
|
$(TESTING_ACTION_EXE): tests/testingaction/main.go
|
|
go build -o $(TESTING_ACTION_EXE) -tags testing github.com/kopia/kopia/tests/testingaction
|
|
|
|
compat-tests: export KOPIA_CURRENT_EXE=$(CURDIR)/$(kopia_ui_embedded_exe)
|
|
compat-tests: export KOPIA_08_EXE=$(kopia08)
|
|
compat-tests: export KOPIA_017_EXE=$(kopia017)
|
|
compat-tests: GOTESTSUM_FLAGS=--format=testname --no-summary=skipped --jsonfile=.tmp.compat-tests.json
|
|
compat-tests: $(kopia_ui_embedded_exe) $(kopia08) $(kopia017) $(gotestsum)
|
|
$(GO_TEST) $(TEST_FLAGS) -count=$(REPEAT_TEST) -parallel $(PARALLEL) -timeout 3600s github.com/kopia/kopia/tests/compat_test
|
|
# -$(gotestsum) tool slowest --jsonfile .tmp.compat-tests.json --threshold 1000ms
|
|
|
|
endurance-tests: export KOPIA_EXE ?= $(KOPIA_INTEGRATION_EXE)
|
|
endurance-tests: export KOPIA_LOGS_DIR=$(CURDIR)/.logs
|
|
endurance-tests: export KOPIA_TRACK_CHUNK_ALLOC=1
|
|
endurance-tests: build-integration-test-binary $(gotestsum)
|
|
go test $(TEST_FLAGS) -count=$(REPEAT_TEST) -parallel $(PARALLEL) -timeout 3600s github.com/kopia/kopia/tests/endurance_test
|
|
|
|
recovery-tests: export KOPIA_EXE ?= $(KOPIA_INTEGRATION_EXE)
|
|
recovery-tests: GOTESTSUM_FORMAT=testname
|
|
recovery-tests: build-integration-test-binary $(gotestsum)
|
|
FIO_DOCKER_IMAGE=$(FIO_DOCKER_TAG) \
|
|
$(GO_TEST) -count=$(REPEAT_TEST) github.com/kopia/kopia/tests/recovery/recovery_test $(TEST_FLAGS)
|
|
|
|
robustness-tests: export KOPIA_EXE ?= $(KOPIA_INTEGRATION_EXE)
|
|
robustness-tests: GOTESTSUM_FORMAT=testname
|
|
robustness-tests: build-integration-test-binary $(gotestsum)
|
|
FIO_DOCKER_IMAGE=$(FIO_DOCKER_TAG) \
|
|
$(GO_TEST) -count=$(REPEAT_TEST) github.com/kopia/kopia/tests/robustness/robustness_test $(TEST_FLAGS)
|
|
|
|
robustness-server-tests: export KOPIA_EXE ?= $(KOPIA_INTEGRATION_EXE)
|
|
robustness-server-tests: GOTESTSUM_FORMAT=testname
|
|
robustness-server-tests: build-integration-test-binary $(gotestsum)
|
|
FIO_DOCKER_IMAGE=$(FIO_DOCKER_TAG) \
|
|
$(GO_TEST) -count=$(REPEAT_TEST) github.com/kopia/kopia/tests/robustness/multiclient_test $(TEST_FLAGS)
|
|
|
|
robustness-tool-tests: export KOPIA_EXE ?= $(KOPIA_INTEGRATION_EXE)
|
|
robustness-tool-tests: export FIO_DOCKER_IMAGE=$(FIO_DOCKER_TAG)
|
|
robustness-tool-tests: build-integration-test-binary $(gotestsum)
|
|
ifeq ($(GOOS)/$(GOARCH),linux/amd64)
|
|
$(GO_TEST) -count=$(REPEAT_TEST) github.com/kopia/kopia/tests/tools/... github.com/kopia/kopia/tests/robustness/engine/... $(TEST_FLAGS)
|
|
endif
|
|
|
|
socket-activation-tests: export KOPIA_ORIG_EXE ?= $(KOPIA_INTEGRATION_EXE)
|
|
socket-activation-tests: export KOPIA_SERVER_EXE ?= $(CURDIR)/tests/socketactivation_test/server_wrap.sh
|
|
socket-activation-tests: export FIO_DOCKER_IMAGE=$(FIO_DOCKER_TAG)
|
|
socket-activation-tests: build-integration-test-binary $(gotestsum)
|
|
ifeq ($(GOOS),linux)
|
|
$(GO_TEST) -count=$(REPEAT_TEST) github.com/kopia/kopia/tests/socketactivation_test $(TEST_FLAGS)
|
|
endif
|
|
|
|
stress-test: export KOPIA_STRESS_TEST=1
|
|
stress-test: export KOPIA_DEBUG_MANIFEST_MANAGER=1
|
|
stress-test: export KOPIA_LOGS_DIR=$(CURDIR)/.logs
|
|
stress-test: export KOPIA_KEEP_LOGS=1
|
|
stress-test: $(gotestsum)
|
|
$(GO_TEST) -count=$(REPEAT_TEST) -timeout 3600s github.com/kopia/kopia/tests/stress_test
|
|
$(GO_TEST) -count=$(REPEAT_TEST) -timeout 3600s github.com/kopia/kopia/tests/repository_stress_test
|
|
|
|
os-snapshot-tests: export KOPIA_EXE ?= $(KOPIA_INTEGRATION_EXE)
|
|
os-snapshot-tests: GOTESTSUM_FORMAT=testname
|
|
os-snapshot-tests: build-integration-test-binary $(gotestsum)
|
|
$(GO_TEST) -count=$(REPEAT_TEST) github.com/kopia/kopia/tests/os_snapshot_test $(TEST_FLAGS)
|
|
|
|
layering-test:
|
|
ifneq ($(GOOS),windows)
|
|
# verify that code under repo/ can only import code also under repo/ + some
|
|
# whitelisted internal packages.
|
|
find repo/ -name '*.go' | xargs grep "^\t\"github.com/kopia/kopia" \
|
|
| grep -v -e github.com/kopia/kopia/repo \
|
|
-e github.com/kopia/kopia/internal \
|
|
-e github.com/kopia/kopia/issues && exit 1 || echo repo/ layering ok
|
|
endif
|
|
|
|
htmlui-e2e-test:
|
|
HTMLUI_E2E_TEST=1 go test -timeout 600s github.com/kopia/kopia/tests/htmlui_e2e_test -v $(TEST_FLAGS)
|
|
|
|
htmlui-e2e-test-local-htmlui-changes:
|
|
(cd ../htmlui && npm run build)
|
|
HTMLUI_E2E_TEST=1 HTMLUI_BUILD_DIR=$(CURDIR)/../htmlui/build go test -timeout 600s github.com/kopia/kopia/tests/htmlui_e2e_test -v $(TEST_FLAGS)
|
|
|
|
godoc:
|
|
godoc -http=:33333
|
|
|
|
coverage: test-with-coverage coverage-html
|
|
|
|
coverage-html:
|
|
go tool cover -html=coverage.txt
|
|
|
|
official-release:
|
|
git tag $(RELEASE_VERSION) -m $(RELEASE_VERSION)
|
|
git push -u upstream $(RELEASE_VERSION)
|
|
|
|
goreturns:
|
|
find . -name '*.go' | xargs goreturns -w --local github.com/kopia/kopia
|
|
|
|
ci-gpg-key:
|
|
ifneq ($(GPG_KEYRING),)
|
|
@echo "$(GPG_KEYRING)" | base64 -d | gpg --import
|
|
else
|
|
@echo No GPG keyring
|
|
endif
|
|
|
|
ci-gcs-creds:
|
|
ifneq ($(GCS_CREDENTIALS),)
|
|
@echo $(GCS_CREDENTIALS) | base64 -d | gzip -d | gcloud auth activate-service-account --key-file=/dev/stdin
|
|
else
|
|
@echo No GPG credentials.
|
|
endif
|
|
|
|
RELEASE_STAGING_DIR=$(CURDIR)/.release
|
|
|
|
stage-release:
|
|
rm -rf $(RELEASE_STAGING_DIR)
|
|
mkdir -p $(RELEASE_STAGING_DIR)
|
|
|
|
# copy all dist files to a staging directory
|
|
find dist -type f -exec cp -v {} $(RELEASE_STAGING_DIR) \;
|
|
|
|
# sign RPMs
|
|
find $(RELEASE_STAGING_DIR) -type f -name '*.rpm' -exec rpm --define "%_gpg_name Kopia Builder" --addsign {} \;
|
|
|
|
# regenerate checksums file and sign it
|
|
(cd $(RELEASE_STAGING_DIR) && sha256sum * > checksums.txt)
|
|
cat $(RELEASE_STAGING_DIR)/checksums.txt
|
|
gpg --output $(RELEASE_STAGING_DIR)/checksums.txt.sig --detach-sig $(RELEASE_STAGING_DIR)/checksums.txt
|
|
|
|
ifeq ($(IS_PULL_REQUEST),false)
|
|
ifneq ($(CI_TAG),)
|
|
GH_RELEASE_REPO=$(GITHUB_REPOSITORY)
|
|
GH_RELEASE_FLAGS=
|
|
GH_RELEASE_NAME=v$(KOPIA_VERSION_NO_PREFIX)
|
|
else
|
|
ifeq ($(GITHUB_REF),refs/heads/master)
|
|
ifneq ($(NON_TAG_RELEASE_REPO),)
|
|
GH_RELEASE_REPO=$(REPO_OWNER)/$(NON_TAG_RELEASE_REPO)
|
|
GH_RELEASE_FLAGS=
|
|
GH_RELEASE_NAME=v$(KOPIA_VERSION_NO_PREFIX)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
generate-change-log: $(gitchglog)
|
|
ifeq ($(CI_TAG),)
|
|
$(gitchglog) --next-tag latest latest > dist/change_log.md
|
|
else
|
|
$(gitchglog) $(CI_TAG) > dist/change_log.md
|
|
endif
|
|
gitchglog=$(gitchglog) $(CURDIR)/tools/htmlui_changelog.sh dist/change_log.md
|
|
|
|
push-github-release:
|
|
ifneq ($(GH_RELEASE_REPO),)
|
|
@echo Creating Github Release $(GH_RELEASE_NAME) in $(GH_RELEASE_REPO) with flags $(GH_RELEASE_FLAGS)
|
|
gh --repo $(GH_RELEASE_REPO) release view $(GH_RELEASE_NAME) || gh --repo $(GH_RELEASE_REPO) release create -F dist/change_log.md $(GH_RELEASE_FLAGS) $(GH_RELEASE_NAME)
|
|
gh --repo $(GH_RELEASE_REPO) release upload $(GH_RELEASE_NAME) $(RELEASE_STAGING_DIR)/*
|
|
else
|
|
@echo Not creating Github Release
|
|
endif
|
|
|
|
publish-apt:
|
|
$(CURDIR)/tools/apt-publish.sh $(RELEASE_STAGING_DIR)
|
|
|
|
publish-rpm:
|
|
$(CURDIR)/tools/rpm-publish.sh $(RELEASE_STAGING_DIR)
|
|
|
|
publish-homebrew:
|
|
$(CURDIR)/tools/homebrew-publish.sh $(RELEASE_STAGING_DIR) $(KOPIA_VERSION_NO_PREFIX)
|
|
|
|
publish-scoop:
|
|
$(CURDIR)/tools/scoop-publish.sh $(RELEASE_STAGING_DIR) $(KOPIA_VERSION_NO_PREFIX)
|
|
|
|
publish-docker:
|
|
ifneq ($(DOCKERHUB_TOKEN),)
|
|
@echo $(DOCKERHUB_TOKEN) | docker login --username $(DOCKERHUB_USERNAME) --password-stdin
|
|
$(CURDIR)/tools/docker-publish.sh $(CURDIR)/dist_binaries
|
|
else
|
|
@echo DOCKERHUB_TOKEN is not set.
|
|
endif
|
|
|
|
PERF_BENCHMARK_INSTANCE=kopia-perf
|
|
PERF_BENCHMARK_INSTANCE_ZONE=us-west1-a
|
|
PERF_BENCHMARK_CHANNEL=testing
|
|
PERF_BENCHMARK_VERSION=0.6.4
|
|
PERF_BENCHMARK_TOTAL_SIZE=20G
|
|
|
|
perf-benchmark-setup:
|
|
gcloud compute instances create $(PERF_BENCHMARK_INSTANCE) --machine-type n1-standard-8 --zone=$(PERF_BENCHMARK_INSTANCE_ZONE) --local-ssd interface=nvme
|
|
# wait for instance to boot
|
|
sleep 20
|
|
gcloud compute scp tests/perf_benchmark/perf-benchmark-setup.sh $(PERF_BENCHMARK_INSTANCE):. --zone=$(PERF_BENCHMARK_INSTANCE_ZONE)
|
|
gcloud compute ssh $(PERF_BENCHMARK_INSTANCE) --zone=$(PERF_BENCHMARK_INSTANCE_ZONE) --command "./perf-benchmark-setup.sh"
|
|
|
|
perf-benchmark-teardown:
|
|
gcloud compute instances delete $(PERF_BENCHMARK_INSTANCE) --zone=$(PERF_BENCHMARK_INSTANCE_ZONE)
|
|
|
|
perf-benchmark-test:
|
|
gcloud compute scp tests/perf_benchmark/perf-benchmark.sh $(PERF_BENCHMARK_INSTANCE):. --zone=$(PERF_BENCHMARK_INSTANCE_ZONE)
|
|
gcloud compute ssh $(PERF_BENCHMARK_INSTANCE) --zone=$(PERF_BENCHMARK_INSTANCE_ZONE) --command "./perf-benchmark.sh $(PERF_BENCHMARK_VERSION) $(PERF_BENCHMARK_CHANNEL) $(PERF_BENCHMARK_TOTAL_SIZE)"
|
|
|
|
perf-benchmark-test-all:
|
|
$(MAKE) perf-benchmark-test PERF_BENCHMARK_VERSION=0.4.0
|
|
$(MAKE) perf-benchmark-test PERF_BENCHMARK_VERSION=0.5.2
|
|
$(MAKE) perf-benchmark-test PERF_BENCHMARK_VERSION=0.6.4
|
|
$(MAKE) perf-benchmark-test PERF_BENCHMARK_VERSION=0.7.0~rc1
|
|
|
|
perf-benchmark-results:
|
|
gcloud compute scp $(PERF_BENCHMARK_INSTANCE):psrecord-* tests/perf_benchmark --zone=$(PERF_BENCHMARK_INSTANCE_ZONE)
|
|
gcloud compute scp $(PERF_BENCHMARK_INSTANCE):repo-size-* tests/perf_benchmark --zone=$(PERF_BENCHMARK_INSTANCE_ZONE)
|
|
(cd tests/perf_benchmark && go run process_results.go)
|
|
|
|
check-prettier: $(npm)
|
|
make -C app check-prettier
|
|
|
|
prettier: $(npm)
|
|
make -C app prettier
|