From 40ef62da523a2c339bd0ae5460c6b9e36fbfe6b9 Mon Sep 17 00:00:00 2001 From: Roxedus Date: Sun, 27 Dec 2020 15:29:41 +0100 Subject: [PATCH] Try everything --- .github/workflows/build-amd64.yml | 42 +++++++++++++ .github/workflows/build-amd64.yml2 | 54 ----------------- Dockerfile | 96 ++++++++++++++++-------------- Dockerfile.armhf | 89 ++++++++++++++------------- 4 files changed, 142 insertions(+), 139 deletions(-) create mode 100644 .github/workflows/build-amd64.yml delete mode 100644 .github/workflows/build-amd64.yml2 diff --git a/.github/workflows/build-amd64.yml b/.github/workflows/build-amd64.yml new file mode 100644 index 0000000..83e27a8 --- /dev/null +++ b/.github/workflows/build-amd64.yml @@ -0,0 +1,42 @@ +name: Build amd64 + +on: + push: + paths: + - ".github/workflows/build-amd64.yml" + - "Dockerfile" + pull_request: + paths-ignore: + - "README.md" + +jobs: + build: + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v2 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + with: + install: true + version: latest + driver-opts: image=moby/buildkit:master + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: roxedus + password: ${{ secrets.DOCKER_HUB_PASSWORD }} + + - name: Build and push + uses: docker/build-push-action@v2 + with: + push: true + platforms: linux/amd64 + file: ./Dockerfile + tags: | + roxedus/playground:hass-amd64 diff --git a/.github/workflows/build-amd64.yml2 b/.github/workflows/build-amd64.yml2 deleted file mode 100644 index 8d80cd9..0000000 --- a/.github/workflows/build-amd64.yml2 +++ /dev/null @@ -1,54 +0,0 @@ -name: Build amd64 - -on: - push: - paths-ignore: - - 'README.md' - pull_request: - paths-ignore: - - 'README.md' - -jobs: - build: - - runs-on: ubuntu-latest - - env: - BUILDKIT_HOST: tcp://0.0.0.0:1234 - DOCKER_CLI_EXPERIMENTAL: enabled - DOCKER_IMAGE: hass-wheel-builder - DOCKER_TAG: latest - PLATFORM_1: amd64 - PLATFORM_2: arm - PLATFORM_3: arm64 - REPO: tobbenb/hass-wheel-builder-test - - steps: - - uses: actions/checkout@v1 - - name: Getting buildkit - run: | - sudo docker run --privileged linuxkit/binfmt:v0.7 - sudo docker run -d --privileged -p 1234:1234 --name buildkit moby/buildkit:latest --addr tcp://0.0.0.0:1234 \ - --oci-worker-platform linux/${PLATFORM_1} - sudo docker cp buildkit:/usr/bin/buildctl /usr/bin/ - - - name: Build amd64 - env: - DOCKERFILE_LOCATION: ./Dockerfile - run: | - buildctl build --frontend dockerfile.v0 \ - --opt platform=linux/${PLATFORM_1} \ - --opt filename=./${DOCKERFILE_LOCATION} \ - --output type=docker,name=${REPO}:${DOCKER_TAG}-${PLATFORM_1} \ - --local dockerfile=. \ - --local context=. | docker load - - - name: Export build artifact - run: | - sudo mkdir -p /artifact - sudo docker run --rm -v /artifact:/mnt tobbenb/hass-wheel-builder-test:latest-amd64 - - - uses: actions/upload-artifact@v2 - with: - name: amd64 - path: /artifact/wheel-repo-x86_64.tar.gz diff --git a/Dockerfile b/Dockerfile index 2a6bef1..e971ed5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM lsiobase/alpine:3.12 +FROM ghcr.io/linuxserver/baseimage-alpine:amd64-3.12 as buildstage # set version label ARG BUILD_DATE @@ -12,101 +12,109 @@ LABEL maintainer="saarg" ENV HOME="/tmp" # install packages +# https://github.com/home-assistant/core/blob/11d74124cd06f48c1faf68df9a2ab9034130fafa/azure-pipelines-wheels.yml#L32 RUN \ echo "**** install build packages ****" && \ apk add --no-cache --virtual=build-dependencies \ - autoconf \ + autoconf \ bluez-deprecated \ - ca-certificates \ - cmake \ + bluez-dev \ + build-base \ + ca-certificates \ + cmake \ curl \ cython \ - eudev-dev \ + eudev-dev \ eudev-libs \ ffmpeg \ - ffmpeg-dev \ - gcc \ - glib-dev \ + ffmpeg-dev \ g++ \ - jq \ + gcc \ + git \ + glib-dev \ + jq \ libffi-dev \ libjpeg-turbo \ - libjpeg-turbo-dev \ + libjpeg-turbo-dev \ libstdc++ \ - libxml2-dev \ + libxml2-dev \ libxslt \ - libxslt-dev \ + libxslt-dev \ + linux-headers \ make \ openssl \ - openssl-dev \ + openssl-dev \ py3-pip \ - py3-wheel \ + py3-wheel \ python3 \ python3-dev \ - sudo \ - unzip + sudo \ + unzip RUN \ echo "**** find packages to build for homeassistant ****" && \ mkdir -p \ - /tmp/core && \ - if [ -z ${HASS_RELEASE+x} ]; then \ - HASS_RELEASE=$(curl -sX GET https://api.github.com/repos/home-assistant/core/releases/latest \ - | jq -r .tag_name); \ + /tmp/core && \ + if [ -z ${HASS_RELEASE+x} ]; then \ + HASS_RELEASE=$(curl -sX GET https://api.github.com/repos/home-assistant/core/releases/latest \ + | jq -r .tag_name); \ fi && \ curl -o \ /tmp/core.tar.gz -L \ - "https://github.com/home-assistant/core/archive/${HASS_RELEASE}.tar.gz" && \ + "https://github.com/home-assistant/core/archive/${HASS_RELEASE}.tar.gz" && \ tar xf \ /tmp/core.tar.gz -C \ - /tmp/core --strip-components=1 + /tmp/core --strip-components=1 RUN \ echo "**** make folders for building wheels and upgrade pip ****" && \ mkdir -p \ - /build/addons \ - /build/core && \ + /build/addons \ + /build/core && \ pip3 install --no-cache-dir --upgrade \ - pip + pip==20.3 # https://github.com/home-assistant/core/pull/43771 RUN \ echo "**** build wheels for home assistant core ****" && \ - awk '/# Home Assistant core/,/^$/' /tmp/core/requirements_all.txt > /tmp/requirements_hass.txt && \ + awk '/# Home Assistant Core/,/^$/' /tmp/core/requirements_all.txt > /tmp/requirements_hass.txt && \ awk '/# homeassistant.components.trend/,/^$/' /tmp/core/requirements_all.txt >> /tmp/requirements_hass.txt && \ - pip3 wheel --wheel-dir=/build/core --no-cache-dir \ - -r /tmp/requirements_hass.txt + sed -i "s/-r requirements.txt/-r \/tmp\/core\/requirements.txt/g" /tmp/requirements_hass.txt && \ + pip3 wheel --wheel-dir=/build/core --no-cache-dir --use-deprecated=legacy-resolver \ + -r /tmp/requirements_hass.txt +# https://github.com/home-assistant/core/issues/43934 >> https://github.com/home-assistant/core/pull/36330 RUN \ echo "**** build wheels for home assistant addons ****" && \ sed -i "s/-r requirements_test.txt/-r \/tmp\/core\/requirements_test.txt/g" /tmp/core/requirements_test_all.txt && \ sed -i "s/-r requirements_test_pre_commit.txt/-r \/tmp\/core\/requirements_test_pre_commit.txt/g" /tmp/core/requirements_test.txt && \ - pip3 wheel --wheel-dir /build/addons --no-cache-dir --find-links=/build/core \ - -r /tmp/core/requirements_test_all.txt + pip3 wheel --wheel-dir /build/addons --no-cache-dir --find-links=/build/core --use-deprecated=legacy-resolver \ + -r /tmp/core/requirements_test_all.txt RUN \ echo "**** install dependencies for hacs.xyz ****" && \ if [ -z ${HACS_RELEASE+x} ]; then \ - HACS_RELEASE=$(curl -sX GET "https://api.github.com/repos/hacs/integration/releases/latest" \ - | awk '/tag_name/{print $4;exit}' FS='[""]'); \ + HACS_RELEASE=$(curl -sX GET "https://api.github.com/repos/hacs/integration/releases/latest" \ + | awk '/tag_name/{print $4;exit}' FS='[""]'); \ fi && \ mkdir -p \ - /build/hacs \ - /tmp/hacs-source && \ + /build/hacs \ + /tmp/hacs-source && \ curl -o \ - /tmp/hacs.tar.gz -L \ - "https://github.com/hacs/integration/archive/${HACS_RELEASE}.tar.gz" && \ + /tmp/hacs.tar.gz -L \ + "https://github.com/hacs/integration/archive/${HACS_RELEASE}.tar.gz" && \ tar xf \ - /tmp/hacs.tar.gz -C \ - /tmp/hacs-source --strip-components=1 && \ - pip3 wheel --wheel-dir=/build/hacs --no-cache-dir --find-links=/build/core --find-links=/build/addons \ - -r /tmp/hacs-source/requirements.txt + /tmp/hacs.tar.gz -C \ + /tmp/hacs-source --strip-components=1 && \ + pip3 wheel --wheel-dir=/build/hacs --no-cache-dir --find-links=/build/core --find-links=/build/addons --use-deprecated=legacy-resolver \ + -r /tmp/hacs-source/requirements.txt RUN \ mkdir -p \ - /tmp/repo && \ + /tmp/repo && \ mv /build/addons/* /tmp/repo/ && \ mv /build/core/* /tmp/repo/ && \ - mv /build/hacs/* /tmp/repo/ && \ - tar zcf /tmp/wheel-repo-x86_64.tar.gz /tmp/repo + mv /build/hacs/* /tmp/repo/ -CMD ["cp", "-avr", "/tmp/wheel-repo-x86_64.tar.gz", "/mnt/"] \ No newline at end of file +FROM scratch + +COPY --from=buildstage /tmp/repo / diff --git a/Dockerfile.armhf b/Dockerfile.armhf index 1374824..b2d6588 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf @@ -12,102 +12,109 @@ LABEL maintainer="saarg" ENV HOME="/tmp" # install packages +# https://github.com/home-assistant/core/blob/11d74124cd06f48c1faf68df9a2ab9034130fafa/azure-pipelines-wheels.yml#L32 RUN \ echo "**** install build packages ****" && \ apk add --no-cache --virtual=build-dependencies \ - autoconf \ + autoconf \ bluez-deprecated \ - ca-certificates \ - cmake \ + bluez-dev \ + build-base \ + ca-certificates \ + cmake \ curl \ cython \ - eudev-dev \ + eudev-dev \ eudev-libs \ ffmpeg \ - ffmpeg-dev \ - gcc \ - glib-dev \ + ffmpeg-dev \ g++ \ - jq \ + gcc \ + git \ + glib-dev \ + jq \ libffi-dev \ libjpeg-turbo \ - libjpeg-turbo-dev \ + libjpeg-turbo-dev \ libstdc++ \ - libxml2-dev \ + libxml2-dev \ libxslt \ - libxslt-dev \ + libxslt-dev \ + linux-headers \ make \ openssl \ - openssl-dev \ + openssl-dev \ py3-pip \ - py3-wheel \ + py3-wheel \ python3 \ python3-dev \ - sudo \ - unzip + sudo \ + unzip RUN \ echo "**** find packages to build for homeassistant ****" && \ mkdir -p \ - /tmp/core && \ - if [ -z ${HASS_RELEASE+x} ]; then \ - HASS_RELEASE=$(curl -sX GET https://api.github.com/repos/home-assistant/core/releases/latest \ - | jq -r .tag_name); \ + /tmp/core && \ + if [ -z ${HASS_RELEASE+x} ]; then \ + HASS_RELEASE=$(curl -sX GET https://api.github.com/repos/home-assistant/core/releases/latest \ + | jq -r .tag_name); \ fi && \ curl -o \ /tmp/core.tar.gz -L \ - "https://github.com/home-assistant/core/archive/${HASS_RELEASE}.tar.gz" && \ + "https://github.com/home-assistant/core/archive/${HASS_RELEASE}.tar.gz" && \ tar xf \ /tmp/core.tar.gz -C \ - /tmp/core --strip-components=1 + /tmp/core --strip-components=1 RUN \ echo "**** make folders for building wheels and upgrade pip ****" && \ mkdir -p \ - /build/addons \ - /build/core && \ + /build/addons \ + /build/core && \ pip3 install --no-cache-dir --upgrade \ - pip + pip==20.3 # https://github.com/home-assistant/core/pull/43771 RUN \ echo "**** build wheels for home assistant core ****" && \ - awk '/# Home Assistant core/,/^$/' /tmp/core/requirements_all.txt > /tmp/requirements_hass.txt && \ + awk '/# Home Assistant Core/,/^$/' /tmp/core/requirements_all.txt > /tmp/requirements_hass.txt && \ awk '/# homeassistant.components.trend/,/^$/' /tmp/core/requirements_all.txt >> /tmp/requirements_hass.txt && \ - pip3 wheel --wheel-dir=/build/core --no-cache-dir \ - -r /tmp/requirements_hass.txt + sed -i "s/-r requirements.txt/-r \/tmp\/core\/requirements.txt/g" /tmp/requirements_hass.txt && \ + pip3 wheel --wheel-dir=/build/core --no-cache-dir --use-deprecated=legacy-resolver \ + -r /tmp/requirements_hass.txt +# https://github.com/home-assistant/core/issues/43934 >> https://github.com/home-assistant/core/pull/36330 RUN \ echo "**** build wheels for home assistant addons ****" && \ sed -i "s/-r requirements_test.txt/-r \/tmp\/core\/requirements_test.txt/g" /tmp/core/requirements_test_all.txt && \ sed -i "s/-r requirements_test_pre_commit.txt/-r \/tmp\/core\/requirements_test_pre_commit.txt/g" /tmp/core/requirements_test.txt && \ - pip3 wheel --wheel-dir /build/addons --no-cache-dir --find-links=/build/core \ - -r /tmp/core/requirements_test_all.txt + pip3 wheel --wheel-dir /build/addons --no-cache-dir --find-links=/build/core --use-deprecated=legacy-resolver \ + -r /tmp/core/requirements_test_all.txt RUN \ echo "**** install dependencies for hacs.xyz ****" && \ if [ -z ${HACS_RELEASE+x} ]; then \ - HACS_RELEASE=$(curl -sX GET "https://api.github.com/repos/hacs/integration/releases/latest" \ - | awk '/tag_name/{print $4;exit}' FS='[""]'); \ + HACS_RELEASE=$(curl -sX GET "https://api.github.com/repos/hacs/integration/releases/latest" \ + | awk '/tag_name/{print $4;exit}' FS='[""]'); \ fi && \ mkdir -p \ - /build/hacs \ - /tmp/hacs-source && \ + /build/hacs \ + /tmp/hacs-source && \ curl -o \ - /tmp/hacs.tar.gz -L \ - "https://github.com/hacs/integration/archive/${HACS_RELEASE}.tar.gz" && \ + /tmp/hacs.tar.gz -L \ + "https://github.com/hacs/integration/archive/${HACS_RELEASE}.tar.gz" && \ tar xf \ - /tmp/hacs.tar.gz -C \ - /tmp/hacs-source --strip-components=1 && \ - pip3 wheel --wheel-dir=/build/hacs --no-cache-dir --find-links=/build/core --find-links=/build/addons \ - -r /tmp/hacs-source/requirements.txt + /tmp/hacs.tar.gz -C \ + /tmp/hacs-source --strip-components=1 && \ + pip3 wheel --wheel-dir=/build/hacs --no-cache-dir --find-links=/build/core --find-links=/build/addons --use-deprecated=legacy-resolver \ + -r /tmp/hacs-source/requirements.txt RUN \ mkdir -p \ - /tmp/repo && \ + /tmp/repo && \ mv /build/addons/* /tmp/repo/ && \ mv /build/core/* /tmp/repo/ && \ mv /build/hacs/* /tmp/repo/ FROM scratch -COPY --from=buildstage /tmp/ / +COPY --from=buildstage /tmp/repo /