2020-08-20 15:46:23 +00:00
VERSION := $( shell git describe --tags --always --dirty= "-dev" --match "[0-9][0-9][0-9][0-9].*.*" )
2020-07-07 15:44:07 +00:00
MSI_VERSION := $( shell git tag -l --sort= v:refname | grep "w" | tail -1 | cut -c2-)
2020-09-22 21:56:23 +00:00
#MSI_VERSION expects the format of the tag to be: (wX.X.X). Starts with the w character to not break cfsetup.
2020-07-07 15:44:07 +00:00
#e.g. w3.0.1 or w4.2.10. It trims off the w character when creating the MSI.
2018-07-24 19:55:18 +00:00
2021-01-28 16:10:19 +00:00
i f e q ( $( FIPS ) , t r u e )
2021-02-07 01:28:48 +00:00
GO_BUILD_TAGS := $( GO_BUILD_TAGS) fips
e n d i f
i f n e q ( $( GO_BUILD_TAGS ) , )
GO_BUILD_TAGS := -tags $( GO_BUILD_TAGS)
2021-01-28 16:10:19 +00:00
e n d i f
2021-07-14 19:45:29 +00:00
i f e q ( $( NIGHTLY ) , t r u e )
DEB_PACKAGE_NAME := cloudflared-nightly
NIGHTLY_FLAGS := --conflicts cloudflared --replaces cloudflared
e l s e
DEB_PACKAGE_NAME := cloudflared
e n d i f
2021-01-28 16:10:19 +00:00
DATE := $( shell date -u '+%Y-%m-%d-%H%M UTC' )
VERSION_FLAGS := -ldflags= '-X "main.Version=$(VERSION)" -X "main.BuildTime=$(DATE)"'
2018-07-25 21:05:46 +00:00
IMPORT_PATH := github.com/cloudflare/cloudflared
PACKAGE_DIR := $( CURDIR) /packaging
2020-07-02 18:23:54 +00:00
INSTALL_BINDIR := /usr/bin/
MAN_DIR := /usr/share/man/man1/
2018-07-25 21:05:46 +00:00
2018-07-26 20:45:18 +00:00
EQUINOX_FLAGS = --version= " $( VERSION) " \
2020-05-29 01:06:27 +00:00
--platforms= " $( EQUINOX_BUILD_PLATFORMS) " \
--app= " $( EQUINOX_APP_ID) " \
--token= " $( EQUINOX_TOKEN) " \
--channel= " $( EQUINOX_CHANNEL) "
2018-07-26 20:45:18 +00:00
i f e q ( $( EQUINOX_IS_DRAFT ) , t r u e )
EQUINOX_FLAGS := --draft $( EQUINOX_FLAGS)
e n d i f
2020-05-29 01:06:27 +00:00
LOCAL_ARCH ?= $( shell uname -m)
2020-06-30 19:46:05 +00:00
i f n e q ( $( GOARCH ) , )
TARGET_ARCH ?= $( GOARCH)
e l s e i f e q ( $( LOCAL_ARCH ) , x 8 6 _ 6 4 )
2020-05-29 01:06:27 +00:00
TARGET_ARCH ?= amd64
2021-03-01 17:43:08 +00:00
e l s e i f e q ( $( LOCAL_ARCH ) , a m d 6 4 )
TARGET_ARCH ?= amd64
2020-07-07 15:44:07 +00:00
e l s e i f e q ( $( LOCAL_ARCH ) , i 6 8 6 )
TARGET_ARCH ?= amd64
2020-05-29 01:06:27 +00:00
e l s e i f e q ( $( shell echo $ ( LOCAL_ARCH ) | head -c 5) , a r m v 8 )
TARGET_ARCH ?= arm64
e l s e i f e q ( $( LOCAL_ARCH ) , a a r c h 6 4 )
TARGET_ARCH ?= arm64
e l s e i f e q ( $( shell echo $ ( LOCAL_ARCH ) | head -c 4) , a r m v )
TARGET_ARCH ?= arm
e l s e
$( error This system's architecture $(LOCAL_ARCH) isn' t supported)
e n d i f
LOCAL_OS ?= $( shell go env GOOS)
i f e q ( $( LOCAL_OS ) , l i n u x )
TARGET_OS ?= linux
e l s e i f e q ( $( LOCAL_OS ) , d a r w i n )
TARGET_OS ?= darwin
2020-06-09 19:15:12 +00:00
e l s e i f e q ( $( LOCAL_OS ) , w i n d o w s )
TARGET_OS ?= windows
2020-09-22 21:56:23 +00:00
e l s e i f e q ( $( LOCAL_OS ) , f r e e b s d )
TARGET_OS ?= freebsd
2020-05-29 01:06:27 +00:00
e l s e
$( error This system's OS $(LOCAL_OS) isn' t supported)
2018-10-19 19:01:08 +00:00
e n d i f
2020-06-23 21:23:40 +00:00
i f e q ( $( TARGET_OS ) , w i n d o w s )
EXECUTABLE_PATH = ./cloudflared.exe
e l s e
EXECUTABLE_PATH = ./cloudflared
e n d i f
2020-07-06 19:44:39 +00:00
i f e q ( $( FLAVOR ) , c e n t o s - 7 )
TARGET_PUBLIC_REPO ?= el7
e l s e
TARGET_PUBLIC_REPO ?= $( FLAVOR)
e n d i f
2018-07-24 19:55:18 +00:00
.PHONY : all
all : cloudflared test
2018-10-18 22:26:21 +00:00
.PHONY : clean
clean :
go clean
2018-07-24 19:55:18 +00:00
.PHONY : cloudflared
2021-07-22 15:36:49 +00:00
cloudflared :
2021-03-02 15:43:35 +00:00
i f e q ( $( FIPS ) , t r u e )
$( info Building cloudflared with go-fips)
-test -f fips/fips.go && mv fips/fips.go fips/fips.go.linux-amd64
mv fips/fips.go.linux-amd64 fips/fips.go
e n d i f
2021-02-07 01:28:48 +00:00
GOOS = $( TARGET_OS) GOARCH = $( TARGET_ARCH) go build -v -mod= vendor $( GO_BUILD_TAGS) $( VERSION_FLAGS) $( IMPORT_PATH) /cmd/cloudflared
2018-07-24 19:55:18 +00:00
2021-03-02 15:43:35 +00:00
i f e q ( $( FIPS ) , t r u e )
mv fips/fips.go fips/fips.go.linux-amd64
e n d i f
2019-04-29 21:25:34 +00:00
.PHONY : container
container :
2020-05-29 01:06:27 +00:00
docker build --build-arg= TARGET_ARCH = $( TARGET_ARCH) --build-arg= TARGET_OS = $( TARGET_OS) -t cloudflare/cloudflared-$( TARGET_OS) -$( TARGET_ARCH) :" $( VERSION) " .
2019-04-29 21:25:34 +00:00
2018-07-24 19:55:18 +00:00
.PHONY : test
2019-03-29 23:05:11 +00:00
test : vet
2021-02-08 21:31:51 +00:00
i f n d e f C I
2019-11-04 20:28:48 +00:00
go test -v -mod= vendor -race $( VERSION_FLAGS) ./...
2021-02-08 21:31:51 +00:00
e l s e
@mkdir -p .cover
go test -v -mod= vendor -race $( VERSION_FLAGS) -coverprofile= ".cover/c.out" ./...
go tool cover -html ".cover/c.out" -o .cover/all.html
e n d i f
2018-07-25 21:05:46 +00:00
2019-09-18 16:33:13 +00:00
.PHONY : test -ssh -server
test-ssh-server :
docker-compose -f ssh_server_tests/docker-compose.yml up
2020-06-30 15:43:54 +00:00
d e f i n e p u b l i s h _ p a c k a g e
2021-03-11 19:00:09 +00:00
chmod 664 cloudflared*.$( 1) ; \
2020-06-26 18:47:11 +00:00
for HOST in $( CF_PKG_HOSTS) ; do \
ssh-keyscan -t rsa $$ HOST >> ~/.ssh/known_hosts; \
2021-03-11 19:00:09 +00:00
scp -p -4 cloudflared*.$( 1) cfsync@$$ HOST:/state/cf-pkg/staging/$( 2) /$( TARGET_PUBLIC_REPO) /cloudflared/; \
2020-06-26 18:47:11 +00:00
done
2020-06-30 15:43:54 +00:00
e n d e f
.PHONY : publish -deb
publish-deb : cloudflared -deb
2020-07-13 17:14:48 +00:00
$( call publish_package,deb,apt)
2020-06-30 15:43:54 +00:00
.PHONY : publish -rpm
publish-rpm : cloudflared -rpm
2020-07-13 17:14:48 +00:00
$( call publish_package,rpm,yum)
2020-06-26 18:47:11 +00:00
2020-07-02 18:23:54 +00:00
d e f i n e b u i l d _ p a c k a g e
2018-07-25 21:05:46 +00:00
mkdir -p $( PACKAGE_DIR)
cp cloudflared $( PACKAGE_DIR) /cloudflared
2020-07-02 18:23:54 +00:00
cat cloudflared_man_template | sed -e 's/\$${VERSION}/$(VERSION)/; s/\$${DATE}/$(DATE)/' > $( PACKAGE_DIR) /cloudflared.1
2020-11-21 11:54:18 +00:00
fakeroot fpm -C $( PACKAGE_DIR) -s dir -t $( 1) \
2020-07-08 14:36:42 +00:00
--description 'Cloudflare Argo tunnel daemon' \
--vendor 'Cloudflare' \
--license 'Cloudflare Service Agreement' \
--url 'https://github.com/cloudflare/cloudflared' \
-m 'Cloudflare <support@cloudflare.com>' \
2021-07-14 19:45:29 +00:00
-a $( TARGET_ARCH) -v $( VERSION) -n $( DEB_PACKAGE_NAME) $( NIGHTLY_FLAGS) --after-install postinst.sh --after-remove postrm.sh \
2020-07-02 18:23:54 +00:00
cloudflared = $( INSTALL_BINDIR) cloudflared.1= $( MAN_DIR)
e n d e f
.PHONY : cloudflared -deb
cloudflared-deb : cloudflared
$( call build_package,deb)
2018-07-26 20:45:18 +00:00
2020-06-30 15:43:54 +00:00
.PHONY : cloudflared -rpm
cloudflared-rpm : cloudflared
2020-07-02 18:23:54 +00:00
$( call build_package,rpm)
2020-06-30 15:43:54 +00:00
2021-07-22 15:36:49 +00:00
.PHONY : cloudflared -pkg
cloudflared-pkg : cloudflared
$( call build_package,osxpkg)
.PHONY : cloudflared -msi
cloudflared-msi : cloudflared
wixl --define Version = $( VERSION) --define Path = $( EXECUTABLE_PATH) --output cloudflared-$( VERSION) -$( TARGET_ARCH) .msi cloudflared.wxs
2018-08-16 00:11:30 +00:00
.PHONY : cloudflared -darwin -amd 64.tgz
cloudflared-darwin-amd64.tgz : cloudflared
tar czf cloudflared-darwin-amd64.tgz cloudflared
rm cloudflared
2020-09-22 21:56:23 +00:00
.PHONY : cloudflared -junos
cloudflared-junos : cloudflared jetez -certificate .pem jetez -key .pem
jetez --source . \
-j jet.yaml \
--key jetez-key.pem \
--cert jetez-certificate.pem \
--version $( VERSION)
rm jetez-*.pem
jetez-certificate.pem :
i f n d e f J E T E Z _ C E R T
$( error JETEZ_CERT not defined)
e n d i f
@echo "Writing JetEZ certificate"
@echo " $$ JETEZ_CERT " > jetez-certificate.pem
jetez-key.pem :
i f n d e f J E T E Z _ K E Y
$( error JETEZ_KEY not defined)
e n d i f
@echo "Writing JetEZ key"
@echo " $$ JETEZ_KEY " > jetez-key.pem
.PHONY : publish -cloudflared -junos
publish-cloudflared-junos : cloudflared -junos cloudflared -x 86-64.latest .s 3
i f n d e f S 3 _ E N D P O I N T
$( error S3_HOST not defined)
e n d i f
i f n d e f S 3 _ U R I
$( error S3_URI not defined)
e n d i f
i f n d e f S 3 _ A C C E S S _ K E Y
$( error S3_ACCESS_KEY not defined)
e n d i f
i f n d e f S 3 _ S E C R E T _ K E Y
$( error S3_SECRET_KEY not defined)
e n d i f
sha256sum cloudflared-x86-64-$( VERSION) .tgz | awk '{printf $$1}' > cloudflared-x86-64-$( VERSION) .tgz.shasum
s4cmd --endpoint-url $( S3_ENDPOINT) --force --API-GrantRead= uri = http://acs.amazonaws.com/groups/global/AllUsers \
put cloudflared-x86-64-$( VERSION) .tgz $( S3_URI) /cloudflared-x86-64-$( VERSION) .tgz
s4cmd --endpoint-url $( S3_ENDPOINT) --force --API-GrantRead= uri = http://acs.amazonaws.com/groups/global/AllUsers \
put cloudflared-x86-64-$( VERSION) .tgz.shasum $( S3_URI) /cloudflared-x86-64-$( VERSION) .tgz.shasum
dpkg --compare-versions " $( VERSION) " gt " $( shell cat cloudflared-x86-64.latest.s3) " && \
echo -n " $( VERSION) " > cloudflared-x86-64.latest && \
s4cmd --endpoint-url $( S3_ENDPOINT) --force --API-GrantRead= uri = http://acs.amazonaws.com/groups/global/AllUsers \
put cloudflared-x86-64.latest $( S3_URI) /cloudflared-x86-64.latest || \
echo "Latest version not updated"
cloudflared-x86-64.latest.s3 :
s4cmd --endpoint-url $( S3_ENDPOINT) --force \
get $( S3_URI) /cloudflared-x86-64.latest cloudflared-x86-64.latest.s3
2018-08-16 00:11:30 +00:00
.PHONY : homebrew -upload
homebrew-upload : cloudflared -darwin -amd 64.tgz
aws s3 --endpoint-url $( S3_ENDPOINT) cp --acl public-read $$ ^ $( S3_URI) /cloudflared-$$ ( VERSION) -$1 .tgz
aws s3 --endpoint-url $( S3_ENDPOINT) cp --acl public-read $( S3_URI) /cloudflared-$$ ( VERSION) -$1 .tgz $( S3_URI) /cloudflared-stable-$1 .tgz
2019-03-29 23:05:11 +00:00
.PHONY : homebrew -release
2018-08-16 00:11:30 +00:00
homebrew-release : homebrew -upload
./publish-homebrew-formula.sh cloudflared-darwin-amd64.tgz $( VERSION) homebrew-cloudflare
2018-07-26 20:45:18 +00:00
.PHONY : release
release : bin /equinox
bin/equinox release $( EQUINOX_FLAGS) -- $( VERSION_FLAGS) $( IMPORT_PATH) /cmd/cloudflared
2020-06-23 21:23:40 +00:00
.PHONY : github -release
github-release : cloudflared
python3 github_release.py --path $( EXECUTABLE_PATH) --release-version $( VERSION)
2020-07-29 17:50:25 +00:00
.PHONY : github -message
github-message :
python3 github_message.py --release-version $( VERSION)
2020-08-07 19:01:38 +00:00
.PHONY : github -mac -upload
github-mac-upload :
2020-09-17 15:56:18 +00:00
python3 github_release.py --path artifacts/cloudflared-darwin-amd64.tgz --release-version $( VERSION) --name cloudflared-darwin-amd64.tgz
python3 github_release.py --path artifacts/cloudflared-amd64.pkg --release-version $( VERSION) --name cloudflared-amd64.pkg
2020-08-07 19:01:38 +00:00
2018-07-26 20:45:18 +00:00
bin/equinox :
mkdir -p bin
curl -s https://bin.equinox.io/c/75JtLRTsJ3n/release-tool-beta-$( EQUINOX_PLATFORM) .tgz | tar xz -C bin/
2018-10-08 19:20:28 +00:00
2019-03-29 23:05:11 +00:00
2021-07-22 15:36:49 +00:00
.PHONY : tunnelrpc -deps
tunnelrpc-deps :
2019-03-29 23:05:11 +00:00
which capnp # https://capnproto.org/install.html
which capnpc-go # go get zombiezen.com/go/capnproto2/capnpc-go
2019-05-17 14:23:05 +00:00
capnp compile -ogo tunnelrpc/tunnelrpc.capnp
2019-03-29 23:05:11 +00:00
2021-07-08 09:29:49 +00:00
.PHONY : quic -deps
quic-deps :
which capnp
which capnpc-go
capnp compile -ogo quic/schema/quic_metadata_protocol.capnp
2019-03-29 23:05:11 +00:00
.PHONY : vet
vet :
2019-11-04 20:28:48 +00:00
go vet -mod= vendor ./...
2021-03-01 17:43:08 +00:00
which go-sumtype # go get github.com/BurntSushi/go-sumtype (don't do this in build directory or this will cause vendor issues)
2019-11-04 20:28:48 +00:00
go-sumtype $$ ( go list -mod= vendor ./...)
2020-07-07 15:44:07 +00:00
2021-03-23 14:30:43 +00:00
.PHONY : goimports
goimports :
for d in $$ ( go list -mod= readonly -f '{{.Dir}}' -a ./... | fgrep -v tunnelrpc) ; do goimports -format-only -local github.com/cloudflare/cloudflared -w $$ d ; done