From da819cc6d4143ac1938b73ac7e37291ec21541a7 Mon Sep 17 00:00:00 2001 From: Sid Date: Tue, 23 Dec 2025 14:47:53 +0530 Subject: [PATCH 1/3] Add support for pyodide wheels (#308) This commit adds automatic support for Pyodide/WebAssembly wheels to the OpenAstronomy publish workflow. Changes: - Added 'pyodide' to MACHINE_TYPE dictionary (runs on ubuntu-latest) - Added get_cibw_platform() function to detect pyodide targets and set CIBW_PLATFORM environment variable - Modified get_os() to detect pyodide targets before other platforms - Updated get_matrix_item() to include CIBW_PLATFORM when needed - Added CIBW_PLATFORM to the cibuildwheel step in publish.yml With this change, users can now simply specify: targets: | - cp*-pyodide_wasm32 And the workflow will automatically set CIBW_PLATFORM=pyodide without requiring manual env configuration. Fixes #308 --- .github/workflows/publish.yml | 3 ++- tools/load_build_targets.py | 26 +++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a9b23ea..b67b3d4 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -127,7 +127,7 @@ jobs: python-version: '3.12' - run: echo $LOAD_BUILD_TARGETS_SCRIPT | base64 --decode > load_build_targets.py env: - LOAD_BUILD_TARGETS_SCRIPT: 77u/IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiwgPDMuMTMiCiMgZGVwZW5kZW5jaWVzID0gWwojICAgICAiY2xpY2s9PTguMi4xIiwKIyAgICAgInB5eWFtbD09Ni4wLjIiLAojIF0KIyAvLy8KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCByZQoKaW1wb3J0IGNsaWNrCmltcG9ydCB5YW1sCgpNQUNISU5FX1RZUEUgPSB7CiAgICAibGludXgiOiAidWJ1bnR1LWxhdGVzdCIsCiAgICAibWFjb3MiOiAibWFjb3MtbGF0ZXN0IiwKICAgICJ3aW5kb3dzIjogIndpbmRvd3MtbGF0ZXN0IiwKICAgICJ3aW5kb3dzLWFybSI6ICJ3aW5kb3dzLTExLWFybSIsCn0KCkNJQldfQlVJTEQgPSBvcy5lbnZpcm9uLmdldCgiQ0lCV19CVUlMRCIsICIqIikKQ0lCV19BUkNIUyA9IG9zLmVudmlyb24uZ2V0KCJDSUJXX0FSQ0hTIiwgImF1dG8iKQoKCkBjbGljay5jb21tYW5kKCkKQGNsaWNrLm9wdGlvbigiLS10YXJnZXRzIiwgZGVmYXVsdD0iIikKZGVmIGxvYWRfYnVpbGRfdGFyZ2V0cyh0YXJnZXRzKToKICAgICIiIlNjcmlwdCB0byBsb2FkIGNpYnVpbGR3aGVlbCB0YXJnZXRzIGZvciBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvdy4iIiIKICAgICMgTG9hZCBsaXN0IG9mIHRhcmdldHMKICAgIHRhcmdldHMgPSB5YW1sLmxvYWQodGFyZ2V0cywgTG9hZGVyPXlhbWwuQmFzZUxvYWRlcikKICAgIHByaW50KGpzb24uZHVtcHModGFyZ2V0cywgaW5kZW50PTIpKQoKICAgICMgQ3JlYXRlIG1hdHJpeAogICAgbWF0cml4ID0geyJpbmNsdWRlIjogW119CiAgICBmb3IgdGFyZ2V0IGluIHRhcmdldHM6CiAgICAgICAgbWF0cml4WyJpbmNsdWRlIl0uYXBwZW5kKGdldF9tYXRyaXhfaXRlbSh0YXJnZXQpKQoKICAgICMgT3V0cHV0IG1hdHJpeAogICAgcHJpbnQoanNvbi5kdW1wcyhtYXRyaXgsIGluZGVudD0yKSkKICAgIHdpdGggb3Blbihvcy5lbnZpcm9uWyJHSVRIVUJfT1VUUFVUIl0sICJhIikgYXMgZjoKICAgICAgICBmLndyaXRlKGYibWF0cml4PXtqc29uLmR1bXBzKG1hdHJpeCl9XG4iKQoKCmRlZiBnZXRfb3ModGFyZ2V0KToKICAgIGlmICJtYWNvcyIgaW4gdGFyZ2V0OgogICAgICAgIHJldHVybiBNQUNISU5FX1RZUEVbIm1hY29zIl0KICAgIGlmICJ3aW5fYXJtIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuIE1BQ0hJTkVfVFlQRVsid2luZG93cy1hcm0iXQogICAgaWYgIndpbiIgaW4gdGFyZ2V0OgogICAgICAgIHJldHVybiBNQUNISU5FX1RZUEVbIndpbmRvd3MiXQogICAgcmV0dXJuIE1BQ0hJTkVfVFlQRVsibGludXgiXQoKCmRlZiBnZXRfY2lid19idWlsZCh0YXJnZXQpOgogICAgaWYgdGFyZ2V0IGluIHsibGludXgiLCAibWFjb3MiLCAid2luZG93cyJ9OgogICAgICAgIHJldHVybiBDSUJXX0JVSUxECiAgICByZXR1cm4gdGFyZ2V0CgoKZGVmIGdldF9jaWJ3X2FyY2hzKHRhcmdldCk6CiAgICAiIiIKICAgIEhhbmRsZSBub24tbmF0aXZlIGFyY2hpdGVjdHVyZXMKCiAgICBjaWJ3IGFsbG93cyBydW5uaW5nIG5vbi1uYXRpdmUgYnVpbGRzIG9uIHZhcmlvdXMgcGxhdGZvcm1zOgogICAgaHR0cHM6Ly9jaWJ1aWxkd2hlZWwucHlwYS5pby9lbi9zdGFibGUvb3B0aW9ucy8jYXJjaHMKCiAgICBUaGlzIGxvZ2ljIG92ZXJyaWRlcyB0aGUgImF1dG8iIGZsYWcgYmFzZWQgb24gT1MgYW5kIGEgbGlzdCBvZiBzdXBwb3J0ZWQKICAgIG5vbi1uYXRpdmUgYXJjaCBpZiBhIG5vbi1uYXRpdmUgYXJjaCBpcyBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHBsYXRmb3JtIGluCiAgICB0YXJnZXRzLCByYXRoZXIgdGhhbiB0aGUgdXNlciBoYXZpbmcgdG8gZG8gdGhpcyBtYW51YWxseS4KICAgICIiIgogICAgcGxhdGZvcm1fYXJjaHMgPSB7CiAgICAgICAgIyBXZSBub3cgY3Jvc3MgY29tcGlsZSB4ODZfNjQgb24gYXJtNjQgYnkgZGVmYXVsdAogICAgICAgICJtYWNvcyI6IFsidW5pdmVyc2FsMiIsICJ4ODZfNjQiXSwKICAgICAgICAjIFRoaXMgaXMgYSBsaXN0IG9mIHN1cHBvcnRlZCBldW11bGF0ZWQgYXJjaGVzIG9uIGxpbnV4CiAgICAgICAgImxpbnV4IjogWyJhYXJjaDY0IiwgInBwYzY0bGUiLCAiczM5MHgiLCAiYXJtdjdsIl0sCiAgICB9CiAgICBmb3IgcGxhdGZvcm0sIGFyY2hzIGluIHBsYXRmb3JtX2FyY2hzLml0ZW1zKCk6CiAgICAgICAgaWYgcGxhdGZvcm0gaW4gdGFyZ2V0OgogICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoczoKICAgICAgICAgICAgICAgIGlmIHRhcmdldC5lbmRzd2l0aChhcmNoKToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJjaAoKICAgICMgSWYgbm8gZXhwbGljdCBhcmNoIGhhcyBiZWVuIHNwZWNpZmllZCBidWlsZCBib3RoIGFybTY0IGFuZCB4ODZfNjQgb24gbWFjb3MKICAgIGlmICJtYWNvcyIgaW4gdGFyZ2V0OgogICAgICAgIHJldHVybiBvcy5lbnZpcm9uLmdldCgiQ0lCV19BUkNIUyIsICJhcm02NCB4ODZfNjQiKQoKICAgIHJldHVybiBDSUJXX0FSQ0hTCgoKZGVmIGdldF9hcnRpZmFjdF9uYW1lKHRhcmdldCk6CiAgICBhcnRpZmFjdF9uYW1lID0gcmUuc3ViKHIiW1xcIC86PD58Kj9cIiddIiwgIi0iLCB0YXJnZXQpCiAgICBhcnRpZmFjdF9uYW1lID0gcmUuc3ViKHIiLSsiLCAiLSIsIGFydGlmYWN0X25hbWUpCiAgICByZXR1cm4gYXJ0aWZhY3RfbmFtZQoKCmRlZiBnZXRfbWF0cml4X2l0ZW0odGFyZ2V0KToKICAgIGV4dHJhX3RhcmdldF9hcmdzID0ge30KICAgIGlmIGlzaW5zdGFuY2UodGFyZ2V0LCBkaWN0KToKICAgICAgICBleHRyYV90YXJnZXRfYXJncyA9IHRhcmdldAogICAgICAgIHRhcmdldCA9IGV4dHJhX3RhcmdldF9hcmdzLnBvcCgidGFyZ2V0IikKICAgIHJldHVybiB7CiAgICAgICAgInRhcmdldCI6IHRhcmdldCwKICAgICAgICAicnVucy1vbiI6IGdldF9vcyh0YXJnZXQpLAogICAgICAgICJDSUJXX0JVSUxEIjogZ2V0X2NpYndfYnVpbGQodGFyZ2V0KSwKICAgICAgICAiQ0lCV19BUkNIUyI6IGdldF9jaWJ3X2FyY2hzKHRhcmdldCksCiAgICAgICAgImFydGlmYWN0LW5hbWUiOiBnZXRfYXJ0aWZhY3RfbmFtZSh0YXJnZXQpLAogICAgICAgICoqZXh0cmFfdGFyZ2V0X2FyZ3MsCiAgICB9CgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGxvYWRfYnVpbGRfdGFyZ2V0cygpCg== + LOAD_BUILD_TARGETS_SCRIPT: 77u/IyAvLy8gc2NyaXB0Cjw8PDw8PDwgSEVBRAojIHJlcXVpcmVzLXB5dGhvbiA9ICI+PTMuMTIsIDwzLjEzIgo9PT09PT09CiMgcmVxdWlyZXMtcHl0aG9uID0gIj09My4xMiIKPj4+Pj4+PiBiY2M2MjlkIChBZGQgc3VwcG9ydCBmb3IgcHlvZGlkZSB3aGVlbHMgKCMzMDgpKQojIGRlcGVuZGVuY2llcyA9IFsKIyAgICAgImNsaWNrPT04LjIuMSIsCiMgICAgICJweXlhbWw9PTYuMC4yIiwKIyBdCiMgLy8vCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgcmUKCmltcG9ydCBjbGljawppbXBvcnQgeWFtbAoKTUFDSElORV9UWVBFID0gewogICAgImxpbnV4IjogInVidW50dS1sYXRlc3QiLAogICAgIm1hY29zIjogIm1hY29zLWxhdGVzdCIsCiAgICAid2luZG93cyI6ICJ3aW5kb3dzLWxhdGVzdCIsCiAgICAid2luZG93cy1hcm0iOiAid2luZG93cy0xMS1hcm0iLAogICAgInB5b2RpZGUiOiAidWJ1bnR1LWxhdGVzdCIsICAjIFB5b2RpZGUgYnVpbGRzIHJ1biBvbiBMaW51eCBvciBtYWNPUwp9CgpDSUJXX0JVSUxEID0gb3MuZW52aXJvbi5nZXQoIkNJQldfQlVJTEQiLCAiKiIpCkNJQldfQVJDSFMgPSBvcy5lbnZpcm9uLmdldCgiQ0lCV19BUkNIUyIsICJhdXRvIikKCgpAY2xpY2suY29tbWFuZCgpCkBjbGljay5vcHRpb24oIi0tdGFyZ2V0cyIsIGRlZmF1bHQ9IiIpCmRlZiBsb2FkX2J1aWxkX3RhcmdldHModGFyZ2V0cyk6CiAgICAiIiJTY3JpcHQgdG8gbG9hZCBjaWJ1aWxkd2hlZWwgdGFyZ2V0cyBmb3IgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3cuIiIiCiAgICAjIExvYWQgbGlzdCBvZiB0YXJnZXRzCiAgICB0YXJnZXRzID0geWFtbC5sb2FkKHRhcmdldHMsIExvYWRlcj15YW1sLkJhc2VMb2FkZXIpCiAgICBwcmludChqc29uLmR1bXBzKHRhcmdldHMsIGluZGVudD0yKSkKCiAgICAjIENyZWF0ZSBtYXRyaXgKICAgIG1hdHJpeCA9IHsiaW5jbHVkZSI6IFtdfQogICAgZm9yIHRhcmdldCBpbiB0YXJnZXRzOgogICAgICAgIG1hdHJpeFsiaW5jbHVkZSJdLmFwcGVuZChnZXRfbWF0cml4X2l0ZW0odGFyZ2V0KSkKCiAgICAjIE91dHB1dCBtYXRyaXgKICAgIHByaW50KGpzb24uZHVtcHMobWF0cml4LCBpbmRlbnQ9MikpCiAgICB3aXRoIG9wZW4ob3MuZW52aXJvblsiR0lUSFVCX09VVFBVVCJdLCAiYSIpIGFzIGY6CiAgICAgICAgZi53cml0ZShmIm1hdHJpeD17anNvbi5kdW1wcyhtYXRyaXgpfVxuIikKCgpkZWYgZ2V0X29zKHRhcmdldCk6CiAgICBpZiAicHlvZGlkZSIgaW4gdGFyZ2V0OgogICAgICAgIHJldHVybiBNQUNISU5FX1RZUEVbInB5b2RpZGUiXQogICAgaWYgIm1hY29zIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuIE1BQ0hJTkVfVFlQRVsibWFjb3MiXQogICAgaWYgIndpbl9hcm0iIGluIHRhcmdldDoKICAgICAgICByZXR1cm4gTUFDSElORV9UWVBFWyJ3aW5kb3dzLWFybSJdCiAgICBpZiAid2luIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuIE1BQ0hJTkVfVFlQRVsid2luZG93cyJdCiAgICByZXR1cm4gTUFDSElORV9UWVBFWyJsaW51eCJdCgoKZGVmIGdldF9jaWJ3X3BsYXRmb3JtKHRhcmdldCk6CiAgICAiIiIKICAgIERldGVybWluZSBpZiBDSUJXX1BMQVRGT1JNIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgc2V0LgoKICAgIEZvciBtb3N0IHRhcmdldHMsIGNpYnVpbGR3aGVlbCBhdXRvLWRldGVjdHMgdGhlIHBsYXRmb3JtIGZyb20gdGhlIHJ1bm5lciBPUy4KICAgIEhvd2V2ZXIsIGZvciBweW9kaWRlIGJ1aWxkcywgd2UgbmVlZCB0byBleHBsaWNpdGx5IHNldCBDSUJXX1BMQVRGT1JNPXB5b2RpZGUKICAgIGJlY2F1c2UgcHlvZGlkZSBidWlsZHMgcnVuIG9uIExpbnV4L21hY09TIGJ1dCB0YXJnZXQgV2ViQXNzZW1ibHkuCiAgICAiIiIKICAgIGlmICJweW9kaWRlIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuICJweW9kaWRlIgogICAgcmV0dXJuIE5vbmUKCgpkZWYgZ2V0X2NpYndfYnVpbGQodGFyZ2V0KToKICAgIGlmIHRhcmdldCBpbiB7ImxpbnV4IiwgIm1hY29zIiwgIndpbmRvd3MifToKICAgICAgICByZXR1cm4gQ0lCV19CVUlMRAogICAgcmV0dXJuIHRhcmdldAoKCmRlZiBnZXRfY2lid19hcmNocyh0YXJnZXQpOgogICAgIiIiCiAgICBIYW5kbGUgbm9uLW5hdGl2ZSBhcmNoaXRlY3R1cmVzCgogICAgY2lidyBhbGxvd3MgcnVubmluZyBub24tbmF0aXZlIGJ1aWxkcyBvbiB2YXJpb3VzIHBsYXRmb3JtczoKICAgIGh0dHBzOi8vY2lidWlsZHdoZWVsLnB5cGEuaW8vZW4vc3RhYmxlL29wdGlvbnMvI2FyY2hzCgogICAgVGhpcyBsb2dpYyBvdmVycmlkZXMgdGhlICJhdXRvIiBmbGFnIGJhc2VkIG9uIE9TIGFuZCBhIGxpc3Qgb2Ygc3VwcG9ydGVkCiAgICBub24tbmF0aXZlIGFyY2ggaWYgYSBub24tbmF0aXZlIGFyY2ggaXMgZ2l2ZW4gZm9yIGEgcGFydGljdWxhciBwbGF0Zm9ybSBpbgogICAgdGFyZ2V0cywgcmF0aGVyIHRoYW4gdGhlIHVzZXIgaGF2aW5nIHRvIGRvIHRoaXMgbWFudWFsbHkuCiAgICAiIiIKICAgIHBsYXRmb3JtX2FyY2hzID0gewogICAgICAgICMgV2Ugbm93IGNyb3NzIGNvbXBpbGUgeDg2XzY0IG9uIGFybTY0IGJ5IGRlZmF1bHQKICAgICAgICAibWFjb3MiOiBbInVuaXZlcnNhbDIiLCAieDg2XzY0Il0sCiAgICAgICAgIyBUaGlzIGlzIGEgbGlzdCBvZiBzdXBwb3J0ZWQgZXVtdWxhdGVkIGFyY2hlcyBvbiBsaW51eAogICAgICAgICJsaW51eCI6IFsiYWFyY2g2NCIsICJwcGM2NGxlIiwgInMzOTB4IiwgImFybXY3bCJdLAogICAgfQogICAgZm9yIHBsYXRmb3JtLCBhcmNocyBpbiBwbGF0Zm9ybV9hcmNocy5pdGVtcygpOgogICAgICAgIGlmIHBsYXRmb3JtIGluIHRhcmdldDoKICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaHM6CiAgICAgICAgICAgICAgICBpZiB0YXJnZXQuZW5kc3dpdGgoYXJjaCk6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyY2gKCiAgICAjIElmIG5vIGV4cGxpY3QgYXJjaCBoYXMgYmVlbiBzcGVjaWZpZWQgYnVpbGQgYm90aCBhcm02NCBhbmQgeDg2XzY0IG9uIG1hY29zCiAgICBpZiAibWFjb3MiIGluIHRhcmdldDoKICAgICAgICByZXR1cm4gb3MuZW52aXJvbi5nZXQoIkNJQldfQVJDSFMiLCAiYXJtNjQgeDg2XzY0IikKCiAgICByZXR1cm4gQ0lCV19BUkNIUwoKCmRlZiBnZXRfYXJ0aWZhY3RfbmFtZSh0YXJnZXQpOgogICAgYXJ0aWZhY3RfbmFtZSA9IHJlLnN1YihyIltcXCAvOjw+fCo/XCInXSIsICItIiwgdGFyZ2V0KQogICAgYXJ0aWZhY3RfbmFtZSA9IHJlLnN1YihyIi0rIiwgIi0iLCBhcnRpZmFjdF9uYW1lKQogICAgcmV0dXJuIGFydGlmYWN0X25hbWUKCgpkZWYgZ2V0X21hdHJpeF9pdGVtKHRhcmdldCk6CiAgICBleHRyYV90YXJnZXRfYXJncyA9IHt9CiAgICBpZiBpc2luc3RhbmNlKHRhcmdldCwgZGljdCk6CiAgICAgICAgZXh0cmFfdGFyZ2V0X2FyZ3MgPSB0YXJnZXQKICAgICAgICB0YXJnZXQgPSBleHRyYV90YXJnZXRfYXJncy5wb3AoInRhcmdldCIpCiAgICAKICAgIG1hdHJpeF9pdGVtID0gewogICAgICAgICJ0YXJnZXQiOiB0YXJnZXQsCiAgICAgICAgInJ1bnMtb24iOiBnZXRfb3ModGFyZ2V0KSwKICAgICAgICAiQ0lCV19CVUlMRCI6IGdldF9jaWJ3X2J1aWxkKHRhcmdldCksCiAgICAgICAgIkNJQldfQVJDSFMiOiBnZXRfY2lid19hcmNocyh0YXJnZXQpLAogICAgICAgICJhcnRpZmFjdC1uYW1lIjogZ2V0X2FydGlmYWN0X25hbWUodGFyZ2V0KSwKICAgICAgICAqKmV4dHJhX3RhcmdldF9hcmdzLAogICAgfQogICAgCiAgICAjIEFkZCBDSUJXX1BMQVRGT1JNIGlmIG5lZWRlZCAoZS5nLiwgZm9yIHB5b2RpZGUgYnVpbGRzKQogICAgY2lid19wbGF0Zm9ybSA9IGdldF9jaWJ3X3BsYXRmb3JtKHRhcmdldCkKICAgIGlmIGNpYndfcGxhdGZvcm06CiAgICAgICAgbWF0cml4X2l0ZW1bIkNJQldfUExBVEZPUk0iXSA9IGNpYndfcGxhdGZvcm0KICAgIAogICAgcmV0dXJuIG1hdHJpeF9pdGVtCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGxvYWRfYnVpbGRfdGFyZ2V0cygpCg== - id: set-outputs run: pipx run load_build_targets.py --targets "${INPUTS_TARGETS}" shell: sh @@ -221,6 +221,7 @@ jobs: env: CIBW_BUILD: ${{ matrix.CIBW_BUILD }} CIBW_ARCHS: ${{ matrix.CIBW_ARCHS }} + CIBW_PLATFORM: ${{ matrix.CIBW_PLATFORM }} - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: | needs.targets.outputs.upload_to_pypi == 'true' || inputs.upload_to_anaconda || inputs.save_artifacts diff --git a/tools/load_build_targets.py b/tools/load_build_targets.py index 14dfcac..86e5427 100644 --- a/tools/load_build_targets.py +++ b/tools/load_build_targets.py @@ -17,6 +17,7 @@ "macos": "macos-latest", "windows": "windows-latest", "windows-arm": "windows-11-arm", + "pyodide": "ubuntu-latest", # Pyodide builds run on Linux or macOS } CIBW_BUILD = os.environ.get("CIBW_BUILD", "*") @@ -43,6 +44,8 @@ def load_build_targets(targets): def get_os(target): + if "pyodide" in target: + return MACHINE_TYPE["pyodide"] if "macos" in target: return MACHINE_TYPE["macos"] if "win_arm" in target: @@ -52,6 +55,19 @@ def get_os(target): return MACHINE_TYPE["linux"] +def get_cibw_platform(target): + """ + Determine if CIBW_PLATFORM needs to be explicitly set. + + For most targets, cibuildwheel auto-detects the platform from the runner OS. + However, for pyodide builds, we need to explicitly set CIBW_PLATFORM=pyodide + because pyodide builds run on Linux/macOS but target WebAssembly. + """ + if "pyodide" in target: + return "pyodide" + return None + + def get_cibw_build(target): if target in {"linux", "macos", "windows"}: return CIBW_BUILD @@ -99,7 +115,8 @@ def get_matrix_item(target): if isinstance(target, dict): extra_target_args = target target = extra_target_args.pop("target") - return { + + matrix_item = { "target": target, "runs-on": get_os(target), "CIBW_BUILD": get_cibw_build(target), @@ -108,6 +125,13 @@ def get_matrix_item(target): **extra_target_args, } + # Add CIBW_PLATFORM if needed (e.g., for pyodide builds) + cibw_platform = get_cibw_platform(target) + if cibw_platform: + matrix_item["CIBW_PLATFORM"] = cibw_platform + + return matrix_item + if __name__ == "__main__": load_build_targets() From 09fd5440ec6a2eb275f4b88675e6bb48ac94da38 Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Thu, 1 Oct 2026 00:11:48 +0100 Subject: [PATCH 2/3] Add job to test pyodide wheels --- .github/workflows/test_publish.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test_publish.yml b/.github/workflows/test_publish.yml index fbbf5dd..e8e24ea 100644 --- a/.github/workflows/test_publish.yml +++ b/.github/workflows/test_publish.yml @@ -46,6 +46,7 @@ jobs: runs-on: ubuntu-24.04-arm - cp313-manylinux_x86_64 - target: cp311-manylinux_ppc64le + - cp314-pyodide_wasm32 timeout-minutes: 30 release_sdist_only: uses: ./.github/workflows/publish.yml From b2944f223777825735021fee872950c64df8da2c Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Thu, 1 Oct 2026 00:14:00 +0100 Subject: [PATCH 3/3] Fix pre-commit --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b67b3d4..b73ce6f 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -127,7 +127,7 @@ jobs: python-version: '3.12' - run: echo $LOAD_BUILD_TARGETS_SCRIPT | base64 --decode > load_build_targets.py env: - LOAD_BUILD_TARGETS_SCRIPT: 77u/IyAvLy8gc2NyaXB0Cjw8PDw8PDwgSEVBRAojIHJlcXVpcmVzLXB5dGhvbiA9ICI+PTMuMTIsIDwzLjEzIgo9PT09PT09CiMgcmVxdWlyZXMtcHl0aG9uID0gIj09My4xMiIKPj4+Pj4+PiBiY2M2MjlkIChBZGQgc3VwcG9ydCBmb3IgcHlvZGlkZSB3aGVlbHMgKCMzMDgpKQojIGRlcGVuZGVuY2llcyA9IFsKIyAgICAgImNsaWNrPT04LjIuMSIsCiMgICAgICJweXlhbWw9PTYuMC4yIiwKIyBdCiMgLy8vCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgcmUKCmltcG9ydCBjbGljawppbXBvcnQgeWFtbAoKTUFDSElORV9UWVBFID0gewogICAgImxpbnV4IjogInVidW50dS1sYXRlc3QiLAogICAgIm1hY29zIjogIm1hY29zLWxhdGVzdCIsCiAgICAid2luZG93cyI6ICJ3aW5kb3dzLWxhdGVzdCIsCiAgICAid2luZG93cy1hcm0iOiAid2luZG93cy0xMS1hcm0iLAogICAgInB5b2RpZGUiOiAidWJ1bnR1LWxhdGVzdCIsICAjIFB5b2RpZGUgYnVpbGRzIHJ1biBvbiBMaW51eCBvciBtYWNPUwp9CgpDSUJXX0JVSUxEID0gb3MuZW52aXJvbi5nZXQoIkNJQldfQlVJTEQiLCAiKiIpCkNJQldfQVJDSFMgPSBvcy5lbnZpcm9uLmdldCgiQ0lCV19BUkNIUyIsICJhdXRvIikKCgpAY2xpY2suY29tbWFuZCgpCkBjbGljay5vcHRpb24oIi0tdGFyZ2V0cyIsIGRlZmF1bHQ9IiIpCmRlZiBsb2FkX2J1aWxkX3RhcmdldHModGFyZ2V0cyk6CiAgICAiIiJTY3JpcHQgdG8gbG9hZCBjaWJ1aWxkd2hlZWwgdGFyZ2V0cyBmb3IgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3cuIiIiCiAgICAjIExvYWQgbGlzdCBvZiB0YXJnZXRzCiAgICB0YXJnZXRzID0geWFtbC5sb2FkKHRhcmdldHMsIExvYWRlcj15YW1sLkJhc2VMb2FkZXIpCiAgICBwcmludChqc29uLmR1bXBzKHRhcmdldHMsIGluZGVudD0yKSkKCiAgICAjIENyZWF0ZSBtYXRyaXgKICAgIG1hdHJpeCA9IHsiaW5jbHVkZSI6IFtdfQogICAgZm9yIHRhcmdldCBpbiB0YXJnZXRzOgogICAgICAgIG1hdHJpeFsiaW5jbHVkZSJdLmFwcGVuZChnZXRfbWF0cml4X2l0ZW0odGFyZ2V0KSkKCiAgICAjIE91dHB1dCBtYXRyaXgKICAgIHByaW50KGpzb24uZHVtcHMobWF0cml4LCBpbmRlbnQ9MikpCiAgICB3aXRoIG9wZW4ob3MuZW52aXJvblsiR0lUSFVCX09VVFBVVCJdLCAiYSIpIGFzIGY6CiAgICAgICAgZi53cml0ZShmIm1hdHJpeD17anNvbi5kdW1wcyhtYXRyaXgpfVxuIikKCgpkZWYgZ2V0X29zKHRhcmdldCk6CiAgICBpZiAicHlvZGlkZSIgaW4gdGFyZ2V0OgogICAgICAgIHJldHVybiBNQUNISU5FX1RZUEVbInB5b2RpZGUiXQogICAgaWYgIm1hY29zIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuIE1BQ0hJTkVfVFlQRVsibWFjb3MiXQogICAgaWYgIndpbl9hcm0iIGluIHRhcmdldDoKICAgICAgICByZXR1cm4gTUFDSElORV9UWVBFWyJ3aW5kb3dzLWFybSJdCiAgICBpZiAid2luIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuIE1BQ0hJTkVfVFlQRVsid2luZG93cyJdCiAgICByZXR1cm4gTUFDSElORV9UWVBFWyJsaW51eCJdCgoKZGVmIGdldF9jaWJ3X3BsYXRmb3JtKHRhcmdldCk6CiAgICAiIiIKICAgIERldGVybWluZSBpZiBDSUJXX1BMQVRGT1JNIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgc2V0LgoKICAgIEZvciBtb3N0IHRhcmdldHMsIGNpYnVpbGR3aGVlbCBhdXRvLWRldGVjdHMgdGhlIHBsYXRmb3JtIGZyb20gdGhlIHJ1bm5lciBPUy4KICAgIEhvd2V2ZXIsIGZvciBweW9kaWRlIGJ1aWxkcywgd2UgbmVlZCB0byBleHBsaWNpdGx5IHNldCBDSUJXX1BMQVRGT1JNPXB5b2RpZGUKICAgIGJlY2F1c2UgcHlvZGlkZSBidWlsZHMgcnVuIG9uIExpbnV4L21hY09TIGJ1dCB0YXJnZXQgV2ViQXNzZW1ibHkuCiAgICAiIiIKICAgIGlmICJweW9kaWRlIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuICJweW9kaWRlIgogICAgcmV0dXJuIE5vbmUKCgpkZWYgZ2V0X2NpYndfYnVpbGQodGFyZ2V0KToKICAgIGlmIHRhcmdldCBpbiB7ImxpbnV4IiwgIm1hY29zIiwgIndpbmRvd3MifToKICAgICAgICByZXR1cm4gQ0lCV19CVUlMRAogICAgcmV0dXJuIHRhcmdldAoKCmRlZiBnZXRfY2lid19hcmNocyh0YXJnZXQpOgogICAgIiIiCiAgICBIYW5kbGUgbm9uLW5hdGl2ZSBhcmNoaXRlY3R1cmVzCgogICAgY2lidyBhbGxvd3MgcnVubmluZyBub24tbmF0aXZlIGJ1aWxkcyBvbiB2YXJpb3VzIHBsYXRmb3JtczoKICAgIGh0dHBzOi8vY2lidWlsZHdoZWVsLnB5cGEuaW8vZW4vc3RhYmxlL29wdGlvbnMvI2FyY2hzCgogICAgVGhpcyBsb2dpYyBvdmVycmlkZXMgdGhlICJhdXRvIiBmbGFnIGJhc2VkIG9uIE9TIGFuZCBhIGxpc3Qgb2Ygc3VwcG9ydGVkCiAgICBub24tbmF0aXZlIGFyY2ggaWYgYSBub24tbmF0aXZlIGFyY2ggaXMgZ2l2ZW4gZm9yIGEgcGFydGljdWxhciBwbGF0Zm9ybSBpbgogICAgdGFyZ2V0cywgcmF0aGVyIHRoYW4gdGhlIHVzZXIgaGF2aW5nIHRvIGRvIHRoaXMgbWFudWFsbHkuCiAgICAiIiIKICAgIHBsYXRmb3JtX2FyY2hzID0gewogICAgICAgICMgV2Ugbm93IGNyb3NzIGNvbXBpbGUgeDg2XzY0IG9uIGFybTY0IGJ5IGRlZmF1bHQKICAgICAgICAibWFjb3MiOiBbInVuaXZlcnNhbDIiLCAieDg2XzY0Il0sCiAgICAgICAgIyBUaGlzIGlzIGEgbGlzdCBvZiBzdXBwb3J0ZWQgZXVtdWxhdGVkIGFyY2hlcyBvbiBsaW51eAogICAgICAgICJsaW51eCI6IFsiYWFyY2g2NCIsICJwcGM2NGxlIiwgInMzOTB4IiwgImFybXY3bCJdLAogICAgfQogICAgZm9yIHBsYXRmb3JtLCBhcmNocyBpbiBwbGF0Zm9ybV9hcmNocy5pdGVtcygpOgogICAgICAgIGlmIHBsYXRmb3JtIGluIHRhcmdldDoKICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaHM6CiAgICAgICAgICAgICAgICBpZiB0YXJnZXQuZW5kc3dpdGgoYXJjaCk6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyY2gKCiAgICAjIElmIG5vIGV4cGxpY3QgYXJjaCBoYXMgYmVlbiBzcGVjaWZpZWQgYnVpbGQgYm90aCBhcm02NCBhbmQgeDg2XzY0IG9uIG1hY29zCiAgICBpZiAibWFjb3MiIGluIHRhcmdldDoKICAgICAgICByZXR1cm4gb3MuZW52aXJvbi5nZXQoIkNJQldfQVJDSFMiLCAiYXJtNjQgeDg2XzY0IikKCiAgICByZXR1cm4gQ0lCV19BUkNIUwoKCmRlZiBnZXRfYXJ0aWZhY3RfbmFtZSh0YXJnZXQpOgogICAgYXJ0aWZhY3RfbmFtZSA9IHJlLnN1YihyIltcXCAvOjw+fCo/XCInXSIsICItIiwgdGFyZ2V0KQogICAgYXJ0aWZhY3RfbmFtZSA9IHJlLnN1YihyIi0rIiwgIi0iLCBhcnRpZmFjdF9uYW1lKQogICAgcmV0dXJuIGFydGlmYWN0X25hbWUKCgpkZWYgZ2V0X21hdHJpeF9pdGVtKHRhcmdldCk6CiAgICBleHRyYV90YXJnZXRfYXJncyA9IHt9CiAgICBpZiBpc2luc3RhbmNlKHRhcmdldCwgZGljdCk6CiAgICAgICAgZXh0cmFfdGFyZ2V0X2FyZ3MgPSB0YXJnZXQKICAgICAgICB0YXJnZXQgPSBleHRyYV90YXJnZXRfYXJncy5wb3AoInRhcmdldCIpCiAgICAKICAgIG1hdHJpeF9pdGVtID0gewogICAgICAgICJ0YXJnZXQiOiB0YXJnZXQsCiAgICAgICAgInJ1bnMtb24iOiBnZXRfb3ModGFyZ2V0KSwKICAgICAgICAiQ0lCV19CVUlMRCI6IGdldF9jaWJ3X2J1aWxkKHRhcmdldCksCiAgICAgICAgIkNJQldfQVJDSFMiOiBnZXRfY2lid19hcmNocyh0YXJnZXQpLAogICAgICAgICJhcnRpZmFjdC1uYW1lIjogZ2V0X2FydGlmYWN0X25hbWUodGFyZ2V0KSwKICAgICAgICAqKmV4dHJhX3RhcmdldF9hcmdzLAogICAgfQogICAgCiAgICAjIEFkZCBDSUJXX1BMQVRGT1JNIGlmIG5lZWRlZCAoZS5nLiwgZm9yIHB5b2RpZGUgYnVpbGRzKQogICAgY2lid19wbGF0Zm9ybSA9IGdldF9jaWJ3X3BsYXRmb3JtKHRhcmdldCkKICAgIGlmIGNpYndfcGxhdGZvcm06CiAgICAgICAgbWF0cml4X2l0ZW1bIkNJQldfUExBVEZPUk0iXSA9IGNpYndfcGxhdGZvcm0KICAgIAogICAgcmV0dXJuIG1hdHJpeF9pdGVtCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGxvYWRfYnVpbGRfdGFyZ2V0cygpCg== + LOAD_BUILD_TARGETS_SCRIPT: 77u/IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiwgPDMuMTMiCiMgZGVwZW5kZW5jaWVzID0gWwojICAgICAiY2xpY2s9PTguMi4xIiwKIyAgICAgInB5eWFtbD09Ni4wLjIiLAojIF0KIyAvLy8KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCByZQoKaW1wb3J0IGNsaWNrCmltcG9ydCB5YW1sCgpNQUNISU5FX1RZUEUgPSB7CiAgICAibGludXgiOiAidWJ1bnR1LWxhdGVzdCIsCiAgICAibWFjb3MiOiAibWFjb3MtbGF0ZXN0IiwKICAgICJ3aW5kb3dzIjogIndpbmRvd3MtbGF0ZXN0IiwKICAgICJ3aW5kb3dzLWFybSI6ICJ3aW5kb3dzLTExLWFybSIsCiAgICAicHlvZGlkZSI6ICJ1YnVudHUtbGF0ZXN0IiwgICMgUHlvZGlkZSBidWlsZHMgcnVuIG9uIExpbnV4IG9yIG1hY09TCn0KCkNJQldfQlVJTEQgPSBvcy5lbnZpcm9uLmdldCgiQ0lCV19CVUlMRCIsICIqIikKQ0lCV19BUkNIUyA9IG9zLmVudmlyb24uZ2V0KCJDSUJXX0FSQ0hTIiwgImF1dG8iKQoKCkBjbGljay5jb21tYW5kKCkKQGNsaWNrLm9wdGlvbigiLS10YXJnZXRzIiwgZGVmYXVsdD0iIikKZGVmIGxvYWRfYnVpbGRfdGFyZ2V0cyh0YXJnZXRzKToKICAgICIiIlNjcmlwdCB0byBsb2FkIGNpYnVpbGR3aGVlbCB0YXJnZXRzIGZvciBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvdy4iIiIKICAgICMgTG9hZCBsaXN0IG9mIHRhcmdldHMKICAgIHRhcmdldHMgPSB5YW1sLmxvYWQodGFyZ2V0cywgTG9hZGVyPXlhbWwuQmFzZUxvYWRlcikKICAgIHByaW50KGpzb24uZHVtcHModGFyZ2V0cywgaW5kZW50PTIpKQoKICAgICMgQ3JlYXRlIG1hdHJpeAogICAgbWF0cml4ID0geyJpbmNsdWRlIjogW119CiAgICBmb3IgdGFyZ2V0IGluIHRhcmdldHM6CiAgICAgICAgbWF0cml4WyJpbmNsdWRlIl0uYXBwZW5kKGdldF9tYXRyaXhfaXRlbSh0YXJnZXQpKQoKICAgICMgT3V0cHV0IG1hdHJpeAogICAgcHJpbnQoanNvbi5kdW1wcyhtYXRyaXgsIGluZGVudD0yKSkKICAgIHdpdGggb3Blbihvcy5lbnZpcm9uWyJHSVRIVUJfT1VUUFVUIl0sICJhIikgYXMgZjoKICAgICAgICBmLndyaXRlKGYibWF0cml4PXtqc29uLmR1bXBzKG1hdHJpeCl9XG4iKQoKCmRlZiBnZXRfb3ModGFyZ2V0KToKICAgIGlmICJweW9kaWRlIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuIE1BQ0hJTkVfVFlQRVsicHlvZGlkZSJdCiAgICBpZiAibWFjb3MiIGluIHRhcmdldDoKICAgICAgICByZXR1cm4gTUFDSElORV9UWVBFWyJtYWNvcyJdCiAgICBpZiAid2luX2FybSIgaW4gdGFyZ2V0OgogICAgICAgIHJldHVybiBNQUNISU5FX1RZUEVbIndpbmRvd3MtYXJtIl0KICAgIGlmICJ3aW4iIGluIHRhcmdldDoKICAgICAgICByZXR1cm4gTUFDSElORV9UWVBFWyJ3aW5kb3dzIl0KICAgIHJldHVybiBNQUNISU5FX1RZUEVbImxpbnV4Il0KCgpkZWYgZ2V0X2NpYndfcGxhdGZvcm0odGFyZ2V0KToKICAgICIiIgogICAgRGV0ZXJtaW5lIGlmIENJQldfUExBVEZPUk0gbmVlZHMgdG8gYmUgZXhwbGljaXRseSBzZXQuCgogICAgRm9yIG1vc3QgdGFyZ2V0cywgY2lidWlsZHdoZWVsIGF1dG8tZGV0ZWN0cyB0aGUgcGxhdGZvcm0gZnJvbSB0aGUgcnVubmVyIE9TLgogICAgSG93ZXZlciwgZm9yIHB5b2RpZGUgYnVpbGRzLCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IENJQldfUExBVEZPUk09cHlvZGlkZQogICAgYmVjYXVzZSBweW9kaWRlIGJ1aWxkcyBydW4gb24gTGludXgvbWFjT1MgYnV0IHRhcmdldCBXZWJBc3NlbWJseS4KICAgICIiIgogICAgaWYgInB5b2RpZGUiIGluIHRhcmdldDoKICAgICAgICByZXR1cm4gInB5b2RpZGUiCiAgICByZXR1cm4gTm9uZQoKCmRlZiBnZXRfY2lid19idWlsZCh0YXJnZXQpOgogICAgaWYgdGFyZ2V0IGluIHsibGludXgiLCAibWFjb3MiLCAid2luZG93cyJ9OgogICAgICAgIHJldHVybiBDSUJXX0JVSUxECiAgICByZXR1cm4gdGFyZ2V0CgoKZGVmIGdldF9jaWJ3X2FyY2hzKHRhcmdldCk6CiAgICAiIiIKICAgIEhhbmRsZSBub24tbmF0aXZlIGFyY2hpdGVjdHVyZXMKCiAgICBjaWJ3IGFsbG93cyBydW5uaW5nIG5vbi1uYXRpdmUgYnVpbGRzIG9uIHZhcmlvdXMgcGxhdGZvcm1zOgogICAgaHR0cHM6Ly9jaWJ1aWxkd2hlZWwucHlwYS5pby9lbi9zdGFibGUvb3B0aW9ucy8jYXJjaHMKCiAgICBUaGlzIGxvZ2ljIG92ZXJyaWRlcyB0aGUgImF1dG8iIGZsYWcgYmFzZWQgb24gT1MgYW5kIGEgbGlzdCBvZiBzdXBwb3J0ZWQKICAgIG5vbi1uYXRpdmUgYXJjaCBpZiBhIG5vbi1uYXRpdmUgYXJjaCBpcyBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHBsYXRmb3JtIGluCiAgICB0YXJnZXRzLCByYXRoZXIgdGhhbiB0aGUgdXNlciBoYXZpbmcgdG8gZG8gdGhpcyBtYW51YWxseS4KICAgICIiIgogICAgcGxhdGZvcm1fYXJjaHMgPSB7CiAgICAgICAgIyBXZSBub3cgY3Jvc3MgY29tcGlsZSB4ODZfNjQgb24gYXJtNjQgYnkgZGVmYXVsdAogICAgICAgICJtYWNvcyI6IFsidW5pdmVyc2FsMiIsICJ4ODZfNjQiXSwKICAgICAgICAjIFRoaXMgaXMgYSBsaXN0IG9mIHN1cHBvcnRlZCBldW11bGF0ZWQgYXJjaGVzIG9uIGxpbnV4CiAgICAgICAgImxpbnV4IjogWyJhYXJjaDY0IiwgInBwYzY0bGUiLCAiczM5MHgiLCAiYXJtdjdsIl0sCiAgICB9CiAgICBmb3IgcGxhdGZvcm0sIGFyY2hzIGluIHBsYXRmb3JtX2FyY2hzLml0ZW1zKCk6CiAgICAgICAgaWYgcGxhdGZvcm0gaW4gdGFyZ2V0OgogICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoczoKICAgICAgICAgICAgICAgIGlmIHRhcmdldC5lbmRzd2l0aChhcmNoKToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJjaAoKICAgICMgSWYgbm8gZXhwbGljdCBhcmNoIGhhcyBiZWVuIHNwZWNpZmllZCBidWlsZCBib3RoIGFybTY0IGFuZCB4ODZfNjQgb24gbWFjb3MKICAgIGlmICJtYWNvcyIgaW4gdGFyZ2V0OgogICAgICAgIHJldHVybiBvcy5lbnZpcm9uLmdldCgiQ0lCV19BUkNIUyIsICJhcm02NCB4ODZfNjQiKQoKICAgIHJldHVybiBDSUJXX0FSQ0hTCgoKZGVmIGdldF9hcnRpZmFjdF9uYW1lKHRhcmdldCk6CiAgICBhcnRpZmFjdF9uYW1lID0gcmUuc3ViKHIiW1xcIC86PD58Kj9cIiddIiwgIi0iLCB0YXJnZXQpCiAgICBhcnRpZmFjdF9uYW1lID0gcmUuc3ViKHIiLSsiLCAiLSIsIGFydGlmYWN0X25hbWUpCiAgICByZXR1cm4gYXJ0aWZhY3RfbmFtZQoKCmRlZiBnZXRfbWF0cml4X2l0ZW0odGFyZ2V0KToKICAgIGV4dHJhX3RhcmdldF9hcmdzID0ge30KICAgIGlmIGlzaW5zdGFuY2UodGFyZ2V0LCBkaWN0KToKICAgICAgICBleHRyYV90YXJnZXRfYXJncyA9IHRhcmdldAogICAgICAgIHRhcmdldCA9IGV4dHJhX3RhcmdldF9hcmdzLnBvcCgidGFyZ2V0IikKCiAgICBtYXRyaXhfaXRlbSA9IHsKICAgICAgICAidGFyZ2V0IjogdGFyZ2V0LAogICAgICAgICJydW5zLW9uIjogZ2V0X29zKHRhcmdldCksCiAgICAgICAgIkNJQldfQlVJTEQiOiBnZXRfY2lid19idWlsZCh0YXJnZXQpLAogICAgICAgICJDSUJXX0FSQ0hTIjogZ2V0X2NpYndfYXJjaHModGFyZ2V0KSwKICAgICAgICAiYXJ0aWZhY3QtbmFtZSI6IGdldF9hcnRpZmFjdF9uYW1lKHRhcmdldCksCiAgICAgICAgKipleHRyYV90YXJnZXRfYXJncywKICAgIH0KCiAgICAjIEFkZCBDSUJXX1BMQVRGT1JNIGlmIG5lZWRlZCAoZS5nLiwgZm9yIHB5b2RpZGUgYnVpbGRzKQogICAgY2lid19wbGF0Zm9ybSA9IGdldF9jaWJ3X3BsYXRmb3JtKHRhcmdldCkKICAgIGlmIGNpYndfcGxhdGZvcm06CiAgICAgICAgbWF0cml4X2l0ZW1bIkNJQldfUExBVEZPUk0iXSA9IGNpYndfcGxhdGZvcm0KCiAgICByZXR1cm4gbWF0cml4X2l0ZW0KCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbG9hZF9idWlsZF90YXJnZXRzKCkK - id: set-outputs run: pipx run load_build_targets.py --targets "${INPUTS_TARGETS}" shell: sh