Gabriel Radureau 9cf6e7f1c4 🐛 fix(bdd): align healthz scenario step text with registered regex (#21)
CI workflow #598 was failing with "Found undefined steps" because the healthz BDD scenario used "the response status code should be 200" while the registered step regex matches "the status code should be N" (without "response"). Aligns the feature wording with the existing convention used in features/auth/.

PR #21 généré en autonomie complète par Mistral Vibe (€0.24, 13 steps, 11/13 tool calls success). 3rd autonomous PR du jour. Validation Q-030 workaround : prompt 100% ASCII = pas de hang.

Co-authored-by: Gabriel Radureau <arcodange@gmail.com>
Co-committed-by: Gabriel Radureau <arcodange@gmail.com>
2026-05-03 12:35:34 +02:00

dance-lessons-coach

Build Status Go Report Card Version License BDD Coverage UNIT Coverage

Go web service demonstrating idiomatic package structure, versioned JSON API, and production-ready features.

Features

  • Versioned JSON API (/api/v1, /api/v2)
  • Chi router with graceful shutdown
  • Zerolog structured logging (console and JSON modes)
  • Viper configuration (file + env vars)
  • Readiness endpoint for Kubernetes / service mesh
  • OpenTelemetry / Jaeger distributed tracing
  • OpenAPI / Swagger UI (embedded in binary)
  • PostgreSQL user service with JWT auth
  • BDD + unit tests

Quick Start

git clone https://gitea.arcodange.lab/arcodange/dance-lessons-coach.git
cd dance-lessons-coach
./scripts/build.sh          # produces ./bin/server and ./bin/greet
./scripts/start-server.sh start
curl http://localhost:8080/api/health
curl http://localhost:8080/api/v1/greet/Alice

Stop: ./scripts/start-server.sh stop

Greet CLI

go run ./cmd/greet           # Hello world!
go run ./cmd/greet Alice     # Hello Alice!

Configuration

All options are available via config.yaml or DLC_* environment variables.

Env var Default Description
DLC_SERVER_PORT 8080 Listening port
DLC_SERVER_HOST 0.0.0.0 Bind address
DLC_LOGGING_JSON false JSON log format
DLC_LOGGING_OUTPUT stderr Log file path
DLC_SHUTDOWN_TIMEOUT 30s Graceful shutdown window
DLC_API_V2_ENABLED false Enable /api/v2 routes
DLC_CONFIG_FILE ./config.yaml Override config path

See config.example.yaml for a full template.

API

Method Path Description
GET /api/health Liveness check
GET /api/ready Readiness check (503 during shutdown)
GET /api/version Version info (?format=plain|full|json)
GET /api/v1/greet/ Default greeting
GET /api/v1/greet/{name} Named greeting
POST /api/v2/greet V2 greeting with validation
GET /swagger/ Swagger UI

Testing

go test ./...                          # unit + integration tests
./scripts/test-graceful-shutdown.sh    # lifecycle + JSON logging validation
./scripts/test-opentelemetry.sh        # tracing end-to-end

Gitea Client

AI agent helper script at .vibe/skills/gitea-client/scripts/gitea-client.sh.

Auth setup:

echo "your_token" > ~/.gitea_token
chmod 600 ~/.gitea_token
export GITEA_API_TOKEN_FILE="$HOME/.gitea_token"

Get a token at https://gitea.arcodange.lab → Profile → Settings → Applications.

Architecture

Key decisions are documented in adr/. See AGENTS.md for the full development reference (commands, config, ADR index, commit conventions).

License

MIT

Description
No description provided
Readme 57 MiB
Languages
Go 71.2%
Shell 21.7%
Gherkin 3.9%
TypeScript 1.4%
Vue 0.5%
Other 1.2%