Skip to content

Commit 226ee53

Browse files
authored
Update versions (#97)
1 parent d59bc31 commit 226ee53

33 files changed

+348
-337
lines changed

.dev/install-macports.sh

-20
This file was deleted.

DOCKERHUB.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@
2828
<!-- docsub: begin -->
2929
<!-- docsub: include docs/part/image-tags.md -->
3030
* [`latest, 251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*all supported and prerelease CPython versions*
31-
* [`cpython, cpython-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.13.1 — latest version*
31+
* [`cpython, cpython-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.13.2 — latest version*
3232
* [`supported, supported-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*all supported CPython versions*
3333
* [`unsafe, unsafe-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*all CPython versions, including EOL*
3434
* [`base, base-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*pyenv, uv*
3535
* [`py314t, py314t-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.14.0a4 free-threaded*
36-
* [`py313t, py313t-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.13.1 free-threaded*
36+
* [`py313t, py313t-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.13.2 free-threaded*
3737
* [`py314, py314-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.14.0a4*
38-
* [`py313, py313-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.13.1*
39-
* [`py312, py312-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.12.8*
38+
* [`py313, py313-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.13.2*
39+
* [`py312, py312-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.12.9*
4040
* [`py311, py311-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.11.11*
4141
* [`py310, py310-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.10.16*
4242
* [`py39, py39-251R`](https://github.com/makukha/multipython/blob/v251R/Dockerfile)*CPython 3.9.21*
@@ -86,10 +86,10 @@ See [Documentation](https://github.com/makukha/multipython?tab=readme-ov-file) f
8686
| Distribution | Note | Tag | Command | Source |
8787
|------------------|---------------|----------|---------------|--------|
8888
| CPython 3.14.0a4 | free threaded | `py314t` | `python3.14t` | pyenv |
89-
| CPython 3.13.1 | free threaded | `py313t` | `python3.13t` | pyenv |
89+
| CPython 3.13.2 | free threaded | `py313t` | `python3.13t` | pyenv |
9090
| CPython 3.14.0a4 | | `py314` | `python3.14` | pyenv |
91-
| CPython 3.13.1 | system ⚙️ | `py313` | `python3.13` | pyenv |
92-
| CPython 3.12.8 | | `py312` | `python3.12` | pyenv |
91+
| CPython 3.13.2 | system ⚙️ | `py313` | `python3.13` | pyenv |
92+
| CPython 3.12.9 | | `py312` | `python3.12` | pyenv |
9393
| CPython 3.11.11 | | `py311` | `python3.11` | pyenv |
9494
| CPython 3.10.16 | | `py310` | `python3.10` | pyenv |
9595
| CPython 3.9.21 | | `py39` | `python3.9` | pyenv |

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
ARG DEBIAN_DIGEST=sha256:b5ace515e78743215a1b101a6f17e59ed74b17132139ca3af3c37e605205e973
1+
ARG DEBIAN_DIGEST=sha256:5724d31208341cef9af6ae2be86be9cda6a87271f362a03481a522c9c19d401b
22

33
# base without helpers
44

Justfile

+197
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
default:
2+
@just --list
3+
4+
img := "makukha/multipython"
5+
6+
# helpers
7+
git-head := "$(git rev-parse --abbrev-ref HEAD)"
8+
gh-issue := "$(git rev-parse --abbrev-ref HEAD | cut -d- -f1)"
9+
gh-title := "$(GH_PAGER=cat gh issue view " + gh-issue + " --json title -t '{{.title}}')"
10+
version := "$(uv run bump-my-version show current_version 2>/dev/null)"
11+
12+
# init local dev environment
13+
[group('dev')]
14+
[macos]
15+
init:
16+
#!/usr/bin/env bash
17+
set -euo pipefail
18+
sudo port install gh hadolint jq shellcheck uv yq
19+
cat <<EOF | xargs -n1 uv tool install -U
20+
git+https://github.com/makukha/bump-my-version@date62
21+
docsub
22+
mypy
23+
ruff
24+
towncrier
25+
EOF
26+
# pre-commit hook
27+
echo -e "#!/usr/bin/env bash\njust pre-commit" > .git/hooks/pre-commit
28+
chmod a+x .git/hooks/pre-commit
29+
30+
# check for version updates
31+
[group('dev')]
32+
checkupd:
33+
docker run --rm -t {{img}}:base py checkupd
34+
35+
# add news item of type
36+
[group('dev')]
37+
news type issue *msg:
38+
#!/usr/bin/env bash
39+
set -euo pipefail
40+
issue="{{ if issue == "-" { gh-issue } else { issue } }}"
41+
msg="{{ if msg == "" { gh-title } else { msg } }}"
42+
uvx towncrier create -c "$msg" "$issue.{{type}}.md"
43+
44+
# run linters
45+
[group('dev')]
46+
lint:
47+
# docker and scripts
48+
hadolint Dockerfile
49+
shellcheck bin/**/*.sh tests/share/*.sh
50+
# docsubfile
51+
uvx mypy docsubfile.py
52+
uvx ruff check
53+
uvx ruff format --check
54+
55+
# prune local tags, images, and build cache
56+
[group('dev')]
57+
clean:
58+
#!/usr/bin/env bash
59+
set -euo pipefail
60+
docker image rm "{{img}}" || true
61+
docker image ls --format json | \
62+
jq -r '. | select(.Repository == "{{img}}") | .Tag' | \
63+
xargs -n1 -I% docker image rm "{{img}}:%" || true
64+
docker image prune --force
65+
docker builder prune --force
66+
67+
# build docker images
68+
[group('dev')]
69+
build *target:
70+
docker buildx bake {{target}}
71+
72+
# run command in container
73+
[group('dev')]
74+
run tag +cmd:
75+
docker run --rm -it {{img}}:{{tag}} {{cmd}}
76+
77+
# shell to image
78+
[group('dev')]
79+
shell *tag:
80+
docker run --rm -it -h {{tag}} -v ./tests/share:/tmp/share "{{img}}:{{tag}}" /bin/bash
81+
82+
# run tests
83+
[group('dev')]
84+
test *target:
85+
#!/usr/bin/env bash
86+
set -euo pipefail
87+
if [ -z "{{target}}" ]; then
88+
BUILDKIT_PROGRESS=plain docker buildx bake --no-cache test
89+
else
90+
BUILDKIT_PROGRESS=plain docker buildx bake --no-cache \
91+
--set "test_subset_{{target}}.args.MULTIPYTHON_DEBUG=true" \
92+
"test_subset_{{target}}"
93+
fi
94+
95+
# update docs
96+
[group('dev')]
97+
docs:
98+
docsub apply -i docs/part/basic-usage.md DOCKERHUB.md README.md
99+
100+
#
101+
# Commit
102+
# --------
103+
#
104+
# just pre-commit
105+
#
106+
107+
# run pre-commit hook
108+
[group('commit')]
109+
pre-commit: lint docs
110+
111+
#
112+
# Merge
113+
# --------
114+
#
115+
# just clean build
116+
# just test
117+
# just gh-pr
118+
#
119+
120+
# create GitHub pull request
121+
[group('merge')]
122+
gh-pr *title:
123+
# ensure clean state
124+
git diff --exit-code
125+
git diff --cached --exit-code
126+
git ls-files --other --exclude-standard --directory
127+
git push
128+
# create pr
129+
gh pr create -d -t "{{ if title == "" { gh-title } else { title } }}"
130+
131+
#
132+
# Release
133+
# ---------
134+
#
135+
# just pre-release
136+
# (make sure docs didn't change)
137+
#
138+
# just bump
139+
# just changelog
140+
# (proofread changelog)
141+
#
142+
# just checkupd lint docs build; just test
143+
# (commit)
144+
#
145+
# just gh-pr
146+
# (merge pull request)
147+
#
148+
# just docker-push
149+
# just gh-release
150+
#
151+
152+
# run pre-release
153+
[group('release')]
154+
pre-release: checkupd lint clean build test docs
155+
156+
# bump project version
157+
[group('release')]
158+
bump:
159+
#!/usr/bin/env bash
160+
set -euo pipefail
161+
uvx bump-my-version show-bump
162+
printf 'Choose bump path: '
163+
read BUMP
164+
uvx bump-my-version bump -- "$BUMP"
165+
166+
# collect changelog entries
167+
[group('release')]
168+
changelog:
169+
uv run towncrier build --yes --version "{{version}}"
170+
sed -e's/^### \(.*\)$/***\1***/; s/\([a-z]\)\*\*\*$/\1***/' -i '' CHANGELOG.md
171+
172+
# create GitHub release
173+
[group('release')]
174+
gh-release:
175+
#!/usr/bin/env bash
176+
set -euo pipefail
177+
if [ "{{git-head}}" != "main" ]; then
178+
echo "Can release from main branch only"
179+
exit 1
180+
fi
181+
tag="v{{version}}"
182+
git tag "$tag" HEAD
183+
git push origin tag "$tag"
184+
gh release create -d -t "$tag — $(date -Idate)" --generate-notes "$tag"
185+
186+
# push images to Docker Registry
187+
[group('release')]
188+
docker-push *target:
189+
#!/usr/bin/env bash
190+
set -euo pipefail
191+
if [ -n "{{target}}" ]; then
192+
docker buildx bake --push "{{target}}"
193+
else
194+
targets="$(docker buildx bake --print 2>/dev/null | jq -r '.group.default.targets[]')"
195+
echo $targets
196+
# for t in targets: just docker-push target
197+
fi

NEWS.d/96.changed.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
- Updated versions:
2+
* base image digest
3+
* Python 3.13 — 3.13.2
4+
* Python 3.12 — 3.12.9
5+
* pyenv — 2.5.2
6+
* uv — 0.5.29

NEWS.d/96.misc.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Started using just

README.md

+11-11
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,10 @@ $ docker run --rm -v .:/src -w /src makukha/multipython:py310 tox run
6161
| Distribution | Note | Tag | Command | Source |
6262
|------------------|---------------|----------|---------------|--------|
6363
| CPython 3.14.0a4 | free threaded | `py314t` | `python3.14t` | pyenv |
64-
| CPython 3.13.1 | free threaded | `py313t` | `python3.13t` | pyenv |
64+
| CPython 3.13.2 | free threaded | `py313t` | `python3.13t` | pyenv |
6565
| CPython 3.14.0a4 | | `py314` | `python3.14` | pyenv |
66-
| CPython 3.13.1 | system ⚙️ | `py313` | `python3.13` | pyenv |
67-
| CPython 3.12.8 | | `py312` | `python3.12` | pyenv |
66+
| CPython 3.13.2 | system ⚙️ | `py313` | `python3.13` | pyenv |
67+
| CPython 3.12.9 | | `py312` | `python3.12` | pyenv |
6868
| CPython 3.11.11 | | `py311` | `python3.11` | pyenv |
6969
| CPython 3.10.16 | | `py310` | `python3.10` | pyenv |
7070
| CPython 3.9.21 | | `py39` | `python3.9` | pyenv |
@@ -146,10 +146,10 @@ multipython 251R
146146
```shell
147147
$ py ls -l
148148
3.14.0a4t
149-
3.13.1t
149+
3.13.2t
150150
3.14.0a4
151-
3.13.1
152-
3.12.8
151+
3.13.2
152+
3.12.9
153153
3.11.11
154154
3.10.16
155155
3.9.21
@@ -299,15 +299,15 @@ docker run --rm makukha/multipython:latest py info -c
299299
"root": "/root/.multipython"
300300
},
301301
"pyenv": {
302-
"version": "2.5.1",
302+
"version": "2.5.2",
303303
"root": "/root/.pyenv",
304304
"python_versions": "/root/.pyenv/versions"
305305
},
306306
"tox": {
307307
"version": "4.24.1"
308308
},
309309
"uv": {
310-
"version": "0.5.24",
310+
"version": "0.5.29",
311311
"python_versions": "/root/.local/share/uv/python"
312312
},
313313
"virtualenv": {
@@ -342,7 +342,7 @@ docker run --rm makukha/multipython:latest py info -c
342342
"base_image": {
343343
"name": "debian",
344344
"channel": "stable-slim",
345-
"digest": "sha256:b5ace515e78743215a1b101a6f17e59ed74b17132139ca3af3c37e605205e973"
345+
"digest": "sha256:5724d31208341cef9af6ae2be86be9cda6a87271f362a03481a522c9c19d401b"
346346
},
347347
"python": [
348348
{
@@ -377,8 +377,8 @@ Tools available in `base` image have (no surprise) the same versions in all othe
377377
<!-- docsub: x package-versions base -->
378378
| Image tag | pyenv | uv |
379379
|---|---|---|
380-
| `base` | 2.5.1 ✨ | 0.5.24 ✨ |
381-
| *other images* | 2.5.1 ✨ | 0.5.24 ✨ |
380+
| `base` | 2.5.2 ✨ | 0.5.29 ✨ |
381+
| *other images* | 2.5.2 ✨ | 0.5.29 ✨ |
382382
<!-- docsub: end -->
383383
384384
## Derived images

0 commit comments

Comments
 (0)