Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
c484ce3
docs: add initial implementation plan as implementation-plans/0000.md
May 14, 2026
45ca556
Commit 1: CLI surface and no-op update subcommand
May 14, 2026
e07f173
Commit 2: backend autodetection from origin URL
May 14, 2026
36a9889
Commit 3: workspace discovery and member enumeration
May 14, 2026
cbe71ec
Commit 4: .ox-check.lock manifest read/write
May 14, 2026
1b7a085
Commit 5: SHA-256 helpers and three-checksum decision algorithm
May 14, 2026
65e3732
Commit 6: managed-region parser and writer
May 14, 2026
6efb95a
Commit 7: Plan, proposed-file emission, and dry-run summary
May 14, 2026
751af1f
Commit 8: tools.just emitter and owned-file driver
May 14, 2026
d837f98
Commit 9: checks.just emitter with per-check recipes
May 14, 2026
ecfb45d
Commit 10: groups.just and tiers.just emitters
May 14, 2026
13bc15d
Commit 11: Justfile imports managed region
May 14, 2026
f195ffc
Commit 12: Cargo.toml workspace and member lints regions
May 14, 2026
e4642e2
Commit 13: deny.toml, rustfmt.toml, .delta.toml regions
May 14, 2026
f0aed25
Commit 14: end-to-end local-only update wiring
May 14, 2026
74bf3e9
Commit 15: GitHub composite actions
May 14, 2026
0730e0f
Commit 16: GitHub reusable workflows
May 14, 2026
96532be
Commit 17: GitHub root workflows and backend wiring
May 14, 2026
cace632
Commit 18: ADO step templates
May 14, 2026
92ee8fa
Commit 19: ADO stages templates
May 14, 2026
4040a7e
Commit 20: ADO root pipelines and backend wiring
May 14, 2026
4914245
Commit 21: schema-validation tests for emitted files
May 14, 2026
33139f5
Commit 22: regenerate-check workflow for dogfooding
May 14, 2026
044c0be
Commit 23: README, expanded crate docs, crates.io polish
May 14, 2026
1b3d160
Use ohno::AppError instead of anyhow throughout cargo-ox-check
May 14, 2026
a16bf55
Drop DecisionInputs::emptied and Decision::Skipped
May 14, 2026
c29b80f
Drop spurious ox-check-managed sentinels from owned .just templates
May 14, 2026
6257192
Single-import Justfile, alias in mod.just, region bodies in template …
May 14, 2026
06fb987
Move per-group GH action and ADO step YAML to template files
May 14, 2026
666d38a
Regenerate cargo_ox_check README via cargo doc2readme
May 14, 2026
564b4c3
Default-branch CLI flag with autodetection
May 14, 2026
b47cc2e
Revert "Default-branch CLI flag with autodetection"
May 14, 2026
5d77485
Drop ADO PR trigger; ADO PR validation goes through branch policies
May 14, 2026
b335ad2
Drop explanatory comment from ADO pr-root-pipeline.yml
May 14, 2026
7b1f2ac
Include master alongside main in the ADO nightly schedule
May 14, 2026
89321eb
Add insta snapshot tests for local, github, and ado emitted trees
May 14, 2026
fe75991
Fix nightly coverage artifact path to match the recipe output
May 25, 2026
3528527
Upload coverage to Codecov (GitHub) and PublishCodeCoverageResults@2 …
May 25, 2026
e6147c0
docs: add implementation plan 0001 covering audit gaps
May 26, 2026
e563a5d
Drop Commit 12 (.delta.toml opt-out gates impact emission) from plan …
May 26, 2026
d827294
Drop ADO empty-pool elision from plan 0001
May 26, 2026
9f12204
P0 C1: documentation reconciliation sweep
May 26, 2026
336e2fe
P1 C2: drop ox-check-tools-install-missing from the design
May 26, 2026
caff130
P1 C3: Propose decision bumps manifest L to new template
May 26, 2026
930a79c
P1 C4: purge stale manifest entries on update
May 26, 2026
5d5c075
P1 C5: categorized dry-run summary
May 26, 2026
32a6eb8
P2 C6-C8: tool-version policy (catalog + version-aware require + rust…
May 26, 2026
0768bdf
P3 C9-C11: three-tier impact scoping with include lists
May 26, 2026
2bb7ec1
P4 C12: llvm-cov HTML report + missing lints
May 26, 2026
a0de9d7
P4 C13: BASE_REF resolution falls back to origin/master
May 26, 2026
6b5aabf
P4 C14: per-recipe _ox-check-require fan-out
May 26, 2026
7f9c1a7
P5 C15: GitHub actions/cache in setup composite
May 26, 2026
e7aee2b
P5 C16: ADO Cache@2 in setup step
May 26, 2026
cfaf966
P6 C17: fixture scenarios under tests/fixtures/
May 26, 2026
bebc46f
P6 C18: rewrite verification.md fixture and schema sections
May 26, 2026
7ac43a5
Three-tier impact scoping: introduce required-tier env var and reclas…
May 27, 2026
6a9aef1
Make compile-sensitive check groups cross-OS
May 27, 2026
d84a7a7
nightly-runtime cross-OS; arm64 legs in GitHub default matrix
May 27, 2026
7e06d69
Pre-dogfood fixes: bash shell default; arch in cache key
May 27, 2026
54d1f1e
Fix cargo-delta CLI / JSON shape; survey real tool versions
May 27, 2026
b0ca385
Per-recipe bash annotation; drop intrusive set shell
May 27, 2026
b680380
Dogfood cargo-ox-check on this repo
May 27, 2026
85f570e
mod.just: don't declare set unstable
May 27, 2026
680347c
Shebang-style recipes; drop [script(...)] attribute everywhere
May 27, 2026
4f4be7c
Dogfood follow-up: resolve lint/rustfmt migration conflicts
May 27, 2026
aee7e2b
Switch recipe interpreter from bash shebang to [script("pwsh")]
May 27, 2026
6cee738
Normalize line endings before hashing; lowercase justfile path
May 27, 2026
660aa47
Cohabit-outside-region for ox-tools workspace lint extras; bump rustf…
May 27, 2026
0851a0b
File / region removal: handle catalog drops and disabled backends
May 28, 2026
d528266
setup-action: install libclang on Linux; install rustfmt/clippy compo…
May 28, 2026
9e0e619
InSync now refreshes L so stale-L from older binary versions self-heals
May 28, 2026
0882276
Fix cargo-mutants --in-diff usage; tolerate per-tool install failures
May 28, 2026
cc2721a
Fix test_os matrix parsing: switch CSV input to JSON array
May 28, 2026
a10fc29
Unify matrix-provision style: every multi-OS GH job uses fromJSON(inp…
May 28, 2026
7f73ec4
github backend: hardcoded OS matrices, per-leg runner inputs only
May 28, 2026
10e3dc4
Re-emit pr-impl and nightly-impl with hardcoded OS matrices
May 28, 2026
84b5c6b
ado backend: per-job wrapper template for 1ESPT extensibility
May 28, 2026
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
11 changes: 11 additions & 0 deletions .delta.toml
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,14 @@ assume_patterns = [
# The remote branch to compare against for determining changed files
# If not specified, uses the default branch detection
remote_branch = "origin/main"

# >>> ox-check-managed: ox-check-delta
[delta]
# Include the workspace root files that should invalidate every member's
# impact analysis when changed (lockfile, root manifest, toolchain).
root-files = [
"Cargo.lock",
"Cargo.toml",
"rust-toolchain.toml",
]
# <<< ox-check-managed: ox-check-delta
89 changes: 89 additions & 0 deletions .github/actions/ox-check-impact/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# Owned by cargo-ox-check; edit via `cargo ox-check update`.
name: ox-check-impact
description: |
Compute the cargo-delta impact set for this PR and emit per-tier
include lists.

Outputs:
include_modified - "--package X --package Y" string for crates whose
source files changed in the diff, or "--skip" if
the modified set is empty.
include_affected - same shape, for crates in the affected set
(modified ∪ rev-deps).
include_required - same shape, for crates in the required set
(affected ∪ workspace-internal transitive deps).

Recipes in checks.just interpret each variable per their tier:
modified-tier recipes (fmt, license-headers, spellcheck, ...) short-
circuit on "--skip"; affected-tier recipes (clippy, tests, ...) and
required-tier recipes (doc, cargo-hack, udeps) splice their include
list into the cargo invocation, defaulting to --workspace when unset
(local runs without impact wiring).

Unscoped recipes (deny, audit, aprz, pr-title) ignore all three
variables and always run unconditionally.
outputs:
include_modified:
description: Pre-formatted --package args for the modified tier.
value: ${{ steps.compute.outputs.include_modified }}
include_affected:
description: Pre-formatted --package args for the affected tier.
value: ${{ steps.compute.outputs.include_affected }}
include_required:
description: Pre-formatted --package args for the required tier.
value: ${{ steps.compute.outputs.include_required }}
runs:
using: composite
steps:
- name: Install cargo-delta
shell: bash
run: cargo install --locked cargo-delta
- id: compute
name: Compute impact
shell: bash
run: |
set -euo pipefail
# GITHUB_BASE_REF is the target-branch name on a PR event
# (e.g. "main"); we resolve it to origin/<name>. Adopters can
# override via the BASE_REF env var.
base="${BASE_REF:-origin/${GITHUB_BASE_REF:-main}}"
# cargo delta has no --base flag; the flow is two snapshots
# (baseline at the merge target + current at HEAD) compared by
# `cargo delta impact`. We use a temporary worktree to snapshot
# the baseline without disturbing the checked-out tree.
cargo delta snapshot > "$RUNNER_TEMP/ox-check-current.json"
git worktree add --detach "$RUNNER_TEMP/ox-check-baseline" "$base"
( cd "$RUNNER_TEMP/ox-check-baseline" && cargo delta snapshot ) \
> "$RUNNER_TEMP/ox-check-baseline.json"
git worktree remove --force "$RUNNER_TEMP/ox-check-baseline"
result="$(cargo delta impact \
--baseline "$RUNNER_TEMP/ox-check-baseline.json" \
--current "$RUNNER_TEMP/ox-check-current.json" \
--format json)"
# cargo-delta emits TitleCase keys (Modified / Affected /
# Required), not lowercase. Format each tier into the
# `--package X --package Y` shape recipes expect, or the
# literal "--skip" sentinel when the tier is empty.
format_set() {
local field="$1"
local pkgs
pkgs=$(printf '%s' "$result" | jq -r --arg f "$field" '(.[$f] // []) | .[]' 2>/dev/null || true)
if [ -z "$pkgs" ] ; then
printf '%s' "--skip"
else
local out=""
while IFS= read -r pkg ; do
[ -z "$pkg" ] && continue
out="$out --package $pkg"
done <<EOF
$pkgs
EOF
# shellcheck disable=SC2001
printf '%s' "${out# }"
fi
}
echo "include_modified=$(format_set Modified)" >> "$GITHUB_OUTPUT"
echo "include_affected=$(format_set Affected)" >> "$GITHUB_OUTPUT"
echo "include_required=$(format_set Required)" >> "$GITHUB_OUTPUT"
39 changes: 39 additions & 0 deletions .github/actions/ox-check-nightly-advisories/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# Owned by cargo-ox-check; edit via `cargo ox-check update`.
# The token nightly-advisories is substituted by cargo-ox-check at emit time with
# the concrete check-group name (pr-fast, pr-test, nightly-runtime, ...).
name: ox-check-nightly-advisories
description: Run the nightly-advisories check group.
inputs:
include_modified:
description: |
Pre-formatted --package args (e.g. "--package alpha --package beta")
for the modified tier, or the sentinel "--skip" when nothing
modified. Local invocations leave it unset; recipes default to
--workspace.
default: ""
required: false
include_affected:
description: |
Same shape as include_modified, but for the affected tier
(modified ∪ rev-deps).
default: ""
required: false
include_required:
description: |
Same shape as include_modified, but for the required tier
(affected ∪ workspace-internal transitive deps).
default: ""
required: false
runs:
using: composite
steps:
- uses: ./.github/actions/ox-check-setup
- name: Run just ox-check-nightly-advisories
shell: bash
env:
OX_CHECK_INCLUDE_MODIFIED: ${{ inputs.include_modified }}
OX_CHECK_INCLUDE_AFFECTED: ${{ inputs.include_affected }}
OX_CHECK_INCLUDE_REQUIRED: ${{ inputs.include_required }}
run: just ox-check-nightly-advisories
39 changes: 39 additions & 0 deletions .github/actions/ox-check-nightly-exhaustive/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# Owned by cargo-ox-check; edit via `cargo ox-check update`.
# The token nightly-exhaustive is substituted by cargo-ox-check at emit time with
# the concrete check-group name (pr-fast, pr-test, nightly-runtime, ...).
name: ox-check-nightly-exhaustive
description: Run the nightly-exhaustive check group.
inputs:
include_modified:
description: |
Pre-formatted --package args (e.g. "--package alpha --package beta")
for the modified tier, or the sentinel "--skip" when nothing
modified. Local invocations leave it unset; recipes default to
--workspace.
default: ""
required: false
include_affected:
description: |
Same shape as include_modified, but for the affected tier
(modified ∪ rev-deps).
default: ""
required: false
include_required:
description: |
Same shape as include_modified, but for the required tier
(affected ∪ workspace-internal transitive deps).
default: ""
required: false
runs:
using: composite
steps:
- uses: ./.github/actions/ox-check-setup
- name: Run just ox-check-nightly-exhaustive
shell: bash
env:
OX_CHECK_INCLUDE_MODIFIED: ${{ inputs.include_modified }}
OX_CHECK_INCLUDE_AFFECTED: ${{ inputs.include_affected }}
OX_CHECK_INCLUDE_REQUIRED: ${{ inputs.include_required }}
run: just ox-check-nightly-exhaustive
39 changes: 39 additions & 0 deletions .github/actions/ox-check-nightly-runtime/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# Owned by cargo-ox-check; edit via `cargo ox-check update`.
# The token nightly-runtime is substituted by cargo-ox-check at emit time with
# the concrete check-group name (pr-fast, pr-test, nightly-runtime, ...).
name: ox-check-nightly-runtime
description: Run the nightly-runtime check group.
inputs:
include_modified:
description: |
Pre-formatted --package args (e.g. "--package alpha --package beta")
for the modified tier, or the sentinel "--skip" when nothing
modified. Local invocations leave it unset; recipes default to
--workspace.
default: ""
required: false
include_affected:
description: |
Same shape as include_modified, but for the affected tier
(modified ∪ rev-deps).
default: ""
required: false
include_required:
description: |
Same shape as include_modified, but for the required tier
(affected ∪ workspace-internal transitive deps).
default: ""
required: false
runs:
using: composite
steps:
- uses: ./.github/actions/ox-check-setup
- name: Run just ox-check-nightly-runtime
shell: bash
env:
OX_CHECK_INCLUDE_MODIFIED: ${{ inputs.include_modified }}
OX_CHECK_INCLUDE_AFFECTED: ${{ inputs.include_affected }}
OX_CHECK_INCLUDE_REQUIRED: ${{ inputs.include_required }}
run: just ox-check-nightly-runtime
39 changes: 39 additions & 0 deletions .github/actions/ox-check-nightly-test/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# Owned by cargo-ox-check; edit via `cargo ox-check update`.
# The token nightly-test is substituted by cargo-ox-check at emit time with
# the concrete check-group name (pr-fast, pr-test, nightly-runtime, ...).
name: ox-check-nightly-test
description: Run the nightly-test check group.
inputs:
include_modified:
description: |
Pre-formatted --package args (e.g. "--package alpha --package beta")
for the modified tier, or the sentinel "--skip" when nothing
modified. Local invocations leave it unset; recipes default to
--workspace.
default: ""
required: false
include_affected:
description: |
Same shape as include_modified, but for the affected tier
(modified ∪ rev-deps).
default: ""
required: false
include_required:
description: |
Same shape as include_modified, but for the required tier
(affected ∪ workspace-internal transitive deps).
default: ""
required: false
runs:
using: composite
steps:
- uses: ./.github/actions/ox-check-setup
- name: Run just ox-check-nightly-test
shell: bash
env:
OX_CHECK_INCLUDE_MODIFIED: ${{ inputs.include_modified }}
OX_CHECK_INCLUDE_AFFECTED: ${{ inputs.include_affected }}
OX_CHECK_INCLUDE_REQUIRED: ${{ inputs.include_required }}
run: just ox-check-nightly-test
39 changes: 39 additions & 0 deletions .github/actions/ox-check-pr-fast/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# Owned by cargo-ox-check; edit via `cargo ox-check update`.
# The token pr-fast is substituted by cargo-ox-check at emit time with
# the concrete check-group name (pr-fast, pr-test, nightly-runtime, ...).
name: ox-check-pr-fast
description: Run the pr-fast check group.
inputs:
include_modified:
description: |
Pre-formatted --package args (e.g. "--package alpha --package beta")
for the modified tier, or the sentinel "--skip" when nothing
modified. Local invocations leave it unset; recipes default to
--workspace.
default: ""
required: false
include_affected:
description: |
Same shape as include_modified, but for the affected tier
(modified ∪ rev-deps).
default: ""
required: false
include_required:
description: |
Same shape as include_modified, but for the required tier
(affected ∪ workspace-internal transitive deps).
default: ""
required: false
runs:
using: composite
steps:
- uses: ./.github/actions/ox-check-setup
- name: Run just ox-check-pr-fast
shell: bash
env:
OX_CHECK_INCLUDE_MODIFIED: ${{ inputs.include_modified }}
OX_CHECK_INCLUDE_AFFECTED: ${{ inputs.include_affected }}
OX_CHECK_INCLUDE_REQUIRED: ${{ inputs.include_required }}
run: just ox-check-pr-fast
39 changes: 39 additions & 0 deletions .github/actions/ox-check-pr-mutants/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# Owned by cargo-ox-check; edit via `cargo ox-check update`.
# The token pr-mutants is substituted by cargo-ox-check at emit time with
# the concrete check-group name (pr-fast, pr-test, nightly-runtime, ...).
name: ox-check-pr-mutants
description: Run the pr-mutants check group.
inputs:
include_modified:
description: |
Pre-formatted --package args (e.g. "--package alpha --package beta")
for the modified tier, or the sentinel "--skip" when nothing
modified. Local invocations leave it unset; recipes default to
--workspace.
default: ""
required: false
include_affected:
description: |
Same shape as include_modified, but for the affected tier
(modified ∪ rev-deps).
default: ""
required: false
include_required:
description: |
Same shape as include_modified, but for the required tier
(affected ∪ workspace-internal transitive deps).
default: ""
required: false
runs:
using: composite
steps:
- uses: ./.github/actions/ox-check-setup
- name: Run just ox-check-pr-mutants
shell: bash
env:
OX_CHECK_INCLUDE_MODIFIED: ${{ inputs.include_modified }}
OX_CHECK_INCLUDE_AFFECTED: ${{ inputs.include_affected }}
OX_CHECK_INCLUDE_REQUIRED: ${{ inputs.include_required }}
run: just ox-check-pr-mutants
39 changes: 39 additions & 0 deletions .github/actions/ox-check-pr-test/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# Owned by cargo-ox-check; edit via `cargo ox-check update`.
# The token pr-test is substituted by cargo-ox-check at emit time with
# the concrete check-group name (pr-fast, pr-test, nightly-runtime, ...).
name: ox-check-pr-test
description: Run the pr-test check group.
inputs:
include_modified:
description: |
Pre-formatted --package args (e.g. "--package alpha --package beta")
for the modified tier, or the sentinel "--skip" when nothing
modified. Local invocations leave it unset; recipes default to
--workspace.
default: ""
required: false
include_affected:
description: |
Same shape as include_modified, but for the affected tier
(modified ∪ rev-deps).
default: ""
required: false
include_required:
description: |
Same shape as include_modified, but for the required tier
(affected ∪ workspace-internal transitive deps).
default: ""
required: false
runs:
using: composite
steps:
- uses: ./.github/actions/ox-check-setup
- name: Run just ox-check-pr-test
shell: bash
env:
OX_CHECK_INCLUDE_MODIFIED: ${{ inputs.include_modified }}
OX_CHECK_INCLUDE_AFFECTED: ${{ inputs.include_affected }}
OX_CHECK_INCLUDE_REQUIRED: ${{ inputs.include_required }}
run: just ox-check-pr-test
Loading
Loading