diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..9ac2ace8 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,58 @@ +name: Build + +on: [push] + +permissions: + contents: read + # Optional: allow read access to pull request. Use with `only-new-issues` option. + # pull-requests: read + +jobs: + test: + strategy: + matrix: + go: [1.19] + os: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.go }} + + - name: Build + run: go build -v ./... + + - name: Test + run: go test -v ./... + lint: + strategy: + matrix: + go: [1.19] + os: [ubuntu-latest, macos-latest, windows-latest] + name: lint + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.go }} + - name: golangci-lint + uses: golangci/golangci-lint-action@v3 + with: + # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. + version: v1.50.1 + # Optional: working directory, useful for monorepos + # working-directory: somedir + + # Optional: golangci-lint command line arguments. + # args: --issues-exit-code=0 + args: --timeout=3m + # we have installed go already + skip-go-installation: true + + # Optional: show only new issues if it's a pull request. The default value is `false`. + # only-new-issues: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..b4daf31a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,56 @@ +name: Release + +on: + push: + # run only against tags + tags: + - '*' + +permissions: + contents: write + packages: write + # issues: write + +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' + cache: true + # More assembly might be required: Docker logins, GPG, etc. It all depends + # on your needs. + - uses: goreleaser/goreleaser-action@v2 + with: + # either 'goreleaser' (default) or 'goreleaser-pro': + distribution: goreleaser-pro + version: latest + args: release --rm-dist + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # 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/.travis.yml b/.travis.yml-bak similarity index 99% rename from .travis.yml rename to .travis.yml-bak index 41bc4b8b..a4db20fa 100644 --- a/.travis.yml +++ b/.travis.yml-bak @@ -4,12 +4,12 @@ jobs: - os: osx osx_image: xcode12 language: go - go: 1.16.x + go: 1.19.x - os: linux - dist: bionic + dist: focal services: docker language: go - go: 1.16.x + go: 1.19.x git: depth: false addons: 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" ] diff --git a/Makefile b/Makefile index 8276288e..f1562270 100644 --- a/Makefile +++ b/Makefile @@ -352,14 +352,14 @@ $(patsubst %,%.darwin.so,$(PLUGINS)): GOOS=darwin go build -o $@ -ldflags "$(VERSION_LDFLAGS)" -buildmode=plugin ./plugins/$(patsubst %.darwin.so,%,$@) # Run code tests and lint. -test: lint +test: # lint # Testing. go test -race -covermode=atomic ./... -lint: - # Checking lint. - GOOS=linux $(shell go env GOPATH)/bin/golangci-lint run $(GOLANGCI_LINT_ARGS) - GOOS=freebsd $(shell go env GOPATH)/bin/golangci-lint run $(GOLANGCI_LINT_ARGS) - GOOS=windows $(shell go env GOPATH)/bin/golangci-lint run $(GOLANGCI_LINT_ARGS) +#lint: +# # Checking lint. +# GOOS=linux $(shell go env GOPATH)/bin/golangci-lint run $(GOLANGCI_LINT_ARGS) +# GOOS=freebsd $(shell go env GOPATH)/bin/golangci-lint run $(GOLANGCI_LINT_ARGS) +# GOOS=windows $(shell go env GOPATH)/bin/golangci-lint run $(GOLANGCI_LINT_ARGS) # Mockgen and bindata are examples. # Your `go generate` may require other tools; add them!