{"id":18941454,"url":"https://github.com/mchmarny/dctl","last_synced_at":"2026-02-21T19:12:47.432Z","repository":{"id":37541075,"uuid":"489787696","full_name":"mchmarny/dctl","owner":"mchmarny","description":"simple utility to provide insight into repo activity","archived":false,"fork":false,"pushed_at":"2023-03-06T17:12:48.000Z","size":56952,"stargazers_count":3,"open_issues_count":19,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-31T22:42:52.542Z","etag":null,"topics":["cli","cmd","cncf","developer","entitity","golang","sql","sqlite"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mchmarny.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-07T21:43:46.000Z","updated_at":"2024-12-03T20:14:12.000Z","dependencies_parsed_at":"2024-06-20T21:51:06.133Z","dependency_job_id":"5652f804-f2a8-427c-ab9f-1e5ac61e3ce1","html_url":"https://github.com/mchmarny/dctl","commit_stats":{"total_commits":63,"total_committers":3,"mean_commits":21.0,"dds":"0.23809523809523814","last_synced_commit":"957715ed8075d64314ca5aff41e68c3b19c5c3f0"},"previous_names":[],"tags_count":25,"template":false,"template_full_name":"mchmarny/cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchmarny%2Fdctl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchmarny%2Fdctl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchmarny%2Fdctl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchmarny%2Fdctl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mchmarny","download_url":"https://codeload.github.com/mchmarny/dctl/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239942722,"owners_count":19722330,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","cmd","cncf","developer","entitity","golang","sql","sqlite"],"created_at":"2024-11-08T12:28:06.572Z","updated_at":"2026-02-21T19:12:47.426Z","avatar_url":"https://github.com/mchmarny.png","language":"Go","readme":"# dctl\n\n[![test](https://github.com/mchmarny/dctl/actions/workflows/test-on-push.yaml/badge.svg)](https://github.com/mchmarny/dctl/actions/workflows/test-on-push.yaml)\n[![analyze](https://github.com/mchmarny/dctl/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/mchmarny/dctl/actions/workflows/codeql-analysis.yml)\n[![release](https://img.shields.io/github/v/release/mchmarny/dctl)](https://github.com/mchmarny/dctl/releases/latest)\n[![license](https://img.shields.io/github/license/mchmarny/dctl)](LICENSE)\n\nCommunity health analytics for GitHub organizations and repositories. `dctl` imports contribution data from the GitHub API, enriches it with developer affiliations, and surfaces project health insights through a local dashboard.\n\n![](docs/img/screenshot.png)\n\n## Features\n\n- **Activity trends** -- monthly event volume (PRs, reviews, issues, comments, forks) with total and 3-month moving average\n- **Bus factor / pony factor** -- minimum developers or organizations producing 50% of contributions\n- **Contributor retention** -- new vs returning contributors per month\n- **PR review ratio** -- PRs to reviews per month with ratio trend line\n- **Time to close / merge** -- average days to close issues and merge PRs\n- **Entity affiliations** -- top contributing companies/orgs with drill-down to individual developers\n- **Repository metadata** -- stars, forks, open issues, language, license\n- **Release cadence** -- monthly release counts (total vs stable)\n- **Unified search** -- `org:name`, `repo:name`, or `entity:name` prefix syntax\n\n## Install\n\n### Homebrew (macOS / Linux)\n\n```shell\nbrew tap mchmarny/dctl\nbrew install dctl\n```\n\n### Binary releases\n\nPre-built binaries for macOS, Linux, and Windows (amd64/arm64) are available on the [releases](https://github.com/mchmarny/dctl/releases/latest) page.\n\n### Build from source\n\nRequires [Go](https://go.dev/) 1.25+.\n\n```shell\ngit clone https://github.com/mchmarny/dctl.git\ncd dctl\nmake build\n```\n\nSee [DEVELOPMENT.md](DEVELOPMENT.md) for details.\n\n## Quick start\n\n### 1. Authenticate\n\n`dctl` uses GitHub's device flow for OAuth. The token is read-only (no scopes requested) and stored in your OS keychain.\n\n```shell\ndctl auth\n```\n\n### 2. Import data\n\nImport everything for an org (events, affiliations, metadata, releases):\n\n```shell\ndctl import all --org \u003corg\u003e\n```\n\nOr target a specific repo:\n\n```shell\ndctl import all --org \u003corg\u003e --repo \u003crepo\u003e\n```\n\nUse `--fresh` to clear pagination state and re-import from scratch:\n\n```shell\ndctl import all --org \u003corg\u003e --fresh\n```\n\nSee [docs/IMPORT.md](docs/IMPORT.md) for all import options.\n\n### 3. View dashboard\n\n```shell\ndctl server\n```\n\n![](docs/img/screenshot2.png)\n\nOpens your browser to `http://127.0.0.1:8080`. Use `--port` to change the port or `--no-browser` to suppress auto-open.\n\nUse the search bar with prefix syntax to scope the dashboard:\n\n| Prefix | Example | Scope |\n|--------|---------|-------|\n| `org:` | `org:nvidia` | All repos in an organization |\n| `repo:` | `repo:skyhook` | Single repository |\n| `entity:` | `entity:google` | Company/org affiliation |\n\nNo prefix defaults to org search.\n\n### 4. Query via CLI\n\n`dctl` also exposes data as JSON for scripting:\n\n```shell\ndctl query events --org knative --repo serving --type pr --since 2024-01-01\ndctl query developer list --like mark\ndctl query entity detail --name GOOGLE\n```\n\nSee [docs/QUERY.md](docs/QUERY.md) for all query options.\n\n## Data sources\n\n| Source | Data |\n|--------|------|\n| [GitHub API](https://docs.github.com/en/rest) | PRs, issues, comments, reviews, forks, repo metadata, releases |\n| [cncf/gitdm](https://github.com/cncf/gitdm) | Developer-to-company affiliations |\n\nEntity names are normalized automatically. Use `dctl import substitutions` to correct misattributions:\n\n```shell\ndctl import substitutions --type entity --old \"INTERNATIONAL BUSINESS MACHINES\" --new \"IBM\"\n```\n\n## Architecture\n\nAll data is stored locally in a [SQLite](https://www.sqlite.org/) database (`~/.dctl/data.db`). No data leaves your machine. The dashboard is a local-only HTTP server with no external dependencies at runtime.\n\n```\nGitHub API --\u003e dctl import --\u003e SQLite --\u003e dctl server --\u003e localhost:8080\n                                    \\--\u003e dctl query --\u003e JSON (stdout)\n```\n\n## Verification\n\nRelease binaries are signed and attested in CI. No private keys — everything uses keyless [Sigstore](https://www.sigstore.dev/) OIDC via GitHub Actions.\n\n### Verify checksum signature\n\n```shell\ncosign verify-blob \\\n  --bundle checksums-sha256.txt.sigstore.json \\\n  --certificate-identity-regexp 'github.com/mchmarny/dctl' \\\n  --certificate-oidc-issuer https://token.actions.githubusercontent.com \\\n  checksums-sha256.txt\n```\n\n### Verify build provenance\n\n```shell\ngh attestation verify \u003cbinary\u003e -R mchmarny/dctl\n```\n\n### Inspect SBOM\n\nEach binary has a corresponding SBOM (SPDX JSON) attached to the release.\n\n## Contributing\n\nContributions are welcome. Please open an issue before submitting large changes. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines and [DEVELOPMENT.md](DEVELOPMENT.md) for setup.\n\n1. Fork and clone the repository\n2. Create a feature branch\n3. Run `make qualify` (tests, lint, vulnerability scan)\n4. Submit a pull request\n\n## License\n\n[Apache 2.0](LICENSE)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmchmarny%2Fdctl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmchmarny%2Fdctl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmchmarny%2Fdctl/lists"}