# 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 %}