Skip to content

Commit 5bf4247

Browse files
committed
Prepare GixPython 0.2.0 for release
Prepare the next release without changing the existing `v0.1.0` tag so the maintainer can tag the reviewed release commit. Align the Cargo manifest, root lockfile package version, and Python runtime version assertion. Finalize the dated changelog from changes since `v0.1.0`: native fixture callbacks, upstream error propagation and removal of vendored crates, developer recipes, and release CI placement. Remove the local-checkout selector from the new feature list because it already shipped in `v0.1.0`. Update installation and release guidance for `0.2.0`, and record preparation status and local validation without claiming artifacts or publication. Validation on Apple Silicon with ordinary CPython 3.14.7: - Locked offline Cargo metadata and release metadata agree on `0.2.0`. - All nine helper checks pass. - Packaged extension builds offline with C/C++ compilers disabled. - All 110 Python integration tests pass, with two expected skips, after allowing localhost access for disposable HTTP/TLS test servers. - All seven Rust unit tests, Rust formatting, and whitespace checks pass. Maturin is unavailable locally. Release-profile artifacts, Intel and free-threaded validation, and final remote CI remain for the release workflow. No tag, push, account interaction, or publication was performed.
1 parent 3d55a86 commit 5bf4247

8 files changed

Lines changed: 73 additions & 21 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## Unreleased
99

10+
## 0.2.0 (2026-10-14)
11+
1012
### New Features
1113

1214
- Expose native cached read-only and writable fixtures through `gix.testtools`,
1315
with Python closures for fixture creation and post-processing.
14-
- Select a local Gitoxide checkout for Python development builds with
15-
`GIXPYTHON_GITOXIDE_PATH` or `--gitoxide-path`, using a separate development
16-
lockfile. `--packaged` forces release dependencies. Local builds report checkout HEAD.
16+
17+
### Bug Fixes
18+
19+
- Propagate native errors from fallible path, configuration, reference,
20+
shallow-state, and worktree queries after updating Gitoxide.
1721

1822
### Other
1923

20-
- Use public Gitoxide `main` containing all three upstream prerequisites and
21-
remove the vendored crates. `gix 0.89.0` does not yet include these fixes.
22-
- Reintegrate the updated Gitoxide `pygix` branch and its security-audit base.
23-
Refresh the three bundled prerequisites and propagate native errors from
24-
fallible path, configuration, reference, shallow-state, and worktree queries.
24+
- Pin Gitoxide to public `main` revision
25+
`09f85be4e3fda42f3e8fd19c53a63758fdf6fb3d`, containing the upstream prerequisites
26+
for per-client TLS configuration, raw reflog messages, and literal submodule
27+
names. Remove the vendored crates and packaged patches. `gix 0.89.0` does not
28+
yet include these fixes.
29+
- Group developer commands in the `justfile` and add `just run-release` for
30+
isolated exploration of the latest or a specified published version, with
31+
IPython completion for interactive sessions.
32+
- Run platform-independent release validation and source archive creation on
33+
Ubuntu, while retaining macOS builds and tests for all four release wheels.
2534

2635
## 0.1.0 (2026-10-05)
2736

‎Cargo.lock‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "pygix"
3-
version = "0.1.0"
3+
version = "0.2.0"
44
edition = "2024"
55
rust-version = "1.89"
66
authors = ["Sebastian Thiel <sebastian.thiel@icloud.com>"]

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Native iterators and output streams remain lazy. Use their context managers or `
3939

4040
## Installation
4141

42-
Once version 0.1.0 is published, install it with:
42+
Install the latest published version with:
4343

4444
```sh
4545
python -m pip install --only-binary=:all: GixPython

‎RELEASING.md‎

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Releasing GixPython
22

3-
The first version is **0.1.0**, for **macOS 11+ on Apple Silicon and Intel**.
3+
Version **0.2.0** targets **macOS 11+ on Apple Silicon and Intel**.
44
The release contains four wheels and one source archive:
55

66
| Architecture | Ordinary CPython | Free-threaded CPython |
@@ -14,8 +14,9 @@ Source builds require Rust 1.89+, a linker, and access to the pinned Rust depend
1414

1515
## One-time maintainer setup
1616

17-
Use a PyPI account with two-factor authentication. Register a pending GitHub
18-
Trusted Publisher with these exact values:
17+
Use a PyPI account with two-factor authentication. For a first upload, register
18+
a pending GitHub Trusted Publisher with these exact values. For an existing
19+
project, confirm that its Trusted Publisher uses the same values:
1920

2021
| Field | Value |
2122
| --- | --- |
@@ -43,6 +44,14 @@ Use Gitoxide's changelog style: `## VERSION (YYYY-MM-DD)`, with `New Features`,
4344
`Bug Fixes`, and `Other` sections when applicable. Set the date to the actual
4445
release day before creating the tag.
4546

47+
For `0.2.0`, review the dated section in `CHANGELOG.md` and keep `Unreleased`
48+
for future changes. Validate locally before committing the preparation:
49+
50+
```sh
51+
python3 etc/check_release.py --tag v0.2.0
52+
just helper-tests
53+
```
54+
4655
Run CI on the final commit. Then start the **Release** workflow from that
4756
commit's branch with **publish unchecked**, or use:
4857

@@ -64,14 +73,18 @@ older development artifacts separate from the release set.
6473

6574
## Publish
6675

67-
After reviewing the tested commit, create an annotated tag `v0.1.0` and push
76+
After reviewing the tested commit, create an annotated tag `v0.2.0` and push
6877
that tag to `origin`. Start **Release** again with that tag selected and
6978
**publish checked**:
7079

7180
```sh
72-
gh workflow run release.yml --repo GitoxideLabs/GixPython --ref v0.1.0 -f publish=true
81+
git tag -a v0.2.0 -m "Release GixPython 0.2.0"
82+
git push origin v0.2.0
83+
gh workflow run release.yml --repo GitoxideLabs/GixPython --ref v0.2.0 -f publish=true
7384
```
7485

86+
Preserve the existing `v0.1.0` tag and published history.
87+
7588
The workflow checks that the tag matches the version, rebuilds and tests the
7689
complete set, then waits for the `pypi` environment approval. Approve the job
7790
after inspecting its artifacts. The official PyPI action uploads those exact
@@ -82,11 +95,12 @@ Once uploaded, verify on both architectures and both interpreter kinds:
8295

8396
```sh
8497
python -m venv .release-check
85-
.release-check/bin/python -m pip install --only-binary=:all: GixPython==0.1.0
98+
.release-check/bin/python -m pip install --only-binary=:all: GixPython==0.2.0
8699
.release-check/bin/python -c 'import gix; print(gix.__version__, gix.build_features())'
87100
```
88101

89102
For free-threaded Python, set `PYTHON_GIL=0` and verify importing `gix` leaves
90-
`sys._is_gil_enabled()` false. An optional GitHub release can use the version's
91-
changelog text. PyPI filenames cannot be replaced after upload; corrections
92-
require a new version.
103+
`sys._is_gil_enabled()` false. The workflow publishes to PyPI only; create an
104+
optional GitHub release separately for `v0.2.0`, using only the `0.2.0` section
105+
of `CHANGELOG.md` as its release notes. PyPI filenames cannot be replaced after
106+
upload; corrections require a new version.

‎docs/implementation-plan.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,11 @@ configuration destruction/retry while an in-memory native owner is active
102102
(`e33597f`). The [validation record](validation.md) lists the passing release
103103
wheel, free-threaded, hash-selection, Rust, and no-C builds, and distinguishes
104104
local evidence from platform checks configured for CI.
105+
106+
## Release preparation
107+
108+
Version `0.2.0` is prepared locally with aligned Cargo metadata and Python
109+
version checks, dated release notes, and updated maintainer instructions.
110+
Local validation is recorded in [validation.md](validation.md). The maintainer
111+
will create the tag; final platform CI, release artifact validation, and
112+
publication remain separate steps in [RELEASING.md](../RELEASING.md).

‎docs/validation.md‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,26 @@
11
# Local validation
22

3+
## Version 0.2.0 preparation (2026-10-14)
4+
5+
The Cargo manifest, root lockfile package, locked offline Cargo metadata,
6+
and Python package version assertion agree on `0.2.0`. The release metadata
7+
gate accepts `v0.2.0`; all nine build/release/justfile helper checks pass.
8+
The dated changelog consolidates changes since `v0.1.0`, and the maintainer
9+
instructions use the new version while preserving the existing tag.
10+
11+
The packaged extension builds offline on Apple Silicon with C/C++ compilers
12+
disabled. CPython 3.14.7 passes all 110 integration tests with two expected
13+
skips. The initial sandboxed run could not bind loopback HTTP/TLS servers;
14+
the full suite passes when localhost access is allowed. All seven Rust unit
15+
tests, Rust formatting, and whitespace checks pass. The runtime reports
16+
`0.2.0` and the packaged Gitoxide revision
17+
`09f85be4e3fda42f3e8fd19c53a63758fdf6fb3d`.
18+
19+
No `0.2.0` release artifacts, free-threaded or Intel builds, remote CI, tag,
20+
push, or publication were performed. Maturin is unavailable locally; the
21+
manual Release workflow remains responsible for building and validating
22+
the complete four-wheel and source-archive set before publication.
23+
324
## Python fixture tools (2026-10-12)
425

526
The pinned `gix-testtools 0.22.0` is available as `gix.testtools` in default

‎tests/test_package.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def test_import_keeps_the_gil_disabled(self):
1111
self.assertFalse(sys._is_gil_enabled())
1212

1313
def test_build_identity(self):
14-
self.assertEqual(gix.__version__, "0.1.0")
14+
self.assertEqual(gix.__version__, "0.2.0")
1515
self.assertIn("parallel", gix.build_features())
1616
self.assertTrue({"sha1", "sha256"}.intersection(gix.build_features()))
1717
self.assertEqual(len(gix.__gix_revision__), 40)

0 commit comments

Comments
 (0)