Skip to content

Crossbow

Crossbow #287431

Workflow file for this run

# 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.
# NOTE: must set "Crossbow" as name to have the badge links working in the
# github comment reports!
name: Crossbow
on:
push:
branches:
- "*-github-*"
env:
ARCHERY_DEBUG: 1
jobs:
build:
name: "Build wheel for Windows"
runs-on: windows-2019
env:
# archery uses this environment variable
PYTHON: "3.13"
# 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-vs2019`
# 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:
- name: Checkout Arrow
uses: actions/checkout@v4
with:
fetch-depth: 1
path: arrow
repository: apache/arrow
ref: 8f8ac38ea0073dfe4414bfad881e80036ca5af57
submodules: recursive
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Python by actions/setup-python
if: |
!(runner.os == 'Linux' && runner.arch != 'X64')
uses: actions/setup-python@v4
with:
cache: 'pip'
python-version: 3.12
- name: Set up Python by apt
if: runner.os == 'Linux' && runner.arch != 'X64'
run: |
sudo apt update
sudo apt-get install -y python3-pip
pip install -U pip
echo "$HOME/.local/bin" >>"$GITHUB_PATH"
- name: Install Archery
shell: bash
run: pip install -e arrow/dev/archery[all]
- name: Build wheel
shell: cmd
run: |
cd arrow
@rem We want to use only
@rem archery docker run -e SETUPTOOLS_SCM_PRETEND_VERSION=19.0.0.dev104 python-wheel-windows-vs2019
@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 python-wheel-windows-vs2019
if errorlevel 1 (
archery docker build --no-pull python-wheel-windows-vs2019 || exit /B 1
)
archery docker run --no-build -e SETUPTOOLS_SCM_PRETEND_VERSION=19.0.0.dev104 python-wheel-windows-vs2019
- uses: actions/upload-artifact@v4
with:
name: wheel
path: arrow/python/dist/*.whl
- name: Test wheel
shell: cmd
run: |
cd arrow
archery docker run python-wheel-windows-test
- name: Set up Python by actions/setup-python
if: |
!(runner.os == 'Linux' && runner.arch != 'X64')
uses: actions/setup-python@v4
with:
python-version: 3.12
- name: Set up Python by apt
if: runner.os == 'Linux' && runner.arch != 'X64'
run: |
sudo apt update
sudo apt install -y \
libgit2-dev \
libpython3-dev \
python3-pip
sudo python3 -m pip install --upgrade pip
- name: Checkout Crossbow
uses: actions/checkout@v4
with:
path: crossbow
ref: nightly-packaging-2024-11-19-0
- name: Setup Crossbow
shell: bash
run: |
python3 -m pip install -e arrow/dev/archery[crossbow]
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Upload artifacts
shell: bash
run: |
archery crossbow \
--queue-path $(pwd)/crossbow \
--queue-remote https://github.com/ursacomputing/crossbow \
upload-artifacts \
--sha nightly-packaging-2024-11-19-0-github-wheel-windows-cp313-amd64 \
--tag nightly-packaging-2024-11-19-0-github-wheel-windows-cp313-amd64 \
"arrow/python/dist/*.whl"
env:
CROSSBOW_GITHUB_TOKEN: ${{ secrets.CROSSBOW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- name: Verify uploaded artifacts
shell: bash
run: |
archery crossbow \
--queue-path $(pwd)/crossbow \
--queue-remote https://github.com/ursacomputing/crossbow \
status \
--task-filter 'wheel-windows-cp313-amd64' \
--no-fetch \
--validate \
nightly-packaging-2024-11-19-0
env:
CROSSBOW_GITHUB_TOKEN: ${{ secrets.CROSSBOW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- name: Set up Ruby by apt
if: runner.os == 'Linux' && runner.arch != 'X64'
run: |
sudo apt update
sudo apt install -y ruby-full
- name: Set up Ruby by GitHub Actions
if: runner.arch == 'X64' && runner.os != 'macOS'
uses: ruby/setup-ruby@v1
with:
ruby-version: "ruby"
- name: Install gemfury client on ARM self-hosted
if: runner.arch != 'X64'
run: |
# GH-36692: Pin gemfury due to wrong faraday dependency declaration.
gem install --user-install gemfury -v 0.12.0
ruby -r rubygems -e 'puts("#{Gem.user_dir}/bin")' >> $GITHUB_PATH
- name: Install gemfury client
if: runner.arch == 'X64'
run: |
# GH-36692: Pin gemfury due to wrong faraday dependency declaration.
gem install gemfury -v 0.12.0
- name: Upload package to Gemfury
shell: bash
run: |
if $(fury versions --as=${CROSSBOW_GEMFURY_ORG} --api-token=${CROSSBOW_GEMFURY_TOKEN} pyarrow | grep --fixed-strings -q "19.0.0.dev104"); then
echo "Version 19.0.0.dev104 already exists. Avoid pushing version."
else
fury push \
--api-token=${CROSSBOW_GEMFURY_TOKEN} \
--as=${CROSSBOW_GEMFURY_ORG} \
arrow/python/dist/*.whl
fi
env:
CROSSBOW_GEMFURY_TOKEN: ${{ secrets.CROSSBOW_GEMFURY_TOKEN }}
CROSSBOW_GEMFURY_ORG: ${{ secrets.CROSSBOW_GEMFURY_ORG }}
- name: Upload wheel to Anaconda scientific-python
shell: bash
run: |
python3 -m pip install git+https://github.com/Anaconda-Platform/anaconda-client.git@1.12.3
anaconda -t ${CROSSBOW_SCIENTIFIC_PYTHON_UPLOAD_TOKEN} upload --force -u scientific-python-nightly-wheels --label main arrow/python/dist/*.whl
env:
CROSSBOW_SCIENTIFIC_PYTHON_UPLOAD_TOKEN: ${{ secrets.CROSSBOW_SCIENTIFIC_PYTHON_UPLOAD_TOKEN }}
- name: Push Docker Image
shell: cmd
run: |
cd arrow
archery docker push python-wheel-windows-vs2019