|
|
|
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: /.*/
|
|
|
|
# - integration_testing:
|
|
|
|
# requires:
|
|
|
|
# - checkout
|
|
|
|
# filters:
|
|
|
|
# branches:
|
|
|
|
# only: /.*/
|
|
|
|
# tags:
|
|
|
|
# only: /.*/
|
|
|
|
- build:
|
|
|
|
requires:
|
|
|
|
- testing
|
|
|
|
# - integration_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 get -u github.com/haya14busa/goverage
|
|
|
|
- run: goverage -v -coverprofile=coverage.out ./...
|
|
|
|
- run: godacov -t $CODACY_TOKEN -r ./coverage.out -c $CIRCLE_SHA1
|
|
|
|
#integration_testing:
|
|
|
|
# executor: go
|
|
|
|
# steps:
|
|
|
|
# - attach_workspace:
|
|
|
|
# at: .
|
|
|
|
# - run: go build .
|
|
|
|
# - setup_remote_docker
|
|
|
|
# - run: ./scripts/lifecycle-tests.sh
|
|
|
|
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
|