Skip to content

ci: add CI/CD scaffolding, repo hygiene, and supply-chain config#3

Open
tolgakaratas wants to merge 1 commit intomasterfrom
feat/ci-cd-pipeline-and-governance
Open

ci: add CI/CD scaffolding, repo hygiene, and supply-chain config#3
tolgakaratas wants to merge 1 commit intomasterfrom
feat/ci-cd-pipeline-and-governance

Conversation

@tolgakaratas
Copy link
Copy Markdown

Internal validation PR — verifies CI runs cleanly on upstream baseline before opening upstream PR. Will close once upstream PR is merged.

Pure-additive infrastructure pass — no existing files modified, no
source-code touches. Brings the repository up to a baseline for
contributor visibility, supply-chain transparency, and PR review
ergonomics. Scoped intentionally to artefacts that work on master
as it stands today; the workflows that depend on a green build
(per-PR build/test, release pipelines, container image) come in a
follow-up after the codebase compiles cleanly for the static-musl
target.

Workflows
* `.github/workflows/security-scan.yml` — weekly cargo-audit +
  cargo-deny + CodeQL on the same runner. Catches new advisories
  on Cargo.lock and any CodeQL findings without paging the
  maintainer for a full CI redesign.
* `.github/workflows/lint-meta.yml` — commit-message lint
  (Conventional Commits) + Markdown lint over `docs/**` and
  root-level `*.md`. Both runs are pinned to Node 24 so the
  workflow is unaffected by the Node 20 deprecation rollout.
* `.github/workflows/labeler.yml` — `actions/labeler@v6` with
  per-area labels (area:ci / docs / vmm / virtio / net / storage
  / tests / e2e / deps / build) auto-applied to PRs by changed
  paths. Labels are provisioned idempotently with
  `gh label create --force` so the action works in fresh repos.
* `.github/workflows/dependabot-auto-merge.yml` — auto-merges
  Dependabot patch + minor updates and comments on majors.

Configs
* `.commitlintrc.json` — Conventional Commits with a fixed
  type-enum (build/chore/ci/docs/feat/fix/perf/refactor/revert/
  style/test). Length and case rules are warning-only so the
  gate is structural, not stylistic.
* `.markdownlint.json` — sensible defaults disabling layout
  nits incompatible with the project's docs style (long lines,
  inline HTML, bare URLs, leading-H1, blockquote spacing,
  emphasis-as-heading).
* `.pre-commit-config.yaml` — local hook stack mirroring the CI
  gates (cargo-fmt-check, cargo-clippy, cargo-machete on
  `Cargo.toml` change, cargo-test + cargo-deny pre-push,
  Conventional Commits validator, markdownlint).
* `.config/nextest.toml` — emits a JUnit XML report at
  `target/nextest/default/junit.xml` so downstream test
  reporters can publish inline annotations on PRs.
* `deny.toml` — cargo-deny rules: licenses (allow-list of
  permissive OSS), advisories (deny vulnerable deps), bans
  (no duplicate roots), sources (only crates.io + workspace).
* `.editorconfig` — universal whitespace / line-ending /
  charset baseline for editors that respect it.
* `.mise.toml` — `[tools]` pinning Rust + cargo-binstall +
  pre-commit, plus `[tasks.setup]` and `[tasks.ci]` for one-line
  contributor onboarding via mise.
* `rustfmt.toml` — workspace formatting baseline.
* `release-please-config.json` + `.release-please-manifest.json`
  — config files for the release-please workflow that lands
  in a follow-up PR; included now so that PR is purely a
  workflow change.

Repo metadata
* `.github/CODEOWNERS` — default reviewer pair.
* `.github/dependabot.yml` — daily Cargo + GitHub Actions
  ecosystems with grouped minor-and-patch updates.
* `.github/labeler.yml` — area-label rules consumed by the
  labeler workflow.
* `.github/pull_request_template.md` — PR template covering
  summary, test plan, conventional-commits hint.
* `.github/ISSUE_TEMPLATE/{bug_report,feature_request}.yml`
  — structured GitHub Issue forms.

Governance
* `SECURITY.md` — vulnerability disclosure channel and
  expected response window.
* `CHANGELOG.md` — Keep-a-Changelog skeleton ready for
  release-please to populate.

Tests
* `crates/guest-agent/tests/sleep_deadline.rs` — regression
  guard for Bug #1 from the Phase 0 vsock work: timing
  primitives the agent relies on must return promptly. Doesn't
  reproduce the in-guest scheduler problem (would need a real
  KVM context) but catches the class of mistake where a sleep
  call is replaced with something that doesn't actually sleep
  AND doesn't return.

Deferred to follow-up PRs (each touches the source tree and is
intentionally separated for review):
- per-PR build/test workflow on x86_64-unknown-linux-musl (the
  static-musl target currently fails to compile on master with
  37 errors; ship after the cross-platform-gating fix lands)
- clippy-strict + per-file coverage ratchet workflow
- release / release-please / Dockerfile pipeline
- src/* bug fixes (vsock / serial / timer / block) and the
  shift-left regression tests that exercise them
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant