From 98bfb82787e4e78a8d7006a19c372feb6b204ea9 Mon Sep 17 00:00:00 2001 From: Eugene Zbiranik Date: Tue, 29 Jan 2019 15:11:11 +0300 Subject: [PATCH] Add Docker Hub image builds --- .travis.yml | 65 ++++++++++++++++++++++++++++++++++++++++------ Dockerfile | 24 +++++++++++++++++ Dockerfile.arm | 48 ---------------------------------- Dockerfile.linux | 48 ---------------------------------- Dockerfile.linux64 | 48 ---------------------------------- Dockerfile.travis | 15 +++++++++++ build_docker.sh | 65 ++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 161 insertions(+), 152 deletions(-) create mode 100644 Dockerfile delete mode 100644 Dockerfile.arm delete mode 100644 Dockerfile.linux delete mode 100644 Dockerfile.linux64 create mode 100644 Dockerfile.travis create mode 100644 build_docker.sh diff --git a/.travis.yml b/.travis.yml index a4993ffe..3d1380e0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,9 @@ language: go sudo: false + go: - 1.11.x - 1.x - -cache: - directories: - - $HOME/.cache/go-build - - $HOME/gopath/pkg/mod - - $HOME/Library/Caches/go-build - os: - linux - osx @@ -21,6 +15,12 @@ before_install: install: - npm --prefix client install +cache: + directories: + - $HOME/.cache/go-build + - $HOME/gopath/pkg/mod + - $HOME/Library/Caches/go-build + script: - node -v - npm -v @@ -31,4 +31,53 @@ script: - make after_success: - - bash <(curl -s https://codecov.io/bash) \ No newline at end of file + - bash <(curl -s https://codecov.io/bash) + +matrix: + include: + # Release build configuration + - name: release + go: + - 1.11.x + os: + - linux + + script: + - node -v + - npm -v + # Run tests just in case + - go test -race -v -bench=. ./... + # Prepare releases + - ./release.sh + - ls -l dist + + deploy: + provider: releases + api_key: $GITHUB_TOKEN + file: + - dist/AdGuardHome_* + on: + repo: AdguardTeam/AdGuardHome + tags: true + draft: true + file_glob: true + skip_cleanup: true + + - name: docker + if: type != pull_request AND (branch = master OR tag = true) + go: + - 1.11.x + os: + - linux + services: + - docker + before_script: + - nvm install node + - npm install -g npm + script: + - docker login -u="$DOCKER_USER" -p="$DOCKER_PASSWORD" + - ./build_docker.sh + after_script: + - docker images + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..f3c13952 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +FROM golang:alpine AS build + +RUN apk add --update git make build-base npm && \ + rm -rf /var/cache/apk/* + +WORKDIR /src/AdGuardHome +COPY . /src/AdGuardHome +RUN make + +FROM alpine:latest +LABEL maintainer="AdGuard Team " + +# Update CA certs +RUN apk --no-cache --update add ca-certificates && \ + rm -rf /var/cache/apk/* + +COPY --from=build /src/AdGuardHome/AdGuardHome /AdGuardHome + +EXPOSE 53 3000 + +VOLUME /data + +ENTRYPOINT ["/AdGuardHome"] +CMD ["-h", "0.0.0.0"] \ No newline at end of file diff --git a/Dockerfile.arm b/Dockerfile.arm deleted file mode 100644 index b34181e4..00000000 --- a/Dockerfile.arm +++ /dev/null @@ -1,48 +0,0 @@ -FROM easypi/alpine-arm:latest -LABEL maintainer="Erik Rogers " - -# AdGuard version -ARG ADGUARD_VERSION="0.92-hotfix2" -ENV ADGUARD_VERSION $ADGUARD_VERSION - -# AdGuard architecture and package info -ARG ADGUARD_ARCH="linux_arm" -ENV ADGUARD_ARCH ${ADGUARD_ARCH} -ENV ADGUARD_PACKAGE "AdGuardHome_v${ADGUARD_VERSION}_${ADGUARD_ARCH}" - -# AdGuard release info -ARG ADGUARD_ARCHIVE="${ADGUARD_PACKAGE}.tar.gz" -ENV ADGUARD_ARCHIVE ${ADGUARD_ARCHIVE} -ARG ADGUARD_RELEASE="https://github.com/AdguardTeam/AdGuardHome/releases/download/v${ADGUARD_VERSION}/${ADGUARD_ARCHIVE}" -ENV ADGUARD_RELEASE ${ADGUARD_RELEASE} - -# AdGuard directory -ARG ADGUARD_DIR="/data/adguard" -ENV ADGUARD_DIR ${ADGUARD_DIR} - -# Update CA certs and download AdGuard binaries -RUN apk --no-cache --update add ca-certificates \ - && cd /tmp \ - && wget ${ADGUARD_RELEASE} \ - && tar xvf ${ADGUARD_ARCHIVE} \ - && mkdir -p "${ADGUARD_DIR}" \ - && cp "AdGuardHome/AdGuardHome" "${ADGUARD_DIR}" \ - && chmod +x "${ADGUARD_DIR}/AdGuardHome" \ - && rm -rf "AdGuardHome" \ - && rm ${ADGUARD_ARCHIVE} - -# Expose DNS port 53 -EXPOSE 53 - -# Expose UI port 3000 -ARG ADGUARD_UI_HOST="0.0.0.0" -ENV ADGUARD_UI_HOST ${ADGUARD_UI_HOST} -ARG ADGUARD_UI_PORT="3000" -ENV ADGUARD_UI_PORT ${ADGUARD_UI_PORT} - -EXPOSE ${ADGUARD_UI_PORT} - -# Run AdGuardHome -WORKDIR ${ADGUARD_DIR} -VOLUME ${ADGUARD_DIR} -ENTRYPOINT ./AdGuardHome --host ${ADGUARD_UI_HOST} --port ${ADGUARD_UI_PORT} diff --git a/Dockerfile.linux b/Dockerfile.linux deleted file mode 100644 index 627a0857..00000000 --- a/Dockerfile.linux +++ /dev/null @@ -1,48 +0,0 @@ -FROM alpine:latest -LABEL maintainer="Erik Rogers " - -# AdGuard version -ARG ADGUARD_VERSION="0.92-hotfix2" -ENV ADGUARD_VERSION $ADGUARD_VERSION - -# AdGuard architecture and package info -ARG ADGUARD_ARCH="linux_386" -ENV ADGUARD_ARCH ${ADGUARD_ARCH} -ENV ADGUARD_PACKAGE "AdGuardHome_v${ADGUARD_VERSION}_${ADGUARD_ARCH}" - -# AdGuard release info -ARG ADGUARD_ARCHIVE="${ADGUARD_PACKAGE}.tar.gz" -ENV ADGUARD_ARCHIVE ${ADGUARD_ARCHIVE} -ARG ADGUARD_RELEASE="https://github.com/AdguardTeam/AdGuardHome/releases/download/v${ADGUARD_VERSION}/${ADGUARD_ARCHIVE}" -ENV ADGUARD_RELEASE ${ADGUARD_RELEASE} - -# AdGuard directory -ARG ADGUARD_DIR="/data/adguard" -ENV ADGUARD_DIR ${ADGUARD_DIR} - -# Update CA certs and download AdGuard binaries -RUN apk --no-cache --update add ca-certificates \ - && cd /tmp \ - && wget ${ADGUARD_RELEASE} \ - && tar xvf ${ADGUARD_ARCHIVE} \ - && mkdir -p "${ADGUARD_DIR}" \ - && cp "AdGuardHome/AdGuardHome" "${ADGUARD_DIR}" \ - && chmod +x "${ADGUARD_DIR}/AdGuardHome" \ - && rm -rf "AdGuardHome" \ - && rm ${ADGUARD_ARCHIVE} - -# Expose DNS port 53 -EXPOSE 53 - -# Expose UI port 3000 -ARG ADGUARD_UI_HOST="0.0.0.0" -ENV ADGUARD_UI_HOST ${ADGUARD_UI_HOST} -ARG ADGUARD_UI_PORT="3000" -ENV ADGUARD_UI_PORT ${ADGUARD_UI_PORT} - -EXPOSE ${ADGUARD_UI_PORT} - -# Run AdGuardHome -WORKDIR ${ADGUARD_DIR} -VOLUME ${ADGUARD_DIR} -ENTRYPOINT ./AdGuardHome --host ${ADGUARD_UI_HOST} --port ${ADGUARD_UI_PORT} diff --git a/Dockerfile.linux64 b/Dockerfile.linux64 deleted file mode 100644 index 14d9b462..00000000 --- a/Dockerfile.linux64 +++ /dev/null @@ -1,48 +0,0 @@ -FROM alpine:latest -LABEL maintainer="Erik Rogers " - -# AdGuard version -ARG ADGUARD_VERSION="0.92-hotfix2" -ENV ADGUARD_VERSION $ADGUARD_VERSION - -# AdGuard architecture and package info -ARG ADGUARD_ARCH="linux_amd64" -ENV ADGUARD_ARCH ${ADGUARD_ARCH} -ENV ADGUARD_PACKAGE "AdGuardHome_v${ADGUARD_VERSION}_${ADGUARD_ARCH}" - -# AdGuard release info -ARG ADGUARD_ARCHIVE="${ADGUARD_PACKAGE}.tar.gz" -ENV ADGUARD_ARCHIVE ${ADGUARD_ARCHIVE} -ARG ADGUARD_RELEASE="https://github.com/AdguardTeam/AdGuardHome/releases/download/v${ADGUARD_VERSION}/${ADGUARD_ARCHIVE}" -ENV ADGUARD_RELEASE ${ADGUARD_RELEASE} - -# AdGuard directory -ARG ADGUARD_DIR="/data/adguard" -ENV ADGUARD_DIR ${ADGUARD_DIR} - -# Update CA certs and download AdGuard binaries -RUN apk --no-cache --update add ca-certificates \ - && cd /tmp \ - && wget ${ADGUARD_RELEASE} \ - && tar xvf ${ADGUARD_ARCHIVE} \ - && mkdir -p "${ADGUARD_DIR}" \ - && cp "AdGuardHome/AdGuardHome" "${ADGUARD_DIR}" \ - && chmod +x "${ADGUARD_DIR}/AdGuardHome" \ - && rm -rf "AdGuardHome" \ - && rm ${ADGUARD_ARCHIVE} - -# Expose DNS port 53 -EXPOSE 53 - -# Expose UI port 3000 -ARG ADGUARD_UI_HOST="0.0.0.0" -ENV ADGUARD_UI_HOST ${ADGUARD_UI_HOST} -ARG ADGUARD_UI_PORT="3000" -ENV ADGUARD_UI_PORT ${ADGUARD_UI_PORT} - -EXPOSE ${ADGUARD_UI_PORT} - -# Run AdGuardHome -WORKDIR ${ADGUARD_DIR} -VOLUME ${ADGUARD_DIR} -ENTRYPOINT ./AdGuardHome --host ${ADGUARD_UI_HOST} --port ${ADGUARD_UI_PORT} diff --git a/Dockerfile.travis b/Dockerfile.travis new file mode 100644 index 00000000..31bb339c --- /dev/null +++ b/Dockerfile.travis @@ -0,0 +1,15 @@ +FROM alpine:latest +LABEL maintainer="AdGuard Team " + +# Update CA certs +RUN apk --no-cache --update add ca-certificates && \ + rm -rf /var/cache/apk/* + +COPY ./AdGuardHome /AdGuardHome + +EXPOSE 53 3000 + +VOLUME /data + +ENTRYPOINT ["/AdGuardHome"] +CMD ["-h", "0.0.0.0"] \ No newline at end of file diff --git a/build_docker.sh b/build_docker.sh new file mode 100644 index 00000000..684e1ea9 --- /dev/null +++ b/build_docker.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash + +set -eE +set -o pipefail +set -x + +DOCKERFILE="Dockerfile.travis" +if [ "${TRAVIS_BRANCH}" == "master" ] +then + VERSION="latest" +else + VERSION=`git describe --abbrev=4 --dirty --always --tags` +fi + +build_image() { + from="$(awk '$1 == toupper("FROM") { print $2 }' ${DOCKERFILE})" + + # See https://hub.docker.com/r/multiarch/alpine/tags + case "${GOARCH}" in + arm64) + alpineArch='arm64-edge' + imageArch='arm64' + ;; + arm) + alpineArch='armhf-edge' + imageArch='armhf' + ;; + 386) + alpineArch='i386-edge' + imageArch='i386' + ;; + amd64) + alpineArch='amd64-edge' + ;; + *) + alpineArch='amd64-edge' + ;; + esac + + if [ "${GOOS}" == "linux" ] && [ "${GOARCH}" == "amd64" ] + then + image="adguard/adguardhome:${VERSION}" + else + image="adguard/adguardhome:${imageArch}-${VERSION}" + fi + + make cleanfast; CGO_DISABLED=1 make + + docker pull "multiarch/alpine:${alpineArch}" + docker tag "multiarch/alpine:${alpineArch}" "$from" + docker build -t "${image}" -f ${DOCKERFILE} . + docker push ${image} + docker rmi "$from" +} + +# prepare qemu +docker run --rm --privileged multiarch/qemu-user-static:register --reset + +make clean + +# Prepare releases +GOOS=linux GOARCH=amd64 build_image +GOOS=linux GOARCH=386 build_image +GOOS=linux GOARCH=arm GOARM=6 build_image +GOOS=linux GOARCH=arm64 GOARM=6 build_image