From 05961c3eb14b4f1f1b85acd0cf64bf5e3209a45f Mon Sep 17 00:00:00 2001 From: Anton Afanasyeu Date: Tue, 23 Jun 2026 12:29:34 +0200 Subject: [PATCH] initial --- README.md | 5 +++++ ota/mqtt-topics.md | 20 +++++++++++++++++++ .../00.01.00/android_cast_00.01.00.00.otapkg | 2 ++ .../android_cast_00.01.00.00_manifest.json | 15 ++++++++++++++ .../android_cast_00.01.00.00_sign.json | 4 ++++ .../00.01.01/android_cast_00.01.01.01.otapkg | 2 ++ .../android_cast_00.01.01.01_manifest.json | 15 ++++++++++++++ .../android_cast_00.01.01.01_sign.json | 4 ++++ ota/v0/ota/channel/current.json | 4 ++++ ota/v0/ota/channel/next.json | 4 ++++ ota/v0/ota/channel/stable.json | 4 ++++ ota/v0/ota/channel/staging.json | 4 ++++ 12 files changed, 83 insertions(+) create mode 100644 README.md create mode 100644 ota/mqtt-topics.md create mode 100644 ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00.otapkg create mode 100644 ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_manifest.json create mode 100644 ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_sign.json create mode 100644 ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01.otapkg create mode 100644 ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_manifest.json create mode 100644 ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_sign.json create mode 100644 ota/v0/ota/channel/current.json create mode 100644 ota/v0/ota/channel/next.json create mode 100644 ota/v0/ota/channel/stable.json create mode 100644 ota/v0/ota/channel/staging.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..3d32823 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# ac-ms-ota + +OTA channels and manifests. + +Remote: `git://f0xx.org/ac/ac-ms-ota` diff --git a/ota/mqtt-topics.md b/ota/mqtt-topics.md new file mode 100644 index 0000000..dd719c7 --- /dev/null +++ b/ota/mqtt-topics.md @@ -0,0 +1,20 @@ +# MQTT OTA topics (retained payloads) + +Publish retained payloads for these topics: + +- `v0/ota/channel/stable.json` -> content of `examples/ota/v0/ota/channel/stable.json` +- `v0/ota/channel/current.json` -> content of `examples/ota/v0/ota/channel/current.json` +- `v0/ota/channel/next.json` -> content of `examples/ota/v0/ota/channel/next.json` +- `v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_manifest.json` +- `v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_sign.json` +- `v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00.otapkg` +- `v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_manifest.json` +- `v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_sign.json` +- `v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01.otapkg` + +HTTP mirrors may also host `*.otabundle.zip` (manifest + sign + `package.apk` in one STORED zip). +The app uses **per-artifact MQTT topics only** — it does not download bundles over MQTT. + +Example source URL in app settings: + +- `mqtt://foxx.org:1883/v0/ota/channel/stable.json` diff --git a/ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00.otapkg b/ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00.otapkg new file mode 100644 index 0000000..e52c4a8 --- /dev/null +++ b/ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00.otapkg @@ -0,0 +1,2 @@ +PLACEHOLDER PACKAGE +Replace this with the real release artifact bytes. diff --git a/ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_manifest.json b/ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_manifest.json new file mode 100644 index 0000000..b8ceb65 --- /dev/null +++ b/ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_manifest.json @@ -0,0 +1,15 @@ +{ + "schema": "v0", + "major": 0, + "minor": 1, + "build": 0, + "versionName": "0.1.0", + "apkUrl": "https://foxx.org/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00.otapkg", + "signUrl": "https://foxx.org/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_sign.json", + "sizeBytes": 10485760, + "bundleUrl": "https://foxx.org/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00.otabundle.zip", + "bundleSha256": "0000000000000000000000000000000000000000000000000000000000000000", + "bundleSizeBytes": 10500000, + "mandatory": false, + "releaseNotes": "Current production baseline." +} diff --git a/ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_sign.json b/ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_sign.json new file mode 100644 index 0000000..c05575a --- /dev/null +++ b/ota/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_sign.json @@ -0,0 +1,4 @@ +{ + "schema": "v0", + "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +} diff --git a/ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01.otapkg b/ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01.otapkg new file mode 100644 index 0000000..5600987 --- /dev/null +++ b/ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01.otapkg @@ -0,0 +1,2 @@ +PLACEHOLDER PACKAGE +Replace this with the next OTA candidate artifact bytes. diff --git a/ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_manifest.json b/ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_manifest.json new file mode 100644 index 0000000..5413f3d --- /dev/null +++ b/ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_manifest.json @@ -0,0 +1,15 @@ +{ + "schema": "v0", + "major": 0, + "minor": 1, + "build": 1, + "versionName": "0.1.1", + "apkUrl": "https://foxx.org/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01.otapkg", + "signUrl": "https://foxx.org/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_sign.json", + "sizeBytes": 11534336, + "bundleUrl": "https://foxx.org/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01.otabundle.zip", + "bundleSha256": "0000000000000000000000000000000000000000000000000000000000000000", + "bundleSizeBytes": 11600000, + "mandatory": false, + "releaseNotes": "Next OTA candidate with service-based updater." +} diff --git a/ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_sign.json b/ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_sign.json new file mode 100644 index 0000000..295b24d --- /dev/null +++ b/ota/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_sign.json @@ -0,0 +1,4 @@ +{ + "schema": "v0", + "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" +} diff --git a/ota/v0/ota/channel/current.json b/ota/v0/ota/channel/current.json new file mode 100644 index 0000000..12eae24 --- /dev/null +++ b/ota/v0/ota/channel/current.json @@ -0,0 +1,4 @@ +{ + "schema": "v0", + "manifestUrl": "https://foxx.org/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_manifest.json" +} diff --git a/ota/v0/ota/channel/next.json b/ota/v0/ota/channel/next.json new file mode 100644 index 0000000..f64b204 --- /dev/null +++ b/ota/v0/ota/channel/next.json @@ -0,0 +1,4 @@ +{ + "schema": "v0", + "manifestUrl": "https://foxx.org/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_manifest.json" +} diff --git a/ota/v0/ota/channel/stable.json b/ota/v0/ota/channel/stable.json new file mode 100644 index 0000000..f64b204 --- /dev/null +++ b/ota/v0/ota/channel/stable.json @@ -0,0 +1,4 @@ +{ + "schema": "v0", + "manifestUrl": "https://foxx.org/v0/ota/00/00.01/00.01.01/android_cast_00.01.01.01_manifest.json" +} diff --git a/ota/v0/ota/channel/staging.json b/ota/v0/ota/channel/staging.json new file mode 100644 index 0000000..5361adc --- /dev/null +++ b/ota/v0/ota/channel/staging.json @@ -0,0 +1,4 @@ +{ + "schema": "v0", + "manifestUrl": "https://apps.f0xx.org/v0/ota/00/00.01/00.01.00/android_cast_00.01.00.00_manifest.json" +}