@@ -62,12 +62,48 @@ jobs:
6262
6363
6464# 
65-   #  Build native  wheels
65+   #  Build other  wheels first (OS-specific, not python specific) 
6666  # 
6767
68-   build :
68+   build-other  :
6969    runs-on : ${{ matrix.os }} 
7070    needs : [setup_concurrency] 
71+     strategy :
72+       max-parallel : ${{ fromJSON(needs.setup_concurrency.outputs.max-parallel).v }} 
73+       fail-fast : true 
74+       matrix :
75+         os : ["ubuntu-22.04", "ubuntu-22.04-arm", "macos-14", "windows-2022"] 
76+ 
77+     steps :
78+     - uses : actions/checkout@v4 
79+       with :
80+         fetch-depth : 0 
81+     - uses : actions/setup-python@v5 
82+       with :
83+         python-version : ' 3.13' 
84+ 
85+     - name : Install deps 
86+       shell : bash 
87+       run : | 
88+         python -m pip --disable-pip-version-check install -r rdev_requirements.txt 
89+ 
90+ name : Build + test wheels 
91+       shell : bash 
92+       run : | 
93+         ./rdev.sh ci build-other-wheels 
94+ 
95+ uses : actions/upload-artifact@v4 
96+       with :
97+         name : " pypi-other-${{ runner.os }}" 
98+         path : dist 
99+ 
100+   # 
101+   #  Build meson wheels
102+   # 
103+ 
104+   build-meson :
105+     runs-on : ${{ matrix.os }} 
106+     needs : [setup_concurrency, build-other] 
71107    strategy :
72108      max-parallel : ${{ fromJSON(needs.setup_concurrency.outputs.max-parallel).v }} 
73109      fail-fast : true 
@@ -88,6 +124,11 @@ jobs:
88124      with :
89125        python-version : ${{ matrix.python_version }} 
90126
127+     - uses : actions/download-artifact@v4 
128+       with :
129+         name : " pypi-other-${{ runner.os }}" 
130+         path : dist-other 
131+ 
91132    # 
92133    #  Setup build caching
93134    # 
@@ -118,10 +159,8 @@ jobs:
118159name : Build + test wheels 
119160      shell : bash 
120161      run : | 
121-         ./rdev.sh ci run  
162+         ./rdev.sh ci build-meson-wheels  
122163env :
123-         RPYBUILD_STRIP_LIBPYTHON : " 1" 
124-         RPYBUILD_CC_LAUNCHER : sccache 
125164        SCCACHE_WEBDAV_USERNAME : ${{ secrets.WPI_ARTIFACTORY_USERNAME }} 
126165        SCCACHE_WEBDAV_PASSWORD : ${{ secrets.WPI_ARTIFACTORY_TOKEN }} 
127166
@@ -149,6 +188,11 @@ jobs:
149188    - uses : actions/checkout@v4 
150189      with :
151190        fetch-depth : 0 
191+     
192+     - uses : actions/download-artifact@v4 
193+       with :
194+         name : " pypi-other-${{ runner.os }}" 
195+         path : dist-other 
152196
153197    # 
154198    #  Setup build caching
@@ -176,10 +220,8 @@ jobs:
176220name : Build + test wheels 
177221      shell : bash 
178222      run : | 
179-         ./rdev.sh ci run  
223+         ./rdev.sh ci build-meson-wheels  
180224env :
181-         RPYBUILD_STRIP_LIBPYTHON : " 1" 
182-         RPYBUILD_CC_LAUNCHER : sccache 
183225        SCCACHE_WEBDAV_USERNAME : ${{ secrets.WPI_ARTIFACTORY_USERNAME }} 
184226        SCCACHE_WEBDAV_PASSWORD : ${{ secrets.WPI_ARTIFACTORY_TOKEN }} 
185227
@@ -192,148 +234,140 @@ jobs:
192234  #  Build roboRIO/raspbian wheels
193235  # 
194236
195-   cross-build :
196-     runs-on : ubuntu-latest 
197-     needs : [setup_concurrency] 
198-     strategy :
199-       max-parallel : ${{ fromJSON(needs.setup_concurrency.outputs.max-parallel).v }} 
200-       matrix :
201-         os :
202-         - container : wpilib/roborio-cross-ubuntu:2025-22.04-py313 
203-           name : roborio 
204- 
205-         - container : wpilib/raspbian-cross-ubuntu:2025-bookworm-22.04-py311 
206-           name : raspbian-py311 
207-         - container : wpilib/raspbian-cross-ubuntu:2025-bookworm-22.04-py312 
208-           name : raspbian-py312 
209-         - container : wpilib/raspbian-cross-ubuntu:2025-bookworm-22.04-py313 
210-           name : raspbian-py313 
211- 
212-     container :
213-       image : " ${{ matrix.os.container }}" 
214- 
215-     steps :
216-     - uses : actions/checkout@v4 
217-       with :
218-         fetch-depth : 0 
219- 
220-     - run : apt-get update 
221-     - name : Setup ccache 
222-       uses : 
hendrikmuhs/[email protected]   223-       with :
224-           key : ${{ matrix.os.container }} 
225-           variant : ccache 
226- 
227-     - name : Install setuptools + wheel 
228-       run : | 
229-         /build/venv/bin/build-pip --disable-pip-version-check install -U "setuptools==63.4.3; python_version < '3.12'" 
230-         /build/venv/bin/build-pip --disable-pip-version-check install -U wheel 
231-         /build/venv/bin/cross-pip --disable-pip-version-check install -U "setuptools==63.4.3; python_version < '3.12'" 
232-         /build/venv/bin/cross-pip --disable-pip-version-check install -U wheel 
233- 
234- #  See https://github.com/pypa/setuptools_scm/issues/784
235-     - name : Set git directory as safe to allow setuptools-scm to work 
236-       shell : bash 
237-       run : | 
238-         pwd 
239-         /usr/bin/git config --global --add safe.directory $(pwd) 
240- 
241- #  See https://github.com/pallets/markupsafe/issues/475
242-     - name : Install MarkupSafe 
243-       shell : bash 
244-       run : | 
245-         /build/venv/bin/cross-pip install --no-build-isolation "markupsafe; python_version < '3.12'" 
246- 
247- name : Install deps 
248-       shell : bash 
249-       run : | 
250-         /build/venv/bin/cross-pip  --disable-pip-version-check install -r rdev_requirements.txt 
251- 
252- name : Build + test wheels 
253-       shell : bash 
254-       run : | 
255-         /build/venv/bin/cross-python -m devtools ci run --no-test 
256- env :
257-         RPYBUILD_STRIP_LIBPYTHON : " 1" 
258-         RPYBUILD_CC_LAUNCHER : ccache 
259- 
260-     - uses : actions/upload-artifact@v4 
261-       with :
262-         name : cross-${{ matrix.os.name }} 
263-         path : dist 
264- 
265-   # 
266-   #  Publish wheels to wpilib artifactory, pypi
267-   # 
268- 
269-   publish-rpyrepo :
270-     runs-on : ubuntu-latest 
271-     needs : [check, build, build-arm, cross-build] 
272-     if : github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') 
273- 
274-     steps :
275-     - uses : actions/download-artifact@v4 
276-       with :
277-         pattern : cross-* 
278-         path : dist/ 
279-         merge-multiple : true 
280- 
281-     - uses : pypa/gh-action-pypi-publish@release/v1 
282-       with :
283-         verify-metadata : false 
284-         user : ${{ secrets.WPI_ARTIFACTORY_USERNAME }} 
285-         password : ${{ secrets.WPI_ARTIFACTORY_TOKEN }} 
286-         repository-url : https://wpilib.jfrog.io/artifactory/api/pypi/wpilib-python-release-2025-local 
287- 
288- 
289-   publish-pypi :
290-     runs-on : ubuntu-latest 
291-     needs : [check, build, build-arm, cross-build] 
292-     permissions :
293-       id-token : write 
294-     if : github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') 
295- 
296-     steps :
297-     - uses : actions/checkout@v4 
298-       with :
299-         fetch-depth : 0 
300- 
301-     - uses : actions/download-artifact@v4 
302-       with :
303-         pattern : pypi-* 
304-         path : dist/ 
305-         merge-multiple : true 
306- 
307-     - name : Publish to PyPI 
308-       uses : pypa/gh-action-pypi-publish@release/v1 
309-       with :
310-         verify-metadata : false 
311- 
312-   ping-rtd :
313-     runs-on : ubuntu-latest 
314-     needs : [check, build, cross-build] 
315-     if : | 
316-       github.event_name == 'push' && 
317-       (startsWith(github.event.ref, 'refs/tags') || github.event.ref == 'refs/heads/main') 
318- steps :
319-     - name : Sleep 1 minute to allow artifact upload 
320-       shell : bash 
321-       run : sleep 60 
322-     - name : Ping readthedocs 
323-       uses : robotpy/build-actions/ping-rtd@v2024 
324-       with :
325-         token : ${{ secrets.RTD_TOKEN }} 
326-         webhook : ${{ secrets.RTD_WEBHOOK }} 
327- 
328-   ping-meta :
329-     runs-on : ubuntu-latest 
330-     needs : [publish-rpyrepo, publish-pypi] 
331-     if : github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') 
332- 
333-     steps :
334-     - uses : peter-evans/repository-dispatch@v3 
335-       with :
336-         token : ${{ secrets.META_REPO_ACCESS_TOKEN }} 
337-         repository : robotpy/robotpy-meta 
338-         event-type : tag 
339-         client-payload : ' {"package_name": "mostrobotpy", "package_version": "${{ github.ref_name }}"}' 
237+   #  cross-build:
238+   #    runs-on: ubuntu-latest
239+   #    needs: [setup_concurrency]
240+   #    strategy:
241+   #      max-parallel: ${{ fromJSON(needs.setup_concurrency.outputs.max-parallel).v }}
242+   #      matrix:
243+   #        os:
244+   #        - container: wpilib/roborio-cross-ubuntu:2025-22.04-py313
245+   #          name: roborio
246+ 
247+   #        - container: wpilib/raspbian-cross-ubuntu:2025-bookworm-22.04-py311
248+   #          name: raspbian-py311
249+   #        - container: wpilib/raspbian-cross-ubuntu:2025-bookworm-22.04-py312
250+   #          name: raspbian-py312
251+   #        - container: wpilib/raspbian-cross-ubuntu:2025-bookworm-22.04-py313
252+   #          name: raspbian-py313
253+ 
254+   #    container:
255+   #      image: "${{ matrix.os.container }}"
256+ 
257+   #    steps:
258+   #    - uses: actions/checkout@v4
259+   #      with:
260+   #        fetch-depth: 0
261+ 
262+   #    - run: apt-get update
263+   #    - name: Setup ccache
264+   #      uses: hendrikmuhs/[email protected]  265+   #      with:
266+   #          key: ${{ matrix.os.container }}
267+   #          variant: ccache
268+ 
269+   #    # See https://github.com/pypa/setuptools_scm/issues/784
270+   #    - name: Set git directory as safe to allow setuptools-scm to work
271+   #      shell: bash
272+   #      run: |
273+   #        pwd
274+   #        /usr/bin/git config --global --add safe.directory $(pwd)
275+ 
276+   #    # See https://github.com/pallets/markupsafe/issues/475
277+   #    - name: Install MarkupSafe
278+   #      shell: bash
279+   #      run: |
280+   #        /build/venv/bin/cross-pip install --no-build-isolation "markupsafe; python_version < '3.12'"
281+ 
282+   #    - name: Install deps
283+   #      shell: bash
284+   #      run: |
285+   #        /build/venv/bin/cross-pip  --disable-pip-version-check install -r rdev_requirements.txt
286+ 
287+   #    - name: Build wheels
288+   #      shell: bash
289+   #      run: |
290+   #        /build/venv/bin/cross-python -m devtools ci build-other-wheels --no-test
291+   #        /build/venv/bin/cross-python -m devtools ci build-meson-wheels --no-test
292+       
293+ 
294+   #    - uses: actions/upload-artifact@v4
295+   #      with:
296+   #        name: cross-${{ matrix.os.name }}
297+   #        path: dist
298+ 
299+   #  #
300+   #  # Publish wheels to wpilib artifactory, pypi
301+   #  #
302+ 
303+   #  publish-rpyrepo:
304+   #    runs-on: ubuntu-latest
305+   #    needs: [check, build, build-arm, cross-build]
306+   #    if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags')
307+ 
308+   #    steps:
309+   #    - uses: actions/download-artifact@v4
310+   #      with:
311+   #        pattern: cross-*
312+   #        path: dist/
313+   #        merge-multiple: true
314+ 
315+   #    - uses: pypa/gh-action-pypi-publish@release/v1
316+   #      with:
317+   #        verify-metadata: false
318+   #        user: ${{ secrets.WPI_ARTIFACTORY_USERNAME }}
319+   #        password: ${{ secrets.WPI_ARTIFACTORY_TOKEN }}
320+   #        repository-url: https://wpilib.jfrog.io/artifactory/api/pypi/wpilib-python-release-2025-local
321+ 
322+ 
323+   #  publish-pypi:
324+   #    runs-on: ubuntu-latest
325+   #    needs: [check, build-meson, build-arm, cross-build]
326+   #    permissions:
327+   #      id-token: write
328+   #    if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags')
329+ 
330+   #    steps:
331+   #    - uses: actions/checkout@v4
332+   #      with:
333+   #        fetch-depth: 0
334+ 
335+   #    - uses: actions/download-artifact@v4
336+   #      with:
337+   #        pattern: pypi-*
338+   #        path: dist/
339+   #        merge-multiple: true
340+ 
341+   #    - name: Publish to PyPI
342+   #      uses: pypa/gh-action-pypi-publish@release/v1
343+   #      with:
344+   #        verify-metadata: false
345+ 
346+   #  ping-rtd:
347+   #    runs-on: ubuntu-latest
348+   #    needs: [check, build-meson, cross-build]
349+   #    if: |
350+   #      github.event_name == 'push' &&
351+   #      (startsWith(github.event.ref, 'refs/tags') || github.event.ref == 'refs/heads/main')
352+   #    steps:
353+   #    - name: Sleep 1 minute to allow artifact upload
354+   #      shell: bash
355+   #      run: sleep 60
356+   #    - name: Ping readthedocs
357+   #      uses: robotpy/build-actions/ping-rtd@v2024
358+   #      with:
359+   #        token: ${{ secrets.RTD_TOKEN }}
360+   #        webhook: ${{ secrets.RTD_WEBHOOK }}
361+ 
362+   #  ping-meta:
363+   #    runs-on: ubuntu-latest
364+   #    needs: [publish-rpyrepo, publish-pypi]
365+   #    if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags')
366+ 
367+   #    steps:
368+   #    - uses: peter-evans/repository-dispatch@v3
369+   #      with:
370+   #        token: ${{ secrets.META_REPO_ACCESS_TOKEN }}
371+   #        repository: robotpy/robotpy-meta
372+   #        event-type: tag
373+   #        client-payload: '{"package_name": "mostrobotpy", "package_version": "${{ github.ref_name }}"}'
0 commit comments