diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e3d0e165..b4daf31a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,11 +14,26 @@ permissions: jobs: release: runs-on: ubuntu-latest + env: + DOCKER_CLI_EXPERIMENTAL: "enabled" + DOCKER_REGISTRY: "ghcr.io" + DOCKER_IMAGE_NAME: "unpoller/unpoller" steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - run: git fetch --force --tags + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - uses: actions/setup-go@v3 with: go-version: '>=1.19.3' @@ -36,3 +51,6 @@ jobs: # Your GoReleaser Pro key, if you are using the 'goreleaser-pro' # distribution: GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} + DOCKER_REGISTRY: ${{ env.DOCKER_REGISTRY }} + DOCKER_IMAGE_NAME: ${{ env.DOCKER_IMAGE_NAME }} + diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 00000000..609b0d94 --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,173 @@ +# .goreleaser.yaml +builds: + - env: + - CGO_ENABLED=0 + binary: unpoller + goarm: + - 6 + - 7 + goos: + - linux + - darwin + - windows + - freebsd + goarch: + - amd64 + - arm64 + - arm + ignore: + - goos: darwin + goarch: 386 + - goarm: mips64 + - gomips: hardfloat + - goamd64: v4 + - goos: freebsd + goarch: 386 +dockers: + - # amd64 + image_templates: + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:latest-amd64" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Tag }}-amd64" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:v{{ .Major }}-amd64" + use: buildx + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.title={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--label=org.opencontainers.image.documentation='https://unpoller.com/docs/install/docker'" + - "--label=org.opencontainers.image.description='Telemetry and Observability for your UniFi Network'" + - "--label=org.opencontainers.image.url='https://unpoller.com'" + - "--label=org.opencontainers.image.source={{ .GitURL }}" + - "--label=org.opencontainers.image.vendor=unpoller" + - "--label=org.opencontainers.image.licenses=MIT" + - "--platform=linux/amd64" + push_flags: + - --tls-verify=false + extra_files: + - "examples/up.conf.example" + - "examples/up.json.example" + - "examples/up.yaml.example" + - # arm64 + image_templates: + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:latest-arm64v8" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Tag }}-arm64v8" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:v{{ .Major }}-arm64v8" + use: buildx + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.title={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--label=org.opencontainers.image.documentation='https://unpoller.com/docs/install/docker'" + - "--label=org.opencontainers.image.description='Telemetry and Observability for your UniFi Network'" + - "--label=org.opencontainers.image.url='https://unpoller.com'" + - "--label=org.opencontainers.image.source={{ .GitURL }}" + - "--label=org.opencontainers.image.vendor=unpoller" + - "--label=org.opencontainers.image.licenses=MIT" + - "--platform=linux/arm64" + push_flags: + - --tls-verify=false + extra_files: + - "examples/up.conf.example" + - "examples/up.json.example" + - "examples/up.yaml.example" + - # armv7 + image_templates: + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:latest-armv7" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Tag }}-armv7" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:v{{ .Major }}-armv7" + use: buildx + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.title={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--label=org.opencontainers.image.documentation='https://unpoller.com/docs/install/docker'" + - "--label=org.opencontainers.image.description='Telemetry and Observability for your UniFi Network'" + - "--label=org.opencontainers.image.url='https://unpoller.com'" + - "--label=org.opencontainers.image.source={{ .GitURL }}" + - "--label=org.opencontainers.image.vendor=unpoller" + - "--label=org.opencontainers.image.licenses=MIT" + - "--platform=linux/arm/v7" + push_flags: + - --tls-verify=false + extra_files: + - "examples/up.conf.example" + - "examples/up.json.example" + - "examples/up.yaml.example" +docker_manifests: + - name_template: '{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:latest' + create_flags: + - --insecure + push_flags: + - --insecure + image_templates: + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:latest-amd64" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:latest-arm64v8" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:latest-armv7" + - name_template: '{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Tag }}' + create_flags: + - --insecure + push_flags: + - --insecure + image_templates: + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Tag }}-amd64" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Tag }}-arm64v8" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Tag }}-armv7" + - name_template: '{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:v{{ .Major }}' + create_flags: + - --insecure + push_flags: + - --insecure + image_templates: + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:v{{ .Major }}-amd64" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:v{{ .Major }}-arm64v8" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:v{{ .Major }}-armv7" + +nfpms: + - + replacements: + amd64: 64-bit + 386: 32-bit + darwin: macOS + linux: Tux + + vendor: unpoller + homepage: https://unpoller.com/ + maintainer: unpoller.com + description: Telemetry and Observability for your UniFi Network + license: MIT + formats: + - apk + - deb + - rpm + - termux.deb # Since GoReleaser v1.11. + bindir: /usr/bin + version_metadata: git + section: default + priority: extra + + # Contents to add to the package. + # GoReleaser will automatically add the binaries. + contents: + - dst: /etc/unpoller + type: dir + file_info: + mode: 0700 + + # Example config files + - src: examples/up.conf.example + dst: /etc/unpoller/up.conf.example + type: config + - src: examples/up.json.example + dst: /etc/unpoller/up.json.example + type: config + - src: examples/up.yaml.example + dst: /etc/unpoller/up.yaml.example + type: config +universal_binaries: + - replace: true diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..fac42da8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,5 @@ +FROM gcr.io/distroless/static-debian11 + +COPY unpoller /usr/bin/unpoller + +ENTRYPOINT [ "/usr/bin/unpoller" ]