Skip to main content

Offline-first GitHub issue and pull request health reports for open-source maintainers.

Project description

Maintainer Pulse

Maintainer Pulse turns GitHub issue and pull request data into a short, actionable maintenance report. It is built for open-source maintainers who need to answer:

  • What should I review before the next release?
  • Which pull requests are stuck?
  • Which issues have not received a maintainer response?
  • What can a new contributor safely pick up?

The tool is offline-first. You can run it against exported GitHub JSON without a token, or fetch live issue and pull request data from the GitHub API.

CI Package Maintainer Pulse PyPI

Maintainer Pulse terminal preview

Features

  • Release blocker, stuck pull request, stale item, first-response, and quick-win queues.
  • Milestone-aware release blocker grouping for release planning.
  • Markdown, HTML, JSON, and CSV output.
  • Reusable GitHub Action for scheduled reports.
  • No runtime dependencies.
  • Deterministic scoring that can be reviewed and changed by maintainers.
  • GitHub Actions CI and fixture-based tests.

Install

From PyPI:

python -m pip install oss-maintainer-pulse

From GitHub:

python -m pip install git+https://github.com/alibert99/oss-maintainer-pulse.git

From a local checkout:

python -m pip install .

For local development:

python -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"
pytest

Usage

Analyze an exported GitHub issues payload:

maintainer-pulse example/project \
  --input examples/github_items.json \
  --output maintainer-pulse-report.md

Fetch live data from GitHub:

export GITHUB_TOKEN=github_pat_your_token_here
maintainer-pulse octo-org/octo-repo --format html --output report.html

Generate machine-readable output:

maintainer-pulse octo-org/octo-repo --format json

Generate spreadsheet-friendly output:

maintainer-pulse octo-org/octo-repo --format csv --output maintainer-pulse-report.csv

See examples/sample-report.md for a generated report. See examples/sample-report.csv for spreadsheet-friendly output.

GitHub Action

Run Maintainer Pulse weekly and upload a report artifact:

name: Maintainer Pulse

on:
  workflow_dispatch:
  schedule:
    - cron: "17 9 * * 1"

permissions:
  contents: read
  issues: read
  pull-requests: read

jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: alibert99/oss-maintainer-pulse@v0.1.5
        id: pulse
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          output: maintainer-pulse-report.md
      - uses: actions/upload-artifact@v7
        with:
          name: maintainer-pulse-report
          path: ${{ steps.pulse.outputs.report-path }}

See docs/github-action.md for all inputs.

Distribution

Output Queues

Maintainer Pulse groups work into five queues:

  • release_blockers: open issues and pull requests with labels such as security, regression, critical, release, p0, or p1. Markdown reports group release blockers by GitHub milestone when milestone data is present.
  • stuck_pull_requests: pull requests idle for at least seven days or labeled for review.
  • response_debt: open items with zero comments and at least three idle days.
  • stale_items: open items idle beyond the configured stale threshold.
  • quick_wins: small contributor-friendly issues labeled good first issue, help wanted, documentation, or starter.

CSV output includes one row per queued item with the queue name, item number, type, state, labels, author, comment count, idle days, age days, timestamps, and URL.

Project Status

This project is alpha. The CLI and report fields may change as maintainers test it against real repositories.

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_maintainer_pulse-0.1.5.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

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

oss_maintainer_pulse-0.1.5-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file oss_maintainer_pulse-0.1.5.tar.gz.

File metadata

  • Download URL: oss_maintainer_pulse-0.1.5.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for oss_maintainer_pulse-0.1.5.tar.gz
Algorithm Hash digest
SHA256 a5b5bdf7e4af7f63ce61b14f0d3472efda50f773c664f1d34bf8d04f8843981a
MD5 1a651221b1cdea0da58112a4e06bec44
BLAKE2b-256 bec515d190c2cb3b6ec9cc1c21759fbf7fc344e7247e74094828cd58eca2c5dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for oss_maintainer_pulse-0.1.5.tar.gz:

Publisher: publish-pypi.yml on alibert99/oss-maintainer-pulse

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_maintainer_pulse-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for oss_maintainer_pulse-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 305ebbbf25a189085d68405dc18b1cbd6e69f2d015276d0bf346defec9ab100c
MD5 2227992f00e4c9445c61f18fb9d5ea7e
BLAKE2b-256 3453f3b57acdb64f268da41c206c2d6e12f2561517c7a7585be4396e38eef845

See more details on using hashes here.

Provenance

The following attestation bundles were made for oss_maintainer_pulse-0.1.5-py3-none-any.whl:

Publisher: publish-pypi.yml on alibert99/oss-maintainer-pulse

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