cibuildmp 0.4.0__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.
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/dependabot.yml +30 -4
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/workflows/publish-docker-images.yml +39 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/workflows/publish.yml +17 -5
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/workflows/test-all-platforms.yml +20 -5
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/workflows/test-platforms.yml +12 -0
- cibuildmp-0.4.2/.github/workflows/test-upstream-natmod.yml +131 -0
- cibuildmp-0.4.2/.github/workflows/test-upstream-usermodule.yml +241 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/CHANGELOG.md +109 -1
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/CLAUDE.md +27 -0
- cibuildmp-0.4.2/CONTRIBUTING.md +87 -0
- {cibuildmp-0.4.0/src/cibuildmp.egg-info → cibuildmp-0.4.2}/PKG-INFO +59 -35
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/README.md +58 -34
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/manylinux_2_28_aarch64.Dockerfile +1 -1
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/manylinux_2_28_i686.Dockerfile +1 -1
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/manylinux_2_28_ppc64le.Dockerfile +1 -1
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/manylinux_2_28_s390x.Dockerfile +1 -1
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/manylinux_2_28_x86_64.Dockerfile +1 -1
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/pypa-tracker.Dockerfile +9 -9
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/windows.Dockerfile +2 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/0000-TRACKER.md +74 -46
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/ACTIONS.md +2 -2
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0022-zephyr-third-selector-axis.md +10 -3
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0038-m5-adopt-in-three-repos.md +32 -5
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0046-pin-staleness-checker.md +26 -1
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0054-usermod-example-from-upstream-usercmodule.md +67 -11
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0055-natmod-example-from-upstream-natmod.md +59 -4
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0059-ghcr-untagged-cleanup-deletes-referenced-manifests.md +25 -0
- cibuildmp-0.4.2/docs/records/0068-docker-dependabot-grouping-and-mipsel-ubuntu-26-04.md +181 -0
- cibuildmp-0.4.2/docs/records/0069-upstream-usercmodule-narrow-ci-slice.md +278 -0
- cibuildmp-0.4.2/docs/records/0070-unix-collected-binary-missing-repaired-lib-sidecar.md +77 -0
- cibuildmp-0.4.2/docs/records/0071-micropython-placeholder-in-user-c-modules.md +85 -0
- cibuildmp-0.4.2/docs/records/0072-natmod-micropython-placeholder-and-upstream-natmod-ci.md +180 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/reference/design.md +57 -55
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/reference/open-questions.md +2 -2
- cibuildmp-0.4.2/docs/reference/vendored-images.md +175 -0
- cibuildmp-0.4.2/examples/natmod/cibuildmp.toml +62 -0
- cibuildmp-0.4.2/examples/usercmodule/cibuildmp.toml +60 -0
- cibuildmp-0.4.2/examples/usercmodule/micropython.cmake +36 -0
- cibuildmp-0.4.2/examples/usercmodule/smoke_test.py +40 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/natmod/__init__.py +18 -1
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/natmod/build.py +19 -6
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/orchestrate.py +38 -1
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/resources/pinned_docker_images.toml +24 -24
- cibuildmp-0.4.2/src/cibuildmp/resources/pinned_pypa_images.toml +81 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/sources.py +12 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2/src/cibuildmp.egg-info}/PKG-INFO +59 -35
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/SOURCES.txt +13 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/scm_file_list.json +13 -0
- cibuildmp-0.4.2/src/cibuildmp.egg-info/scm_version.json +8 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_build.py +27 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_cli.py +29 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_usermod_orchestrate.py +106 -0
- cibuildmp-0.4.0/src/cibuildmp/resources/pinned_pypa_images.toml +0 -81
- cibuildmp-0.4.0/src/cibuildmp.egg-info/scm_version.json +0 -8
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.dockerignore +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/actions/build-natmod/action.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/actions/build-usermod-armv7m/action.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/actions/build-usermod-esp32/action.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/actions/build-usermod-rp2040/action.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/actions/build-usermod-unix/action.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/actions/build-usermod-webassembly/action.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/actions/build-usermod-windows/action.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/actions/clone-micropython/action.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/actions/fetch-micropython/action.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/workflows/build-examples.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/workflows/tests.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.github/workflows/verify-docker-images.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/.gitignore +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/LICENSE +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/action.yml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/bin/ghcr_prune_scan.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/bin/plan_test_matrix.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/bin/publish_images.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/bin/refresh_natmod_archs.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/bin/refresh_usermod_boards.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/bin/render_test_summary.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/bin/update_docker.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/cibuildmp.toml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/arm_embedded.Dockerfile +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/esp_idf_base.Dockerfile +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/manylinux_2_39_mipsel.Dockerfile +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/natmod_host.Dockerfile +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/ppc64le_linux.Dockerfile +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/riscv_embedded.Dockerfile +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/webassembly.Dockerfile +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/xtensa_esp.Dockerfile +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docker/xtensa_lx106.Dockerfile +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/BACKLOG.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0001-natmod-first.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0002-delegate-compile-own-environment.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0003-toolchain-resolution-per-target.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0004-config-file-location.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0005-one-identifier-namespace.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0006-no-test-runners-phase1.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0007-usermod-vendors-mpbuild-board-db.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0008-tool-distribution-deferred.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0009-one-job-loop-fanout-opt-in.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0010-pinned-data-in-resources.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0011-one-repo-absorbs-micropython-native-ci.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0012-pyelftools-ar-own-deps.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0013-micropython-list-dedup-by-abi.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0014-mip-package-per-identifier.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0015-rv32imc-arch-flags-identifier.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0016-usermod-user-c-modules-dir-vs-cmake.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0017-usermod-frozen-manifest-merge.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0018-windows-provisioning-fourth-story.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0019-esp-idf-provisioning-heaviest.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0020-usermod-runner-selection-structural.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0021-usermod-execution-central-value.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0023-usermod-identifier-scheme-config-output.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0024-unix-armhf-mipsel-cross-compiles.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0025-dockerfiles-bake-unix-cross-toolchains.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0026-one-docker-image-per-port.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0027-orchestrate-output-dir-and-exec-bit-fixes.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0028-container-per-port-migration-plan.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0029-github-actions-job-summary.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0030-container-approach-natmod-and-docker-vs-qemu.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0031-unix-musllinux-libc-axis.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0032-unix-docker-default-and-webassembly-wiring.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0033-cibuildmp-never-builds-docker-image-itself.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0034-m0-skeleton.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0035-m1-micropython-mpy-cross-provisioning.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0036-m2-toolchain-resolver.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0037-m3-the-build-itself.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0039-usermod-composite-actions-status.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0040-usermod-tests-deferred.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0041-docs-restructure.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0042-windows-docker-wiring-and-resolver-removal.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0043-unix-adopts-cibuildwheel-native-image-model.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0044-unix-native-images-landed.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0045-only-is-a-filter-not-a-forced-identifier.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0047-run-output-parity-with-cibuildwheel.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0048-build-skip-live-in-opposite-tables.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0049-no-matrix-generation-archs-vocabulary.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0050-natmod-is-docker-only.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0051-usermod-identifiers-have-no-version-axis.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0052-config-is-a-tree-not-a-selector-matrix.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0053-usermod-ports-without-a-build-driver.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0056-usermod-with-no-user-c-module.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0057-multiple-modules-per-build.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0058-image-groups-are-toolchains-not-ports.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0060-rp2-build-driver.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0061-usermod-build-drivers-split-per-port.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0062-test-platforms-per-port-orchestrator.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0063-keep-going-and-json-build-report.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0065-bucketed-test-matrix-planning.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0066-extra-cmake-args.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/docs/records/0067-user-c-modules-flat-shape-autodetect.md +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/template/cibuildmp.toml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/template/micropython.cmake +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/template/natmod/Makefile +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/template/natmod/template.c +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/template/src/facade.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/template/src/template_core.c +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/template/src/template_core.h +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/template/usermod/manifest.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/template/usermod/micropython.mk +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/template/usermod/template_usermod.c +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/Makefile +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/NOTICE +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/cibuildmp.toml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/esp8266-rom.S +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/libc.c +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/runtime.c +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt-impl-tableops.inc +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt-impl.c +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt-impl.h +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt-mem-impl-helper.inc +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt-mem-impl.c +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/runtime/wasm-rt.h +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/examples/wasm2mpy/test/zig.wasm +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/pyproject.toml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/setup.cfg +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/__init__.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/__main__.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/cli.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/dockerrun.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/options.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/__init__.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/natmod/options.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/natmod/targets.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/__init__.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/boards.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_common.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_esp32.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_qemu.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_rp2.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_unix.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_webassembly.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/build_windows.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/espidf.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/manifests.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/options.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/portinfo.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/platforms/usermod/targets.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/report.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/resources/build-platforms.toml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/resources/natmod.toml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/resources/usermod.toml +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/resources.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/selector.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp/stepsummary.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/dependency_links.txt +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/entry_points.txt +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/requires.txt +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/src/cibuildmp.egg-info/top_level.txt +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/conftest.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_boards.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_cli_multi_family.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_espidf.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_manifests.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_options.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_options_cascade.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_overrides.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_plan_test_matrix.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_portinfo.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_render_test_summary.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_report.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_selector.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_sources.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_stepsummary.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_targets.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_usermod_build_common.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_usermod_build_esp32.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_usermod_build_qemu.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_usermod_build_rp2.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_usermod_build_unix.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_usermod_build_webassembly.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_usermod_build_windows.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_usermod_dockerrun.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_usermod_options.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/tests/test_usermod_targets.py +0 -0
- {cibuildmp-0.4.0 → cibuildmp-0.4.2}/uv.lock +0 -0
|
@@ -42,11 +42,37 @@ updates:
|
|
|
42
42
|
# 0033), since a new base can mean a new libc floor, not just routine
|
|
43
43
|
# hygiene.
|
|
44
44
|
#
|
|
45
|
-
# `ubuntu:24.04`
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
45
|
+
# `ubuntu:24.04` was assumed out of scope here -- a floating tag, and
|
|
46
|
+
# Dependabot's docker ecosystem "has nothing to compare a floating tag
|
|
47
|
+
# against" was this comment's own reasoning until 2026-08-29. Wrong:
|
|
48
|
+
# Dependabot proposed `ubuntu:24.04` -> `26.04` in its very first grouped
|
|
49
|
+
# bump (PR #16), and CI caught the reason this needed a human first --
|
|
50
|
+
# `manylinux_2_39_mipsel.Dockerfile`'s apt-based mipsel cross-toolchain
|
|
51
|
+
# doesn't exist on 26.04's archive at all (Debian dropped the mipsel
|
|
52
|
+
# port in Trixie). See docs/records/0068 for the full incident.
|
|
49
53
|
- package-ecosystem: "docker"
|
|
50
54
|
directory: "/docker"
|
|
51
55
|
schedule:
|
|
52
56
|
interval: "weekly"
|
|
57
|
+
# Six of the Dockerfiles under here pin a real digest (five
|
|
58
|
+
# `manylinux_2_28_*` arches + `pypa-tracker`), each under a differently
|
|
59
|
+
# named `quay.io/pypa/...` image -- to Dependabot that's six distinct
|
|
60
|
+
# dependencies, so without a group a single upstream pypa bump opened
|
|
61
|
+
# six separate PRs instead of landing as one. Same fix as the
|
|
62
|
+
# github-actions entry above: one group, one PR per scan regardless of
|
|
63
|
+
# how many of the pinned images moved.
|
|
64
|
+
#
|
|
65
|
+
# `ubuntu` is deliberately excluded from that group (record 0068): a
|
|
66
|
+
# base-OS major-version bump is not routine hygiene the way a same-name
|
|
67
|
+
# pypa digest republish is, and grouping the two together is exactly
|
|
68
|
+
# what let a real break (see above) ride in on the back of nine safe
|
|
69
|
+
# bumps in one PR with no way to accept one without the other. Excluded
|
|
70
|
+
# from the group, not ignored outright -- `ubuntu` still gets its own
|
|
71
|
+
# PR (one, since every Dockerfile referencing it collapses onto the one
|
|
72
|
+
# dependency name already), just never sharing one with pypa's own.
|
|
73
|
+
groups:
|
|
74
|
+
docker-images:
|
|
75
|
+
patterns:
|
|
76
|
+
- "*"
|
|
77
|
+
exclude-patterns:
|
|
78
|
+
- "ubuntu"
|
|
@@ -143,6 +143,45 @@ jobs:
|
|
|
143
143
|
username: ${{ github.actor }}
|
|
144
144
|
password: ${{ github.token }}
|
|
145
145
|
|
|
146
|
+
# [0059]'s own incident, made preventable rather than just documented:
|
|
147
|
+
# the build-push step below always pushes `:latest`, so the instant it
|
|
148
|
+
# lands, whatever `:latest` pointed to before becomes untagged -- an
|
|
149
|
+
# OCI index with no tag of its own is exactly what GHCR's "delete
|
|
150
|
+
# untagged versions" cleanup cannot tell apart from real garbage, and
|
|
151
|
+
# that cleanup already deleted seven of fifteen published images once
|
|
152
|
+
# (record 0059), the pin itself never touched. Retagging the digest
|
|
153
|
+
# `resources/pinned_docker_images.toml` still names -- the one a real
|
|
154
|
+
# build still depends on until a maintainer's own PR repoints it --
|
|
155
|
+
# under a name derived from that same digest closes the window: it
|
|
156
|
+
# keeps its own tag no matter where `:latest` moves next, so a cleanup
|
|
157
|
+
# run in between publishing and repinning has nothing untagged to find.
|
|
158
|
+
# No-op (imagetools create is idempotent) if this tag already exists,
|
|
159
|
+
# and non-fatal if there is nothing pinned yet for a brand-new group.
|
|
160
|
+
- name: Preserve the digest :latest is about to leave behind
|
|
161
|
+
if: >-
|
|
162
|
+
github.event.inputs.only == ''
|
|
163
|
+
|| contains(
|
|
164
|
+
format(',{0},', github.event.inputs.only),
|
|
165
|
+
format(',{0},', matrix.image)
|
|
166
|
+
)
|
|
167
|
+
run: |
|
|
168
|
+
set -euo pipefail
|
|
169
|
+
CURRENT=$(python3 -c "
|
|
170
|
+
import tomllib
|
|
171
|
+
with open('src/cibuildmp/resources/pinned_docker_images.toml', 'rb') as f:
|
|
172
|
+
data = tomllib.load(f)
|
|
173
|
+
print(data.get('image_group', {}).get('${{ matrix.image }}', ''))
|
|
174
|
+
")
|
|
175
|
+
if [[ "$CURRENT" != ghcr.io/* ]]; then
|
|
176
|
+
echo "No existing ghcr.io pin for ${{ matrix.image }} yet -- nothing to preserve."
|
|
177
|
+
exit 0
|
|
178
|
+
fi
|
|
179
|
+
DIGEST="${CURRENT#*@sha256:}"
|
|
180
|
+
docker buildx imagetools create \
|
|
181
|
+
--tag "ghcr.io/${{ github.repository_owner }}/${{ matrix.image }}:pre-${DIGEST:0:12}" \
|
|
182
|
+
"$CURRENT" \
|
|
183
|
+
|| echo "::warning::could not preserve the previous digest for ${{ matrix.image }} -- it may already be gone"
|
|
184
|
+
|
|
146
185
|
- name: Build and push docker/${{ matrix.image }}.Dockerfile
|
|
147
186
|
id: push
|
|
148
187
|
# The `only` input, on each step rather than on the job.
|
|
@@ -23,11 +23,14 @@ on:
|
|
|
23
23
|
type: string
|
|
24
24
|
default: ""
|
|
25
25
|
|
|
26
|
-
# pull_request here is deliberately build-only:
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
26
|
+
# pull_request here is deliberately build-only: the `build` job (lint, type check, test,
|
|
27
|
+
# `uv build`, `twine check`) still runs, so a packaging change (a missing resources/*.toml in
|
|
28
|
+
# the wheel, a metadata error twine rejects) surfaces on the PR instead of at release time, when
|
|
29
|
+
# the version number is already spent — PyPI will not let the same version be uploaded twice,
|
|
30
|
+
# even after a delete. `deploy` itself does not run at all on pull_request (see its own `if:`) --
|
|
31
|
+
# every one of its steps was already gated behind `push`/`workflow_dispatch`, so it never granted
|
|
32
|
+
# or used publish permissions here, only paid for a checkout that could flake and had nothing to
|
|
33
|
+
# show for succeeding either way.
|
|
31
34
|
run-name: >
|
|
32
35
|
Build & Publish → ${{ github.event_name == 'push' && 'PyPI' ||
|
|
33
36
|
github.event_name == 'workflow_dispatch' && inputs.testpypi && 'TestPyPI' ||
|
|
@@ -119,6 +122,15 @@ jobs:
|
|
|
119
122
|
|
|
120
123
|
deploy:
|
|
121
124
|
needs: [build]
|
|
125
|
+
# Every real step below is already gated to `push` (real PyPI) or an
|
|
126
|
+
# opt-in `workflow_dispatch` (TestPyPI) -- on a `pull_request` event
|
|
127
|
+
# every one of them was already a no-op (see the comment on the
|
|
128
|
+
# workflow's own `pull_request` trigger above), so the job itself
|
|
129
|
+
# skipped doing anything real while still paying for a checkout that
|
|
130
|
+
# could flake and turn an unrelated PR red for a job that accomplished
|
|
131
|
+
# nothing on it either way. Confirmed live: exactly that happened on
|
|
132
|
+
# this repo's own PR #17.
|
|
133
|
+
if: github.event_name != 'pull_request'
|
|
122
134
|
runs-on: ubuntu-latest
|
|
123
135
|
outputs:
|
|
124
136
|
tag: ${{ steps.meta.outputs.tag }}
|
|
@@ -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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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,6 +55,12 @@ concurrency:
|
|
|
50
55
|
|
|
51
56
|
jobs:
|
|
52
57
|
plan:
|
|
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.
|
|
53
64
|
runs-on: ubuntu-latest
|
|
54
65
|
outputs:
|
|
55
66
|
identifiers: ${{ steps.plan.outputs.identifiers }}
|
|
@@ -115,6 +126,10 @@ jobs:
|
|
|
115
126
|
# passed back through `build`'s own outputs.
|
|
116
127
|
aggregate-results:
|
|
117
128
|
needs: [plan, build]
|
|
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.
|
|
118
133
|
if: always()
|
|
119
134
|
runs-on: ubuntu-latest
|
|
120
135
|
steps:
|
|
@@ -86,6 +86,18 @@ jobs:
|
|
|
86
86
|
# Job-level, not set on the `uses: ./` step itself -- a composite
|
|
87
87
|
# action's own inner steps are only guaranteed to see `env:` declared
|
|
88
88
|
# at job/workflow level, not on the specific step that calls `uses:`.
|
|
89
|
+
#
|
|
90
|
+
# Every value below is a plain literal or references only `inputs.*`/
|
|
91
|
+
# `env.*` -- deliberately. `.github/workflows/test-upstream-usermodule.yml`
|
|
92
|
+
# (docs/records/0069) tried putting a `${{ runner.temp }}`- and then a
|
|
93
|
+
# `${{ github.workspace }}`-based expression in a job-level `env:` value
|
|
94
|
+
# here and got a genuine "invalid workflow file" both times (zero jobs
|
|
95
|
+
# ever created) -- confirmed live, twice, but *which* part of that shape
|
|
96
|
+
# GitHub's schema actually rejects was not pinned down with real
|
|
97
|
+
# confidence (0069's own addendum has the detail and the open question).
|
|
98
|
+
# Until that is resolved elsewhere, treat a runner-scoped context
|
|
99
|
+
# (`runner.*`, and possibly `github.workspace`) in a job-level `env:`
|
|
100
|
+
# value as unproven here, not safe to copy.
|
|
89
101
|
env:
|
|
90
102
|
CIBMP_VERSION: 0.0.0-ci
|
|
91
103
|
# A real env var, not routed through the `skip:` input/`action.yml`'s
|
|
@@ -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
|