Skip to content

Audit Providers

Audit Providers #8

Workflow file for this run

name: Audit Providers
on:
schedule:
# Weekly, Mondays 06:00 UTC
- cron: '0 6 * * 1'
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: lts/*
# test.php gates recovered providers during the sync (see scripts/audit.js).
- name: Setup PHP with PECL extension
uses: shivammathur/setup-php@v2
with:
php-version: '8.0'
extensions: yaml
- run: npm install --ignore-scripts
# Audits providers/ and providers-disabled/, moves confirmed-broken
# providers out and recovered ones back, and refreshes AUDIT.md.
- name: Audit and sync providers
run: npm run audit:sync
# Enabled set may have changed, so rebuild the published registry.
- name: Rebuild providers.json
run: npm run build
# A run that moves nothing still rewrites AUDIT.md to the runner's vantage
# (a datacenter IP can't see past Cloudflare, so counts wobble). That diff is
# noise, so only open a PR when a provider .yml actually crossed the
# enabled/disabled line — a rename shows up as a delete + an untracked add.
- name: Detect provider moves
id: moves
run: |
if [ -n "$(git status --porcelain -- providers providers-disabled | grep -E '\.yml$')" ]; then
echo "changed=true" >> "$GITHUB_OUTPUT"
else
echo "changed=false" >> "$GITHUB_OUTPUT"
echo "No provider moves — skipping PR."
fi
- name: Open pull request
if: steps.moves.outputs.changed == 'true'
uses: peter-evans/create-pull-request@v7
with:
branch: chore/audit-sync
title: 'chore: sync provider registry from audit'
commit-message: 'chore: sync provider registry from audit'
body: |
Automated weekly audit run.
- Confirmed-broken providers moved to `providers-disabled/`.
- Recovered providers moved back to `providers/`.
- `AUDIT.md` and `providers.json` refreshed.
Review the moved files before merging — `INCONCLUSIVE` providers are left untouched.
labels: automation
delete-branch: true