Skip to content

Commit 073b03e

Browse files
authored
Release v251E (#87)
1 parent 1080fdc commit 073b03e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+181
-152
lines changed

.bumpversion.toml

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.bumpversion]
22

3-
current_version = "2517"
3+
current_version = "251E"
44
allow_dirty = true
55

66
parse = """(?x)
@@ -11,13 +11,12 @@ parse = """(?x)
1111
)
1212
(?:\\.(?P<patch>[1-9][0-9]*))?
1313
"""
14-
parts = { release = { calver_format = "{YY}{M62}{D62}" } }
14+
parts = { release = { calver_format = "{YY}{M16}{D62}" } }
1515
serialize = ["{release}.{patch}", "{release}"]
1616

1717
files = [
1818
{filename = "docker-bake.hcl"},
1919
{filename = "docs/part/image-tags.md"},
20-
{filename = "bin/py.sh"},
2120
{glob = "tests/share/info/*.json"},
2221
{filename = "tests/test_readme_advanced/info.json"},
2322
]

.github/MAINTAINING.md

-24
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,3 @@ $ task build:*
3030
$ task shell:* -- -v ...
3131
$ task run:* -- ...
3232
```
33-
34-
## Pre-release
35-
36-
```shell
37-
$ task checkupd
38-
$ task lint clean build test
39-
$ task docs
40-
```
41-
42-
## Release
43-
44-
```shell
45-
$ task release:version
46-
$ task release:changelog
47-
$ task lint clean build test
48-
$ task release:push
49-
```
50-
51-
Update image digests after pushing to registry:
52-
```shell
53-
$ task docs
54-
```
55-
56-
Manually update [repository overview](https://hub.docker.com/repository/docker/makukha/multipython/general) from `DOCKERHUB.md`.

CHANGELOG.md

+33
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,39 @@ All notable changes to this project will be documented in this file. Changes for
77

88
<!-- towncrier release notes start -->
99

10+
## [v251E](https://github.com/makukha/multipython/releases/tag/v251E) — 2025-01-14
11+
12+
### Breaking 🔥
13+
14+
- System Python is now provided through separate virtual environment, keeping respective original tag distribution untouched ([#76](https://github.com/makukha/multipython/issues/76))
15+
16+
### Added 🌿
17+
18+
- Helper utility command `py tag <executable>` ([#59](https://github.com/makukha/multipython/issues/59))
19+
- [tox-multipython](https://github.com/makukha/tox-multipython) plugin for interpreter discovery with tox 3 ([#70](https://github.com/makukha/multipython/issues/70))
20+
- New JSON metadata key `system`, containing information about system Python environment ([#76](https://github.com/makukha/multipython/issues/76))
21+
22+
### Changed
23+
24+
- Updated base Debian image ([#81](https://github.com/makukha/multipython/issues/81))
25+
- Updated uv to v0.5.18 ([#77](https://github.com/makukha/multipython/issues/77))
26+
- Updated virtualenv-multipython to v0.3.1 ([#72](https://github.com/makukha/multipython/issues/72))
27+
28+
### Docs
29+
30+
- It is now not necessary to have pulled Docker images to update docs ([#54](https://github.com/makukha/multipython/issues/54))
31+
- Updated image digests formatting ([#55](https://github.com/makukha/multipython/issues/55))
32+
33+
### Misc
34+
35+
- Added tests for single version images ([#53](https://github.com/makukha/multipython/issues/53))
36+
- Tests made more robust ([#71](https://github.com/makukha/multipython/issues/71))
37+
- Refactored `py` to use separate command modules under the hood ([#76](https://github.com/makukha/multipython/issues/76))
38+
- Improved Docker layer structure ([#76](https://github.com/makukha/multipython/issues/76))
39+
- Re-implemented Bash documentation scripts in Python ([#79](https://github.com/makukha/multipython/issues/79))
40+
- Started checking docsubfile.py with mypy and ruff ([#79](https://github.com/makukha/multipython/issues/79))
41+
42+
1043
## [v2517](https://github.com/makukha/multipython/releases/tag/v2517) — 2025-01-07
1144

1245
Prepare for multi-source (pyenv + uv) and multi-implementation (PyPy, RustPython, Jython, ...) releases.

DOCKERHUB.md

+23-22
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
<!-- docsub: begin -->
44
<!-- docsub: include docs/part/features.md -->
5-
* `makukha/multipython` — prerelease and [supported](https://devguide.python.org/versions) Python distributions
5+
* `makukha/multipython:latest` — prerelease and [supported](https://devguide.python.org/versions) Python distributions
66
* `makukha/multipython:cpython` — latest bugfix CPython image
77
* `makukha/multipython:supported`[supported](https://devguide.python.org/versions) versions, not including prerelease
88
* `makukha/multipython:unsafe` — all versions, including end-of-life
99
* `makukha/multipython:{py314...}` — single version images
10-
* All images include [pip](https://pip.pypa.io), [pyenv](https://github.com/pyenv/pyenv), [tox](https://tox.wiki), [uv](https://docs.astral.sh/uv)
11-
* Tox env names match tag names, even non-standard `py313t`
10+
* All images except `base` have system Python in virtual environment
11+
* All images include [pip](https://pip.pypa.io), [pyenv](https://github.com/pyenv/pyenv), [setuptools](https://setuptools.pypa.io), [tox](https://tox.wiki), [uv](https://docs.astral.sh/uv), [virtualenv](https://virtualenv.pypa.io)
12+
* Tox and virtualenv understand multipython tag names, even non-standard `py313t`
1213
* [Build your own environment](https://github.com/makukha/multipython#build-your-own-environment) from single version images
1314
* Based on `debian:stable-slim`
1415
* Single platform `linux/amd64`
@@ -26,24 +27,24 @@
2627

2728
<!-- docsub: begin -->
2829
<!-- docsub: include docs/part/image-tags.md -->
29-
* [`latest, 2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*all supported and prerelease CPython versions*
30-
* [`cpython, cpython-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.13.1 — latest version*
31-
* [`supported, supported-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*all supported CPython versions*
32-
* [`unsafe, unsafe-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*all CPython versions, including EOL*
33-
* [`base, base-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*pyenv, uv*
34-
* [`py314t, py314t-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.14.0a3 free-threaded*
35-
* [`py313t, py313t-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.13.1 free-threaded*
36-
* [`py314, py314-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.14.0a3*
37-
* [`py313, py313-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.13.1*
38-
* [`py312, py312-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.12.8*
39-
* [`py311, py311-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.11.11*
40-
* [`py310, py310-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.10.16*
41-
* [`py39, py39-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.9.21*
42-
* [`py38, py38-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.8.20*
43-
* [`py37, py37-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.7.17*
44-
* [`py36, py36-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.6.15*
45-
* [`py35, py35-2517`](https://github.com/makukha/multipython/blob/v2517/Dockerfile)*CPython 3.5.10*
46-
* [`py27, py27-2517`](https://github.co-m/makukha/multipython/blob/v2517/Dockerfile)*CPython 2.7.18*
30+
* [`latest, 251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*all supported and prerelease CPython versions*
31+
* [`cpython, cpython-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.13.1 — latest version*
32+
* [`supported, supported-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*all supported CPython versions*
33+
* [`unsafe, unsafe-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*all CPython versions, including EOL*
34+
* [`base, base-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*pyenv, uv*
35+
* [`py314t, py314t-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.14.0a3 free-threaded*
36+
* [`py313t, py313t-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.13.1 free-threaded*
37+
* [`py314, py314-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.14.0a3*
38+
* [`py313, py313-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.13.1*
39+
* [`py312, py312-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.12.8*
40+
* [`py311, py311-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.11.11*
41+
* [`py310, py310-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.10.16*
42+
* [`py39, py39-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.9.21*
43+
* [`py38, py38-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.8.20*
44+
* [`py37, py37-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.7.17*
45+
* [`py36, py36-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.6.15*
46+
* [`py35, py35-251E`](https://github.com/makukha/multipython/blob/v251E/Dockerfile)*CPython 3.5.10*
47+
* [`py27, py27-251E`](https://github.co-m/makukha/multipython/blob/v251E/Dockerfile)*CPython 2.7.18*
4748

4849
All images with Python include pip, pyenv, tox, uv.
4950
<!-- docsub: end -->
@@ -82,7 +83,7 @@ See [Documentation](https://github.com/makukha/multipython?tab=readme-ov-file) f
8283

8384
<!-- docsub: begin -->
8485
<!-- docsub: include docs/part/python-versions.md -->
85-
| Distribution | Note | Tag | Executable | Source |
86+
| Distribution | Note | Tag | Command | Source |
8687
|------------------|---------------|----------|---------------|--------|
8788
| CPython 3.14.0a3 | free threaded | `py314t` | `python3.14t` | pyenv |
8889
| CPython 3.13.1 | free threaded | `py313t` | `python3.13t` | pyenv |

README.md

+40-28
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@
1212

1313
<!-- docsub: begin -->
1414
<!-- docsub: include docs/part/features.md -->
15-
* `makukha/multipython` — prerelease and [supported](https://devguide.python.org/versions) Python distributions
15+
* `makukha/multipython:latest` — prerelease and [supported](https://devguide.python.org/versions) Python distributions
1616
* `makukha/multipython:cpython` — latest bugfix CPython image
1717
* `makukha/multipython:supported`[supported](https://devguide.python.org/versions) versions, not including prerelease
1818
* `makukha/multipython:unsafe` — all versions, including end-of-life
1919
* `makukha/multipython:{py314...}` — single version images
20-
* All images include [pip](https://pip.pypa.io), [pyenv](https://github.com/pyenv/pyenv), [tox](https://tox.wiki), [uv](https://docs.astral.sh/uv)
21-
* Tox env names match tag names, even non-standard `py313t`
20+
* All images except `base` have system Python in virtual environment
21+
* All images include [pip](https://pip.pypa.io), [pyenv](https://github.com/pyenv/pyenv), [setuptools](https://setuptools.pypa.io), [tox](https://tox.wiki), [uv](https://docs.astral.sh/uv), [virtualenv](https://virtualenv.pypa.io)
22+
* Tox and virtualenv understand multipython tag names, even non-standard `py313t`
2223
* [Build your own environment](https://github.com/makukha/multipython#build-your-own-environment) from single version images
2324
* Based on `debian:stable-slim`
2425
* Single platform `linux/amd64`
@@ -53,11 +54,11 @@ $ docker run --rm -v .:/src -w /src makukha/multipython:py310 tox run
5354
<!-- docsub: end #readme -->
5455

5556

56-
# Python versions
57+
## Python versions
5758

5859
<!-- docsub: begin -->
5960
<!-- docsub: include docs/part/python-versions.md -->
60-
| Distribution | Note | Tag | Executable | Source |
61+
| Distribution | Note | Tag | Command | Source |
6162
|------------------|---------------|----------|---------------|--------|
6263
| CPython 3.14.0a3 | free threaded | `py314t` | `python3.14t` | pyenv |
6364
| CPython 3.13.1 | free threaded | `py313t` | `python3.13t` | pyenv |
@@ -80,20 +81,31 @@ $ docker run --rm -v .:/src -w /src makukha/multipython:py310 tox run
8081
<!-- docsub: end -->
8182

8283

83-
### Executables
84+
## Commands
8485

85-
All executables are on `PATH` as symlinks to respective distributions. System ⚙️ Python, that is always the latest bugfix version, is also available as `python`.
86+
All commands are on `PATH` as symlinks to respective distributions. System ⚙️ Python, that is always the latest bugfix version, is available as `python` in virtual environment along with `pip`, `tox`, and `virtualenv`.
8687

87-
### Distribution sources
88+
## Distribution sources
8889

8990
The only used source used is [pyenv](https://github.com/pyenv/pyenv). However, it is planned to use [python-build-standalone](https://github.com/astral-sh/python-build-standalone) distributions for supported Python versions to speed up tests and image builds.
9091

91-
### Versions
92+
## Versions
9293

9394
* Check [Versions](#versions) section for [pyenv](https://github.com/pyenv/pyenv), [tox](https://tox.wiki), [uv](https://docs.astral.sh/uv), [pip](https://pip.pypa.io), [setuptools](https://setuptools.pypa.io) versions.
9495

9596
* See [Status of Python versions](https://devguide.python.org/versions) for the list of end-of-life versions.
9697

98+
## Tox and virtualenv
99+
100+
All single version tags above, including `py313t` and `py314t`, can be used as tox environment names (see example above) or as virtualenv python requests:
101+
```shell
102+
$ virtualenv --python py314t /tmp/venv
103+
```
104+
105+
This is possible because two custom plugins are pre-installed in system environment (tox-multipython is installed only for tox 3). When building custom image, they are automatically added by `py install`. Both plugins are part of this project, and use multipython image for self testing.
106+
* [virtualenv-multipython](https://github.com/makukha/virtualenv-multipython) — discovery plugin for virtualenv and tox 4
107+
* [tox-multipython](https://github.com/makukha/tox-multipython) — discovery plugin for tox 3
108+
97109

98110
# Advanced usage
99111

@@ -278,7 +290,7 @@ docker run --rm makukha/multipython:latest py info -c
278290
```json
279291
{
280292
"multipython": {
281-
"version": "2517",
293+
"version": "251E",
282294
"subset": "latest",
283295
"root": "/root/.multipython"
284296
},
@@ -348,7 +360,7 @@ docker run --rm makukha/multipython:latest py info -c
348360

349361
# Versions
350362

351-
Tools available in [Base image](#base-image) have exactly the same versions in all Python images. For Python package versions, `system` environment is used.
363+
Tools available in `base` image have (no surprise) the same versions in all other images. For Python package versions, `system` environment is used.
352364

353365
✨ latest versions will be updated in upcoming releases.
354366

@@ -444,23 +456,23 @@ $ docker run --rm -v .:/src -w /src makukha/multipython@sha256:... tox run
444456
<!-- docsub: lines after 2 -->
445457
| Image tag | Image digest |
446458
|---|---|
447-
| `base-2517` | `sha256:24dcc37b3a4056948f8597f410294285d9fc36f5498ce128f549dae01dde01ab` |
448-
| `cpython-2517` | `sha256:35575dbed8aaba989771ee28948971d52355d586512dd09decceb72b1c180cf7` |
449-
| `py27-2517` | `sha256:fc94ecb658fe22690a26cbabdad01c5b18f8b1a819f1ea8020a318ff8e9bb664` |
450-
| `py310-2517` | `sha256:164286485adb7785e9eb813840aec82eb9d2216b37ac82de069e3794e6888191` |
451-
| `py311-2517` | `sha256:824fcead713fad77d4e7c5e5240ba526c86e83ce6341e7dd6a5f7969b9b23786` |
452-
| `py312-2517` | `sha256:5071b73e4f55af32ca25dcd161ce0dd5be76ec20a85709451a30449e22b87337` |
453-
| `py313-2517` | `sha256:12091f77b5548d42daabe30024a05b3c8ba9121197ac1edc4e94538ac3e27e9f` |
454-
| `py313t-2517` | `sha256:1f1e1f9b0289da360849fa49443f7306cf287ea274f147530765bf22a5f15705` |
455-
| `py314-2517` | `sha256:21b95ff22d207948e908442f41f1169b9bd49bdd6f7004959829fe10d87829eb` |
456-
| `py314t-2517` | `sha256:09c8b4b08cae9c91747c1aa7d958b6c9ffad9c80daad668f555a4c615ececce4` |
457-
| `py35-2517` | `sha256:aaf9506c3a9b6b9fba2606aa586646c3653507ccee5105a8b64bd9b1d92269bb` |
458-
| `py36-2517` | `sha256:b443be7588a65994a61910ee912f442110f68e724069509d38896a37420ba8fb` |
459-
| `py37-2517` | `sha256:a0231c32a7cd2f64f555c9500a9e4ed81a277269cfcda58dc768f8947f93405f` |
460-
| `py38-2517` | `sha256:2793e528d58cdff20cf7199669d153a09591870fb7fd77c12719523c3894ca4c` |
461-
| `py39-2517` | `sha256:d5addd34754f0bda92ffce443b6f1ac8a27491676680c67bd6729470d2e475ca` |
462-
| `supported-2517` | `sha256:a569d378b7c0a23110883bcaf227dd505da037435e24e29db3be338f44e76b3d` |
463-
| `unsafe-2517` | `sha256:8cdd2df01a12bb829a40283aaa6db1860bcd36bf01e4aa87a343f939ccf4d36c` |
459+
| `base-251E` | `sha256:0576dd4a6ae6c1f6b78bd03e50a61d1b52c825b9aea4dff668d5b8c95fe1094e` |
460+
| `cpython-251E` | `sha256:db00affc41d93becaebd2a4cc1382ddd254fdcf0768b769d30889af2da329eea` |
461+
| `py27-251E` | `sha256:b1300fb67a26f6622e1c5f6ae7bf2e21e81cc69e49c4e17808db452073f63829` |
462+
| `py310-251E` | `sha256:db520c2205fcc06dbc8e79e57cfbcaac76519a5df4f7a9ab91090fe07fda1b71` |
463+
| `py311-251E` | `sha256:c1ecdca49a3592350fee7d20919237374cb5184fc1b07e8a49f261fdae5512b1` |
464+
| `py312-251E` | `sha256:0a6804455d98a5cd474a504036dcc781d1c8f793c5f76aa60683e1fc7fba67ba` |
465+
| `py313-251E` | `sha256:33dbd5a64448807719f51712b736a50f14c4383a9372c24e0945227b15a2d654` |
466+
| `py313t-251E` | `sha256:7d149437e24f357e9b0409812e37e38593eae934c827aceb5e8073e72c6a20d9` |
467+
| `py314-251E` | `sha256:14a95f46ae0024d33caebd755ec9b3c4120f3ecb884eb24938784d5ac45ce1ec` |
468+
| `py314t-251E` | `sha256:59a0a9d29219a91108f4f11dfe605769ef28c5e06b5eb9f344155799fee56893` |
469+
| `py35-251E` | `sha256:50bb600a106edcf7d8c8913a8a0ffe94530d0d9c0cf30c8be519a4920a88b646` |
470+
| `py36-251E` | `sha256:4c13b44987d6dbe0b1225a90495c84a3c766f6a7b48801b1130ab596bcd589ca` |
471+
| `py37-251E` | `sha256:9bb0cb5e1743b866bfb524b07464c94f638994b328835f4d3e66e1cb4da758b1` |
472+
| `py38-251E` | `sha256:29d6fb9da0d4ca0d0a95669cdbd36c275153a3db666fe53edae7f03551ab9699` |
473+
| `py39-251E` | `sha256:381a89082ccdb2e08d4130ff3e39db6c46c75bcb00c85524fc76d6c01f2b7e0a` |
474+
| `supported-251E` | `sha256:b09762008d72150230c5f3c964d2680a615246eb13f39eb87a98a8e4d7be2830` |
475+
| `unsafe-251E` | `sha256:9dad116083a8b0c1482c4f755340ae07a4d024d9e51a1a504d77b009749ebc87` |
464476
<!-- docsub: end -->
465477

466478

Taskfile.yml

+34-3
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,33 @@ tasks:
104104
DOCKERHUB.md
105105
README.md
106106

107-
# release
107+
#
108+
# PRE-RELEASE
109+
# -------------
110+
#
111+
# > task checkupd
112+
# > task lint
113+
# > task clean build test
114+
# > task docs
115+
# > (make sure docs didn't change)
116+
#
117+
# RELEASE
118+
# ---------
119+
#
120+
# > task release:version
121+
# > task release:changelog
122+
# > (proofread changelog)
123+
#
124+
# > task checkupd
125+
# > task lint
126+
# > task build test
127+
#
128+
# > task release:push
129+
# > task docs
130+
# > (make sure image digests changed)
131+
#
132+
# > (manually update https://hub.docker.com/repository/docker/makukha/multipython/general)
133+
#
108134

109135
release:version:
110136
desc: Bump release version.
@@ -126,11 +152,16 @@ tasks:
126152
- towncrier build --yes --version "{{.VERSION}}"
127153

128154
release:push:
129-
desc: Push base images to Docker Registry.
155+
desc: Push images to Docker Registry.
130156
prompt: Release all images. Continue?
131157
vars:
132158
TARGETS:
133159
sh: docker buildx bake --print 2>/dev/null | jq -r '.group.default.targets[]'
134160
cmds:
135-
- cmd: docker buildx bake --push {{.ITEM}}; sleep 10
161+
- cmd: docker buildx bake --push {{.ITEM}} ; sleep 60
136162
for: { var: TARGETS }
163+
164+
release:push:*:
165+
desc: Push specific Bake target to Docker Registry.
166+
cmds:
167+
- docker buildx bake --push {{index .MATCH 0}}

docker-bake.hcl

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ variable "IMG" {
22
default = "makukha/multipython"
33
}
44
variable "RELEASE" {
5-
default = "2517"
5+
default = "251E"
66
}
77

88
variable "BASE_VERSIONS" {

0 commit comments

Comments
 (0)