mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-19 20:32:35 +02:00

* cleanup code for URL type * fix makefile for trace mode * refactor, merge Entry, RawEntry and Route into one. * Implement fileserver. * refactor: rename HTTPRoute to ReverseProxyRoute to avoid confusion * refactor: move metrics logger to middleware package - fix prometheus metrics for load balanced routes - route will now fail when health monitor fail to start * fix extra output of ls-* commands by defer initializaing stuff, speed up start time * add test for path traversal attack, small fix on FileServer.Start method * rename rule.on.bypass to pass * refactor and fixed map-to-map deserialization * updated route loading logic * schemas: add "add_prefix" option to modify_request middleware * updated route JSONMarshalling --------- Co-authored-by: yusing <yusing@6uo.me>
126 lines
No EOL
3.3 KiB
Makefile
Executable file
126 lines
No EOL
3.3 KiB
Makefile
Executable file
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)
|
|
debug = 1
|
|
GODOXY_TRACE ?= 1
|
|
endif
|
|
|
|
ifeq ($(debug), 1)
|
|
CGO_ENABLED = 0
|
|
GODOXY_DEBUG = 1
|
|
BUILD_FLAGS = -tags production
|
|
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)
|