| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| {% import 'macros.jinja' as macros with context %} |
| |
| {{ macros.github_header() }} |
| |
| jobs: |
| build: |
| name: "Build wheel for Windows" |
| runs-on: windows-2022 |
| env: |
| # archery uses this environment variable |
| PYTHON: "{{ python_version }}" |
| PYTHON_ABI_TAG: "{{ python_abi_tag }}" |
| # this is a private repository at the moment (mostly because of licensing |
| # consideration of windows images with visual studio), but anyone can |
| # recreate the image by manually building it via: |
| # `archery build python-wheel-windows-vs2022` |
| # note that we don't run docker build since there wouldn't be a cache hit |
| # and rebuilding the dependencies takes a fair amount of time |
| REPO: ghcr.io/ursacomputing/arrow |
| # BuildKit isn't really supported on Windows for now. |
| # NuGet + GitHub Packages based vcpkg cache is also disabled for now. |
| # Because secret mount requires BuildKit. |
| DOCKER_BUILDKIT: 0 |
| |
| steps: |
| {{ macros.github_checkout_arrow()|indent }} |
| {{ macros.github_login_ghcr()|indent }} |
| {{ macros.github_install_archery()|indent }} |
| |
| - name: Prepare |
| shell: bash |
| run: | |
| case "${PYTHON_ABI_TAG}" in |
| *t) |
| test_image_prefix=python-free-threaded |
| ;; |
| *) |
| test_image_prefix=python |
| ;; |
| esac |
| echo "TEST_IMAGE_PREFIX=${test_image_prefix}" >> ${GITHUB_ENV} |
| |
| - name: Configure Docker data-root |
| shell: powershell |
| run: | |
| # The D: drive on windows-2022 GH Actions runners has ~44GB free vs ~14GB on C:. |
| # Moving Docker's data-root to D: prevents hcsshim::ImportLayer failures when |
| # building large Windows container layers (e.g. the vcpkg install layer). GH-49676 |
| Stop-Service docker |
| $daemonJson = "C:\ProgramData\Docker\config\daemon.json" |
| New-Item -ItemType Directory -Force -Path (Split-Path $daemonJson) | Out-Null |
| if (Test-Path $daemonJson) { |
| $json = Get-Content $daemonJson | ConvertFrom-Json |
| $json | Add-Member -Force -NotePropertyName "data-root" -NotePropertyValue "D:\docker" |
| $json | ConvertTo-Json -Depth 10 | Set-Content $daemonJson |
| } else { |
| Set-Content $daemonJson -Value '{"data-root":"D:\docker"}' |
| } |
| Start-Service docker |
| Write-Host "=== daemon.json ===" |
| Get-Content $daemonJson |
| Write-Host "=== docker info ===" |
| docker info |
| |
| - name: Build wheel |
| shell: cmd |
| run: | |
| cd arrow |
| @rem We want to use only |
| @rem archery docker run -e SETUPTOOLS_SCM_PRETEND_VERSION={{ arrow.no_rc_version }} python-wheel-windows-vs2022 |
| @rem but it doesn't use pulled caches. |
| @rem It always build an image from scratch. |
| @rem We can remove this workaround once we find a way to use |
| @rem pulled caches when build an image. |
| echo on |
| archery docker pull --no-ignore-pull-failures %TEST_IMAGE_PREFIX%-wheel-windows-vs2022 |
| if errorlevel 1 ( |
| archery docker build --no-pull %TEST_IMAGE_PREFIX%-wheel-windows-vs2022 || exit /B 1 |
| ) |
| archery docker run --no-build -e SETUPTOOLS_SCM_PRETEND_VERSION={{ arrow.no_rc_version }} %TEST_IMAGE_PREFIX%-wheel-windows-vs2022 |
| |
| - uses: actions/upload-artifact@v4 |
| with: |
| name: wheel |
| path: arrow/python/repaired_wheels/*.whl |
| |
| - name: Test wheel |
| shell: cmd |
| run: | |
| cd arrow |
| archery docker pull --no-ignore-pull-failures %TEST_IMAGE_PREFIX%-wheel-windows-test |
| if errorlevel 1 ( |
| archery docker build --no-pull %TEST_IMAGE_PREFIX%-wheel-windows-test || exit /B 1 |
| ) |
| archery docker run %TEST_IMAGE_PREFIX%-wheel-windows-test |
| |
| {{ macros.github_upload_releases("arrow/python/repaired_wheels/*.whl")|indent }} |
| {{ macros.github_upload_wheel_scientific_python("arrow/python/repaired_wheels/*.whl")|indent }} |
| |
| {% if arrow.is_default_branch() %} |
| - name: Push Docker image |
| shell: cmd |
| run: | |
| cd arrow |
| archery docker push %TEST_IMAGE_PREFIX%-wheel-windows-vs2022 |
| archery docker push %TEST_IMAGE_PREFIX%-wheel-windows-test |
| {% endif %} |