Build wheels #57
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build wheels | |
# yamllint disable-line rule:truthy | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: "0 4 * * *" | |
push: | |
branches: | |
- dev | |
- rc | |
paths: | |
- ".github/workflows/wheels.yml" | |
- "homeassistant/package_constraints.txt" | |
- "requirements_all.txt" | |
- "requirements.txt" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref_name}} | |
cancel-in-progress: true | |
jobs: | |
init: | |
name: Initialize wheels builder | |
if: github.repository_owner == 'home-assistant' | |
runs-on: ubuntu-latest | |
outputs: | |
architectures: ${{ steps.info.outputs.architectures }} | |
steps: | |
- name: Checkout the repository | |
uses: actions/checkout@v4.1.1 | |
- name: Get information | |
id: info | |
uses: home-assistant/actions/helpers/info@master | |
- name: Create requirements_diff file | |
run: | | |
if [[ ${{ github.event_name }} =~ (schedule|workflow_dispatch) ]]; then | |
touch requirements_diff.txt | |
else | |
curl -s -o requirements_diff.txt https://raw.githubusercontent.com/home-assistant/core/master/requirements.txt | |
fi | |
- name: Write env-file | |
run: | | |
( | |
echo "GRPC_BUILD_WITH_BORING_SSL_ASM=false" | |
echo "GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=true" | |
echo "GRPC_PYTHON_BUILD_WITH_CYTHON=true" | |
echo "GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY=true" | |
echo "GRPC_PYTHON_LDFLAGS=-lpthread -Wl,-wrap,memcpy -static-libgcc" | |
# Fix out of memory issues with rust | |
echo "CARGO_NET_GIT_FETCH_WITH_CLI=true" | |
# OpenCV headless installation | |
echo "CI_BUILD=1" | |
echo "ENABLE_HEADLESS=1" | |
# Use C-Extension for SQLAlchemy | |
echo "REQUIRE_SQLALCHEMY_CEXT=1" | |
) > .env_file | |
- name: Upload env_file | |
uses: actions/upload-artifact@v3.1.2 | |
with: | |
name: env_file | |
path: ./.env_file | |
- name: Upload requirements_diff | |
uses: actions/upload-artifact@v3.1.2 | |
with: | |
name: requirements_diff | |
path: ./requirements_diff.txt | |
core: | |
name: Build Core wheels ${{ matrix.abi }} for ${{ matrix.arch }} (musllinux_1_2) | |
if: github.repository_owner == 'home-assistant' | |
needs: init | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
abi: ["cp311", "cp312"] | |
arch: ${{ fromJson(needs.init.outputs.architectures) }} | |
steps: | |
- name: Checkout the repository | |
uses: actions/checkout@v4.1.1 | |
- name: Download env_file | |
uses: actions/download-artifact@v3 | |
with: | |
name: env_file | |
- name: Download requirements_diff | |
uses: actions/download-artifact@v3 | |
with: | |
name: requirements_diff | |
- name: Build wheels | |
uses: home-assistant/wheels@2024.01.0 | |
with: | |
abi: ${{ matrix.abi }} | |
tag: musllinux_1_2 | |
arch: ${{ matrix.arch }} | |
wheels-key: ${{ secrets.WHEELS_KEY }} | |
env-file: true | |
apk: "libffi-dev;openssl-dev;yaml-dev;nasm" | |
skip-binary: aiohttp | |
constraints: "homeassistant/package_constraints.txt" | |
requirements-diff: "requirements_diff.txt" | |
requirements: "requirements.txt" | |
integrations: | |
name: Build wheels ${{ matrix.abi }} for ${{ matrix.arch }} | |
if: github.repository_owner == 'home-assistant' | |
needs: init | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
abi: ["cp311", "cp312"] | |
arch: ${{ fromJson(needs.init.outputs.architectures) }} | |
steps: | |
- name: Checkout the repository | |
uses: actions/checkout@v4.1.1 | |
- name: Download env_file | |
uses: actions/download-artifact@v3 | |
with: | |
name: env_file | |
- name: Download requirements_diff | |
uses: actions/download-artifact@v3 | |
with: | |
name: requirements_diff | |
- name: (Un)comment packages | |
run: | | |
requirement_files="requirements_all.txt requirements_diff.txt" | |
for requirement_file in ${requirement_files}; do | |
sed -i "s|# fritzconnection|fritzconnection|g" ${requirement_file} | |
sed -i "s|# pyuserinput|pyuserinput|g" ${requirement_file} | |
sed -i "s|# evdev|evdev|g" ${requirement_file} | |
sed -i "s|# pycups|pycups|g" ${requirement_file} | |
sed -i "s|# homekit|homekit|g" ${requirement_file} | |
sed -i "s|# decora-wifi|decora-wifi|g" ${requirement_file} | |
sed -i "s|# python-gammu|python-gammu|g" ${requirement_file} | |
# Some packages are not buildable on armhf anymore | |
if [ "${{ matrix.arch }}" = "armhf" ]; then | |
# Pandas has issues building on armhf, it is expected they | |
# will drop the platform in the near future (they consider it | |
# "flimsy" on 386). The following packages depend on pandas, | |
# so we comment them out. | |
sed -i "s|env-canada|# env-canada|g" ${requirement_file} | |
sed -i "s|noaa-coops|# noaa-coops|g" ${requirement_file} | |
sed -i "s|pyezviz|# pyezviz|g" ${requirement_file} | |
sed -i "s|pykrakenapi|# pykrakenapi|g" ${requirement_file} | |
fi | |
# Some speedups are only for 64-bit | |
if [ "${{ matrix.arch }}" = "amd64" ] || [ "${{ matrix.arch }}" = "aarch64" ]; then | |
sed -i "s|aiohttp-zlib-ng|aiohttp-zlib-ng\[isal\]|g" ${requirement_file} | |
fi | |
done | |
- name: Split requirements all | |
run: | | |
# We split requirements all into two different files. | |
# This is to prevent the build from running out of memory when | |
# resolving packages on 32-bits systems (like armhf, armv7). | |
split -l $(expr $(expr $(cat requirements_all.txt | wc -l) + 1) / 3) requirements_all.txt requirements_all.txt | |
- name: Create requirements for cython<3 | |
run: | | |
# Some dependencies still require 'cython<3' | |
# and don't yet use isolated build environments. | |
# Build these first. | |
# grpcio: https://github.com/grpc/grpc/issues/33918 | |
# pydantic: https://github.com/pydantic/pydantic/issues/7689 | |
touch requirements_old-cython.txt | |
cat homeassistant/package_constraints.txt | grep 'grpcio==' >> requirements_old-cython.txt | |
cat homeassistant/package_constraints.txt | grep 'pydantic==' >> requirements_old-cython.txt | |
- name: Adjust build env | |
run: | | |
if [ "${{ matrix.arch }}" = "i386" ]; then | |
echo "NPY_DISABLE_SVML=1" >> .env_file | |
fi | |
# Do not pin numpy in wheels building | |
sed -i "/numpy/d" homeassistant/package_constraints.txt | |
- name: Build wheels (old cython) | |
uses: home-assistant/wheels@2024.01.0 | |
with: | |
abi: ${{ matrix.abi }} | |
tag: musllinux_1_2 | |
arch: ${{ matrix.arch }} | |
wheels-key: ${{ secrets.WHEELS_KEY }} | |
env-file: true | |
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev" | |
skip-binary: aiohttp;charset-normalizer;grpcio;SQLAlchemy;protobuf | |
constraints: "homeassistant/package_constraints.txt" | |
requirements-diff: "requirements_diff.txt" | |
requirements: "requirements_old-cython.txt" | |
pip: "'cython<3'" | |
- name: Build wheels (part 1) | |
uses: home-assistant/wheels@2024.01.0 | |
with: | |
abi: ${{ matrix.abi }} | |
tag: musllinux_1_2 | |
arch: ${{ matrix.arch }} | |
wheels-key: ${{ secrets.WHEELS_KEY }} | |
env-file: true | |
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev;nasm" | |
skip-binary: aiohttp;charset-normalizer;grpcio;SQLAlchemy;protobuf | |
constraints: "homeassistant/package_constraints.txt" | |
requirements-diff: "requirements_diff.txt" | |
requirements: "requirements_all.txtaa" | |
- name: Build wheels (part 2) | |
uses: home-assistant/wheels@2024.01.0 | |
with: | |
abi: ${{ matrix.abi }} | |
tag: musllinux_1_2 | |
arch: ${{ matrix.arch }} | |
wheels-key: ${{ secrets.WHEELS_KEY }} | |
env-file: true | |
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev;nasm" | |
skip-binary: aiohttp;charset-normalizer;grpcio;SQLAlchemy;protobuf | |
constraints: "homeassistant/package_constraints.txt" | |
requirements-diff: "requirements_diff.txt" | |
requirements: "requirements_all.txtab" | |
- name: Build wheels (part 3) | |
uses: home-assistant/wheels@2024.01.0 | |
with: | |
abi: ${{ matrix.abi }} | |
tag: musllinux_1_2 | |
arch: ${{ matrix.arch }} | |
wheels-key: ${{ secrets.WHEELS_KEY }} | |
env-file: true | |
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev;nasm" | |
skip-binary: aiohttp;charset-normalizer;grpcio;SQLAlchemy;protobuf | |
constraints: "homeassistant/package_constraints.txt" | |
requirements-diff: "requirements_diff.txt" | |
requirements: "requirements_all.txtac" |