Skip to content

ci: run the advisory check on a schedule - #213

Merged
plusky merged 1 commit into
mainfrom
ci/scheduled-advisories-197
Sep 1, 2026
Merged

ci: run the advisory check on a schedule#213
plusky merged 1 commit into
mainfrom
ci/scheduled-advisories-197

Conversation

@plusky

@plusky plusky commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Closes #197. One new workflow file.

rust-deny fires only on push/PR, so a fresh RustSec advisory waits and then
fails whichever stranger's PR arrives next, in a job unrelated to their
change. Weekly advisories-only run, separate from the gating job so a new
advisory never retroactively reddens a contributor's PR.

schedule + workflow_dispatch only — cannot become a PR check, and is not in
branch protection.

Two limits on its value, both documented in-file

  • Email surfacing is settings-dependent, not automatic: GitHub notifies only
    if Actions notifications are enabled, and for a cron the recipient is whoever
    last edited the cron line.
  • GitHub disables scheduled workflows after 60 days of repository inactivity
    (this repo is public, so it applies). Silence from this job is not evidence
    of a clean tree.
    No keepalive added — that needs contents: write and dummy
    commits, against this repo's permissions posture.

Verified

cargo deny check advisories clean today. Forced failure via a fabricated
RUSTSEC entry in a local db copy: advisories FAILED, exit 1 — reproduced
independently by review. The action invocation was checked at the pinned SHA:
the entrypoint composes <arguments> <command> <command-arguments>, so the
check name belongs in command-arguments.

concurrency deliberately diverges from the house pattern (group: ${{ github.workflow }}, cancel-in-progress: false): the ref key is a no-op for
a cron, and cancelling would let the weekly run kill a hand-fired one. codeql.yml
has no concurrency block at all — the brief was wrong about that.

cargo-audit stays rejected as redundant with cargo-deny (#169).

Review: MERGE-SAFE.

rust-deny fires only on push and pull_request, so a RustSec advisory
published today announces itself by failing whichever stranger's PR
arrives next, in a job unrelated to their change.

A separate workflow rather than a `schedule:` on ci.yml: that trigger is
workflow-level, so it would run every ci.yml job weekly and muddy the
required contexts. Shaped after codeql.yml — weekly cron, read-only
permissions, persist-credentials: false — plus workflow_dispatch to
hand-fire it. Advisories only, and deliberately not folded into the
gating rust-deny job, so a fresh advisory does not retroactively redden
main.

Surfacing is GitHub's failed-run email to the repo owner and nothing
else: no page, no auto-filed issue. Keep `advisories` off the required
status checks, or it reintroduces exactly the blocking this removes.
Note GitHub disables crons after 60 days of repo inactivity, so silence
alone is not proof of a clean tree.

cargo-audit was assessed and skipped as redundant with cargo-deny; that
decision is #169's and is not reopened here.

Verified: `cargo deny check advisories` is clean on this tree, and the
same invocation against a local advisory-db carrying a fabricated serde
advisory exits 1 ("advisories FAILED"), so an advisory does fail the
job. actionlint 1.7.12 is clean over .github/workflows/.

Closes #197
@plusky plusky added the ai-assisted Authored or substantially written with an AI coding agent label Sep 1, 2026
@plusky
plusky merged commit cde5504 into main Sep 1, 2026
15 checks passed
@plusky
plusky deleted the ci/scheduled-advisories-197 branch September 1, 2026 09:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-assisted Authored or substantially written with an AI coding agent

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci: rust-deny only fires on push/PR, so a new advisory fails a stranger's next PR

1 participant