debian-mirror-gitlab/workhorse/Makefile

216 lines
6.7 KiB
Makefile
Raw Permalink Normal View History

2021-02-22 17:27:13 +05:30
PREFIX=/usr/local
2022-07-16 23:28:13 +05:30
FIPS_MODE ?= 0
2021-10-27 15:23:28 +05:30
PKG := gitlab.com/gitlab-org/gitlab/workhorse
2021-02-22 17:27:13 +05:30
BUILD_DIR ?= $(CURDIR)
TARGET_DIR ?= $(BUILD_DIR)/_build
VERSION_STRING := $(shell git describe)
ifeq ($(strip $(VERSION_STRING)),)
VERSION_STRING := v$(shell cat VERSION)
endif
2021-11-11 11:23:49 +05:30
DATE_FMT = +%Y%m%d.%H%M%S
ifdef SOURCE_DATE_EPOCH
BUILD_TIME := $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 2>/dev/null || date -u -r "$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 2>/dev/null || date -u "$(DATE_FMT)")
else
BUILD_TIME := $(shell date -u "$(DATE_FMT)")
endif
2022-04-04 11:22:00 +05:30
GO_BUILD_GENERIC_LDFLAGS := -X main.Version=$(VERSION_STRING) -X main.BuildTime=$(BUILD_TIME)
2021-12-11 22:18:48 +05:30
GITALY := tmp/tests/gitaly/_build/bin/gitaly
GITALY_PID_FILE := gitaly.pid
2021-02-22 17:27:13 +05:30
EXE_ALL := gitlab-resize-image gitlab-zip-cat gitlab-zip-metadata gitlab-workhorse
INSTALL := install
BUILD_TAGS := tracer_static tracer_static_jaeger continuous_profiler_stackdriver
2022-07-16 23:28:13 +05:30
ifeq (${FIPS_MODE}, 1)
# boringcrypto tag is added automatically by golang-fips compiler
BUILD_TAGS += fips
# If the golang-fips compiler is built with CGO_ENABLED=0, this needs to be
# explicitly switched on.
export CGO_ENABLED=1
2023-06-20 00:43:36 +05:30
# Go 1.19+ now requires GOEXPERIMENT=boringcrypto for FIPS compilation.
# See https://github.com/golang/go/issues/51940 for more details.
ifeq ($(shell GOEXPERIMENT=boringcrypto go version > /dev/null 2>&1; echo $$?), 0)
export GOEXPERIMENT=boringcrypto
endif
2022-07-16 23:28:13 +05:30
endif
2021-02-22 17:27:13 +05:30
MINIMUM_SUPPORTED_GO_VERSION := 1.11
export GOBIN := $(TARGET_DIR)/bin
export PATH := $(GOBIN):$(PATH)
export GOPROXY ?= https://proxy.golang.org
export GO111MODULE=on
define message
@echo "### $(1)"
endef
2022-04-04 11:22:00 +05:30
# To compute a unique and deterministic value for GNU build-id, we build the Go binary a second time.
# From the first build, we extract its unique and deterministic Go build-id, and use that to derive
# a comparably unique and deterministic GNU build-id to inject into the final binary.
# If we cannot extract a Go build-id, we punt and fallback to using a random 32-byte hex string.
# This fallback is unique but non-deterministic. Uniqueness is critical, because the GNU build-id
# can be used as a cache key in a build cache. Without the fallback, we risk cache key collisions.
## Skip generation of the GNU build ID if set to speed up builds.
WITHOUT_BUILD_ID ?=
2021-02-22 17:27:13 +05:30
.NOTPARALLEL:
.PHONY: all
all: clean-build $(EXE_ALL)
2022-04-04 11:22:00 +05:30
.PHONY: gitlab-resize-image gitlab-zip-cat gitlab-zip-metadata
gitlab-resize-image gitlab-zip-cat gitlab-zip-metadata:
2021-02-22 17:27:13 +05:30
$(call message,Building $@)
2022-04-04 11:22:00 +05:30
go build -ldflags "$(GO_BUILD_GENERIC_LDFLAGS)" -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)/cmd/$@
ifndef WITHOUT_BUILD_ID
go build -ldflags "$(GO_BUILD_GENERIC_LDFLAGS) -B 0x$$(_support/make-gnu-build-id.sh $(BUILD_DIR)/$@)" -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)/cmd/$@
endif
2021-02-22 17:27:13 +05:30
2021-03-08 18:12:59 +05:30
.PHONY: gitlab-workhorse
2021-10-27 15:23:28 +05:30
gitlab-workhorse:
2021-02-22 17:27:13 +05:30
$(call message,Building $@)
2022-04-04 11:22:00 +05:30
go build -ldflags "$(GO_BUILD_GENERIC_LDFLAGS)" -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)
ifndef WITHOUT_BUILD_ID
go build -ldflags "$(GO_BUILD_GENERIC_LDFLAGS) -B 0x$$(_support/make-gnu-build-id.sh $(BUILD_DIR)/$@)" -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)
endif
2021-02-22 17:27:13 +05:30
.PHONY: install
2021-10-27 15:23:28 +05:30
install: $(EXE_ALL)
2021-02-22 17:27:13 +05:30
$(call message,$@)
mkdir -p $(DESTDIR)$(PREFIX)/bin/
cd $(BUILD_DIR) && $(INSTALL) $(EXE_ALL) $(DESTDIR)$(PREFIX)/bin/
.PHONY: test
2021-10-27 15:23:28 +05:30
test: prepare-tests
2021-02-22 17:27:13 +05:30
$(call message,$@)
2022-03-02 08:16:31 +05:30
@if [ -z "$${GITALY_ADDRESS+x}" ] ; then \
echo "To run gitaly integration tests set GITALY_ADDRESS=tcp://127.0.0.1:8075" ; \
else \
$(MAKE) run-gitaly ; \
fi
2022-10-11 01:57:18 +05:30
go test ${TEST_OPTIONS} -tags "$(BUILD_TAGS)" ./...
@status="$$?" ;\
2021-12-11 22:18:48 +05:30
if [ -f "$(GITALY_PID_FILE)" ] ; then \
echo "Clean up Gitaly server for workhorse integration test" ;\
kill -9 $$(cat $(GITALY_PID_FILE)) ;\
rm $(GITALY_PID_FILE) ;\
else \
echo "Gitaly integration test not running" ;\
fi ;\
exit "$$status"
2021-02-22 17:27:13 +05:30
@echo SUCCESS
2022-10-11 01:57:18 +05:30
.PHONY: test-race
test-race: TEST_OPTIONS = -race
test-race: test
.PHONY: test-coverage
test-coverage: TEST_OPTIONS = -cover -coverprofile=cover.out
test-coverage: test
$(call message, "Calculating the coverage")
[ -f cover.out ] && go tool cover -html cover.out -o coverage.html
[ -f cover.out ] && go tool cover -func cover.out
2021-02-22 17:27:13 +05:30
.PHONY: clean
2021-10-27 15:23:28 +05:30
clean: clean-workhorse clean-build
2021-02-22 17:27:13 +05:30
$(call message,$@)
2022-10-11 01:57:18 +05:30
rm -rf testdata/data testdata/scratch cover.out coverage.html
2021-02-22 17:27:13 +05:30
.PHONY: clean-workhorse
clean-workhorse:
$(call message,$@)
rm -f $(EXE_ALL)
.PHONY: clean-build
clean-build:
$(call message,$@)
rm -rf $(TARGET_DIR)
.PHONY: prepare-tests
2022-10-11 01:57:18 +05:30
prepare-tests: testdata/scratch $(EXE_ALL)
2021-02-22 17:27:13 +05:30
2021-12-11 22:18:48 +05:30
.PHONY: run-gitaly
2022-03-02 08:16:31 +05:30
run-gitaly: $(GITALY_PID_FILE)
2021-12-11 22:18:48 +05:30
$(GITALY_PID_FILE): gitaly.toml
2022-03-02 08:16:31 +05:30
$(call message, "Starting gitaly")
cd ..; GITALY_TESTING_NO_GIT_HOOKS=1 GITALY_PID_FILE=workhorse/$(GITALY_PID_FILE) scripts/gitaly-test-spawn workhorse/gitaly.toml
2021-12-11 22:18:48 +05:30
gitaly.toml: ../tmp/tests/gitaly/config.toml
sed -e 's/^socket_path.*$$/listen_addr = "0.0.0.0:8075"/;s/^\[auth\]$$//;s/^token.*$$//;s/^internal_socket_dir.*$$//' \
$< > $@
2022-03-02 08:16:31 +05:30
../tmp/tests/gitaly/config.toml:
$(call message, "Building a complete test environment")
cd .. ; ./scripts/setup-test-env
2021-02-22 17:27:13 +05:30
testdata/scratch:
mkdir -p testdata/scratch
.PHONY: verify
2023-03-17 16:20:25 +05:30
verify: lint vet detect-context detect-assert detect-external-tests check-formatting staticcheck deps-check
2021-02-22 17:27:13 +05:30
.PHONY: lint
2021-10-27 15:23:28 +05:30
lint:
2021-02-22 17:27:13 +05:30
$(call message,Verify: $@)
go install golang.org/x/lint/golint
@_support/lint.sh ./...
.PHONY: vet
2021-10-27 15:23:28 +05:30
vet:
2021-02-22 17:27:13 +05:30
$(call message,Verify: $@)
@go vet ./...
.PHONY: detect-context
2021-10-27 15:23:28 +05:30
detect-context:
2021-02-22 17:27:13 +05:30
$(call message,Verify: $@)
_support/detect-context.sh
.PHONY: detect-assert
detect-assert:
$(call message,Verify: $@)
_support/detect-assert.sh
2023-03-17 16:20:25 +05:30
.PHONY: detect-external-tests
detect-external-tests:
$(call message,Verify: $@)
_support/detect-external-tests.sh
2021-02-22 17:27:13 +05:30
.PHONY: check-formatting
2021-10-27 15:23:28 +05:30
check-formatting: install-goimports
2021-02-22 17:27:13 +05:30
$(call message,Verify: $@)
2021-03-08 18:12:59 +05:30
@_support/fmt.sh check
2021-02-22 17:27:13 +05:30
# Megacheck will tailor some responses given a minimum Go version, so pass that through the CLI
# Additionally, megacheck will not return failure exit codes unless explicitly told to via the
# `-simple.exit-non-zero` `-unused.exit-non-zero` and `-staticcheck.exit-non-zero` flags
.PHONY: staticcheck
2021-10-27 15:23:28 +05:30
staticcheck:
2021-02-22 17:27:13 +05:30
$(call message,Verify: $@)
go install honnef.co/go/tools/cmd/staticcheck
@ $(GOBIN)/staticcheck -go $(MINIMUM_SUPPORTED_GO_VERSION) ./...
# In addition to fixing imports, goimports also formats your code in the same style as gofmt
# so it can be used as a replacement.
.PHONY: fmt
2021-10-27 15:23:28 +05:30
fmt: install-goimports
2021-02-22 17:27:13 +05:30
$(call message,$@)
2021-03-08 18:12:59 +05:30
@_support/fmt.sh
2021-02-22 17:27:13 +05:30
.PHONY: goimports
2021-10-27 15:23:28 +05:30
install-goimports:
2021-02-22 17:27:13 +05:30
$(call message,$@)
go install golang.org/x/tools/cmd/goimports
.PHONY: deps-check
deps-check:
go mod tidy
@if git diff --quiet --exit-code -- go.mod go.sum; then \
echo "go.mod and go.sum are ok"; \
else \
echo ""; \
echo "go.mod and go.sum are modified, please commit them";\
exit 1; \
fi;