Add CLAUDE.md with project guidance and update CI workflow for improved coverage and Docker build
This commit is contained in:
40
CLAUDE.md
Normal file
40
CLAUDE.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
# Run all tests with coverage
|
||||
go test -v -coverprofile=coverage.out -coverpkg=./... ./...
|
||||
|
||||
# Run a single test
|
||||
go test -v -run TestWebhookHandler ./test/diunwebhook/
|
||||
|
||||
# Run the app locally
|
||||
go run ./cmd/diunwebhook/
|
||||
|
||||
# Build Docker image
|
||||
docker build -t diun-webhook-dashboard .
|
||||
|
||||
# Run with Docker Compose
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
CI warns (but does not fail) when coverage drops below 80%.
|
||||
|
||||
## Architecture
|
||||
|
||||
The app is a minimal Go HTTP server that receives [DIUN](https://crazymax.dev/diun/) webhook events and exposes them via a JSON API and static HTML dashboard. All state is in-memory (no persistence).
|
||||
|
||||
**Package layout:**
|
||||
- `pkg/diunwebhook/` — core library: `DiunEvent` struct, in-memory `updates` map (guarded by `sync.Mutex`), and HTTP handlers (`WebhookHandler`, `UpdatesHandler`)
|
||||
- `cmd/diunwebhook/main.go` — wires the handlers and static file server onto `net/http`'s default mux, listens on `:8080`
|
||||
- `test/diunwebhook/` — external test package (`package diunwebhook_test`) that imports `pkg/diunwebhook`; uses `httptest` for handler tests
|
||||
- `static/` — served verbatim at `/`
|
||||
|
||||
**Key data flow:**
|
||||
1. DIUN POSTs JSON to `/webhook` → `WebhookHandler` decodes into `DiunEvent` → stored in `updates[event.Image]` (latest event per image wins)
|
||||
2. Dashboard JS polls `GET /api/updates` → `UpdatesHandler` returns full map as JSON
|
||||
|
||||
**Test helpers exposed from the library package** (not part of the public API, only for tests): `GetUpdatesMap()`, `UpdatesReset()`, `UpdateEvent()`.
|
||||
Reference in New Issue
Block a user