Skip to content

Latest commit

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

forkwright/.github

Reusable CI workflows for the forkwright fleet. All repos call these instead of maintaining local copies.

.github/workflows/ holds 11 files. actionlint.yml lints THIS repo's own workflows on its own pull requests and is never called by a consumer. The other 10 declare workflow_call and are the fleet reusables; every input they accept is in Workflow inputs below, generated from those files rather than typed by hand — run python3 scripts/render_readme_tables.py to refresh this README's three generated sections (Workflow inputs, Pinned action versions, Fleet rollout) against whatever the tree and the org currently look like, and splice its output back in.

Caller pattern

Each repo keeps a thin .github/workflows/<name>.yml that delegates entirely. Four of the ten reusables illustrated below; the rest follow the identical uses: forkwright/.github/.github/workflows/<name>.yml@main shape with their own inputs from the table below.

# .github/workflows/gate-attestation.ymlname: Gate Attestationon:
pull_request:
branches: [main]jobs:
call:
uses: forkwright/.github/.github/workflows/gate-attestation.yml@main# NOTE: takes no inputs (workflow_call: {}) — runner is fixed at# ubuntu-latest, not configurable. A repo needing hybrid-gate's real# Rust build (fmt, check, clippy, nextest) calls hybrid-gate.yml# instead; its inputs are in the table below.
# .github/workflows/security.ymlname: Securityon:
pull_request:
branches: [main]push:
branches: [main]schedule:
- cron: "23 11 * * *"workflow_dispatch:
jobs:
call:
uses: forkwright/.github/.github/workflows/security.yml@mainsecrets: inherit# NOTE: add `with: { runner: self-hosted }` for repos on self-hosted runners# NOTE: add `with: { has_private_deps: true }` for repos with private fleet deps# NOTE: add `with: { cargo_audit_timeout_minutes: 30 }` for large workspaces
# .github/workflows/stale.ymlname: Staleon:
schedule:
- cron: "0 12 * * 0"workflow_dispatch:
jobs:
call:
uses: forkwright/.github/.github/workflows/stale.yml@main
# .github/workflows/release-please.ymlname: Release Pleaseon:
push:
branches: [main]workflow_dispatch: {}jobs:
call:
uses: forkwright/.github/.github/workflows/release-please.yml@main

Workflow inputs

Generated by scripts/render_readme_tables.py from each file's own workflow_call block — the block itself is canonical; this table is a read-only summary. docs-only is not called directly by any consumer today; hybrid-gate.yml calls it internally to compute its own docs-only exemption.

WorkflowInputDefaultNotes
codeqlactions_timeout_minutes30
codeqlanalyze_actionstrue
codeqlanalyze_rusttrue
codeqlqueries+security-extended
codeqlrust_timeout_minutes90
codeqlrust_toolchainstable
dependabot-auto-merge(none)
docs-onlydocs_only_exemptiontrueCompute the verdict at all. When false the job still runs and reports docs_only=false, so a caller can wire the dependency unconditionally and let the repo opt out by input rather than by workflow surgery.
gate-attestation(none)
hybrid-gateai_attribution_checktrueRun the fleet AI-attribution check (greps PR title/body and the PR-range commit messages for co-authored-by/generated-with/robot markers naming an AI tool). Bot/release-please PRs are waived the same as the trailer check.
hybrid-gatecheck_cmdcargo check --workspace --all-targetsThe exact compile-check command.
hybrid-gateclippy_cmdcargo clippy --workspace --all-targets -- -D warningsThe exact clippy command.
hybrid-gatedocs_only_exemptiontrueExempt a docs-only diff from full-gate-build even with no Gate-Passed trailer. Does not affect ai_attribution_check, which still runs on docs-only PRs.
hybrid-gatedoctest_cmd``Optional separate doctest command (nextest does not execute doctests). Empty skips this step.
hybrid-gatefmt_cmdcargo fmt --all -- --checkThe exact fmt-check command.
hybrid-gatefull_gate_timeout_minutes90Timeout for the full-gate-build job.
hybrid-gateneeds_fleet_repo_tokenfalseSet true only when this repo's Cargo.toml resolves a git dependency needing authenticated fetch. Gates the git-credential step and the FLEET_REPO_TOKEN secret requirement.
hybrid-gatenextest_cmdcargo nextest run --workspaceThe exact nextest invocation.
hybrid-gaterust_cache_keygate-attestationSwatinem/rust-cache cache key discriminator.
hybrid-gaterust_toolchain``Rust toolchain channel (e.g. "1.89", "stable"). Empty (default) auto-detects from the caller repo's own rust-toolchain.toml/rust-toolchain file — the fleet convention. Set only for a repo with no toolchain file of its own.
hybrid-gatesystem_packages``Space-separated apt package list to install before check/clippy/nextest. Empty skips the install step.
no-ai-attributionpattern_file.github/no-ai-attribution-patterns.txt
release-pleaseconfig_filerelease-please-config.json
release-pleasemanifest_file.release-please-manifest.json
release-pr-checkshealer_refmainRef of forkwright/.github to take the healer script from. Pin only to reproduce a past run.
release-pr-checksrequired_context_workflowsgate-attestation.yml,security.ymlComma-separated workflow FILENAMES that produce this repo's branch-protection required contexts.
securitycargo_audit_timeout_minutes15
securitycargo_deny_arguments``Extra arguments passed to cargo-deny, e.g. "--all-features".
securitycargo_deny_timeout_minutes15
securityhas_private_depsfalseConfigure FLEET_REPO_TOKEN git credentials for cross-repo private deps.
securityosv_configosv-scanner.toml
securityosv_lockfileCargo.lock
securityrun_osvtrueRun google/osv-scanner (uploads SARIF to code scanning).
securityrunnerubuntu-latest
staledays_before_close14Days after stale label before closing.
staledays_before_issue_stale60Days of inactivity before marking an issue stale.
staledays_before_pr_stale30Days of inactivity before marking a PR stale.

Pinned action versions

Generated the same way, from the uses: <action>@<sha> # <version> lines across .github/workflows/*.yml. Excludes this repo's own internal reusable-to-reusable calls (e.g. hybrid-gate.yml → docs-only.yml), which are pinned for the same reason but are not a fleet-consumer-facing dependency.

ActionVersionSHA
EmbarkStudios/cargo-deny-actionv2.1.13c6349835b2b7b196a839186cb8b78e02f7b5f25
Swatinem/rust-cachev2f0d9c3887740aee45f6153b24b3a6b815192ec16
actions-rust-lang/setup-rust-toolchainv1.17.0166cdcfd11aee3cb47222f9ddb555ce30ddb9659
actions/checkoutv7.0.13d3c42e5aac5ba805825da76410c181273ba90b1
actions/stalev11.0.04391f3da665fdf50b6810c1a66712fb9ba21aa93
actions/upload-artifactv7.0.1043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
dependabot/fetch-metadatav3.1.025dd0e34f4fe68f24cc83900b1fe3fe149efef98
dtolnay/rust-toolchainstable631a55b12751854ce901bb631d5902ceb48146f7
github/codeql-action/analyzev4dd677812177e0c29f9c970a6c58d8607ae1bfefd
github/codeql-action/autobuildv4dd677812177e0c29f9c970a6c58d8607ae1bfefd
github/codeql-action/initv4dd677812177e0c29f9c970a6c58d8607ae1bfefd
googleapis/release-please-actionv5.0.045996ed1f6d02564a971a2fa1b5860e934307cf7
taiki-e/install-actionv2.86.5ba47c86ac325773530516bb756137ac718732518

Fleet rollout

A GitHub code-search snapshot (scripts/render_readme_tables.py), not a maintained list — the prior hand-typed version fell out of date the moment a repo converted without an edit here, and stayed silently wrong afterward. The query finds a .github/workflows/ file containing this repo's uses: prefix; it needs network + gh auth and does not claim completeness — a repo absent below has no detected match, not a proven non-match, and a private repo the token cannot search reads identically to one that never converted.

RepoReusables consumed
forkwright/akroasisdependabot-auto-merge, gate-attestation, release-please, release-pr-checks
forkwright/aletheiagate-attestation
forkwright/dioptronrelease-please
forkwright/epistoledependabot-auto-merge, gate-attestation, release-please, release-pr-checks
forkwright/epitelesisrelease-please, release-pr-checks
forkwright/gnomongate-attestation, release-please
forkwright/hammagate-attestation, release-please, release-pr-checks
forkwright/harmoniagate-attestation, release-please, release-pr-checks
forkwright/heuremagate-attestation, release-please, release-pr-checks
forkwright/koinongate-attestation, release-please, release-pr-checks
forkwright/logismosgate-attestation, release-please, release-pr-checks
forkwright/mnemegate-attestation, release-please
forkwright/pinaxgate-attestation, release-please
forkwright/sphragisdependabot-auto-merge, gate-attestation, release-please, release-pr-checks
forkwright/theatroncodeql, dependabot-auto-merge, gate-attestation, release-please, release-pr-checks, stale
forkwright/thumosgate-attestation, release-pr-checks
forkwright/typikongate-attestation, release-pr-checks
forkwright/zetesisgate-attestation, release-please, release-pr-checks, security

Required checks on main

actionlint and event-shape-guards are required status checks on main. Both live in actionlint.yml and both run on every pull request.

WARNING for anyone editing actionlint.yml: do not reintroduce a paths: filter on its trigger. It carried one (.github/workflows/**, scripts/**) until it became required, and a required check that cannot run on some pull requests blocks those pull requests forever — nothing failing, nothing pending, nothing to point at. This repository has watched that happen to a sibling repo's main.

The cost is that a docs-only pull request re-lints unchanged workflows. That is seconds, and it is the correct trade for the repository whose entire content is other repositories' CI.

Visibility requirement

This repo must remain public. GitHub does not allow private repos to call reusable workflows from a private source repo on a personal account (forkwright is a personal account, not a GitHub org). Making this repo public unblocks private consumers (gnomon calls gate-attestation and release-please today — see Fleet rollout above) as well as public ones.

About

Reusable CI workflows for the forkwright fleet

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages