Skip to main content

Repository Hygiene / CI Risk Preflight

Local no-token scanner for GitHub repository hygiene, CI policy, and release-readiness signals before they become public repo or package release blockers.

Use this before opening a public repo, adding CI gates, publishing a package, or preparing a release checklist. It is broader than the GitHub Actions deprecation scanner: this tool checks repo/package/release hygiene, not only action-version migration risks.

This is the bridge product in the Engineering Risk Preflight suite: it starts as a CLI, can be used in GitHub Actions, and can later inform a GitHub App/SaaS only after demand is validated.

What it checks

The scanner reads only files in a checked-out repository. It does not use the GitHub API, tokens, network calls, SaaS accounts, private repo integrations, or source uploads.

Current rule categories:

  • ci-deprecation: stale GitHub Actions majors such as upload-artifact@v3, download-artifact@v3, cache@v3, checkout@v3, setup-node@v3.
  • ci-runtime: local JavaScript actions using old Node runtimes.
  • ci-permissions: broad workflow permissions such as write-all, contents: write, and pull_request_target review prompts.
  • repo-hygiene: missing CODEOWNERS, SECURITY.md, CONTRIBUTING.md, and changelog/release history.
  • dependency-hygiene: missing Dependabot/Renovate config.
  • ci-observability: missing test report artifacts/summaries and artifact upload steps without if: always().
  • release-safety: release/publish workflows without visible guardrails.
  • ci-cost: jobs without visible timeout-minutes.

Repository readiness story

Top checks to run before a repo or package is promoted publicly:

  1. Is there a visible license/security/contribution posture?
  2. Are CI workflows using risky broad permissions or pull_request_target patterns?
  3. Are release/publish jobs guarded by tags, manual dispatch, environments, or explicit conditions?
  4. Are test reports and failure artifacts preserved for debugging?
  5. Are dependency update tools configured?
  6. Are stale action majors or local Node runtimes likely to break CI later?

Sample report excerpt:

- high `workflow-write-all-permissions`
  - Why: Broad workflow permissions increase blast radius if a workflow is abused.
  - Fix: Prefer least-privilege `permissions:` at workflow/job scope.

- medium `missing-security-policy`
  - Why: Public repos should tell users how to report vulnerabilities.
  - Fix: Add SECURITY.md with supported versions and a private reporting path.

Install from PyPI

python3 -m pip install repo-hygiene-ci-risk-preflight
repo-hygiene-preflight path/to/repo --format markdown
repo-hygiene-preflight path/to/repo --format json
repo-hygiene-preflight path/to/repo --format annotations
repo-hygiene-preflight path/to/repo --fail-on-severity high
repo-hygiene-preflight --list-rules

PyPI: https://pypi.org/project/repo-hygiene-ci-risk-preflight/

Try from a clone

python3 scanner.py examples
python3 scanner.py examples --format json
python3 scanner.py examples --format annotations
python3 scanner.py examples --min-severity medium
python3 scanner.py examples --fail-on-severity high
python3 scanner.py --list-rules

Generated example reports:

GitHub Action wrapper (planned)

A Marketplace-friendly GitHub Action wrapper is being prepared. The intended usage is:

name: repo-hygiene-preflight
on:
  pull_request:
  workflow_dispatch:
permissions:
  contents: read
jobs:
  hygiene:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: vasiliy0/repo-hygiene-ci-risk-preflight@v0.1.1
        with:
          format: markdown
          output: repo-hygiene-report.md

Until the Action is released, use the PyPI install flow above in CI.

Config and baselines

Auto-load .repo-hygiene-preflight.json or pass --config:

{
  "ignore_rules": ["workflow-without-timeout"],
  "only_rules": [],
  "ignore_paths": ["docs/generated/**"],
  "severity_overrides": {"missing-contributing": "info"},
  "baseline_fingerprints": []
}

Baseline existing findings for gradual rollout:

python3 scanner.py . --format json --output report.json --write-baseline repo-hygiene-baseline.json
python3 scanner.py . --baseline repo-hygiene-baseline.json --fail-on-severity high

Outputs

  • Markdown report for local review or $GITHUB_STEP_SUMMARY.
  • JSON report for CI artifacts or later policy processing.
  • GitHub workflow annotation commands via --format annotations.
  • Stable finding fingerprints for suppressions and baselines.

For AI agents and automation

Use JSON mode as the stable machine interface:

repo-hygiene-preflight . --format json --output repo-hygiene-report.json --quiet --no-color

Machine contract: schemas/report.schema.json (schema_version: 1.0). Findings include rule id, severity, category, file/line, matched signal, fix guidance, and stable fingerprints for baselines/reruns. GitHub annotation output is available with --format annotations.

Exit codes: 0 completed/report-only, 1 configured severity gate matched, 2 usage/config/input error, 3 reserved for runtime/tool errors.

Agent workflow docs: docs/AGENT_INTEGRATION.md.

Docs

  • docs/RULE_INVENTORY.md — current rule inventory.
  • docs/CONFIGURATION.md — config and baseline behavior.
  • docs/CI_USAGE.md — GitHub Actions usage patterns.
  • docs/GITHUB_ACTION_DRAFT.md — local design artifact for a future wrapper action.
  • docs/PYPI_TESTPYPI_READINESS.md — package readiness checklist.

Privacy posture

  • Local files only.
  • No GitHub token required.
  • No source upload.
  • Findings include file paths and matching lines; review before sharing publicly.
  • Rules are conservative preflight signals, not compliance/security guarantees.

Related Engineering Risk Preflight tools

Monetization hypothesis

Free CLI/GitHub Action first. Paid add-ons later only after demand validation: team policy packs, release-readiness rule bundles, scheduled org reports, or an org dashboard.

Metadata

Release files for repo-hygiene-ci-risk-preflight 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for repo-hygiene-ci-risk-preflight 0.1.1
File Size Uploaded Provenance Actions
repo_hygiene_ci_risk_preflight-0.1.1.tar.gz 15.3 kB With provenance Details for repo_hygiene_ci_risk_preflight-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for repo-hygiene-ci-risk-preflight 0.1.1
File Interpreter ABI Platform Actions
repo_hygiene_ci_risk_preflight-0.1.1-py3-none-any.whl Python 3 none any Details for repo_hygiene_ci_risk_preflight-0.1.1-py3-none-any.whl

Total release size: 28.1 kB

Release files / repo_hygiene_ci_risk_preflight-0.1.1.tar.gz

Download URL repo_hygiene_ci_risk_preflight-0.1.1.tar.gz
Size 15.3 kB
Tags Source
SHA-256 checksum
How to use checksums
e0f8bdaa46cd297190d41113586d827aee38043f4ca6270155241883c2c7f554
BLAKE2b-256 checksum
How to use checksums
f3ecb7b9cdedc2e3947ec631827d7e8e6646235791686f1726524eb9961707cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 20, 2026.

Transparency log

Release files / repo_hygiene_ci_risk_preflight-0.1.1-py3-none-any.whl

Download URL repo_hygiene_ci_risk_preflight-0.1.1-py3-none-any.whl
Size 12.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3e980916c30dd6bda4a8e85261d37657fd6850595cd040a06157795cd1b93af8
BLAKE2b-256 checksum
How to use checksums
8a910e0d4f7f8bb24fbb3dab72c98c3ee40542efb40a098800f361e0a723edfb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 20, 2026.

Transparency log

Security for repo-hygiene-ci-risk-preflight 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for repo_hygiene_ci_risk_preflight-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 20, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page