SHELL = /bin/bash -o pipefail export PATH := $(shell go env GOPATH)/bin:$(PATH) ROOT_DIR=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) BUILD_DIR=$(ROOT_DIR)/build BIN=$(BUILD_DIR)/sshpoke GO_VERSION=$(shell go version | sed -e 's/go version //') VERSION=$(shell git describe --tags 2>/dev/null || git log --format="v0.0.0-%h" -n 1 || echo "v0.0.0-unknown") LDFLAGS="-X 'github.com/Neur0toxine/sshpoke/cmd.Version=${VERSION}'" .PHONY: run clean_backend clone_sshlib build: deps fmt @echo " ► Building with ${GO_VERSION}" @CGO_ENABLED=0 go build -tags=release -ldflags ${LDFLAGS} -o $(BIN) . @echo $(BIN) test: deps fmt @echo " ► Running tests" @go test -timeout 1m ./... -v -cpu 4 fmt: @echo " ► Running gofmt" @gofmt -l -s -w `go list -f '{{.Dir}}' ${ROOT_DIR}/... | grep -v /vendor/` deps: @echo " ► Installing dependencies" @go mod tidy @go mod vendor run: @$(BIN) clean: @rm -rf $(BUILD_DIR) generate: install_swag install_protobuf @echo " ► Performing code generation" @cd $(ROOT_DIR) && go generate `go list -f '{{.Dir}}' ${ROOT_DIR}/... | grep -v /vendor/` install_protobuf: ifeq (, $(shell command -v protoc-gen-go 2> /dev/null)) @echo " ► Installing protoc-gen-go" @go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 endif ifeq (, $(shell command -v protoc-gen-go-grpc 2> /dev/null)) @echo " ► Installing protoc-gen-go-grpc" @go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 endif install_swag: ifeq (, $(shell command -v swag 2> /dev/null)) @echo " ► Installing swag tool" @go install github.com/swaggo/swag/cmd/swag@latest endif clone_cryptolib: @rm -rf cryptolib && \ git clone https://go.googlesource.com/crypto cryptolib && \ mv cryptolib/internal/poly1305 cryptolib/ssh/internal/ && \ find cryptolib/ssh -type f -name '*.go' -exec sed -i 's?golang.org/x/crypto/ssh?github.com/Neur0toxine/sshpoke/pkg/proto/ssh?g' {} \; && \ find cryptolib/ssh -type f -name '*.go' -exec sed -i 's?golang.org/x/crypto/internal/poly1305?github.com/Neur0toxine/sshpoke/pkg/proto/ssh/internal/poly1305?g' {} \; && \ find cryptolib/ssh -type f -name '*_test.go' -delete && \ rm -rf cryptolib/ssh/test && \ rm -rf cryptolib/ssh/testdata update_sshlib_patch: @diff -Naru cryptolib/ssh pkg/proto/ssh > patch/ssh_proto_patches.patch update_sshlib: clone_cryptolib @mv pkg/proto/ssh pkg/proto/ssh.bak && \ mv cryptolib/ssh pkg/proto/ && \ patch -p0 < patch/ssh_proto_patches.patch && \ rm -rf pkg/proto/ssh.bak && \ rm -rf cryptolib