export VERSION ?= $(shell git describe --tags --abbrev=0) export BUILD_DATE ?= $(shell date -u +'%Y%m%d-%H%M') export GOOS = linux LDFLAGS = -X github.com/yusing/go-proxy/pkg.version=${VERSION} ifeq ($(trace), 1) GODOXY_TRACE ?= 1 endif ifeq ($(debug), 1) CGO_ENABLED = 0 GODOXY_DEBUG = 1 BUILD_FLAGS = '' else ifeq ($(pprof), 1) CGO_ENABLED = 1 GODEBUG = gctrace=1 inittrace=1 schedtrace=3000 GORACE = log_path=logs/pprof strip_path_prefix=$(shell pwd)/ BUILD_FLAGS = -race -gcflags=all='-N -l' -tags pprof DOCKER_TAG = pprof VERSION += -pprof else CGO_ENABLED = 0 LDFLAGS += -s -w BUILD_FLAGS = -pgo=auto -tags production DOCKER_TAG = latest endif BUILD_FLAGS += -ldflags='$(LDFLAGS)' export CGO_ENABLED export GODOXY_DEBUG export GODOXY_TRACE export GODEBUG export GORACE export BUILD_FLAGS export DOCKER_TAG test: GODOXY_TEST=1 go test ./internal/... get: go get -u ./cmd && go mod tidy build: mkdir -p bin go build ${BUILD_FLAGS} -o bin/godoxy ./cmd if [ $(shell id -u) -eq 0 ]; \ then setcap CAP_NET_BIND_SERVICE=+eip bin/godoxy; \ else sudo setcap CAP_NET_BIND_SERVICE=+eip bin/godoxy; \ fi run: [ -f .env ] && godotenv -f .env go run ${BUILD_FLAGS} ./cmd mtrace: bin/godoxy debug-ls-mtrace > mtrace.json rapid-crash: docker run --restart=always --name test_crash -p 80 debian:bookworm-slim /bin/cat &&\ sleep 3 &&\ docker rm -f test_crash debug-list-containers: bash -c 'echo -e "GET /containers/json HTTP/1.0\r\n" | sudo netcat -U /var/run/docker.sock | tail -n +9 | jq' ci-test: mkdir -p /tmp/artifacts act -n --artifact-server-path /tmp/artifacts -s GITHUB_TOKEN="$$(gh auth token)" cloc: cloc --not-match-f '_test.go$$' cmd internal pkg push-docker-io: BUILDER=build docker buildx build \ --platform linux/arm64,linux/amd64 \ -f Dockerfile \ -t docker.io/yusing/godoxy-nightly:${DOCKER_TAG} \ -t docker.io/yusing/godoxy-nightly:${VERSION}-${BUILD_DATE} \ --build-arg VERSION="${VERSION}-nightly-${BUILD_DATE}" \ --build-arg BUILD_FLAGS="${BUILD_FLAGS}" \ --push . build-docker: docker build -t godoxy-nightly \ --build-arg VERSION="${VERSION}-nightly-${BUILD_DATE}" \ --build-arg BUILD_FLAGS="${BUILD_FLAGS}" \ . # To generate schema # comment out this part from typescript-json-schema.js#L884 # # if (indexType.flags !== ts.TypeFlags.Number && !isIndexedObject) { # throw new Error("Not supported: IndexSignatureDeclaration with index symbol other than a number or a string"); # } gen-schema-single: bun --bun run typescript-json-schema --noExtraProps --required --skipLibCheck --tsNodeRegister=true -o schemas/${OUT} schemas/${IN} ${CLASS} # minify python3 -c "import json; f=open('schemas/${OUT}', 'r'); j=json.load(f); f.close(); f=open('schemas/${OUT}', 'w'); json.dump(j, f, separators=(',', ':'));" gen-schema: bun --bun tsc make IN=config/config.ts \ CLASS=Config \ OUT=config.schema.json \ gen-schema-single make IN=providers/routes.ts \ CLASS=Routes \ OUT=routes.schema.json \ gen-schema-single make IN=middlewares/middleware_compose.ts \ CLASS=MiddlewareCompose \ OUT=middleware_compose.schema.json \ gen-schema-single make IN=docker.ts \ CLASS=DockerRoutes \ OUT=docker_routes.schema.json \ gen-schema-single update-schema-generator: pnpm up -g typescript-json-schema push-github: git push origin $(shell git rev-parse --abbrev-ref HEAD)