Skip to content

Add arm64 linux build #31

Add arm64 linux build

Add arm64 linux build #31

name: Build arm64
on:
# for test action
pull_request:
branches:
- main
- feat/add-arm-wheel-build
# end for test action
workflow_dispatch:
inputs:
TAG_NAME:
description: 'Release Version Tag'
required: true
release:
types: [created]
defaults:
run:
shell: bash -leo pipefail {0}
jobs:
build_wheels_linux_arm64:
name: ${{ matrix.os }} py${{ matrix.python-version }}
runs-on:
- self-hosted
- ARM64
strategy:
fail-fast: false
matrix:
os: [ ubuntu-20.04 ]
# python-version: [ "3.8", "3.9", "3.10", "3.11"]
python-version: [ "3.11" ]
env:
RUNNER_OS: ${{ matrix.os }}
PYTHON_VERSION: ${{ matrix.python-version }}
steps:
- name: switch python
run: |
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
pyenv local "${{ matrix.python-version }}"
python --version
shell: bash -l {0}
- name: Update git
run: |
sudo add-apt-repository ppa:git-core/ppa -y
sudo apt-get update
sudo apt-get install -y git
git --version
shell: bash -l {0}
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Restore submodules cache
uses: actions/cache/restore@v3
id: cache
with:
path: |
contrib/**
key: |
submodule-${{ hashFiles('.gitmodules') }}
- name: Update submodules if cache miss
if: steps.cache.outputs.cache-hit != 'true'
run: |
git submodule update --init --recursive --jobs 4
- name: Save submodules cache
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v3
with:
path: |
contrib/**
key: |
submodule-${{ hashFiles('.gitmodules') }}
- name: ccache
uses: hendrikmuhs/[email protected]
with:
key: ${{ matrix.os }}
max-size: 5G
append-timestamp: true
- name: Prepare chdb/build.sh
run: |
pyenv local "${{ matrix.python-version }}"
python3 --version
shell: bash -l {0}
continue-on-error: false
- name: Install dependencies for building wheels
run: |
python3 -m pip install -U pip tox twine setuptools wheel
python3 -m pip install cibuildwheel==2.12.1
mkdir wheelhouse
cp -a ${GITHUB_WORKSPACE}/.ccache wheelhouse/.ccache
shell: bash -l {0}
- name: Build wheels
run: python3 -m cibuildwheel --output-dir wheelhouse
timeout-minutes: 300
env:
CIBW_DEBUG: 1
CIBW_MANYLINUX_AARCH64_IMAGE: "docker.io/nmreadelf/chdb-action:2023-07-28"
CIBW_BEFORE_BUILD_LINUX: "apt update && apt install -qq -y wget lsb-release wget software-properties-common ccache gnupg make cmake ninja-build yasm gawk && wget -q https://apt.llvm.org/llvm.sh && bash ./llvm.sh 15 && wget https://github.com/NixOS/patchelf/releases/download/0.18.0/patchelf-0.18.0-aarch64.tar.gz -O patchelf.tar.gz && tar -xvf patchelf.tar.gz && cp bin/patchelf /usr/bin/ && chmod +x /usr/bin/patchelf && patchelf --version;"
CIBW_CONTAINER_ENGINE: podman
CIBW_ENVIRONMENT_LINUX: "CC=/usr/bin/clang-15 CXX=/usr/bin/clang++-15 CCACHE_DIR=/project/wheelhouse/.ccache"
CIBW_BEFORE_BUILD: "pip install -U pip tox pybind11 && bash -x gen_manifest.sh && bash chdb/build.sh"
CIBW_BUILD_VERBOSITY: 3
CIBW_BUILD: "cp38-manylinux_aarch64 cp39-manylinux_aarch64 cp310-manylinux_aarch64"
CIBW_TEST_REQUIRES: "pyarrow pandas psutil"
CIBW_TEST_COMMAND: "cd {project} && make test"
- name: Keep killall ccache and wait for ccache to finish
if: always()
run: |
sleep 60
while ps -ef | grep ccache | grep -v grep; do \
killall ccache; \
sleep 10; \
done
cp -a wheelhouse/.ccache ${GITHUB_WORKSPACE}/.ccache
- name: Show files
run: ls -lh wheelhouse
shell: bash
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
- name: Upload pypi
if: startsWith(github.ref, 'refs/tags/v')
run: |
python3 -m pip install twine
python3 -m twine upload wheelhouse/*.whl
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
# #build for macos12 arm64(Apple Silicon)
# build_wheels_macos_arm64: