cibuildmp 0.4.1__tar.gz → 0.4.2__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 (235) hide show
  1. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/workflows/test-all-platforms.yml +21 -18
  2. cibuildmp-0.4.2/.github/workflows/test-upstream-natmod.yml +131 -0
  3. cibuildmp-0.4.2/.github/workflows/test-upstream-usermodule.yml +241 -0
  4. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/CHANGELOG.md +65 -1
  5. {cibuildmp-0.4.1/src/cibuildmp.egg-info → cibuildmp-0.4.2}/PKG-INFO +8 -7
  6. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/README.md +7 -6
  7. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/windows.Dockerfile +2 -0
  8. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/0000-TRACKER.md +26 -5
  9. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/ACTIONS.md +2 -2
  10. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0054-usermod-example-from-upstream-usercmodule.md +26 -3
  11. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0055-natmod-example-from-upstream-natmod.md +59 -4
  12. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0068-docker-dependabot-grouping-and-mipsel-ubuntu-26-04.md +9 -0
  13. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0069-upstream-usercmodule-narrow-ci-slice.md +80 -3
  14. cibuildmp-0.4.2/docs/records/0071-micropython-placeholder-in-user-c-modules.md +85 -0
  15. cibuildmp-0.4.2/docs/records/0072-natmod-micropython-placeholder-and-upstream-natmod-ci.md +180 -0
  16. cibuildmp-0.4.2/examples/natmod/cibuildmp.toml +62 -0
  17. cibuildmp-0.4.2/examples/usercmodule/cibuildmp.toml +60 -0
  18. cibuildmp-0.4.2/examples/usercmodule/micropython.cmake +36 -0
  19. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/natmod/__init__.py +18 -1
  20. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/natmod/build.py +19 -6
  21. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/orchestrate.py +16 -1
  22. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/resources/pinned_docker_images.toml +1 -1
  23. {cibuildmp-0.4.1 → cibuildmp-0.4.2/src/cibuildmp.egg-info}/PKG-INFO +8 -7
  24. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/SOURCES.txt +4 -0
  25. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/scm_file_list.json +4 -0
  26. cibuildmp-0.4.2/src/cibuildmp.egg-info/scm_version.json +8 -0
  27. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_build.py +27 -0
  28. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_cli.py +29 -0
  29. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_usermod_orchestrate.py +36 -0
  30. cibuildmp-0.4.1/.github/workflows/test-upstream-usermodule.yml +0 -168
  31. cibuildmp-0.4.1/examples/usercmodule/cibuildmp.toml +0 -16
  32. cibuildmp-0.4.1/examples/usercmodule/micropython.cmake +0 -36
  33. cibuildmp-0.4.1/src/cibuildmp.egg-info/scm_version.json +0 -8
  34. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.dockerignore +0 -0
  35. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/actions/build-natmod/action.yml +0 -0
  36. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/actions/build-usermod-armv7m/action.yml +0 -0
  37. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/actions/build-usermod-esp32/action.yml +0 -0
  38. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/actions/build-usermod-rp2040/action.yml +0 -0
  39. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/actions/build-usermod-unix/action.yml +0 -0
  40. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/actions/build-usermod-webassembly/action.yml +0 -0
  41. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/actions/build-usermod-windows/action.yml +0 -0
  42. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/actions/clone-micropython/action.yml +0 -0
  43. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/actions/fetch-micropython/action.yml +0 -0
  44. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/dependabot.yml +0 -0
  45. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/workflows/build-examples.yml +0 -0
  46. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/workflows/publish-docker-images.yml +0 -0
  47. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/workflows/publish.yml +0 -0
  48. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/workflows/test-platforms.yml +0 -0
  49. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/workflows/tests.yml +0 -0
  50. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.github/workflows/verify-docker-images.yml +0 -0
  51. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/.gitignore +0 -0
  52. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/CLAUDE.md +0 -0
  53. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/CONTRIBUTING.md +0 -0
  54. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/LICENSE +0 -0
  55. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/action.yml +0 -0
  56. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/bin/ghcr_prune_scan.py +0 -0
  57. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/bin/plan_test_matrix.py +0 -0
  58. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/bin/publish_images.py +0 -0
  59. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/bin/refresh_natmod_archs.py +0 -0
  60. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/bin/refresh_usermod_boards.py +0 -0
  61. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/bin/render_test_summary.py +0 -0
  62. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/bin/update_docker.py +0 -0
  63. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/cibuildmp.toml +0 -0
  64. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/arm_embedded.Dockerfile +0 -0
  65. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/esp_idf_base.Dockerfile +0 -0
  66. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/manylinux_2_28_aarch64.Dockerfile +0 -0
  67. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/manylinux_2_28_i686.Dockerfile +0 -0
  68. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/manylinux_2_28_ppc64le.Dockerfile +0 -0
  69. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/manylinux_2_28_s390x.Dockerfile +0 -0
  70. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/manylinux_2_28_x86_64.Dockerfile +0 -0
  71. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/manylinux_2_39_mipsel.Dockerfile +0 -0
  72. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/natmod_host.Dockerfile +0 -0
  73. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/ppc64le_linux.Dockerfile +0 -0
  74. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/pypa-tracker.Dockerfile +0 -0
  75. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/riscv_embedded.Dockerfile +0 -0
  76. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/webassembly.Dockerfile +0 -0
  77. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/xtensa_esp.Dockerfile +0 -0
  78. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docker/xtensa_lx106.Dockerfile +0 -0
  79. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/BACKLOG.md +0 -0
  80. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0001-natmod-first.md +0 -0
  81. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0002-delegate-compile-own-environment.md +0 -0
  82. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0003-toolchain-resolution-per-target.md +0 -0
  83. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0004-config-file-location.md +0 -0
  84. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0005-one-identifier-namespace.md +0 -0
  85. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0006-no-test-runners-phase1.md +0 -0
  86. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0007-usermod-vendors-mpbuild-board-db.md +0 -0
  87. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0008-tool-distribution-deferred.md +0 -0
  88. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0009-one-job-loop-fanout-opt-in.md +0 -0
  89. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0010-pinned-data-in-resources.md +0 -0
  90. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0011-one-repo-absorbs-micropython-native-ci.md +0 -0
  91. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0012-pyelftools-ar-own-deps.md +0 -0
  92. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0013-micropython-list-dedup-by-abi.md +0 -0
  93. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0014-mip-package-per-identifier.md +0 -0
  94. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0015-rv32imc-arch-flags-identifier.md +0 -0
  95. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0016-usermod-user-c-modules-dir-vs-cmake.md +0 -0
  96. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0017-usermod-frozen-manifest-merge.md +0 -0
  97. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0018-windows-provisioning-fourth-story.md +0 -0
  98. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0019-esp-idf-provisioning-heaviest.md +0 -0
  99. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0020-usermod-runner-selection-structural.md +0 -0
  100. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0021-usermod-execution-central-value.md +0 -0
  101. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0022-zephyr-third-selector-axis.md +0 -0
  102. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0023-usermod-identifier-scheme-config-output.md +0 -0
  103. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0024-unix-armhf-mipsel-cross-compiles.md +0 -0
  104. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0025-dockerfiles-bake-unix-cross-toolchains.md +0 -0
  105. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0026-one-docker-image-per-port.md +0 -0
  106. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0027-orchestrate-output-dir-and-exec-bit-fixes.md +0 -0
  107. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0028-container-per-port-migration-plan.md +0 -0
  108. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0029-github-actions-job-summary.md +0 -0
  109. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0030-container-approach-natmod-and-docker-vs-qemu.md +0 -0
  110. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0031-unix-musllinux-libc-axis.md +0 -0
  111. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0032-unix-docker-default-and-webassembly-wiring.md +0 -0
  112. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0033-cibuildmp-never-builds-docker-image-itself.md +0 -0
  113. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0034-m0-skeleton.md +0 -0
  114. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0035-m1-micropython-mpy-cross-provisioning.md +0 -0
  115. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0036-m2-toolchain-resolver.md +0 -0
  116. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0037-m3-the-build-itself.md +0 -0
  117. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0038-m5-adopt-in-three-repos.md +0 -0
  118. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0039-usermod-composite-actions-status.md +0 -0
  119. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0040-usermod-tests-deferred.md +0 -0
  120. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0041-docs-restructure.md +0 -0
  121. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0042-windows-docker-wiring-and-resolver-removal.md +0 -0
  122. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0043-unix-adopts-cibuildwheel-native-image-model.md +0 -0
  123. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0044-unix-native-images-landed.md +0 -0
  124. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0045-only-is-a-filter-not-a-forced-identifier.md +0 -0
  125. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0046-pin-staleness-checker.md +0 -0
  126. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0047-run-output-parity-with-cibuildwheel.md +0 -0
  127. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0048-build-skip-live-in-opposite-tables.md +0 -0
  128. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0049-no-matrix-generation-archs-vocabulary.md +0 -0
  129. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0050-natmod-is-docker-only.md +0 -0
  130. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0051-usermod-identifiers-have-no-version-axis.md +0 -0
  131. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0052-config-is-a-tree-not-a-selector-matrix.md +0 -0
  132. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0053-usermod-ports-without-a-build-driver.md +0 -0
  133. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0056-usermod-with-no-user-c-module.md +0 -0
  134. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0057-multiple-modules-per-build.md +0 -0
  135. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0058-image-groups-are-toolchains-not-ports.md +0 -0
  136. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0059-ghcr-untagged-cleanup-deletes-referenced-manifests.md +0 -0
  137. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0060-rp2-build-driver.md +0 -0
  138. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0061-usermod-build-drivers-split-per-port.md +0 -0
  139. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0062-test-platforms-per-port-orchestrator.md +0 -0
  140. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0063-keep-going-and-json-build-report.md +0 -0
  141. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0065-bucketed-test-matrix-planning.md +0 -0
  142. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0066-extra-cmake-args.md +0 -0
  143. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0067-user-c-modules-flat-shape-autodetect.md +0 -0
  144. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/records/0070-unix-collected-binary-missing-repaired-lib-sidecar.md +0 -0
  145. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/reference/design.md +0 -0
  146. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/reference/open-questions.md +0 -0
  147. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/docs/reference/vendored-images.md +0 -0
  148. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/template/cibuildmp.toml +0 -0
  149. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/template/micropython.cmake +0 -0
  150. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/template/natmod/Makefile +0 -0
  151. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/template/natmod/template.c +0 -0
  152. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/template/src/facade.py +0 -0
  153. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/template/src/template_core.c +0 -0
  154. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/template/src/template_core.h +0 -0
  155. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/template/usermod/manifest.py +0 -0
  156. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/template/usermod/micropython.mk +0 -0
  157. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/template/usermod/template_usermod.c +0 -0
  158. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/usercmodule/smoke_test.py +0 -0
  159. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/Makefile +0 -0
  160. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/NOTICE +0 -0
  161. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/cibuildmp.toml +0 -0
  162. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/esp8266-rom.S +0 -0
  163. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/libc.c +0 -0
  164. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/runtime.c +0 -0
  165. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt-impl-tableops.inc +0 -0
  166. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt-impl.c +0 -0
  167. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt-impl.h +0 -0
  168. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt-mem-impl-helper.inc +0 -0
  169. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt-mem-impl.c +0 -0
  170. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt.h +0 -0
  171. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/examples/wasm2mpy/test/zig.wasm +0 -0
  172. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/pyproject.toml +0 -0
  173. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/setup.cfg +0 -0
  174. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/__init__.py +0 -0
  175. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/__main__.py +0 -0
  176. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/cli.py +0 -0
  177. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/dockerrun.py +0 -0
  178. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/options.py +0 -0
  179. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/__init__.py +0 -0
  180. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/natmod/options.py +0 -0
  181. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/natmod/targets.py +0 -0
  182. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/__init__.py +0 -0
  183. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/boards.py +0 -0
  184. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_common.py +0 -0
  185. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_esp32.py +0 -0
  186. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_qemu.py +0 -0
  187. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_rp2.py +0 -0
  188. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_unix.py +0 -0
  189. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_webassembly.py +0 -0
  190. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_windows.py +0 -0
  191. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/espidf.py +0 -0
  192. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/manifests.py +0 -0
  193. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/options.py +0 -0
  194. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/portinfo.py +0 -0
  195. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/targets.py +0 -0
  196. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/report.py +0 -0
  197. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/resources/build-platforms.toml +0 -0
  198. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/resources/natmod.toml +0 -0
  199. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/resources/pinned_pypa_images.toml +0 -0
  200. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/resources/usermod.toml +0 -0
  201. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/resources.py +0 -0
  202. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/selector.py +0 -0
  203. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/sources.py +0 -0
  204. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp/stepsummary.py +0 -0
  205. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/dependency_links.txt +0 -0
  206. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/entry_points.txt +0 -0
  207. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/requires.txt +0 -0
  208. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/top_level.txt +0 -0
  209. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/conftest.py +0 -0
  210. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_boards.py +0 -0
  211. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_cli_multi_family.py +0 -0
  212. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_espidf.py +0 -0
  213. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_manifests.py +0 -0
  214. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_options.py +0 -0
  215. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_options_cascade.py +0 -0
  216. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_overrides.py +0 -0
  217. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_plan_test_matrix.py +0 -0
  218. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_portinfo.py +0 -0
  219. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_render_test_summary.py +0 -0
  220. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_report.py +0 -0
  221. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_selector.py +0 -0
  222. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_sources.py +0 -0
  223. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_stepsummary.py +0 -0
  224. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_targets.py +0 -0
  225. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_usermod_build_common.py +0 -0
  226. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_usermod_build_esp32.py +0 -0
  227. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_usermod_build_qemu.py +0 -0
  228. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_usermod_build_rp2.py +0 -0
  229. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_usermod_build_unix.py +0 -0
  230. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_usermod_build_webassembly.py +0 -0
  231. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_usermod_build_windows.py +0 -0
  232. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_usermod_dockerrun.py +0 -0
  233. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_usermod_options.py +0 -0
  234. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/tests/test_usermod_targets.py +0 -0
  235. {cibuildmp-0.4.1 → cibuildmp-0.4.2}/uv.lock +0 -0
@@ -23,11 +23,16 @@ name: Test platforms
23
23
  # first place -- not upload order, not sorted (docs/records/0065).
24
24
 
25
25
  on:
26
- pull_request:
27
- paths-ignore:
28
- - "**.md"
29
- - "docs/**"
30
- - "LICENSE"
26
+ # No `pull_request` any more: the full real matrix (200+ identifiers,
27
+ # bucketed across up to 20 concurrent jobs) takes far too long to run on
28
+ # every PR for how rarely its answer actually changes -- `push`/`pull_request`
29
+ # CI already runs `tests.yml`'s own unit suite and `build-examples.yml`'s
30
+ # narrower matrix on every change; this file is for the full sweep,
31
+ # wanted only occasionally, not gating every PR's own turnaround time.
32
+ # Weekly by default -- change the cron below, or just run
33
+ # `workflow_dispatch` by hand whenever a real answer is wanted sooner.
34
+ schedule:
35
+ - cron: "0 3 * * 0"
31
36
  workflow_dispatch:
32
37
  inputs:
33
38
  build:
@@ -50,15 +55,12 @@ concurrency:
50
55
 
51
56
  jobs:
52
57
  plan:
53
- # A Dependabot PR only ever touches `.github/dependabot.yml` itself or
54
- # a `docker/*.Dockerfile` -- a base-image bump, which
55
- # `verify-docker-images.yml` already build-checks directly. Running
56
- # this file's own 200+-identifier functional matrix on every one of
57
- # those (paths-ignore below only excludes **.md/docs/**/LICENSE, not
58
- # docker/**) burns the same concurrent-job budget this file's own
59
- # header comment already flags as the real ceiling, for a change this
60
- # matrix has nothing useful to say about. See docs/records/0068.
61
- if: github.actor != 'dependabot[bot]'
58
+ # No `if: github.actor != 'dependabot[bot]'` guard here any more --
59
+ # record 0068 added it specifically for the `pull_request` trigger a
60
+ # Dependabot docker/dependabot.yml PR would otherwise fire this on;
61
+ # dropping that trigger entirely (this file's own header comment) makes
62
+ # the guard moot, not just redundant, since `schedule`/`workflow_dispatch`
63
+ # never runs as that actor in the first place.
62
64
  runs-on: ubuntu-latest
63
65
  outputs:
64
66
  identifiers: ${{ steps.plan.outputs.identifiers }}
@@ -124,10 +126,11 @@ jobs:
124
126
  # passed back through `build`'s own outputs.
125
127
  aggregate-results:
126
128
  needs: [plan, build]
127
- # `always()` alone would still run this after `plan`'s own actor guard
128
- # skips it, with nothing to aggregate -- same guard, so a skipped plan
129
- # means a skipped aggregate too, not a report over zero buckets.
130
- if: always() && github.actor != 'dependabot[bot]'
129
+ # `always()`: render a summary even if a bucket in `build` failed --
130
+ # `test-platforms.yml`'s own `--keep-going` (record 0063) means a real
131
+ # failure there still uploads a report, and this is what turns every
132
+ # bucket's own report into the one table worth looking at.
133
+ if: always()
131
134
  runs-on: ubuntu-latest
132
135
  steps:
133
136
  - uses: actions/checkout@v7
@@ -0,0 +1,131 @@
1
+ name: Test upstream natmod
2
+
3
+ # Builds every one of MicroPython's own eleven `examples/natmod/*` modules
4
+ # through cibuildmp's real natmod path -- docs/records/0055 scoped why this
5
+ # fixture matters (it tests upstream's own natmod contract, not the one this
6
+ # project wrote for itself in `examples/template/natmod`) and found that
7
+ # contract does not fit unmodified; docs/records/0072 is the mechanism
8
+ # actually landed here and explains every choice below in full.
9
+ #
10
+ # build-features0: one job, deliberately building *two* arches for the same
11
+ # tag in a single invocation, not two separate single-arch jobs: [0055]'s own
12
+ # guard survey is entirely about what happens when cibuildmp builds several
13
+ # targets back to back in one checkout (a stale artifact, or an unscoped
14
+ # `build/`, silently carrying the *previous* target's binary into the next
15
+ # one's output) -- a job that only ever builds one target at a time would
16
+ # never actually exercise that risk. `verify_output()` (build.py, already
17
+ # part of every real build) is the check that would catch it: a wrong arch
18
+ # code in the .mpy header fails the build outright rather than shipping
19
+ # silently wrong -- but `examples/natmod/cibuildmp.toml`'s own
20
+ # `pre-build-command` (record 0072) removes the possibility structurally,
21
+ # for this same reason armv7emsp is a second *real* cross-compiled arch here
22
+ # and not just a second easy one: it shares this checkout and this same
23
+ # invocation with x64, the one thing a single-arch job can never test.
24
+ #
25
+ # build-upstream-natmod: the other ten modules, one `x64` build each (no
26
+ # arch-collision risk to re-prove per module -- that mechanism is
27
+ # `examples/natmod/cibuildmp.toml`'s own, verified once above, not a
28
+ # property of any one module's Makefile). `CIBMP_MODULE_DIR` overrides that
29
+ # file's own `features0` default per matrix entry -- `{micropython}` resolves
30
+ # the same way regardless of which layer supplied `module-dir` (record 0072).
31
+ # `btree` needs no `micropython-submodules` entry for its own
32
+ # `lib/berkeley-db-1.xx`: `sources.fetch_micropython()` prefers the release
33
+ # tarball, which already vendors every `lib/` submodule -- confirmed 2026-08-31
34
+ # against a real, tarball-fetched v1.29.0 checkout, on the bare host (no
35
+ # Docker in that session), building and `verify_output()`-checking all eleven
36
+ # modules for `x64` -- not assumed from [0055]'s own original, narrower
37
+ # "needs a submodule" citation (see docs/records/0072's own addendum).
38
+ #
39
+ # `examples/natmod/cibuildmp.toml` carries the whole mechanism otherwise --
40
+ # `make-target = "all"` (upstream's examples define no `dist` target at all)
41
+ # and its own `pre-build-command` clearing every `.mpy` plus the whole build
42
+ # tree before *every single* build. No job here sets either directly -- a
43
+ # bare `cibuildmp examples/natmod --build <identifier>` run, CI or local,
44
+ # resolves identically to what a job here does (module-dir aside, for the
45
+ # ten `CIBMP_MODULE_DIR`-overridden ones).
46
+ #
47
+ # No `docker/setup-qemu-action` needed anywhere here, unlike
48
+ # test-upstream-usermodule.yml's rp2/esp32/qemu legs: `dockerrun.platform_for()`
49
+ # resolves every non-`unix` port -- natmod included -- to a flat
50
+ # `linux/amd64`, confirmed directly against that function's own source, so
51
+ # every natmod image already runs native on a `ubuntu-latest` runner
52
+ # regardless of which arch's toolchain it carries.
53
+ #
54
+ # push: (no branches: filter), same reasoning build-examples.yml's own header
55
+ # already documents -- this needs to run on every push to a dev branch too.
56
+
57
+ on:
58
+ push:
59
+ pull_request:
60
+ paths-ignore:
61
+ - "**.md"
62
+ - "docs/**"
63
+ - "LICENSE"
64
+ workflow_dispatch:
65
+
66
+ concurrency:
67
+ group: test-upstream-natmod-${{ github.workflow }}-${{ github.ref }}
68
+ cancel-in-progress: true
69
+
70
+ env:
71
+ # Single source of truth for this job -- bump here, not by hand in the
72
+ # `build` line below, when this fixture moves to a newer tag. `mpy6.3`
73
+ # is that tag's own natmod ABI (`identifier_format = "mpy{mpy}-{tag}-
74
+ # {arch}"`, resources/build-platforms.toml), not an independent value --
75
+ # a tag bump that also changes ABI needs this updated too.
76
+ CIBMP_UPSTREAM_ABI_TAG: mpy6.3-v1.29.0
77
+
78
+ jobs:
79
+ # x64: a plain native arch, no cross-compiler at all (`images.x64 =
80
+ # "natmod_host"`) -- the cheapest possible leg.
81
+ #
82
+ # armv7emsp: a real cross-compiled arch (`arm-none-eabi-`, `images.
83
+ # armv7emsp = "arm_embedded"`) sharing this same checkout and this same
84
+ # `cibuildmp` invocation with x64 above -- the leg that actually exercises
85
+ # [0055]'s own finding, not just a second easy arch for breadth's sake.
86
+ build-features0:
87
+ runs-on: ubuntu-latest
88
+ env:
89
+ CIBMP_VERSION: 0.0.0-ci
90
+ steps:
91
+ - uses: actions/checkout@v7
92
+
93
+ - name: Build upstream examples/natmod/features0 (x64 + armv7emsp)
94
+ uses: ./
95
+ with:
96
+ package-dir: examples/natmod
97
+ build: "${{ env.CIBMP_UPSTREAM_ABI_TAG }}-x64 ${{ env.CIBMP_UPSTREAM_ABI_TAG }}-armv7emsp"
98
+
99
+ - name: List built artifacts
100
+ run: ls -laR examples/natmod/mpyhouse
101
+
102
+ build-upstream-natmod:
103
+ strategy:
104
+ fail-fast: false
105
+ matrix:
106
+ module:
107
+ - features1
108
+ - features2
109
+ - features3
110
+ - features4
111
+ - heapq
112
+ - random
113
+ - re
114
+ - deflate
115
+ - framebuf
116
+ - btree
117
+ runs-on: ubuntu-latest
118
+ env:
119
+ CIBMP_VERSION: 0.0.0-ci
120
+ CIBMP_MODULE_DIR: "{micropython}/examples/natmod/${{ matrix.module }}"
121
+ steps:
122
+ - uses: actions/checkout@v7
123
+
124
+ - name: Build upstream examples/natmod/${{ matrix.module }} (x64)
125
+ uses: ./
126
+ with:
127
+ package-dir: examples/natmod
128
+ build: "${{ env.CIBMP_UPSTREAM_ABI_TAG }}-x64"
129
+
130
+ - name: List built artifacts
131
+ run: ls -laR examples/natmod/mpyhouse
@@ -0,0 +1,241 @@
1
+ name: Test upstream usercmodule
2
+
3
+ # Builds MicroPython's own `examples/usercmodule/` (cexample, cppexample,
4
+ # subpackage) through cibuildmp's real usermod path -- docs/records/0054
5
+ # scoped why this fixture matters (it tests upstream's own module contract,
6
+ # not one this project wrote for itself); docs/records/0069 is the mechanism
7
+ # actually landed here and explains every choice below in full.
8
+ #
9
+ # Six jobs, one per port cibuildmp drives a usermod build for -- widened
10
+ # from the original narrow unix+rp2 slice ([0054]'s own "one Make port and
11
+ # one CMake port is enough to answer the three questions above") once that
12
+ # slice came back green, per [0054]'s own "widen only if it finds
13
+ # something." Still nowhere near build-examples.yml's much broader
14
+ # examples/template matrix: one representative identifier per port, not
15
+ # each port's own full arch/board matrix.
16
+ #
17
+ # No job here sets `CIBMP_USER_C_MODULES`/`CIBMP_EXTRA_MAKE_ARGS`/
18
+ # `CIBMP_EXTRA_CMAKE_ARGS`, and none of them ever resolves the pinned
19
+ # checkout itself. Both used to be true: every job called
20
+ # `sources.fetch_micropython()` directly, in its own pre-fetch step, then
21
+ # exported the real checkout path by hand -- necessary back when this
22
+ # project had no way to name "a path inside whatever checkout cibuildmp
23
+ # itself is about to fetch" from outside cibuildmp, and no way to say "this
24
+ # one identifier needs this one extra flag" from inside a config file
25
+ # meant to be shared by all six. `examples/usercmodule/cibuildmp.toml` now
26
+ # carries all of it -- no `user-c-modules =` at all any more, for any
27
+ # port: the built-in "." default is already right on both sides once
28
+ # each side has its own real entry point (`micropython.cmake` for the two
29
+ # CMake ports, `{cexample,cppexample,subpackage}/micropython.mk` for the
30
+ # four Make ports -- see that toml's own header comment), plus
31
+ # `[override."*-wasm32"]`'s own `extra-make-args` -- so a bare
32
+ # `cibuildmp examples/usercmodule --build <identifier>` run, CI or local,
33
+ # resolves identically to what a job here does. `build` stays out of that
34
+ # file on purpose (see its own header comment): each job below still wants
35
+ # exactly one identifier per push, not this fixture's full six-port sweep,
36
+ # and that is the one thing a shared config file cannot express per-job.
37
+ #
38
+ # An even leaner shape was tried before any of this and reverted: pin
39
+ # `CIBMP_CACHE_PATH` to a fixed, known directory so the checkout's
40
+ # eventual path becomes computable without fetching it at all. That broke
41
+ # the workflow file outright, twice, for a GitHub Actions job-level-`env:`
42
+ # scoping rule this session could not conclusively pin down live -- see
43
+ # docs/records/0069 for the full account, kept for whoever revisits it
44
+ # rather than guessed away.
45
+ #
46
+ # push: (no branches: filter), same reasoning build-examples.yml's own header
47
+ # already documents -- this needs to run on every push to a dev branch too.
48
+
49
+ on:
50
+ push:
51
+ pull_request:
52
+ paths-ignore:
53
+ - "**.md"
54
+ - "docs/**"
55
+ - "LICENSE"
56
+ workflow_dispatch:
57
+
58
+ concurrency:
59
+ group: test-upstream-usermodule-${{ github.workflow }}-${{ github.ref }}
60
+ cancel-in-progress: true
61
+
62
+ env:
63
+ # Single source of truth for every job below -- bump here, not six
64
+ # times, when this fixture moves to a newer tag.
65
+ CIBMP_UPSTREAM_TAG: v1.29.0
66
+
67
+ jobs:
68
+ # ── unix: the Make side ─────────────────────────────────────────────
69
+ #
70
+ # py/py.mk's own `<USER_C_MODULES>/*/micropython.mk` glob finds
71
+ # `examples/usercmodule/{cexample,cppexample,subpackage}/micropython.mk`
72
+ # -- this fixture's own thin wrappers, each `include`ing upstream's real
73
+ # file via `$(TOP)` (see `cexample/micropython.mk`'s own header comment)
74
+ # -- with `user-c-modules` at its built-in "." default, no override
75
+ # needed. Never vendored (0054): the real content still comes from the
76
+ # pinned checkout, only three one-line `include` shims live in this repo.
77
+ build-unix:
78
+ runs-on: ubuntu-latest
79
+ env:
80
+ CIBMP_VERSION: 0.0.0-ci
81
+ steps:
82
+ - uses: actions/checkout@v7
83
+
84
+ - name: Build upstream examples/usercmodule (unix, native)
85
+ uses: ./
86
+ with:
87
+ package-dir: examples/usercmodule
88
+ build: ${{ env.CIBMP_UPSTREAM_TAG }}-manylinux_2_28_x86_64
89
+
90
+ - name: List built artifacts
91
+ run: ls -laR examples/usercmodule/mpyhouse
92
+
93
+ # A linked binary is not the same claim as one whose modules actually
94
+ # run -- unix is the one port here whose own output this runner can
95
+ # simply execute (a real manylinux_2_28 binary runs unmodified on a
96
+ # newer-glibc host, the whole point of the manylinux floor), unlike
97
+ # rp2's own firmware.uf2, which needs real hardware. See
98
+ # smoke_test.py's own header for what it actually exercises.
99
+ - name: "Smoke test (unix): run the built binary against smoke_test.py"
100
+ run: |
101
+ set -euo pipefail
102
+ identifier="${CIBMP_UPSTREAM_TAG}-manylinux_2_28_x86_64"
103
+ bin="examples/usercmodule/mpyhouse/${identifier}/micropython-${identifier}"
104
+ "$bin" examples/usercmodule/smoke_test.py
105
+
106
+ # ── rp2: the CMake side ──────────────────────────────────────────────
107
+ #
108
+ # Chosen over esp32 purely on cost -- usermod/build_rp2.py's own docstring:
109
+ # the Pico SDK arrives as `lib/` submodules of the MicroPython checkout
110
+ # itself, no separate host-side toolchain resolver the way esp32's
111
+ # ESP-IDF needs. Nothing here is rp2-specific; widening to esp32/windows/
112
+ # webassembly/qemu is exactly [0054]'s own "widen only if it finds
113
+ # something" (docs/records/0069).
114
+ #
115
+ # This is also the leg that actually answers [0054]'s biggest open
116
+ # question for one real toolchain: whether cppexample's `-lstdc++` is
117
+ # satisfiable on a bare-metal cross target. Deliberately not skipped --
118
+ # a red leg here is a real finding to record, not a bug in this workflow.
119
+ #
120
+ # examples/usercmodule/micropython.cmake resolves the pinned checkout
121
+ # itself, via MICROPY_DIR -- a CMake variable every CMake port already
122
+ # sets before it ever include()s a user module (rp2/CMakeLists.txt's own
123
+ # `get_filename_component(MICROPY_DIR "../.." ABSOLUTE)`, well before its
124
+ # own `include(${MICROPY_DIR}/py/usermod.cmake)`) -- with `user-c-modules`
125
+ # at its built-in "." default, same as every other port here now.
126
+ build-rp2:
127
+ runs-on: ubuntu-latest
128
+ permissions:
129
+ contents: read
130
+ env:
131
+ CIBMP_VERSION: 0.0.0-ci
132
+ steps:
133
+ - uses: actions/checkout@v7
134
+ - uses: docker/setup-qemu-action@v4
135
+
136
+ - name: Build upstream examples/usercmodule (rp2)
137
+ uses: ./
138
+ with:
139
+ package-dir: examples/usercmodule
140
+ build: ${{ env.CIBMP_UPSTREAM_TAG }}-rp2-RPI_PICO
141
+
142
+ - name: List built artifacts
143
+ run: ls -laR examples/usercmodule/mpyhouse
144
+
145
+ # ── esp32: the second CMake port, and the second bare-metal toolchain ──
146
+ #
147
+ # [0054]'s own list of unanswered families after [0069]: esp32 is the
148
+ # ESP-IDF one -- a cmake-driven port like rp2, but a materially different
149
+ # toolchain (Xtensa/RISC-V via idf.py, not arm-none-eabi via the Pico
150
+ # SDK). Fully containerized since [0028] (no host-side ESP-IDF resolver
151
+ # left).
152
+ #
153
+ # Same MICROPY_DIR mechanism as build-rp2 above: MICROPY_DIR is set at
154
+ # the very top of ports/esp32/main/CMakeLists.txt
155
+ # (`if(NOT MICROPY_DIR) get_filename_component(...)`), well before it --
156
+ # via ports/esp32/CMakeLists.txt -- reaches `include(${MICROPY_DIR}/py/
157
+ # usermod.cmake)`.
158
+ build-esp32:
159
+ runs-on: ubuntu-latest
160
+ permissions:
161
+ contents: read
162
+ env:
163
+ CIBMP_VERSION: 0.0.0-ci
164
+ steps:
165
+ - uses: actions/checkout@v7
166
+ - uses: docker/setup-qemu-action@v4
167
+
168
+ - name: Build upstream examples/usercmodule (esp32)
169
+ uses: ./
170
+ with:
171
+ package-dir: examples/usercmodule
172
+ build: ${{ env.CIBMP_UPSTREAM_TAG }}-esp32-ESP32_GENERIC
173
+
174
+ - name: List built artifacts
175
+ run: ls -laR examples/usercmodule/mpyhouse
176
+
177
+ # ── windows, webassembly, qemu: the remaining three Make ports ──────────
178
+ #
179
+ # Same mechanism as build-unix above (the same three wrapper files,
180
+ # already discovered by py.mk's own glob), one representative identifier
181
+ # per port rather than each port's own full arch matrix -- [0054]'s own
182
+ # "widen only if it finds something", not a cost-blind repeat of
183
+ # build-examples.yml's broader coverage. No smoke test for any of the
184
+ # three: none of their outputs (a .exe, a .wasm, a qemu ELF) runs
185
+ # directly on this runner the way unix's manylinux binary does (record
186
+ # 0069's own reasoning for why rp2 has none either).
187
+ build-windows:
188
+ runs-on: ubuntu-latest
189
+ env:
190
+ CIBMP_VERSION: 0.0.0-ci
191
+ steps:
192
+ - uses: actions/checkout@v7
193
+
194
+ - name: Build upstream examples/usercmodule (windows)
195
+ uses: ./
196
+ with:
197
+ package-dir: examples/usercmodule
198
+ build: ${{ env.CIBMP_UPSTREAM_TAG }}-win_amd64
199
+
200
+ - name: List built artifacts
201
+ run: ls -laR examples/usercmodule/mpyhouse
202
+
203
+ # `examples/usercmodule/cibuildmp.toml`'s own `[override."*-wasm32"]`
204
+ # carries this identifier's own `extra-make-args` (CXX=em++ plus the
205
+ # CXXFLAGS_MOD fix for two real, separate upstream ports/webassembly/
206
+ # Makefile bugs -- see that file's own comment for both). Nothing
207
+ # webassembly-specific is set here any more.
208
+ build-webassembly:
209
+ runs-on: ubuntu-latest
210
+ env:
211
+ CIBMP_VERSION: 0.0.0-ci
212
+ steps:
213
+ - uses: actions/checkout@v7
214
+
215
+ - name: Build upstream examples/usercmodule (webassembly)
216
+ uses: ./
217
+ with:
218
+ package-dir: examples/usercmodule
219
+ build: ${{ env.CIBMP_UPSTREAM_TAG }}-wasm32
220
+
221
+ - name: List built artifacts
222
+ run: ls -laR examples/usercmodule/mpyhouse
223
+
224
+ build-qemu:
225
+ runs-on: ubuntu-latest
226
+ permissions:
227
+ contents: read
228
+ env:
229
+ CIBMP_VERSION: 0.0.0-ci
230
+ steps:
231
+ - uses: actions/checkout@v7
232
+ - uses: docker/setup-qemu-action@v4
233
+
234
+ - name: Build upstream examples/usercmodule (qemu)
235
+ uses: ./
236
+ with:
237
+ package-dir: examples/usercmodule
238
+ build: ${{ env.CIBMP_UPSTREAM_TAG }}-qemu-MPS2_AN385
239
+
240
+ - name: List built artifacts
241
+ run: ls -laR examples/usercmodule/mpyhouse
@@ -7,6 +7,69 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.2] - 2026-08-31
11
+
12
+ ### Added
13
+
14
+ - **`{micropython}` — a placeholder in `user-c-modules` for a path inside the pinned
15
+ MicroPython checkout**, substituted with the real, already-fetched `mpy_dir` before any
16
+ Docker/mount step, uniformly for every usermod port. Closes the gap [0069] named and
17
+ deliberately left open ("no `{checkout}`-style template today"). Record 0071.
18
+ - **The same `{micropython}` placeholder, and a real upstream-`examples/natmod` CI slice
19
+ covering all eleven upstream modules, for natmod.** `module-dir` can now name a path
20
+ inside the pinned checkout directly (`{micropython}/examples/natmod/<module>`), and
21
+ `collect_output()` gained a fallback for `py/dynruntime.mk`'s own `all` target, which —
22
+ unlike this project's own `dist` convention — leaves the merged `.mpy` sitting in
23
+ module-dir itself rather than under `build/<arch>*/`. `test-upstream-natmod.yml` builds
24
+ `features0` for two real arches (`x64`, `armv7emsp`) in one invocation — the multi-target
25
+ collision scenario record 0055's own guard survey was about — plus the other ten modules
26
+ (`features1`-`4`, `btree`, `deflate`, `framebuf`, `heapq`, `random`, `re`) each for `x64`.
27
+ Closes record 0055: neither of the two risks its own survey flagged (`btree`'s git
28
+ submodule, an rv32imc arch-flags collision) turned out to be a real blocker. Record 0072.
29
+ - **The `[0054]`/`[0069]` upstream-`examples/usercmodule` fixture now covers all six usermod
30
+ ports**, not just `unix`/`rp2`: `esp32`, `windows`, `webassembly` and `qemu` all build
31
+ `cppexample`/`cexample`/`subpackage` in CI now too. `examples/usercmodule/cibuildmp.toml`
32
+ carries the whole thing — a `[override."*-manylinux* *-win* *-qemu-* *-wasm32"]` pointing
33
+ the four Make ports' `user-c-modules` straight at `{micropython}/examples/usercmodule`
34
+ (no vendoring, no wrapper file), the two CMake ports (`rp2`/`esp32`) reading `MICROPY_DIR`
35
+ directly inside `examples/usercmodule/micropython.cmake`. No job in
36
+ `test-upstream-usermodule.yml` resolves the checkout itself or sets
37
+ `CIBMP_USER_C_MODULES`/`CIBMP_EXTRA_MAKE_ARGS`/`CIBMP_EXTRA_CMAKE_ARGS` any more — a bare
38
+ `cibuildmp examples/usercmodule --build <identifier>` run, CI or local, now resolves
39
+ identically to what a job here does.
40
+
41
+ ### Changed
42
+
43
+ - **`test-all-platforms.yml` no longer runs on `pull_request`** — the full real matrix
44
+ (200+ identifiers, bucketed across up to 20 concurrent jobs) took too long to gate every
45
+ PR's own turnaround time for how rarely its answer actually changes. Now `schedule`
46
+ (weekly) plus `workflow_dispatch` for an on-demand run; `push`/`pull_request` CI still
47
+ covers every change through `tests.yml`'s unit suite and `build-examples.yml`'s narrower
48
+ matrix. The `if: github.actor != 'dependabot[bot]'` guard record 0068 added specifically
49
+ for the now-gone `pull_request` trigger came out too, moot rather than just redundant.
50
+
51
+ ### Fixed
52
+
53
+ - **`docker/windows.Dockerfile` installed only the C mingw-w64 cross-compilers
54
+ (`gcc-mingw-w64-*`), never the C++ ones (`g++-mingw-w64-*`)** — mingw-w64 fully supports
55
+ C++, this was a real gap in the image, not a port limitation. A C++ user module on
56
+ `windows` failed with "cannot execute `cc1plus`" (the C++ compiler backend didn't exist
57
+ at all) until this fixed it; republished, repinned in `pinned_docker_images.toml`.
58
+ - **`ports/webassembly/Makefile` never overrides `CXX` from its own default (`g++`, the
59
+ host's real compiler), only `CC`/`LD` (to `emcc`)** — a C++ user module's real `.cpp`
60
+ compile was silently running through the wrong compiler entirely (confirmed live: the
61
+ failure's own `cc1plus` and "unrecognized command-line option" for a clang-only flag name
62
+ are exactly what a host `g++` invocation looks like, not `emcc`'s). Worked around through
63
+ `extra-make-args` (`CXX=em++`, emsdk's own C++ driver, already baked into the image) —
64
+ an upstream Makefile bug this project can reach without vendoring upstream's own file.
65
+ - **Upstream's own `ports/webassembly/mpconfigport.h` unconditionally `#define _GNU_SOURCE`,
66
+ conflicting with emcc/clang's own built-in definition in C++ mode** (`-std=c++11`),
67
+ tripping `-Werror -Wmacro-redefined` once the `CXX` fix above let the right compiler run
68
+ at all. Reached through `py/mkrules.mk`'s own `CXXFLAGS_MOD` hook ("Add default C++
69
+ compiler flags based on CFLAGS. For use with C++ user modules" — that comment's own
70
+ words), via `extra-make-args`, with nothing to clobber (unlike [0066]'s own
71
+ `CMAKE_ARGS`/`IDFPY_FLAGS` trap): nothing in the tree ever assigns `CXXFLAGS_MOD` first.
72
+
10
73
  ## [0.4.1] - 2026-08-30
11
74
 
12
75
  ### Added
@@ -640,7 +703,8 @@ ballistics-lab/micropython-native-ci, but both tags exist here too, so every
640
703
  link resolves inside this repository -- the version line continues rather
641
704
  than restarting (see the 0.3.0a1 entry). -->
642
705
 
643
- [Unreleased]: https://github.com/ballistics-lab/cibuildmp/compare/v0.4.1...HEAD
706
+ [Unreleased]: https://github.com/ballistics-lab/cibuildmp/compare/v0.4.2...HEAD
707
+ [0.4.2]: https://github.com/ballistics-lab/cibuildmp/compare/v0.4.1...v0.4.2
644
708
  [0.4.1]: https://github.com/ballistics-lab/cibuildmp/compare/v0.4.0...v0.4.1
645
709
  [0.4.0]: https://github.com/ballistics-lab/cibuildmp/compare/v0.3.0...v0.4.0
646
710
  [0.3.0]: https://github.com/ballistics-lab/cibuildmp/compare/v0.3.0a1...v0.3.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cibuildmp
3
- Version: 0.4.1
3
+ Version: 0.4.2
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
@@ -110,7 +110,7 @@ On CI, use the action instead of installing the CLI yourself — it already
110
110
  runs on a bare runner with the runner's own Docker daemon reachable:
111
111
 
112
112
  ```yaml
113
- - uses: ballistics-lab/cibuildmp@v0.4.0
113
+ - uses: ballistics-lab/cibuildmp@v0.4.1
114
114
  with:
115
115
  build: "mpy6.3-* v1.29.0-manylinux_2_28_x86_64"
116
116
  ```
@@ -324,8 +324,9 @@ executable bit intact (`unix`: one native image per arch/libc;
324
324
  `v1.29.0-qemu-MPS2_AN385` runs in its own matrix leg rather than sharing a
325
325
  job with already-proven cells, since it was the first build ever run
326
326
  through that path). `esp32` and `rp2` are not in that smoke test, but not
327
- because either is unproven -- both are exercised far more broadly, on
328
- every pull request, through `test-all-platforms.yml`'s own real matrix
327
+ because either is unproven -- both are exercised far more broadly, on a
328
+ weekly schedule (or manual dispatch any time sooner), through
329
+ `test-all-platforms.yml`'s own real matrix
329
330
  (`bin/plan_test_matrix.py`, record 0065): 83 real `esp32` identifiers and
330
331
  74 real `rp2` ones, every board/tag row `resources/build-platforms.toml`
331
332
  carries, not a spot check. **Both build through the exact same `cibuildmp`
@@ -336,7 +337,7 @@ provisioned onto the bare host; record 0028 moved it fully into
336
337
  depends on that composite action's own toolchain-install path. `rp2`'s
337
338
  own driver landed the next day (record 0060), live-verified against
338
339
  `examples/template` first and now carrying its own share of every
339
- `test-all-platforms.yml` run since.
340
+ scheduled `test-all-platforms.yml` run since.
340
341
 
341
342
  <table>
342
343
  <thead>
@@ -540,7 +541,7 @@ own driver landed the next day (record 0060), live-verified against
540
541
 
541
542
  [^cross]: The one target that still cross-compiles: pypa publishes no mipsel image and there's no Docker official image for 32-bit mipsel, so there's nothing to be native to.
542
543
 
543
- [^emulatedci]: `ppc64le`/`s390x`/`riscv64`, both libcs — native to no runner GitHub offers, so still QEMU-emulated, but no longer untested: `test-all-platforms.yml`'s own `unix-emulated` entry gives all six a real `test-emulated` CI leg on every push now (nine of the twelve (cell, tag) pairs green; the other three are the two ⚠️ rows below). Point `CIBMP_UNIX_<TARGET>_DOCKER_IMAGE` at a locally-built image, or an emulated one, to work on one of these locally. Record 0044's own 2026-08-29 addendum.
544
+ [^emulatedci]: `ppc64le`/`s390x`/`riscv64`, both libcs — native to no runner GitHub offers, so still QEMU-emulated, but no longer untested: `test-all-platforms.yml`'s own `unix-emulated` entry gives all six a real `test-emulated` CI leg on its weekly schedule (or manual dispatch) now (nine of the twelve (cell, tag) pairs green; the other three are the two ⚠️ rows below). Point `CIBMP_UNIX_<TARGET>_DOCKER_IMAGE` at a locally-built image, or an emulated one, to work on one of these locally. Record 0044's own 2026-08-29 addendum.
544
545
 
545
546
  [^s390xclobbered]: `v1.28.0` only — `v1.29.0` of the identical cell is the ✅ above it. `mpy-cross`'s own `main.c` fails a real GCC `-Werror=clobbered` diagnostic specific to s390x's own register allocation around a `longjmp` call site (`parse_integer()`'s locals); `v1.29.0`'s `main.c` does not trip it. Skipped by exact identifier (`v1.28.0-manylinux_2_28_s390x`) in `test-all-platforms.yml` until fixed — not a QEMU/emulation problem, a real compile-time diagnostic. Record 0044's own 2026-08-29 addendum.
546
547
 
@@ -615,7 +616,7 @@ drivers are wired into the CLI too (see [Target support](#target-support)
615
616
  above), covering every port with a real driver, not just three. All three
616
617
  consuming repos have repinned and are fully migrated off every
617
618
  `build-usermod-*`/`fetch-micropython` composite action onto the unified
618
- CLI/action, `cibuildmp@v0.4.0`, CI green on each repo's current `main` (`a7p`
619
+ CLI/action, `cibuildmp@v0.4.1`, CI green on each repo's current `main` (`a7p`
619
620
  and `micropython-wasm3` each keep their own genuine
620
621
  cross-compile-with-no-native-host cell, `unix-mipsel`, on the old composite
621
622
  action deliberately). See the tracker's own [0038] row for current status
@@ -78,7 +78,7 @@ On CI, use the action instead of installing the CLI yourself — it already
78
78
  runs on a bare runner with the runner's own Docker daemon reachable:
79
79
 
80
80
  ```yaml
81
- - uses: ballistics-lab/cibuildmp@v0.4.0
81
+ - uses: ballistics-lab/cibuildmp@v0.4.1
82
82
  with:
83
83
  build: "mpy6.3-* v1.29.0-manylinux_2_28_x86_64"
84
84
  ```
@@ -292,8 +292,9 @@ executable bit intact (`unix`: one native image per arch/libc;
292
292
  `v1.29.0-qemu-MPS2_AN385` runs in its own matrix leg rather than sharing a
293
293
  job with already-proven cells, since it was the first build ever run
294
294
  through that path). `esp32` and `rp2` are not in that smoke test, but not
295
- because either is unproven -- both are exercised far more broadly, on
296
- every pull request, through `test-all-platforms.yml`'s own real matrix
295
+ because either is unproven -- both are exercised far more broadly, on a
296
+ weekly schedule (or manual dispatch any time sooner), through
297
+ `test-all-platforms.yml`'s own real matrix
297
298
  (`bin/plan_test_matrix.py`, record 0065): 83 real `esp32` identifiers and
298
299
  74 real `rp2` ones, every board/tag row `resources/build-platforms.toml`
299
300
  carries, not a spot check. **Both build through the exact same `cibuildmp`
@@ -304,7 +305,7 @@ provisioned onto the bare host; record 0028 moved it fully into
304
305
  depends on that composite action's own toolchain-install path. `rp2`'s
305
306
  own driver landed the next day (record 0060), live-verified against
306
307
  `examples/template` first and now carrying its own share of every
307
- `test-all-platforms.yml` run since.
308
+ scheduled `test-all-platforms.yml` run since.
308
309
 
309
310
  <table>
310
311
  <thead>
@@ -508,7 +509,7 @@ own driver landed the next day (record 0060), live-verified against
508
509
 
509
510
  [^cross]: The one target that still cross-compiles: pypa publishes no mipsel image and there's no Docker official image for 32-bit mipsel, so there's nothing to be native to.
510
511
 
511
- [^emulatedci]: `ppc64le`/`s390x`/`riscv64`, both libcs — native to no runner GitHub offers, so still QEMU-emulated, but no longer untested: `test-all-platforms.yml`'s own `unix-emulated` entry gives all six a real `test-emulated` CI leg on every push now (nine of the twelve (cell, tag) pairs green; the other three are the two ⚠️ rows below). Point `CIBMP_UNIX_<TARGET>_DOCKER_IMAGE` at a locally-built image, or an emulated one, to work on one of these locally. Record 0044's own 2026-08-29 addendum.
512
+ [^emulatedci]: `ppc64le`/`s390x`/`riscv64`, both libcs — native to no runner GitHub offers, so still QEMU-emulated, but no longer untested: `test-all-platforms.yml`'s own `unix-emulated` entry gives all six a real `test-emulated` CI leg on its weekly schedule (or manual dispatch) now (nine of the twelve (cell, tag) pairs green; the other three are the two ⚠️ rows below). Point `CIBMP_UNIX_<TARGET>_DOCKER_IMAGE` at a locally-built image, or an emulated one, to work on one of these locally. Record 0044's own 2026-08-29 addendum.
512
513
 
513
514
  [^s390xclobbered]: `v1.28.0` only — `v1.29.0` of the identical cell is the ✅ above it. `mpy-cross`'s own `main.c` fails a real GCC `-Werror=clobbered` diagnostic specific to s390x's own register allocation around a `longjmp` call site (`parse_integer()`'s locals); `v1.29.0`'s `main.c` does not trip it. Skipped by exact identifier (`v1.28.0-manylinux_2_28_s390x`) in `test-all-platforms.yml` until fixed — not a QEMU/emulation problem, a real compile-time diagnostic. Record 0044's own 2026-08-29 addendum.
514
515
 
@@ -583,7 +584,7 @@ drivers are wired into the CLI too (see [Target support](#target-support)
583
584
  above), covering every port with a real driver, not just three. All three
584
585
  consuming repos have repinned and are fully migrated off every
585
586
  `build-usermod-*`/`fetch-micropython` composite action onto the unified
586
- CLI/action, `cibuildmp@v0.4.0`, CI green on each repo's current `main` (`a7p`
587
+ CLI/action, `cibuildmp@v0.4.1`, CI green on each repo's current `main` (`a7p`
587
588
  and `micropython-wasm3` each keep their own genuine
588
589
  cross-compile-with-no-native-host cell, `unix-mipsel`, on the old composite
589
590
  action deliberately). See the tracker's own [0038] row for current status
@@ -88,6 +88,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
88
88
  xz-utils \
89
89
  gcc-mingw-w64-x86-64 \
90
90
  gcc-mingw-w64-i686 \
91
+ g++-mingw-w64-x86-64 \
92
+ g++-mingw-w64-i686 \
91
93
  && rm -rf /var/lib/apt/lists/*
92
94
 
93
95
  # Pinned to resources/usermod.toml's own [llvm-mingw] table (version