1DIST := dist2EXECUTABLE := forgejo-runner3GOFMT ?= gofumpt -l4DIST := dist5DIST_DIRS := $(DIST)/binaries $(DIST)/release6GO ?= go7SHASUM ?= shasum -a 2568HAS_GO = $(shell hash $(GO) > /dev/null 2>&1 && echo "GO" || echo "NOGO" )9XGO_PACKAGE ?= src.techknowlogick.com/xgo@latest10XGO_VERSION := go-1.21.x11GXZ_PAGAGE ?= github.com/ulikunitz/xz/cmd/gxz@v0.5.101213LINUX_ARCHS ?= linux/amd64,linux/arm6414DARWIN_ARCHS ?= darwin-12/amd64,darwin-12/arm6415WINDOWS_ARCHS ?= windows/amd6416GO_FMT_FILES := $(shell find . -type f -name "*.go" ! -name "generated.*")17GOFILES := $(shell find . -type f -name "*.go" -o -name "go.mod" ! -name "generated.*")1819DOCKER_IMAGE ?= gitea/act_runner20DOCKER_TAG ?= nightly21DOCKER_REF := $(DOCKER_IMAGE):$(DOCKER_TAG)22DOCKER_ROOTLESS_REF := $(DOCKER_IMAGE):$(DOCKER_TAG)-dind-rootless2324EXTLDFLAGS = -extldflags "-static" $(null)2526ifeq ($(HAS_GO), GO)27 GOPATH ?= $(shell $(GO) env GOPATH)28 export PATH := $(GOPATH)/bin:$(PATH)2930 CGO_EXTRA_CFLAGS := -DSQLITE_MAX_VARIABLE_NUMBER=3276631 CGO_CFLAGS ?= $(shell $(GO) env CGO_CFLAGS) $(CGO_EXTRA_CFLAGS)32endif3334ifeq ($(OS), Windows_NT)35 GOFLAGS := -v -buildmode=exe36 EXECUTABLE ?= $(EXECUTABLE).exe37else ifeq ($(OS), Windows)38 GOFLAGS := -v -buildmode=exe39 EXECUTABLE ?= $(EXECUTABLE).exe40else41 GOFLAGS := -v42 EXECUTABLE ?= $(EXECUTABLE)43endif4445STORED_VERSION_FILE := VERSION4647ifneq ($(DRONE_TAG),)48 VERSION ?= $(subst v,,$(DRONE_TAG))49 RELASE_VERSION ?= $(VERSION)50else51 ifneq ($(DRONE_BRANCH),)52 VERSION ?= $(subst release/v,,$(DRONE_BRANCH))53 else54 VERSION ?= main55 endif5657 STORED_VERSION=$(shell cat $(STORED_VERSION_FILE) 2>/dev/null)58 ifneq ($(STORED_VERSION),)59 RELASE_VERSION ?= $(STORED_VERSION)60 else61 RELASE_VERSION ?= $(shell git describe --tags --always | sed 's/-/+/' | sed 's/^v//')62 endif63endif6465GO_PACKAGES_TO_VET ?= $(filter-out gitea.com/gitea/act_runner/internal/pkg/client/mocks,$(shell $(GO) list ./...))666768TAGS ?=69LDFLAGS ?= -X "gitea.com/gitea/act_runner/internal/pkg/ver.version=v$(RELASE_VERSION)"7071all: build7273fmt:74 @hash gofumpt > /dev/null 2>&1; if [ $$? -ne 0 ]; then \75 $(GO) install mvdan.cc/gofumpt@latest; \76 fi77 $(GOFMT) -w $(GO_FMT_FILES)7879.PHONY: go-check80go-check:81 $(eval MIN_GO_VERSION_STR := $(shell grep -Eo '^go\s+[0-9]+\.[0-9]+' go.mod | cut -d' ' -f2))82 $(eval MIN_GO_VERSION := $(shell printf "%03d%03d" $(shell echo '$(MIN_GO_VERSION_STR)' | tr '.' ' ')))83 $(eval GO_VERSION := $(shell printf "%03d%03d" $(shell $(GO) version | grep -Eo '[0-9]+\.[0-9]+' | tr '.' ' ');))84 @if [ "$(GO_VERSION)" -lt "$(MIN_GO_VERSION)" ]; then \85 echo "Act Runner requires Go $(MIN_GO_VERSION_STR) or greater to build. You can get it at https://go.dev/dl/"; \86 exit 1; \87 fi8889.PHONY: fmt-check90fmt-check:91 @hash gofumpt > /dev/null 2>&1; if [ $$? -ne 0 ]; then \92 $(GO) install mvdan.cc/gofumpt@latest; \93 fi94 @diff=$$($(GOFMT) -d $(GO_FMT_FILES)); \95 if [ -n "$$diff" ]; then \96 echo "Please run 'make fmt' and commit the result:"; \97 echo "$${diff}"; \98 exit 1; \99 fi;100101test: fmt-check102 @$(GO) test -v -cover -coverprofile coverage.txt ./... && echo "\n==>\033[32m Ok\033[m\n" || exit 1103104.PHONY: vet105vet:106 @echo "Running go vet..."107 @$(GO) vet $(GO_PACKAGES_TO_VET)108109install: $(GOFILES)110 $(GO) install -v -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)'111112build: go-check $(EXECUTABLE)113114$(EXECUTABLE): $(GOFILES)115 $(GO) build -v -tags 'netgo osusergo $(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o $@116117.PHONY: deps-backend118deps-backend:119 $(GO) mod download120 $(GO) install $(GXZ_PAGAGE)121 $(GO) install $(XGO_PACKAGE)122123.PHONY: release124release: release-windows release-linux release-darwin release-copy release-compress release-check125126$(DIST_DIRS):127 mkdir -p $(DIST_DIRS)128129.PHONY: release-windows130release-windows: | $(DIST_DIRS)131 CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -buildmode exe -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets '$(WINDOWS_ARCHS)' -out $(EXECUTABLE)-$(VERSION) .132ifeq ($(CI),true)133 cp -r /build/* $(DIST)/binaries/134endif135136.PHONY: release-linux137release-linux: | $(DIST_DIRS)138 CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets '$(LINUX_ARCHS)' -out $(EXECUTABLE)-$(VERSION) .139ifeq ($(CI),true)140 cp -r /build/* $(DIST)/binaries/141endif142143.PHONY: release-darwin144release-darwin: | $(DIST_DIRS)145 CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '$(LDFLAGS)' -targets '$(DARWIN_ARCHS)' -out $(EXECUTABLE)-$(VERSION) .146ifeq ($(CI),true)147 cp -r /build/* $(DIST)/binaries/148endif149150.PHONY: release-copy151release-copy: | $(DIST_DIRS)152 cd $(DIST); for file in `find . -type f -name "*"`; do cp $${file} ./release/; done;153154.PHONY: release-check155release-check: | $(DIST_DIRS)156 cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "checksumming $${file}" && $(SHASUM) `echo $${file} | sed 's/^..//'` > $${file}.sha256; done;157158.PHONY: release-compress159release-compress: | $(DIST_DIRS)160 cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "compressing $${file}" && $(GO) run $(GXZ_PAGAGE) -k -9 $${file}; done;161162.PHONY: docker163docker:164 if ! docker buildx version >/dev/null 2>&1; then \165 ARG_DISABLE_CONTENT_TRUST=--disable-content-trust=false; \166 fi; \167 docker build $${ARG_DISABLE_CONTENT_TRUST} -t $(DOCKER_REF) .168 docker build $${ARG_DISABLE_CONTENT_TRUST} -t $(DOCKER_ROOTLESS_REF) -f Dockerfile.rootless .169170clean:171 $(GO) clean -x -i ./...172 rm -rf coverage.txt $(EXECUTABLE) $(DIST)173174version:175 @echo $(VERSION)