diff --git a/cmd/root.go b/cmd/root.go index 195b174..a162c6e 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -62,7 +62,7 @@ func Execute() { func PreRun(cmd *cobra.Command, args []string) { f := cmd.PersistentFlags() - if enabled, _ := f.GetBool("debug"); enabled == true { + if enabled, _ := f.GetBool("debug"); enabled { log.SetLevel(log.DebugLevel) } @@ -120,7 +120,10 @@ func Run(c *cobra.Command, names []string) { log.Fatal(err) } - runUpgradesOnSchedule(filter) + if err := runUpgradesOnSchedule(filter); err != nil { + log.Error(err) + } + os.Exit(1) } diff --git a/internal/actions/check.go b/internal/actions/check.go index df052c8..704d2d8 100644 --- a/internal/actions/check.go +++ b/internal/actions/check.go @@ -50,7 +50,7 @@ func cleanupExcessWatchtowers(containers []container.Container, client container continue } - if cleanup == true { + if cleanup { if err := client.RemoveImage(c); err != nil { // logging the original here as we're just returning a count logrus.Error(err) diff --git a/internal/actions/update.go b/internal/actions/update.go index a3cf928..e3be205 100644 --- a/internal/actions/update.go +++ b/internal/actions/update.go @@ -95,7 +95,9 @@ func restartStaleContainer(container container.Container, client container.Clien } if params.Cleanup { - client.RemoveImage(container) + if err := client.RemoveImage(container); err != nil { + log.Error(err) + } } } diff --git a/internal/flags/flags.go b/internal/flags/flags.go index d6b0cb1..645dcac 100644 --- a/internal/flags/flags.go +++ b/internal/flags/flags.go @@ -271,7 +271,7 @@ func setEnvOptStr(env string, opt string) error { } func setEnvOptBool(env string, opt bool) error { - if opt == true { + if opt { return setEnvOptStr(env, "1") } return nil diff --git a/main.go b/main.go index 193e249..9f8a012 100644 --- a/main.go +++ b/main.go @@ -1,17 +1,10 @@ -package main // import "github.com/containrrr/watchtower" +package main import ( "github.com/containrrr/watchtower/cmd" log "github.com/sirupsen/logrus" ) -// DockerAPIMinVersion is the version of the docker API, which is minimally required by -// watchtower. Currently we require at least API 1.24 and therefore Docker 1.12 or later. - -var version = "master" -var commit = "unknown" -var date = "unknown" - func init() { log.SetLevel(log.InfoLevel) } diff --git a/pkg/container/client.go b/pkg/container/client.go index b6abdd9..2aa6bc0 100644 --- a/pkg/container/client.go +++ b/pkg/container/client.go @@ -126,8 +126,8 @@ func (client dockerClient) StopContainer(c Container, timeout time.Duration) err } } - // Wait for container to exit, but proceed anyway after the timeout elapses - client.waitForStop(c, timeout) + // TODO: This should probably be checked. + _ = client.waitForStopOrTimeout(c, timeout) if c.containerInfo.HostConfig.AutoRemove { log.Debugf("AutoRemove container %s, skipping ContainerRemove call.", c.ID()) @@ -140,7 +140,7 @@ func (client dockerClient) StopContainer(c Container, timeout time.Duration) err } // Wait for container to be removed. In this case an error is a good thing - if err := client.waitForStop(c, timeout); err == nil { + if err := client.waitForStopOrTimeout(c, timeout); err == nil { return fmt.Errorf("Container %s (%s) could not be removed", c.Name(), c.ID()) } @@ -245,7 +245,9 @@ func (client dockerClient) IsContainerStale(c Container) (bool, error) { defer response.Close() // the pull request will be aborted prematurely unless the response is read - _, err = ioutil.ReadAll(response) + if _, err = ioutil.ReadAll(response); err != nil { + log.Error(err) + } } newImageInfo, _, err := client.api.ImageInspectWithRaw(bg, imageName) @@ -269,7 +271,7 @@ func (client dockerClient) RemoveImage(c Container) error { return err } -func (client dockerClient) waitForStop(c Container, waitTime time.Duration) error { +func (client dockerClient) waitForStopOrTimeout(c Container, waitTime time.Duration) error { bg := context.Background() timeout := time.After(waitTime) diff --git a/pkg/container/trust.go b/pkg/container/trust.go index 92ab696..63b76a6 100644 --- a/pkg/container/trust.go +++ b/pkg/container/trust.go @@ -48,6 +48,10 @@ func EncodedEnvAuth(ref string) (string, error) { // The docker config must be mounted on the container func EncodedConfigAuth(ref string) (string, error) { server, err := ParseServerAddress(ref) + if err != nil { + log.Errorf("Unable to parse the image ref %s", err) + return "", err + } configDir := os.Getenv("DOCKER_CONFIG") if configDir == "" { configDir = "/" @@ -58,7 +62,8 @@ func EncodedConfigAuth(ref string) (string, error) { return "", err } credStore := CredentialsStore(*configFile) - auth, err := credStore.Get(server) // returns (types.AuthConfig{}) if server not in credStore + auth, _ := credStore.Get(server) // returns (types.AuthConfig{}) if server not in credStore + if auth == (types.AuthConfig{}) { log.Debugf("No credentials for %s in %s", server, configFile.Filename) return "", nil