Skip to content

Commit 4371054

Browse files
committed
Upload free-threaded nightly wheels on Linux and macOS
1 parent 32ceb4a commit 4371054

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

.github/workflows/wheels.yml

+107
Original file line numberDiff line numberDiff line change
@@ -199,3 +199,110 @@ jobs:
199199
source ci/upload_wheels.sh
200200
set_upload_vars
201201
upload_wheels
202+
203+
build_free_threaded_wheels:
204+
needs: build_sdist
205+
name: Build wheel for ${{ matrix.python }}-${{ matrix.buildplat[1] }}
206+
if: >-
207+
(github.event_name == 'schedule') ||
208+
github.event_name == 'workflow_dispatch' ||
209+
(github.event_name == 'pull_request' &&
210+
contains(github.event.pull_request.labels.*.name, 'Build'))
211+
runs-on: ${{ matrix.buildplat[0] }}
212+
strategy:
213+
fail-fast: false
214+
matrix:
215+
# GitHub Actions doesn't support pairing matrix values together, let's improvise
216+
# https://github.com/github/feedback/discussions/7835#discussioncomment-1769026
217+
buildplat:
218+
- [ubuntu-22.04, manylinux_x86_64]
219+
- [ubuntu-22.04, musllinux_x86_64]
220+
- [macos-13, macosx_x86_64]
221+
- [macos-14, macosx_arm64]
222+
python: ["cp313t"]
223+
env:
224+
IS_PUSH: false
225+
IS_SCHEDULE_DISPATCH: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
226+
steps:
227+
- name: Checkout pandas
228+
uses: actions/checkout@v4
229+
with:
230+
fetch-depth: 0
231+
232+
# TODO: Build wheels from sdist again
233+
# There's some sort of weird race condition?
234+
# within Github that makes the sdist be missing files
235+
236+
# We need to build wheels from the sdist since the sdist
237+
# removes unnecessary files from the release
238+
- name: Download sdist (not macOS)
239+
#if: ${{ matrix.buildplat[1] != 'macosx_*' }}
240+
uses: actions/download-artifact@v4
241+
with:
242+
name: sdist
243+
path: ./dist
244+
245+
- name: Output sdist name (macOS)
246+
id: save-path
247+
shell: bash -el {0}
248+
run: echo "sdist_name=$(ls ./dist)" >> "$GITHUB_ENV"
249+
250+
# Python version used to build sdist doesn't matter
251+
# wheel will be built from sdist with the correct version
252+
- name: Unzip sdist (macOS)
253+
if: ${{ startsWith(matrix.buildplat[1], 'macosx') }}
254+
run: |
255+
tar -xzf ./dist/${{ env.sdist_name }} -C ./dist
256+
257+
- name: Output sdist name (macOS)
258+
id: save-path2
259+
shell: bash -el {0}
260+
run: echo "sdist_name=$(cd ./dist && ls -d */)" >> "$GITHUB_ENV"
261+
262+
- name: Build wheels
263+
uses: pypa/[email protected]
264+
with:
265+
package-dir: ./dist/${{ startsWith(matrix.buildplat[1], 'macosx') && env.sdist_name || needs.build_sdist.outputs.sdist_file }}
266+
env:
267+
CIBW_PRERELEASE_PYTHONS: True
268+
CIBW_FREE_THREADED_SUPPORT: True
269+
CIBW_BUILD: ${{ matrix.python }}-${{ matrix.buildplat[1] }}
270+
271+
- name: Set up Python
272+
uses: mamba-org/setup-micromamba@v1
273+
with:
274+
environment-name: wheel-env
275+
# Use a fixed Python, since we might have an unreleased Python not
276+
# yet present on conda-forge
277+
create-args: >-
278+
python=3.11
279+
anaconda-client
280+
wheel
281+
cache-downloads: true
282+
cache-environment: true
283+
284+
- name: Validate wheel RECORD
285+
shell: bash -el {0}
286+
run: for whl in $(ls wheelhouse); do wheel unpack wheelhouse/$whl -d /tmp; done
287+
288+
- uses: actions/upload-artifact@v4
289+
with:
290+
name: ${{ matrix.python }}-${{ matrix.buildplat[1] }}
291+
path: ./wheelhouse/*.whl
292+
293+
- name: Upload wheels & sdist
294+
if: ${{ success() && (env.IS_SCHEDULE_DISPATCH == 'true' || env.IS_PUSH == 'true') }}
295+
shell: bash -el {0}
296+
env:
297+
PANDAS_STAGING_UPLOAD_TOKEN: ${{ secrets.PANDAS_STAGING_UPLOAD_TOKEN }}
298+
PANDAS_NIGHTLY_UPLOAD_TOKEN: ${{ secrets.PANDAS_NIGHTLY_UPLOAD_TOKEN }}
299+
# trigger an upload to
300+
# https://anaconda.org/scientific-python-nightly-wheels/pandas
301+
# for cron jobs or "Run workflow" (restricted to main branch).
302+
# Tags will upload to
303+
# https://anaconda.org/multibuild-wheels-staging/pandas
304+
# The tokens were originally generated at anaconda.org
305+
run: |
306+
source ci/upload_wheels.sh
307+
set_upload_vars
308+
upload_wheels

0 commit comments

Comments
 (0)