summaryrefslogtreecommitdiff
path: root/Makefile
blob: e656f64355d7a34472d4807df25b56cc2d2bf557 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
IMAGE=docker.crute.me/ssh-proxy
SERVER_BINARY=ssh-proxy
CLIENT_BINARY=client

SERVER_FILES := $(shell find . -name '*.go' -o -name '*.tpl' -o -name '*.js')
CLIENT_FILES := $(shell find . -name '*.go')

$(SERVER_BINARY): $(SERVER_FILES)
	@mkdir clients/ || true
	@touch clients/keep
	CGO_ENABLED=0 go build \
		-ldflags "-X main.version=$(shell git describe --long --tags --dirty --always) \
				  -X code.crute.us/mcrute/ssh-proxy/cmd/client.clientId=$(CLIENT_ID)"  \
		-o $@

.PHONY: client
client:
	@[ "$(CLIENT_ID)" ] || ( echo "CLIENT_ID must be set"; exit 1 )

	CGO_ENABLED=0 go build \
		-tags clientonly \
		-ldflags "-X main.version=$(shell git describe --long --tags --dirty --always) \
				  -X code.crute.us/mcrute/ssh-proxy/cmd/client.clientId=$(CLIENT_ID) \
				  -s -w"  \
		-o $(OUTFILE)

clients/$(CLIENT_BINARY)-linux-amd64: $(CLIENT_FILES)
	GOARCH=amd64 OUTFILE=$@ $(MAKE) client

clients/$(CLIENT_BINARY)-linux-arm64: $(CLIENT_FILES)
	GOARCH=arm64 OUTFILE=$@ $(MAKE) client

clients/$(CLIENT_BINARY)-mac-amd64: $(CLIENT_FILES)
	GOOS=darwin GOARCH=amd64 OUTFILE=$@ $(MAKE) client

clients/$(CLIENT_BINARY)-mac-arm64: $(CLIENT_FILES)
	GOOS=darwin GOARCH=arm64 OUTFILE=$@ $(MAKE) client

.PHONY: release
release: clients/$(CLIENT_BINARY)-linux-amd64 clients/$(CLIENT_BINARY)-linux-arm64 clients/$(CLIENT_BINARY)-mac-amd64 clients/$(CLIENT_BINARY)-mac-arm64 $(SERVER_BINARY)

.PHONY: vet
vet: main.go
	go vet $<

.PHONY: docker
docker: release
	mkdir docker; cp Dockerfile $(SERVER_BINARY) docker; cd docker; \
	docker pull $(shell grep '^FROM ' Dockerfile | cut -d' ' -f2); \
	docker build --no-cache -t $(IMAGE):stage .

.PHONY: publish
publish:
	docker push $(IMAGE):stage

.PHONY: publish-prod
publish-prod:
	docker tag $(IMAGE):stage $(IMAGE):latest
	docker push $(IMAGE):latest

.PHONY: clean-server
clean-server:
	rm $(SERVER_BINARY) || true

.PHONY: clean
clean: clean-server
	rm -rf docker clients || true

.PHONY: run-web
run-web: clean-server $(SERVER_BINARY)
	test -n "$(VAULT_ROLE_ID)" # Caller must export VAULT_ROLE_ID
	test -n "$(VAULT_SECRET_ID)" # Caller must also export VAULT_SECRET_ID
	VAULT_ADDR="https://vault.sea4.crute.me:8200" \
		./$(SERVER_BINARY) --debug \
		--hostname=dev.ssh-proxy.crute.me \
		web