60 lines
1.9 KiB
Makefile
60 lines
1.9 KiB
Makefile
PORT ?= 8080
|
|
HOST ?= 127.0.0.1
|
|
TUNNEL_NAME ?= guitar-tabs
|
|
TUNNEL_HOST ?= tabs.bhakat.dev
|
|
TUNNEL_ORIGIN ?= http://127.0.0.1:$(PORT)
|
|
TUNNEL_EDGE_IP_VERSION ?= auto
|
|
.DEFAULT_GOAL := serve
|
|
|
|
.PHONY: help serve start tunnel-setup tunnel
|
|
|
|
help:
|
|
@printf '%s\n' \
|
|
'Guitar tabs sample' \
|
|
'' \
|
|
'Targets:' \
|
|
' make Start the local server' \
|
|
' make serve Start the local server' \
|
|
' make start Alias for make serve' \
|
|
' make tunnel-setup Create the Cloudflare Tunnel and DNS route (run once)' \
|
|
' make tunnel Serve locally and run the Cloudflare Tunnel in the foreground' \
|
|
' make help Show this help' \
|
|
'' \
|
|
'Options:' \
|
|
' PORT=8080 Server port' \
|
|
' HOST=127.0.0.1 Bind address' \
|
|
' TUNNEL_NAME=guitar-tabs Cloudflare Tunnel name' \
|
|
' TUNNEL_HOST=tabs.bhakat.dev Public hostname' \
|
|
' TUNNEL_ORIGIN=http://127.0.0.1:8080 Local URL served through the tunnel' \
|
|
' TUNNEL_EDGE_IP_VERSION=auto Cloudflare edge IP version (auto, 4, or 6)' \
|
|
'' \
|
|
'Examples:' \
|
|
' make serve PORT=9000 HOST=0.0.0.0' \
|
|
' make tunnel-setup' \
|
|
' make tunnel TUNNEL_EDGE_IP_VERSION=4'
|
|
|
|
serve:
|
|
uv run python -m http.server $(PORT) --bind $(HOST)
|
|
|
|
start: serve
|
|
|
|
tunnel-setup:
|
|
cloudflared tunnel create "$(TUNNEL_NAME)"
|
|
cloudflared tunnel route dns "$(TUNNEL_NAME)" "$(TUNNEL_HOST)"
|
|
|
|
tunnel:
|
|
@set -e; \
|
|
server_pid=''; \
|
|
cleanup() { \
|
|
if [ -n "$$server_pid" ]; then \
|
|
kill "$$server_pid" 2>/dev/null || true; \
|
|
wait "$$server_pid" 2>/dev/null || true; \
|
|
fi; \
|
|
}; \
|
|
trap cleanup EXIT; \
|
|
trap 'exit 130' INT TERM; \
|
|
uv run python -m http.server "$(PORT)" --bind "$(HOST)" & \
|
|
server_pid=$$!; \
|
|
printf '%s\n' "Serving $(TUNNEL_ORIGIN) at https://$(TUNNEL_HOST)"; \
|
|
cloudflared tunnel --edge-ip-version "$(TUNNEL_EDGE_IP_VERSION)" run --url "$(TUNNEL_ORIGIN)" "$(TUNNEL_NAME)"
|