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" - "script/gen_requirements_all.py" env: DEFAULT_PYTHON: "3.14.3" 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 steps: - &checkout name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up Python ${{ env.DEFAULT_PYTHON }} id: python uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: ${{ env.DEFAULT_PYTHON }} check-latest: true - name: Create Python virtual environment run: | python -m venv venv . venv/bin/activate python --version pip install "$(grep '^uv' < requirements.txt)" uv pip install -r requirements.txt - 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_PYTHON_BUILD_SYSTEM_OPENSSL=true" echo "GRPC_PYTHON_BUILD_WITH_CYTHON=true" # 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 actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: env_file path: ./.env_file include-hidden-files: true overwrite: true - name: Upload requirements_diff uses: *actions-upload-artifact with: name: requirements_diff path: ./requirements_diff.txt overwrite: true - name: Generate requirements run: | . venv/bin/activate python -m script.gen_requirements_all ci - name: Upload requirements_all_wheels uses: *actions-upload-artifact with: name: requirements_all_wheels path: ./requirements_all_wheels_*.txt core: name: Build Core wheels ${{ matrix.abi }} for ${{ matrix.arch }} (musllinux_1_2) if: github.repository_owner == 'home-assistant' needs: init runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: &matrix-build abi: ["cp313", "cp314"] arch: ["amd64", "aarch64"] include: - arch: amd64 os: ubuntu-latest - arch: aarch64 os: ubuntu-24.04-arm steps: - *checkout - &download-env-file name: Download env_file uses: &actions-download-artifact actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: env_file - &download-requirements-diff name: Download requirements_diff uses: *actions-download-artifact with: name: requirements_diff - name: Adjust build env run: | # Don't build wheels for uv as uv requires a greater version of rust as currently available on alpine sed -i "/uv/d" requirements.txt sed -i "/uv/d" requirements_diff.txt - name: Build wheels uses: &home-assistant-wheels home-assistant/wheels@e5742a69d69f0e274e2689c998900c7d19652c21 # 2025.12.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;zlib-ng-dev" skip-binary: aiohttp;multidict;propcache;yarl;SQLAlchemy 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: ${{ matrix.os }} strategy: fail-fast: false matrix: *matrix-build steps: - *checkout - *download-env-file - *download-requirements-diff - name: Download requirements_all_wheels uses: *actions-download-artifact with: name: requirements_all_wheels - name: Adjust build env run: | # Do not pin numpy in wheels building sed -i "/numpy/d" homeassistant/package_constraints.txt # Don't build wheels for uv as uv requires a greater version of rust as currently available on alpine sed -i "/uv/d" requirements.txt sed -i "/uv/d" requirements_diff.txt - name: Build wheels uses: *home-assistant-wheels 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;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-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;zlib-ng-dev" skip-binary: aiohttp;charset-normalizer;grpcio;multidict;SQLAlchemy;propcache;protobuf;pymicro-vad;yarl constraints: "homeassistant/package_constraints.txt" requirements-diff: "requirements_diff.txt" requirements: "requirements_all.txt"