diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..82031be --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,116 @@ +version: 2.1 + +executors: + 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: + tags: + ignore: /^v[0-9]+(\.[0-9]+)*$/ + branches: + only: /.*/ + - publishing: + 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: mkdir -p /tmp/test-results + - run: go build ./... + - run: go get gotest.tools/gotestsum + - run: gotestsum --junitfile /tmp/test-results/unit-tests.xml + - store_test_results: + path: /tmp/test-results + 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: ../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 \ No newline at end of file diff --git a/.gitignore b/.gitignore index e43f117..79e0afc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ watchtower vendor .glide -dist \ No newline at end of file +dist +.idea \ No newline at end of file diff --git a/actions/update.go b/actions/update.go index 4f1e307..e631b1a 100644 --- a/actions/update.go +++ b/actions/update.go @@ -4,12 +4,12 @@ import ( "math/rand" "time" - log "github.com/sirupsen/logrus" "github.com/containrrr/watchtower/container" + log "github.com/sirupsen/logrus" ) var ( - letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") + letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") ) // Update looks at the running Docker containers to see if any of the images @@ -45,6 +45,7 @@ func Update(client container.Client, filter container.Filter, cleanup bool, noRe container := containers[i] if container.IsWatchtower() { + log.Debugf("This is the watchtower container %s", containers[i].Name()) continue } diff --git a/circle.yml b/circle.yml deleted file mode 100644 index 6cbcc39..0000000 --- a/circle.yml +++ /dev/null @@ -1,28 +0,0 @@ -version: 2 -jobs: - build: - docker: - - image: v2tec/gobuilder:0.5.0_go1.7.4-glide0.12.3-goreleaser0.59.0-docker17.05.0 - working_directory: /src - steps: - - checkout - - setup_remote_docker: - version: 17.05.0-ce - - run: git fetch --tags - - run: | - docker login -u $DOCKER_USER -p $DOCKER_PASS - IS_RELEASE=$(if [ "$CIRCLE_TAG" != "" ] ; then echo release; else echo ci; fi;) - /build.sh $IS_RELEASE || exit 1 - chmod 755 /src/dockerfile/push_containers.sh - if [ "$CIRCLE_TAG" != "" ] ; then /src/dockerfile/push_containers.sh $CIRCLE_TAG; fi; - - - store_artifacts: - path: /src/dist/ -workflows: - version: 2 - build-deploy: - jobs: - - build: - filters: - tags: - only: /.*/ \ No newline at end of file diff --git a/container/client.go b/container/client.go index 476e3ca..47e4776 100644 --- a/container/client.go +++ b/container/client.go @@ -187,6 +187,8 @@ func (client dockerClient) IsContainerStale(c Container) (bool, error) { var opts types.ImagePullOptions // ImagePullOptions can take a RegistryAuth arg to authenticate against a private registry auth, err := EncodedAuth(imageName) + log.Infof("Got auth value: %s", auth) + log.Infof("Got image name: %s", imageName) if err != nil { log.Debugf("Error loading authentication credentials %s", err) return false, err diff --git a/container/container.go b/container/container.go index 7453507..7c4d948 100644 --- a/container/container.go +++ b/container/container.go @@ -4,7 +4,7 @@ import ( "fmt" "strconv" "strings" - + log "github.com/sirupsen/logrus" "github.com/docker/docker/api/types" dockercontainer "github.com/docker/docker/api/types/container" ) @@ -102,8 +102,9 @@ func (c Container) Links() []string { // identified by the presence of the "com.centurylinklabs.watchtower" label in // the container metadata. func (c Container) IsWatchtower() bool { - val, ok := c.containerInfo.Config.Labels[watchtowerLabel] - return ok && val == "true" + log.Debugf("Checking if %s is a watchtower instance.", c.Name()) + wasWatchtower := ContainsWatchtowerLabel(c.containerInfo.Config.Labels) + return wasWatchtower } // StopSignal returns the custom stop signal (if any) that is encoded in the @@ -182,3 +183,10 @@ func (c Container) hostConfig() *dockercontainer.HostConfig { return hostConfig } + +// ContainsWatchtowerLabel takes a map of labels and values and tells +// the consumer whether it contains a valid watchtower instance label +func ContainsWatchtowerLabel(labels map[string]string) bool { + val, ok := labels[watchtowerLabel] + return ok && val == "true" +} \ No newline at end of file diff --git a/container/container_test.go b/container/container_test.go new file mode 100644 index 0000000..e3a7f94 --- /dev/null +++ b/container/container_test.go @@ -0,0 +1,25 @@ +package container + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestContainsWatchtowerLabel_ShouldReturnTrueIfTheWatchtowerLabelExistsOnTheContainer(t *testing.T) { + labelMap := map[string]string { + "com.centurylinklabs.watchtower": "true", + } + assert.True(t, ContainsWatchtowerLabel(labelMap)) +} + +func TestContainsWatchtowerLabel_ShouldReturnFalseIfTheWatchtowerLabelDoesntExistOnTheContainer(t *testing.T) { + labelMap := map[string]string { + "com.containrrr.watchtower": "lost", + } + assert.False(t, ContainsWatchtowerLabel(labelMap)) +} + +func TestContainsWatchtowerLabel_ShouldReturnFalseIfLabelsIsEmpty(t *testing.T) { + labelMap := map[string]string {} + assert.False(t, ContainsWatchtowerLabel(labelMap)) +} diff --git a/container/trust.go b/container/trust.go index e388302..92ab696 100644 --- a/container/trust.go +++ b/container/trust.go @@ -5,12 +5,12 @@ import ( "os" "strings" + "github.com/docker/cli/cli/command" + cliconfig "github.com/docker/cli/cli/config" + "github.com/docker/cli/cli/config/configfile" + "github.com/docker/cli/cli/config/credentials" + "github.com/docker/distribution/reference" "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/reference" - "github.com/docker/docker/cli/command" - "github.com/docker/docker/cliconfig" - "github.com/docker/docker/cliconfig/configfile" - "github.com/docker/docker/cliconfig/credentials" log "github.com/sirupsen/logrus" ) @@ -67,12 +67,15 @@ func EncodedConfigAuth(ref string) (string, error) { return EncodeAuth(auth) } +// ParseServerAddress extracts the server part from a container image ref func ParseServerAddress(ref string) (string, error) { - repository, _, err := reference.Parse(ref) + + parsedRef, err := reference.Parse(ref) if err != nil { return ref, err } - parts := strings.Split(repository, "/") + + parts := strings.Split(parsedRef.String(), "/") return parts[0], nil } diff --git a/container/trust_test.go b/container/trust_test.go new file mode 100644 index 0000000..481ce64 --- /dev/null +++ b/container/trust_test.go @@ -0,0 +1,60 @@ +package container + +import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestEncodedEnvAuth_ShouldReturnAnErrorIfRepoEnvsAreUnset(t *testing.T) { + os.Unsetenv("REPO_USER") + os.Unsetenv("REPO_PASS") + _, err := EncodedEnvAuth("") + assert.Error(t, err) +} +func TestEncodedEnvAuth_ShouldReturnAuthHashIfRepoEnvsAreSet(t *testing.T) { + expectedHash := "eyJ1c2VybmFtZSI6ImNvbnRhaW5ycnItdXNlciIsInBhc3N3b3JkIjoiY29udGFpbnJyci1wYXNzIn0=" + + os.Setenv("REPO_USER", "containrrr-user") + os.Setenv("REPO_PASS", "containrrr-pass") + config, _ := EncodedEnvAuth("") + + assert.Equal(t, config, expectedHash) +} + +func TestEncodedConfigAuth_ShouldReturnAnErrorIfFileIsNotPresent(t *testing.T) { + os.Setenv("DOCKER_CONFIG", "/dev/null/should-fail") + _, err := EncodedConfigAuth("") + assert.Error(t, err) +} + +/* + * TODO: + * This part only confirms that it still works in the same way as it did + * with the old version of the docker api client sdk. I'd say that + * ParseServerAddress likely needs to be elaborated a bit to default to + * dockerhub in case no server address was provided. + * + * ++ @simskij, 2019-04-04 + */ + +func TestParseServerAddress_ShouldReturnErrorIfPassedEmptyString(t *testing.T) { + _, err := ParseServerAddress("") + assert.Error(t, err) +} + +func TestParseServerAddress_ShouldReturnTheRepoNameIfPassedAFullyQualifiedImageName(t *testing.T) { + val, _ := ParseServerAddress("github.com/containrrrr/config") + assert.Equal(t, val, "github.com") +} + +func TestParseServerAddress_ShouldReturnTheOrganizationPartIfPassedAnImageNameMissingServerName(t *testing.T) { + val, _ := ParseServerAddress("containrrr/config") + assert.Equal(t, val, "containrrr") +} + +func TestParseServerAddress_ShouldReturnTheServerNameIfPassedAFullyQualifiedImageName(t *testing.T) { + val, _ := ParseServerAddress("github.com/containrrrr/config") + assert.Equal(t, val, "github.com") +} diff --git a/dockerfile/push_containers.sh b/dockerfile/push_containers.sh deleted file mode 100644 index d231f87..0000000 --- a/dockerfile/push_containers.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash - -PROGNAME=$(basename $0) -VERSION_BUILD=$1 - -function error_exit -{ - echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2 - exit 1 -} - -if [ "$1" = "" ]; then - error_exit "Please provide version as first argument." -fi - -SEMVER=${VERSION_BUILD#*v} -VERSION=`echo $SEMVER | awk '{split($0,a,"."); print a[1]}'` -BUILD=`echo $SEMVER | awk '{split($0,a,"."); print a[2]}'` -PATCH=`echo $SEMVER | awk '{split($0,a,"."); print a[3]}'` - -if [ "${VERSION}" = "" ]; then - echo "Please provide a semantic version." - exit 1 -fi - -if [ "${BUILD}" = "" ]; then - BUILD='0' -fi - -if [ "${PATCH}" = "" ]; then - PATCH='0' -fi - -push_docker() { - echo " -> push $1 $2" - docker tag $1 $2 || exit 1 - docker push $2 || exit 1 -} - -push_all() { - IMAGE_NAME_VERSION=${1}${VERSION}.${BUILD}.${PATCH} - echo "Pulling $IMAGE_NAME_VERSION..." - docker pull ${IMAGE_NAME_VERSION} || exit 1 - echo "Pushing $IMAGE_NAME_VERSION..." - push_docker ${IMAGE_NAME_VERSION} ${1}${VERSION}.${BUILD} - push_docker ${IMAGE_NAME_VERSION} ${1}${VERSION} - push_docker ${IMAGE_NAME_VERSION} ${1}latest -} - -IMAGE_NAME=containrrr/watchtower -push_all ${IMAGE_NAME}: -push_all ${IMAGE_NAME}:armhf- -push_all ${IMAGE_NAME}:arm64v8- diff --git a/glide.lock b/glide.lock deleted file mode 100644 index a4dcf44..0000000 --- a/glide.lock +++ /dev/null @@ -1,193 +0,0 @@ -hash: 23bcd62f9352c61d3aebc85a59f7ebbfaf80bc0201f45037cdea65820673ddeb -updated: 2018-03-01T13:21:55.8472118+01:00 -imports: -- name: github.com/Azure/go-ansiterm - version: 388960b655244e76e24c75f48631564eaefade62 - subpackages: - - winterm -- name: github.com/davecgh/go-spew - version: 6d212800a42e8ab5c146b8ace3490ee17e5225f9 - subpackages: - - spew -- name: github.com/docker/distribution - version: 28602af35aceda2f8d571bad7ca37a54cf0250bc - subpackages: - - context - - digest - - reference - - registry/api/errcode - - registry/api/v2 - - registry/client - - registry/client/auth - - registry/client/auth/challenge - - registry/client/transport - - registry/storage/cache - - registry/storage/cache/memory - - uuid -- name: github.com/docker/docker - version: 092cba3727bb9b4a2f0e922cd6c0f93ea270e363 - subpackages: - - api - - api/server/httputils - - api/types - - api/types/blkiodev - - api/types/container - - api/types/events - - api/types/filters - - api/types/mount - - api/types/network - - api/types/reference - - api/types/registry - - api/types/strslice - - api/types/swarm - - api/types/time - - api/types/versions - - api/types/volume - - cli/command - - cli/flags - - cliconfig - - cliconfig/configfile - - cliconfig/credentials - - client - - daemon/graphdriver - - dockerversion - - image - - image/v1 - - layer - - oci - - opts - - pkg/archive - - pkg/chrootarchive - - pkg/fileutils - - pkg/homedir - - pkg/httputils - - pkg/idtools - - pkg/ioutils - - pkg/jsonlog - - pkg/jsonmessage - - pkg/longpath - - pkg/mount - - pkg/parsers/kernel - - pkg/plugingetter - - pkg/plugins - - pkg/plugins/transport - - pkg/pools - - pkg/promise - - pkg/random - - pkg/reexec - - pkg/stringid - - pkg/system - - pkg/tarsum - - pkg/term - - pkg/term/windows - - pkg/tlsconfig - - pkg/useragent - - plugin/v2 - - reference - - registry -- name: github.com/docker/docker-credential-helpers - version: f72c04f1d8e71959a6d103f808c50ccbad79b9fd - subpackages: - - client - - credentials -- name: github.com/docker/go-connections - version: ecb4cb2dd420ada7df7f2593d6c25441f65f69f2 - subpackages: - - nat - - sockets - - tlsconfig -- name: github.com/docker/go-units - version: 8a7beacffa3009a9ac66bad506b18ffdd110cf97 -- name: github.com/docker/libtrust - version: 9cbd2a1374f46905c68a4eb3694a130610adc62a -- name: github.com/golang/protobuf - version: 1f49d83d9aa00e6ce4fc8258c71cc7786aec968a - subpackages: - - proto -- name: github.com/gorilla/context - version: 1ea25387ff6f684839d82767c1733ff4d4d15d0a -- name: github.com/gorilla/mux - version: 0eeaf8392f5b04950925b8a69fe70f110fa7cbfc -- name: github.com/inconshreveable/mousetrap - version: 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75 -- name: github.com/johntdyer/slack-go - version: 95fac1160b220c5abcf8b0ef88e9c3cb213c09f4 -- name: github.com/johntdyer/slackrus - version: 3992f319fd0ac349483279ef74742cd787841cba -- name: github.com/mattn/go-shellwords - version: f4e566c536cf69158e808ec28ef4182a37fdc981 -- name: github.com/Microsoft/go-winio - version: fff283ad5116362ca252298cfc9b95828956d85d -- name: github.com/opencontainers/runc - version: 9df8b306d01f59d3a8029be411de015b7304dd8f - repo: https://github.com/docker/runc.git - subpackages: - - libcontainer/configs - - libcontainer/devices - - libcontainer/system - - libcontainer/user -- name: github.com/opencontainers/runtime-spec - version: 1c7c27d043c2a5e513a44084d2b10d77d1402b8c - subpackages: - - specs-go -- name: github.com/pkg/errors - version: 839d9e913e063e28dfd0e6c7b7512793e0a48be9 -- name: github.com/pmezard/go-difflib - version: d8ed2627bdf02c080bf22230dbb337003b7aba2d - subpackages: - - difflib -- name: github.com/robfig/cron - version: 9585fd555638e77bba25f25db5c44b41f264aeb7 -- name: github.com/Sirupsen/logrus - version: ba1b36c82c5e05c4f912a88eab0dcd91a171688f - repo: https://github.com/sirupsen/logrus.git -- name: github.com/sirupsen/logrus - version: ba1b36c82c5e05c4f912a88eab0dcd91a171688f -- name: github.com/spf13/cobra - version: a3c09249f1a24a9d951f2738fb9b9256b8b42fa5 - repo: https://github.com/dnephin/cobra.git -- name: github.com/spf13/pflag - version: dabebe21bf790f782ea4c7bbd2efc430de182afd -- name: github.com/stretchr/objx - version: cbeaeb16a013161a98496fad62933b1d21786672 -- name: github.com/stretchr/testify - version: 69483b4bd14f5845b5a1e55bca19e954e827f1d0 - subpackages: - - assert - - mock -- name: github.com/urfave/cli - version: 0bdeddeeb0f650497d603c4ad7b20cfe685682f6 -- name: github.com/vbatts/tar-split - version: d3f1b54304d656376e58f9406a9cb4775799a357 - subpackages: - - archive/tar - - tar/asm - - tar/storage -- name: golang.org/x/net - version: 2beffdc2e92c8a3027590f898fe88f69af48a3f8 - repo: https://github.com/tonistiigi/net.git - subpackages: - - context - - context/ctxhttp - - http2 - - http2/hpack - - internal/timeseries - - proxy - - trace -- name: golang.org/x/sys - version: 8f0908ab3b2457e2e15403d3697c9ef5cb4b57a9 - subpackages: - - unix - - windows -- name: google.golang.org/grpc - version: b1a2821ca5a4fd6b6e48ddfbb7d6d7584d839d21 - subpackages: - - codes - - credentials - - grpclog - - internal - - metadata - - naming - - peer - - transport -testImports: [] diff --git a/glide.yaml b/glide.yaml deleted file mode 100644 index bd9ed6d..0000000 --- a/glide.yaml +++ /dev/null @@ -1,33 +0,0 @@ -package: github.com/containrrr/watchtower -import: -- package: github.com/sirupsen/logrus - version: ~0.11.x -- package: github.com/Sirupsen/logrus - repo: https://github.com/sirupsen/logrus.git - version: ~0.11.x -- package: github.com/docker/docker - version: ~1.13.x - subpackages: - - api/types - - api/types/container - - api/types/network - - api/types/reference - - cli/command - - cliconfig - - cliconfig/configfile - - cliconfig/credentials - - client -- package: github.com/stretchr/testify - version: ~1.1.4 - subpackages: - - mock -- package: github.com/urfave/cli - version: ~1.19.1 -- package: golang.org/x/net - repo: https://github.com/tonistiigi/net.git - subpackages: - - context -- package: github.com/robfig/cron - version: 9585fd555638e77bba25f25db5c44b41f264aeb7 -- package: github.com/johntdyer/slackrus - version: 3992f31 diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..005ed9b --- /dev/null +++ b/go.mod @@ -0,0 +1,53 @@ +module github.com/containrrr/watchtower + +go 1.12 + +require ( + github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 + github.com/Microsoft/go-winio v0.4.12 + github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 + github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 + github.com/containerd/continuity v0.0.0-20181203112020-004b46473808 + github.com/davecgh/go-spew v1.1.1 + github.com/docker/cli v0.0.0-20190327152802-57b27434ea29 + github.com/docker/distribution v2.7.1+incompatible + github.com/docker/docker v0.0.0-20190404075923-dbe4a30928d4 + github.com/docker/docker-credential-helpers v0.6.1 + github.com/docker/go v1.5.1-1 + github.com/docker/go-connections v0.4.0 + github.com/docker/go-metrics v0.0.0-20181218153428-b84716841b82 + github.com/docker/go-units v0.3.3 + github.com/gogo/protobuf v1.2.1 + github.com/golang/protobuf v1.3.1 + github.com/gorilla/mux v1.7.0 + github.com/hashicorp/go-version v1.1.0 + github.com/inconshreveable/mousetrap v1.0.0 + github.com/johntdyer/slack-go v0.0.0-20180213144715-95fac1160b22 + github.com/johntdyer/slackrus v0.0.0-20180518184837-f7aae3243a07 + github.com/konsorten/go-windows-terminal-sequences v1.0.2 + github.com/matttproud/golang_protobuf_extensions v1.0.1 + github.com/miekg/pkcs11 v0.0.0-20190401114359-553cfdd26aaa + github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c + github.com/opencontainers/go-digest v1.0.0-rc1 + github.com/opencontainers/image-spec v1.0.1 + github.com/opencontainers/runc v0.1.1 + github.com/pkg/errors v0.8.1 + github.com/pmezard/go-difflib v1.0.0 + github.com/prometheus/client_golang v0.9.2 + github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 + github.com/prometheus/common v0.2.0 + github.com/prometheus/procfs v0.0.0-20190403104016-ea9eea638872 + github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967 + github.com/sirupsen/logrus v1.4.1 + github.com/spf13/cobra v0.0.3 + github.com/spf13/pflag v1.0.3 + github.com/stretchr/objx v0.1.1 + github.com/stretchr/testify v1.3.0 + github.com/theupdateframework/notary v0.6.1 + github.com/urfave/cli v1.20.0 + golang.org/x/crypto v0.0.0-20190403202508-8e1b8d32e692 + golang.org/x/net v0.0.0-20190403144856-b630fd6fe46b + golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e + google.golang.org/genproto v0.0.0-20190401181712-f467c93bbac2 + google.golang.org/grpc v1.19.1 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..b7346ab --- /dev/null +++ b/go.sum @@ -0,0 +1,148 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Microsoft/go-winio v0.4.12 h1:xAfWHN1IrQ0NJ9TBC0KBZoqLjzDTr1ML+4MywiUOryc= +github.com/Microsoft/go-winio v0.4.12/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 h1:w1UutsfOrms1J05zt7ISrnJIXKzwaspym5BTKGx93EI= +github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/containerd/continuity v0.0.0-20181203112020-004b46473808 h1:4BX8f882bXEDKfWIf0wa8HRvpnBoPszJJXL+TVbBw4M= +github.com/containerd/continuity v0.0.0-20181203112020-004b46473808/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docker/cli v0.0.0-20190327152802-57b27434ea29 h1:ciaXDHaWQda0nvevWqcjtXX/buQY3e0lga1vq8Batq0= +github.com/docker/cli v0.0.0-20190327152802-57b27434ea29/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.0.0-20190404075923-dbe4a30928d4 h1:34LfsqlE2kEvmGP9qbRoPvOWkmluYGzmlvWVTzwvT0A= +github.com/docker/docker v0.0.0-20190404075923-dbe4a30928d4/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.6.1 h1:Dq4iIfcM7cNtddhLVWe9h4QDjsi4OER3Z8voPu/I52g= +github.com/docker/docker-credential-helpers v0.6.1/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/go v1.5.1-1 h1:hr4w35acWBPhGBXlzPoHpmZ/ygPjnmFVxGxxGnMyP7k= +github.com/docker/go v1.5.1-1/go.mod h1:CADgU4DSXK5QUlFslkQu2yW2TKzFZcXq/leZfM0UH5Q= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-metrics v0.0.0-20181218153428-b84716841b82 h1:X0fj836zx99zFu83v/M79DuBn84IL/Syx1SY6Y5ZEMA= +github.com/docker/go-metrics v0.0.0-20181218153428-b84716841b82/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= +github.com/docker/go-units v0.3.3 h1:Xk8S3Xj5sLGlG5g67hJmYMmUgXv5N4PhkjJHHqrwnTk= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U= +github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/hashicorp/go-version v1.1.0 h1:bPIoEKD27tNdebFGGxxYwcL4nepeY4j1QP23PFRGzg0= +github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/johntdyer/slack-go v0.0.0-20180213144715-95fac1160b22 h1:jKUP9TQ0c7X3w6+IPyMit07RE42MtTWNd77sN2cHngQ= +github.com/johntdyer/slack-go v0.0.0-20180213144715-95fac1160b22/go.mod h1:u0Jo4f2dNlTJeeOywkM6bLwxq6gC3pZ9rEFHn3AhTdk= +github.com/johntdyer/slackrus v0.0.0-20180518184837-f7aae3243a07 h1:+kBG/8rjCa6vxJZbUjAiE4MQmBEBYc8nLEb51frnvBY= +github.com/johntdyer/slackrus v0.0.0-20180518184837-f7aae3243a07/go.mod h1:j1kV/8f3jowErEq4XyeypkCdvg5EeHkf0YCKCcq5Ybo= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/pkcs11 v0.0.0-20190401114359-553cfdd26aaa/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c h1:nXxl5PrvVm2L/wCy8dQu6DMTwH4oIuGN8GJDAlqDdVE= +github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y= +github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.2 h1:awm861/B8OKDd2I/6o1dy3ra4BamzKhYOiGItCeZ740= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0 h1:kUZDBDTdBVBYBj5Tmh2NZLlF60mfjA27rM34b+cVwNU= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190403104016-ea9eea638872 h1:0aNv3xC7DmQoy1/x1sMh18g+fihWW68LL13i8ao9kl4= +github.com/prometheus/procfs v0.0.0-20190403104016-ea9eea638872/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967 h1:x7xEyJDP7Hv3LVgvWhzioQqbC/KtuUhTigKlH/8ehhE= +github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/theupdateframework/notary v0.6.1 h1:7wshjstgS9x9F5LuB1L5mBI2xNMObWqjz+cjWoom6l0= +github.com/theupdateframework/notary v0.6.1/go.mod h1:MOfgIfmox8s7/7fduvB2xyPPMJCrjRLRizA8OFwpnKY= +github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190403202508-8e1b8d32e692 h1:GRhHqDOgeDr6QDTtq9gn2O4iKvm5dsbfqD/TXb0KLX0= +golang.org/x/crypto v0.0.0-20190403202508-8e1b8d32e692/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190403144856-b630fd6fe46b h1:/zjbcJPEGAyu6Is/VBOALsgdi4z9+kz/Vtdm6S+beD0= +golang.org/x/net v0.0.0-20190403144856-b630fd6fe46b/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e h1:nFYrTHrdrAOpShe27kaFHjsqYSEQ0KWqdWLu3xuZJts= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190401181712-f467c93bbac2 h1:8FyEBtGg6Px24p+H2AkuVWqhj4+R9fo+fZD17mg+lzk= +google.golang.org/genproto v0.0.0-20190401181712-f467c93bbac2/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM= +google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/goreleaser.yml b/goreleaser.yml index c0ea4c3..20c763e 100644 --- a/goreleaser.yml +++ b/goreleaser.yml @@ -1,39 +1,16 @@ -# Build customization build: - # Path to main.go file. - # Default is `main.go` main: ./main.go - - # GOOS list to build in. - # For more info refer to https://golang.org/doc/install/source#environment - # Defaults are darwin and linux + binary: watchtower goos: - linux - windows - - # GOARCH to build in. - # For more info refer to https://golang.org/doc/install/source#environment - # Defaults are 386 and amd64 goarch: - amd64 - arm - arm64 - -# Archive customization archive: - # You can change the name of the archive. - # This is parsed with Golang template engine and the following variables. name_template: "{{.ProjectName}}_{{.Os}}_{{.Arch}}" - - # Archive format. Valid options are `tar.gz` and `zip`. - # Default is `zip` format: tar.gz - - # Replacements for GOOS and GOARCH on the archive name. - # The keys should be valid GOOS or GOARCH values followed by your custom - # replacements. - # By default, `replacements` replace GOOS and GOARCH values with valid outputs - # of `uname -s` and `uname -m` respectively. replacements: arm: armhf arm64: arm64v8 @@ -41,42 +18,42 @@ archive: 386: 386 darwin: macOS linux: linux - format_overrides: - goos: windows format: zip - - # Additional files you want to add to the archive. - # Defaults are any files matching `LICENCE*`, `LICENSE*`, - # `README*` and `CHANGELOG*` (case-insensitive) files: - LICENSE.md - dockers: - goos: linux goarch: amd64 goarm: '' - binary: watchtower - image: containrrr/watchtower dockerfile: dockerfile/amd64/Dockerfile - tag_templates: - - '{{ .Version }}' + build_flag_templates: + - "--label=com.centurylinklabs.watchtower=true" + image_templates: + - containrrr/watchtower:{{ .Version }} + binaries: + - watchtower - goos: linux goarch: arm goarm: 6 - binary: watchtower - image: containrrr/watchtower dockerfile: dockerfile/armhf/Dockerfile - tag_templates: - - 'armhf-{{ .Version }}' + build_flag_templates: + - "--label=com.centurylinklabs.watchtower=true" + image_templates: + - containrrr/watchtower:armhf-{{ .Version }} + binaries: + - watchtower - goos: linux goarch: arm64 goarm: '' - binary: watchtower - image: containrrr/watchtower dockerfile: dockerfile/arm64v8/Dockerfile - tag_templates: - - 'arm64v8-{{ .Version }}' + build_flag_templates: + - "--label=com.centurylinklabs.watchtower=true" + image_templates: + - containrrr/watchtower:arm64v8-{{ .Version }} + binaries: + - watchtower \ No newline at end of file diff --git a/notifications/smtp.go b/notifications/smtp.go index d0f07f8..82954bc 100644 --- a/notifications/smtp.go +++ b/notifications/smtp.go @@ -1,3 +1,4 @@ +// Package notifications ... // Copyright 2010 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license.