diff --git a/.travis/docker.sh b/.travis/docker.sh index 94b2f8fa4..c2bc0c46a 100755 --- a/.travis/docker.sh +++ b/.travis/docker.sh @@ -9,13 +9,31 @@ build_and_push() { docker push $DOCKER_USERNAME/zigbee2mqtt:$1 } +push_hassio_addon() { + docker tag $DOCKER_USERNAME/zigbee2mqtt:$1 $DOCKER_USERNAME/zigbee2mqtt-hassioaddon-$2 + docker push $DOCKER_USERNAME/zigbee2mqtt-hassioaddon-$2 +} + # Only update docker images if on master branch and not pull request if [ "$TRAVIS_BRANCH" = "master" -a "$TRAVIS_PULL_REQUEST" = "false" ] then - echo "Updating docker images!" + echo "Updating docker images for master branch!" login - build_and_push latest docker/Dockerfile - build_and_push armv7hf docker/Dockerfile.armv7hf + build_and_push latest docker/Dockerfile.amd64 + build_and_push arm32v6 docker/Dockerfile.arm32v6 + build_and_push arm64v8 docker/Dockerfile.arm64v8 + + echo "Pushing hass.io addon images" + push_hassio_addon latest amd64 + push_hassio_addon arm32v6 armhf + push_hassio_addon arm64v8 aarch64 +elif [ "$TRAVIS_BRANCH" = "dev" -a "$TRAVIS_PULL_REQUEST" = "false" ] +then + echo "Updating docker images for dev branch!" + login + build_and_push latest-dev docker/Dockerfile.amd64 + build_and_push arm32v6-dev docker/Dockerfile.arm32v6 + build_and_push arm64v8-dev docker/Dockerfile.arm64v8 else - echo "Not updating docker images, triggered by pull request or not on master branch" + echo "Not updating docker images, triggered by pull request or not on master/dev branch" fi diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index 6625e8b87..000000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM node:8 - -# Copy files -ADD . /app -RUN cp /app/data/configuration.yaml /app -RUN cp /app/docker/start.sh /app -RUN chmod +x /app/start.sh - -WORKDIR /app -RUN npm install - -# Entrypoint -ENTRYPOINT ["./start.sh"] diff --git a/docker/Dockerfile.amd64 b/docker/Dockerfile.amd64 new file mode 100644 index 000000000..9c21dd636 --- /dev/null +++ b/docker/Dockerfile.amd64 @@ -0,0 +1,16 @@ +FROM alpine:3.7 + +# Copy files +ADD . /app +RUN cp /app/data/configuration.yaml /app +RUN cp /app/docker/run.sh /app +RUN chmod +x /app/run.sh +WORKDIR /app + +# Install dependencies +RUN apk add --update --no-cache make gcc g++ python linux-headers udev nodejs git && \ + npm install --unsafe-perm && \ + apk del make gcc g++ python linux-headers udev git + +# Entrypoint +ENTRYPOINT ["./run.sh"] diff --git a/docker/Dockerfile.arm32v6 b/docker/Dockerfile.arm32v6 new file mode 100644 index 000000000..d1dc6795c --- /dev/null +++ b/docker/Dockerfile.arm32v6 @@ -0,0 +1,18 @@ +FROM arm32v6/alpine:3.7 + +# Setup cross-build +ENV QEMU_EXECVE 1 +COPY docker/qemu-arm-static /usr/bin +WORKDIR /app + +# Copy files & install dependencies +ADD . /app +RUN [ "qemu-arm-static", "/bin/sh", "-c", \ + "cp /app/data/configuration.yaml /app && \ + cp /app/docker/run.sh /app && chmod +x /app/run.sh && \ + apk add --update --no-cache make gcc g++ python linux-headers udev nodejs git && \ + npm install --unsafe-perm && \ + apk del make gcc g++ python linux-headers udev git"] + +# Entrypoint +ENTRYPOINT ["./run.sh"] \ No newline at end of file diff --git a/docker/Dockerfile.arm64v8 b/docker/Dockerfile.arm64v8 new file mode 100644 index 000000000..cc9a81280 --- /dev/null +++ b/docker/Dockerfile.arm64v8 @@ -0,0 +1,18 @@ +FROM arm64v8/alpine:3.7 + +# Setup cross-build +ENV QEMU_EXECVE 1 +COPY docker/qemu-aarch64-static /usr/bin +WORKDIR /app + +# Copy files & install dependencies +ADD . /app +RUN [ "qemu-aarch64-static", "/bin/sh", "-c", \ + "cp /app/data/configuration.yaml /app && \ + cp /app/docker/run.sh /app && chmod +x /app/run.sh && \ + apk add --update --no-cache make gcc g++ python linux-headers udev nodejs git && \ + npm install --unsafe-perm && \ + apk del make gcc g++ python linux-headers udev git"] + +# Entrypoint +ENTRYPOINT ["./run.sh"] \ No newline at end of file diff --git a/docker/Dockerfile.armv7hf b/docker/Dockerfile.armv7hf deleted file mode 100644 index 2c1e25dd8..000000000 --- a/docker/Dockerfile.armv7hf +++ /dev/null @@ -1,24 +0,0 @@ -FROM resin/armv7hf-debian - -RUN [ "cross-build-start" ] - -# Install nodejs and git -RUN curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - -RUN apt-get update && apt-get install -y git nodejs make g++ && rm -rf /var/lib/apt/lists/* - -# Copy files -ADD . /app -RUN cp /app/data/configuration.yaml /app -RUN cp /app/docker/start.sh /app -RUN chmod +x /app/start.sh - -WORKDIR /app -RUN npm install - -# Cleanup -RUN apt-get purge g++ make && apt-get autoremove && rm -rf /var/lib/apt/lists/* - -RUN [ "cross-build-end" ] - -# Entrypoint -ENTRYPOINT ["./start.sh"] diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 000000000..32260e38e --- /dev/null +++ b/docker/README.md @@ -0,0 +1 @@ +qemu-aarch64-static and qemu-arm-static are taken from https://github.com/resin-io/qemu/releases/tag/v2.9.0%2Bresin1 \ No newline at end of file diff --git a/docker/qemu-aarch64-static b/docker/qemu-aarch64-static new file mode 100755 index 000000000..f44233bc8 Binary files /dev/null and b/docker/qemu-aarch64-static differ diff --git a/docker/qemu-arm-static b/docker/qemu-arm-static new file mode 100755 index 000000000..bf5897b14 Binary files /dev/null and b/docker/qemu-arm-static differ diff --git a/docker/run.sh b/docker/run.sh new file mode 100644 index 000000000..659a3e699 --- /dev/null +++ b/docker/run.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +if [ ! -f /app/data/configuration.yaml ]; then + echo "Creating configuration file..." + cp /app/configuration.yaml /app/data/configuration.yaml +fi + +npm start diff --git a/docker/start.sh b/docker/start.sh deleted file mode 100644 index c2fcb23c8..000000000 --- a/docker/start.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -cp -n /app/configuration.yaml /app/data/configuration.yaml -npm start \ No newline at end of file