Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
149 commits
Select commit Hold shift + click to select a range
7fce311
Add signed CML fleet qualification adapter with durable receipts
mfethe1 Sep 7, 2026
2d9c336
fix(relay): bound startup storage conformance admission
mfethe1 Sep 7, 2026
2d4c2e0
test: restore explicit ACP unit runner steps
mfethe1 Sep 7, 2026
195c727
test: remove redundant ACP unit runner entries
mfethe1 Sep 7, 2026
161568d
test(acp): resolve Windows shell for pool fixtures
mfethe1 Sep 7, 2026
cac8ad2
ci: isolate repository Docker caches from pull requests
mfethe1 Sep 7, 2026
cac12c3
test(acp): use resolved shell for steer fixtures
mfethe1 Sep 7, 2026
ba3cd49
test(mobile): match SDK font filename case
mfethe1 Sep 7, 2026
0aee6a6
ci: bootstrap standalone release evaluators
mfethe1 Sep 7, 2026
d55b27e
test(desktop): follow split agent cards and trailing header actions
mfethe1 Sep 7, 2026
06e849b
Restore authored workflow mention authority and current catalog checks
mfethe1 Sep 7, 2026
6569ef0
Attribute workflow lookups and make push fixture clock independent
mfethe1 Sep 7, 2026
fa1b27b
fix(mobile): style inline code with the app mono face (#6631)
TolgaCinisli Sep 8, 2026
86c189e
fix(buzz-acp): wake held ACP threads and fence forked sessions (#7340)
salman1993 Sep 8, 2026
cd54e26
fix(agent): route GPT-5+ model-service FQNs to Responses (#7358)
baxen Sep 8, 2026
44316ff
feat(mesh): upgrade to mesh-llm 0.76.0-rc8 and recommend Qwen3.8 27B …
micspiral Sep 8, 2026
218633b
fix(link-preview): keep composer fetches user-paced (#7211)
tellaho Sep 8, 2026
a30abd6
fix(tasks): preserve audit changes and paginate visible work
mfethe1 Sep 7, 2026
fe3608c
test(db): pin additive task history migration inventory
mfethe1 Sep 7, 2026
36fcb7c
merge: qualify upstream 218633b8f with the Buzz product integration
mfethe1 Sep 8, 2026
52dc02e
merge: reconcile upstream session fencing with PR21 Windows fixtures
mfethe1 Sep 8, 2026
2084790
merge: compose PR22 into the local release qualification candidate
mfethe1 Sep 8, 2026
398fd46
merge: compose PR23 into the local release qualification candidate
mfethe1 Sep 8, 2026
07d1a9f
merge: compose PR25 into the local release qualification candidate
mfethe1 Sep 8, 2026
dd1f7f0
merge: compose PR26 into the local release qualification candidate
mfethe1 Sep 8, 2026
44d9147
merge: compose PR27 into the local release qualification candidate
mfethe1 Sep 8, 2026
5b807cf
Integrate machine homes, durable grant history and task revisions
mfethe1 Sep 8, 2026
b0422e2
test(agent): wait for observed cancellation and steering outcomes
mfethe1 Sep 8, 2026
c006442
Declare machine-home constraints in the desired users schema
mfethe1 Sep 8, 2026
4fa286f
Preserve machine metadata constraints through pgschema
mfethe1 Sep 8, 2026
c2aa434
Verify direct task writers and current permission fence inventory
mfethe1 Sep 8, 2026
229b5ff
fix(db): preserve bootstrap CHECK constraints and verify catalog parity
mfethe1 Sep 8, 2026
5acdbc7
fix(mobile): guard task edits and refresh open task views
mfethe1 Sep 8, 2026
b99b2d3
Merge verified backend task and permission integration
mfethe1 Sep 8, 2026
3803a0d
fix(mobile): use exact arithmetic for MP4 offset bounds
mfethe1 Sep 8, 2026
33e794b
docs(mobile): clarify inaccessible task lookup behavior
mfethe1 Sep 8, 2026
b27a06d
feat(workflow): persist signed approval waits and one-use resume claims
mfethe1 Sep 8, 2026
40173a3
merge: preserve schema checks in the combined product candidate
mfethe1 Sep 8, 2026
4bcd9a5
test(mobile): qualify exact renderer profiles for strict goldens
mfethe1 Sep 8, 2026
8c5837a
merge: integrate guarded mobile task updates with product backend
mfethe1 Sep 8, 2026
4d850be
test(mobile): preserve strict canonical checks on other renderers
mfethe1 Sep 8, 2026
4a3018b
feat(tasks): notify authorized clients after committed changes
mfethe1 Sep 8, 2026
a4bdcb0
merge: qualify mobile renderers without weakening canonical comparisons
mfethe1 Sep 8, 2026
faa1493
test(tasks): include notification checks in nextest unit lane
mfethe1 Sep 8, 2026
0880bac
test(mobile): use Flutter logging for renderer diagnostics
mfethe1 Sep 8, 2026
bb88f94
merge: incorporate PR24 storage admission deadline into product candi…
mfethe1 Sep 8, 2026
ad27685
merge: integrate task notifications and preserve both qualification l…
mfethe1 Sep 8, 2026
c045321
fix(acp): pace targeted overflow recovery on consumer capacity (#7325)
loganj Sep 8, 2026
9a5e621
fix(workflow): fence legacy decisions and stale continuation workers
mfethe1 Sep 8, 2026
f8e5088
merge: keep renderer diagnostics clear of mobile lint errors
mfethe1 Sep 8, 2026
04ca3b6
fix(acp): tolerate task advisories during relay authentication
mfethe1 Sep 8, 2026
e0b6a7f
Merge durable signed workflow approval recovery into product candidate
mfethe1 Sep 8, 2026
7769747
fix(mobile): use browser websocket transport on web
mfethe1 Sep 8, 2026
92c0217
Merge task advisory compatibility for authenticated agents
mfethe1 Sep 8, 2026
5b18ff4
Merge verified browser task updates and reconnect transport
mfethe1 Sep 8, 2026
2aca890
ci: run workflow and approval read unit tests in both runners
mfethe1 Sep 8, 2026
6c280da
Merge workflow unit coverage into both CI runners
mfethe1 Sep 8, 2026
b6f0b6c
Merge scoped fleet qualification adapter into atomic dispatch candidate
mfethe1 Sep 8, 2026
ea70516
Merge upstream capacity-paced recovery into the Buzz product candidate
mfethe1 Sep 8, 2026
84c014c
fix(acp): retain transiently rejected observer frames for resend
mfethe1 Sep 8, 2026
2516efe
Preserve transiently rejected observer events through recovery
mfethe1 Sep 8, 2026
2e9d7cd
Recognize equivalent checkpoint checks in schema parity validation
mfethe1 Sep 8, 2026
4286255
Add mobile Work task list and conversation agent assignment
mfethe1 Sep 8, 2026
b6f9a70
Qualify checkpoint schema parity without rewriting migration history
mfethe1 Sep 8, 2026
d580604
Guard task creation before queued callbacks can submit twice
mfethe1 Sep 8, 2026
f1b167b
Avoid unsupported native badge calls in browser clients
mfethe1 Sep 8, 2026
7c1e9e6
Integrate reviewed mobile Work tasks and guarded creation
mfethe1 Sep 8, 2026
36e2228
Match tracked Justfile in Rust CI path selection
mfethe1 Sep 8, 2026
356ce37
feat(fleet): admit fixed qualification attempts atomically
mfethe1 Sep 8, 2026
9f57c06
style(fleet): normalize admission module ending
mfethe1 Sep 8, 2026
ee78fe0
Honor CI path exclusions without selecting unrelated files
mfethe1 Sep 8, 2026
4955213
fix(fleet): bind submitted evidence and close owned SQLite handles
mfethe1 Sep 8, 2026
33829bd
Integrate verified CI path selection for product changes
mfethe1 Sep 8, 2026
b4504d5
test(acp): reap initialization fixtures before returning
mfethe1 Sep 9, 2026
a9f3a7a
test(acp): reap named wire fixture after observing usage
mfethe1 Sep 9, 2026
51139e0
Integrate reviewed atomic fleet qualification and receipt binding
mfethe1 Sep 9, 2026
04cdac0
test(acp): reap response fixtures without idle descendants
mfethe1 Sep 9, 2026
027742e
Integrate verified ACP response fixture process cleanup
mfethe1 Sep 9, 2026
783e0b6
test(db): bind later deletion fences to their migrations
mfethe1 Sep 9, 2026
0862322
style(db): format deletion fence parity assertion
mfethe1 Sep 9, 2026
0b78bcd
Merge verified later-migration deletion fence parity
mfethe1 Sep 9, 2026
f8f7e0e
test(mobile): verify channel save before reopening management
mfethe1 Sep 9, 2026
084a63a
test(mobile): integrate verified channel management regression
mfethe1 Sep 9, 2026
7b05057
build(mobile): prepare Apple Silicon simulator qualification
mfethe1 Sep 9, 2026
f33647e
build(mobile): load simulator helper after plugin links exist
mfethe1 Sep 9, 2026
ae1f104
test(mobile): qualify native segmentation from a file image
mfethe1 Sep 9, 2026
6adefd3
build(mobile): lock native dependencies for simulator support
mfethe1 Sep 9, 2026
293819f
Add private signed machine enrollment and bounded observations
mfethe1 Sep 9, 2026
c4d2250
Exercise repeated native segmentation in single and stream modes
mfethe1 Sep 9, 2026
1603126
Require native segmentation results outside the async error boundary
mfethe1 Sep 9, 2026
73e4993
Integrate reviewed private machine enrollment and observations
mfethe1 Sep 9, 2026
a5bdf90
Add private Computers browse and detail to mobile Home
mfethe1 Sep 9, 2026
311cd16
Integrate reviewed native mobile build compatibility and runtime tests
mfethe1 Sep 9, 2026
283d670
Bound computer freshness by server time and clear lost access
mfethe1 Sep 9, 2026
3344a9f
Keep computer status details readable in dark themes
mfethe1 Sep 9, 2026
79bb609
Describe the Android debug APK signing accurately
mfethe1 Sep 9, 2026
61a4c52
Integrate verified Android build documentation
mfethe1 Sep 9, 2026
8d787b9
Integrate owner-scoped mobile Computers and bounded status freshness
mfethe1 Sep 9, 2026
7b742a4
Include machines in the exact CLI command inventory
mfethe1 Sep 9, 2026
4e26b26
fix(desktop): conceal spoiler accessibility and restore agent descrip…
mfethe1 Sep 9, 2026
4c85e7a
Integrate verified machine command inventory correction
mfethe1 Sep 9, 2026
2ad46b1
Integrate reviewed desktop privacy and regression fixes
mfethe1 Sep 9, 2026
8242568
Establish socket backpressure before timing recovery writes
mfethe1 Sep 9, 2026
0870777
Allow a bounded hour for relay artifact compilation
mfethe1 Sep 9, 2026
411024f
Qualify two reproduced Linux golden renderers
mfethe1 Sep 9, 2026
f648b10
Scope thread roleplay assertions to visible replies
mfethe1 Sep 9, 2026
806aac2
fix(link-preview): bound complete metadata operations
mfethe1 Sep 9, 2026
d8e5830
Integrate preview and cross-platform qualification repairs
mfethe1 Sep 9, 2026
928503e
Fix task refresh across relay instances
mfethe1 Sep 9, 2026
58d2b73
test(link-preview): synchronize native fixture readiness
mfethe1 Sep 9, 2026
4f185ba
fix(mobile): preserve task pages during background recovery
mfethe1 Sep 9, 2026
5de2a57
test(link-preview): establish stream progress before drip delays
mfethe1 Sep 9, 2026
9e64414
fix(ci): provide Redis URL to PostgreSQL approval tests
mfethe1 Sep 9, 2026
e3b99d2
test(relay): observe Redis subscriber readiness before task writes
mfethe1 Sep 9, 2026
a4355a1
fix(relay): bind task notifications to verified sessions
mfethe1 Sep 9, 2026
9bf2817
fix(relay): keep urgent control responsive during task fanout
mfethe1 Sep 9, 2026
f66c01b
fix(integration): compose verified task recovery repairs
mfethe1 Sep 9, 2026
0dabef7
test(relay): use explicit broadcast queue emptiness check
mfethe1 Sep 9, 2026
f81e81f
fix(desktop): synchronize websocket client lockfile dependency
mfethe1 Sep 9, 2026
93761e4
fix(mobile): render push notification sender identity as npub (#7494)
loganj Sep 9, 2026
bfc3848
fix(desktop): shared npub identity foundation (canonicalNpub, PubKey …
loganj Sep 9, 2026
be77912
test(mobile): await observed background refresh in live bindings
mfethe1 Sep 9, 2026
de1a907
test(desktop): preserve redirect deadline coverage under scheduling d…
mfethe1 Sep 9, 2026
b52ca32
test: distinguish unrelated Redis traffic in machine privacy checks
mfethe1 Sep 9, 2026
ade91a5
merge: integrate upstream mobile and desktop identity fixes
mfethe1 Sep 9, 2026
27c62be
[lenny] merge: integrate upstream block/main bfc3848558 into product/…
mfethe1 Sep 9, 2026
ee2988c
test(mobile): match SDK font filename case
mfethe1 Sep 7, 2026
ad2a841
fix(desktop): npub identity displays for mention, member, and workflo…
loganj Sep 9, 2026
2226b6f
fix(desktop): npub identity controls across profile, agents, and work…
loganj Sep 9, 2026
82656ff
fix(mobile): standardize public-key identity display on npub (#7493)
loganj Sep 9, 2026
39b0546
fix(relay): recover task updates after notification authorization fai…
mfethe1 Sep 9, 2026
908e07b
[lenny] merge: integrate upstream block/main 82656ffea0 into product/…
mfethe1 Sep 9, 2026
ac55660
test(mobile): align fork identity fixtures with upstream npub labels
mfethe1 Sep 9, 2026
ad9591c
fix(desktop): order unnamed roster members by full canonical npub (#7…
loganj Sep 9, 2026
12023a3
fix(desktop): require a Codex adapter with Astra support (#7427)
sbddesign Sep 9, 2026
051c3a2
fix(buzz-acp): report missing models without retrying (#7538)
ngthuydiem Sep 9, 2026
ae5f003
[lenny] merge: integrate upstream block/main 051c3a270b (3 commits: #…
mfethe1 Sep 10, 2026
5270042
fix(desktop): retain renewed image host cooldowns
mfethe1 Sep 10, 2026
f46e784
test(desktop): isolate cooldown host stripe fixture
mfethe1 Sep 10, 2026
f971fd2
test(desktop): isolate deadline image fixtures
mfethe1 Sep 10, 2026
c287985
test(desktop): avoid exhausting host stripe fixtures
mfethe1 Sep 10, 2026
f5ad55b
test(desktop): serialize gated preview fixtures
mfethe1 Sep 10, 2026
ae9c659
fix(desktop): satisfy clippy for serialized fixtures
mfethe1 Sep 10, 2026
7f2ffd7
test(agent): stabilize empty steer validation
mfethe1 Sep 10, 2026
6fdc778
fix(test): consume steer gate sender once
mfethe1 Sep 10, 2026
88aa5db
fix(test): scope steer gate sender correctly
mfethe1 Sep 10, 2026
f41ead2
test(desktop): force sent chip wrapping in smoke fixture
mfethe1 Sep 10, 2026
bd28fde
test(desktop): allow sidebar snapshot hydration time
mfethe1 Sep 10, 2026
8fb812a
merge: include latest upstream Buzz integration
mfethe1 Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
327 changes: 327 additions & 0 deletions .github/scripts/ci-paths-filter.test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,327 @@
import assert from "node:assert/strict";
import { execFileSync } from "node:child_process";
import { createHash } from "node:crypto";
import {
mkdirSync,
mkdtempSync,
readFileSync,
rmSync,
writeFileSync,
} from "node:fs";
import { tmpdir } from "node:os";
import path from "node:path";
import { after, before, test } from "node:test";
import { fileURLToPath } from "node:url";
import { Evaluator, Lexer, Parser, data } from "@actions/expressions";
import { parse } from "yaml";

const root = fileURLToPath(new URL("../..", import.meta.url));
const workflow = parse(
readFileSync(path.join(root, ".github/workflows/ci.yml"), "utf8"),
);
const filterSteps = workflow.jobs.changes.steps.filter(
(step) => step.id === "filter",
);
assert.equal(filterSteps.length, 1);
const filter = filterSteps[0];
const actionRef = "dorny/paths-filter@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d";
const actionSha256 =
"d7c109e4a3c9f256aab1baf62473673a2e36d15efe02848220001de80067d5b2";
const scratch = mkdtempSync(path.join(tmpdir(), "buzz-ci-paths-filter-"));
const actionPath = path.join(scratch, "paths-filter.cjs");

after(() => rmSync(scratch, { recursive: true, force: true }));
before(async () => {
assert.equal(
filter.uses,
actionRef,
"review and qualify action updates explicitly",
);
assert.equal(filter.with.token, "", "exercise the production Git diff path");
const revision = actionRef.split("@")[1];
const response = await fetch(
`https://raw.githubusercontent.com/dorny/paths-filter/${revision}/dist/index.js`,
{ signal: AbortSignal.timeout(30_000) },
);
assert.equal(response.status, 200, "pinned action download must succeed");
const bytes = Buffer.from(await response.arrayBuffer());
assert.equal(createHash("sha256").update(bytes).digest("hex"), actionSha256);
writeFileSync(actionPath, bytes);
});

function outputValues(file) {
const lines = readFileSync(file, "utf8").split(/\r?\n/);
const result = {};
for (let index = 0; index < lines.length; index++) {
if (!lines[index]) continue;
const match = /^([^<]+)<<(.+)$/.exec(lines[index]);
assert.ok(match, `expected an Actions multiline output: ${lines[index]}`);
const values = [];
while (++index < lines.length && lines[index] !== match[2])
values.push(lines[index]);
assert.ok(index < lines.length, "output delimiter must close");
assert.ok(!(match[1] in result), "output must be written once");
result[match[1]] = values.join("\n");
}
return result;
}

// Execute the unmodified action bundle, including its Git diff and matcher,
// with the production filter input. No API token or caller credentials enter
// this disposable repository, and Git cannot read the user's global config.
function runAction(change) {
const directory = mkdtempSync(path.join(scratch, "repo-"));
const gitConfig = path.join(directory, "fixture-git-config");
const output = path.join(directory, "action-output");
const event = path.join(directory, "event.json");
writeFileSync(gitConfig, "");
writeFileSync(output, "");
const env = {
PATH: process.env.PATH,
GIT_CONFIG_GLOBAL: gitConfig,
GIT_CONFIG_NOSYSTEM: "1",
GIT_TERMINAL_PROMPT: "0",
GIT_AUTHOR_NAME: "Path filter fixture",
GIT_AUTHOR_EMAIL: "fixture@example.invalid",
GIT_COMMITTER_NAME: "Path filter fixture",
GIT_COMMITTER_EMAIL: "fixture@example.invalid",
};
const git = (...args) =>
execFileSync("git", ["-c", "core.hooksPath=/dev/null", ...args], {
cwd: directory,
env,
encoding: "utf8",
timeout: 10_000,
stdio: ["ignore", "pipe", "pipe"],
}).trim();
git("-c", "init.templateDir=", "init", "--initial-branch=main");
for (const name of ["Justfile", "README.md"]) {
writeFileSync(
path.join(directory, name),
readFileSync(path.join(root, name)),
);
}
git("add", "Justfile", "README.md");
git("commit", "-m", "Base fixture");
const base = git("rev-parse", "HEAD");
change(directory);
git(
"add",
"-A",
"--",
".",
":!fixture-git-config",
":!action-output",
":!event.json",
);
git("commit", "-m", "Changed fixture");
const head = git("rev-parse", "HEAD");
writeFileSync(
event,
JSON.stringify({ pull_request: { base: { sha: base } } }),
);
try {
execFileSync(process.execPath, [actionPath], {
cwd: directory,
env: {
...env,
GITHUB_EVENT_NAME: "pull_request",
GITHUB_EVENT_PATH: event,
GITHUB_OUTPUT: output,
GITHUB_WORKSPACE: directory,
GITHUB_REPOSITORY: "fixture/paths",
GITHUB_REF: "refs/heads/main",
GITHUB_SHA: head,
...Object.fromEntries(
Object.entries(filter.with).map(([name, value]) => [
`INPUT_${name.toUpperCase().replace(/ /g, "_")}`,
String(value),
]),
),
},
timeout: 20_000,
stdio: ["ignore", "pipe", "pipe"],
});
} catch (error) {
throw new Error(
`Pinned paths-filter failed:\n${error.stdout}\n${error.stderr}`,
{ cause: error },
);
}
return outputValues(output);
}

const rustLanes = [
"rust",
"rust-cross-compile-domain",
"desktop-domain",
"relay-artifacts-domain",
"postgres-domain",
"desktop-macos-domain",
"relay-domain",
"security-domain",
];

function selectedLanes(outputs) {
const context = {
github: { event_name: "pull_request" },
needs: { changes: { outputs } },
};
// Evaluate the existing workflow expressions; this does not execute any job
// or certify a hosted check, runner environment, or downstream test result.
return [...rustLanes, "clients", "mobile-swift-domain"].filter((name) => {
const { tokens } = new Lexer(workflow.jobs[name].if).lex();
const expression = new Parser(tokens, Object.keys(context), []).parse();
return (
new Evaluator(
expression,
JSON.parse(JSON.stringify(context), data.reviver),
)
.evaluate()
.coerceString() === "true"
);
});
}

const desktopLanes = [
"desktop-domain",
"relay-artifacts-domain",
"desktop-macos-domain",
"relay-domain",
];
const mobileLanes = ["clients", "mobile-swift-domain"];

for (const scenario of [
{
name: "root Justfile edit",
paths: ["Justfile"],
filters: ["rust"],
lanes: rustLanes,
},
{
name: "root Justfile deletion",
remove: "Justfile",
filters: ["rust"],
lanes: rustLanes,
},
{ name: "root README", paths: ["README.md"], filters: [], lanes: [] },
{ name: "documentation", paths: ["docs/guide.md"], filters: [], lanes: [] },
{
name: "nested Justfile documentation",
paths: ["docs/Justfile"],
filters: [],
lanes: [],
},
{
name: "desktop UI",
paths: ["desktop/src/App.tsx"],
filters: ["desktop"],
lanes: desktopLanes,
},
{
name: "Tauri implementation",
paths: ["desktop/src-tauri/src/main.rs"],
filters: ["desktop-rust"],
lanes: ["rust", ...desktopLanes],
},
{
name: "Tauri subtree documentation",
paths: ["desktop/src-tauri/README.md"],
filters: ["desktop-rust"],
lanes: ["rust", ...desktopLanes],
},
{
name: "similarly named UI file outside Tauri",
paths: ["desktop/src-tauri-helper.ts"],
filters: ["desktop"],
lanes: desktopLanes,
},
{
name: "mobile client",
paths: ["mobile/lib/app.dart"],
filters: ["mobile"],
lanes: mobileLanes,
},
{
name: "web client",
paths: ["web/src/main.ts"],
filters: ["web"],
lanes: ["clients"],
},
{
name: "shared JavaScript lockfile",
paths: ["pnpm-lock.yaml"],
filters: ["desktop", "web"],
lanes: [...desktopLanes, "clients"],
},
{
name: "shared model capabilities",
paths: ["scripts/model-capabilities.json"],
filters: ["rust", "desktop"],
lanes: rustLanes,
},
{
name: "Rust manifest",
paths: ["Cargo.toml"],
filters: ["rust"],
lanes: rustLanes,
},
{
name: "CI workflow",
paths: [".github/workflows/ci.yml"],
filters: ["rust", "mobile"],
lanes: [...rustLanes, ...mobileLanes],
},
{
name: "UI plus Tauri plus mobile",
paths: [
"desktop/src/App.tsx",
"desktop/src-tauri/src/main.rs",
"mobile/lib/app.dart",
],
filters: ["desktop", "desktop-rust", "mobile"],
lanes: ["rust", ...desktopLanes, ...mobileLanes],
},
{
name: "documentation plus Tauri",
paths: ["docs/guide.md", "desktop/src-tauri/src/main.rs"],
filters: ["desktop-rust"],
lanes: ["rust", ...desktopLanes],
},
{
name: "all client and Rust surfaces",
paths: [
"Justfile",
"desktop/src/App.tsx",
"desktop/src-tauri/src/main.rs",
"web/src/main.ts",
"mobile/lib/app.dart",
],
filters: ["rust", "desktop", "desktop-rust", "web", "mobile"],
lanes: [...rustLanes, ...mobileLanes],
},
]) {
test(`${scenario.name} selects its intended CI lanes`, (t) => {
const outputs = runAction((directory) => {
if (scenario.remove) rmSync(path.join(directory, scenario.remove));
for (const relative of scenario.paths ?? []) {
const file = path.join(directory, relative);
mkdirSync(path.dirname(file), { recursive: true });
writeFileSync(file, "Changed fixture content\n");
}
});
for (const name of ["rust", "desktop", "desktop-rust", "web", "mobile"]) {
assert.equal(
outputs[name],
String(scenario.filters.includes(name)),
name,
);
}
assert.deepEqual(JSON.parse(outputs.changes), scenario.filters);
const lanes = selectedLanes(outputs);
assert.deepEqual(lanes, scenario.lanes);
t.diagnostic(
JSON.stringify({ action: actionRef, actionSha256, outputs, lanes }),
);
});
}
Loading
Loading