diff --git a/.secret_files.tar.enc b/.secret_files.tar.enc deleted file mode 100644 index af3b5b61..00000000 Binary files a/.secret_files.tar.enc and /dev/null differ diff --git a/.travis.yml-bak b/.travis.yml-bak deleted file mode 100644 index a4db20fa..00000000 --- a/.travis.yml-bak +++ /dev/null @@ -1,143 +0,0 @@ -# Powered by Application Builder: https://github.com/golift/application-builder -jobs: - include: - - os: osx - osx_image: xcode12 - language: go - go: 1.19.x - - os: linux - dist: focal - services: docker - language: go - go: 1.19.x -git: - depth: false -addons: - homebrew: - packages: - - upx - apt: - packages: - - ruby-dev - - rpm - - build-essential - - git - - libgnome-keyring-dev - - fakeroot - - zip - - debsigs - - gnupg - - upx -install: - - mkdir -p $(go env GOPATH)/bin - - curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin latest - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then rvm install 2.6.0; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then rvm 2.6.0 do gem install --no-document fpm -v 1.11.0; fi -before_script: - # Create your own deploy key, tar it, and encrypt the file to make this work. Optionally add a bitly_token file to the archive. - - openssl aes-256-cbc -K $encrypted_772fc4772f04_key -iv $encrypted_772fc4772f04_iv -in .secret_files.tar.enc -out .secret_files.tar -d - - tar -xf .secret_files.tar - - gpg --import gpg.signing.key - - rm -f gpg.signing.key .secret_files.tar - - source settings.sh -script: - # Test Go. - - make test - # Test Docker. - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then make docker; fi - # Test built docker image. - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then docker run $BINARY -v 2>&1 | grep -Eq "^$BINARY,? v.*$VERSION"; fi - # Build everything - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then rvm 2.6.0 do make release; fi - # Build mac binary or image. - - if [ "$TRAVIS_OS_NAME" == "osx" ]; then make dmg; fi - # Test homebrew (with make install). - - if [ "$TRAVIS_OS_NAME" == "osx" ]; then make install VERSION=$VERSION ITERATION=$ITERATION PREFIX=/tmp/ab-$VERSION ETC=/tmp/ab-$VERSION/etc; fi -after_success: - # Display Release Folder - - ls -l release/ - # Setup the ssh client so we can clone and push to the homebrew formula repo. - # You must put github_deploy_file into .secret_files.tar.enc - # This is an ssh key added to your homebrew forumla repo. - - | - mkdir -p $HOME/.ssh - declare -r SSH_FILE="$(mktemp -u $HOME/.ssh/XXXXX)" - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> $HOME/.ssh/config - [ ! -f github_deploy_key ] || (mv github_deploy_key $SSH_FILE \ - && chmod 600 "$SSH_FILE" \ - && printf "%s\n" \ - "Host github.com" \ - " IdentityFile $SSH_FILE" \ - " StrictHostKeyChecking no" \ - " LogLevel ERROR" >> $HOME/.ssh/config) -deploy: - # Unstable (master pushes). - - provider: packagecloud - repository: unstable - username: golift - token: - secure: 1vzsIxgcDkMkkmxpvaw3vEMt4cbDNpk3UMeiv5qnHJ9/k0D6+VhNVS0I3QLgP5+WQgH11Y0YX00NvcY13M+hSj6vLhPCBroFisXJyDpg/f/bxyHxILFeO6AY/CSFbdLzyLcjJo5SC7JedEhqd4xeqjEo14FxGrzKB7guOBCdOQPtaFxfimm02vNt34LoLGYOfZMek2vt50qAR8ChvX2fG/gGxfAlQ4AYvppJLwfPs4jwMN1rrndDI1EUgy3ZMafM40KguXD2wGkctLmyoelTEX2TEDa8TBZKot3lRmK1vyI3wCzNY/Jb5chGq9J5zWFpPlSvn+NPeqj+8UGCZ+bCb0unFH5OdOEKTmQ46cYgL6d3RRbpwoxbG/twg/bAfJ0iiSNTJfXjXDLKT9j+YyeCerbnh7rT/qCuwO+W/HIsnu0waCXvXGAKXGAAE+xvnBygp/YS6I4Y26V2CBIF8KJEWIF/CuooHzraa5c1hg50h5YZnZ9EwVXxFRdsFSNxle9uNe2iJ08FEV6VyHPybYsOnA37yM7E8wCLbcKRKavAyVT7OykLU2GAAOCdcN8tpSDA/kwKx3imZhyjGGUrYQxVN/bCb4hhBX+OymcVIw2gQFkJ/sc09ck+Vo77FVR6JVi0tCjan7x4oCTQfbEa5lkioMjKgY6JDfRVZdX6HUjlJTw= - dist: ubuntu/focal - local-dir: release - package_glob: "*.deb" - skip_cleanup: true - cleanup: false - on: - branch: unstable - condition: "$TRAVIS_OS_NAME = linux" - - provider: packagecloud - repository: unstable - username: golift - token: - secure: 1vzsIxgcDkMkkmxpvaw3vEMt4cbDNpk3UMeiv5qnHJ9/k0D6+VhNVS0I3QLgP5+WQgH11Y0YX00NvcY13M+hSj6vLhPCBroFisXJyDpg/f/bxyHxILFeO6AY/CSFbdLzyLcjJo5SC7JedEhqd4xeqjEo14FxGrzKB7guOBCdOQPtaFxfimm02vNt34LoLGYOfZMek2vt50qAR8ChvX2fG/gGxfAlQ4AYvppJLwfPs4jwMN1rrndDI1EUgy3ZMafM40KguXD2wGkctLmyoelTEX2TEDa8TBZKot3lRmK1vyI3wCzNY/Jb5chGq9J5zWFpPlSvn+NPeqj+8UGCZ+bCb0unFH5OdOEKTmQ46cYgL6d3RRbpwoxbG/twg/bAfJ0iiSNTJfXjXDLKT9j+YyeCerbnh7rT/qCuwO+W/HIsnu0waCXvXGAKXGAAE+xvnBygp/YS6I4Y26V2CBIF8KJEWIF/CuooHzraa5c1hg50h5YZnZ9EwVXxFRdsFSNxle9uNe2iJ08FEV6VyHPybYsOnA37yM7E8wCLbcKRKavAyVT7OykLU2GAAOCdcN8tpSDA/kwKx3imZhyjGGUrYQxVN/bCb4hhBX+OymcVIw2gQFkJ/sc09ck+Vo77FVR6JVi0tCjan7x4oCTQfbEa5lkioMjKgY6JDfRVZdX6HUjlJTw= - dist: el/6 - local-dir: release - package_glob: "*.rpm" - skip_cleanup: true - cleanup: false - on: - branch: unstable - condition: "$TRAVIS_OS_NAME = linux" - # Stable packages (releases). - - provider: packagecloud - repository: pkgs - username: golift - token: - secure: 1vzsIxgcDkMkkmxpvaw3vEMt4cbDNpk3UMeiv5qnHJ9/k0D6+VhNVS0I3QLgP5+WQgH11Y0YX00NvcY13M+hSj6vLhPCBroFisXJyDpg/f/bxyHxILFeO6AY/CSFbdLzyLcjJo5SC7JedEhqd4xeqjEo14FxGrzKB7guOBCdOQPtaFxfimm02vNt34LoLGYOfZMek2vt50qAR8ChvX2fG/gGxfAlQ4AYvppJLwfPs4jwMN1rrndDI1EUgy3ZMafM40KguXD2wGkctLmyoelTEX2TEDa8TBZKot3lRmK1vyI3wCzNY/Jb5chGq9J5zWFpPlSvn+NPeqj+8UGCZ+bCb0unFH5OdOEKTmQ46cYgL6d3RRbpwoxbG/twg/bAfJ0iiSNTJfXjXDLKT9j+YyeCerbnh7rT/qCuwO+W/HIsnu0waCXvXGAKXGAAE+xvnBygp/YS6I4Y26V2CBIF8KJEWIF/CuooHzraa5c1hg50h5YZnZ9EwVXxFRdsFSNxle9uNe2iJ08FEV6VyHPybYsOnA37yM7E8wCLbcKRKavAyVT7OykLU2GAAOCdcN8tpSDA/kwKx3imZhyjGGUrYQxVN/bCb4hhBX+OymcVIw2gQFkJ/sc09ck+Vo77FVR6JVi0tCjan7x4oCTQfbEa5lkioMjKgY6JDfRVZdX6HUjlJTw= - dist: ubuntu/focal - local-dir: release - package_glob: "*.deb" - skip_cleanup: true - cleanup: false - on: - tags: true - condition: "$TRAVIS_OS_NAME = linux" - - provider: packagecloud - repository: pkgs - username: golift - token: - secure: 1vzsIxgcDkMkkmxpvaw3vEMt4cbDNpk3UMeiv5qnHJ9/k0D6+VhNVS0I3QLgP5+WQgH11Y0YX00NvcY13M+hSj6vLhPCBroFisXJyDpg/f/bxyHxILFeO6AY/CSFbdLzyLcjJo5SC7JedEhqd4xeqjEo14FxGrzKB7guOBCdOQPtaFxfimm02vNt34LoLGYOfZMek2vt50qAR8ChvX2fG/gGxfAlQ4AYvppJLwfPs4jwMN1rrndDI1EUgy3ZMafM40KguXD2wGkctLmyoelTEX2TEDa8TBZKot3lRmK1vyI3wCzNY/Jb5chGq9J5zWFpPlSvn+NPeqj+8UGCZ+bCb0unFH5OdOEKTmQ46cYgL6d3RRbpwoxbG/twg/bAfJ0iiSNTJfXjXDLKT9j+YyeCerbnh7rT/qCuwO+W/HIsnu0waCXvXGAKXGAAE+xvnBygp/YS6I4Y26V2CBIF8KJEWIF/CuooHzraa5c1hg50h5YZnZ9EwVXxFRdsFSNxle9uNe2iJ08FEV6VyHPybYsOnA37yM7E8wCLbcKRKavAyVT7OykLU2GAAOCdcN8tpSDA/kwKx3imZhyjGGUrYQxVN/bCb4hhBX+OymcVIw2gQFkJ/sc09ck+Vo77FVR6JVi0tCjan7x4oCTQfbEa5lkioMjKgY6JDfRVZdX6HUjlJTw= - dist: el/6 - local-dir: release - package_glob: "*.rpm" - skip_cleanup: true - cleanup: false - on: - tags: true - condition: "$TRAVIS_OS_NAME = linux" - # Upload built files to github too. - - provider: releases - api_key: - secure: GsvW0m+EnRELQMk8DjH63VXinqbwse4FJ4vNUslOE6CZ8PBXPrH0ZgaI7ic/uxRtm7CYj0sir4CZq62W5l6uhoXCCQfjOnmJspqnQcrFZ1xRdWktsNXaRwM6hlzaUThsJ/1PD9Psc66uKXBYTg0IlUz0yjZAZk7tCUE4libuj41z40ZKxUcbfcNvH4Njc9IpNB4QSA3ss+a9/6ZwBz4tHVamsGIrzaE0Zf99ItNBYvaOwhM2rC/NWIsFmwt8w4rIA2NIrkZgMDV+Z2Niqh4JRLAWCQNx/RjC5U52lG2yhqivUC3TromZ+q4O4alUltsyIzF2nVanLWgJmbeFo8uXT5A+gd3ovSkFLU9medXd9i4kap7kN/o5m9p5QZvrdEYHEmIU4ml5rjT2EQQVy5CtSmpiRAbhpEJIvA1wDtRq8rdz8IVfJXkHNjg2XdouNmMMWqa3OkEPw21+uxsqv4LscW/6ZjsavzL5SSdnBRU9n79EfGJE/tJLKiNumah/vLuJ5buNhgqmCdtX/Tg+DhQS1BOyYg4l4L8s9IIKZgFRwrOPsZnA/KsrWg4ZsjJ87cqKCaT/qs2EJx5odZcZWJYLBngeO8Tc6cQtLgJdieY2oEKo51Agq4rgikZDt21m6TY9/R5lPN0piwdpy3ZGKfv1ijXx74raMT03qskputzMCvc= - overwrite: true - skip_cleanup: true - cleanup: false - file_glob: true - file: release/* - on: - tags: true - # Upload homebrew formula file to a special repo. - - provider: script - script: scripts/formula-deploy.sh - on: - tags: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3c29a605..f93fa590 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,50 +6,33 @@ Lets talk about how the software gets built for our users before we talk about making changes to it. -## TravisCI +## Github Actions -This repo is tested, built and deployed by [Travis-CI](https://travis-ci.org/unifi-poller/unifi-poller). +This repo is tested, built and deployed by [Github Actions](https://github.com/unpoller/unpoller/actions). -The [.travis.yml](.travis.yml) file in this repo coordinates the entire process. -As long as this document is kept up to date, this is what the travis file does: +The [.github/](.github/) directory in this repo coordinates the entire process. +As long as this document is kept up to date, this is what github does: -- Creates a go-capable build environment on a Linux host, some debian variant. -- Install ruby-devel to get rubygems. -- Installs other build tools including rpm and fpm from rubygems. -- Starts docker, builds the docker container and runs it. -- Tests that the Docker container ran and produced expected output. -- Makes a release. `make release`: This does a lot of things, controlled by the [Makefile](Makefile). - - Runs go tests and go linters. - - Compiles the application binaries for Windows, Linux and macOS. - - Compiles a man page that goes into the packages. - - Creates rpm and deb packages using fpm. - - Puts the packages, gzipped binaries and files containing the SHA256s of each asset into a release folder. +- Builds and Tests code changes +- Lints code changes +- On Release (through git tags) it uses goreleaser-pro to build and release: +- Linux, Mac and Windows Binaries +- Provides a packaged source copy +- Builds Debian, RedHat packages +- Builds Mac universal binary +- Builds Windows executable +- Builds numerous platform docker images and uploads them After the release is built and Docker image tested: -- Deploys the release assets to the tagged release on GitHub using an encrypted GitHub Token (api key). -- Runs [another script](scripts/formula-deploy.sh) to create and upload a Homebrew formula to [golift/homebrew-mugs](https://github.com/golift/homebrew-mugs). - - Uses an encrypted SSH key to upload the updated formula to the repo. -- Travis does nothing else with Docker; it just makes sure the thing compiles and runs. +- Deploys the release assets to the tagged release on [GitHub releases](https://github.com/unpoller/unpoller/releases) ### Homebrew -it's a mac thing. - -[Homebrew](https://brew.sh) is all I use at home. Please don't break the homebrew -formula stuff; it took a lot of pain to get it just right. I am very interested -in how it works for you. +it's a mac thing. [Homebrew](https://brew.sh) ### Docker -Docker is built automatically by Docker Cloud using the Dockerfile in the path -[init/docker/Dockerfile](init/docker/Dockerfile). Some of the configuration is -done in the Cloud service under my personal account `golift`, but the majority -happens in the build files in the [init/docker/hooks/](init/docker/hooks/) directory. - -If you have need to change the Dockerfile, please clearly explain what problem your -changes are solving, and how it has been tested and validated. As far as I'm -concerned this file should never need to change again, but I'm not a Docker expert; -you're welcome to prove me wrong. +Docker is built automatically and uploaded to ghcr.io by the release github action. # Contributing diff --git a/Makefile b/Makefile index 231870cc..f21ce317 100644 --- a/Makefile +++ b/Makefile @@ -11,15 +11,7 @@ MD2ROFF_BIN=github.com/davidnewhall/md2roff@v0.0.1 # rsrc adds an ico file to a Windows exe file. RSRC_BIN=github.com/akavel/rsrc -# If upx is available, use it to compress the binaries. -UPXPATH=$(shell which upx) - -# Skip upx in Mac ARM environments: https://github.com/upx/upx/issues/446 -ifeq ($(shell uname -ps),Darwin arm) - UPXPATH= -endif - -# Travis CI passes the version in. Local builds get it from the current git tag. +# CI passes the version in. Local builds get it from the current git tag. ifeq ($(VERSION),) include .metadata.make else @@ -31,73 +23,9 @@ else ITERATION:=$(_ITERATION) endif -# rpm is wierd and changes - to _ in versions. -RPMVERSION:=$(shell echo $(VERSION) | tr -- - _) -# used for freebsd packages. -BINARYU:=$(shell echo $(BINARY) | tr -- - _) - -PACKAGE_SCRIPTS= -ifeq ($(FORMULA),service) - PACKAGE_SCRIPTS=--after-install after-install-rendered.sh --before-remove before-remove-rendered.sh -endif - -define PACKAGE_ARGS -$(PACKAGE_SCRIPTS) \ ---name $(BINARY) \ ---deb-no-default-config-files \ ---rpm-os linux \ ---iteration $(ITERATION) \ ---license $(LICENSE) \ ---url $(SOURCE_URL) \ ---maintainer "$(MAINT)" \ ---vendor "$(VENDOR)" \ ---description "$(DESC)" \ ---config-files "/etc/$(BINARY)/$(CONFIG_FILE)" \ ---freebsd-origin "$(SOURCE_URL)" -endef - -PLUGINS:=$(patsubst plugins/%/main.go,%,$(wildcard plugins/*/main.go)) - -VERSION_LDFLAGS:= -X \"$(VERSION_PATH).Branch=$(BRANCH) ($(COMMIT))\" \ - -X \"$(VERSION_PATH).BuildDate=$(DATE)\" \ - -X \"$(VERSION_PATH).BuildUser=$(shell whoami)\" \ - -X \"$(VERSION_PATH).Revision=$(ITERATION)\" \ - -X \"$(VERSION_PATH).Version=$(VERSION)\" - # Makefile targets follow. -all: clean generate build - -#################### -##### Releases ##### -#################### - -# Prepare a release. Called in Travis CI. -release: clean windows - # Prepareing a release! - mkdir -p $@ - mv $(BINARY).*.linux $(BINARY).*.freebsd $@/ - gzip -9r $@/ - for i in $(BINARY)*.exe ; do zip -9qj $@/$$i.zip $$i examples/*.example *.html; rm -f $$i;done - mv *.rpm *.deb *.txz $@/ - # Generating File Hashes - openssl dgst -r -sha256 $@/* | sed 's#release/##' | tee $@/checksums.sha256.txt - -# DMG only makes a DMG file is MACAPP is set. Otherwise, it makes a gzipped binary for macOS. -dmg: clean macapp - mkdir -p release - [ "$(MACAPP)" = "" ] || hdiutil create release/$(MACAPP).dmg -srcfolder $(MACAPP).app -ov - [ "$(MACAPP)" != "" ] || mv $(BINARY).*.macos release/ - [ "$(MACAPP)" != "" ] || gzip -9r release/ - openssl dgst -r -sha256 release/* | sed 's#release/##' | tee release/macos_checksum.sha256.txt - -# Delete all build assets. -clean: - rm -rf dist - rm -f $(BINARY) $(BINARY).*.{macos,freebsd,linux,exe,upx}{,.gz,.zip} $(BINARY).1{,.gz} $(BINARY).rb - rm -f $(BINARY){_,-}*.{deb,rpm,txz} v*.tar.gz.sha256 examples/MANUAL .metadata.make rsrc_*.syso - rm -f cmd/$(BINARY)/README{,.html} README{,.html} ./$(BINARY)_manual.html rsrc.syso $(MACAPP).app.zip - rm -rf package_build_* release after-install-rendered.sh before-remove-rendered.sh $(MACAPP).app +all: build #################### ##### Sidecars ##### @@ -129,85 +57,13 @@ rsrc.syso: init/windows/application.ico init/windows/manifest.xml $(shell go env $(shell go env GOPATH)/bin/rsrc: cd /tmp ; go get $(RSRC_BIN) ; go install $(RSRC_BIN)@latest -#################### -##### Binaries ##### -#################### -build: $(BINARY) -$(BINARY): main.go - go build -o $(BINARY) -ldflags "-w -s $(VERSION_LDFLAGS) $(EXTRA_LDFLAGS) " - [ -z "$(UPXPATH)" ] || $(UPXPATH) -q9 $@ - -macos: $(BINARY).amd64.macos -$(BINARY).amd64.macos: main.go - # Building darwin 64-bit x86 binary. - GOOS=darwin GOARCH=amd64 go build -o $@ -ldflags "-w -s $(VERSION_LDFLAGS) $(EXTRA_LDFLAGS) " - [ -z "$(UPXPATH)" ] || $(UPXPATH) -q9 $@ - -exe: $(BINARY).amd64.exe -windows: $(BINARY).amd64.exe -$(BINARY).amd64.exe: rsrc.syso main.go - # Building windows 64-bit x86 binary. - GOOS=windows GOARCH=amd64 go build -o $@ -ldflags "-w -s $(VERSION_LDFLAGS) $(EXTRA_LDFLAGS) $(WINDOWS_LDFLAGS)" - [ -z "$(UPXPATH)" ] || $(UPXPATH) -q9 $@ - -#################### -##### Packages ##### -#################### - -macapp: $(MACAPP).app -$(MACAPP).app: macos - [ -z "$(MACAPP)" ] || mkdir -p init/macos/$(MACAPP).app/Contents/MacOS - [ -z "$(MACAPP)" ] || cp $(BINARY).amd64.macos init/macos/$(MACAPP).app/Contents/MacOS/$(MACAPP) - [ -z "$(MACAPP)" ] || cp -rp init/macos/$(MACAPP).app $(MACAPP).app - -#################### -##### Homebrew ##### -#################### - -# This builds a Homebrew formula file that can be used to install this app from source. -# The source used comes from the released version on GitHub. This will not work with local source. -# This target is used by Travis CI to update the released Forumla when a new tag is created. -formula: $(BINARY).rb -v$(VERSION).tar.gz.sha256: - # Calculate the SHA from the Github source file. - curl -sL $(SOURCE_URL)/archive/v$(VERSION).tar.gz | openssl dgst -r -sha256 | tee $@ -$(BINARY).rb: v$(VERSION).tar.gz.sha256 init/homebrew/$(FORMULA).rb.tmpl - # Creating formula from template using sed. - sed -e "s/{{Version}}/$(VERSION)/g" \ - -e "s/{{Iter}}/$(ITERATION)/g" \ - -e "s/{{SHA256}}/$(shell head -c64 $<)/g" \ - -e "s/{{Desc}}/$(DESC)/g" \ - -e "s%{{SOURCE_URL}}%$(SOURCE_URL)%g" \ - -e "s%{{SOURCE_PATH}}%$(SOURCE_PATH)%g" \ - -e "s%{{CONFIG_FILE}}%$(CONFIG_FILE)%g" \ - -e "s%{{Class}}%$(shell echo $(BINARY) | perl -pe 's/(?:\b|-)(\p{Ll})/\u$$1/g')%g" \ - init/homebrew/$(FORMULA).rb.tmpl | tee $(BINARY).rb - # That perl line turns hello-world into HelloWorld, etc. - -# Used for Homebrew only. Other distros can create packages. -install: man readme $(BINARY) plugins_darwin - @echo - Done Building - - @echo - Local installation with the Makefile is only supported on macOS. - @echo - Otherwise, build and install a package: make rpm -or- make deb - @[ "$(shell uname)" = "Darwin" ] || (echo "Unable to continue, not a Mac." && false) - @[ "$(PREFIX)" != "" ] || (echo "Unable to continue, PREFIX not set. Use: make install PREFIX=/usr/local ETC=/usr/local/etc" && false) - @[ "$(ETC)" != "" ] || (echo "Unable to continue, ETC not set. Use: make install PREFIX=/usr/local ETC=/usr/local/etc" && false) - # Copying the binary, config file, unit file, and man page into the env. - /usr/bin/install -m 0755 -d $(PREFIX)/bin $(PREFIX)/share/man/man1 $(ETC)/$(BINARY) $(PREFIX)/share/doc/$(BINARY) $(PREFIX)/lib/$(BINARY) - /usr/bin/install -m 0755 -cp $(BINARY) $(PREFIX)/bin/$(BINARY) - /usr/bin/install -m 0644 -cp $(BINARY).1.gz $(PREFIX)/share/man/man1 - /usr/bin/install -m 0644 -cp examples/$(CONFIG_FILE).example $(ETC)/$(BINARY)/ - /usr/bin/install -m 0755 -d $(PREFIX)/lib/$(BINARY)/web/static/{css,js,images} - /usr/bin/install -m 0644 -cp init/webserver/index.html $(PREFIX)/lib/$(BINARY)/web/index.html - /usr/bin/install -m 0644 -cp init/webserver/static/css/* $(PREFIX)/lib/$(BINARY)/web/static/css/ - /usr/bin/install -m 0644 -cp init/webserver/static/js/* $(PREFIX)/lib/$(BINARY)/web/static/js/ - /usr/bin/install -m 0644 -cp init/webserver/static/images/* $(PREFIX)/lib/$(BINARY)/web/static/images/ - [ -f $(ETC)/$(BINARY)/$(CONFIG_FILE) ] || /usr/bin/install -m 0644 -cp examples/$(CONFIG_FILE).example $(ETC)/$(BINARY)/$(CONFIG_FILE) - /usr/bin/install -m 0644 -cp LICENSE *.html examples/* $(PREFIX)/share/doc/$(BINARY)/ - -goreleaser: +bulid-and-release: clean goreleaser release --rm-dist -goreleaser-test: +build: clean goreleaser release --rm-dist --skip-validate --skip-publish --skip-sign --debug + +clean: + git clean -xdf + docker images -f "dangling=true" -q | xargs docker rmi diff --git a/init/docker/Dockerfile b/init/docker/Dockerfile deleted file mode 100644 index 999ebf08..00000000 --- a/init/docker/Dockerfile +++ /dev/null @@ -1,62 +0,0 @@ -# -# This is part of Application Builder. -# https://github.com/golift/application-builder -# - -ARG ARCH=amd64 -ARG OS=linux -ARG BUILD_DATE=0 -ARG COMMIT=0 -ARG VERSION=unknown -ARG BINARY=application-builder - -FROM golang:latest as builder -ARG ARCH -ARG OS -ARG BINARY - -RUN mkdir -p $GOPATH/pkg/mod $GOPATH/bin $GOPATH/src /${BINARY} -COPY . /${BINARY} -WORKDIR /${BINARY} - -RUN apt update && \ - apt install -y upx && \ - CGO_ENABLED=0 make ${BINARY}.${ARCH}.${OS} - -FROM scratch -ARG ARCH -ARG OS -ARG BUILD_DATE -ARG COMMIT -ARG VERSION -ARG LICENSE=MIT -ARG BINARY -ARG SOURCE_URL=http://github.com/golift/application-builder -ARG DESC=application-builder -ARG VENDOR=golift -ARG AUTHOR=golift -ARG CONFIG_FILE=config.conf - -# Build-time metadata as defined at https://github.com/opencontainers/image-spec/blob/master/annotations.md -LABEL org.opencontainers.image.created="${BUILD_DATE}" \ - org.opencontainers.image.title="${BINARY}" \ - org.opencontainers.image.documentation="${SOURCE_URL}/wiki/Docker" \ - org.opencontainers.image.description="${DESC}" \ - org.opencontainers.image.url="${SOURCE_URL}" \ - org.opencontainers.image.revision="${COMMIT}" \ - org.opencontainers.image.source="${SOURCE_URL}" \ - org.opencontainers.image.vendor="${VENDOR}" \ - org.opencontainers.image.authors="${AUTHOR}" \ - org.opencontainers.image.architecture="${OS} ${ARCH}" \ - org.opencontainers.image.licenses="${LICENSE}" \ - org.opencontainers.image.version="${VERSION}" - -COPY --from=builder /${BINARY}/${BINARY}.${ARCH}.${OS} /image -COPY --from=builder /${BINARY}/examples/${CONFIG_FILE}.example /etc/${BINARY}/${CONFIG_FILE} -COPY --from=builder /${BINARY}/init/webserver /usr/lib/unifi-poller/web -COPY --from=builder /etc/ssl /etc/ssl -COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo - -ENV TZ=UTC - -ENTRYPOINT [ "/image" ] diff --git a/init/docker/README.md b/init/docker/README.md index 80460d1d..50ad54f0 100644 --- a/init/docker/README.md +++ b/init/docker/README.md @@ -1,12 +1,6 @@ -## Docker Cloud Builds - -This folder contains the files that build our Docker image. The image -is built by Docker Hub "automatically" using the [Dockerfile](Dockerfile) -and [hooks/](hooks/) in this folder. - ## Docker Compose -The other files in this folder can be used locally to spin up +The files in this folder can be used locally to spin up a full set of applications (minus the UniFi controller) to get UniFi Poller up and running. Including InfluxDB, Grafana, and Chronograph. This last app is useful to inspect the data stored @@ -14,4 +8,4 @@ in InfluxDB by UniFi Poller. ##### HOWTO **Learn more about how and when to use these *Docker Compose* files in the -[Docker Wiki](https://github.com/unifi-poller/unifi-poller/wiki/Docker).** +[Docker Wiki](https://unpoller.com/docs/install/dockercompose).** diff --git a/init/docker/hooks/build b/init/docker/hooks/build deleted file mode 100755 index 0c3d7763..00000000 --- a/init/docker/hooks/build +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -# The Docker Cloud config must pass in the BUILDS env variable. -# See README.md (in this dir) and the screenshot for more info. -# This is part of Application Builder. -# https://github.com/golift/application-builder - -# This always run local to the Dockerfile folder, so the path is ../.. -pushd ../.. - -source settings.sh - -# Build each configured image from Docker Cloud. -for build in $BUILDS; do - # os:name:arch - os=$(echo $build | cut -d: -f1) - name=$(echo $build | cut -d: -f2) - echo "Building Image ${IMAGE_NAME}_${os}_${name}" - docker build \ - --build-arg "ARCH=${name}" \ - --build-arg "BUILD_DATE=${DATE}" \ - --build-arg "COMMIT=${COMMIT}" \ - --build-arg "VERSION=${VERSION}-${ITERATION}" \ - --build-arg "LICENSE=${LICENSE}" \ - --build-arg "DESC=${DESC}" \ - --build-arg "VENDOR=${VENDOR}" \ - --build-arg "AUTHOR=${MAINT}" \ - --build-arg "BINARY=${BINARY}" \ - --build-arg "SOURCE_URL=${SOURCE_URL}" \ - --build-arg "CONFIG_FILE=${CONFIG_FILE}" \ - --tag "${IMAGE_NAME}_${os}_${name}" \ - --file ${DOCKERFILE_PATH} . -done - -popd diff --git a/init/docker/hooks/pre_build b/init/docker/hooks/pre_build deleted file mode 100755 index 9be7c600..00000000 --- a/init/docker/hooks/pre_build +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -# This is part of Application Builder. -# https://github.com/golift/application-builder - -# https://www.smockle.com/blog/2019/04/22/migrating-from-travis-ci-to-docker-hub-automated-builds/ - -# This upgrades the docker client on the Docker Cloud server to a version -# that contains the `docker manifest` command. To use `docker manifest` -# set `DOCKER_CLI_EXPERIMENTAL=enabled` in your build environment. -# See README.md (in this dir) and the screenshot for more info. - -docker run --rm --privileged multiarch/qemu-user-static:register --reset diff --git a/init/docker/hooks/push b/init/docker/hooks/push deleted file mode 100755 index 26f7c907..00000000 --- a/init/docker/hooks/push +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -# This post build hook creates multi-architecture docker manifests. -# It's all a bit complicated for some reason. -# This is part of Application Builder. -# https://github.com/golift/application-builder - -pushd ../.. -source settings.sh -popd - -if [ "$BUILDS" != "" ]; then - TAGS=$DOCKER_TAG -fi - -export DOCKER_CLI_EXPERIMENTAL=enabled - -# Push the extra custom images that were created. -for build in $BUILDS; do - os=$(echo $build | cut -d: -f1) - name=$(echo $build | cut -d: -f2) - echo "Pushing Image ${IMAGE_NAME}_${os}_${name}" - docker push ${IMAGE_NAME}_${os}_${name} - IMAGES="${IMAGES} ${IMAGE_NAME}_${os}_${name}" -done -echo "Annotating Images: ${IMAGES}" - -# Build all the Docker tags if the source branch is a release and not a branch or pre-release. -if [ "v$VERSION" = "$SOURCE_BRANCH" ]; then - TAGS="$VERSION" - - echo $SOURCE_BRANCH | grep -q -- - - if [ "$?" = "1" ]; then - # tag does not contain a dash, so assume it's a prod tag. - TAGS="$TAGS latest stable $(echo $VERSION | cut -d. -f1,2) $(echo $VERSION | cut -d. -f1)" - fi -fi - -echo "Version: $VERSION, Source: $SOURCE_BRANCH, Building tags: ${TAGS}" - -# Create multi-architecture manifests for each tag with all the built images. -for tag in $TAGS; do - docker manifest create --amend ${DOCKER_REPO}:${tag} $IMAGES - for build in $BUILDS; do - # os:name:arch, ie linux:amd64:amd64 - os=$(echo $build | cut -d: -f1) - name=$(echo $build | cut -d: -f2) - arch=$(echo $build | cut -d: -f3) - # Annotating updates the manifest to describe each images' capabilities. - docker manifest annotate ${DOCKER_REPO}:${tag} ${IMAGE_NAME}_${os}_${name} --os ${os} --arch ${arch} - done - echo "Pushing Manifest ${DOCKER_REPO}:${tag}" - docker manifest push ${DOCKER_REPO}:${tag} -done diff --git a/plugins/README.md b/plugins/README.md deleted file mode 100644 index 1efd89bf..00000000 --- a/plugins/README.md +++ /dev/null @@ -1,3 +0,0 @@ -Copy your plugins into this folder and run `make plugins` to build them. -There is an example plugin available: -[https://github.com/unifi-poller/mysqlunifi](https://github.com/unifi-poller/mysqlunifi) diff --git a/settings.sh b/settings.sh index 86545243..501165a2 100755 --- a/settings.sh +++ b/settings.sh @@ -36,7 +36,3 @@ export LICENSE FORMULA SOURCE_URL VERSION_PATH SOURCE_PATH # Import this signing key only if it's in the keyring. gpg --list-keys 2>/dev/null | grep -q B93DD66EF98E54E2EAE025BA0166AD34ABC5A57C [ "$?" != "0" ] || export SIGNING_KEY=B93DD66EF98E54E2EAE025BA0166AD34ABC5A57C - -export WINDOWS_LDFLAGS="" -export MACAPP="" -export EXTRA_FPM_FLAGS=""