diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml new file mode 100644 index 0000000..ebf1187 --- /dev/null +++ b/.github/workflows/master.yml @@ -0,0 +1,110 @@ +name: Build/Push (master) + +on: + push: + branches: + - 'master' + pull_request: + branches: + - 'master' + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - uses: actions/setup-go@v1 + with: + go-version: 1.14 + + - name: Install go dependencies + run: go get -t -v ./... + + - name: Run go tests + run: go test -v -cover -race ./... + + build-docker: + runs-on: ubuntu-latest + needs: test + + steps: + - name: Checkout + 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 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push docker image + id: docker_build + uses: docker/build-push-action@v2 + with: + context: . + file: ./Dockerfile + platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64 + push: true + tags: ebrianne/adguard-exporter:latest + + build: + runs-on: ubuntu-latest + needs: test + strategy: + matrix: + include: + - os: linux + arch: 386 + - os: linux + arch: amd64 + - os: linux + arch: arm + - os: linux + arch: arm64 + - os: darwin + arch: 386 + - os: darwin + arch: amd64 + - os: freebsd + arch: 386 + - os: freebsd + arch: amd64 + - os: windows + arch: 386 + extension: '.exe' + - os: windows + arch: amd64 + extension: '.exe' + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - uses: actions/setup-go@v2 + with: + go-version: 1.14 + + - name: Download go dependencies + run: go get -t -v ./... + + - name: Install the needed vendors + run: GO111MODULE=on go mod vendor + + - name: Create release (${{ matrix.os }}-${{ matrix.arch }}) + run: CGO_ENABLED=0 GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} go build -a -ldflags '-s -w' -o adguard_exporter-${{ matrix.os }}-${{ matrix.arch }}${{ matrix.extension }} ./ + + - if: matrix.os != 'freebsd' + name: Run UPX (${{ matrix.os }}-${{ matrix.arch }}) + uses: crazy-max/ghaction-upx@v1 + with: + version: latest + file: ./adguard_exporter-${{ matrix.os }}-${{ matrix.arch }}${{ matrix.extension }} + args: -fq --brute \ No newline at end of file diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml index 05f33b7..aa8e046 100644 --- a/.github/workflows/tag.yml +++ b/.github/workflows/tag.yml @@ -8,15 +8,49 @@ on: jobs: test: runs-on: ubuntu-latest - strategy: - matrix: - go_version: [ '1.12', '1.13', '1.14' ] steps: - - uses: actions/checkout@v2 + - name: Checkout + uses: actions/checkout@v2 + - uses: actions/setup-go@v2 with: - go-version: ${{ matrix.go_version }} + go-version: 1.14 + - run: go get -t -v ./... + - run: go test -v -race ./... + + build: + runs-on: ubuntu-latest + needs: test + steps: + - name: Checkout + 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 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Get the version + id: get_version + run: echo ::set-output name=TAG_NAME::${GITHUB_REF/refs\/tags\//} + + - name: Build and push docker image + id: docker_build + uses: docker/build-push-action@v2 + with: + context: . + file: ./Dockerfile + platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64 + push: true + tags: ebrianne/adguard-exporter:${{ steps.get_version.outputs.TAG_NAME }} release: runs-on: ubuntu-latest @@ -47,6 +81,8 @@ jobs: arch: amd64 - os: linux arch: arm + - os: linux + arch: arm64 - os: darwin arch: 386 - os: darwin @@ -62,7 +98,9 @@ jobs: arch: amd64 extension: '.exe' steps: - - uses: actions/checkout@v2 + - name: Checkout + uses: actions/checkout@v2 + - uses: actions/setup-go@v2 with: go-version: 1.14 @@ -70,12 +108,20 @@ jobs: - name: Download go dependencies run: go get -t -v ./... - - name: Install mitchellh/gox to create platform specific releases - run: go install github.com/mitchellh/gox + - name: Install the needed vendors + run: GO111MODULE=on go mod vendor - - name: Create release - run: gox -ldflags "-s -w" -os="${{ matrix.os }}" -arch="${{ matrix.arch }}" -output="adguard_exporter-{{.OS}}-{{.Arch}}" -verbose ./... + - name: Create release (${{ matrix.os }}-${{ matrix.arch }}) + run: CGO_ENABLED=0 GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} go build -a -ldflags '-s -w' -o adguard_exporter-${{ matrix.os }}-${{ matrix.arch }}${{ matrix.extension }} ./ + - if: matrix.os != 'freebsd' + name: Run UPX (${{ matrix.os }}-${{ matrix.arch }}) + uses: crazy-max/ghaction-upx@v1 + with: + version: latest + file: ./adguard_exporter-${{ matrix.os }}-${{ matrix.arch }}${{ matrix.extension }} + args: -fq --brute + - name: Upload release assets id: upload-release-asset uses: actions/upload-release-asset@v1 diff --git a/.gitignore b/.gitignore index 47419e2..a2c662b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ vendor debug adguard_exporter .git/ +.env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4f56742 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +FROM --platform=$BUILDPLATFORM golang:1.14-alpine AS build +ARG TARGETOS +ARG TARGETARCH + +WORKDIR /tmp/adguard_exporter + +RUN apk update && apk --no-cache add git alpine-sdk upx +COPY . . +RUN GO111MODULE=on go mod vendor +RUN CGO_ENABLED=0 GOOS=$OS GOARCH=$ARCH go build -ldflags '-s -w' -o adguard_exporter ./ +RUN upx -f --brute adguard_exporter + +FROM scratch +LABEL name="adguard-exporter" + +WORKDIR /root +COPY --from=build /tmp/adguard_exporter/adguard_exporter adguard_exporter + +CMD ["./adguard_exporter"] \ No newline at end of file diff --git a/README.md b/README.md index 9c958c7..768884b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # AdguardHome Prometheus Exporter +![Build/Push (master)](https://github.com/ebrianne/adguard-exporter/workflows/Build/Push%20(master)/badge.svg?branch=master) [![GoDoc](https://godoc.org/github.com/ebrianne/adguard-exporter?status.png)](https://godoc.org/github.com/ebrianne/adguard-exporter) [![GoReportCard](https://goreportcard.com/badge/github.com/ebrianne/adguard-exporter)](https://goreportcard.com/report/github.com/ebrianne/adguard-exporter) @@ -56,6 +57,101 @@ Then, build the binary (here, an example to run on Raspberry PI ARM architecture $ GOOS=linux GOARCH=arm GOARM=7 go build -o adguard_exporter . ``` +## Using Docker + +The exporter has been made available as a docker image. You can simply run it by the following command and pass the configuration with environment variables: + +```bash +docker run \ +-e 'adguard_protocol=http' \ +-e 'adguard_hostname=192.168.10.252' \ +-e 'adguard_username=admin' \ +-e 'adguard_password=mypassword' \ +-e 'interval=10s' \ +-e 'log_limit=10000' \ +-e 'server_port=9617' \ +-p 9617:9617 \ +ebrianne/adguard_exporter:latest +``` + +If you prefer you can use an .env file where the environment variables are defined and using the command: + +```bash +docker run --env-file=.env -p 9617:9617 \ +ebrianne/adguard_exporter:latest +``` + +You can also use docker-compose passing the environment file or using secrets locally +### Local with environment file + +```yml +version: "3.7" + +services: + adguard_exporter: + image: ebrianne/adguard_exporter:latest + restart: always + ports: + - "9617:9617" + env_file: + - .env +``` +### Local with secret file (compose version 3 minimum) + +```yml +version: "3.7" + +secrets: + my-adguard-pass: + file: ./my-adguard-pass.txt + +services: + adguard_exporter: + image: ebrianne/adguard_exporter:latest + restart: always + secrets: + - my-adguard-pass + ports: + - "9617:9617" + environment: + - adguard_protocol=http + - adguard_hostname=192.168.10.252 + - adguard_username=admin + - adguard_password=/run/secrets/my-adguard-pass + - interval=10s + - log_limit=10000 +``` +### Swarm mode (docker swarm init) + +```bash +echo "mypassword" | docker secret create my-adguard-pass - +``` +Here is an example of docker-compose file. + +```yml +version: "3.7" + +secrets: + my-adguard-pass: + external: true + +services: + adguard_exporter: + image: ebrianne/adguard_exporter:latest + restart: always + secrets: + - my-adguard-pass + ports: + - "9617:9617" + environment: + - adguard_protocol=http + - adguard_hostname=192.168.10.252 + - adguard_username=admin + - adguard_password=/run/secrets/my-adguard-pass + - interval=10s + - log_limit=10000 +``` + ## Usage In order to run the exporter, type the following command (arguments are optional):