258 lines
10 KiB
YAML
258 lines
10 KiB
YAML
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@v4.3.1
|
|
with:
|
|
name: env_file
|
|
path: ./.env_file
|
|
overwrite: true
|
|
|
|
- name: Upload requirements_diff
|
|
uses: actions/upload-artifact@v4.3.1
|
|
with:
|
|
name: requirements_diff
|
|
path: ./requirements_diff.txt
|
|
overwrite: true
|
|
|
|
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: ["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@v4.1.2
|
|
with:
|
|
name: env_file
|
|
|
|
- name: Download requirements_diff
|
|
uses: actions/download-artifact@v4.1.2
|
|
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: ["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@v4.1.2
|
|
with:
|
|
name: env_file
|
|
|
|
- name: Download requirements_diff
|
|
uses: actions/download-artifact@v4.1.2
|
|
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"
|