Skip to main content

Setting up the datalake

Entirely optional. dun works with no database at all — the hooks, the journal, dun status and dun report are local and need nothing. This is for the shared view: several repositories and several people looked at together, and AI attribution correlated with delivery data from GitHub and your issue tracker.

The stack is Apache DevLake. whodunit publishes into six whodunit_-prefixed tables and never writes to DevLake's own domain tables, so its plugins and this tool coexist without either corrupting the other.

Two steps, deliberately separate

Step 1 builds the stack and is run once. Step 2 puts the dashboards on it and is re-run whenever whodunit ships new ones — which is why it is not folded into step 1.

Neither needs dun or a clone of the repository. This is infrastructure; the developers who publish into it install the CLI separately.

Step 1 — the stack

Once, on whichever machine holds the database:

curl -fsSL https://raw.githubusercontent.com/navjyotnishant/whodunit/main/deploy/devlake/setup-datalake.sh | sh

Fetches DevLake's own compose file from upstream, generates an encryption secret, starts four containers, and creates the Grafana datasource. From a checkout, ./up.sh does the same.

Step 2 — the dashboards

Again after each whodunit release:

curl -fsSL https://raw.githubusercontent.com/navjyotnishant/whodunit/main/deploy/devlake/import-dashboards.sh | sh

Step 1 offers to run this at the end, so a first install is one sitting. Against a Grafana you already run, start here and pass --grafana URL.

Re-running replaces the dashboards in place — same uids, same URLs, no duplicates. They land in a Whodunit folder rather than General, so they do not mix with DevLake's own; --folder NAME puts them elsewhere.

Point dun at it

On each developer machine:

dun config datalake

This asks for the database URL and stores the password encrypted at rest, bound to that machine — not in a shell profile, and never in plaintext in config.json.

Then publish:

dun sync --dry-run # see exactly what would be sent
dun sync # send it

Once configured, git push syncs automatically through the pre-push hook. There is nothing to schedule.

What gets published

Six tables, listed in full on the Privacy page. The two identifying fields are the contributor email and the file paths, and both are named there rather than buried.

Ports

DevLake config UIhttp://localhost:4000
Grafanahttp://localhost:3002

The DevLake stack ships with published default credentials for its local database (merico/merico). They are upstream defaults for a local compose stack, not secrets — but a deployment that leaves them reachable from anywhere but localhost has a problem. Change them before exposing the stack.

Keeping it running

deploy/devlake/verify.sh

Checks the containers, the schema and the datasource, and says which is wrong rather than that something is.