cibuildmp 0.7.2__tar.gz → 0.7.4__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.
Files changed (282) hide show
  1. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/coverage.yml +1 -1
  2. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/pin-staleness.yml +1 -1
  3. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/pre-commit.yml +1 -1
  4. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/probe-overlay.yml +1 -1
  5. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/publish.yml +1 -1
  6. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/CHANGELOG.md +46 -1
  7. {cibuildmp-0.7.2/src/cibuildmp.egg-info → cibuildmp-0.7.4}/PKG-INFO +25 -25
  8. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/README.md +24 -24
  9. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/action.yml +1 -1
  10. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/update_toolchains.py +64 -30
  11. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docker/pypa-tracker.Dockerfile +9 -9
  12. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docker/webassembly.Dockerfile +24 -14
  13. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docker/windows.Dockerfile +15 -8
  14. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/ACTIONS.md +4 -4
  15. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0046-pin-staleness-checker.md +37 -0
  16. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0096-arm-riscv-embedded-collapse-into-embedded-base.md +10 -0
  17. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/resources/pinned_docker_images.toml +16 -16
  18. cibuildmp-0.7.4/src/cibuildmp/resources/pinned_pypa_images.toml +81 -0
  19. {cibuildmp-0.7.2 → cibuildmp-0.7.4/src/cibuildmp.egg-info}/PKG-INFO +25 -25
  20. cibuildmp-0.7.4/src/cibuildmp.egg-info/scm_version.json +8 -0
  21. cibuildmp-0.7.2/src/cibuildmp/resources/pinned_pypa_images.toml +0 -81
  22. cibuildmp-0.7.2/src/cibuildmp.egg-info/scm_version.json +0 -8
  23. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.claude/settings.json +0 -0
  24. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.claude/skills/docker-local/SKILL.md +0 -0
  25. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.dockerignore +0 -0
  26. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/actions/build-natmod/action.yml +0 -0
  27. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/actions/build-usermod-armv7m/action.yml +0 -0
  28. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/actions/build-usermod-esp32/action.yml +0 -0
  29. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/actions/build-usermod-rp2040/action.yml +0 -0
  30. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/actions/build-usermod-unix/action.yml +0 -0
  31. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/actions/build-usermod-webassembly/action.yml +0 -0
  32. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/actions/build-usermod-windows/action.yml +0 -0
  33. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/actions/clone-micropython/action.yml +0 -0
  34. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/actions/fetch-micropython/action.yml +0 -0
  35. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/actions/run-with-wine/action.yml +0 -0
  36. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/dependabot.yml +0 -0
  37. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/build-examples.yml +0 -0
  38. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/publish-docker-images.yml +0 -0
  39. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/test-all-platforms.yml +0 -0
  40. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/test-platforms.yml +0 -0
  41. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/test-upstream-natmod.yml +0 -0
  42. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/test-upstream-usermodule.yml +0 -0
  43. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/verify-docker-images.yml +0 -0
  44. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.github/workflows/verify-lv-binding-micropython.yml +0 -0
  45. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.gitignore +0 -0
  46. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/.pre-commit-config.yaml +0 -0
  47. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/CLAUDE.md +0 -0
  48. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/CONTRIBUTING.md +0 -0
  49. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/LICENSE +0 -0
  50. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/fetch_bootlin_metadata.py +0 -0
  51. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/ghcr_prune_scan.py +0 -0
  52. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/plan_test_matrix.py +0 -0
  53. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/publish_images.py +0 -0
  54. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/refresh_docs.py +0 -0
  55. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/refresh_natmod_archs.py +0 -0
  56. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/refresh_toolchain_pins.py +0 -0
  57. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/refresh_toolchains.py +0 -0
  58. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/refresh_usermod_boards.py +0 -0
  59. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/render_test_summary.py +0 -0
  60. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/bin/update_docker.py +0 -0
  61. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/cibuildmp.toml +0 -0
  62. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docker/embedded_base.Dockerfile +0 -0
  63. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docker/esp_idf_base.Dockerfile +0 -0
  64. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docker/manylinux_2_41_mipsel.Dockerfile +0 -0
  65. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docker/natmod_host.Dockerfile +0 -0
  66. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docker/ppc64le_linux.Dockerfile +0 -0
  67. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docker/xtensa_esp.Dockerfile +0 -0
  68. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docker/xtensa_lx106.Dockerfile +0 -0
  69. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/0000-TRACKER.md +0 -0
  70. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/BACKLOG.md +0 -0
  71. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0001-natmod-first.md +0 -0
  72. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0002-delegate-compile-own-environment.md +0 -0
  73. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0003-toolchain-resolution-per-target.md +0 -0
  74. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0004-config-file-location.md +0 -0
  75. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0005-one-identifier-namespace.md +0 -0
  76. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0006-no-test-runners-phase1.md +0 -0
  77. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0007-usermod-vendors-mpbuild-board-db.md +0 -0
  78. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0008-tool-distribution-deferred.md +0 -0
  79. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0009-one-job-loop-fanout-opt-in.md +0 -0
  80. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0010-pinned-data-in-resources.md +0 -0
  81. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0011-one-repo-absorbs-micropython-native-ci.md +0 -0
  82. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0012-pyelftools-ar-own-deps.md +0 -0
  83. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0013-micropython-list-dedup-by-abi.md +0 -0
  84. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0014-mip-package-per-identifier.md +0 -0
  85. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0015-rv32imc-arch-flags-identifier.md +0 -0
  86. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0016-usermod-user-c-modules-dir-vs-cmake.md +0 -0
  87. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0017-usermod-frozen-manifest-merge.md +0 -0
  88. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0018-windows-provisioning-fourth-story.md +0 -0
  89. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0019-esp-idf-provisioning-heaviest.md +0 -0
  90. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0020-usermod-runner-selection-structural.md +0 -0
  91. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0021-usermod-execution-central-value.md +0 -0
  92. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0022-zephyr-third-selector-axis.md +0 -0
  93. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0023-usermod-identifier-scheme-config-output.md +0 -0
  94. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0024-unix-armhf-mipsel-cross-compiles.md +0 -0
  95. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0025-dockerfiles-bake-unix-cross-toolchains.md +0 -0
  96. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0026-one-docker-image-per-port.md +0 -0
  97. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0027-orchestrate-output-dir-and-exec-bit-fixes.md +0 -0
  98. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0028-container-per-port-migration-plan.md +0 -0
  99. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0029-github-actions-job-summary.md +0 -0
  100. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0030-container-approach-natmod-and-docker-vs-qemu.md +0 -0
  101. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0031-unix-musllinux-libc-axis.md +0 -0
  102. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0032-unix-docker-default-and-webassembly-wiring.md +0 -0
  103. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0033-cibuildmp-never-builds-docker-image-itself.md +0 -0
  104. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0034-m0-skeleton.md +0 -0
  105. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0035-m1-micropython-mpy-cross-provisioning.md +0 -0
  106. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0036-m2-toolchain-resolver.md +0 -0
  107. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0037-m3-the-build-itself.md +0 -0
  108. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0038-m5-adopt-in-three-repos.md +0 -0
  109. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0039-usermod-composite-actions-status.md +0 -0
  110. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0040-usermod-tests-deferred.md +0 -0
  111. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0041-docs-restructure.md +0 -0
  112. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0042-windows-docker-wiring-and-resolver-removal.md +0 -0
  113. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0043-unix-adopts-cibuildwheel-native-image-model.md +0 -0
  114. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0044-unix-native-images-landed.md +0 -0
  115. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0045-only-is-a-filter-not-a-forced-identifier.md +0 -0
  116. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0047-run-output-parity-with-cibuildwheel.md +0 -0
  117. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0048-build-skip-live-in-opposite-tables.md +0 -0
  118. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0049-no-matrix-generation-archs-vocabulary.md +0 -0
  119. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0050-natmod-is-docker-only.md +0 -0
  120. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0051-usermod-identifiers-have-no-version-axis.md +0 -0
  121. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0052-config-is-a-tree-not-a-selector-matrix.md +0 -0
  122. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0053-usermod-ports-without-a-build-driver.md +0 -0
  123. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0054-usermod-example-from-upstream-usercmodule.md +0 -0
  124. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0055-natmod-example-from-upstream-natmod.md +0 -0
  125. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0056-usermod-with-no-user-c-module.md +0 -0
  126. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0057-multiple-modules-per-build.md +0 -0
  127. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0058-image-groups-are-toolchains-not-ports.md +0 -0
  128. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0059-ghcr-untagged-cleanup-deletes-referenced-manifests.md +0 -0
  129. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0060-rp2-build-driver.md +0 -0
  130. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0061-usermod-build-drivers-split-per-port.md +0 -0
  131. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0062-test-platforms-per-port-orchestrator.md +0 -0
  132. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0063-keep-going-and-json-build-report.md +0 -0
  133. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0065-bucketed-test-matrix-planning.md +0 -0
  134. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0066-extra-cmake-args.md +0 -0
  135. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0067-user-c-modules-flat-shape-autodetect.md +0 -0
  136. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0068-docker-dependabot-grouping-and-mipsel-ubuntu-26-04.md +0 -0
  137. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0069-upstream-usercmodule-narrow-ci-slice.md +0 -0
  138. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0070-unix-collected-binary-missing-repaired-lib-sidecar.md +0 -0
  139. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0071-micropython-placeholder-in-user-c-modules.md +0 -0
  140. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0072-natmod-micropython-placeholder-and-upstream-natmod-ci.md +0 -0
  141. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0073-composite-actions-are-a-permanent-legacy-fallback.md +0 -0
  142. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0074-usermod-family-table-and-retired-table-messages-removed.md +0 -0
  143. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0075-top-level-scalar-keys-are-validated.md +0 -0
  144. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0076-the-mipsel-holdout-is-bclibc-and-wasm3-not-a7p.md +0 -0
  145. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0077-docs-drift-is-a-failing-test-not-a-discipline-problem.md +0 -0
  146. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0078-uncontexted-agent-audit-as-a-docs-test.md +0 -0
  147. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0079-collected-artifact-is-more-than-one-file.md +0 -0
  148. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0080-windows-and-qemu-usermod-smoke-tests.md +0 -0
  149. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0081-output-dir-gitignore.md +0 -0
  150. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0082-natmod-old-tags-fail-mpy-cross-under-gcc-15.md +0 -0
  151. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0083-windows-fully-prebuilt-mingw-toolchain.md +0 -0
  152. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0084-per-identifier-toolchain-tarballs-and-the-end-of-shared-images.md +0 -0
  153. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0085-arm-embedded-thins-out-and-the-toolchain-version-becomes-a-row-fact.md +0 -0
  154. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0086-generic-in-container-toolchain-tarball-fetch.md +0 -0
  155. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0087-arm-riscv-embedded-thin-out-toolchain-version-lands.md +0 -0
  156. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0088-mimxrt-own-floor.md +0 -0
  157. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0089-natmod-arm-riscv-embedded-toolchain-version.md +0 -0
  158. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0090-toolchain-pins-checker-and-0058-text-followup.md +0 -0
  159. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0091-tag-cflags-into-every-ports-mpy-cross.md +0 -0
  160. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0092-usermod-toml-and-tag-cflags-against-build-platforms.md +0 -0
  161. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0093-pre-v1-20-0-tags-had-never-built.md +0 -0
  162. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0094-arm-gnu-toolchain-is-a-real-third-choice-for-arm-embedded.md +0 -0
  163. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0095-cache-root-splits-source-from-build-state.md +0 -0
  164. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0097-lv-binding-micropython-builds-through-cibuildmp.md +0 -0
  165. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0098-build-override-may-be-as-unnecessary-as-scratch-root-was.md +0 -0
  166. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0099-variant-becomes-a-real-per-target-override-not-an-identifier-axis.md +0 -0
  167. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/records/0100-samd-build-driver-plan.md +0 -0
  168. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/reference/design.md +0 -0
  169. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/reference/open-questions.md +0 -0
  170. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/reference/toolchain-facts/bootlin.toml +0 -0
  171. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/reference/toolchain-facts/toolchains.toml +0 -0
  172. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/docs/reference/vendored-images.md +0 -0
  173. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/bare-firmware/cibuildmp.toml +0 -0
  174. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/lv_binding_micropython/cibuildmp.toml +0 -0
  175. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/lv_binding_micropython/smoke_test.py +0 -0
  176. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/natmod/cibuildmp.toml +0 -0
  177. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/template/cibuildmp.toml +0 -0
  178. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/template/micropython.cmake +0 -0
  179. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/template/natmod/Makefile +0 -0
  180. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/template/natmod/template.c +0 -0
  181. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/template/src/facade.py +0 -0
  182. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/template/src/template_core.c +0 -0
  183. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/template/src/template_core.h +0 -0
  184. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/template/usermod/manifest.py +0 -0
  185. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/template/usermod/micropython.mk +0 -0
  186. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/template/usermod/template_usermod.c +0 -0
  187. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/usercmodule/cibuildmp.toml +0 -0
  188. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/usercmodule/micropython.cmake +0 -0
  189. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/usercmodule/smoke_test.py +0 -0
  190. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/Makefile +0 -0
  191. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/NOTICE +0 -0
  192. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/cibuildmp.toml +0 -0
  193. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/runtime/esp8266-rom.S +0 -0
  194. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/runtime/libc.c +0 -0
  195. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/runtime/runtime.c +0 -0
  196. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/runtime/wasm-rt-impl-tableops.inc +0 -0
  197. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/runtime/wasm-rt-impl.c +0 -0
  198. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/runtime/wasm-rt-impl.h +0 -0
  199. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/runtime/wasm-rt-mem-impl-helper.inc +0 -0
  200. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/runtime/wasm-rt-mem-impl.c +0 -0
  201. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/runtime/wasm-rt.h +0 -0
  202. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/examples/wasm2mpy/test/zig.wasm +0 -0
  203. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/pyproject.toml +0 -0
  204. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/setup.cfg +0 -0
  205. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/__init__.py +0 -0
  206. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/__main__.py +0 -0
  207. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/cli.py +0 -0
  208. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/dockerrun.py +0 -0
  209. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/options.py +0 -0
  210. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/__init__.py +0 -0
  211. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/natmod/__init__.py +0 -0
  212. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/natmod/build.py +0 -0
  213. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/natmod/options.py +0 -0
  214. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/natmod/targets.py +0 -0
  215. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/__init__.py +0 -0
  216. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/boards.py +0 -0
  217. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/build_common.py +0 -0
  218. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/build_esp32.py +0 -0
  219. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/build_qemu.py +0 -0
  220. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/build_rp2.py +0 -0
  221. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/build_samd.py +0 -0
  222. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/build_unix.py +0 -0
  223. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/build_webassembly.py +0 -0
  224. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/build_windows.py +0 -0
  225. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/espidf.py +0 -0
  226. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/manifests.py +0 -0
  227. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/options.py +0 -0
  228. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/orchestrate.py +0 -0
  229. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/portinfo.py +0 -0
  230. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/platforms/usermod/targets.py +0 -0
  231. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/report.py +0 -0
  232. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/resources/build-platforms.toml +0 -0
  233. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/resources/natmod.toml +0 -0
  234. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/resources/pinned_toolchains.toml +0 -0
  235. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/resources/tag_cflags.toml +0 -0
  236. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/resources.py +0 -0
  237. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/selector.py +0 -0
  238. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/sources.py +0 -0
  239. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/stepsummary.py +0 -0
  240. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp/toolchain_fetch.py +0 -0
  241. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp.egg-info/SOURCES.txt +0 -0
  242. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp.egg-info/dependency_links.txt +0 -0
  243. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp.egg-info/entry_points.txt +0 -0
  244. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp.egg-info/requires.txt +0 -0
  245. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp.egg-info/scm_file_list.json +0 -0
  246. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/src/cibuildmp.egg-info/top_level.txt +0 -0
  247. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/conftest.py +0 -0
  248. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_boards.py +0 -0
  249. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_bootlin_table.py +0 -0
  250. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_build.py +0 -0
  251. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_cli.py +0 -0
  252. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_cli_multi_family.py +0 -0
  253. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_dockerrun_container.py +0 -0
  254. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_docs.py +0 -0
  255. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_espidf.py +0 -0
  256. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_manifests.py +0 -0
  257. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_options.py +0 -0
  258. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_options_cascade.py +0 -0
  259. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_overrides.py +0 -0
  260. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_plan_test_matrix.py +0 -0
  261. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_platform_row_facts.py +0 -0
  262. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_portinfo.py +0 -0
  263. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_render_test_summary.py +0 -0
  264. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_report.py +0 -0
  265. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_selector.py +0 -0
  266. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_sources.py +0 -0
  267. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_stepsummary.py +0 -0
  268. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_targets.py +0 -0
  269. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_toolchain_fetch.py +0 -0
  270. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_build_common.py +0 -0
  271. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_build_esp32.py +0 -0
  272. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_build_qemu.py +0 -0
  273. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_build_rp2.py +0 -0
  274. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_build_samd.py +0 -0
  275. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_build_unix.py +0 -0
  276. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_build_webassembly.py +0 -0
  277. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_build_windows.py +0 -0
  278. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_dockerrun.py +0 -0
  279. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_options.py +0 -0
  280. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_orchestrate.py +0 -0
  281. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/tests/test_usermod_targets.py +0 -0
  282. {cibuildmp-0.7.2 → cibuildmp-0.7.4}/uv.lock +0 -0
@@ -31,7 +31,7 @@ jobs:
31
31
  steps:
32
32
  - uses: actions/checkout@v7
33
33
 
34
- - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
34
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
35
35
 
36
36
  - run: uv sync
37
37
 
@@ -40,7 +40,7 @@ jobs:
40
40
  steps:
41
41
  - uses: actions/checkout@v7
42
42
 
43
- - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
43
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
44
44
 
45
45
  # Both checkers run even if the first reports drift: the point is one
46
46
  # report naming everything that is behind, not the first thing that
@@ -53,7 +53,7 @@ jobs:
53
53
  && github.head_ref || '' }}
54
54
 
55
55
  - name: Install uv
56
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
56
+ uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
57
57
  with:
58
58
  # The project's own floor (`requires-python = ">=3.11"`), so CI
59
59
  # checks the version a user is most likely to be furthest from.
@@ -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@v6
65
+ - uses: actions/checkout@v7
66
66
 
67
67
  - name: Docker and kernel facts
68
68
  run: |
@@ -65,7 +65,7 @@ jobs:
65
65
  fetch-depth: 0 # required for setuptools-scm to see tags
66
66
 
67
67
  - name: Install uv
68
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
68
+ uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
69
69
  with:
70
70
  # 3.11 is this package's floor (tomllib); 3.14 is what action.yml
71
71
  # pin, so every runner here is on one version.
@@ -7,6 +7,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.7.4] - 2026-09-29
11
+
12
+ ### Changed
13
+
14
+ - **Refreshed every pinned PyPA manylinux/musllinux base image to the
15
+ `2026.09.29-1` upstream build.** This updates all 34 entries in
16
+ `pinned_pypa_images.toml`, including the nine images Dependabot reported,
17
+ and synchronizes the 14 direct runtime mirrors in
18
+ `pinned_docker_images.toml`. The remaining image-group pins are immutable
19
+ cibuildmp GHCR digests and were deliberately left untouched.
20
+
21
+ ## [0.7.3] - 2026-09-10
22
+
23
+ ### Changed
24
+
25
+ - **The two toolchain pins [0046]'s weekly checker reported behind are moved**:
26
+ llvm-mingw `20260616` -> `20260908` (`docker/windows.Dockerfile`) and emsdk
27
+ `6.0.8`/`9d70dbe8` -> `6.0.9`/`f04ea239` (`docker/webassembly.Dockerfile`).
28
+ Both sha256s recomputed from the real tarball, and each one's internal layout
29
+ re-checked with `tar tJf` rather than carried over from the previous version:
30
+ llvm-mingw still unpacks to a single top-level directory (what
31
+ `--strip-components=1` assumes) and still ships all four
32
+ `<arch>-w64-mingw32-` bin/ prefixes `build_windows.py` drives; the emsdk
33
+ tarball still has the `install/emscripten` + `install/bin` shape the image's
34
+ own `ENV PATH` points at. `bin/update_toolchains.py --check` now reports
35
+ every pin current. Nothing about the emsdk bump touches
36
+ `[usermod.webassembly]`, which deliberately records no emsdk version at all
37
+ ([0092]) -- MicroPython's own `tools/ci.sh` has never pinned one.
38
+ - **Both bumped `RUN` steps stopped claiming to track a deleted file.** Each
39
+ said it was "pinned to `resources/usermod.toml`'s own `[llvm-mingw]`/`[emsdk]`
40
+ table -- keep the URL and sha256 in step with it", directly contradicting the
41
+ "**This file is the pin of record**" paragraph a few lines above it in the
42
+ same file: [0092] deleted `resources/usermod.toml`, and `usermod/llvmmingw.py`
43
+ / `usermod/emsdk.py` went with the bare-host resolvers ([0050]/[0042]). The
44
+ webassembly one also cited `open-questions.md`'s "nothing checks whether a
45
+ pinned version is stale" note, which [0046] and `pin-staleness.yml` made false
46
+ -- that checker is precisely what found both of these.
47
+
48
+
10
49
  ## [0.7.2] - 2026-09-06
11
50
 
12
51
  ### Added
@@ -1669,7 +1708,9 @@ ballistics-lab/micropython-native-ci, but both tags exist here too, so every
1669
1708
  link resolves inside this repository -- the version line continues rather
1670
1709
  than restarting (see the 0.3.0a1 entry). -->
1671
1710
 
1672
- [Unreleased]: https://github.com/ballistics-lab/cibuildmp/compare/v0.7.2...HEAD
1711
+ [Unreleased]: https://github.com/ballistics-lab/cibuildmp/compare/v0.7.4...HEAD
1712
+ [0.7.4]: https://github.com/ballistics-lab/cibuildmp/compare/v0.7.3...v0.7.4
1713
+ [0.7.3]: https://github.com/ballistics-lab/cibuildmp/compare/v0.7.2...v0.7.3
1673
1714
  [0.7.2]: https://github.com/ballistics-lab/cibuildmp/compare/v0.7.1...v0.7.2
1674
1715
  [0.7.1]: https://github.com/ballistics-lab/cibuildmp/compare/v0.7.0...v0.7.1
1675
1716
  [0.7.0]: https://github.com/ballistics-lab/cibuildmp/compare/v0.6.2...v0.7.0
@@ -1708,3 +1749,7 @@ than restarting (see the 0.3.0a1 entry). -->
1708
1749
  [0053]: docs/records/0053-usermod-ports-without-a-build-driver.md
1709
1750
  [0060]: docs/records/0060-rp2-build-driver.md
1710
1751
  [0100]: docs/records/0100-samd-build-driver-plan.md
1752
+ [0046]: docs/records/0046-pin-staleness-checker.md
1753
+ [0092]: docs/records/0092-usermod-toml-and-tag-cflags-against-build-platforms.md
1754
+ [0050]: docs/records/0050-natmod-is-docker-only.md
1755
+ [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.2
3
+ Version: 0.7.4
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.2
160
+ - uses: ballistics-lab/cibuildmp@v0.7.4
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.2
179
+ - uses: ballistics-lab/cibuildmp@v0.7.4
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.2
238
+ - uses: ballistics-lab/cibuildmp@v0.7.4
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 | 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` |
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.28.0</code>/<code>v1.29.0</code>[^esp32ci]
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.28.0 and to `build-$(ARCH)` from v1.29.0 — arch-scoped from that tag
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.2
128
+ - uses: ballistics-lab/cibuildmp@v0.7.4
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.2
147
+ - uses: ballistics-lab/cibuildmp@v0.7.4
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.2
206
+ - uses: ballistics-lab/cibuildmp@v0.7.4
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 | 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` |
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.28.0</code>/<code>v1.29.0</code>[^esp32ci]
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.28.0 and to `build-$(ARCH)` from v1.29.0 — arch-scoped from that tag
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
@@ -183,7 +183,7 @@ runs:
183
183
  sudo apt-get install -y --no-install-recommends \
184
184
  build-essential git ca-certificates curl python3
185
185
 
186
- - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
186
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
187
187
 
188
188
  - name: Install cibuildmp
189
189
  shell: bash
@@ -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** (`arm-none-eabi`, `riscv-none-elf` -- both now
21
- `embedded_base`, record 0096 --, `xtensa_esp`, `windows`) -- the pinned
22
- tag is in the URL; compare against the repo's
23
- own latest release.
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
- # `arm-none-eabi`/`riscv-none-elf` below point at `embedded_base.Dockerfile`
68
- # (record 0096 merged what used to be `arm_embedded.Dockerfile`/
69
- # `riscv_embedded.Dockerfile`) purely so `_pinned()` reads a file that
70
- # exists -- **neither actually matches any more.** [0087]/[0089] already
71
- # deleted the `ARG TOOLCHAIN_URL=` line this regex needs from both former
72
- # files (the tarball is fetched at container run time now, per-row, not
73
- # baked at image-build time), so `_pinned()` has raised
74
- # `SystemExit(f"{pin.name}: no pin found...")` for both entries since
75
- # [0087] landed -- a real, pre-existing gap this record does not close,
76
- # only avoids widening into a harder `FileNotFoundError` by keeping the
77
- # filename real. The actual fix (reading `resources/pinned_toolchains.toml`'s
78
- # own per-cross pin instead of grepping a Dockerfile `ARG`) is [0090]'s own
79
- # scope, not this Dockerfile-merge's.
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
- "embedded_base.Dockerfile",
84
- r"xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v([^/]+)/",
85
- "github",
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
- "embedded_base.Dockerfile",
91
- r"xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v([^/]+)/",
92
- "github",
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
- pinned = _pinned(pin)
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 == "github":
204
+ if pin.kind in ("github", "cross-toml"):
172
205
  latest = _latest_github(pin.upstream)
173
206
  stale = pinned.lstrip("v") != latest
174
- arrow = f"{pinned} -> {latest}" if stale else pinned
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:8900a53ed236d85edd6868387b3e3327c45774156519ad492fe8b1c2a434d1dc AS musllinux_1_2_x86_64
23
- FROM quay.io/pypa/musllinux_1_2_i686@sha256:e9029eacb01a207fc991eed8abccf55f653900b4b83068e37fb0ea201176a64a AS musllinux_1_2_i686
24
- FROM quay.io/pypa/musllinux_1_2_aarch64@sha256:ab0391c77648e2b15d37e3e5b8c3d43a0c4a1ca0fb3ab2f60d252be3474d2975 AS musllinux_1_2_aarch64
25
- FROM quay.io/pypa/musllinux_1_2_ppc64le@sha256:e745f8e8e8c7c8e02e6379502d0b73f7cc4fd95283e011a78063292740f3cf42 AS musllinux_1_2_ppc64le
26
- FROM quay.io/pypa/musllinux_1_2_s390x@sha256:411d3d433dde4b3a9fce85122f7080110e2ec3543ca6c22578acb4a61c38cc14 AS musllinux_1_2_s390x
27
- FROM quay.io/pypa/musllinux_1_2_armv7l@sha256:bb213c77861583faa326b24de1c413dab0e7c51af76f8a30f5abcaf749da5265 AS musllinux_1_2_armv7l
28
- FROM quay.io/pypa/musllinux_1_2_riscv64@sha256:3c2e2c26c10c2788046e54e816d8880011e4af9c4292cb735705a89870248082 AS musllinux_1_2_riscv64
29
- FROM quay.io/pypa/manylinux_2_31_armv7l@sha256:bb0c6355c62cd0971f17a66969b1bce15222e67e4064667e25030923bb216bfe AS manylinux_2_31_armv7l
30
- FROM quay.io/pypa/manylinux_2_39_riscv64@sha256:4e74e5408c307666116196383a3bbf741b171fda049c776dac731e5b6087a1d5 AS manylinux_2_39_riscv64
22
+ FROM quay.io/pypa/musllinux_1_2_x86_64@sha256:bcd644f5f08de4c286b4e8a99652d106a7e56881d8e0b3f92d471f05f5b60fd3 AS musllinux_1_2_x86_64
23
+ FROM quay.io/pypa/musllinux_1_2_i686@sha256:cf2b239c5788f6c6de291a8213e3ca0cd4d443e96ac3f275bd285ae426a0ca7f AS musllinux_1_2_i686
24
+ FROM quay.io/pypa/musllinux_1_2_aarch64@sha256:fecc36f309839b485f04e36b6fd2272d98b84936e68122f3de9bd65c253e76dc AS musllinux_1_2_aarch64
25
+ FROM quay.io/pypa/musllinux_1_2_ppc64le@sha256:bed4b2eaa5013b4a67e68307be9517246288608111665e8f0d32b457e5a307a5 AS musllinux_1_2_ppc64le
26
+ FROM quay.io/pypa/musllinux_1_2_s390x@sha256:4a1af0293993de3ba12789a38ebcd4fce21bd8c1b1c04fab06cb75cd3c8cff78 AS musllinux_1_2_s390x
27
+ FROM quay.io/pypa/musllinux_1_2_armv7l@sha256:36d3a643f82372b2e69690e1111db1583d568752ce2888f13af6f85f1c8ff1cc AS musllinux_1_2_armv7l
28
+ FROM quay.io/pypa/musllinux_1_2_riscv64@sha256:e47e6e52f302f9cbfb57a806f41c0fef25017c6070b4e9912ab6db495153109e AS musllinux_1_2_riscv64
29
+ FROM quay.io/pypa/manylinux_2_31_armv7l@sha256:222db91566088f0643a1a36fa0be0ba22b0aa426da7cbb4e3a7109a02d044133 AS manylinux_2_31_armv7l
30
+ FROM quay.io/pypa/manylinux_2_39_riscv64@sha256:0058fcf87e482872960e1d583483769886bb6e95ff9116a6a965b843419838bf 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, and its note that nothing checks whether a pinned version is
73
- # stale.
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.8",
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". `9d70dbe8860ccdd3595f6e6065d94bfb543ae955` in the URL
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
- # Pinned exactly as resources/usermod.toml's own [emsdk] table
139
- # (version = "6.0.8", [emsdk.platform.linux-x64]) -- verified live
140
- # before pinning here: downloaded the real tarball, confirmed this
141
- # exact sha256 with `sha256sum -c`, and inspected its own internal
142
- # layout with `tar tJf` (a top-level `install/` directory containing
143
- # `install/emscripten/` and `install/bin/`, exactly what
144
- # `usermod/emsdk.py`'s own `ResolvedEmsdk.env()` already expects on a
145
- # bare-host resolve) rather than assumed from the tarball's name alone.
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/9d70dbe8860ccdd3595f6e6065d94bfb543ae955/wasm-binaries.tar.xz && \
148
- echo "9bea769c189d9f52196e74283fb86937318cc24bf14879f2c6bdd19862131901 /tmp/wasm-binaries.tar.xz" | sha256sum -c - && \
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
- # Pinned to resources/usermod.toml's own [llvm-mingw] table (version
96
- # 20260616, linux-x64) -- keep the URL and sha256 in step with it. The
97
- # tarball unpacks to a single `llvm-mingw-20260616-ucrt-ubuntu-22.04-x86_64/`
98
- # directory (`sole_directory()`'s own assumption in llvmmingw.py);
99
- # --strip-components=1 flattens that away so the install prefix is a
100
- # stable /opt/llvm-mingw regardless of the version in the name.
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/20260616/llvm-mingw-20260616-ucrt-ubuntu-22.04-x86_64.tar.xz && \
103
- echo "534b92e067b22a6b4441f48ae9240a3341b17825d04d577eab0cf85c44b4deda /tmp/llvm-mingw.tar.xz" | sha256sum -c - && \
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