mirror of
https://github.com/apache/arrow.git
synced 2026-10-29 00:56:31 +08:00
### Rationale for this change The docker base docker image which installs all the vcpkg dependencies to build Windows wheels was failing to commit the layer for gRPC due to size. ### What changes are included in this PR? Two separate fixes that independently fix the issue: - Patch vcpkg for Windows to remove unconditional `/Z7` - Use D:/ drive instead of C:/ as it has bigger size for Docker storage ### Are these changes tested? Yes via archery ### Are there any user-facing changes? No * GitHub Issue: #49676 Lead-authored-by: Raúl Cumplido <raulcumplido@gmail.com> Co-authored-by: Bryce Mecum <petridish@gmail.com> Signed-off-by: Raúl Cumplido <raulcumplido@gmail.com>
125 lines
5.0 KiB
YAML
125 lines
5.0 KiB
YAML
# 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 %}
|