




















@@ -19,6 +19,7 @@ import {
1919createPnpmManagedCommand,
2020createTargetedCoreLintCommand,
2121shouldDelegateChangedCheckToCrabbox,
22+shouldRunAppcastOwnerTest,
2223shouldRunPromptSnapshotCheck,
2324shouldRunPromptSnapshotOwnerTest,
2425shouldRunRuntimeSidecarBaselineCheck,
@@ -1449,26 +1450,45 @@ describe("scripts/changed-lanes", () => {
14491450expect(plan.commands.map((command) => command.args[0])).not.toContain("tsgo:all");
14501451});
145114521452-it("keeps app lint explicit when non-macOS hosts lack SwiftLint", () => {
1453-const result = detectChangedLanes([
1453+it("runs macOS app CI tests for macOS app dependency changes", () => {
1454+for (const changedPath of [
1455+"apps/macos/Sources/OpenClawMac/AppDelegate.swift",
1456+"apps/macos-mlx-tts/Sources/OpenClawMLXTTS/main.swift",
14541457"apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift",
1455-]);
1456-const plan = createChangedCheckPlan(result, {
1457-env: { PATH: "/usr/bin" },
1458-platform: "linux",
1459-swiftlintAvailable: false,
1460-});
1458+"apps/swabble/Sources/SwabbleKit/WakeWordGate.swift",
1459+"Swabble/Sources/SwabbleKit/WakeWordGate.swift",
1460+]) {
1461+const result = detectChangedLanes([changedPath]);
1462+const plan = createChangedCheckPlan(result, {
1463+env: { PATH: "/usr/bin" },
1464+platform: "linux",
1465+swiftlintAvailable: false,
1466+});
1467+1468+expect(plan.commands.map((command) => command.args[0])).not.toContain("lint:apps");
1469+expect(plan.commands).toContainEqual(
1470+expect.objectContaining({
1471+name: "lint apps (swiftlint unavailable on this host)",
1472+bin: "node",
1473+}),
1474+);
1475+expect(plan.commands).toContainEqual({
1476+name: "macOS app CI tests",
1477+args: ["test:macos:ci"],
1478+});
1479+}
1480+});
146114811462-expectLanes(result.lanes, {
1463-apps: true,
1482+it("routes appcast changes to appcast owner tests", () => {
1483+const result = detectChangedLanes(["appcast.xml"]);
1484+const plan = createChangedCheckPlan(result);
1485+1486+expect(shouldRunAppcastOwnerTest(result.paths)).toBe(true);
1487+expect(plan.commands).toContainEqual({
1488+name: "appcast owner tests",
1489+args: ["test:serial", "test/appcast.test.ts", "test/scripts/make-appcast.test.ts"],
14641490});
1465-expect(plan.commands.map((command) => command.args[0])).not.toContain("lint:apps");
1466-expect(plan.commands).toContainEqual(
1467-expect.objectContaining({
1468-name: "lint apps (swiftlint unavailable on this host)",
1469-bin: "node",
1470-}),
1471-);
1491+expect(plan.commands.map((command) => command.name)).not.toContain("macOS app CI tests");
14721492});
1473149314741494it("runs app lint when SwiftLint is available in Testbox", () => {
@@ -1482,6 +1502,24 @@ describe("scripts/changed-lanes", () => {
14821502});
1483150314841504expect(plan.commands.map((command) => command.args[0])).toContain("lint:apps");
1505+expect(plan.commands).toContainEqual({
1506+name: "macOS app CI tests",
1507+args: ["test:macos:ci"],
1508+});
1509+});
1510+1511+it("keeps macOS app CI tests out of Android-only app changes", () => {
1512+const result = detectChangedLanes(["apps/android/app/src/main/AndroidManifest.xml"]);
1513+const plan = createChangedCheckPlan(result, {
1514+env: { CI: "1", PATH: "/usr/bin" },
1515+platform: "linux",
1516+swiftlintAvailable: true,
1517+});
1518+1519+expectLanes(result.lanes, {
1520+apps: true,
1521+});
1522+expect(plan.commands.map((command) => command.name)).not.toContain("macOS app CI tests");
14851523});
1486152414871525it("routes legacy root asset deletions as tooling during root cleanup", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。