Skip to content

Commit f7bf06a

Browse files
switch from shiv to pex and build multi-arch docker images
1 parent 890b60f commit f7bf06a

8 files changed

Lines changed: 388 additions & 38 deletions
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{
2+
"path": "/usr/bin/python3.10",
3+
"compatible_tags": [
4+
"cp310-cp310-musllinux_1_1_aarch64",
5+
"cp310-cp310-musllinux_1_2_aarch64",
6+
"cp310-cp310-linux_aarch64",
7+
"cp310-abi3-musllinux_1_1_aarch64",
8+
"cp310-abi3-musllinux_1_2_aarch64",
9+
"cp310-abi3-linux_aarch64",
10+
"cp310-none-musllinux_1_1_aarch64",
11+
"cp310-none-musllinux_1_2_aarch64",
12+
"cp310-none-linux_aarch64",
13+
"cp39-abi3-musllinux_1_1_aarch64",
14+
"cp39-abi3-musllinux_1_2_aarch64",
15+
"cp39-abi3-linux_aarch64",
16+
"cp38-abi3-musllinux_1_1_aarch64",
17+
"cp38-abi3-musllinux_1_2_aarch64",
18+
"cp38-abi3-linux_aarch64",
19+
"cp37-abi3-musllinux_1_1_aarch64",
20+
"cp37-abi3-musllinux_1_2_aarch64",
21+
"cp37-abi3-linux_aarch64",
22+
"py310-none-musllinux_1_1_aarch64",
23+
"py310-none-musllinux_1_2_aarch64",
24+
"py310-none-linux_aarch64",
25+
"py3-none-musllinux_1_1_aarch64",
26+
"py3-none-musllinux_1_2_aarch64",
27+
"py3-none-linux_aarch64",
28+
"py310-none-any",
29+
"py3-none-any"
30+
],
31+
"marker_environment": {
32+
"implementation_name": "cpython",
33+
"implementation_version": "3.10.0",
34+
"os_name": "posix",
35+
"platform_machine": "aarch64",
36+
"platform_python_implementation": "CPython",
37+
"platform_release": "",
38+
"platform_system": "Linux",
39+
"platform_version": "",
40+
"python_full_version": "3.10.0",
41+
"python_version": "3.10",
42+
"sys_platform": "linux"
43+
}
44+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{
2+
"path": "/usr/bin/python3.10",
3+
"compatible_tags": [
4+
"cp310-cp310-manylinux_2_17_aarch64",
5+
"cp310-cp310-manylinux2014_aarch64",
6+
"cp310-cp310-linux_aarch64",
7+
"cp310-abi3-manylinux_2_17_aarch64",
8+
"cp310-abi3-manylinux2014_aarch64",
9+
"cp310-abi3-linux_aarch64",
10+
"cp310-none-manylinux_2_17_aarch64",
11+
"cp310-none-manylinux2014_aarch64",
12+
"cp310-none-linux_aarch64",
13+
"cp39-abi3-manylinux_2_17_aarch64",
14+
"cp39-abi3-manylinux2014_aarch64",
15+
"cp39-abi3-linux_aarch64",
16+
"cp38-abi3-manylinux_2_17_aarch64",
17+
"cp38-abi3-manylinux2014_aarch64",
18+
"cp38-abi3-linux_aarch64",
19+
"cp37-abi3-manylinux_2_17_aarch64",
20+
"cp37-abi3-manylinux2014_aarch64",
21+
"cp37-abi3-linux_aarch64",
22+
"py310-none-manylinux_2_17_aarch64",
23+
"py310-none-manylinux2014_aarch64",
24+
"py310-none-linux_aarch64",
25+
"py3-none-manylinux_2_17_aarch64",
26+
"py3-none-manylinux2014_aarch64",
27+
"py3-none-linux_aarch64",
28+
"py310-none-any",
29+
"py3-none-any"
30+
],
31+
"marker_environment": {
32+
"implementation_name": "cpython",
33+
"implementation_version": "3.10.0",
34+
"os_name": "posix",
35+
"platform_machine": "aarch64",
36+
"platform_python_implementation": "CPython",
37+
"platform_release": "",
38+
"platform_system": "Linux",
39+
"platform_version": "",
40+
"python_full_version": "3.10.0",
41+
"python_version": "3.10",
42+
"sys_platform": "linux"
43+
}
44+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{
2+
"path": "/usr/bin/python3.10",
3+
"compatible_tags": [
4+
"cp310-cp310-musllinux_1_1_x86_64",
5+
"cp310-cp310-musllinux_1_2_x86_64",
6+
"cp310-cp310-linux_x86_64",
7+
"cp310-abi3-musllinux_1_1_x86_64",
8+
"cp310-abi3-musllinux_1_2_x86_64",
9+
"cp310-abi3-linux_x86_64",
10+
"cp310-none-musllinux_1_1_x86_64",
11+
"cp310-none-musllinux_1_2_x86_64",
12+
"cp310-none-linux_x86_64",
13+
"cp39-abi3-musllinux_1_1_x86_64",
14+
"cp39-abi3-musllinux_1_2_x86_64",
15+
"cp39-abi3-linux_x86_64",
16+
"cp38-abi3-musllinux_1_1_x86_64",
17+
"cp38-abi3-musllinux_1_2_x86_64",
18+
"cp38-abi3-linux_x86_64",
19+
"cp37-abi3-musllinux_1_1_x86_64",
20+
"cp37-abi3-musllinux_1_2_x86_64",
21+
"cp37-abi3-linux_x86_64",
22+
"py310-none-musllinux_1_1_x86_64",
23+
"py310-none-musllinux_1_2_x86_64",
24+
"py310-none-linux_x86_64",
25+
"py3-none-musllinux_1_1_x86_64",
26+
"py3-none-musllinux_1_2_x86_64",
27+
"py3-none-linux_x86_64",
28+
"py310-none-any",
29+
"py3-none-any"
30+
],
31+
"marker_environment": {
32+
"implementation_name": "cpython",
33+
"implementation_version": "3.10.0",
34+
"os_name": "posix",
35+
"platform_machine": "x86_64",
36+
"platform_python_implementation": "CPython",
37+
"platform_release": "",
38+
"platform_system": "Linux",
39+
"platform_version": "",
40+
"python_full_version": "3.10.0",
41+
"python_version": "3.10",
42+
"sys_platform": "linux"
43+
}
44+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
{
2+
"path": "/usr/bin/python3.10",
3+
"compatible_tags": [
4+
"cp310-cp310-manylinux_2_17_x86_64",
5+
"cp310-cp310-manylinux2014_x86_64",
6+
"cp310-cp310-manylinux_2_5_x86_64",
7+
"cp310-cp310-manylinux1_x86_64",
8+
"cp310-cp310-linux_x86_64",
9+
"cp310-abi3-manylinux_2_17_x86_64",
10+
"cp310-abi3-manylinux2014_x86_64",
11+
"cp310-abi3-manylinux_2_5_x86_64",
12+
"cp310-abi3-manylinux1_x86_64",
13+
"cp310-abi3-linux_x86_64",
14+
"cp310-none-manylinux_2_17_x86_64",
15+
"cp310-none-manylinux2014_x86_64",
16+
"cp310-none-manylinux_2_5_x86_64",
17+
"cp310-none-manylinux1_x86_64",
18+
"cp310-none-linux_x86_64",
19+
"cp39-abi3-manylinux_2_17_x86_64",
20+
"cp39-abi3-manylinux2014_x86_64",
21+
"cp39-abi3-manylinux_2_5_x86_64",
22+
"cp39-abi3-manylinux1_x86_64",
23+
"cp39-abi3-linux_x86_64",
24+
"cp38-abi3-manylinux_2_17_x86_64",
25+
"cp38-abi3-manylinux2014_x86_64",
26+
"cp38-abi3-manylinux_2_5_x86_64",
27+
"cp38-abi3-manylinux1_x86_64",
28+
"cp38-abi3-linux_x86_64",
29+
"cp37-abi3-manylinux_2_17_x86_64",
30+
"cp37-abi3-manylinux2014_x86_64",
31+
"cp37-abi3-manylinux_2_5_x86_64",
32+
"cp37-abi3-manylinux1_x86_64",
33+
"cp37-abi3-linux_x86_64",
34+
"py310-none-manylinux_2_17_x86_64",
35+
"py310-none-manylinux2014_x86_64",
36+
"py310-none-manylinux_2_5_x86_64",
37+
"py310-none-manylinux1_x86_64",
38+
"py310-none-linux_x86_64",
39+
"py3-none-manylinux_2_17_x86_64",
40+
"py3-none-manylinux2014_x86_64",
41+
"py3-none-manylinux_2_5_x86_64",
42+
"py3-none-manylinux1_x86_64",
43+
"py3-none-linux_x86_64",
44+
"py310-none-any",
45+
"py3-none-any"
46+
],
47+
"marker_environment": {
48+
"implementation_name": "cpython",
49+
"implementation_version": "3.10.0",
50+
"os_name": "posix",
51+
"platform_machine": "x86_64",
52+
"platform_python_implementation": "CPython",
53+
"platform_release": "",
54+
"platform_system": "Linux",
55+
"platform_version": "",
56+
"python_full_version": "3.10.0",
57+
"python_version": "3.10",
58+
"sys_platform": "linux"
59+
}
60+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
{
2+
"path": "/usr/bin/python3.10",
3+
"compatible_tags": [
4+
"cp310-cp310-macosx_11_0_arm64",
5+
"cp310-cp310-macosx_12_0_arm64",
6+
"cp310-cp310-macosx_13_0_arm64",
7+
"cp310-cp310-macosx_14_0_arm64",
8+
"cp310-cp310-macosx_10_9_universal2",
9+
"cp310-cp310-macosx_11_0_universal2",
10+
"cp310-abi3-macosx_11_0_arm64",
11+
"cp310-abi3-macosx_12_0_arm64",
12+
"cp310-abi3-macosx_13_0_arm64",
13+
"cp310-abi3-macosx_14_0_arm64",
14+
"cp310-abi3-macosx_10_9_universal2",
15+
"cp310-abi3-macosx_11_0_universal2",
16+
"cp310-none-macosx_11_0_arm64",
17+
"cp310-none-macosx_12_0_arm64",
18+
"cp310-none-macosx_13_0_arm64",
19+
"cp310-none-macosx_14_0_arm64",
20+
"cp310-none-macosx_10_9_universal2",
21+
"cp310-none-macosx_11_0_universal2",
22+
"cp39-abi3-macosx_11_0_arm64",
23+
"cp39-abi3-macosx_12_0_arm64",
24+
"cp39-abi3-macosx_10_9_universal2",
25+
"cp39-abi3-macosx_11_0_universal2",
26+
"cp38-abi3-macosx_11_0_arm64",
27+
"cp38-abi3-macosx_12_0_arm64",
28+
"cp38-abi3-macosx_10_9_universal2",
29+
"cp38-abi3-macosx_11_0_universal2",
30+
"cp37-abi3-macosx_11_0_arm64",
31+
"cp37-abi3-macosx_12_0_arm64",
32+
"cp37-abi3-macosx_10_9_universal2",
33+
"cp37-abi3-macosx_11_0_universal2",
34+
"py310-none-macosx_11_0_arm64",
35+
"py310-none-macosx_12_0_arm64",
36+
"py310-none-macosx_10_9_universal2",
37+
"py310-none-macosx_11_0_universal2",
38+
"py3-none-macosx_11_0_arm64",
39+
"py3-none-macosx_12_0_arm64",
40+
"py3-none-macosx_10_9_universal2",
41+
"py3-none-macosx_11_0_universal2",
42+
"py310-none-any",
43+
"py3-none-any"
44+
],
45+
"marker_environment": {
46+
"implementation_name": "cpython",
47+
"implementation_version": "3.10.0",
48+
"os_name": "posix",
49+
"platform_machine": "arm64",
50+
"platform_python_implementation": "CPython",
51+
"platform_release": "",
52+
"platform_system": "Darwin",
53+
"platform_version": "",
54+
"python_full_version": "3.10.0",
55+
"python_version": "3.10",
56+
"sys_platform": "darwin"
57+
}
58+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"path": "C:\\Python310\\python.exe",
3+
"compatible_tags": [
4+
"cp310-cp310-win_amd64",
5+
"cp310-abi3-win_amd64",
6+
"cp310-none-win_amd64",
7+
"cp39-abi3-win_amd64",
8+
"cp38-abi3-win_amd64",
9+
"cp37-abi3-win_amd64",
10+
"py310-none-win_amd64",
11+
"py3-none-win_amd64",
12+
"py310-none-any",
13+
"py3-none-any"
14+
],
15+
"marker_environment": {
16+
"implementation_name": "cpython",
17+
"implementation_version": "3.10.0",
18+
"os_name": "nt",
19+
"platform_machine": "AMD64",
20+
"platform_python_implementation": "CPython",
21+
"platform_release": "",
22+
"platform_system": "Windows",
23+
"platform_version": "",
24+
"python_full_version": "3.10.0",
25+
"python_version": "3.10",
26+
"sys_platform": "win32"
27+
}
28+
}

.github/workflows/release.yml

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,34 @@ jobs:
1717
steps:
1818
- uses: actions/checkout@v4
1919

20-
- name: Set up Python 3.11
20+
- name: Set up Python 3.10
2121
uses: actions/setup-python@v5
2222
with:
23-
python-version: 3.11
23+
python-version: '3.10'
2424
cache: 'pip'
2525

2626
- name: Install dependencies
2727
run: |
2828
python -m pip install --upgrade pip
29-
pip install shiv
29+
pip install pex
3030
3131
- name: Get version
3232
id: get_version
3333
run: echo "VERSION=$(cat cloudsmith_cli/data/VERSION)" >> $GITHUB_ENV
3434

35-
- name: Create Zipapp
36-
run: shiv -o cloudsmith-${{ env.VERSION }}.pyz -c cloudsmith .
35+
- name: Create Zipapp with pex (cross-platform)
36+
run: |
37+
pex . \
38+
--output-file cloudsmith-${{ env.VERSION }}.pyz \
39+
--console-script cloudsmith \
40+
--python-shebang "/usr/bin/env python3" \
41+
--venv \
42+
--complete-platform .github/.platforms/linux-x86_64-py310.json \
43+
--complete-platform .github/.platforms/linux-aarch64-py310.json \
44+
--complete-platform .github/.platforms/linux-x86_64-musl-py310.json \
45+
--complete-platform .github/.platforms/linux-aarch64-musl-py310.json \
46+
--complete-platform .github/.platforms/macos-arm64-py310.json \
47+
--complete-platform .github/.platforms/windows-x86_64-py310.json
3748
3849
- name: Create Release
3950
id: create_release
@@ -79,23 +90,35 @@ jobs:
7990
- name: Push wheel to Cloudsmith
8091
run: cloudsmith push python ${{ vars.CLOUDSMITH_NAMESPACE }}/cli dist/cloudsmith_cli-${{ env.VERSION }}-py3-none-any.whl
8192

82-
- name: Build Docker image
83-
id: build_cli_image
84-
run: |
85-
docker build --build-arg CLOUDSMITH_CLI_VERSION=${{ env.VERSION }} -t docker.cloudsmith.io/${{ vars.CLOUDSMITH_NAMESPACE }}/cli-zipapp/cloudsmith-cli:${{ env.VERSION }} .
93+
- name: Set up Docker Buildx
94+
uses: docker/setup-buildx-action@v3
8695

87-
- name: Push Dockerised CLI to Cloudsmith
88-
id: push_dockerised_cli_cloudsmith
89-
run: |
90-
echo "${CLOUDSMITH_API_KEY}" | docker login docker.cloudsmith.io -u ${{ vars.CLOUDSMITH_SVC_SLUG }} --password-stdin
91-
docker push docker.cloudsmith.io/${{ vars.CLOUDSMITH_NAMESPACE }}/cli-zipapp/cloudsmith-cli:${{ env.VERSION }}
96+
- name: Login to Cloudsmith Docker Registry
97+
uses: docker/login-action@v3
98+
with:
99+
registry: docker.cloudsmith.io
100+
username: ${{ vars.CLOUDSMITH_SVC_SLUG }}
101+
password: ${{ env.CLOUDSMITH_API_KEY }}
92102

93-
- name: Push Dockerised CLI to DockerHub
94-
id: push_dockerised_cli_dockerhub
95-
run: |
96-
docker tag docker.cloudsmith.io/${{ vars.CLOUDSMITH_NAMESPACE }}/cli-zipapp/cloudsmith-cli:${{ env.VERSION }} cloudsmith/cloudsmith-cli:${{ env.VERSION }}
97-
echo "${{ secrets.DOCKERHUB_PAT }}" | docker login -u ${{ vars.DOCKERHUB_USER }} --password-stdin
98-
docker push cloudsmith/cloudsmith-cli:${{ env.VERSION }}
103+
- name: Login to DockerHub
104+
uses: docker/login-action@v3
105+
with:
106+
username: ${{ vars.DOCKERHUB_USER }}
107+
password: ${{ secrets.DOCKERHUB_PAT }}
108+
109+
- name: Build and push multi-arch Docker image
110+
uses: docker/build-push-action@v6
111+
with:
112+
context: .
113+
platforms: linux/amd64,linux/arm64
114+
push: true
115+
build-args: |
116+
CLOUDSMITH_CLI_VERSION=${{ env.VERSION }}
117+
tags: |
118+
docker.cloudsmith.io/${{ vars.CLOUDSMITH_NAMESPACE }}/cli-zipapp/cloudsmith-cli:${{ env.VERSION }}
119+
docker.cloudsmith.io/${{ vars.CLOUDSMITH_NAMESPACE }}/cli-zipapp/cloudsmith-cli:latest
120+
cloudsmith/cloudsmith-cli:${{ env.VERSION }}
121+
cloudsmith/cloudsmith-cli:latest
99122
100123
# Publish Python packages to PyPI
101124
publish-pypi:
@@ -104,10 +127,10 @@ jobs:
104127
steps:
105128
- uses: actions/checkout@v4
106129

107-
- name: Set up Python 3.11
130+
- name: Set up Python 3.10
108131
uses: actions/setup-python@v5
109132
with:
110-
python-version: 3.11
133+
python-version: '3.10'
111134

112135
- name: Install build dependencies
113136
run: |

0 commit comments

Comments
 (0)