You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
watchtower/.circleci/config.yml

239 lines
7.3 KiB
YAML

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