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.
Features
- Release blocker, stuck pull request, stale item, first-response, and quick-win queues.
- 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 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.4
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
- GitHub Action listing draft: docs/marketplace-listing.md
- PyPI publishing guide: docs/pypi-publishing.md
Output Queues
Maintainer Pulse groups work into five queues:
release_blockers: open issues and pull requests with labels such assecurity,regression,critical,release,p0, orp1.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 labeledgood first issue,help wanted,documentation, orstarter.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oss_maintainer_pulse-0.1.4.tar.gz.
File metadata
- Download URL: oss_maintainer_pulse-0.1.4.tar.gz
- Upload date:
- Size: 14.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5895351ae830d85f044afac97f1eaef306061dfe5077e8aad3346c6422c6a89a
|
|
| MD5 |
9da54c411d14bb256dc1b9a1bed25814
|
|
| BLAKE2b-256 |
ae26ee3ebddd2a149f117acb8b8f966e26361992d4434ae26f2cfd3cf13af5e2
|
Provenance
The following attestation bundles were made for oss_maintainer_pulse-0.1.4.tar.gz:
Publisher:
publish-pypi.yml on alibert99/oss-maintainer-pulse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oss_maintainer_pulse-0.1.4.tar.gz -
Subject digest:
5895351ae830d85f044afac97f1eaef306061dfe5077e8aad3346c6422c6a89a - Sigstore transparency entry: 1676500710
- Sigstore integration time:
-
Permalink:
alibert99/oss-maintainer-pulse@9219f39b3fe8f0f3b5dd4f799487f56108d445ab -
Branch / Tag:
refs/heads/main - Owner: https://github.com/alibert99
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@9219f39b3fe8f0f3b5dd4f799487f56108d445ab -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file oss_maintainer_pulse-0.1.4-py3-none-any.whl.
File metadata
- Download URL: oss_maintainer_pulse-0.1.4-py3-none-any.whl
- Upload date:
- Size: 13.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fb33fd19ed83b6c58f0883b1967b25f420340db6a6266e671e7e1978c69b429
|
|
| MD5 |
859afbd3e4b613ef4780f1745112061c
|
|
| BLAKE2b-256 |
6d5a1f252bed6cd0567a2d23e8046f6c0e501ad46c450d90ea3d8026dbfaa22b
|
Provenance
The following attestation bundles were made for oss_maintainer_pulse-0.1.4-py3-none-any.whl:
Publisher:
publish-pypi.yml on alibert99/oss-maintainer-pulse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oss_maintainer_pulse-0.1.4-py3-none-any.whl -
Subject digest:
3fb33fd19ed83b6c58f0883b1967b25f420340db6a6266e671e7e1978c69b429 - Sigstore transparency entry: 1676500718
- Sigstore integration time:
-
Permalink:
alibert99/oss-maintainer-pulse@9219f39b3fe8f0f3b5dd4f799487f56108d445ab -
Branch / Tag:
refs/heads/main - Owner: https://github.com/alibert99
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@9219f39b3fe8f0f3b5dd4f799487f56108d445ab -
Trigger Event:
workflow_dispatch
-
Statement type: