新增 OPFS session 独立 browser workflow gate

This commit is contained in:
2026-06-16 17:30:23 +08:00
parent 741afc5103
commit 35bc25714d
18 changed files with 478 additions and 51 deletions

View File

@@ -19,7 +19,7 @@ const manifest = createProjectReleaseGateManifest();
assert.equal(manifest.apiName, "project-release-gate-manifest");
assert.equal(manifest.manifestVersion, 1);
assert.equal(manifest.gateCount, 10);
assert.equal(manifest.gateCount, 11);
assert.deepEqual(manifest.gateIds, [
"diff-check",
"vendor-sync",
@@ -27,6 +27,7 @@ assert.deepEqual(manifest.gateIds, [
"interp-wasm",
"sim-config-inventory",
"ini-panel-browser",
"opfs-session-browser",
"release-artifact-url-browser",
"ui-node-smokes",
"host-smokes",
@@ -41,6 +42,7 @@ assert.deepEqual(
"interp_wasm_node_smoke=ok",
"sim_configs_wasm_node_inventory_unexpected_fail=0",
"browser_ini_shell_integration_workflow_smoke=ok",
"browser_opfs_session_workflow_smoke=ok",
"browser_release_artifact_url_workflow_smoke=ok",
"ui_node_smokes=ok",
"host_wasm_opfs_browser_smokes=ok",
@@ -51,6 +53,10 @@ assert.equal(
manifest.gates.find(({ id }) => id === "release-artifact-url-browser")?.command,
"SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh",
);
assert.equal(
manifest.gates.find(({ id }) => id === "opfs-session-browser")?.command,
"SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_opfs_session_workflow_browser.sh",
);
const partialMatrix = createProjectReleaseGateResultMatrix({
gateResults: {
@@ -65,14 +71,15 @@ assert.equal(partialMatrix.apiName, "project-release-gate-result-matrix");
assert.equal(partialMatrix.matrixVersion, 1);
assert.equal(partialMatrix.phase, "waiting");
assert.equal(partialMatrix.ready, false);
assert.equal(partialMatrix.gateCount, 10);
assert.equal(partialMatrix.gateCount, 11);
assert.equal(partialMatrix.passedCount, 3);
assert.equal(partialMatrix.unknownCount, 7);
assert.equal(partialMatrix.unknownCount, 8);
assert.deepEqual(partialMatrix.missingGateIds, [
"standalone-cnc-semantics",
"interp-wasm",
"sim-config-inventory",
"ini-panel-browser",
"opfs-session-browser",
"ui-node-smokes",
"host-smokes",
"project-release-gate",
@@ -99,9 +106,9 @@ assert.equal(partialExecutionManifest.apiName, "project-release-gate-execution-m
assert.equal(partialExecutionManifest.manifestVersion, 1);
assert.equal(partialExecutionManifest.phase, "waiting");
assert.equal(partialExecutionManifest.ready, false);
assert.equal(partialExecutionManifest.gateCount, 10);
assert.equal(partialExecutionManifest.gateCount, 11);
assert.equal(partialExecutionManifest.passedCount, 3);
assert.equal(partialExecutionManifest.unknownCount, 7);
assert.equal(partialExecutionManifest.unknownCount, 8);
assert.deepEqual(partialExecutionManifest.missingGateIds, partialMatrix.missingGateIds);
assert.deepEqual(
partialExecutionManifest.rows.filter(({ passed }) => passed).map(({ id, evidence }) => [id, evidence]),
@@ -125,9 +132,9 @@ assert.equal(partialActionPlan.apiName, "project-release-gate-action-plan");
assert.equal(partialActionPlan.planVersion, 1);
assert.equal(partialActionPlan.phase, "waiting");
assert.equal(partialActionPlan.ready, false);
assert.equal(partialActionPlan.gateCount, 10);
assert.equal(partialActionPlan.gateCount, 11);
assert.equal(partialActionPlan.completedCount, 3);
assert.equal(partialActionPlan.pendingCount, 7);
assert.equal(partialActionPlan.pendingCount, 8);
assert.deepEqual(partialActionPlan.completedGateIds, [
"diff-check",
"vendor-sync",
@@ -138,13 +145,14 @@ assert.deepEqual(partialActionPlan.pendingGateIds, [
"interp-wasm",
"sim-config-inventory",
"ini-panel-browser",
"opfs-session-browser",
"ui-node-smokes",
"host-smokes",
"project-release-gate",
]);
assert.equal(partialActionPlan.nextGateId, "standalone-cnc-semantics");
assert.equal(partialActionPlan.nextCommand, "wasm-port/tools/verify_no_standalone_cnc_semantics.sh");
assert.equal(partialActionPlan.commands.length, 7);
assert.equal(partialActionPlan.commands.length, 8);
assert.equal(partialActionPlan.commands[0].step, 1);
assert.equal(partialActionPlan.commands[0].gateId, "standalone-cnc-semantics");
assert.equal(partialActionPlan.rows[0].id, "standalone-cnc-semantics");
@@ -179,7 +187,7 @@ assert.deepEqual(createProjectReleaseReadinessSummaryViewModel(report), {
{
id: "gate-results",
label: "Release gates",
value: "10/10 passed",
value: "11/11 passed",
},
{
id: "unknown-gates",
@@ -245,7 +253,7 @@ assert.deepEqual(
artifactValidationSummary.rows.map(({ id, value }) => [id, value]),
[
["artifact", "project-release-readiness-report"],
["gate-count", "10/10"],
["gate-count", "11/11"],
["gate-manifest", "ready"],
["gate-execution-manifest", "ready"],
["gate-result-matrix", "ready"],

View File

@@ -250,7 +250,7 @@ assert.deepEqual(releaseReadinessWaiting.missing, ["project-release-gate"]);
assert.equal(releaseReadinessWaiting.simConfigInventory.unexpectedFail, 0);
assert.deepEqual(releaseReadinessWaiting.promotedBlockedFamilies, []);
assert.equal(releaseReadinessWaiting.gateActionPlan.apiName, "project-release-gate-action-plan");
assert.equal(releaseReadinessWaiting.gateActionPlan.pendingCount, 10);
assert.equal(releaseReadinessWaiting.gateActionPlan.pendingCount, createProjectReleaseGateManifest().gateCount);
assert.equal(releaseReadinessWaiting.gateActionPlan.nextGateId, "diff-check");
assert.equal(
releaseReadinessWaiting.rows.find(({ id }) => id === "blocked-runtime-families")?.value,
@@ -262,7 +262,7 @@ const releaseReadinessReady = createProjectReleaseReadinessReport({
assert.equal(releaseReadinessReady.ready, true);
assert.equal(releaseReadinessReady.releaseGate.passed, true);
assert.deepEqual(releaseReadinessReady.gateManifest, createProjectReleaseGateManifest());
assert.equal(releaseReadinessReady.gateResultMatrix.rows.length, 10);
assert.equal(releaseReadinessReady.gateResultMatrix.rows.length, createProjectReleaseGateManifest().gateCount);
assert.equal(createProjectReleaseGateActionPlan({
gateResultMatrix: releaseReadinessReady.gateResultMatrix,
}).ready, false);
@@ -277,18 +277,7 @@ assert.equal(
true,
);
const releaseReadinessArtifact = parseProjectReleaseReadinessArtifactJson(JSON.stringify(createProjectReleaseReadinessReport({
gateResults: {
"diff-check": true,
"vendor-sync": true,
"standalone-cnc-semantics": true,
"interp-wasm": true,
"sim-config-inventory": true,
"ini-panel-browser": true,
"release-artifact-url-browser": true,
"ui-node-smokes": true,
"host-smokes": true,
"project-release-gate": true,
},
gateResults: Object.fromEntries(createProjectReleaseGateManifest().gateIds.map((id) => [id, true])),
})));
assert.equal(releaseReadinessArtifact.apiName, "project-release-readiness-report");
const releaseReadinessArtifactValidation = createProjectReleaseReadinessArtifactValidation(releaseReadinessArtifact);
@@ -300,8 +289,8 @@ assert.deepEqual(releaseReadinessArtifactValidation, {
missing: [],
artifactApiName: "project-release-readiness-report",
artifactVersion: 1,
gateCount: 10,
expectedGateCount: 10,
gateCount: createProjectReleaseGateManifest().gateCount,
expectedGateCount: createProjectReleaseGateManifest().gateCount,
expectedGateIds: createProjectReleaseGateManifest().gateIds,
gateManifestReady: true,
gateExecutionManifestReady: true,