From 56d1e0a99dd23fbd5e77a1448d9c61f0e65a07fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Tue, 11 May 2021 11:46:51 +0200 Subject: [PATCH] Migrate wheels builder to GitHub actions (#50445) --- .github/workflows/wheels.yml | 161 +++++++++++++++++++++++++++++++++++ azure-pipelines-wheels.yml | 101 ---------------------- 2 files changed, 161 insertions(+), 101 deletions(-) create mode 100644 .github/workflows/wheels.yml delete mode 100644 azure-pipelines-wheels.yml diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml new file mode 100644 index 00000000000..360025b4d7e --- /dev/null +++ b/.github/workflows/wheels.yml @@ -0,0 +1,161 @@ +name: Build wheels + +# yamllint disable-line rule:truthy +on: + workflow_dispatch: + schedule: + - cron: "0 4 * * *" + push: + branches: + - dev + - rc + paths: + - "requirements.txt" + - "requirements_all.txt" + +jobs: + init: + name: Initialize wheels builder + runs-on: ubuntu-latest + outputs: + architectures: ${{ steps.info.outputs.architectures }} + steps: + - name: Checkout the repository + uses: actions/checkout@v2 + + - name: Get information + id: info + uses: home-assistant/actions/helpers/info@master + + - name: Create requirements_diff file + run: curl -s -o requirements_diff.txt https://raw.githubusercontent.com/home-assistant/core/dev/requirements.txt + + - 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" + ) > .env_file + + - name: Upload env_file + uses: actions/upload-artifact@v2 + with: + name: env_file + path: ./env_file + + - name: Upload requirements_diff + uses: actions/upload-artifact@v2 + with: + name: requirements_diff + path: ./requirements_diff.txt + + core: + name: Build wheels with ${{ matrix.tag }} (${{ matrix.arch }}) for core + needs: init + runs-on: ubuntu-latest + strategy: + matrix: + arch: ${{ fromJson(needs.init.outputs.architectures) }} + tag: + - "3.8-alpine3.12" + - "3.9-alpine3.13" + steps: + - name: Checkout the repository + uses: actions/checkout@v2 + + - name: Download env_file + uses: actions/download-artifact@v2 + with: + name: env_file + + - name: Download requirements_diff + uses: actions/download-artifact@v2 + with: + name: requirements_diff + + - name: Build wheels + uses: home-assistant/wheels@master + with: + tag: ${{ matrix.tag }} + arch: ${{ matrix.arch }} + wheels-host: ${{ secrets.WHEELS_HOST }} + wheels-key: ${{ secrets.WHEELS_KEY }} + wheels-user: wheels + env-file: true + apk: "build-base;cmake;git;linux-headers;bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev" + pip: "Cython;numpy" + skip-binary: aiohttp + constraints: "homeassistant/package_constraints.txt" + requirements-diff: 'requirements_diff.txt' + requirements: "requirements.txt" + + integrations: + name: Build wheels with ${{ matrix.tag }} (${{ matrix.arch }}) for integrations + needs: init + runs-on: ubuntu-latest + strategy: + matrix: + arch: ${{ fromJson(needs.init.outputs.architectures) }} + tag: + - "3.8-alpine3.12" + - "3.9-alpine3.13" + steps: + - name: Checkout the repository + uses: actions/checkout@v2 + + - name: Download env_file + uses: actions/download-artifact@v2 + with: + name: env_file + + - name: Download requirements_diff + uses: actions/download-artifact@v2 + with: + name: requirements_diff + + - name: Uncomment packages + run: | + requirement_files="requirements_all.txt requirements_diff.txt" + for requirement_file in ${requirement_files}; do + sed -i "s|# pybluez|pybluez|g" ${requirement_file} + sed -i "s|# bluepy|bluepy|g" ${requirement_file} + sed -i "s|# beacontools|beacontools|g" ${requirement_file} + sed -i "s|# RPi.GPIO|RPi.GPIO|g" ${requirement_file} + sed -i "s|# raspihats|raspihats|g" ${requirement_file} + sed -i "s|# rpi-rf|rpi-rf|g" ${requirement_file} + sed -i "s|# blinkt|blinkt|g" ${requirement_file} + 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|# smbus-cffi|smbus-cffi|g" ${requirement_file} + sed -i "s|# i2csense|i2csense|g" ${requirement_file} + sed -i "s|# python-eq3bt|python-eq3bt|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|# decora|decora|g" ${requirement_file} + sed -i "s|# avion|avion|g" ${requirement_file} + sed -i "s|# PySwitchbot|PySwitchbot|g" ${requirement_file} + sed -i "s|# pySwitchmate|pySwitchmate|g" ${requirement_file} + sed -i "s|# face_recognition|face_recognition|g" ${requirement_file} + sed -i "s|# py_noaa|py_noaa|g" ${requirement_file} + sed -i "s|# bme680|bme680|g" ${requirement_file} + sed -i "s|# python-gammu|python-gammu|g" ${requirement_file} + done + + - name: Build wheels + uses: home-assistant/wheels@master + with: + tag: ${{ matrix.tag }} + arch: ${{ matrix.arch }} + wheels-host: ${{ secrets.WHEELS_HOST }} + wheels-key: ${{ secrets.WHEELS_KEY }} + wheels-user: wheels + env-file: true + apk: "build-base;cmake;git;linux-headers;libexecinfo-dev;bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;autoconf;automake;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev" + pip: "Cython;numpy;scikit-build" + skip-binary: aiohttp + constraints: "homeassistant/package_constraints.txt" + requirements-diff: 'requirements_diff.txt' + requirements: "requirements_all.txt" diff --git a/azure-pipelines-wheels.yml b/azure-pipelines-wheels.yml deleted file mode 100644 index 760030ec3cc..00000000000 --- a/azure-pipelines-wheels.yml +++ /dev/null @@ -1,101 +0,0 @@ -# https://dev.azure.com/home-assistant - -trigger: - branches: - include: - - dev - - rc - paths: - include: - - requirements_all.txt -pr: none -schedules: -- cron: '0 */4 * * *' - displayName: 'daily builds' - branches: - include: - - dev -variables: - - name: versionWheels - value: '1.13.0-3.8-alpine3.12' -resources: - repositories: - - repository: azure - type: github - name: 'home-assistant/ci-azure' - endpoint: 'home-assistant' - -jobs: -- template: templates/azp-job-wheels.yaml@azure - parameters: - builderVersion: '$(versionWheels)' - builderApk: 'build-base;cmake;git;linux-headers;bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev' - builderPip: 'Cython;numpy' - skipBinary: 'aiohttp' - wheelsRequirement: 'requirements.txt' - wheelsRequirementDiff: 'requirements_diff.txt' - wheelsConstraint: 'homeassistant/package_constraints.txt' - jobName: 'Wheels_Core' - preBuild: - - script: | - if [[ "$(Build.Reason)" =~ (Schedule|Manual) ]]; then - exit 0 - else - curl -s -o requirements_diff.txt https://raw.githubusercontent.com/home-assistant/core/master/requirements.txt - fi - displayName: 'Prepare requirements files for Home Assistant Core wheels' -- template: templates/azp-job-wheels.yaml@azure - parameters: - builderVersion: '$(versionWheels)' - builderApk: 'build-base;cmake;git;linux-headers;libexecinfo-dev;bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;autoconf;automake;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev' - builderPip: 'Cython;numpy;scikit-build' - builderEnvFile: true - skipBinary: 'aiohttp' - wheelsRequirement: 'requirements_wheels.txt' - wheelsRequirementDiff: 'requirements_diff.txt' - wheelsConstraint: 'homeassistant/package_constraints.txt' - jobName: 'Wheels_Integrations' - preBuild: - - script: | - cp requirements_all.txt requirements_wheels.txt - if [[ "$(Build.Reason)" =~ (Schedule|Manual) ]]; then - touch requirements_diff.txt - else - curl -s -o requirements_diff.txt https://raw.githubusercontent.com/home-assistant/core/master/requirements_all.txt - fi - - requirement_files="requirements_wheels.txt requirements_diff.txt" - for requirement_file in ${requirement_files}; do - sed -i "s|# pybluez|pybluez|g" ${requirement_file} - sed -i "s|# bluepy|bluepy|g" ${requirement_file} - sed -i "s|# beacontools|beacontools|g" ${requirement_file} - sed -i "s|# RPi.GPIO|RPi.GPIO|g" ${requirement_file} - sed -i "s|# raspihats|raspihats|g" ${requirement_file} - sed -i "s|# rpi-rf|rpi-rf|g" ${requirement_file} - sed -i "s|# blinkt|blinkt|g" ${requirement_file} - 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|# smbus-cffi|smbus-cffi|g" ${requirement_file} - sed -i "s|# i2csense|i2csense|g" ${requirement_file} - sed -i "s|# python-eq3bt|python-eq3bt|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|# decora|decora|g" ${requirement_file} - sed -i "s|# avion|avion|g" ${requirement_file} - sed -i "s|# PySwitchbot|PySwitchbot|g" ${requirement_file} - sed -i "s|# pySwitchmate|pySwitchmate|g" ${requirement_file} - sed -i "s|# face_recognition|face_recognition|g" ${requirement_file} - sed -i "s|# py_noaa|py_noaa|g" ${requirement_file} - sed -i "s|# bme680|bme680|g" ${requirement_file} - sed -i "s|# python-gammu|python-gammu|g" ${requirement_file} - done - - # Write env for build settings - ( - echo "GRPC_BUILD_WITH_BORING_SSL_ASM=false" - echo "GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=true" - echo "GRPC_PYTHON_BUILD_WITH_CYTHON=true" - ) > .env_file - displayName: 'Prepare requirements files for Home Assistant wheels'