cloudflare/cloudflared

Public

mirrored from https://github.com/cloudflare/cloudflaredAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
5b3b59210883af1e534315017fd1caefbad21a2e

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

Makefile

160lines · modecode

1VERSION := $(shell git describe --tags --always --dirty="-dev")
2DATE := $(shell date -u '+%Y-%m-%d-%H%M UTC')
3VERSION_FLAGS := -ldflags='-X "main.Version=$(VERSION)" -X "main.BuildTime=$(DATE)"'
4
5IMPORT_PATH := github.com/cloudflare/cloudflared
6PACKAGE_DIR := $(CURDIR)/packaging
7INSTALL_BINDIR := /usr/bin/
8MAN_DIR := /usr/share/man/man1/
9
10EQUINOX_FLAGS = --version="$(VERSION)" \
11 --platforms="$(EQUINOX_BUILD_PLATFORMS)" \
12 --app="$(EQUINOX_APP_ID)" \
13 --token="$(EQUINOX_TOKEN)" \
14 --channel="$(EQUINOX_CHANNEL)"
15
16ifeq ($(EQUINOX_IS_DRAFT), true)
17 EQUINOX_FLAGS := --draft $(EQUINOX_FLAGS)
18endif
19
20LOCAL_ARCH ?= $(shell uname -m)
21ifneq ($(GOARCH),)
22 TARGET_ARCH ?= $(GOARCH)
23else ifeq ($(LOCAL_ARCH),x86_64)
24 TARGET_ARCH ?= amd64
25else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 5),armv8)
26 TARGET_ARCH ?= arm64
27else ifeq ($(LOCAL_ARCH),aarch64)
28 TARGET_ARCH ?= arm64
29else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 4),armv)
30 TARGET_ARCH ?= arm
31else
32 $(error This system's architecture $(LOCAL_ARCH) isn't supported)
33endif
34
35LOCAL_OS ?= $(shell go env GOOS)
36ifeq ($(LOCAL_OS),linux)
37 TARGET_OS ?= linux
38else ifeq ($(LOCAL_OS),darwin)
39 TARGET_OS ?= darwin
40else ifeq ($(LOCAL_OS),windows)
41 TARGET_OS ?= windows
42else
43 $(error This system's OS $(LOCAL_OS) isn't supported)
44endif
45
46ifeq ($(TARGET_OS), windows)
47 EXECUTABLE_PATH=./cloudflared.exe
48else
49 EXECUTABLE_PATH=./cloudflared
50endif
51
52ifeq ($(FLAVOR), centos-7)
53 TARGET_PUBLIC_REPO ?= el7
54else
55 TARGET_PUBLIC_REPO ?= $(FLAVOR)
56endif
57
58.PHONY: all
59all: cloudflared test
60
61.PHONY: clean
62clean:
63 go clean
64
65.PHONY: cloudflared
66cloudflared: tunnel-deps
67 GOOS=$(TARGET_OS) GOARCH=$(TARGET_ARCH) go build -v -mod=vendor $(VERSION_FLAGS) $(IMPORT_PATH)/cmd/cloudflared
68
69.PHONY: container
70container:
71 docker build --build-arg=TARGET_ARCH=$(TARGET_ARCH) --build-arg=TARGET_OS=$(TARGET_OS) -t cloudflare/cloudflared-$(TARGET_OS)-$(TARGET_ARCH):"$(VERSION)" .
72
73.PHONY: test
74test: vet
75 go test -v -mod=vendor -race $(VERSION_FLAGS) ./...
76
77.PHONY: test-ssh-server
78test-ssh-server:
79 docker-compose -f ssh_server_tests/docker-compose.yml up
80
81define publish_package
82 for HOST in $(CF_PKG_HOSTS); do \
83 ssh-keyscan -t rsa $$HOST >> ~/.ssh/known_hosts; \
84 scp -4 cloudflared*.$(1) cfsync@$$HOST:/state/cf-pkg/staging/$(2)/$(TARGET_PUBLIC_REPO)/cloudflared/; \
85 done
86endef
87
88.PHONY: publish-deb
89publish-deb: cloudflared-deb
90 $(call publish_package,deb,apt)
91
92.PHONY: publish-rpm
93publish-rpm: cloudflared-rpm
94 $(call publish_package,rpm,yum)
95
96define build_package
97 mkdir -p $(PACKAGE_DIR)
98 cp cloudflared $(PACKAGE_DIR)/cloudflared
99 cat cloudflared_man_template | sed -e 's/\$${VERSION}/$(VERSION)/; s/\$${DATE}/$(DATE)/' > $(PACKAGE_DIR)/cloudflared.1
100 fakeroot fpm -C $(PACKAGE_DIR) -s dir -t $(1) --$(1)-compression bzip2 \
101 --description 'Cloudflare Argo tunnel daemon' \
102 --vendor 'Cloudflare' \
103 --license 'Cloudflare Service Agreement' \
104 --url 'https://github.com/cloudflare/cloudflared' \
105 -m 'Cloudflare <support@cloudflare.com>' \
106 -a $(TARGET_ARCH) -v $(VERSION) -n cloudflared --after-install postinst.sh --after-remove postrm.sh \
107 cloudflared=$(INSTALL_BINDIR) cloudflared.1=$(MAN_DIR)
108endef
109
110.PHONY: cloudflared-deb
111cloudflared-deb: cloudflared
112 $(call build_package,deb)
113
114.PHONY: cloudflared-rpm
115cloudflared-rpm: cloudflared
116 $(call build_package,rpm)
117
118.PHONY: cloudflared-darwin-amd64.tgz
119cloudflared-darwin-amd64.tgz: cloudflared
120 tar czf cloudflared-darwin-amd64.tgz cloudflared
121 rm cloudflared
122
123.PHONY: homebrew-upload
124homebrew-upload: cloudflared-darwin-amd64.tgz
125 aws s3 --endpoint-url $(S3_ENDPOINT) cp --acl public-read $$^ $(S3_URI)/cloudflared-$$(VERSION)-$1.tgz
126 aws s3 --endpoint-url $(S3_ENDPOINT) cp --acl public-read $(S3_URI)/cloudflared-$$(VERSION)-$1.tgz $(S3_URI)/cloudflared-stable-$1.tgz
127
128.PHONY: homebrew-release
129homebrew-release: homebrew-upload
130 ./publish-homebrew-formula.sh cloudflared-darwin-amd64.tgz $(VERSION) homebrew-cloudflare
131
132.PHONY: release
133release: bin/equinox
134 bin/equinox release $(EQUINOX_FLAGS) -- $(VERSION_FLAGS) $(IMPORT_PATH)/cmd/cloudflared
135
136.PHONY: github-release
137github-release: cloudflared
138 python3 github_release.py --path $(EXECUTABLE_PATH) --release-version $(VERSION)
139
140.PHONY: github-message
141github-message:
142 python3 github_message.py --release-version $(VERSION)
143
144bin/equinox:
145 mkdir -p bin
146 curl -s https://bin.equinox.io/c/75JtLRTsJ3n/release-tool-beta-$(EQUINOX_PLATFORM).tgz | tar xz -C bin/
147
148.PHONY: tunnel-deps
149tunnel-deps: tunnelrpc/tunnelrpc.capnp.go
150
151tunnelrpc/tunnelrpc.capnp.go: tunnelrpc/tunnelrpc.capnp
152 which capnp # https://capnproto.org/install.html
153 which capnpc-go # go get zombiezen.com/go/capnproto2/capnpc-go
154 capnp compile -ogo tunnelrpc/tunnelrpc.capnp
155
156.PHONY: vet
157vet:
158 go vet -mod=vendor ./...
159 which go-sumtype # go get github.com/BurntSushi/go-sumtype
160 go-sumtype $$(go list -mod=vendor ./...)