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