diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5e03f1a67a..222d534cf6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -61,55 +61,84 @@ test2: <<: *docker-builder stage: build script: + - docker run --rm --privileged hassioaddons/qemu-user-static:latest + - BUILD_FROM=homeassistant/${ADDON_ARCH}-base-ubuntu:latest + - ADDON_VERSION="${CI_COMMIT_TAG#v}" + - ADDON_VERSION="${ADDON_VERSION:-${CI_COMMIT_SHA:0:7}}" + - ESPHOMELIB_VERSION="${ESPHOMELIB_VERSION:-''}" + - echo "Build from ${BUILD_FROM}" + - echo "Add-on version ${ADDON_VERSION}" + - echo "Esphomelib version ${ESPHOMELIB_VERSION}" + - echo "Tag ${CI_REGISTRY}/esphomeyaml-hassio-${ADDON_ARCH}:dev" + - echo "Tag ${CI_REGISTRY}/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" - | - hassio-builder.sh \ - -t . \ - -i ottowinter/esphomeyaml-hassio-${ADDON_ARCH} \ - -d "$CI_REGISTRY" \ - --${ADDON_ARCH} + docker build \ + --build-arg "BUILD_FROM=${BUILD_FROM}" \ + --build-arg "ADDON_ARCH=${ADDON_ARCH}" \ + --build-arg "ADDON_VERSION=${ADDON_VERSION}" \ + --build-arg "ESPHOMELIB_VERSION=${ESPHOMELIB_VERSION}" \ + --tag "${CI_REGISTRY}/esphomeyaml-hassio-${ADDON_ARCH}:dev" \ + --tag "${CI_REGISTRY}/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \ + --file "docker/Dockerfile.hassio" \ + . - | - docker tag \ - "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:dev" \ - "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" - - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" - - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:dev" - retry: 2 + if [ "${DO_PUSH:-true}" = true ]; then + echo "Pushing to CI registry" + docker push ${CI_REGISTRY}/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA} + docker push ${CI_REGISTRY}/esphomeyaml-hassio-${ADDON_ARCH}:dev + fi # Generic deploy template .deploy-release: &deploy-release <<: *docker-builder stage: deploy script: - - version=${CI_COMMIT_TAG:1} + - version="${CI_COMMIT_TAG#v}" - echo "Publishing release version ${version}" - - docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD" - docker pull "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" + - docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD" + + - echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" + - | + docker tag \ + "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \ + "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" + - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" + + - echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest" - | docker tag \ "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \ "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest" + - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest" + + - echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" - | docker tag \ "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \ "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" + - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" + + - echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" - | docker tag \ "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \ "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" + - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" + + - echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest" - | docker tag \ "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" \ "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest" + - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest" + + - echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" - | docker tag \ "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" \ "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" - - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest" - - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" - - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" - - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest" - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" - - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" only: - /^v\d+\.\d+\.\d+$/ except: @@ -119,24 +148,37 @@ test2: <<: *docker-builder stage: deploy script: - - version=${CI_COMMIT_TAG:1} + - version="${CI_COMMIT_TAG#v}" - echo "Publishing beta version ${version}" - - docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD" - docker pull "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" + - docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD" + + - echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" + - | + docker tag \ + "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \ + "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" + - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" + + - echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" - | docker tag \ "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \ "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" + - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" + + - echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" - | docker tag \ "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \ "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" + - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" + + - echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" - | docker tag \ "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" \ "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" - - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:beta" - - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc" only: - /^v\d+\.\d+\.\d+b\d+$/ @@ -149,30 +191,64 @@ build:normal: stage: build script: - docker build -t "${CI_REGISTRY}/ottowinter/esphomeyaml:dev" . - - | - docker tag \ - "${CI_REGISTRY}/ottowinter/esphomeyaml:dev" \ - "${CI_REGISTRY}/ottowinter/esphomeyaml:${CI_COMMIT_SHA}" - - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml:${CI_COMMIT_SHA}" - - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml:dev" -build:armhf: +.build-hassio-edge: &build-hassio-edge <<: *build-hassio + except: + - /^v\d+\.\d+\.\d+$/ + - /^v\d+\.\d+\.\d+b\d+$/ + +.build-hassio-release: &build-hassio-release + <<: *build-hassio + only: + - /^v\d+\.\d+\.\d+$/ + - /^v\d+\.\d+\.\d+b\d+$/ + +build:hassio-armhf-edge: + <<: *build-hassio-edge + variables: + ADDON_ARCH: armhf + DO_PUSH: "false" + ESPHOMELIB_VERSION: "${CI_COMMIT_TAG}" + +build:hassio-armhf: + <<: *build-hassio-release variables: ADDON_ARCH: armhf -#build:aarch64: -# <<: *build -# variables: -# ADDON_ARCH: aarch64 +build:hassio-aarch64-edge: + <<: *build-hassio-edge + variables: + ADDON_ARCH: aarch64 + DO_PUSH: "false" + ESPHOMELIB_VERSION: "${CI_COMMIT_TAG}" -build:i386: - <<: *build-hassio +build:hassio-aarch64: + <<: *build-hassio-release + variables: + ADDON_ARCH: aarch64 + +build:hassio-i386-edge: + <<: *build-hassio-edge + variables: + ADDON_ARCH: i386 + DO_PUSH: "false" + ESPHOMELIB_VERSION: "${CI_COMMIT_TAG}" + +build:hassio-i386: + <<: *build-hassio-release variables: ADDON_ARCH: i386 -build:amd64: - <<: *build-hassio +build:hassio-amd64-edge: + <<: *build-hassio-edge + variables: + ADDON_ARCH: amd64 + DO_PUSH: "false" + ESPHOMELIB_VERSION: "${CI_COMMIT_TAG}" + +build:hassio-amd64: + <<: *build-hassio-release variables: ADDON_ARCH: amd64 @@ -187,15 +263,15 @@ deploy-beta:armhf: variables: ADDON_ARCH: armhf -#deploy-release:aarch64: -# <<: *deploy-release -# variables: -# ADDON_ARCH: aarch64 +deploy-release:aarch64: + <<: *deploy-release + variables: + ADDON_ARCH: aarch64 -#deploy-beta:aarch64: -# <<: *deploy-beta -# variables: -# ADDON_ARCH: aarch64 +deploy-beta:aarch64: + <<: *deploy-beta + variables: + ADDON_ARCH: aarch64 deploy-release:i386: <<: *deploy-release diff --git a/Dockerfile b/Dockerfile index 81eefcd244..2c3d4da606 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,25 +1,32 @@ -FROM python:2.7 +ARG BUILD_FROM=python:2.7 +FROM ${BUILD_FROM} MAINTAINER Otto Winter RUN apt-get update && apt-get install -y \ python-pil \ - && rm -rf /var/lib/apt/lists/* + git \ + && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* && \ + pip install --no-cache-dir --no-binary :all: platformio && \ + platformio settings set enable_telemetry No && \ + platformio settings set check_libraries_interval 1000000 && \ + platformio settings set check_platformio_interval 1000000 && \ + platformio settings set check_platforms_interval 1000000 ENV ESPHOMEYAML_OTA_HOST_PORT=6123 EXPOSE 6123 VOLUME /config WORKDIR /usr/src/app -RUN pip install --no-cache-dir --no-binary :all: platformio && \ - platformio settings set enable_telemetry No - -COPY docker/platformio.ini /usr/src/app/ -RUN platformio settings set enable_telemetry No && \ - platformio run -e espressif32 -e espressif8266; exit 0 +COPY docker/platformio.ini /pio/platformio.ini +ARG ESPHOMELIB_VERSION="" +RUN platformio run -d /pio; rm -rf /pio && \ + /bin/bash -c "if [ ! -z '$ESPHOMELIB_VERSION']; then \ + platformio lib -g install '${ESPHOMELIB_VERSION}'; \ + fi" COPY . . -RUN pip install --no-cache-dir -e . && \ - pip install --no-cache-dir tzlocal pillow +RUN pip install --no-cache-dir --no-binary :all: -e . && \ + pip install --no-cache-dir --no-binary :all: tzlocal WORKDIR /config ENTRYPOINT ["esphomeyaml"] diff --git a/docker/Dockerfile.aarch64 b/docker/Dockerfile.aarch64 deleted file mode 100644 index e61ff0f92c..0000000000 --- a/docker/Dockerfile.aarch64 +++ /dev/null @@ -1,21 +0,0 @@ -# Dockerfile for aarch64 version of HassIO add-on -FROM arm64v8/ubuntu:bionic - -RUN apt-get update && apt-get install -y --no-install-recommends \ - python \ - python-pip \ - python-setuptools \ - python-pil \ - git \ - && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/*rm -rf /var/lib/apt/lists/* /tmp/* && \ - pip install --no-cache-dir --no-binary :all: platformio && \ - platformio settings set enable_telemetry No - -COPY docker/platformio.ini /pio/platformio.ini -RUN platformio run -d /pio; rm -rf /pio - -COPY . . -RUN pip install --no-cache-dir --no-binary :all: -e . && \ - pip install --no-cache-dir --no-binary :all: tzlocal - -CMD ["esphomeyaml", "/config/esphomeyaml", "dashboard"] diff --git a/docker/Dockerfile.amd64 b/docker/Dockerfile.amd64 deleted file mode 100644 index 694e7c6762..0000000000 --- a/docker/Dockerfile.amd64 +++ /dev/null @@ -1,21 +0,0 @@ -# Dockerfile for amd64 version of HassIO add-on -FROM ubuntu:bionic - -RUN apt-get update && apt-get install -y --no-install-recommends \ - python \ - python-pip \ - python-setuptools \ - python-pil \ - git \ - && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/*rm -rf /var/lib/apt/lists/* /tmp/* && \ - pip install --no-cache-dir --no-binary :all: platformio && \ - platformio settings set enable_telemetry No - -COPY docker/platformio.ini /pio/platformio.ini -RUN platformio run -d /pio; rm -rf /pio - -COPY . . -RUN pip install --no-cache-dir --no-binary :all: -e . && \ - pip install --no-cache-dir --no-binary :all: tzlocal - -CMD ["esphomeyaml", "/config/esphomeyaml", "dashboard"] diff --git a/docker/Dockerfile.armhf b/docker/Dockerfile.armhf deleted file mode 100644 index 3b2cfedf8f..0000000000 --- a/docker/Dockerfile.armhf +++ /dev/null @@ -1,31 +0,0 @@ -# Dockerfile for armhf version of HassIO add-on -FROM homeassistant/armhf-base:latest - -RUN apk add --no-cache \ - python2 \ - python2-dev \ - py2-pip \ - git \ - gcc \ - openssh \ - libc6-compat \ - jpeg-dev \ - zlib-dev \ - freetype-dev \ - lcms2-dev \ - openjpeg-dev \ - tiff-dev \ - libc-dev \ - linux-headers \ - && \ - pip install --no-cache-dir --no-binary :all: platformio && \ - platformio settings set enable_telemetry No - -COPY docker/platformio-esp8266.ini /pio/platformio.ini -RUN platformio run -d /pio; rm -rf /pio - -COPY . . -RUN pip install --no-cache-dir --no-binary :all: -e . && \ - pip install --no-cache-dir pillow tzlocal - -CMD ["esphomeyaml", "/config/esphomeyaml", "dashboard"] diff --git a/docker/Dockerfile.builder b/docker/Dockerfile.builder index d8148da3bd..2077b7bde1 100644 --- a/docker/Dockerfile.builder +++ b/docker/Dockerfile.builder @@ -27,6 +27,4 @@ RUN apt-get update && apt-get install -y \ binfmt-support \ && rm -rf /var/lib/apt/lists/* -COPY docker/hassio-builder.sh /usr/bin/ - WORKDIR /data diff --git a/docker/Dockerfile.hassio b/docker/Dockerfile.hassio new file mode 100644 index 0000000000..b0241f2d58 --- /dev/null +++ b/docker/Dockerfile.hassio @@ -0,0 +1,44 @@ +# Dockerfile for HassIO add-on +ARG BUILD_FROM=homeassistant/amd64-base-ubuntu:latest +FROM ${BUILD_FROM} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + python \ + python-pip \ + python-setuptools \ + python-pil \ + git \ + && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* && \ + pip install --no-cache-dir --no-binary :all: platformio && \ + platformio settings set enable_telemetry No && \ + platformio settings set check_libraries_interval 1000000 && \ + platformio settings set check_platformio_interval 1000000 && \ + platformio settings set check_platforms_interval 1000000 + +COPY docker/platformio.ini /pio/platformio.ini +ARG ESPHOMELIB_VERSION="" +RUN platformio run -d /pio; rm -rf /pio && \ + /bin/bash -c "if [ ! -z '$ESPHOMELIB_VERSION']; then \ + platformio lib -g install '${ESPHOMELIB_VERSION}'; \ + fi" + + +COPY . . +RUN pip install --no-cache-dir --no-binary :all: -e . && \ + pip install --no-cache-dir --no-binary :all: tzlocal + +CMD ["esphomeyaml", "/config/esphomeyaml", "dashboard"] + +# Build arugments +ARG ADDON_ARCH +ARG ADDON_VERSION + +# Labels +LABEL \ + io.hass.name="esphomeyaml" \ + io.hass.description="esphomeyaml HassIO add-on for intelligently managing all your ESP8266/ESP32 devices." \ + io.hass.arch="${ADDON_ARCH}" \ + io.hass.type="addon" \ + io.hass.version="${ADDON_VERSION}" \ + io.hass.url="https://esphomelib.com/esphomeyaml/index.html" \ + maintainer="Otto Winter " diff --git a/docker/Dockerfile.i386 b/docker/Dockerfile.i386 deleted file mode 100644 index 06ef39f6ef..0000000000 --- a/docker/Dockerfile.i386 +++ /dev/null @@ -1,21 +0,0 @@ -# Dockerfile for i386 version of HassIO add-on -FROM i386/ubuntu:bionic - -RUN apt-get update && apt-get install -y --no-install-recommends \ - python \ - python-pip \ - python-setuptools \ - python-pil \ - git \ - && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/*rm -rf /var/lib/apt/lists/* /tmp/* && \ - pip install --no-cache-dir --no-binary :all: platformio && \ - platformio settings set enable_telemetry No - -COPY docker/platformio.ini /pio/platformio.ini -RUN platformio run -d /pio; rm -rf /pio - -COPY . . -RUN pip install --no-cache-dir --no-binary :all: -e . && \ - pip install --no-cache-dir --no-binary :all: tzlocal - -CMD ["esphomeyaml", "/config/esphomeyaml", "dashboard"] diff --git a/docker/hassio-builder.sh b/docker/hassio-builder.sh deleted file mode 100755 index 699e028748..0000000000 --- a/docker/hassio-builder.sh +++ /dev/null @@ -1,318 +0,0 @@ -#!/usr/bin/env bash -# Based on Home Assistant's docker builder -###################### -# Hass.io Build-env -###################### -set -e - -echo -- "$@" - -#### Variable #### - -DOCKER_TIMEOUT=20 -DOCKER_PID=-1 -DOCKER_HUB="" -DOCKER_CACHE="true" -DOCKER_LOCAL="false" -TARGET="" -IMAGE="" -BUILD_LIST=() -BUILD_TASKS=() - -#### Misc functions #### - -function print_help() { - cat << EOF -Hass.io build-env for ecosystem: -docker run --rm homeassistant/{arch}-builder:latest [options] - -Options: - -h, --help - Display this help and exit. - - Repository / Data - -t, --target - Set local folder or path inside repository for build. - - Version/Image handling - -i, --image - Overwrite image name of build / support {arch} - - Architecture - --armhf - Build for arm. - --amd64 - Build for intel/amd 64bit. - --aarch64 - Build for arm 64bit. - --i386 - Build for intel/amd 32bit. - --all - Build all architecture. - - Build handling - --no-cache - Disable cache for the build (from latest). - -d, --docker-hub - Set or overwrite the docker repository. - - Use the host docker socket if mapped into container: - /var/run/docker.sock - -EOF - - exit 1 -} - -#### Docker functions #### - -function start_docker() { - local starttime - local endtime - - if [ -S "/var/run/docker.sock" ]; then - echo "[INFO] Use host docker setup with '/var/run/docker.sock'" - DOCKER_LOCAL="true" - return 0 - fi - - echo "[INFO] Starting docker." - dockerd 2> /dev/null & - DOCKER_PID=$! - - echo "[INFO] Waiting for docker to initialize..." - starttime="$(date +%s)" - endtime="$(date +%s)" - until docker info >/dev/null 2>&1; do - if [ $((endtime - starttime)) -le ${DOCKER_TIMEOUT} ]; then - sleep 1 - endtime=$(date +%s) - else - echo "[ERROR] Timeout while waiting for docker to come up" - exit 1 - fi - done - echo "[INFO] Docker was initialized" -} - - -function stop_docker() { - local starttime - local endtime - - if [ "$DOCKER_LOCAL" == "true" ]; then - return 0 - fi - - echo "[INFO] Stopping in container docker..." - if [ "$DOCKER_PID" -gt 0 ] && kill -0 "$DOCKER_PID" 2> /dev/null; then - starttime="$(date +%s)" - endtime="$(date +%s)" - - # Now wait for it to die - kill "$DOCKER_PID" - while kill -0 "$DOCKER_PID" 2> /dev/null; do - if [ $((endtime - starttime)) -le ${DOCKER_TIMEOUT} ]; then - sleep 1 - endtime=$(date +%s) - else - echo "[ERROR] Timeout while waiting for container docker to die" - exit 1 - fi - done - else - echo "[WARN] Your host might have been left with unreleased resources" - fi -} - -function run_build() { - local build_dir=$1 - local repository=$2 - local image=$3 - local version=$4 - local build_arch=$5 - local docker_cli=("${!6}") - - local push_images=() - - # Overwrites - if [ ! -z "$DOCKER_HUB" ]; then repository="$DOCKER_HUB"; fi - if [ ! -z "$IMAGE" ]; then image="$IMAGE"; fi - - # Init Cache - if [ "$DOCKER_CACHE" == "true" ]; then - echo "[INFO] Init cache for $repository/$image:$version" - if docker pull "$repository/$image:latest" > /dev/null 2>&1; then - docker_cli+=("--cache-from" "$repository/$image:latest") - else - docker_cli+=("--no-cache") - echo "[WARN] No cache image found. Cache is disabled for build" - fi - else - docker_cli+=("--no-cache") - fi - - # Build image - echo "[INFO] Run build for $repository/$image:$version" - docker build --pull -t "$repository/$image:$version" \ - --label "io.hass.version=$version" \ - --label "io.hass.arch=$build_arch" \ - -f "$TARGET/docker/Dockerfile.$build_arch" \ - "${docker_cli[@]}" \ - "$build_dir" - - echo "[INFO] Finish build for $repository/$image:$version" - docker tag "$repository/$image:$version" "$repository/$image:dev" -} - - -#### HassIO functions #### - -function build_addon() { - local build_arch=$1 - - local docker_cli=() - local image="" - local repository="" - local raw_image="" - local name="" - local description="" - local url="" - local args="" - - # Read addon config.json - name="$(jq --raw-output '.name // empty' "$TARGET/esphomeyaml/config.json" | sed "s/'//g")" - description="$(jq --raw-output '.description // empty' "$TARGET/esphomeyaml/config.json" | sed "s/'//g")" - url="$(jq --raw-output '.url // empty' "$TARGET/esphomeyaml/config.json")" - version="$(jq --raw-output '.version' "$TARGET/esphomeyaml/config.json")" - raw_image="$(jq --raw-output '.image // empty' "$TARGET/esphomeyaml/config.json")" - - # Read data from image - if [ ! -z "$raw_image" ]; then - repository="$(echo "$raw_image" | cut -f 1 -d '/')" - image="$(echo "$raw_image" | cut -f 2 -d '/')" - fi - - # Set additional labels - docker_cli+=("--label" "io.hass.name=$name") - docker_cli+=("--label" "io.hass.description=$description") - docker_cli+=("--label" "io.hass.type=addon") - - if [ ! -z "$url" ]; then - docker_cli+=("--label" "io.hass.url=$url") - fi - - # Start build - run_build "$TARGET" "$repository" "$image" "$version" \ - "$build_arch" docker_cli[@] -} - -#### initialized cross-build #### - -function init_crosscompile() { - echo "[INFO] Setup crosscompiling feature" - ( - mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc - update-binfmts --enable qemu-arm - update-binfmts --enable qemu-aarch64 - ) > /dev/null 2>&1 || echo "[WARN] Can't enable crosscompiling feature" -} - - -function clean_crosscompile() { - echo "[INFO] Clean crosscompiling feature" - if [ -f /proc/sys/fs/binfmt_misc ]; then - umount /proc/sys/fs/binfmt_misc || true - fi - - ( - update-binfmts --disable qemu-arm - update-binfmts --disable qemu-aarch64 - ) > /dev/null 2>&1 || echo "[WARN] No crosscompiling feature found for cleanup" -} - -#### Error handling #### - -function error_handling() { - stop_docker - clean_crosscompile - - exit 1 -} -trap 'error_handling' SIGINT SIGTERM - -#### Parse arguments #### - -while [[ $# -gt 0 ]]; do - key=$1 - case ${key} in - -h|--help) - print_help - ;; - -t|--target) - TARGET=$2 - shift - ;; - -i|--image) - IMAGE=$2 - shift - ;; - --no-cache) - DOCKER_CACHE="false" - ;; - -d|--docker-hub) - DOCKER_HUB=$2 - shift - ;; - --armhf) - BUILD_LIST+=("armhf") - ;; - --amd64) - BUILD_LIST+=("amd64") - ;; - --i386) - BUILD_LIST+=("i386") - ;; - --aarch64) - BUILD_LIST+=("aarch64") - ;; - --all) - BUILD_LIST=("armhf" "amd64" "i386" "aarch64") - ;; - - *) - echo "[WARN] $0 : Argument '$1' unknown will be Ignoring" - ;; - esac - shift -done - -# Check if an architecture is available -if [ "${#BUILD_LIST[@]}" -eq 0 ]; then - echo "[ERROR] You need select an architecture for build!" - exit 1 -fi - - -#### Main #### - -mkdir -p /data - -# Setup docker env -init_crosscompile -start_docker - -# Select arch build -for arch in "${BUILD_LIST[@]}"; do - (build_addon "$arch") & - BUILD_TASKS+=($!) -done - -# Wait until all build jobs are done -wait "${BUILD_TASKS[@]}" - -# Cleanup docker env -clean_crosscompile -stop_docker - -exit 0 diff --git a/docker/platformio-esp8266.ini b/docker/platformio-esp8266.ini deleted file mode 100644 index ed48f777cf..0000000000 --- a/docker/platformio-esp8266.ini +++ /dev/null @@ -1,7 +0,0 @@ -; This file allows the docker build file to install the required platformio -; platforms - -[env:espressif8266] -platform = espressif8266 -board = nodemcuv2 -framework = arduino diff --git a/esphomeyaml-beta/config.json b/esphomeyaml-beta/config.json index c0eeb19981..36afa8ab14 100644 --- a/esphomeyaml-beta/config.json +++ b/esphomeyaml-beta/config.json @@ -3,7 +3,7 @@ "version": "1.9.0b2", "slug": "esphomeyaml-beta", "description": "Beta version of esphomeyaml HassIO add-on.", - "url": "https://esphomelib.com/esphomeyaml/index.html", + "url": "https://beta.esphomelib.com/esphomeyaml/index.html", "startup": "application", "webui": "http://[HOST]:[PORT:6052]", "boot": "auto", diff --git a/esphomeyaml-edge/Dockerfile b/esphomeyaml-edge/Dockerfile deleted file mode 100644 index be1babac3b..0000000000 --- a/esphomeyaml-edge/Dockerfile +++ /dev/null @@ -1,59 +0,0 @@ -# Dockerfile for HassIO add-on -ARG BUILD_FROM=ubuntu:bionic -FROM ${BUILD_FROM} - -# Re-declare BUILD_FROM to fix weird docker issue -ARG BUILD_FROM - -# On amd64 and alike, using ubuntu as the base is better as building -# for the ESP32 only works with glibc (and ubuntu). However, on armhf -# the build toolchain frequently procudes segfaults under ubuntu. -# -> Use ubuntu for most architectures, except alpine for armhf -# -# * python and related required because this is a python project -# * git required for platformio library dependencies downloads -# * libc6-compat and openssh required on alpine for weird reasons -# * disable platformio telemetry on install -RUN /bin/bash -c "if [[ '$BUILD_FROM' = *\"ubuntu\"* ]]; then \ - apt-get update && apt-get install -y --no-install-recommends \ - python python-pip python-setuptools python-pil git && \ - rm -rf /var/lib/apt/lists/* /tmp/*; \ - else \ - apk add --no-cache \ - python2 \ - python2-dev \ - py2-pip \ - git \ - gcc \ - openssh \ - libc6-compat \ - jpeg-dev \ - zlib-dev \ - freetype-dev \ - lcms2-dev \ - openjpeg-dev \ - tiff-dev \ - libc-dev \ - linux-headers; \ - fi" && \ - pip install --no-cache-dir platformio && \ - platformio settings set enable_telemetry No - - -# Create fake project to make platformio install all depdencies. -# * Ignore build errors from platformio - empty project -# * On alpine, only install ESP8266 toolchain -COPY platformio.ini /pio/platformio.ini -RUN /bin/bash -c "if [[ '$BUILD_FROM' = *\"ubuntu\"* ]]; then \ - platformio run -e espressif32 -e espressif8266 -d /pio; exit 0; \ - else \ - echo \"\$(head -8 /pio/platformio.ini)\" >/pio/platformio.ini; \ - platformio run -e espressif8266 -d /pio; exit 0; \ - fi" - -# Install latest esphomeyaml from git -RUN pip install --no-cache-dir \ - git+git://github.com/OttoWinter/esphomeyaml.git && \ - pip install --no-cache-dir pillow tzlocal - -CMD ["esphomeyaml", "/config/esphomeyaml", "dashboard"] diff --git a/esphomeyaml-edge/build.json b/esphomeyaml-edge/build.json index a306cb0cc3..f60fa4f7fe 100644 --- a/esphomeyaml-edge/build.json +++ b/esphomeyaml-edge/build.json @@ -1,10 +1,10 @@ { "squash": false, "build_from": { - "aarch64": "arm64v8/ubuntu:bionic", - "amd64": "ubuntu:bionic", - "armhf": "homeassistant/armhf-base:latest", - "i386": "i386/ubuntu:bionic" + "aarch64": "homeassistant/aarch64-base-ubuntu:latest", + "amd64": "homeassistant/amd64-base-ubuntu:latest", + "armhf": "homeassistant/armhf-base-ubuntu:latest", + "i386": "homeassistant/i386-base-ubuntu:latest" }, "args": {} }