From dc3d0c50e20fdbebd620d0fede002bf86ec9739f Mon Sep 17 00:00:00 2001 From: DIYgod Date: Fri, 10 Apr 2026 18:37:03 +0800 Subject: [PATCH] fix(ota): tighten scaffold schema and dev config --- apps/ota/src/__tests__/schema.test.ts | 1 + apps/ota/src/lib/schema.ts | 13 +++++++++++-- apps/ota/wrangler.jsonc | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/apps/ota/src/__tests__/schema.test.ts b/apps/ota/src/__tests__/schema.test.ts index 7a8fb4204..6e1e86c94 100644 --- a/apps/ota/src/__tests__/schema.test.ts +++ b/apps/ota/src/__tests__/schema.test.ts @@ -35,5 +35,6 @@ describe("otaReleaseSchema", () => { expect(parsed.releaseVersion).toBe("0.4.2") expect(parsed.runtimeVersion).toBe("0.4.1") + expect(Object.keys(parsed.platforms)).toEqual(["ios"]) }) }) diff --git a/apps/ota/src/lib/schema.ts b/apps/ota/src/lib/schema.ts index bf17e4dcc..a64bea07d 100644 --- a/apps/ota/src/lib/schema.ts +++ b/apps/ota/src/lib/schema.ts @@ -2,7 +2,6 @@ import { z } from "zod" const semver = z.string().regex(/^\d+\.\d+\.\d+$/) const sha256 = z.string().regex(/^[a-f0-9]{64}$/) -const otaPlatformSchema = z.enum(["ios", "android", "macos", "windows", "linux"]) const assetSchema = z.object({ path: z.string().min(1), @@ -15,6 +14,16 @@ const platformSchema = z.object({ assets: z.array(assetSchema), }) +const platformsSchema = z + .object({ + ios: platformSchema.optional(), + android: platformSchema.optional(), + macos: platformSchema.optional(), + windows: platformSchema.optional(), + linux: platformSchema.optional(), + }) + .strict() + export const otaReleaseSchema = z.object({ schemaVersion: z.literal(1), product: z.enum(["mobile", "desktop"]), @@ -32,5 +41,5 @@ export const otaReleaseSchema = z.object({ minSupportedBinaryVersion: semver, message: z.string().nullable(), }), - platforms: z.record(otaPlatformSchema, platformSchema.optional()), + platforms: platformsSchema, }) diff --git a/apps/ota/wrangler.jsonc b/apps/ota/wrangler.jsonc index 1fb2067c1..32335afe2 100644 --- a/apps/ota/wrangler.jsonc +++ b/apps/ota/wrangler.jsonc @@ -37,6 +37,24 @@ "dev": { "name": "folo-ota-dev", "workers_dev": true, + "kv_namespaces": [ + { + "binding": "OTA_KV", + "id": "REPLACE_WITH_DEV_KV_ID", + "preview_id": "REPLACE_WITH_DEV_PREVIEW_KV_ID", + }, + ], + "r2_buckets": [ + { + "binding": "OTA_BUCKET", + "bucket_name": "REPLACE_WITH_DEV_BUCKET_NAME", + }, + ], + "vars": { + "GITHUB_OWNER": "RSSNext", + "GITHUB_REPO": "Folo", + "OTA_SYNC_TOKEN_HEADER": "x-ota-sync-token", + }, "routes": [ { "pattern": "ota.dev.folo.is/*",