You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: packages/os/RELEASE.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@ Short, mechanical steps for cutting a new OS release. Anything not on this list
9
9
-`scripts/update-release-manifest.mjs` — sets `sha256`, `sizeBytes`, `downloadUrl`, status on one artifact entry.
10
10
-`scripts/validate-release-manifest.mjs` — schema check; pass `--require-publishable-checksums` for strict mode.
11
11
-`scripts/generate-release-checksums.mjs` — fills the manifest by hashing local artifact files.
12
-
-`android/installer/scripts/validate-release-manifest.mjs` — separate validator for the Android per-partition manifest. Rejects all-zero placeholder hashes.
12
+
-`android/installer/scripts/validate-release-manifest.mjs` — separate validator for the Android per-partition manifest. Rejects all-zero placeholder hashes by default; use `--allow-placeholders` only for checked-in pre-release draft manifests.
expect(isObject(manifest),errors,'$','manifest must be an object');
63
69
if(!isObject(manifest))returnerrors;
@@ -107,9 +113,13 @@ function validateManifest(manifest) {
107
113
partitions.add(artifact.partition);
108
114
expect(typeofartifact.filename==='string'&&/^[^/\\]+\.img$/.test(artifact.filename),errors,`${path}.filename`,'must be a local .img filename');
109
115
expect(typeofartifact.sha256==='string'&&/^[a-fA-F0-9]{64}$/.test(artifact.sha256),errors,`${path}.sha256`,'must be 64 hex characters');
110
-
expect(typeofartifact.sha256!=='string'||artifact.sha256.toLowerCase()!=='0'.repeat(64),errors,`${path}.sha256`,'must not be the all-zero placeholder; populate with a real checksum before validating');
116
+
if(!allowPlaceholders){
117
+
expect(typeofartifact.sha256!=='string'||artifact.sha256.toLowerCase()!=='0'.repeat(64),errors,`${path}.sha256`,'must not be the all-zero placeholder; populate with a real checksum before validating');
118
+
}
111
119
expect(Number.isInteger(artifact.sizeBytes)&&artifact.sizeBytes>0,errors,`${path}.sizeBytes`,'must be a positive integer');
112
-
expect(!Number.isInteger(artifact.sizeBytes)||artifact.sizeBytes>1,errors,`${path}.sizeBytes`,'must not be the sentinel value 1; populate with the real artifact size');
120
+
if(!allowPlaceholders){
121
+
expect(!Number.isInteger(artifact.sizeBytes)||artifact.sizeBytes>1,errors,`${path}.sizeBytes`,'must not be the sentinel value 1; populate with the real artifact size');
122
+
}
113
123
expect(typeofartifact.required==='boolean',errors,`${path}.required`,'must be boolean');
114
124
expect(fastbootModes.has(artifact.fastbootMode),errors,`${path}.fastbootMode`,'must be bootloader or fastbootd');
115
125
});
@@ -156,9 +166,9 @@ function validateArtifacts(manifest, artifactDir) {
Copy file name to clipboardExpand all lines: packages/os/release/beta-2026-05-16/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@ All five artifacts in `manifest.json` are in `status: candidate` with `sha256: n
9
9
This is **not** a broken state. The pipeline gates publication on real values:
10
10
11
11
-`scripts/validate-release-manifest.mjs --require-publishable-checksums` fails on `null` AND on the all-zero placeholder. It is run by the `populate-and-validate-manifest` job in `.github/workflows/elizaos-os-full-release.yml` after artifacts are downloaded.
12
-
-`android/installer/scripts/validate-release-manifest.mjs` rejects the all-zero hash and the `sizeBytes: 1` sentinel — it cannot be tricked into passing the placeholder values that ship in this file.
12
+
-`android/installer/scripts/validate-release-manifest.mjs` rejects the all-zero hash and the `sizeBytes: 1` sentinel by default. The pull-request validation workflow uses `--allow-placeholders` for this checked-in draft manifest only, while the publish path must validate real Android artifacts without that flag.
13
13
-`release.status` is only promoted to `available` after the strict gate passes.
14
14
15
15
See `packages/os/RELEASE.md` for the full runbook.
0 commit comments