Skip to main content

Unified toolkit to fetch, normalize, score, and export OSS contribution metrics.

Project description

oss-metrics-kit

Toolkit to fetch, normalize, score, and export OSS contribution data — end to end.

Status: early stage; CLI and core models are available and expanding.

What you can do in 5 minutes

  • Analyze a GitHub user’s activity and get a simple score summary.
  • Save scores into SQLite or Postgres for dashboards.
  • Export scores to Parquet for data tools.
  • Optionally, let an LLM suggest a rules TOML from your events.

Quick Start (Beginner-friendly)

  1. Install the package (pick one)
  • pip (recommended for users): pip install oss-metrics-kit
  • uv (recommended for devs): uv venv .venv && source .venv/bin/activate && uv sync --dev
  1. Set a GitHub token (read-only is enough)
export GITHUB_TOKEN=ghp_xxx   # or GH_TOKEN
  1. Analyze your account and print results
ossmk analyze-user <your_github_login> --since 90d --api auto --out -
  1. Save scores (SQLite for a quick try)
ossmk analyze-user <your_github_login> --out scores.json
ossmk save sqlite:///./metrics.db --input scores.json
  1. Export scores to Parquet (for data tools)
pip install "oss-metrics-kit[exporters-parquet]"
ossmk analyze-user <your_github_login> --out parquet:./scores.parquet

That’s it. See Getting Started for more step‑by‑step details.

Getting Started (Step-by-step)

If you are new to Python tools or GitHub APIs, read:

  • docs/getting-started.md — a gentle, copy‑paste tutorial with expected outputs.
  • docs/usage.md — command reference with CI examples.

Install (development)

Use a virtual environment (venv/conda/uv) and install editable:

  • pip install -e . or python -m pip install -e .
  • Check CLI help with ossmk --help

Note: Running ossmk requires installation. For direct runs during development, either install editable or set PYTHONPATH=src and run the entry point.

Dev environment (uv recommended)

  1. Install uv
  • macOS/Linux: curl -LsSf https://astral.sh/uv/install.sh | sh
  • Homebrew: brew install uv
  • pipx: pipx install uv
  1. Create venv and sync deps
  • uv venv .venvsource .venv/bin/activate
  • uv sync --dev
  • All extras: uv sync --dev --extra all
  1. Run
  • ossmk --help (in venv) or uv run ossmk --help

Install from PyPI (users)

  • Stable: pip install oss-metrics-kit
  • With Postgres exporter: pip install "oss-metrics-kit[exporters-postgres]"

Examples

  • Persist scores to Postgres:
export OSSMK_PG_DSN="postgresql://user:pass@host:5432/db"
ossmk analyze-user <your_github_login> --save-pg
  • Load proprietary rules (TOML):
export OSSMK_RULES_FILE=/absolute/path/to/private/rules.toml
ossmk analyze-user <your_github_login> --out -

Usage (overview)

  • Version: ossmk version
  • Analyze GitHub user (parallel fetch, since/GraphQL aware): ossmk analyze-user <login> --since 90d --api auto --out -
  • Fetch repo events: ossmk fetch --provider github --repo owner/name --since 30d --out -
  • Save scores: ossmk save postgresql://... --input scores.json or ossmk save sqlite:///./metrics.db --input scores.json

Storage is selected via DSN (Postgres/SQLite). Parquet output is available as an optional exporter.

LLM-assisted rules (optional)

  • Suggest rules: ossmk rules-llm --input events.json --provider openai --model gpt-4o-mini --out rules.toml
  • Extras: pip install "oss-metrics-kit[llm-openai]" or oss-metrics-kit[llm-anthropic]
  • See docs/LLM_RULES.md

Security & operations

  • Keep tokens in env (GITHUB_TOKEN/GH_TOKEN) and never log them.
  • Rate limiting is a backend responsibility; a simple example is provided at ossmk.security.ratelimit.RateLimiter (use Redis for production).
  • Store private rule TOMLs outside the repo and point OSSMK_RULES_FILE to them. rules=auto|default will load it.
  • Optional features (Postgres/Parquet/LLM) are separated as extras.

See docs/INTEGRATION.md for backend integration. Development typing/lint policy: docs/dev.md. Detailed usage: docs/usage.md. A beginner tutorial is in docs/getting-started.md.

Python API (import)

The canonical import is:

import ossmk

For convenience, the underscore variant also works and maps to the same package:

import oss_metrics_kit as ossmk

Environment variables

  • GITHUB_TOKEN or GH_TOKEN: GitHub API token (required)
  • OSSMK_RULES_FILE: path to a private rules TOML (optional)
  • OSSMK_PG_DSN or DATABASE_URL: Postgres DSN (if persisting)
  • REDIS_URL: Redis rate limiter (optional)
  • OSSMK_MAX_SINCE_DAYS: max backward window for since (default 180)

Publishing to PyPI (maintainers)

See docs/RELEASING.md for the full release flow (versioning, tagging, CI-based publish, and manual alternatives).

Design highlights

  • src/ layout with py.typed for type distribution.
  • Thin CLI with Typer; business logic in ossmk.core.
  • Providers/exporters/storage/rules via entry points.

Troubleshooting

  • pip._vendor.tomli.TOMLDecodeError: Invalid initial character...

    • Cause: malformed leading section in pyproject.toml
    • Fix: ensure first section is [build-system], reinstall pip install -e .
  • ossmk: command not found

    • Cause: not installed or wrong environment activated.
    • Fix: pip install -e . in the repo, and activate the same environment.
    • With uv: uv sync --dev then source .venv/bin/activate, or uv run ossmk --help.

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oss_metrics_kit-0.1.1.tar.gz (36.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oss_metrics_kit-0.1.1-py3-none-any.whl (34.4 kB view details)

Uploaded Python 3

File details

Details for the file oss_metrics_kit-0.1.1.tar.gz.

File metadata

  • Download URL: oss_metrics_kit-0.1.1.tar.gz
  • Upload date:
  • Size: 36.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for oss_metrics_kit-0.1.1.tar.gz
Algorithm Hash digest
SHA256 0c1d1891b4c1114410c53b28bacdefe638b74a49bb53565a54fb7f017261c5c0
MD5 f7c5d201142b5d439289aec3523348cf
BLAKE2b-256 74fb50b9d38aef38dfb9b6526f24c40107a3681d94582fe3222a420f3286d878

See more details on using hashes here.

Provenance

The following attestation bundles were made for oss_metrics_kit-0.1.1.tar.gz:

Publisher: publish.yml on refactoring-my-path/oss-metrics-kit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file oss_metrics_kit-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for oss_metrics_kit-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5f42405217f6d751180c7f414ee68e6cf79a7f86409e52f616bbe651aba14eae
MD5 808bfcb01a83efbce0726aa21e4f9352
BLAKE2b-256 840641351bf473c2819018b8ebe8fe264d610ae41d3b63cae50a3403c39b2c64

See more details on using hashes here.

Provenance

The following attestation bundles were made for oss_metrics_kit-0.1.1-py3-none-any.whl:

Publisher: publish.yml on refactoring-my-path/oss-metrics-kit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page