version: 2.1 executors: py: docker: - image: circleci/python:latest working_directory: ~/repo go: docker: - image: circleci/golang:latest working_directory: ~/repo workflows: version: 2 ci: jobs: - checkout: filters: branches: only: /.*/ tags: only: /.*/ - linting: requires: - checkout filters: branches: only: /.*/ tags: only: /.*/ - testing: requires: - checkout filters: branches: only: /.*/ tags: only: /.*/ - build: requires: - testing - linting filters: branches: only: /.*/ tags: ignore: /^v[0-9]+(\.[0-9]+)*$/ - publishing: requires: - testing - linting filters: branches: ignore: /.*/ tags: only: /^v[0-9]+(\.[0-9]+)*$/ - publish-docs: requires: - testing - linting filters: branches: ignore: /.*/ tags: only: /^v[0-9]+(\.[0-9]+)*$/ jobs: checkout: executor: go steps: - checkout - persist_to_workspace: paths: - . root: ~/repo linting: executor: go steps: - attach_workspace: at: . - run: go build . - run: go get -u golang.org/x/lint/golint - run: golint -set_exit_status ./... testing: executor: go steps: - attach_workspace: at: . - run: go build ./... - run: go get github.com/schrej/godacov - run: go test ./... -coverprofile coverage.out - run: godacov -t $CODACY_TOKEN -r ./coverage.out -c $CIRCLE_SHA1 build: executor: go steps: - attach_workspace: at: . - setup_remote_docker - run: name: Install Goreleaser command: | cd .. && \ wget https://github.com/goreleaser/goreleaser/releases/download/v0.104.1/goreleaser_Linux_x86_64.tar.gz && \ tar -xvf goreleaser_Linux_x86_64.tar.gz && \ ./goreleaser -v - run: name: Execute goreleaser command: CGO_ENABLED=${CGO_ENABLED:-0} ../goreleaser --snapshot --skip-publish --debug publishing: executor: go steps: - attach_workspace: at: . - setup_remote_docker - run: name: Install Goreleaser command: | cd .. && \ wget https://github.com/goreleaser/goreleaser/releases/download/v0.104.1/goreleaser_Linux_x86_64.tar.gz && \ tar -xvf goreleaser_Linux_x86_64.tar.gz && \ ./goreleaser -v - run: name: Login to docker hub command: | echo "$DOCKER_PASS" | docker login -u $DOCKER_USER --password-stdin - run: name: Execute goreleaser command: CGO_ENABLED=${CGO_ENABLED:-0} ../goreleaser --debug - run: name: Enable experimental docker features command: | mkdir -p ~/.docker/ && \ echo '{"experimental": "enabled"}' > ~/.docker/config.json - run: name: Create manifest for version command: | docker manifest create \ containrrr/watchtower:$(echo $CIRCLE_TAG | sed 's/^v*//') \ containrrr/watchtower:amd64-$(echo $CIRCLE_TAG | sed 's/^v*//') \ containrrr/watchtower:i386-$(echo $CIRCLE_TAG | sed 's/^v*//') \ containrrr/watchtower:armhf-$(echo $CIRCLE_TAG | sed 's/^v*//') \ containrrr/watchtower:arm64v8-$(echo $CIRCLE_TAG | sed 's/^v*//') - run: name: Annotate i386 version command: | docker manifest annotate \ containrrr/watchtower:$(echo $CIRCLE_TAG | sed 's/^v*//') \ containrrr/watchtower:i386-$(echo $CIRCLE_TAG | sed 's/^v*//') \ --os linux \ --arch 386 - run: name: Annotate ARM version command: | docker manifest annotate \ containrrr/watchtower:$(echo $CIRCLE_TAG | sed 's/^v*//') \ containrrr/watchtower:armhf-$(echo $CIRCLE_TAG | sed 's/^v*//') \ --os linux \ --arch arm - run: name: Annotate ARM64 version command: | docker manifest annotate \ containrrr/watchtower:$(echo $CIRCLE_TAG | sed 's/^v*//') \ containrrr/watchtower:arm64v8-$(echo $CIRCLE_TAG | sed 's/^v*//') \ --os linux \ --arch arm64 \ --variant v8 - run: name: Create manifest for latest command: | docker manifest create \ containrrr/watchtower:latest \ containrrr/watchtower:amd64-latest \ containrrr/watchtower:i386-latest \ containrrr/watchtower:armhf-latest \ containrrr/watchtower:arm64v8-latest - run: name: Annotate i386 latest command: | docker manifest annotate \ containrrr/watchtower:latest \ containrrr/watchtower:i386-latest \ --os linux \ --arch 386 - run: name: Annotate ARM latest command: | docker manifest annotate \ containrrr/watchtower:latest \ containrrr/watchtower:armhf-latest \ --os linux \ --arch arm - run: name: Annotate ARM64 latest command: | docker manifest annotate \ containrrr/watchtower:latest \ containrrr/watchtower:arm64v8-latest \ --os linux \ --arch arm64 \ --variant v8 - run: name: Push manifests to Dockerhub command: | echo "$DOCKER_PASS" | docker login -u $DOCKER_USER --password-stdin && docker manifest push containrrr/watchtower:$(echo $CIRCLE_TAG | sed 's/^v*//') && \ docker manifest push containrrr/watchtower:latest - run: name: Sync Readme to Dockerhub command: | docker pull lsiodev/readme-sync && \ docker run --rm=true \ -e DOCKERHUB_USERNAME=$DOCKER_USER \ -e DOCKERHUB_PASSWORD="$DOCKER_PASS" \ -e GIT_REPOSITORY=containrrr/watchtower \ -e DOCKER_REPOSITORY=containrrr/watchtower \ -e GIT_BRANCH=master \ lsiodev/readme-sync bash -c 'node sync' publish-docs: executor: py steps: - attach_workspace: at: . - run: name: Install prerequisites command: | sudo pip install \ mkdocs \ mkdocs-material \ md-toc - add_ssh_keys: fingerprints: - "91:75:47:15:b2:8e:85:e5:67:0e:63:7f:22:d2:b4:6e" - run: name: Generate and publish command: | mkdir ~/.ssh && touch ~/.ssh/known_hosts; ssh-keyscan -H github.com >> ~/.ssh/known_hosts && \ mkdocs gh-deploy