From 82ade5788b45bb8b3917352da1a5e14619c880d7 Mon Sep 17 00:00:00 2001 From: Feodor Fitsner Date: Thu, 18 Jun 2026 08:24:23 -0700 Subject: [PATCH] Manifest drives Android ABI list (per-minor android_abis) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each `pythons.` entry in manifest.json now carries an `android_abis` array (64-bit first, `armeabi-v7a` trailing on 3.12 only — PEP 738 dropped 32-bit Android from 3.13). The Android build step in build-python-version.yml reads it via `jq` and loops `package-for-dart.sh` once per ABI, replacing the hardcoded `if version_int < 313 then armeabi-v7a` shell check. Adding or bumping a Python minor's ABI set is now a one-line manifest edit; the workflow + downstream consumers (serious_python's gen_version_tables, flet's manifest-driven registry) flow it through automatically. README schema note + the `android_abis` line added to the example. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/build-python-version.yml | 17 +++++++++++------ README.md | 8 ++++++-- manifest.json | 3 +++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-python-version.yml b/.github/workflows/build-python-version.yml index 7bf4568..0b30b43 100644 --- a/.github/workflows/build-python-version.yml +++ b/.github/workflows/build-python-version.yml @@ -108,13 +108,18 @@ jobs: bash ./build-all.sh "$PYTHON_VERSION" mkdir -p dist tar -czf dist/python-android-mobile-forge-$PYTHON_VERSION.tar.gz install support - bash ./package-for-dart.sh install "$PYTHON_VERSION" arm64-v8a - bash ./package-for-dart.sh install "$PYTHON_VERSION" x86_64 - read version_major version_minor < <(echo "$PYTHON_VERSION" | sed -E 's/^([0-9]+)\.([0-9]+).*/\1 \2/') - version_int=$((version_major * 100 + version_minor)) - if [ $version_int -lt 313 ]; then - bash ./package-for-dart.sh install "$PYTHON_VERSION" armeabi-v7a + # ABIs come from the manifest (`pythons..android_abis`) so a + # future minor only needs a one-line edit there — not a workflow + # bump. 3.12 ships armeabi-v7a; 3.13+ are 64-bit only (PEP 738). + short="$PYTHON_VERSION_SHORT" + abis=$(jq -r --arg s "$short" '.pythons[$s].android_abis[]' "$GITHUB_WORKSPACE/manifest.json") + if [ -z "$abis" ]; then + echo "::error::manifest.json has no .pythons[\"$short\"].android_abis" + exit 1 fi + while IFS= read -r abi; do + bash ./package-for-dart.sh install "$PYTHON_VERSION" "$abi" + done <<< "$abis" - name: Run post-build tests shell: bash diff --git a/README.md b/README.md index a2193fc..914eb29 100644 --- a/README.md +++ b/README.md @@ -28,19 +28,23 @@ Schema: "standalone_release_date": "20260610", "pyodide_version": "314.0.0", "pyodide_platform_tag": "pyemscripten-2026.0-wasm32", + "android_abis": ["arm64-v8a", "x86_64"], "prerelease": false } } } ``` +`android_abis` lists the ABIs `package-for-dart.sh` builds for this minor — +64-bit first, then `armeabi-v7a` if the minor still supports 32-bit Android. +3.12 carries all three; 3.13+ are 64-bit-only ([PEP 738](https://peps.python.org/pep-0738/)). + The committed file omits `release`; the publish step injects it. ### Adding or bumping a Python / Pyodide / dart_bridge version Edit [`manifest.json`](manifest.json) and open a PR. The CI matrix updates -automatically from it; per-version build specifics (ABIs, the 3.12 vs 3.13+ build -method) live in the platform build scripts. +automatically from it. ## Releases diff --git a/manifest.json b/manifest.json index 2a60630..a63873b 100644 --- a/manifest.json +++ b/manifest.json @@ -7,6 +7,7 @@ "standalone_release_date": "20260610", "pyodide_version": "0.27.7", "pyodide_platform_tag": "pyodide-2024.0-wasm32", + "android_abis": ["arm64-v8a", "x86_64", "armeabi-v7a"], "prerelease": false }, "3.13": { @@ -14,6 +15,7 @@ "standalone_release_date": "20260610", "pyodide_version": "0.29.4", "pyodide_platform_tag": "pyemscripten-2025.0-wasm32", + "android_abis": ["arm64-v8a", "x86_64"], "prerelease": false }, "3.14": { @@ -21,6 +23,7 @@ "standalone_release_date": "20260610", "pyodide_version": "314.0.0", "pyodide_platform_tag": "pyemscripten-2026.0-wasm32", + "android_abis": ["arm64-v8a", "x86_64"], "prerelease": false } }