From ff23d7b6d73b2a138774ca0919692246f62c0177 Mon Sep 17 00:00:00 2001 From: Andrey Meshkov Date: Thu, 9 Jul 2020 11:53:41 +0300 Subject: [PATCH] CI Revamp by @crazy-max (#1873) * CI revamped and other enhancements GoReleaser for multi-arch binaries Switch to GitHub Actions (more versatile) with 2 workflows Docker multi-manifest image with buildx Fix eslint run script Go sum fixer Use tools.go paradigm for external dependencies (packr) Use go generate for packr * Update workflows * Add Slack notification * Rebase * Enhanced Dockerfile * Fix go generate * Fix Golangci lint * Fix npm cache with v2 cache action * Fix Dockerfile * Trigger notif * Issue with packr * s390x platform not supported by packr * Enhance layers * Fix go modules Co-authored-by: CrazyMax --- .dockerignore | 40 +++++ .github/workflows/build.yml | 259 ++++++++++++++++++++++++++++ .github/workflows/gosum.yml | 44 +++++ .gitignore | 4 +- .goreleaser.yml | 74 ++++++++ .travis.yml | 121 ------------- Dockerfile | 73 ++++++++ Dockerfile.travis | 23 --- Makefile | 43 ----- build_docker.sh | 74 -------- build_release.sh | 73 -------- build_snap.sh | 292 -------------------------------- ci.sh | 36 ---- go.sum | 21 +-- main.go | 3 + packaging/docker/Dockerfile | 32 ---- packaging/docker/Dockerfile.hub | 23 --- packaging/docker/README.md | 6 - packaging/snap/README.md | 5 - packaging/snap/snapcraft.yaml | 32 ---- snapcraft.yaml | 41 ----- tools.go | 8 + 22 files changed, 511 insertions(+), 816 deletions(-) create mode 100644 .dockerignore create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/gosum.yml create mode 100644 .goreleaser.yml delete mode 100644 .travis.yml create mode 100644 Dockerfile delete mode 100644 Dockerfile.travis delete mode 100644 Makefile delete mode 100755 build_docker.sh delete mode 100755 build_release.sh delete mode 100755 build_snap.sh delete mode 100755 ci.sh delete mode 100644 packaging/docker/Dockerfile delete mode 100644 packaging/docker/Dockerfile.hub delete mode 100644 packaging/docker/README.md delete mode 100644 packaging/snap/README.md delete mode 100644 packaging/snap/snapcraft.yaml delete mode 100644 snapcraft.yaml create mode 100644 tools.go diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..c200f675 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,40 @@ +.DS_Store +/.git +/.github +/.vscode +.idea +/AdGuardHome +/AdGuardHome.exe +/AdGuardHome.yaml +/AdGuardHome.log +/data +/build +/dist +/client/node_modules +/.gitattributes +/.gitignore +/.goreleaser.yml +/changelog.config.js +/coverage.txt +/Dockerfile +/LICENSE.txt +/Makefile +/querylog.json +/querylog.json.1 +/*.md + +# Test output +dnsfilter/tests/top-1m.csv +dnsfilter/tests/dnsfilter.TestLotsOfRules*.pprof + +# Snapcraft build temporary files +*.snap +launchpad_credentials +snapcraft_login +snapcraft.yaml.bak + +# IntelliJ IDEA project files +*.iml + +# Packr +*-packr.go diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..ae4eae46 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,259 @@ +name: build + +on: + push: + branches: + - master + tags: + - v* + pull_request: + +jobs: + + test: + runs-on: ${{ matrix.os }} + env: + GO111MODULE: on + GOPROXY: https://goproxy.io + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - macOS-latest + - windows-latest + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.14 + - + name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: 13 + - + name: Set up Go modules cache + uses: actions/cache@v2 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + - + name: Get npm cache directory + id: npm-cache + run: | + echo "::set-output name=dir::$(npm config get cache)" + - + name: Set up npm cache + uses: actions/cache@v2 + with: + path: ${{ steps.npm-cache.outputs.dir }} + key: ${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - + name: Run node build-prod + shell: bash + run: | + npm --prefix client ci + npm --prefix client run build-prod + - + name: Download modules and generate + shell: bash + run: | + go mod download + go generate ./... + - + name: Golangci-lint + if: matrix.os != 'windows-latest' + shell: bash + run: | + curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b $(go env GOPATH)/bin v1.23.8 + golangci-lint --version + golangci-lint run + - + name: Go test + run: | + go test -race -v -bench=. -coverprofile=coverage.txt -covermode=atomic ./... + - + name: Upload coverage + uses: codecov/codecov-action@v1 + if: success() + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage.txt + + app: + runs-on: ubuntu-latest + needs: test + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Prepare + id: prepare + run: | + if [[ $GITHUB_REF == refs/tags/* ]]; then + echo ::set-output name=tag_name::${GITHUB_REF#refs/tags/} + echo ::set-output name=channel::release + else + echo ::set-output name=channel::none + fi + - + name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.14 + - + name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: 13 + - + name: Set up Go modules cache + uses: actions/cache@v2 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + - + name: Get npm cache directory + id: npm-cache + run: | + echo "::set-output name=dir::$(npm config get cache)" + - + name: Set up node_modules cache + uses: actions/cache@v2 + with: + path: ${{ steps.npm-cache.outputs.dir }} + key: ${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - + name: Set up Snapcraft + run: | + sudo apt-get -yq --no-install-suggests --no-install-recommends install snapcraft + - + name: Run node build-prod + run: | + npm --prefix client ci + npm --prefix client run build-prod + - + name: Snapcraft Login + if: success() && startsWith(github.ref, 'refs/tags/v') + env: + SNAPCRAFT_LOGIN: ${{ secrets.SNAPCRAFT_LOGIN }} + run: | + snapcraft login --with <(echo "$SNAPCRAFT_LOGIN") + - + name: GoReleaser + uses: goreleaser/goreleaser-action@v2 + with: + version: latest + args: release --parallelism 2 + env: + CHANNEL: ${{ steps.prepare.outputs.channel }} + - + name: GitHub Release + uses: softprops/action-gh-release@v1 + if: success() && startsWith(github.ref, 'refs/tags/v') + with: + draft: true + files: | + dist/checksums.txt + dist/*.tar.gz + dist/*.zip + name: AdGuard Home ${{ steps.prepare.outputs.tag_name }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + docker: + runs-on: ubuntu-latest + needs: test + steps: + - + name: Prepare + id: prepare + run: | + DOCKER_IMAGE=adguard/adguardhome + DOCKER_PLATFORMS=linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/386,linux/ppc64le + VERSION=edge + CHANNEL=none + + if [[ $GITHUB_REF == refs/tags/* ]]; then + VERSION=${GITHUB_REF#refs/tags/v} + CHANNEL=release + fi + TAGS="--tag ${DOCKER_IMAGE}:${VERSION}" + if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then + TAGS="$TAGS --tag ${DOCKER_IMAGE}:latest" + fi + + echo ::set-output name=docker_image::${DOCKER_IMAGE} + echo ::set-output name=version::${VERSION} + echo ::set-output name=channel::${CHANNEL} + echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} \ + --build-arg VERSION=${VERSION} \ + --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \ + --build-arg VCS_REF=${GITHUB_SHA::8} \ + ${TAGS} \ + --file Dockerfile . + - + name: Set up Docker Buildx + uses: crazy-max/ghaction-docker-buildx@v1 + - + name: Checkout + uses: actions/checkout@v2 + - + name: Docker Buildx (build) + run: | + docker buildx build --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args }} + - + name: Docker Login + if: success() && startsWith(github.ref, 'refs/tags/v') + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + run: | + echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin + - + name: Docker Buildx (push) + if: success() && startsWith(github.ref, 'refs/tags/v') + run: | + docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }} + - + name: Docker Check Manifest + if: always() && startsWith(github.ref, 'refs/tags/v') + run: | + docker run --rm mplatform/mquery ${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }} + - + name: Clear + if: always() && startsWith(github.ref, 'refs/tags/v') + run: | + rm -f ${HOME}/.docker/config.json + + notify: + needs: [app, docker] + if: always() + runs-on: ubuntu-latest + steps: + - + name: Conclusion + uses: technote-space/workflow-conclusion-action@v1 + - + name: Send Slack notif + uses: 8398a7/action-slack@v3 + with: + status: ${{ env.WORKFLOW_CONCLUSION }} + fields: repo,message,commit,author + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} diff --git a/.github/workflows/gosum.yml b/.github/workflows/gosum.yml new file mode 100644 index 00000000..77c23abd --- /dev/null +++ b/.github/workflows/gosum.yml @@ -0,0 +1,44 @@ +name: gosum + +on: + push: + branches: + - 'master' + paths: + - '.github/workflows/gosum.yml' + - 'go.mod' + - 'go.sum' + +jobs: + fix: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.14 + - + name: Tidy + run: | + rm -f go.sum + go mod tidy + - + name: Set up Git + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.name GitHub + git config user.email noreply@github.com + git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git + - + name: Commit and push changes + run: | + git add . + if output=$(git status --porcelain) && [ ! -z "$output" ]; then + git commit --author "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>" --message "Fix go modules" + git push + fi diff --git a/.gitignore b/.gitignore index d47eef0c..e7f55736 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,6 @@ /client/node_modules/ /querylog.json /querylog.json.1 -/a_main-packr.go coverage.txt # Test output @@ -26,3 +25,6 @@ snapcraft.yaml.bak # IntelliJ IDEA project files *.iml + +# Packr +*-packr.go diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 00000000..da879296 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,74 @@ +env: + - GO111MODULE=on + - GOPROXY=https://goproxy.io + +before: + hooks: + - go mod download + - go generate ./... + +builds: + - + main: ./main.go + ldflags: + - -s -w -X main.version={{.Version}} -X main.channel={{.Env.CHANNEL}} -X main.goarm={{.Env.GOARM}} + env: + - CGO_ENABLED=0 + goos: + - darwin + - linux + - freebsd + - windows + goarch: + - 386 + - amd64 + - arm + - arm64 + goarm: + - 6 + - 7 + ignore: + - goos: freebsd + goarch: arm + - goos: freebsd + goarch: arm64 + +archives: + - + replacements: + 386: i386 + amd64: x86_64 + format_overrides: + - goos: windows + format: zip + files: + - LICENSE.txt + - README.md + +snapcrafts: + - + name: adguard-home + base: core18 + name_template: '{{ .ProjectName }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}' + summary: Network-wide ads & trackers blocking DNS server + description: | + AdGuard Home is a network-wide software for blocking ads & tracking. After + you set it up, it'll cover ALL your home devices, and you don't need any + client-side software for that. + + It operates as a DNS server that re-routes tracking domains to a "black hole," + thus preventing your devices from connecting to those servers. It's based + on software we use for our public AdGuard DNS servers -- both share a lot + of common code. + grade: stable + confinement: strict + publish: true + license: GPL-3.0 + apps: + adguard-home: + args: -w ${SNAP_DATA} --no-check-update + plugs: [ network-bind ] + daemon: simple + +checksum: + name_template: 'checksums.txt' diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index b2e5a2dd..00000000 --- a/.travis.yml +++ /dev/null @@ -1,121 +0,0 @@ -if: repo = AdguardTeam/AdGuardHome -language: go -sudo: false - -go: - - 1.14.x -os: - - linux - - osx - - windows - -before_install: - - |- - case $TRAVIS_OS_NAME in - linux | osx) - nvm install node - npm install -g npm - curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b $(go env GOPATH)/bin v1.23.8 - ;; - windows) - # Using NVS for managing Node.js versions on Windows - NVS_HOME="C:\ProgramData\nvs" - git clone --single-branch https://github.com/jasongin/nvs $NVS_HOME - source $NVS_HOME/nvs.sh - nvs add latest - nvs use latest - ;; - esac - -install: - - |- - case $TRAVIS_OS_NAME in - linux | osx) - node --version - npm --version - npm --prefix client ci - ;; - windows) - node --version - npm --version - nvs --version - npm --prefix client ci - ;; - esac - -cache: - directories: - - $HOME/.cache/go-build - - $HOME/gopath/pkg/mod - - $HOME/Library/Caches/go-build - -script: - - |- - case $TRAVIS_OS_NAME in - linux | osx) - /bin/bash ci.sh - ;; - windows) - npm --prefix client run build-prod - go test -race -v -bench=. -coverprofile=coverage.txt -covermode=atomic ./... - ;; - esac - -after_success: - - |- - case $TRAVIS_OS_NAME in - linux) - bash <(curl -s https://codecov.io/bash) - ;; - esac - -notifications: - slack: performix:yXTihlSzsLFSZiqbXMNzvTSX - -matrix: - include: - # Release build configuration - - if: repo = AdguardTeam/AdGuardHome - - name: release - go: - - 1.14.x - os: - - linux - - script: - - node -v - - npm -v - # Prepare releases - - ./build_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 - - # Docker build configuration - - if: repo = AdguardTeam/AdGuardHome - - name: docker - if: type != pull_request AND (branch = master OR tag IS present) AND repo = AdguardTeam/AdGuardHome - go: - - 1.14.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 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..dfed8baf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,73 @@ +FROM --platform=${BUILDPLATFORM:-linux/amd64} tonistiigi/xx:golang AS xgo +FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.14-alpine as builder + +ARG BUILD_DATE +ARG VCS_REF +ARG VERSION=dev +ARG CHANNEL=none + +ENV CGO_ENABLED 0 +ENV GO111MODULE on +ENV GOPROXY https://goproxy.io + +COPY --from=xgo / / +RUN go env + +RUN apk --update --no-cache add \ + build-base \ + gcc \ + git \ + npm \ + && rm -rf /tmp/* /var/cache/apk/* + +WORKDIR /app +COPY . ./ + +RUN npm --prefix client ci && npm --prefix client run build-prod +RUN go mod download +RUN go generate ./... + +ARG TARGETPLATFORM +ARG TARGETOS +ARG TARGETARCH +RUN go build -ldflags="-s -w -X main.version=${VERSION} -X main.channel=${CHANNEL} -X main.goarm=${GOARM}" + +FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine:latest + +ARG BUILD_DATE +ARG VCS_REF +ARG VERSION +ARG CHANNEL + +LABEL maintainer="AdGuard Team " \ + org.opencontainers.image.created=$BUILD_DATE \ + org.opencontainers.image.url="https://adguard.com/adguard-home.html" \ + org.opencontainers.image.source="https://github.com/AdguardTeam/AdGuardHome" \ + org.opencontainers.image.version=$VERSION \ + org.opencontainers.image.revision=$VCS_REF \ + org.opencontainers.image.vendor="AdGuard" \ + org.opencontainers.image.title="AdGuard Home" \ + org.opencontainers.image.description="Network-wide ads & trackers blocking DNS server" \ + org.opencontainers.image.licenses="GPL-3.0" + +RUN apk --update --no-cache add \ + ca-certificates \ + libcap \ + libressl \ + tzdata \ + && rm -rf /tmp/* /var/cache/apk/* + +COPY --from=builder --chown=nobody:nogroup /app/AdGuardHome /opt/adguardhome/AdGuardHome +COPY --from=builder --chown=nobody:nogroup /usr/local/go/lib/time/zoneinfo.zip /usr/local/go/lib/time/zoneinfo.zip + +RUN /opt/adguardhome/AdGuardHome --version \ + && mkdir -p /opt/adguardhome/conf /opt/adguardhome/work \ + && chown -R nobody: /opt/adguardhome \ + && setcap 'cap_net_bind_service=+eip' /opt/adguardhome/AdGuardHome + +EXPOSE 53/tcp 53/udp 67/udp 68/udp 80/tcp 443/tcp 853/tcp 3000/tcp +WORKDIR /opt/adguardhome/work +VOLUME ["/opt/adguardhome/conf", "/opt/adguardhome/work"] + +ENTRYPOINT ["/opt/adguardhome/AdGuardHome"] +CMD ["-h", "0.0.0.0", "-c", "/opt/adguardhome/conf/AdGuardHome.yaml", "-w", "/opt/adguardhome/work", "--no-check-update"] diff --git a/Dockerfile.travis b/Dockerfile.travis deleted file mode 100644 index 0e11574e..00000000 --- a/Dockerfile.travis +++ /dev/null @@ -1,23 +0,0 @@ -FROM alpine:latest -LABEL maintainer="AdGuard Team " - -# Update CA certs -RUN apk --no-cache --update add ca-certificates libcap && \ - rm -rf /var/cache/apk/* && \ - mkdir -p /opt/adguardhome/conf /opt/adguardhome/work && \ - chown -R nobody: /opt/adguardhome - -COPY --chown=nobody:nogroup ./AdGuardHome /opt/adguardhome/AdGuardHome - -RUN setcap 'cap_net_bind_service=+eip' /opt/adguardhome/AdGuardHome - -EXPOSE 53/tcp 53/udp 67/udp 68/udp 80/tcp 443/tcp 853/tcp 3000/tcp - -VOLUME ["/opt/adguardhome/conf", "/opt/adguardhome/work"] - -WORKDIR /opt/adguardhome/work - -#USER nobody - -ENTRYPOINT ["/opt/adguardhome/AdGuardHome"] -CMD ["-h", "0.0.0.0", "-c", "/opt/adguardhome/conf/AdGuardHome.yaml", "-w", "/opt/adguardhome/work", "--no-check-update"] diff --git a/Makefile b/Makefile deleted file mode 100644 index 65cea96f..00000000 --- a/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -GIT_VERSION := $(shell git describe --abbrev=4 --dirty --always --tags) -NATIVE_GOOS = $(shell unset GOOS; go env GOOS) -NATIVE_GOARCH = $(shell unset GOARCH; go env GOARCH) -GOPATH := $(shell go env GOPATH) -JSFILES = $(shell find client -path client/node_modules -prune -o -type f -name '*.js') -STATIC = build/static/index.html -CHANNEL ?= release -DOCKER_IMAGE_DEV_NAME=adguardhome-dev -DOCKERFILE=packaging/docker/Dockerfile -DOCKERFILE_HUB=packaging/docker/Dockerfile.travis - -TARGET=AdGuardHome - -.PHONY: all build clean -all: build - -build: $(TARGET) - -client/node_modules: client/package.json client/package-lock.json - npm --prefix client ci - touch client/node_modules - -$(STATIC): $(JSFILES) client/node_modules - npm --prefix client run build-prod - -$(TARGET): $(STATIC) *.go home/*.go dhcpd/*.go dnsfilter/*.go dnsforward/*.go - GOOS=$(NATIVE_GOOS) GOARCH=$(NATIVE_GOARCH) GO111MODULE=off go get -v github.com/gobuffalo/packr/... - PATH=$(GOPATH)/bin:$(PATH) packr -z - CGO_ENABLED=0 go build -ldflags="-s -w -X main.version=$(GIT_VERSION) -X main.channel=$(CHANNEL) -X main.goarm=$(GOARM)" -asmflags="-trimpath=$(PWD)" -gcflags="-trimpath=$(PWD)" - PATH=$(GOPATH)/bin:$(PATH) packr clean - -docker: - docker build -t "$(DOCKER_IMAGE_DEV_NAME)" -f "$(DOCKERFILE)" . - @echo Now you can run the docker image: - @echo docker run --name "$(DOCKER_IMAGE_DEV_NAME)" -p 53:53/tcp -p 53:53/udp -p 80:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp $(DOCKER_IMAGE_DEV_NAME) - -clean: - $(MAKE) cleanfast - rm -rf build - rm -rf client/node_modules - -cleanfast: - rm -f $(TARGET) diff --git a/build_docker.sh b/build_docker.sh deleted file mode 100755 index 81173574..00000000 --- a/build_docker.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env bash - -set -eE -set -o pipefail -set -x - -DOCKERFILE="packaging/docker/Dockerfile.hub" -IMAGE_NAME="adguard/adguardhome" - -if [[ "${TRAVIS_BRANCH}" == "master" ]] -then - VERSION="edge" -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="${IMAGE_NAME}:${VERSION}" - else - image="${IMAGE_NAME}:${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} - if [[ "${VERSION}" != "edge" ]] - then - latest=${image/$VERSION/latest} - docker tag "${image}" "${latest}" - docker push ${latest} - docker rmi ${latest} - fi - 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 diff --git a/build_release.sh b/build_release.sh deleted file mode 100755 index 4f2a4c42..00000000 --- a/build_release.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env bash - -set -eE -set -o pipefail -set -x - -channel=${1:-release} -baseUrl="https://static.adguard.com/adguardhome/$channel" -dst=dist -version=`git describe --abbrev=4 --dirty --always --tags` - -f() { - make cleanfast; CGO_DISABLED=1 make - if [[ $GOOS == darwin ]]; then - zip $dst/AdGuardHome_MacOS.zip AdGuardHome README.md LICENSE.txt - elif [[ $GOOS == windows ]]; then - zip $dst/AdGuardHome_Windows_"$GOARCH".zip AdGuardHome.exe README.md LICENSE.txt - else - rm -rf dist/AdguardHome - mkdir -p dist/AdGuardHome - cp -pv {AdGuardHome,LICENSE.txt,README.md} dist/AdGuardHome/ - pushd dist - if [[ $GOARCH == arm ]] && [[ $GOARM != 6 ]]; then - tar zcvf AdGuardHome_"$GOOS"_armv"$GOARM".tar.gz AdGuardHome/ - else - tar zcvf AdGuardHome_"$GOOS"_"$GOARCH".tar.gz AdGuardHome/ - fi - popd - rm -rf dist/AdguardHome - fi -} - -# Clean dist and build -make clean -rm -rf $dst - -# Prepare the dist folder -mkdir -p $dst - -# Prepare releases -CHANNEL=$channel GOOS=darwin GOARCH=amd64 f -CHANNEL=$channel GOOS=linux GOARCH=amd64 f -CHANNEL=$channel GOOS=linux GOARCH=386 GO386=387 f -CHANNEL=$channel GOOS=linux GOARCH=arm GOARM=5 f -CHANNEL=$channel GOOS=linux GOARCH=arm GOARM=6 f -CHANNEL=$channel GOOS=linux GOARCH=arm64 GOARM=6 f -CHANNEL=$channel GOOS=windows GOARCH=amd64 f -CHANNEL=$channel GOOS=windows GOARCH=386 f -CHANNEL=$channel GOOS=linux GOARCH=mipsle GOMIPS=softfloat f -CHANNEL=$channel GOOS=linux GOARCH=mips GOMIPS=softfloat f -CHANNEL=$channel GOOS=freebsd GOARCH=amd64 f - -# Variables for CI -echo "version=$version" > $dst/version.txt - -# Prepare the version.json file -echo "{" >> $dst/version.json -echo " \"version\": \"$version\"," >> $dst/version.json -echo " \"announcement\": \"AdGuard Home $version is now available!\"," >> $dst/version.json -echo " \"announcement_url\": \"https://github.com/AdguardTeam/AdGuardHome/releases\"," >> $dst/version.json -echo " \"download_windows_amd64\": \"$baseUrl/AdGuardHome_Windows_amd64.zip\"," >> $dst/version.json -echo " \"download_windows_386\": \"$baseUrl/AdGuardHome_Windows_386.zip\"," >> $dst/version.json -echo " \"download_darwin_amd64\": \"$baseUrl/AdGuardHome_MacOS.zip\"," >> $dst/version.json -echo " \"download_linux_amd64\": \"$baseUrl/AdGuardHome_linux_amd64.tar.gz\"," >> $dst/version.json -echo " \"download_linux_386\": \"$baseUrl/AdGuardHome_linux_386.tar.gz\"," >> $dst/version.json -echo " \"download_linux_arm\": \"$baseUrl/AdGuardHome_linux_arm.tar.gz\"," >> $dst/version.json -echo " \"download_linux_armv5\": \"$baseUrl/AdGuardHome_linux_armv5.tar.gz\"," >> $dst/version.json -echo " \"download_linux_arm64\": \"$baseUrl/AdGuardHome_linux_arm64.tar.gz\"," >> $dst/version.json -echo " \"download_linux_mips\": \"$baseUrl/AdGuardHome_linux_mips.tar.gz\"," >> $dst/version.json -echo " \"download_linux_mipsle\": \"$baseUrl/AdGuardHome_linux_mipsle.tar.gz\"," >> $dst/version.json -echo " \"download_freebsd_amd64\": \"$baseUrl/AdGuardHome_freebsd_amd64.tar.gz\"," >> $dst/version.json -echo " \"selfupdate_min_version\": \"v0.0\"" >> $dst/version.json -echo "}" >> $dst/version.json diff --git a/build_snap.sh b/build_snap.sh deleted file mode 100755 index 13dae65f..00000000 --- a/build_snap.sh +++ /dev/null @@ -1,292 +0,0 @@ -#!/usr/bin/env bash - -set -eE -set -o pipefail -set -x - -BUILDER_IMAGE="adguard/snapcraft:1.0" -SNAPCRAFT_TMPL="packaging/snap/snapcraft.yaml" -SNAP_NAME="adguard-home" -LAUNCHPAD_CREDENTIALS_DIR=".local/share/snapcraft/provider/launchpad" - -if [[ -z ${VERSION} ]]; then - VERSION=$(git describe --abbrev=4 --dirty --always --tags) - echo "VERSION env variable is not set, getting it from git: ${VERSION}" -fi - -# If bash is interactive, set `-it` parameter for docker run -INTERACTIVE="" -if [ -t 0 ]; then - INTERACTIVE="-it" -fi - -function usage() { - cat <launchpad_credentials - - # Snapcraft login data - # It can be exported using snapcraft export-login command - echo "[login.ubuntu.com] - macaroon = ${SNAPCRAFT_MACAROON} - unbound_discharge = ${SNAPCRAFT_UBUNTU_DISCHARGE} - email = ${SNAPCRAFT_EMAIL}" >snapcraft_login - - # Prepare the snap configuration - cp ${SNAPCRAFT_TMPL} ./snapcraft.yaml - sed -i.bak 's/dev_version/'"${VERSION}"'/g' ./snapcraft.yaml - rm -f snapcraft.yaml.bak -} - -build_snap() { - # prepare credentials - prepare - - # copy them to the directory where snapcraft will be able to read them - mkdir -p ~/${LAUNCHPAD_CREDENTIALS_DIR} - cp -f snapcraft_login ~/${LAUNCHPAD_CREDENTIALS_DIR}/credentials - chmod 600 ~/${LAUNCHPAD_CREDENTIALS_DIR}/credentials - - # run the build - snapcraft remote-build --build-on=${ARCH} --launchpad-accept-public-upload - - # remove the credentials - we don't need them anymore - rm -rf ~/${LAUNCHPAD_CREDENTIALS_DIR} - - # remove version from the file name - rename_snap_file - - # cleanup credentials - cleanup -} - -build_snap_docker() { - # prepare credentials - prepare - - docker run ${INTERACTIVE} --rm \ - -v $(pwd):/build \ - -v $(pwd)/launchpad_credentials:/root/${LAUNCHPAD_CREDENTIALS_DIR}/credentials:ro \ - ${BUILDER_IMAGE} \ - snapcraft remote-build --build-on=${ARCH} --launchpad-accept-public-upload - - # remove version from the file name - rename_snap_file - - # cleanup credentials - cleanup -} - -rename_snap_file() { - # In order to make working with snaps easier later on - # we remove version from the file name - - # Check that the snap file exists - snapFile="${SNAP_NAME}_${VERSION}_${ARCH}.snap" - if [ ! -f ${snapFile} ]; then - echo "Snap file ${snapFile} not found!" - exit 1 - fi - - mv -f ${snapFile} "${SNAP_NAME}_${ARCH}.snap" -} - -publish_snap() { - # prepare credentials - prepare - - # Check that the snap file exists - snapFile="${SNAP_NAME}_${ARCH}.snap" - if [ ! -f ${snapFile} ]; then - echo "Snap file ${snapFile} not found!" - exit 1 - fi - - # Login if necessary - snapcraft login --with=snapcraft_login - - # Push to the channel - snapcraft push --release=${CHANNEL} ${snapFile} - - # cleanup credentials - cleanup -} - -publish_snap_docker() { - # prepare credentials - prepare - - # Check that the snap file exists - snapFile="${SNAP_NAME}_${ARCH}.snap" - if [ ! -f ${snapFile} ]; then - echo "Snap file ${snapFile} not found!" - exit 1 - fi - - # Login and publish the snap - docker run ${INTERACTIVE} --rm \ - -v $(pwd):/build \ - ${BUILDER_IMAGE} \ - sh -c "snapcraft login --with=/build/snapcraft_login && snapcraft push --release=${CHANNEL} /build/${snapFile}" - - # cleanup credentials - cleanup -} - -####################################### -# main functions -####################################### - -build() { - if [[ -n "$1" ]]; then - echo "ARCH is set to $1" - ARCH=$1 build_snap - else - ARCH=i386 build_snap - ARCH=arm64 build_snap - ARCH=armhf build_snap - ARCH=amd64 build_snap - fi -} - -build_docker() { - if [[ -n "$1" ]]; then - echo "ARCH is set to $1" - ARCH=$1 build_snap_docker - else - ARCH=i386 build_snap_docker - ARCH=arm64 build_snap_docker - ARCH=armhf build_snap_docker - ARCH=amd64 build_snap_docker - fi -} - -publish_docker() { - if [[ -z $1 ]]; then - echo "No channel specified" - exit 1 - fi - CHANNEL="${1}" - if [ "$CHANNEL" != "stable" ] && [ "$CHANNEL" != "beta" ]; then - echo "$CHANNEL is an invalid value for the update channel!" - exit 1 - fi - - if [[ -n "$2" ]]; then - echo "ARCH is set to $2" - ARCH=$2 publish_snap_docker - else - ARCH=i386 publish_snap_docker - ARCH=arm64 publish_snap_docker - ARCH=armhf publish_snap_docker - ARCH=amd64 publish_snap_docker - fi -} - -publish() { - if [[ -z $1 ]]; then - echo "No channel specified" - exit 1 - fi - CHANNEL="${1}" - if [ "$CHANNEL" != "stable" ] && [ "$CHANNEL" != "beta" ]; then - echo "$CHANNEL is an invalid value for the update channel!" - exit 1 - fi - - if [[ -n "$2" ]]; then - echo "ARCH is set to $2" - ARCH=$2 publish_snap - else - ARCH=i386 publish_snap - ARCH=arm64 publish_snap - ARCH=armhf publish_snap - ARCH=amd64 publish_snap - fi -} - -cleanup() { - rm -f launchpad_credentials - rm -f snapcraft.yaml - rm -f snapcraft.yaml.bak - rm -f snapcraft_login - git checkout snapcraft.yaml -} - -####################################### -# main -####################################### -if [[ -z $1 || $1 == "--help" || $1 == "-h" ]]; then - usage -fi - -case "$1" in -"build-docker") build_docker $2 ;; -"build") build $2 ;; -"publish-docker-beta") publish_docker beta $2 ;; -"publish-docker-release") publish_docker stable $2 ;; -"publish-beta") publish beta $2 ;; -"publish-release") publish stable $2 ;; -"prepare") prepare ;; -"cleanup") cleanup ;; -*) usage ;; -esac - -exit 0 diff --git a/ci.sh b/ci.sh deleted file mode 100755 index 544f0109..00000000 --- a/ci.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -set -e -set -x - -echo "Starting AdGuard Home CI script" - -# Print the current directory contents -ls -la - -# Check versions and current directory -node -v -npm -v -go version -golangci-lint --version - -# Run linter -golangci-lint run - -# Make -make clean -make build/static/index.html -make - -# Run tests -go test -race -v -bench=. -coverprofile=coverage.txt -covermode=atomic ./... - -# if [[ -z "$(git status --porcelain)" ]]; then -# # Working directory clean -# echo "Git status is clean" -# else -# echo "Git status is not clean and contains uncommited changes" -# echo "Please make sure there are no changes" -# exit 1 -# fi - -echo "AdGuard Home CI script finished successfully" \ No newline at end of file diff --git a/go.sum b/go.sum index 6d05c0a3..415f71a0 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,5 @@ github.com/AdguardTeam/dnsproxy v0.29.1 h1:Stc+JLh67C9K38vbrH2920+3FnbXKkFzYQqRiu5auUo= github.com/AdguardTeam/dnsproxy v0.29.1/go.mod h1:hOYFV9TW+pd5XKYz7KZf2FFD8SvSPqjyGTxUae86s58= -github.com/AdguardTeam/golibs v0.4.0 h1:4VX6LoOqFe9p9Gf55BeD8BvJD6M6RDYmgEiHrENE9KU= github.com/AdguardTeam/golibs v0.4.0/go.mod h1:skKsDKIBB7kkFflLJBpfGX+G8QFTx0WKUzB6TIgtUj4= github.com/AdguardTeam/golibs v0.4.2 h1:7M28oTZFoFwNmp8eGPb3ImmYbxGaJLyQXeIFVHjME0o= github.com/AdguardTeam/golibs v0.4.2/go.mod h1:skKsDKIBB7kkFflLJBpfGX+G8QFTx0WKUzB6TIgtUj4= @@ -42,15 +41,17 @@ github.com/go-test/deep v1.0.5 h1:AKODKU3pDH1RzZzm6YZu77YWtEAq6uh1rLIAQlay2qc= github.com/go-test/deep v1.0.5/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= github.com/gobuffalo/envy v1.7.0 h1:GlXgaiBkmrYMHco6t4j7SacKO4XUjvh5pwXh0f4uxXU= github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/logger v1.0.0 h1:xw9Ko9EcC5iAFprrjJ6oZco9UpzS5MQ4jAwghsLHdy4= github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4= github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= github.com/gobuffalo/packr v1.30.1 h1:hu1fuVR3fXEZR7rXNW3h8rqSML8EVAf6KNm0NKO/wKg= github.com/gobuffalo/packr v1.30.1/go.mod h1:ljMyFO2EcrnzsHsN99cvbq055Y9OhRrIaviy289eRuk= +github.com/gobuffalo/packr/v2 v2.5.1 h1:TFOeY2VoGamPjQLiNDT3mn//ytzk236VMO2j7iHxJR4= github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -58,13 +59,13 @@ github.com/joomcode/errorx v1.0.1 h1:CalpDWz14ZHd68fIqluJasJosAewpz2TFaJALrUxjrk github.com/joomcode/errorx v1.0.1/go.mod h1:kgco15ekB6cs+4Xjzo7SPeXzx38PbJzBwbnu9qfVNHQ= github.com/kardianos/service v1.0.0 h1:HgQS3mFfOlyntWX8Oke98JcJLqt1DBcHR4kxShpYef0= github.com/kardianos/service v1.0.0/go.mod h1:8CzDhVuCuugtsHyZoTvsOBuvonN/UDBvl0kH+BUxvbo= +github.com/karrick/godirwalk v1.10.12 h1:BqUm+LuJcXjGv1d2mj3gBiQyrQ57a0rYoAmhvJQ7RDU= github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -90,11 +91,13 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/shirou/gopsutil v2.20.3+incompatible h1:0JVooMPsT7A7HqEYdydp/OfjSOYSjhXV7w1hkKj/NPQ= github.com/shirou/gopsutil v2.20.3+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sparrc/go-ping v0.0.0-20190613174326-4e5b6552494c h1:gqEdF4VwBu3lTKGHS9rXE9x1/pEaSwCXRLOZRF6qtlw= github.com/sparrc/go-ping v0.0.0-20190613174326-4e5b6552494c/go.mod h1:eMyUVp6f/5jnzM+3zahzl7q6UXLbgSc3MKg/+ow9QW0= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= @@ -102,9 +105,7 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= @@ -112,9 +113,7 @@ github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljT github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.4 h1:hi1bXHMVrlQh6WwxAy+qZCV/SYIlqo+Ushwdpa4tAKg= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9 h1:mKdxBk7AujPs8kU4m80U72y/zjbZ3UcXC7dClwKbUI0= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -124,29 +123,24 @@ golang.org/x/crypto v0.0.0-20200403201458-baeed622b8d8/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5 h1:LfCXLvNmTYH9kEmVgqbnsWfruoXZIrh4YBgqVHtDvw0= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d h1:nc5K6ox/4lTFbMVSL9WRR81ixkcwXThoiF6yf+R9scA= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -154,7 +148,6 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= diff --git a/main.go b/main.go index 449e3834..eebcd5c4 100644 --- a/main.go +++ b/main.go @@ -1,3 +1,6 @@ +//go:generate go install -v github.com/gobuffalo/packr/packr +//go:generate packr clean +//go:generate packr -z package main import ( diff --git a/packaging/docker/Dockerfile b/packaging/docker/Dockerfile deleted file mode 100644 index 6677d928..00000000 --- a/packaging/docker/Dockerfile +++ /dev/null @@ -1,32 +0,0 @@ -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 libcap && \ - rm -rf /var/cache/apk/* && \ - mkdir -p /opt/adguardhome/conf /opt/adguardhome/work && \ - chown -R nobody: /opt/adguardhome - -COPY --from=build --chown=nobody:nogroup /src/AdGuardHome/AdGuardHome /opt/adguardhome/AdGuardHome - -RUN setcap 'cap_net_bind_service=+eip' /opt/adguardhome/AdGuardHome - -EXPOSE 53/tcp 53/udp 67/udp 68/udp 80/tcp 443/tcp 853/tcp 3000/tcp - -VOLUME ["/opt/adguardhome/conf", "/opt/adguardhome/work"] - -WORKDIR /opt/adguardhome/work - -#USER nobody - -ENTRYPOINT ["/opt/adguardhome/AdGuardHome"] -CMD ["-c", "/opt/adguardhome/conf/AdGuardHome.yaml", "-w", "/opt/adguardhome/work", "--no-check-update"] diff --git a/packaging/docker/Dockerfile.hub b/packaging/docker/Dockerfile.hub deleted file mode 100644 index 0e11574e..00000000 --- a/packaging/docker/Dockerfile.hub +++ /dev/null @@ -1,23 +0,0 @@ -FROM alpine:latest -LABEL maintainer="AdGuard Team " - -# Update CA certs -RUN apk --no-cache --update add ca-certificates libcap && \ - rm -rf /var/cache/apk/* && \ - mkdir -p /opt/adguardhome/conf /opt/adguardhome/work && \ - chown -R nobody: /opt/adguardhome - -COPY --chown=nobody:nogroup ./AdGuardHome /opt/adguardhome/AdGuardHome - -RUN setcap 'cap_net_bind_service=+eip' /opt/adguardhome/AdGuardHome - -EXPOSE 53/tcp 53/udp 67/udp 68/udp 80/tcp 443/tcp 853/tcp 3000/tcp - -VOLUME ["/opt/adguardhome/conf", "/opt/adguardhome/work"] - -WORKDIR /opt/adguardhome/work - -#USER nobody - -ENTRYPOINT ["/opt/adguardhome/AdGuardHome"] -CMD ["-h", "0.0.0.0", "-c", "/opt/adguardhome/conf/AdGuardHome.yaml", "-w", "/opt/adguardhome/work", "--no-check-update"] diff --git a/packaging/docker/README.md b/packaging/docker/README.md deleted file mode 100644 index 0d7ff06f..00000000 --- a/packaging/docker/README.md +++ /dev/null @@ -1,6 +0,0 @@ -## Docker images - -* `Dockerfile` is used for local development. Build it using `make docker` command. - -* `Dockerfile.hub` is used to publish AdGuard images to Docker Hub: https://hub.docker.com/r/adguard/adguardhome - Check out `build_docker.sh` for the details. \ No newline at end of file diff --git a/packaging/snap/README.md b/packaging/snap/README.md deleted file mode 100644 index 764100ff..00000000 --- a/packaging/snap/README.md +++ /dev/null @@ -1,5 +0,0 @@ -## Snapcraft - -Configuration for our snap. - -Check out `build_snap.sh` for more details. \ No newline at end of file diff --git a/packaging/snap/snapcraft.yaml b/packaging/snap/snapcraft.yaml deleted file mode 100644 index 1d6c5274..00000000 --- a/packaging/snap/snapcraft.yaml +++ /dev/null @@ -1,32 +0,0 @@ -name: adguard-home -base: core18 -version: 'dev_version' -summary: Network-wide ads & trackers blocking DNS server -description: | - AdGuard Home is a network-wide software for blocking ads & tracking. After - you set it up, it'll cover ALL your home devices, and you don't need any - client-side software for that. - - It operates as a DNS server that re-routes tracking domains to a "black hole," - thus preventing your devices from connecting to those servers. It's based - on software we use for our public AdGuard DNS servers -- both share a lot - of common code. -grade: stable -confinement: strict - -parts: - adguard-home: - plugin: make - source: . - build-snaps: [ node/13/stable, go ] - build-packages: [ git, build-essential ] - override-build: | - make clean - make - cp AdGuardHome ${SNAPCRAFT_PART_INSTALL}/ -apps: - adguard-home: - command: AdGuardHome -w ${SNAP_DATA} --no-check-update - plugs: [ network-bind ] - daemon: simple - restart-condition: always \ No newline at end of file diff --git a/snapcraft.yaml b/snapcraft.yaml deleted file mode 100644 index c5cda82b..00000000 --- a/snapcraft.yaml +++ /dev/null @@ -1,41 +0,0 @@ -# Note that this snapcraft.yaml file is used for automatic Edge channel builds ONLY! -# We use packaging/snap/snapcraft.yaml for beta and release builds -# Check out build_snap.sh for more details -name: adguard-home -base: core18 -version: 'edge' -summary: Network-wide ads & trackers blocking DNS server -description: | - AdGuard Home is a network-wide software for blocking ads & tracking. After - you set it up, it'll cover ALL your home devices, and you don't need any - client-side software for that. - - It operates as a DNS server that re-routes tracking domains to a "black hole," - thus preventing your devices from connecting to those servers. It's based - on software we use for our public AdGuard DNS servers -- both share a lot - of common code. -grade: stable -confinement: strict - -architectures: - - build-on: amd64 - - build-on: armhf - - build-on: i386 - - build-on: arm64 - -parts: - adguard-home: - plugin: make - source: . - build-snaps: [ node/13/stable, go ] - build-packages: [ git, build-essential ] - override-build: | - make clean - make - cp AdGuardHome ${SNAPCRAFT_PART_INSTALL}/ -apps: - adguard-home: - command: AdGuardHome -w ${SNAP_DATA} --no-check-update - plugs: [ network-bind ] - daemon: simple - restart-condition: always diff --git a/tools.go b/tools.go new file mode 100644 index 00000000..350f00a6 --- /dev/null +++ b/tools.go @@ -0,0 +1,8 @@ +// +build tools + +package tools + +import ( + // Import packr + _ "github.com/gobuffalo/packr/packr" +)