@@ -35,26 +35,45 @@ concurrency:
35
35
group : ${{ github.workflow }}-${{ github.ref }}-debian-multiarch
36
36
cancel-in-progress : true
37
37
38
+ # this command is called in two places, so save it in an env first
39
+ env :
40
+ INSTALL_CMD : |
41
+ apt-get update --fix-missing
42
+ apt-get upgrade -y
43
+ apt-get install build-essential meson -y
44
+ apt-get install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev -y
45
+ apt-get install libfreetype6-dev libportmidi-dev fontconfig -y
46
+ apt-get install python3-dev python3-pip python3-wheel python3-sphinx -y
47
+ pip3 install meson-python --break-system-packages
48
+
38
49
jobs :
39
50
build-multiarch :
40
- name : Debian (Bullseye - 11 ) [${{ matrix.arch }}]
51
+ name : Debian (Bookworm - 12 ) [${{ matrix.arch }}]
41
52
runs-on : ubuntu-22.04
42
53
43
54
strategy :
44
55
fail-fast : false # if a particular matrix build fails, don't skip the rest
45
56
matrix :
46
57
# maybe more things could be added in here in the future (if needed)
47
- arch : [s390x, ppc64le]
58
+ include :
59
+ - { arch: s390x, base_image: '' }
60
+ - { arch: ppc64le, base_image: '' }
61
+ - { arch: armv6, base_image: '' }
62
+ # a custom base_image is specified in the armv7 case. This is done because
63
+ # the armv6 image is just raspbian in disguise. And the wheel built on armv7
64
+ # is going to be tested on armv6
65
+ - { arch: armv7, base_image: 'balenalib/raspberrypi3-debian:bookworm' }
48
66
49
67
steps :
50
68
51
69
52
70
- name : Build sources and run tests
53
-
71
+
54
72
id : build
55
73
with :
56
- arch : ${{ matrix.arch }}
57
- distro : bullseye
74
+ arch : ${{ matrix.base_image && 'none' || matrix.arch }}
75
+ distro : ${{ matrix.base_image && 'none' || 'bookworm' }}
76
+ base_image : ${{ matrix.base_image }}
58
77
59
78
# Not required, but speeds up builds
60
79
githubToken : ${{ github.token }}
@@ -74,19 +93,61 @@ jobs:
74
93
# builds don't have to re-install them. The image layer is cached
75
94
# publicly in your project's package repository, so it is vital that
76
95
# no secrets are present in the container state or logs.
77
- install : |
78
- apt-get update --fix-missing
79
- apt-get upgrade -y
80
- apt-get install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libfreetype6-dev libportmidi-dev libjpeg-dev fontconfig -y
81
- apt-get install python3-setuptools python3-dev python3-pip python3-wheel python3-sphinx -y
96
+ install : ${{ env.INSTALL_CMD }}
82
97
83
- # Build a wheel, install it for running unit tests
98
+ # Build a wheel, install it for running unit tests.
99
+ # --no-build-isolation is passed so that preinstalled meson-python can be used
100
+ # (done for optimization reasons)
84
101
run : |
85
102
echo "\nBuilding pygame wheel\n"
86
103
python3 setup.py docs
87
- pip3 wheel . --wheel-dir /artifacts -vvv
104
+ pip3 wheel . --no-build-isolation --wheel-dir /artifacts -vvv
105
+ echo "\nInstalling wheel\n"
106
+ pip3 install --no-index --pre --break-system-packages --find-links /artifacts pygame-ce
107
+ echo "\nRunning tests\n"
108
+ export SDL_VIDEODRIVER=dummy
109
+ export SDL_AUDIODRIVER=disk
110
+ python3 -m pygame.tests -v --exclude opengl,music,timing --time_out 300
111
+
112
+ # Upload the generated files under github actions assets section
113
+ - name : Upload dist
114
+ uses : actions/upload-artifact@v4
115
+ with :
116
+ name : pygame-multiarch-${{ matrix.arch }}-dist
117
+ path : ~/artifacts/*.whl
118
+
119
+ # test wheels built on armv7 on armv6. Why?
120
+ # because piwheels expects the same armv7 wheel to work on both armv7 and armv6
121
+ test-armv7-on-armv6 :
122
+ needs : build-multiarch
123
+ name : Debian (Bookworm - 12) [build - armv7, test - armv6]
124
+ runs-on : ubuntu-22.04
125
+ steps :
126
+ - name : Download all multiarch artifacts
127
+ uses : actions/download-artifact@v4
128
+ with :
129
+ name : pygame-multiarch-armv7-dist
130
+ path : ~/artifacts
131
+
132
+ - name : Rename arm wheel in artifacts
133
+ run : |
134
+ cd ~/artifacts
135
+ for f in *; do
136
+ mv "$f" "${f//armv7l/armv6l}"
137
+ done
138
+
139
+ - name : Test armv7 wheel on armv6
140
+
141
+ with :
142
+ arch : armv6
143
+ distro : bookworm
144
+ githubToken : ${{ github.token }}
145
+ dockerRunArgs : --volume ~/artifacts:/artifacts_new
146
+ shell : /bin/sh
147
+ install : ${{ env.INSTALL_CMD }}
148
+ run : |
88
149
echo "\nInstalling wheel\n"
89
- pip3 install --no-index --pre --find-links /artifacts pygame-ce
150
+ pip3 install --no-index --pre --break-system-packages -- find-links /artifacts_new pygame-ce
90
151
echo "\nRunning tests\n"
91
152
export SDL_VIDEODRIVER=dummy
92
153
export SDL_AUDIODRIVER=disk
0 commit comments