Skip to content

Release: merge release into main - #78

Merged
b-re-w merged 39 commits into
mainfrom
release
Oct 25, 2026
Merged

b-re-w merged 39 commits into
mainfrom
release

Conversation

@github-actions

@github-actions github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Automated sync of develop (40f69a3) into release. Markdown outside README.md and docs/ subfolders is removed by .github/scripts/release/sync-release.sh.

…eter (#72)

Generated py.extension_module() targets set limited_api: '3.15'. On a
free-threaded 3.15 interpreter that selects PEP 803's abi3t; Meson's
-Dpython.allow_limited_api=false opts out. setup() passes the nearest
.venv interpreter through a native file, so Meson stops building
against the Python it runs on itself.
…ython-multiplatform #163 (#72)

Removes 3.14.7, 3.13.0 and the 3.15.0 desktop GIL builds. 3.15 and
3.15t both name 3.15.0t. Android and iOS keep python.org's 3.15.0 GIL
archives as the one exception; android315/ios315 take #163's URL and
digest with freeThreaded = true when it lands. Every row is pinned, so
the digest is no longer nullable.
#72)

Every target: a GIL-tagged extension (cpython-3XY-, cp3XY-, abi3),
which CPython 3.15t will not load. Host only: each free-threaded
extension is imported in its own isolated process of the project's
3.15t .venv interpreter with a 30 s timeout, and sys._is_gil_enabled()
says whether it turned the GIL on. Findings are BundleResult.warnings;
BundleRequest.gilImportProbe = false skips the probe.
CPython 3.15t only: install, Meson abi3t, GIL warning (#72)
…n) (#65)

Records the 2026-10-17 decisions as planned: maturin and PyO3 with
abi3t, target order host, Android arm64, iOS; pypackpack acquires the
toolchains; separate from the compile slot; a Cargo.toml directory
inside a Python package is the module, and [tool.ppp.rust] names a
crate outside one (torchnative's torch._C). maturin's iOS and Android
support is cited as shipped, with a cargo-direct fallback.
The root add/remove/sync helpers become private functions of
DefaultMiddleware and the python list/find/install/uninstall/use
overrides hold DevEnv's bodies unchanged. DevEnv.showDependencyTree
had no caller (DefaultMiddleware shows the root tree itself) and goes
with the file.
Refactor: Fold DevEnv into DefaultMiddleware (#86)
…e) (#81)

The maintainer's spec sheet form: build <package> source [<bundle type,
default binary>] compiles for the canonical target and then bundles;
build <package> resource bundles the source without compiling. With a
bundle kind the target is normalized and defaults to the host, and the
bundle's warnings are printed. build <package> alone still only
compiles. The workspace package lookup moves to utils/Workspace.kt so
the CLI can find the package directory too, and the binary refusal now
names every implemented bundle type.
build: Take the bundle as an argument (build <package> source|resource) (#81)
CodeAPI routes by bundle type: a library's single or fat wheel goes to
PyPIPublishAPI, an app's binary or patch to FastTrackAPI, which refuses
because no FastTrack server exists. PyPIPublishAPI uploads the one
wheel build <package> source single|fat left, through pypackpack's uv;
no token is stored, --publish-url and --dry-run pass through, and a
missing wheel names the build command. The deploy CLI now finds the
package as build does, through the workspace.
deploy: Publish code single|fat wheels to PyPI with uv publish (#90)
Crates are found by convention (a Cargo.toml directory inside a Python
package) or through [tool.ppp.rust]. Each is built by a pinned maturin
through uv tool run, with PyO3's abi3t, against the project's .venv,
with Cargo's build directory under build/. The wheel's one extension is
placed at the module's path in the site-packages Meson installed the
package into, so single and fat carry it like a C extension. Missing
cargo, uv or .venv, or a non-host target, is refused before maturin
runs. Meson's scan and the resource payload skip crate directories.
Cargo backend, stage 1: build a package's Rust crates for the host (#92)
Android cross-builds with maturin, the NDK's clang for API 24 and the
target Python through PYO3_CROSS_LIB_DIR, linking the target's
libpython3.15t.so as CPython's own Android extensions do. iOS builds
with cargo rustc directly, since maturin needs a cross virtual
environment the XCframework lacks: pypackpack writes the PyO3 config and
links the slice's Python.framework. A missing Rust target, NDK, Xcode or
target Python is refused before anything builds.
Cargo backend, stage 2: build Rust crates for Android and iOS (#94)
…96)

Kotlin's deleteRecursively walks into a link to a directory and empties
its target. Bundle output on --overwrite, compile's build directory,
python use replacing .venv, python uninstall, installPython staging,
package removal and the Cargo output all used it on directories that can
hold a user's links. They now call deleteWithoutFollowingLinks
(utils/FileTree.kt), which removes a link and never what it points at.
Fix: Delete directories without following symbolic links out of them (#96)
… signing, staging) (#99)

The POM gains url, Apache-2.0, developer and SCM; the publication gains
sources and javadoc jars and is signed when a key is given. A staging
file repository and a centralBundle zip rehearse the Central Portal
upload without making it. check_central_bundle.py checks a staging
directory against Central's requirements; it failed on the old
publication and passes on a signed rehearsal.
Publishing: Prepare packpack for Maven Central (#99)
…quals the group (follow-up to #99)

args.remove(plugin_id) removed the first equal argument, the group, when
the plugin id and the group are the same string, as toolchain's are. The
flag and its value are now removed by position (toolchain#98 has the same
fix).
Fix: check_central_bundle.py with --plugin-id equal to the group (follow-up to #99)
…es in gradle.properties (#102)

publish-maven.yml runs on a published packpack-v* Release in the
maven-central environment: tag and version agree and are new on Central,
missing secrets are named, the bundle is signed, checked and uploaded to
the Central Portal as USER_MANAGED, so a person still presses Publish. A
manual run stops before the upload. mavenGroup and packpackVersion live
in gradle.properties only. publish-pypi.yml now runs only for v*
releases.
Publishing: Release workflow for packpack to Maven Central (#102)
b-re-w and others added 3 commits October 26, 2026 00:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant