cibuildmp 0.7.2__tar.gz → 0.7.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/probe-overlay.yml +1 -1
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/CHANGELOG.md +34 -1
- {cibuildmp-0.7.2/src/cibuildmp.egg-info → cibuildmp-0.7.3}/PKG-INFO +25 -25
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/README.md +24 -24
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/update_toolchains.py +64 -30
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docker/pypa-tracker.Dockerfile +9 -9
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docker/webassembly.Dockerfile +24 -14
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docker/windows.Dockerfile +15 -8
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/ACTIONS.md +4 -4
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0046-pin-staleness-checker.md +37 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0096-arm-riscv-embedded-collapse-into-embedded-base.md +10 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/resources/pinned_docker_images.toml +16 -16
- cibuildmp-0.7.3/src/cibuildmp/resources/pinned_pypa_images.toml +81 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3/src/cibuildmp.egg-info}/PKG-INFO +25 -25
- cibuildmp-0.7.3/src/cibuildmp.egg-info/scm_version.json +8 -0
- cibuildmp-0.7.2/src/cibuildmp/resources/pinned_pypa_images.toml +0 -81
- cibuildmp-0.7.2/src/cibuildmp.egg-info/scm_version.json +0 -8
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.claude/settings.json +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.claude/skills/docker-local/SKILL.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.dockerignore +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/actions/build-natmod/action.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/actions/build-usermod-armv7m/action.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/actions/build-usermod-esp32/action.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/actions/build-usermod-rp2040/action.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/actions/build-usermod-unix/action.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/actions/build-usermod-webassembly/action.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/actions/build-usermod-windows/action.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/actions/clone-micropython/action.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/actions/fetch-micropython/action.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/actions/run-with-wine/action.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/dependabot.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/build-examples.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/coverage.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/pin-staleness.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/pre-commit.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/publish-docker-images.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/publish.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/test-all-platforms.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/test-platforms.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/test-upstream-natmod.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/test-upstream-usermodule.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/verify-docker-images.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.github/workflows/verify-lv-binding-micropython.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.gitignore +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/.pre-commit-config.yaml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/CLAUDE.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/CONTRIBUTING.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/LICENSE +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/action.yml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/fetch_bootlin_metadata.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/ghcr_prune_scan.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/plan_test_matrix.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/publish_images.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/refresh_docs.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/refresh_natmod_archs.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/refresh_toolchain_pins.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/refresh_toolchains.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/refresh_usermod_boards.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/render_test_summary.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/bin/update_docker.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/cibuildmp.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docker/embedded_base.Dockerfile +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docker/esp_idf_base.Dockerfile +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docker/manylinux_2_41_mipsel.Dockerfile +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docker/natmod_host.Dockerfile +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docker/ppc64le_linux.Dockerfile +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docker/xtensa_esp.Dockerfile +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docker/xtensa_lx106.Dockerfile +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/0000-TRACKER.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/BACKLOG.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0001-natmod-first.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0002-delegate-compile-own-environment.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0003-toolchain-resolution-per-target.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0004-config-file-location.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0005-one-identifier-namespace.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0006-no-test-runners-phase1.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0007-usermod-vendors-mpbuild-board-db.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0008-tool-distribution-deferred.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0009-one-job-loop-fanout-opt-in.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0010-pinned-data-in-resources.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0011-one-repo-absorbs-micropython-native-ci.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0012-pyelftools-ar-own-deps.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0013-micropython-list-dedup-by-abi.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0014-mip-package-per-identifier.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0015-rv32imc-arch-flags-identifier.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0016-usermod-user-c-modules-dir-vs-cmake.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0017-usermod-frozen-manifest-merge.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0018-windows-provisioning-fourth-story.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0019-esp-idf-provisioning-heaviest.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0020-usermod-runner-selection-structural.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0021-usermod-execution-central-value.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0022-zephyr-third-selector-axis.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0023-usermod-identifier-scheme-config-output.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0024-unix-armhf-mipsel-cross-compiles.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0025-dockerfiles-bake-unix-cross-toolchains.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0026-one-docker-image-per-port.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0027-orchestrate-output-dir-and-exec-bit-fixes.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0028-container-per-port-migration-plan.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0029-github-actions-job-summary.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0030-container-approach-natmod-and-docker-vs-qemu.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0031-unix-musllinux-libc-axis.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0032-unix-docker-default-and-webassembly-wiring.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0033-cibuildmp-never-builds-docker-image-itself.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0034-m0-skeleton.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0035-m1-micropython-mpy-cross-provisioning.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0036-m2-toolchain-resolver.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0037-m3-the-build-itself.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0038-m5-adopt-in-three-repos.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0039-usermod-composite-actions-status.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0040-usermod-tests-deferred.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0041-docs-restructure.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0042-windows-docker-wiring-and-resolver-removal.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0043-unix-adopts-cibuildwheel-native-image-model.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0044-unix-native-images-landed.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0045-only-is-a-filter-not-a-forced-identifier.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0047-run-output-parity-with-cibuildwheel.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0048-build-skip-live-in-opposite-tables.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0049-no-matrix-generation-archs-vocabulary.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0050-natmod-is-docker-only.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0051-usermod-identifiers-have-no-version-axis.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0052-config-is-a-tree-not-a-selector-matrix.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0053-usermod-ports-without-a-build-driver.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0054-usermod-example-from-upstream-usercmodule.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0055-natmod-example-from-upstream-natmod.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0056-usermod-with-no-user-c-module.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0057-multiple-modules-per-build.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0058-image-groups-are-toolchains-not-ports.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0059-ghcr-untagged-cleanup-deletes-referenced-manifests.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0060-rp2-build-driver.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0061-usermod-build-drivers-split-per-port.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0062-test-platforms-per-port-orchestrator.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0063-keep-going-and-json-build-report.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0065-bucketed-test-matrix-planning.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0066-extra-cmake-args.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0067-user-c-modules-flat-shape-autodetect.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0068-docker-dependabot-grouping-and-mipsel-ubuntu-26-04.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0069-upstream-usercmodule-narrow-ci-slice.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0070-unix-collected-binary-missing-repaired-lib-sidecar.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0071-micropython-placeholder-in-user-c-modules.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0072-natmod-micropython-placeholder-and-upstream-natmod-ci.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0073-composite-actions-are-a-permanent-legacy-fallback.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0074-usermod-family-table-and-retired-table-messages-removed.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0075-top-level-scalar-keys-are-validated.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0076-the-mipsel-holdout-is-bclibc-and-wasm3-not-a7p.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0077-docs-drift-is-a-failing-test-not-a-discipline-problem.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0078-uncontexted-agent-audit-as-a-docs-test.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0079-collected-artifact-is-more-than-one-file.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0080-windows-and-qemu-usermod-smoke-tests.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0081-output-dir-gitignore.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0082-natmod-old-tags-fail-mpy-cross-under-gcc-15.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0083-windows-fully-prebuilt-mingw-toolchain.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0084-per-identifier-toolchain-tarballs-and-the-end-of-shared-images.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0085-arm-embedded-thins-out-and-the-toolchain-version-becomes-a-row-fact.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0086-generic-in-container-toolchain-tarball-fetch.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0087-arm-riscv-embedded-thin-out-toolchain-version-lands.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0088-mimxrt-own-floor.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0089-natmod-arm-riscv-embedded-toolchain-version.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0090-toolchain-pins-checker-and-0058-text-followup.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0091-tag-cflags-into-every-ports-mpy-cross.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0092-usermod-toml-and-tag-cflags-against-build-platforms.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0093-pre-v1-20-0-tags-had-never-built.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0094-arm-gnu-toolchain-is-a-real-third-choice-for-arm-embedded.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0095-cache-root-splits-source-from-build-state.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0097-lv-binding-micropython-builds-through-cibuildmp.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0098-build-override-may-be-as-unnecessary-as-scratch-root-was.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0099-variant-becomes-a-real-per-target-override-not-an-identifier-axis.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/records/0100-samd-build-driver-plan.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/reference/design.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/reference/open-questions.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/reference/toolchain-facts/bootlin.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/reference/toolchain-facts/toolchains.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/docs/reference/vendored-images.md +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/bare-firmware/cibuildmp.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/lv_binding_micropython/cibuildmp.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/lv_binding_micropython/smoke_test.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/natmod/cibuildmp.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/template/cibuildmp.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/template/micropython.cmake +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/template/natmod/Makefile +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/template/natmod/template.c +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/template/src/facade.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/template/src/template_core.c +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/template/src/template_core.h +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/template/usermod/manifest.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/template/usermod/micropython.mk +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/template/usermod/template_usermod.c +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/usercmodule/cibuildmp.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/usercmodule/micropython.cmake +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/usercmodule/smoke_test.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/Makefile +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/NOTICE +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/cibuildmp.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/runtime/esp8266-rom.S +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/runtime/libc.c +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/runtime/runtime.c +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/runtime/wasm-rt-impl-tableops.inc +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/runtime/wasm-rt-impl.c +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/runtime/wasm-rt-impl.h +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/runtime/wasm-rt-mem-impl-helper.inc +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/runtime/wasm-rt-mem-impl.c +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/runtime/wasm-rt.h +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/examples/wasm2mpy/test/zig.wasm +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/pyproject.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/setup.cfg +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/__init__.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/__main__.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/cli.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/dockerrun.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/options.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/__init__.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/natmod/__init__.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/natmod/build.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/natmod/options.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/natmod/targets.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/__init__.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/boards.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/build_common.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/build_esp32.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/build_qemu.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/build_rp2.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/build_samd.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/build_unix.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/build_webassembly.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/build_windows.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/espidf.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/manifests.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/options.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/orchestrate.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/portinfo.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/platforms/usermod/targets.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/report.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/resources/build-platforms.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/resources/natmod.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/resources/pinned_toolchains.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/resources/tag_cflags.toml +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/resources.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/selector.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/sources.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/stepsummary.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp/toolchain_fetch.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp.egg-info/SOURCES.txt +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp.egg-info/dependency_links.txt +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp.egg-info/entry_points.txt +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp.egg-info/requires.txt +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp.egg-info/scm_file_list.json +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/src/cibuildmp.egg-info/top_level.txt +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/conftest.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_boards.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_bootlin_table.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_build.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_cli.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_cli_multi_family.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_dockerrun_container.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_docs.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_espidf.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_manifests.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_options.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_options_cascade.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_overrides.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_plan_test_matrix.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_platform_row_facts.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_portinfo.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_render_test_summary.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_report.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_selector.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_sources.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_stepsummary.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_targets.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_toolchain_fetch.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_build_common.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_build_esp32.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_build_qemu.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_build_rp2.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_build_samd.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_build_unix.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_build_webassembly.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_build_windows.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_dockerrun.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_options.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_orchestrate.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/tests/test_usermod_targets.py +0 -0
- {cibuildmp-0.7.2 → cibuildmp-0.7.3}/uv.lock +0 -0
|
@@ -62,7 +62,7 @@ jobs:
|
|
|
62
62
|
- runner: ubuntu-24.04-arm
|
|
63
63
|
image: quay.io/pypa/manylinux_2_28_aarch64@sha256:45ea412cfbd2cc5e51323cecab614ea8e4e5522b4d4f668946c54056b40152f6
|
|
64
64
|
steps:
|
|
65
|
-
- uses: actions/checkout@
|
|
65
|
+
- uses: actions/checkout@v7
|
|
66
66
|
|
|
67
67
|
- name: Docker and kernel facts
|
|
68
68
|
run: |
|
|
@@ -7,6 +7,34 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.7.3] - 2026-09-10
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **The two toolchain pins [0046]'s weekly checker reported behind are moved**:
|
|
15
|
+
llvm-mingw `20260616` -> `20260908` (`docker/windows.Dockerfile`) and emsdk
|
|
16
|
+
`6.0.8`/`9d70dbe8` -> `6.0.9`/`f04ea239` (`docker/webassembly.Dockerfile`).
|
|
17
|
+
Both sha256s recomputed from the real tarball, and each one's internal layout
|
|
18
|
+
re-checked with `tar tJf` rather than carried over from the previous version:
|
|
19
|
+
llvm-mingw still unpacks to a single top-level directory (what
|
|
20
|
+
`--strip-components=1` assumes) and still ships all four
|
|
21
|
+
`<arch>-w64-mingw32-` bin/ prefixes `build_windows.py` drives; the emsdk
|
|
22
|
+
tarball still has the `install/emscripten` + `install/bin` shape the image's
|
|
23
|
+
own `ENV PATH` points at. `bin/update_toolchains.py --check` now reports
|
|
24
|
+
every pin current. Nothing about the emsdk bump touches
|
|
25
|
+
`[usermod.webassembly]`, which deliberately records no emsdk version at all
|
|
26
|
+
([0092]) -- MicroPython's own `tools/ci.sh` has never pinned one.
|
|
27
|
+
- **Both bumped `RUN` steps stopped claiming to track a deleted file.** Each
|
|
28
|
+
said it was "pinned to `resources/usermod.toml`'s own `[llvm-mingw]`/`[emsdk]`
|
|
29
|
+
table -- keep the URL and sha256 in step with it", directly contradicting the
|
|
30
|
+
"**This file is the pin of record**" paragraph a few lines above it in the
|
|
31
|
+
same file: [0092] deleted `resources/usermod.toml`, and `usermod/llvmmingw.py`
|
|
32
|
+
/ `usermod/emsdk.py` went with the bare-host resolvers ([0050]/[0042]). The
|
|
33
|
+
webassembly one also cited `open-questions.md`'s "nothing checks whether a
|
|
34
|
+
pinned version is stale" note, which [0046] and `pin-staleness.yml` made false
|
|
35
|
+
-- that checker is precisely what found both of these.
|
|
36
|
+
|
|
37
|
+
|
|
10
38
|
## [0.7.2] - 2026-09-06
|
|
11
39
|
|
|
12
40
|
### Added
|
|
@@ -1669,7 +1697,8 @@ ballistics-lab/micropython-native-ci, but both tags exist here too, so every
|
|
|
1669
1697
|
link resolves inside this repository -- the version line continues rather
|
|
1670
1698
|
than restarting (see the 0.3.0a1 entry). -->
|
|
1671
1699
|
|
|
1672
|
-
[Unreleased]: https://github.com/ballistics-lab/cibuildmp/compare/v0.7.
|
|
1700
|
+
[Unreleased]: https://github.com/ballistics-lab/cibuildmp/compare/v0.7.3...HEAD
|
|
1701
|
+
[0.7.3]: https://github.com/ballistics-lab/cibuildmp/compare/v0.7.2...v0.7.3
|
|
1673
1702
|
[0.7.2]: https://github.com/ballistics-lab/cibuildmp/compare/v0.7.1...v0.7.2
|
|
1674
1703
|
[0.7.1]: https://github.com/ballistics-lab/cibuildmp/compare/v0.7.0...v0.7.1
|
|
1675
1704
|
[0.7.0]: https://github.com/ballistics-lab/cibuildmp/compare/v0.6.2...v0.7.0
|
|
@@ -1708,3 +1737,7 @@ than restarting (see the 0.3.0a1 entry). -->
|
|
|
1708
1737
|
[0053]: docs/records/0053-usermod-ports-without-a-build-driver.md
|
|
1709
1738
|
[0060]: docs/records/0060-rp2-build-driver.md
|
|
1710
1739
|
[0100]: docs/records/0100-samd-build-driver-plan.md
|
|
1740
|
+
[0046]: docs/records/0046-pin-staleness-checker.md
|
|
1741
|
+
[0092]: docs/records/0092-usermod-toml-and-tag-cflags-against-build-platforms.md
|
|
1742
|
+
[0050]: docs/records/0050-natmod-is-docker-only.md
|
|
1743
|
+
[0042]: docs/records/0042-windows-docker-wiring-and-resolver-removal.md
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cibuildmp
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.3
|
|
4
4
|
Summary: Build MicroPython native C extensions for every target, from one config — cibuildwheel for MicroPython
|
|
5
5
|
Author-email: o-murphy <thehelixpg@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -157,7 +157,7 @@ On CI, use the action instead of installing the CLI yourself — it already
|
|
|
157
157
|
runs on a bare runner with the runner's own Docker daemon reachable:
|
|
158
158
|
|
|
159
159
|
```yaml
|
|
160
|
-
- uses: ballistics-lab/cibuildmp@v0.7.
|
|
160
|
+
- uses: ballistics-lab/cibuildmp@v0.7.3
|
|
161
161
|
with:
|
|
162
162
|
build: "mpy6.3-* v1.29.0-manylinux_2_28_x86_64"
|
|
163
163
|
```
|
|
@@ -176,7 +176,7 @@ newest:
|
|
|
176
176
|
path: ~/.cache/cibuildmp
|
|
177
177
|
key: cibuildmp-${{ runner.os }}
|
|
178
178
|
restore-keys: cibuildmp-${{ runner.os }}
|
|
179
|
-
- uses: ballistics-lab/cibuildmp@v0.7.
|
|
179
|
+
- uses: ballistics-lab/cibuildmp@v0.7.3
|
|
180
180
|
with:
|
|
181
181
|
build: "mpy6.3-* v1.29.0-manylinux_2_28_x86_64"
|
|
182
182
|
```
|
|
@@ -235,7 +235,7 @@ jobs:
|
|
|
235
235
|
runs-on: ubuntu-latest
|
|
236
236
|
steps:
|
|
237
237
|
- uses: actions/checkout@v4
|
|
238
|
-
- uses: ballistics-lab/cibuildmp@v0.7.
|
|
238
|
+
- uses: ballistics-lab/cibuildmp@v0.7.3
|
|
239
239
|
with:
|
|
240
240
|
build: "mpy6.3-v1.29.0-*"
|
|
241
241
|
- uses: actions/upload-artifact@v4
|
|
@@ -489,16 +489,16 @@ platform.**
|
|
|
489
489
|
Identifier shapes, one per platform:
|
|
490
490
|
|
|
491
491
|
<!-- generated: identifier-shapes -- bin/refresh_docs.py, do not edit by hand -->
|
|
492
|
-
| Platform
|
|
493
|
-
|
|
|
494
|
-
| natmod
|
|
495
|
-
| usermod `esp32`
|
|
496
|
-
| usermod `qemu`
|
|
497
|
-
| usermod `rp2`
|
|
498
|
-
| usermod `samd`
|
|
499
|
-
| usermod `unix`
|
|
500
|
-
| usermod `webassembly` | `{tag}-{arch}`
|
|
501
|
-
| usermod `windows`
|
|
492
|
+
| Platform | Shape | Example |
|
|
493
|
+
| --------------------- | ----------------------- | ------------------------------------------ |
|
|
494
|
+
| natmod | `mpy{abi}-{tag}-{arch}` | `mpy6.3-v1.29.0-armv6m` |
|
|
495
|
+
| usermod `esp32` | `{tag}-esp32-{board}` | `v1.29.0-esp32-ARDUINO_NANO_ESP32` |
|
|
496
|
+
| usermod `qemu` | `{tag}-qemu-{board}` | `v1.29.0-qemu-MICROBIT` |
|
|
497
|
+
| usermod `rp2` | `{tag}-rp2-{board}` | `v1.29.0-rp2-ADAFRUIT_FEATHER_RP2040` |
|
|
498
|
+
| usermod `samd` | `{tag}-samd-{board}` | `v1.29.0-samd-ADAFRUIT_FEATHER_M0_EXPRESS` |
|
|
499
|
+
| usermod `unix` | `{tag}-{arch}` | `v1.29.0-manylinux_2_28_aarch64` |
|
|
500
|
+
| usermod `webassembly` | `{tag}-{arch}` | `v1.29.0-wasm32` |
|
|
501
|
+
| usermod `windows` | `{tag}-{arch}` | `v1.29.0-win32` |
|
|
502
502
|
<!-- /generated: identifier-shapes -->
|
|
503
503
|
|
|
504
504
|
The shape genuinely differs per usermod port — `unix`/`windows`/
|
|
@@ -786,16 +786,16 @@ the port**, because it is that port's own build axis:
|
|
|
786
786
|
| `esp32`, `rp2`, `webassembly` | *none* | `CIBMP_WEBASSEMBLY_DOCKER_IMAGE` |
|
|
787
787
|
|
|
788
788
|
|
|
789
|
-
| Variable | Effect
|
|
790
|
-
| --------------------------------------- |
|
|
789
|
+
| Variable | Effect |
|
|
790
|
+
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
791
791
|
| `CIBMP_CACHE_PATH` | Where fetched MicroPython checkouts and ESP-IDF are cached. Defaults to `$XDG_CACHE_HOME/cibuildmp`, or `~/.cache/cibuildmp`. Pin it in CI when a later step needs the checkout by path — `<CIBMP_CACHE_PATH>/micropython/<tag>` |
|
|
792
|
-
| `CIBMP_REPORT_PATH` | Where the JSON build report is written
|
|
793
|
-
| `CIBMP_TIMEOUT` | Seconds before a build container is killed (`docker kill`, not just the CLI). No limit by default. **usermod only** -- natmod's own container call does not consult it
|
|
794
|
-
| `CIBMP_<PORT>_<TARGET>_TIMEOUT` | The same, for one container — `CIBMP_UNIX_MANYLINUX_2_28_X86_64_TIMEOUT`
|
|
795
|
-
| `CIBMP_<PORT>_<TARGET>_DOCKER_IMAGE` | Run this (port, target) in a different image — a locally built one, or a fork's. Wins over the pinned default. Omit the `<TARGET>` segment for a port with no per-build image axis (`CIBMP_WEBASSEMBLY_DOCKER_IMAGE`)
|
|
796
|
-
| `CIBMP_<PORT>_<TARGET>_DOCKER_PLATFORM` | Same shape, for the container's `--platform`
|
|
797
|
-
| `CIBMP_DEBUG_TRACEBACK` | Print a full traceback instead of a one-line error (same as `--debug-traceback`)
|
|
798
|
-
| `CIBMP_DISABLE_GITHUB_STEP_SUMMARY` | Suppress the step-summary table on GitHub Actions
|
|
792
|
+
| `CIBMP_REPORT_PATH` | Where the JSON build report is written |
|
|
793
|
+
| `CIBMP_TIMEOUT` | Seconds before a build container is killed (`docker kill`, not just the CLI). No limit by default. **usermod only** -- natmod's own container call does not consult it |
|
|
794
|
+
| `CIBMP_<PORT>_<TARGET>_TIMEOUT` | The same, for one container — `CIBMP_UNIX_MANYLINUX_2_28_X86_64_TIMEOUT` |
|
|
795
|
+
| `CIBMP_<PORT>_<TARGET>_DOCKER_IMAGE` | Run this (port, target) in a different image — a locally built one, or a fork's. Wins over the pinned default. Omit the `<TARGET>` segment for a port with no per-build image axis (`CIBMP_WEBASSEMBLY_DOCKER_IMAGE`) |
|
|
796
|
+
| `CIBMP_<PORT>_<TARGET>_DOCKER_PLATFORM` | Same shape, for the container's `--platform` |
|
|
797
|
+
| `CIBMP_DEBUG_TRACEBACK` | Print a full traceback instead of a one-line error (same as `--debug-traceback`) |
|
|
798
|
+
| `CIBMP_DISABLE_GITHUB_STEP_SUMMARY` | Suppress the step-summary table on GitHub Actions |
|
|
799
799
|
|
|
800
800
|
### Precedence
|
|
801
801
|
|
|
@@ -1268,7 +1268,7 @@ scheduled `test-all-platforms.yml` run since.
|
|
|
1268
1268
|
<tr>
|
|
1269
1269
|
<td><code>esp32</code></td>
|
|
1270
1270
|
<td>
|
|
1271
|
-
every board across <code>v1.
|
|
1271
|
+
every board across <code>v1.29.0</code>/<code>v1.29.0</code>[^esp32ci]
|
|
1272
1272
|
</td>
|
|
1273
1273
|
<td><code>esp_idf_base</code> (Docker) -- ESP-IDF cloned on the host, installed in-container, per-board <code>idf_target</code>/<code>idf_version</code></td>
|
|
1274
1274
|
<td>✅</td>
|
|
@@ -1407,7 +1407,7 @@ quietly mislabelled `.mpy` when they do not.
|
|
|
1407
1407
|
|
|
1408
1408
|
**No `dynruntime.mk` default covers either axis fully**, which this
|
|
1409
1409
|
paragraph did not used to say: `BUILD` defaulted to an unscoped `build` up
|
|
1410
|
-
to v1.
|
|
1410
|
+
to v1.29.0 and to `build-$(ARCH)` from v1.29.0 — arch-scoped from that tag
|
|
1411
1411
|
on, tag-scoped in no release at all, since `MPY_DIR` is the only thing that
|
|
1412
1412
|
knows which release is being built. So on v1.29.0 and later the arch
|
|
1413
1413
|
collision cannot happen by default; the tag one still can, and only your
|
|
@@ -125,7 +125,7 @@ On CI, use the action instead of installing the CLI yourself — it already
|
|
|
125
125
|
runs on a bare runner with the runner's own Docker daemon reachable:
|
|
126
126
|
|
|
127
127
|
```yaml
|
|
128
|
-
- uses: ballistics-lab/cibuildmp@v0.7.
|
|
128
|
+
- uses: ballistics-lab/cibuildmp@v0.7.3
|
|
129
129
|
with:
|
|
130
130
|
build: "mpy6.3-* v1.29.0-manylinux_2_28_x86_64"
|
|
131
131
|
```
|
|
@@ -144,7 +144,7 @@ newest:
|
|
|
144
144
|
path: ~/.cache/cibuildmp
|
|
145
145
|
key: cibuildmp-${{ runner.os }}
|
|
146
146
|
restore-keys: cibuildmp-${{ runner.os }}
|
|
147
|
-
- uses: ballistics-lab/cibuildmp@v0.7.
|
|
147
|
+
- uses: ballistics-lab/cibuildmp@v0.7.3
|
|
148
148
|
with:
|
|
149
149
|
build: "mpy6.3-* v1.29.0-manylinux_2_28_x86_64"
|
|
150
150
|
```
|
|
@@ -203,7 +203,7 @@ jobs:
|
|
|
203
203
|
runs-on: ubuntu-latest
|
|
204
204
|
steps:
|
|
205
205
|
- uses: actions/checkout@v4
|
|
206
|
-
- uses: ballistics-lab/cibuildmp@v0.7.
|
|
206
|
+
- uses: ballistics-lab/cibuildmp@v0.7.3
|
|
207
207
|
with:
|
|
208
208
|
build: "mpy6.3-v1.29.0-*"
|
|
209
209
|
- uses: actions/upload-artifact@v4
|
|
@@ -457,16 +457,16 @@ platform.**
|
|
|
457
457
|
Identifier shapes, one per platform:
|
|
458
458
|
|
|
459
459
|
<!-- generated: identifier-shapes -- bin/refresh_docs.py, do not edit by hand -->
|
|
460
|
-
| Platform
|
|
461
|
-
|
|
|
462
|
-
| natmod
|
|
463
|
-
| usermod `esp32`
|
|
464
|
-
| usermod `qemu`
|
|
465
|
-
| usermod `rp2`
|
|
466
|
-
| usermod `samd`
|
|
467
|
-
| usermod `unix`
|
|
468
|
-
| usermod `webassembly` | `{tag}-{arch}`
|
|
469
|
-
| usermod `windows`
|
|
460
|
+
| Platform | Shape | Example |
|
|
461
|
+
| --------------------- | ----------------------- | ------------------------------------------ |
|
|
462
|
+
| natmod | `mpy{abi}-{tag}-{arch}` | `mpy6.3-v1.29.0-armv6m` |
|
|
463
|
+
| usermod `esp32` | `{tag}-esp32-{board}` | `v1.29.0-esp32-ARDUINO_NANO_ESP32` |
|
|
464
|
+
| usermod `qemu` | `{tag}-qemu-{board}` | `v1.29.0-qemu-MICROBIT` |
|
|
465
|
+
| usermod `rp2` | `{tag}-rp2-{board}` | `v1.29.0-rp2-ADAFRUIT_FEATHER_RP2040` |
|
|
466
|
+
| usermod `samd` | `{tag}-samd-{board}` | `v1.29.0-samd-ADAFRUIT_FEATHER_M0_EXPRESS` |
|
|
467
|
+
| usermod `unix` | `{tag}-{arch}` | `v1.29.0-manylinux_2_28_aarch64` |
|
|
468
|
+
| usermod `webassembly` | `{tag}-{arch}` | `v1.29.0-wasm32` |
|
|
469
|
+
| usermod `windows` | `{tag}-{arch}` | `v1.29.0-win32` |
|
|
470
470
|
<!-- /generated: identifier-shapes -->
|
|
471
471
|
|
|
472
472
|
The shape genuinely differs per usermod port — `unix`/`windows`/
|
|
@@ -754,16 +754,16 @@ the port**, because it is that port's own build axis:
|
|
|
754
754
|
| `esp32`, `rp2`, `webassembly` | *none* | `CIBMP_WEBASSEMBLY_DOCKER_IMAGE` |
|
|
755
755
|
|
|
756
756
|
|
|
757
|
-
| Variable | Effect
|
|
758
|
-
| --------------------------------------- |
|
|
757
|
+
| Variable | Effect |
|
|
758
|
+
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
759
759
|
| `CIBMP_CACHE_PATH` | Where fetched MicroPython checkouts and ESP-IDF are cached. Defaults to `$XDG_CACHE_HOME/cibuildmp`, or `~/.cache/cibuildmp`. Pin it in CI when a later step needs the checkout by path — `<CIBMP_CACHE_PATH>/micropython/<tag>` |
|
|
760
|
-
| `CIBMP_REPORT_PATH` | Where the JSON build report is written
|
|
761
|
-
| `CIBMP_TIMEOUT` | Seconds before a build container is killed (`docker kill`, not just the CLI). No limit by default. **usermod only** -- natmod's own container call does not consult it
|
|
762
|
-
| `CIBMP_<PORT>_<TARGET>_TIMEOUT` | The same, for one container — `CIBMP_UNIX_MANYLINUX_2_28_X86_64_TIMEOUT`
|
|
763
|
-
| `CIBMP_<PORT>_<TARGET>_DOCKER_IMAGE` | Run this (port, target) in a different image — a locally built one, or a fork's. Wins over the pinned default. Omit the `<TARGET>` segment for a port with no per-build image axis (`CIBMP_WEBASSEMBLY_DOCKER_IMAGE`)
|
|
764
|
-
| `CIBMP_<PORT>_<TARGET>_DOCKER_PLATFORM` | Same shape, for the container's `--platform`
|
|
765
|
-
| `CIBMP_DEBUG_TRACEBACK` | Print a full traceback instead of a one-line error (same as `--debug-traceback`)
|
|
766
|
-
| `CIBMP_DISABLE_GITHUB_STEP_SUMMARY` | Suppress the step-summary table on GitHub Actions
|
|
760
|
+
| `CIBMP_REPORT_PATH` | Where the JSON build report is written |
|
|
761
|
+
| `CIBMP_TIMEOUT` | Seconds before a build container is killed (`docker kill`, not just the CLI). No limit by default. **usermod only** -- natmod's own container call does not consult it |
|
|
762
|
+
| `CIBMP_<PORT>_<TARGET>_TIMEOUT` | The same, for one container — `CIBMP_UNIX_MANYLINUX_2_28_X86_64_TIMEOUT` |
|
|
763
|
+
| `CIBMP_<PORT>_<TARGET>_DOCKER_IMAGE` | Run this (port, target) in a different image — a locally built one, or a fork's. Wins over the pinned default. Omit the `<TARGET>` segment for a port with no per-build image axis (`CIBMP_WEBASSEMBLY_DOCKER_IMAGE`) |
|
|
764
|
+
| `CIBMP_<PORT>_<TARGET>_DOCKER_PLATFORM` | Same shape, for the container's `--platform` |
|
|
765
|
+
| `CIBMP_DEBUG_TRACEBACK` | Print a full traceback instead of a one-line error (same as `--debug-traceback`) |
|
|
766
|
+
| `CIBMP_DISABLE_GITHUB_STEP_SUMMARY` | Suppress the step-summary table on GitHub Actions |
|
|
767
767
|
|
|
768
768
|
### Precedence
|
|
769
769
|
|
|
@@ -1236,7 +1236,7 @@ scheduled `test-all-platforms.yml` run since.
|
|
|
1236
1236
|
<tr>
|
|
1237
1237
|
<td><code>esp32</code></td>
|
|
1238
1238
|
<td>
|
|
1239
|
-
every board across <code>v1.
|
|
1239
|
+
every board across <code>v1.29.0</code>/<code>v1.29.0</code>[^esp32ci]
|
|
1240
1240
|
</td>
|
|
1241
1241
|
<td><code>esp_idf_base</code> (Docker) -- ESP-IDF cloned on the host, installed in-container, per-board <code>idf_target</code>/<code>idf_version</code></td>
|
|
1242
1242
|
<td>✅</td>
|
|
@@ -1375,7 +1375,7 @@ quietly mislabelled `.mpy` when they do not.
|
|
|
1375
1375
|
|
|
1376
1376
|
**No `dynruntime.mk` default covers either axis fully**, which this
|
|
1377
1377
|
paragraph did not used to say: `BUILD` defaulted to an unscoped `build` up
|
|
1378
|
-
to v1.
|
|
1378
|
+
to v1.29.0 and to `build-$(ARCH)` from v1.29.0 — arch-scoped from that tag
|
|
1379
1379
|
on, tag-scoped in no release at all, since `MPY_DIR` is the only thing that
|
|
1380
1380
|
knows which release is being built. So on v1.29.0 and later the arch
|
|
1381
1381
|
collision cannot happen by default; the tag one still can, and only your
|
|
@@ -17,10 +17,15 @@ in the same scheduled job.
|
|
|
17
17
|
Three upstream shapes, which is why [0046] asked for one script per shape
|
|
18
18
|
rather than one generic checker:
|
|
19
19
|
|
|
20
|
-
- **GitHub releases
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
- **GitHub releases.** For `xtensa_esp`/`windows` the pinned tag is in the
|
|
21
|
+
Dockerfile's own URL; compare against the repo's own latest release.
|
|
22
|
+
`arm-none-eabi`/`riscv-none-elf` (both `embedded_base` since record 0096)
|
|
23
|
+
are the same upstream shape but no longer a Dockerfile fact at all --
|
|
24
|
+
[0087]/[0089] moved their real pins into `resources/pinned_toolchains.toml`'s
|
|
25
|
+
own `[cross]` tables, keyed by `(cross, version)` because more than one
|
|
26
|
+
verified version is pinned at once (per-row floor/ceiling windows, e.g.
|
|
27
|
+
`mimxrt`'s below-13 ceiling). This checker reads every version pinned for
|
|
28
|
+
that cross and reports whether the newest has fallen behind upstream.
|
|
24
29
|
- **emsdk** (`webassembly`) -- pinned by *build hash*, which looks
|
|
25
30
|
uncomparable and is not: `emscripten-core/emsdk` publishes
|
|
26
31
|
`emscripten-releases-tags.json` mapping every release to its hash, so
|
|
@@ -39,6 +44,7 @@ import hashlib
|
|
|
39
44
|
import json
|
|
40
45
|
import re
|
|
41
46
|
import sys
|
|
47
|
+
import tomllib
|
|
42
48
|
import urllib.error
|
|
43
49
|
import urllib.request
|
|
44
50
|
from dataclasses import dataclass
|
|
@@ -46,6 +52,8 @@ from pathlib import Path
|
|
|
46
52
|
|
|
47
53
|
REPO = Path(__file__).resolve().parent.parent
|
|
48
54
|
DOCKER = REPO / "docker"
|
|
55
|
+
RESOURCES = REPO / "src" / "cibuildmp" / "resources"
|
|
56
|
+
PINNED_TOOLCHAINS = RESOURCES / "pinned_toolchains.toml"
|
|
49
57
|
|
|
50
58
|
GITHUB_LATEST = "https://api.github.com/repos/{repo}/releases/latest"
|
|
51
59
|
EMSDK_TAGS = (
|
|
@@ -60,37 +68,41 @@ class Pin:
|
|
|
60
68
|
dockerfile: str
|
|
61
69
|
# How to find the pinned value in that file, group(1) being the value.
|
|
62
70
|
pattern: str
|
|
63
|
-
kind: str # "github" | "emsdk" | "unversioned"
|
|
64
|
-
upstream: str = "" # owner/repo for "github"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
#
|
|
69
|
-
# `
|
|
70
|
-
#
|
|
71
|
-
#
|
|
72
|
-
#
|
|
73
|
-
#
|
|
74
|
-
#
|
|
75
|
-
#
|
|
76
|
-
#
|
|
77
|
-
#
|
|
78
|
-
#
|
|
79
|
-
#
|
|
71
|
+
kind: str # "github" | "cross-toml" | "emsdk" | "unversioned"
|
|
72
|
+
upstream: str = "" # owner/repo for "github"/"cross-toml"
|
|
73
|
+
cross: str = "" # `pinned_toolchains.toml` table key, for "cross-toml"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
# `arm-none-eabi`/`riscv-none-elf` used to be grepped straight out of
|
|
77
|
+
# `embedded_base.Dockerfile`'s own `ARG TOOLCHAIN_URL=`. [0087]/[0089]
|
|
78
|
+
# deleted that line (the tarball is fetched at container run time now, per
|
|
79
|
+
# row, not baked at image-build time) and moved the real pins into
|
|
80
|
+
# `resources/pinned_toolchains.toml`'s own `[cross]` tables -- and unlike
|
|
81
|
+
# the Dockerfile's single shared `ARG`, that table genuinely holds more
|
|
82
|
+
# than one verified version per cross at once (e.g. `mimxrt`'s own
|
|
83
|
+
# below-13 ceiling, record 0088), because different `(tag, scope)` windows
|
|
84
|
+
# resolve to different versions. There is no longer one "the" pin to
|
|
85
|
+
# compare against upstream; `kind="cross-toml"` instead reads every
|
|
86
|
+
# version pinned for that cross and reports whether the *newest* of them
|
|
87
|
+
# has fallen behind upstream's own latest release -- the question this
|
|
88
|
+
# checker can still answer ("is it time to add a newer entry"), without
|
|
89
|
+
# claiming the older, intentionally-kept versions are drift.
|
|
80
90
|
PINS = (
|
|
81
91
|
Pin(
|
|
82
92
|
"arm-none-eabi",
|
|
83
|
-
"
|
|
84
|
-
|
|
85
|
-
"
|
|
93
|
+
"",
|
|
94
|
+
"",
|
|
95
|
+
"cross-toml",
|
|
86
96
|
"xpack-dev-tools/arm-none-eabi-gcc-xpack",
|
|
97
|
+
"arm-none-eabi-",
|
|
87
98
|
),
|
|
88
99
|
Pin(
|
|
89
100
|
"riscv-none-elf",
|
|
90
|
-
"
|
|
91
|
-
|
|
92
|
-
"
|
|
101
|
+
"",
|
|
102
|
+
"",
|
|
103
|
+
"cross-toml",
|
|
93
104
|
"xpack-dev-tools/riscv-none-elf-gcc-xpack",
|
|
105
|
+
"riscv64-unknown-elf-",
|
|
94
106
|
),
|
|
95
107
|
Pin(
|
|
96
108
|
"xtensa-esp",
|
|
@@ -135,6 +147,24 @@ def _pinned(pin: Pin) -> str:
|
|
|
135
147
|
return match.group(1)
|
|
136
148
|
|
|
137
149
|
|
|
150
|
+
def _version_key(version: str) -> tuple[int, ...]:
|
|
151
|
+
return tuple(int(part) for part in re.findall(r"\d+", version))
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def _newest_cross_pin(pin: Pin) -> tuple[str, int]:
|
|
155
|
+
"""(newest version string, how many versions are pinned) for `pin.cross`
|
|
156
|
+
in `pinned_toolchains.toml`."""
|
|
157
|
+
with PINNED_TOOLCHAINS.open("rb") as handle:
|
|
158
|
+
data = tomllib.load(handle)
|
|
159
|
+
versions = list(data.get(pin.cross, {}))
|
|
160
|
+
if not versions:
|
|
161
|
+
raise SystemExit(
|
|
162
|
+
f"{pin.name}: no versions pinned for {pin.cross!r} in "
|
|
163
|
+
f"{PINNED_TOOLCHAINS.relative_to(REPO)}"
|
|
164
|
+
)
|
|
165
|
+
return max(versions, key=_version_key), len(versions)
|
|
166
|
+
|
|
167
|
+
|
|
138
168
|
def _latest_github(repo: str) -> str:
|
|
139
169
|
data = json.loads(_get(GITHUB_LATEST.format(repo=repo)))
|
|
140
170
|
return str(data["tag_name"]).lstrip("v")
|
|
@@ -166,12 +196,16 @@ def _tarball_url(pin: Pin) -> str:
|
|
|
166
196
|
|
|
167
197
|
def check(pin: Pin, *, slow: bool) -> int:
|
|
168
198
|
"""0 when current, 1 when behind. Prints one line either way."""
|
|
169
|
-
|
|
199
|
+
if pin.kind == "cross-toml":
|
|
200
|
+
pinned, count = _newest_cross_pin(pin)
|
|
201
|
+
else:
|
|
202
|
+
pinned = _pinned(pin)
|
|
170
203
|
try:
|
|
171
|
-
if pin.kind
|
|
204
|
+
if pin.kind in ("github", "cross-toml"):
|
|
172
205
|
latest = _latest_github(pin.upstream)
|
|
173
206
|
stale = pinned.lstrip("v") != latest
|
|
174
|
-
|
|
207
|
+
suffix = f" (newest of {count} pinned)" if pin.kind == "cross-toml" else ""
|
|
208
|
+
arrow = f"{pinned} -> {latest}{suffix}" if stale else f"{pinned}{suffix}"
|
|
175
209
|
elif pin.kind == "emsdk":
|
|
176
210
|
version, latest_hash = _latest_emsdk()
|
|
177
211
|
stale = pinned != latest_hash
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
# `FROM` lines below are copied verbatim from that file's own cells, kept
|
|
20
20
|
# in the same order.
|
|
21
21
|
|
|
22
|
-
FROM quay.io/pypa/musllinux_1_2_x86_64@sha256:
|
|
23
|
-
FROM quay.io/pypa/musllinux_1_2_i686@sha256:
|
|
24
|
-
FROM quay.io/pypa/musllinux_1_2_aarch64@sha256:
|
|
25
|
-
FROM quay.io/pypa/musllinux_1_2_ppc64le@sha256:
|
|
26
|
-
FROM quay.io/pypa/musllinux_1_2_s390x@sha256:
|
|
27
|
-
FROM quay.io/pypa/musllinux_1_2_armv7l@sha256:
|
|
28
|
-
FROM quay.io/pypa/musllinux_1_2_riscv64@sha256:
|
|
29
|
-
FROM quay.io/pypa/manylinux_2_31_armv7l@sha256:
|
|
30
|
-
FROM quay.io/pypa/manylinux_2_39_riscv64@sha256:
|
|
22
|
+
FROM quay.io/pypa/musllinux_1_2_x86_64@sha256:621f8004ed526a5a6bf6a866fb415ad8da54d59a991e50b3b69167c3a768a616 AS musllinux_1_2_x86_64
|
|
23
|
+
FROM quay.io/pypa/musllinux_1_2_i686@sha256:7ff9262769ecadb9b889d2977f2e1fd47400a161664502ecb0eda9291d9abdfb AS musllinux_1_2_i686
|
|
24
|
+
FROM quay.io/pypa/musllinux_1_2_aarch64@sha256:4dffcd49f0b6fc6928a49915f3cd939f973bbecbdfe96e1e7926b6049bc0bad5 AS musllinux_1_2_aarch64
|
|
25
|
+
FROM quay.io/pypa/musllinux_1_2_ppc64le@sha256:fbc1983eb04e9bf311bd743863472b3ac9840edc3f2ca4e9dd4085d26f24fc84 AS musllinux_1_2_ppc64le
|
|
26
|
+
FROM quay.io/pypa/musllinux_1_2_s390x@sha256:a7254c085d6c28ae74acb229af697133a8827535ac26b542b7be014272ba81d2 AS musllinux_1_2_s390x
|
|
27
|
+
FROM quay.io/pypa/musllinux_1_2_armv7l@sha256:7fa1e5ac26e79b9aa6b64aac4ca2479eadd8d00229f178eb5495edd538e9ff4b AS musllinux_1_2_armv7l
|
|
28
|
+
FROM quay.io/pypa/musllinux_1_2_riscv64@sha256:f8bf1ede4138d95937a98362ce482453d717c62d22207f038619262b180d4ab8 AS musllinux_1_2_riscv64
|
|
29
|
+
FROM quay.io/pypa/manylinux_2_31_armv7l@sha256:3503ad3cef1b2a35ee05048eaebdb93ad1b4a6e9426af7f43dbe7658243ab0db AS manylinux_2_31_armv7l
|
|
30
|
+
FROM quay.io/pypa/manylinux_2_39_riscv64@sha256:000de3e1037325a6cc13615c1218061a56e1ece60ecdbe1a4572933a90654d18 AS manylinux_2_39_riscv64
|
|
@@ -69,12 +69,16 @@
|
|
|
69
69
|
# away exactly the reproducibility the `download` strategy exists for in
|
|
70
70
|
# a locally-reproducible tool (D2/D3) -- see docs/reference/
|
|
71
71
|
# open-questions.md's own "Toolchain pinning vs. reproducibility"
|
|
72
|
-
# question
|
|
73
|
-
#
|
|
72
|
+
# question. Its "nothing checks whether a pinned version is stale" note,
|
|
73
|
+
# cited here until this bump, is no longer true: [0046] made that its own
|
|
74
|
+
# work item, and `bin/update_toolchains.py --check` -- run weekly by
|
|
75
|
+
# `.github/workflows/pin-staleness.yml` -- reads the build hash out of the
|
|
76
|
+
# URL below and compares it against emsdk's own `latest` alias. That is
|
|
77
|
+
# exactly how this pin was found behind and moved.
|
|
74
78
|
#
|
|
75
|
-
# The pinned version is the emscripten-releases-tags.json alias "6.0.
|
|
79
|
+
# The pinned version is the emscripten-releases-tags.json alias "6.0.9",
|
|
76
80
|
# recorded as the value it resolved to when pinned, not the literal
|
|
77
|
-
# string "latest". `
|
|
81
|
+
# string "latest". `f04ea239d533260dd1db760dd2d668d5f9a88d6b` in the URL
|
|
78
82
|
# is the emscripten-releases build hash that alias resolved to; the URL
|
|
79
83
|
# itself follows emsdk's own
|
|
80
84
|
# emscripten_releases_download_url_template
|
|
@@ -135,17 +139,23 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
135
139
|
nodejs \
|
|
136
140
|
&& rm -rf /var/lib/apt/lists/*
|
|
137
141
|
|
|
138
|
-
#
|
|
139
|
-
#
|
|
140
|
-
#
|
|
141
|
-
#
|
|
142
|
-
#
|
|
143
|
-
#
|
|
144
|
-
#
|
|
145
|
-
#
|
|
142
|
+
# emsdk 6.0.9, linux-x64 -- verified live before repinning here, the same
|
|
143
|
+
# way the version before it was: downloaded the real tarball, computed
|
|
144
|
+
# this exact sha256 locally, and inspected its own internal layout with
|
|
145
|
+
# `tar tJf` (a top-level `install/` directory containing
|
|
146
|
+
# `install/emscripten/` -- with `emcc.py` and the `cache/` tree chmod'd
|
|
147
|
+
# below -- and `install/bin/`, which is what the ENV PATH further down
|
|
148
|
+
# actually points at) rather than assumed from the tarball's name alone.
|
|
149
|
+
#
|
|
150
|
+
# This no longer tracks `resources/usermod.toml`'s own [emsdk] table, as
|
|
151
|
+
# it said until this bump: [0092] deleted that file and usermod/emsdk.py's
|
|
152
|
+
# `ResolvedEmsdk.env()` went with the bare-host resolver. The pin of
|
|
153
|
+
# record is here, and nowhere else -- note `[usermod.webassembly]` in
|
|
154
|
+
# build-platforms.toml deliberately records *no* emsdk version, because
|
|
155
|
+
# MicroPython's own tools/ci.sh has never pinned one.
|
|
146
156
|
RUN curl -fsSL -o /tmp/wasm-binaries.tar.xz \
|
|
147
|
-
https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/
|
|
148
|
-
echo "
|
|
157
|
+
https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/f04ea239d533260dd1db760dd2d668d5f9a88d6b/wasm-binaries.tar.xz && \
|
|
158
|
+
echo "d5c6c2917fbc1cae1a7d1e581f1c0b2817369dd57f94c7a0d05921476f1a7287 /tmp/wasm-binaries.tar.xz" | sha256sum -c - && \
|
|
149
159
|
mkdir -p /opt/emsdk && \
|
|
150
160
|
tar -xJf /tmp/wasm-binaries.tar.xz -C /opt/emsdk && \
|
|
151
161
|
rm /tmp/wasm-binaries.tar.xz && \
|
|
@@ -92,15 +92,22 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
92
92
|
g++-mingw-w64-i686 \
|
|
93
93
|
&& rm -rf /var/lib/apt/lists/*
|
|
94
94
|
|
|
95
|
-
#
|
|
96
|
-
#
|
|
97
|
-
#
|
|
98
|
-
#
|
|
99
|
-
#
|
|
100
|
-
#
|
|
95
|
+
# llvm-mingw 20260908, linux-x64. **Nothing else to keep this in step
|
|
96
|
+
# with** -- this line used to say "pinned to resources/usermod.toml's own
|
|
97
|
+
# [llvm-mingw] table", which contradicted the "pin of record" paragraph
|
|
98
|
+
# above it: [0092] deleted that file, and usermod/llvmmingw.py with its
|
|
99
|
+
# `sole_directory()` call went with [0050]/[0042]. The version, URL and
|
|
100
|
+
# sha256 right here are the whole pin.
|
|
101
|
+
#
|
|
102
|
+
# The tarball still unpacks to a single
|
|
103
|
+
# `llvm-mingw-20260908-ucrt-ubuntu-22.04-x86_64/` directory -- re-checked
|
|
104
|
+
# with `tar tJf` at this version, not carried over from the last one, and
|
|
105
|
+
# so were the four `<arch>-w64-mingw32-` bin/ prefixes build_windows.py
|
|
106
|
+
# drives. --strip-components=1 flattens that away so the install prefix is
|
|
107
|
+
# a stable /opt/llvm-mingw regardless of the version in the name.
|
|
101
108
|
RUN curl -fsSL -o /tmp/llvm-mingw.tar.xz \
|
|
102
|
-
https://github.com/mstorsjo/llvm-mingw/releases/download/
|
|
103
|
-
echo "
|
|
109
|
+
https://github.com/mstorsjo/llvm-mingw/releases/download/20260908/llvm-mingw-20260908-ucrt-ubuntu-22.04-x86_64.tar.xz && \
|
|
110
|
+
echo "2258c745e3155870c80793f3e8c80b28fbde11b9ff73c4c78783635b3440b092 /tmp/llvm-mingw.tar.xz" | sha256sum -c - && \
|
|
104
111
|
mkdir -p /opt/llvm-mingw && \
|
|
105
112
|
tar -xJf /tmp/llvm-mingw.tar.xz -C /opt/llvm-mingw --strip-components=1 && \
|
|
106
113
|
rm /tmp/llvm-mingw.tar.xz
|
|
@@ -37,7 +37,7 @@ for why the Windows actions never call it either).
|
|
|
37
37
|
|
|
38
38
|
| Input | Required | Default | Description |
|
|
39
39
|
| --------- | -------- | ------- | --------------------------------------- |
|
|
40
|
-
| `mpy_tag` | yes | -- | MicroPython release tag, e.g. `v1.
|
|
40
|
+
| `mpy_tag` | yes | -- | MicroPython release tag, e.g. `v1.29.0` |
|
|
41
41
|
|
|
42
42
|
No outputs; exports `MPY_DIR` to `$GITHUB_ENV` as a side effect.
|
|
43
43
|
|
|
@@ -300,11 +300,11 @@ jobs:
|
|
|
300
300
|
with:
|
|
301
301
|
submodules: recursive
|
|
302
302
|
|
|
303
|
-
- uses: ballistics-lab/cibuildmp/.github/actions/fetch-micropython@v0.7.
|
|
303
|
+
- uses: ballistics-lab/cibuildmp/.github/actions/fetch-micropython@v0.7.3
|
|
304
304
|
with:
|
|
305
|
-
mpy_tag: v1.
|
|
305
|
+
mpy_tag: v1.29.0
|
|
306
306
|
|
|
307
|
-
- uses: ballistics-lab/cibuildmp/.github/actions/build-natmod@v0.7.
|
|
307
|
+
- uses: ballistics-lab/cibuildmp/.github/actions/build-natmod@v0.7.3
|
|
308
308
|
with:
|
|
309
309
|
arch: ${{ matrix.arch }}
|
|
310
310
|
# natmod_dir: natmod # default; a7p passes micropython/natmod
|
|
@@ -195,6 +195,39 @@ Still unbuilt from this record: nothing writes results anywhere but the job log
|
|
|
195
195
|
([0029]'s `stepsummary.py` is still unreused here), and the "are consumers' own
|
|
196
196
|
`micropython` pins in scope" question stays open.
|
|
197
197
|
|
|
198
|
+
## Addendum, 2026-09-07 — `update_toolchains.py`'s own `arm-none-eabi`/`riscv-none-elf`
|
|
199
|
+
## rows fixed; the weekly job had been crashing, not merely reporting drift
|
|
200
|
+
|
|
201
|
+
[0096]'s own text ("`bin/update_toolchains.py`'s `PINS`... a pre-existing gap... the real
|
|
202
|
+
fix... is [0090]'s own scope") turned out to point at the wrong record: [0090]'s item 1
|
|
203
|
+
fixed `bin/refresh_toolchain_pins.py`'s per-row `gcc` check, a different script for a
|
|
204
|
+
different question (is a row's pinned compiler inside its own floor/ceiling window). It
|
|
205
|
+
never touched `update_toolchains.py`, so the gap [0096] described — `_pinned()` regexing
|
|
206
|
+
an `ARG TOOLCHAIN_URL=` line that [0087]/[0089] had already deleted from
|
|
207
|
+
`embedded_base.Dockerfile` for both crosses — was still live and unclosed. Found live
|
|
208
|
+
while investigating a failing `pin-staleness.yml` run (2026-09-07): the "toolchain
|
|
209
|
+
tarballs" step raised `SystemExit("arm-none-eabi: no pin found...")` and crashed the whole
|
|
210
|
+
checker before it ever reached `riscv-none-elf`/`xtensa-esp`/`llvm-mingw`/`emsdk`/
|
|
211
|
+
`xtensa-lx106` — every scheduled run since [0087] landed had been reporting a hard
|
|
212
|
+
failure, not real staleness, with the other five pins never actually checked.
|
|
213
|
+
|
|
214
|
+
Fixed by making `PINS` read those two crosses from `resources/pinned_toolchains.toml`'s
|
|
215
|
+
own `[cross]` tables (the same file [0087]/[0089] actually moved the real pins into)
|
|
216
|
+
instead of a Dockerfile `ARG` that no longer exists. That table is a genuinely different
|
|
217
|
+
shape from the rest of `PINS`: it holds more than one verified version per cross at once
|
|
218
|
+
(`arm-none-eabi-` alone carries three, kept for different rows' own floor/ceiling
|
|
219
|
+
windows — [0088]'s `mimxrt` ceiling among them), so there is no single "the" pin left to
|
|
220
|
+
compare against upstream the way a Dockerfile `ARG` was. `check()` now reads every version
|
|
221
|
+
pinned for a cross and reports whether the *newest* has fallen behind upstream's latest
|
|
222
|
+
release, which is the question this checker can still honestly answer without mislabelling
|
|
223
|
+
an intentionally-kept older version as drift. Verified live: the script now runs to
|
|
224
|
+
completion and reports each of the six pins (three came back `UNKNOWN` on an unauthenticated
|
|
225
|
+
GitHub API rate limit in this sandbox, exactly like the two `github`-kind pins that were
|
|
226
|
+
never in question — not a regression this fix introduced), instead of crashing on the first.
|
|
227
|
+
|
|
228
|
+
Still open: `--slow`'s `xtensa-lx106` path, and everything this record's own "Still unbuilt"
|
|
229
|
+
paragraph above already named.
|
|
230
|
+
|
|
198
231
|
[0002]: 0002-delegate-compile-own-environment.md
|
|
199
232
|
[0010]: 0010-pinned-data-in-resources.md
|
|
200
233
|
[0013]: 0013-micropython-list-dedup-by-abi.md
|
|
@@ -202,3 +235,7 @@ Still unbuilt from this record: nothing writes results anywhere but the job log
|
|
|
202
235
|
[0033]: 0033-cibuildmp-never-builds-docker-image-itself.md
|
|
203
236
|
[0044]: 0044-unix-native-images-landed.md
|
|
204
237
|
[0068]: 0068-docker-dependabot-grouping-and-mipsel-ubuntu-26-04.md
|
|
238
|
+
[0087]: 0087-arm-riscv-embedded-thin-out-toolchain-version-lands.md
|
|
239
|
+
[0088]: 0088-mimxrt-own-floor.md
|
|
240
|
+
[0090]: 0090-toolchain-pins-checker-and-0058-text-followup.md
|
|
241
|
+
[0096]: 0096-arm-riscv-embedded-collapse-into-embedded-base.md
|