Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,31 @@ PRs to trigger checks), and provider API keys enter the picture in exactly two
optional places: your own eval hook command, and the feed-refresh models-endpoint
coverage.

## Use it as a GitHub Action

The same gate as a composite action - no npm install, feeds bundled, pinned to
the `v0` line:

```yaml
- uses: actions/checkout@v4
with:
fetch-depth: 0 # --changed needs history to diff against the base ref
- uses: thossullivan/model-eol@v0
with:
command: check
changed: origin/${{ github.base_ref }}
days: 90
scope: direct
```

That is the PR gate: fail only when *this* change adds a model that is retired
or retiring within the threshold. Add `via: aws-bedrock` (or `azure-ai-foundry`)
to judge by a distributor's clock. The copy-paste version with both gates - PR
diff plus a weekly full-repository check - is
[`examples/workflows/model-eol.yml`](examples/workflows/model-eol.yml); the
same inputs drive `inventory` and `schedule` if CI should export an ML-BOM or a
retirement calendar instead.

## Same weights, different clocks

The same model retires on different dates per channel, and a checker that ignores
Expand Down
30 changes: 30 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Security

## Reporting

Report vulnerabilities privately via
[GitHub private vulnerability reporting](https://github.com/thossullivan/model-eol/security/advisories/new) -
please don't open a public issue for a security report. Expect a first
response within a week.

## Supported versions

The latest 0.x release only. There is no backport branch; fixes ship as the
next patch on npm and move the `v0` action tag.

## Scope

The surface that matters, given zero runtime dependencies:

- The scanner runs against untrusted repository content, so path handling and
output escaping (GitHub annotations, badge JSON) are in scope.
- Feed integrity: `feeds/*.json` are generated from provider pages, and a
poisoned feed changes CI verdicts downstream. Feed signing is on the
roadmap, not shipped.
- The bot workflow's privilege split: provider keys live only in the
read-only plan/eval job, write tokens only in the publish job. Anything
that lets one side reach the other's credentials is a finding.

The checker itself needs no credentials: scanning is static analysis, so a
report that assumes an API key inside `check.mjs` is out of scope by
construction.