Ctrl K
ComunidadGuías…

Makefile

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Variables
APP_NAME=autentico
VERSION=$(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
LDFLAGS=-s -w -X github.com/eugenioenko/autentico/pkg/cli.Version=$(VERSION)
SWAG=$(shell go env GOPATH)/bin/swag

# Default target
all: build

# Build Go binary
build-go:
	go build -ldflags="$(LDFLAGS)" -o $(APP_NAME) main.go

# Build admin UI + account UI + Go binary
build: admin-ui-build account-ui-build
	CGO_ENABLED=0 go build -ldflags="$(LDFLAGS)" -o $(APP_NAME) main.go
	@echo ""
	@echo "Build complete. Binary: ./$(APP_NAME)"
	@echo ""
	@echo "Next steps:"
	@echo "  ./$(APP_NAME) init     # generate .env with keys and secrets"
	@echo "  ./$(APP_NAME) start    # start the server"
	@echo ""
	@echo "Using Autentico? We'd love to hear from you."
	@echo "Share your use case: https://github.com/eugenioenko/autentico/discussions/113"
	@echo ""

# Run the application
run:
	go run main.go start

# Format code using gofmt
fmt:
	gofmt -w .

# Run tests
.PHONY: test
test:
	go test -p 1 -v ./...

# Run functional black-box tests (builds binary if needed, starts real server)
.PHONY: test-functional
test-functional: build-go
	cd tests/functional && pnpm install && pnpm test

# Record and encode the README demo video (see tests/browser/demo/README.md)
.PHONY: demo-video
demo-video: build
	cd tests/browser && npx tsx demo/record-demo.ts && demo/encode.sh
	cp tests/browser/demo/out/autentico-demo.webp tests/browser/demo/out/autentico-demo.mp4 assets/
	@echo "Demo assets updated in assets/"

# Run e2e Go tests
.PHONY: test-e2e
test-e2e:
	go test -p 1 -v ./tests/e2e/...

# Run a linter (requires `golangci-lint`)
lint:
	golangci-lint run ./...


# Install required tools if missing
tool-check:
	@which go > /dev/null 2>&1 || (echo "Error: Go is not installed. Install it from https://go.dev/dl/" && exit 1)
	@which $(SWAG) > /dev/null 2>&1 || (echo "Installing swag..." && go install github.com/swaggo/swag/cmd/swag@latest)

# Generate swagger docs
generate-docs: tool-check
	$(SWAG) init

# Build admin UI and copy to pkg/admin/dist
admin-ui-build: generate-docs
	cd admin-ui && pnpm install && pnpm run build
	rm -rf pkg/admin/dist
	cp -r admin-ui/dist pkg/admin/dist

# Build account UI and copy to pkg/account/dist
account-ui-build:
	cd account-ui && pnpm install && pnpm run build
	rm -rf pkg/account/dist
	cp -r account-ui/dist pkg/account/dist

# Fast build: skip tsc type-checking in UI builds
fast: admin-ui-build-fast account-ui-build-fast
	CGO_ENABLED=0 go build -ldflags="$(LDFLAGS)" -o $(APP_NAME) main.go
	@echo ""
	@echo "Fast build complete. Binary: ./$(APP_NAME)"
	@echo ""

# Build admin UI (fast, no tsc) and copy to pkg/admin/dist
admin-ui-build-fast:
	cd admin-ui && pnpm install && pnpm run build:fast
	rm -rf pkg/admin/dist
	cp -r admin-ui/dist pkg/admin/dist

# Build account UI (fast, no tsc) and copy to pkg/account/dist
account-ui-build-fast:
	cd account-ui && pnpm install && pnpm run build:fast
	rm -rf pkg/account/dist
	cp -r account-ui/dist pkg/account/dist

HELM ?= helm
HELM_CHART_DIR ?= deploy/helm/autentico
HELM_CHART_DIST ?= dist/helm
# Derive the registry owner from the origin remote so forks publish to their
# own GHCR namespace. Override HELM_CHART_REPO to publish somewhere else.
GITHUB_OWNER ?= $(shell git remote get-url origin 2>/dev/null | sed -nE 's|.*github\.com[:/]([^/]+)/.*|\1|p' | tr '[:upper:]' '[:lower:]')
HELM_CHART_REPO ?= oci://ghcr.io/$(or $(GITHUB_OWNER),eugenioenko)/charts
HELM_PACKAGE_FLAGS ?=

.PHONY: helm-lint helm-template helm-package helm-push

# Validate the Helm chart
helm-lint:
	$(HELM) lint --strict $(HELM_CHART_DIR)

# Render the Helm chart with default values
helm-template:
	$(HELM) template autentico $(HELM_CHART_DIR)

# Build the distributable chart archive in dist/helm (git-ignored)
helm-package: helm-lint
	rm -rf $(HELM_CHART_DIST)
	mkdir -p $(HELM_CHART_DIST)
	$(HELM) package $(HELM_CHART_DIR) --destination $(HELM_CHART_DIST) $(HELM_PACKAGE_FLAGS)

# Package and publish to an OCI registry (login first: helm registry login ghcr.io)
helm-push: helm-package
	$(HELM) push $(HELM_CHART_DIST)/*.tgz $(HELM_CHART_REPO)

docker-build:
	docker build -t autentico:tag .

docker-compose:
	docker compose up -d

# Fresh start: wipe local DB, rebuild, init, and launch
fresh: build
	rm -f ./autentico.db ./autentico.db-shm ./autentico.db-wal .env
	./$(APP_NAME) init --dev
	AUTENTICO_RATE_LIMIT_RPS=0 AUTENTICO_RATE_LIMIT_RPM=0 ./$(APP_NAME) start

# Populate a running local instance (run in another terminal after make fresh)
.PHONY: seed test-seed
seed:
	node scripts/seed.mjs "$(BASE_URL)"

test-seed:
	node --test scripts/seed.test.mjs

# Stress tests — run via Docker (no k6 install required)
# Uses --network=host so k6 can reach a locally running server.
BASE_URL    ?= http://localhost:9999
USERNAME    ?= admin
PASSWORD    ?= password
CLIENT_ID   ?= stress-test
REDIRECT_URI?= http://localhost:8080/stress/callback

K6=docker run --rm -i --network=host \
	-e BASE_URL=$(BASE_URL) \
	-e USERNAME=$(USERNAME) \
	-e PASSWORD=$(PASSWORD) \
	-e CLIENT_ID=$(CLIENT_ID) \
	-e REDIRECT_URI=$(REDIRECT_URI) \
	-v $(PWD)/stress:/scripts grafana/k6

stress-smoke:
	$(K6) run /scripts/smoke.js

stress-load:
	$(K6) run /scripts/load.js

stress-spike:
	$(K6) run /scripts/spike.js

stress-ratelimit:
	$(K6) run /scripts/rate_limit.js

stress-debug:
	$(K6) run /scripts/debug.js

stress-ceiling:
	$(K6) run /scripts/ceiling.js

stress-bench:
	$(K6) run /scripts/load-60s-500vu-nosleep.js

# Start server with rate limiting disabled (for stress testing only — not for production)
stress-server:
	AUTENTICO_RATE_LIMIT_RPS=0 AUTENTICO_RATE_LIMIT_RPM=0 ./$(APP_NAME) start

# ── OIDC Conformance ─────────────────────────────────────────────────────────
# Runs the OpenID Foundation conformance suite locally via Docker.
# conformance-server: start Autentico with settings suitable for conformance testing
# conformance-suite:  pull and start the conformance suite at https://localhost:8443
# conformance-stop:   stop and remove the conformance suite container

CONFORMANCE_PORT ?= 8443

conformance-server:
	AUTENTICO_RATE_LIMIT_RPS=0 AUTENTICO_RATE_LIMIT_RPM=0 \
	AUTENTICO_CSRF_SECURE_COOKIE=false \
	AUTENTICO_IDP_SESSION_SECURE=false \
	AUTENTICO_APP_URL=http://172.17.0.1:9999 \
	./$(APP_NAME) start

conformance-suite:
	docker run -d --name oidc-conformance --network=host \
		-p $(CONFORMANCE_PORT):$(CONFORMANCE_PORT) \
		openidcertification/conformance-suite
	@echo "Conformance suite running at https://localhost:$(CONFORMANCE_PORT)"

conformance-stop:
	docker stop oidc-conformance && docker rm oidc-conformance