mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-06 05:51:15 +08:00
fix(ci): use reliable Azure Crabbox capacity
This commit is contained in:
@@ -4,11 +4,11 @@ profile: openclaw-check
|
|||||||
provider: azure
|
provider: azure
|
||||||
class: standard
|
class: standard
|
||||||
capacity:
|
capacity:
|
||||||
market: spot
|
market: on-demand
|
||||||
strategy: most-available
|
strategy: most-available
|
||||||
# Fail closed instead of silently falling back to on-demand while the
|
# The Azure-backed billing account carries the OpenClaw runner credits; use
|
||||||
# Azure-backed billing account is the default runner path.
|
# explicit on-demand capacity instead of low-priority spot, whose regional
|
||||||
fallback: spot-only
|
# quota is too small for broad maintainer proof or parallel Crabbox lanes.
|
||||||
hints: true
|
hints: true
|
||||||
actions:
|
actions:
|
||||||
workflow: .github/workflows/crabbox-hydrate.yml
|
workflow: .github/workflows/crabbox-hydrate.yml
|
||||||
@@ -49,8 +49,8 @@ aws:
|
|||||||
region: eu-west-1
|
region: eu-west-1
|
||||||
rootGB: 400
|
rootGB: 400
|
||||||
azure:
|
azure:
|
||||||
# The OpenClaw Azure subscription has reliable D2 spot capacity in eastus2;
|
# The OpenClaw Azure subscription is reliable in eastus2; eastus rejects the
|
||||||
# eastus rejects the same SKUs and can stall provisioning.
|
# same SKUs and can stall provisioning.
|
||||||
location: eastus2
|
location: eastus2
|
||||||
sync:
|
sync:
|
||||||
delete: true
|
delete: true
|
||||||
@@ -71,14 +71,16 @@ env:
|
|||||||
- OPENCLAW_*
|
- OPENCLAW_*
|
||||||
ssh:
|
ssh:
|
||||||
user: crabbox
|
user: crabbox
|
||||||
port: "2222"
|
# Azure coordinator leases expose SSH on 22. The run wrapper can fall back
|
||||||
|
# from 2222, but `crabbox job run` hydrates via the configured port directly.
|
||||||
|
port: "22"
|
||||||
jobs:
|
jobs:
|
||||||
prewarm:
|
prewarm:
|
||||||
provider: azure
|
provider: azure
|
||||||
target: linux
|
target: linux
|
||||||
class: standard
|
class: standard
|
||||||
type: Standard_D2ads_v6
|
type: Standard_D4ads_v6
|
||||||
market: spot
|
market: on-demand
|
||||||
idleTimeout: 90m
|
idleTimeout: 90m
|
||||||
hydrate:
|
hydrate:
|
||||||
actions: true
|
actions: true
|
||||||
@@ -95,8 +97,8 @@ jobs:
|
|||||||
provider: azure
|
provider: azure
|
||||||
target: linux
|
target: linux
|
||||||
class: standard
|
class: standard
|
||||||
type: Standard_D2ads_v6
|
type: Standard_D4ads_v6
|
||||||
market: spot
|
market: on-demand
|
||||||
idleTimeout: 90m
|
idleTimeout: 90m
|
||||||
hydrate:
|
hydrate:
|
||||||
actions: true
|
actions: true
|
||||||
@@ -105,7 +107,18 @@ jobs:
|
|||||||
workflow: .github/workflows/crabbox-hydrate.yml
|
workflow: .github/workflows/crabbox-hydrate.yml
|
||||||
job: hydrate
|
job: hydrate
|
||||||
ref: main
|
ref: main
|
||||||
command: env OPENCLAW_CHECK_CHANGED_REMOTE_CHILD=1 OPENCLAW_CHANGED_LANES_RAW_SYNC=1 CI=1 corepack pnpm check:changed
|
shell: true
|
||||||
|
command: |
|
||||||
|
set -euo pipefail
|
||||||
|
if ! git status --short >/dev/null 2>&1; then
|
||||||
|
rm -rf .git
|
||||||
|
git init -q
|
||||||
|
git add -A
|
||||||
|
if ! git diff --cached --quiet; then
|
||||||
|
git -c user.name=OpenClaw -c user.email=ci@openclaw.local commit -q --no-gpg-sign -m remote-check-tree
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
env CI=1 corepack pnpm check --timed
|
||||||
stop: always
|
stop: always
|
||||||
testbox-changed:
|
testbox-changed:
|
||||||
provider: blacksmith-testbox
|
provider: blacksmith-testbox
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ Docs: https://docs.openclaw.ai
|
|||||||
- Docs/CI: run Mintlify anchor checks through the repo pnpm runner so docs link validation works when pnpm is only available through the hydrated package-manager shim.
|
- Docs/CI: run Mintlify anchor checks through the repo pnpm runner so docs link validation works when pnpm is only available through the hydrated package-manager shim.
|
||||||
- Agents: keep configured fallback model metadata typed so provider params, context-token caps, and media input limits do not break changed-gate typechecks.
|
- Agents: keep configured fallback model metadata typed so provider params, context-token caps, and media input limits do not break changed-gate typechecks.
|
||||||
- Agents: accept hidden `sessions_send` body aliases before validation while keeping the model-facing `message` schema canonical. (#88229) Thanks @zhangguiping-xydt.
|
- Agents: accept hidden `sessions_send` body aliases before validation while keeping the model-facing `message` schema canonical. (#88229) Thanks @zhangguiping-xydt.
|
||||||
- CI/Crabbox: keep default runner capacity spot-only and provider-neutral so OpenClaw remote validation does not silently fall back to on-demand leases or stale AWS region hints.
|
- CI/Crabbox: keep default runner capacity on the Azure credit-backed on-demand D4 lane with the Azure SSH port and a Git-independent full check job, so broad validation avoids low-priority spot quota stalls, hydrate port mismatches, non-Git hydrated workspaces, and stale AWS region hints.
|
||||||
- CI/Crabbox: route Crabbox wrapper and Testbox workflow edits to their regression tests so changed-test gates do not silently run zero specs.
|
- CI/Crabbox: route Crabbox wrapper and Testbox workflow edits to their regression tests so changed-test gates do not silently run zero specs.
|
||||||
- CI/workflows: route workflow sanity helper edits to their guard tests and cover composite-action input interpolation checks.
|
- CI/workflows: route workflow sanity helper edits to their guard tests and cover composite-action input interpolation checks.
|
||||||
- CI/tooling: route CI scope, dependency, changelog, and docs helper edits to their owner tests instead of silently skipping changed-test coverage.
|
- CI/tooling: route CI scope, dependency, changelog, and docs helper edits to their owner tests instead of silently skipping changed-test coverage.
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ describe("package acceptance workflow", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("keeps default Crabbox capacity fail-closed and provider-neutral", () => {
|
it("keeps default Crabbox capacity on the Azure credit-backed lane", () => {
|
||||||
const crabboxConfig = parse(readFileSync(CRABBOX_CONFIG, "utf8")) as {
|
const crabboxConfig = parse(readFileSync(CRABBOX_CONFIG, "utf8")) as {
|
||||||
aws?: { region?: string };
|
aws?: { region?: string };
|
||||||
capacity?: {
|
capacity?: {
|
||||||
@@ -231,15 +231,35 @@ describe("package acceptance workflow", () => {
|
|||||||
market?: string;
|
market?: string;
|
||||||
regions?: string[];
|
regions?: string[];
|
||||||
};
|
};
|
||||||
|
jobs?: {
|
||||||
|
changed?: { command?: string; market?: string; shell?: boolean; type?: string };
|
||||||
|
prewarm?: { market?: string; type?: string };
|
||||||
|
};
|
||||||
provider?: string;
|
provider?: string;
|
||||||
|
ssh?: { port?: string; user?: string };
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(crabboxConfig.provider).toBe("azure");
|
expect(crabboxConfig.provider).toBe("azure");
|
||||||
expect(crabboxConfig.capacity?.market).toBe("spot");
|
expect(crabboxConfig.capacity?.market).toBe("on-demand");
|
||||||
expect(crabboxConfig.capacity?.fallback).toBe("spot-only");
|
expect(crabboxConfig.capacity?.fallback).toBeUndefined();
|
||||||
expect(crabboxConfig.capacity?.regions).toBeUndefined();
|
expect(crabboxConfig.capacity?.regions).toBeUndefined();
|
||||||
expect(crabboxConfig.capacity?.availabilityZones).toBeUndefined();
|
expect(crabboxConfig.capacity?.availabilityZones).toBeUndefined();
|
||||||
expect(crabboxConfig.aws?.region).toBe("eu-west-1");
|
expect(crabboxConfig.aws?.region).toBe("eu-west-1");
|
||||||
|
expect(crabboxConfig.jobs?.prewarm?.market).toBe("on-demand");
|
||||||
|
expect(crabboxConfig.jobs?.prewarm?.type).toBe("Standard_D4ads_v6");
|
||||||
|
expect(crabboxConfig.jobs?.changed?.market).toBe("on-demand");
|
||||||
|
expect(crabboxConfig.jobs?.changed?.type).toBe("Standard_D4ads_v6");
|
||||||
|
expect(crabboxConfig.jobs?.changed?.shell).toBe(true);
|
||||||
|
expect(crabboxConfig.jobs?.changed?.command).toContain("set -euo pipefail");
|
||||||
|
expect(crabboxConfig.jobs?.changed?.command).toContain("git init -q");
|
||||||
|
expect(crabboxConfig.jobs?.changed?.command).toContain(
|
||||||
|
"commit -q --no-gpg-sign -m remote-check-tree",
|
||||||
|
);
|
||||||
|
expect(crabboxConfig.jobs?.changed?.command).toContain(
|
||||||
|
"env CI=1 corepack pnpm check --timed",
|
||||||
|
);
|
||||||
|
expect(crabboxConfig.ssh?.user).toBe("crabbox");
|
||||||
|
expect(crabboxConfig.ssh?.port).toBe("22");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("resolves candidate package sources before reusing Docker E2E lanes", () => {
|
it("resolves candidate package sources before reusing Docker E2E lanes", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user