Consolidated all post-fork updates including dependency bumps and workflow changes

This commit is contained in:
dependabot[bot] 2023-10-04 12:17:38 +02:00 committed by Nick Fedor
parent 2abaa47fd3
commit 6b62d53797
No known key found for this signature in database
GPG key ID: A167CBEDE64D29CB
100 changed files with 1503 additions and 1264 deletions

View file

@ -5,7 +5,7 @@ import (
"os"
"regexp"
"github.com/containrrr/watchtower/pkg/types"
"github.com/nicholas-fedor/watchtower/pkg/types"
)
var dockerContainerPattern = regexp.MustCompile(`[0-9]+:.*:/docker/([a-f|0-9]{64})`)

View file

@ -3,21 +3,21 @@ package container
import (
"bytes"
"fmt"
"io/ioutil"
"io"
"strings"
"time"
"github.com/containrrr/watchtower/pkg/registry"
"github.com/containrrr/watchtower/pkg/registry/digest"
t "github.com/containrrr/watchtower/pkg/types"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/api/types/image"
"github.com/docker/docker/api/types/network"
sdkClient "github.com/docker/docker/client"
log "github.com/sirupsen/logrus"
"golang.org/x/net/context"
"github.com/nicholas-fedor/watchtower/pkg/registry"
"github.com/nicholas-fedor/watchtower/pkg/registry/digest"
t "github.com/nicholas-fedor/watchtower/pkg/types"
)
const defaultStopSignal = "SIGTERM"
@ -57,7 +57,6 @@ func NewClient(opts ClientOptions) Client {
// ClientOptions contains the options for how the docker client wrapper should behave
type ClientOptions struct {
PullImages bool
RemoveVolumes bool
IncludeStopped bool
ReviveStopped bool
@ -110,7 +109,7 @@ func (client dockerClient) ListContainers(fn t.Filter) ([]t.Container, error) {
filter := client.createListFilter()
containers, err := client.api.ContainerList(
bg,
types.ContainerListOptions{
container.ListOptions{
Filters: filter,
})
@ -207,7 +206,7 @@ func (client dockerClient) StopContainer(c t.Container, timeout time.Duration) e
} else {
log.Debugf("Removing container %s", shortID)
if err := client.api.ContainerRemove(bg, idStr, types.ContainerRemoveOptions{Force: true, RemoveVolumes: client.RemoveVolumes}); err != nil {
if err := client.api.ContainerRemove(bg, idStr, container.RemoveOptions{Force: true, RemoveVolumes: client.RemoveVolumes}); err != nil {
if sdkClient.IsErrNotFound(err) {
log.Debugf("Container %s not found, skipping removal.", shortID)
return nil
@ -304,7 +303,7 @@ func (client dockerClient) doStartContainer(bg context.Context, c t.Container, c
name := c.Name()
log.Debugf("Starting container %s (%s)", name, t.ContainerID(creation.ID).ShortID())
err := client.api.ContainerStart(bg, creation.ID, types.ContainerStartOptions{})
err := client.api.ContainerStart(bg, creation.ID, container.StartOptions{})
if err != nil {
return err
}
@ -399,7 +398,7 @@ func (client dockerClient) PullImage(ctx context.Context, container t.Container)
defer response.Close()
// the pull request will be aborted prematurely unless the response is read
if _, err = ioutil.ReadAll(response); err != nil {
if _, err = io.ReadAll(response); err != nil {
log.Error(err)
return err
}
@ -412,7 +411,7 @@ func (client dockerClient) RemoveImageByID(id t.ImageID) error {
items, err := client.api.ImageRemove(
context.Background(),
string(id),
types.ImageRemoveOptions{
image.RemoveOptions{
Force: true,
})
@ -445,7 +444,7 @@ func (client dockerClient) ExecuteCommand(containerID t.ContainerID, command str
clog := log.WithField("containerID", containerID)
// Create the exec
execConfig := types.ExecConfig{
execConfig := container.ExecOptions{
Tty: true,
Detach: false,
Cmd: []string{"sh", "-c", command},
@ -456,7 +455,7 @@ func (client dockerClient) ExecuteCommand(containerID t.ContainerID, command str
return false, err
}
response, attachErr := client.api.ContainerExecAttach(bg, exec.ID, types.ExecStartCheck{
response, attachErr := client.api.ContainerExecAttach(bg, exec.ID, container.ExecStartOptions{
Tty: true,
Detach: false,
})
@ -465,7 +464,7 @@ func (client dockerClient) ExecuteCommand(containerID t.ContainerID, command str
}
// Run the exec
execStartCheck := types.ExecStartCheck{Detach: false, Tty: true}
execStartCheck := container.ExecStartOptions{Detach: false, Tty: true}
err = client.api.ContainerExecStart(bg, exec.ID, execStartCheck)
if err != nil {
return false, err

View file

@ -1,13 +1,15 @@
package container
import (
"github.com/docker/docker/api/types/network"
"time"
"github.com/containrrr/watchtower/internal/util"
"github.com/containrrr/watchtower/pkg/container/mocks"
"github.com/containrrr/watchtower/pkg/filters"
t "github.com/containrrr/watchtower/pkg/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/network"
"github.com/nicholas-fedor/watchtower/internal/util"
"github.com/nicholas-fedor/watchtower/pkg/container/mocks"
"github.com/nicholas-fedor/watchtower/pkg/filters"
t "github.com/nicholas-fedor/watchtower/pkg/types"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/backend"
@ -70,7 +72,8 @@ var _ = Describe("the client", func() {
It("should gracefully fail with a useful message", func() {
c := dockerClient{}
pinnedContainer := MockContainer(WithImageName("sha256:fa5269854a5e615e51a72b17ad3fd1e01268f278a6684c8ed3c5f0cdce3f230b"))
c.PullImage(context.Background(), pinnedContainer)
err := c.PullImage(context.Background(), pinnedContainer)
Expect(err).To(MatchError(`container uses a pinned image, and cannot be updated by watchtower`))
})
})
})
@ -144,7 +147,7 @@ var _ = Describe("the client", func() {
mockServer.AppendHandlers(mocks.GetContainerHandlers(&mocks.Watchtower, &mocks.Running)...)
client := dockerClient{
api: docker,
ClientOptions: ClientOptions{PullImages: false},
ClientOptions: ClientOptions{},
}
containers, err := client.ListContainers(filters.NoFilter)
Expect(err).NotTo(HaveOccurred())
@ -158,7 +161,7 @@ var _ = Describe("the client", func() {
filter := filters.FilterByNames([]string{"lollercoaster"}, filters.NoFilter)
client := dockerClient{
api: docker,
ClientOptions: ClientOptions{PullImages: false},
ClientOptions: ClientOptions{},
}
containers, err := client.ListContainers(filter)
Expect(err).NotTo(HaveOccurred())
@ -171,11 +174,11 @@ var _ = Describe("the client", func() {
mockServer.AppendHandlers(mocks.GetContainerHandlers(&mocks.Watchtower, &mocks.Running)...)
client := dockerClient{
api: docker,
ClientOptions: ClientOptions{PullImages: false},
ClientOptions: ClientOptions{},
}
containers, err := client.ListContainers(filters.WatchtowerContainersFilter)
Expect(err).NotTo(HaveOccurred())
Expect(containers).To(ConsistOf(withContainerImageName(Equal("containrrr/watchtower:latest"))))
Expect(containers).To(ConsistOf(withContainerImageName(Equal("nickfedor/watchtower:latest"))))
})
})
When(`include stopped is enabled`, func() {
@ -184,7 +187,7 @@ var _ = Describe("the client", func() {
mockServer.AppendHandlers(mocks.GetContainerHandlers(&mocks.Stopped, &mocks.Watchtower, &mocks.Running)...)
client := dockerClient{
api: docker,
ClientOptions: ClientOptions{PullImages: false, IncludeStopped: true},
ClientOptions: ClientOptions{IncludeStopped: true},
}
containers, err := client.ListContainers(filters.NoFilter)
Expect(err).NotTo(HaveOccurred())
@ -197,7 +200,7 @@ var _ = Describe("the client", func() {
mockServer.AppendHandlers(mocks.GetContainerHandlers(&mocks.Watchtower, &mocks.Running, &mocks.Restarting)...)
client := dockerClient{
api: docker,
ClientOptions: ClientOptions{PullImages: false, IncludeRestarting: true},
ClientOptions: ClientOptions{IncludeRestarting: true},
}
containers, err := client.ListContainers(filters.NoFilter)
Expect(err).NotTo(HaveOccurred())
@ -210,7 +213,7 @@ var _ = Describe("the client", func() {
mockServer.AppendHandlers(mocks.GetContainerHandlers(&mocks.Watchtower, &mocks.Running)...)
client := dockerClient{
api: docker,
ClientOptions: ClientOptions{PullImages: false, IncludeRestarting: false},
ClientOptions: ClientOptions{IncludeRestarting: false},
}
containers, err := client.ListContainers(filters.NoFilter)
Expect(err).NotTo(HaveOccurred())
@ -224,7 +227,7 @@ var _ = Describe("the client", func() {
mockServer.AppendHandlers(mocks.GetContainerHandlers(&consumerContainerRef)...)
client := dockerClient{
api: docker,
ClientOptions: ClientOptions{PullImages: false},
ClientOptions: ClientOptions{},
}
container, err := client.GetContainer(consumerContainerRef.ContainerID())
Expect(err).NotTo(HaveOccurred())
@ -238,7 +241,7 @@ var _ = Describe("the client", func() {
mockServer.AppendHandlers(mocks.GetContainerHandlers(&consumerContainerRef)...)
client := dockerClient{
api: docker,
ClientOptions: ClientOptions{PullImages: false},
ClientOptions: ClientOptions{},
}
container, err := client.GetContainer(consumerContainerRef.ContainerID())
Expect(err).NotTo(HaveOccurred())
@ -253,7 +256,7 @@ var _ = Describe("the client", func() {
It("should include container id field", func() {
client := dockerClient{
api: docker,
ClientOptions: ClientOptions{PullImages: false},
ClientOptions: ClientOptions{},
}
// Capture logrus output in buffer
@ -269,7 +272,7 @@ var _ = Describe("the client", func() {
// API.ContainerExecCreate
ghttp.CombineHandlers(
ghttp.VerifyRequest("POST", HaveSuffix("containers/%v/exec", containerID)),
ghttp.VerifyJSONRepresenting(types.ExecConfig{
ghttp.VerifyJSONRepresenting(container.ExecOptions{
User: user,
Detach: false,
Tty: true,
@ -284,7 +287,7 @@ var _ = Describe("the client", func() {
// API.ContainerExecStart
ghttp.CombineHandlers(
ghttp.VerifyRequest("POST", HaveSuffix("exec/%v/start", execID)),
ghttp.VerifyJSONRepresenting(types.ExecStartCheck{
ghttp.VerifyJSONRepresenting(container.ExecStartOptions{
Detach: false,
Tty: true,
}),
@ -320,7 +323,7 @@ var _ = Describe("the client", func() {
It(`should omit the container ID alias`, func() {
client := dockerClient{
api: docker,
ClientOptions: ClientOptions{PullImages: false, IncludeRestarting: false},
ClientOptions: ClientOptions{IncludeRestarting: false},
}
container := MockContainer(WithImageName("docker.io/prefix/imagename:latest"))

View file

@ -7,8 +7,8 @@ import (
"strconv"
"strings"
"github.com/containrrr/watchtower/internal/util"
wt "github.com/containrrr/watchtower/pkg/types"
"github.com/nicholas-fedor/watchtower/internal/util"
wt "github.com/nicholas-fedor/watchtower/pkg/types"
"github.com/sirupsen/logrus"
"github.com/docker/docker/api/types"
@ -304,6 +304,29 @@ func (c Container) GetCreateConfig() *dockercontainer.Config {
}
}
// Clear HEALTHCHECK configuration (if default)
if config.Healthcheck != nil && imageConfig.Healthcheck != nil {
if util.SliceEqual(config.Healthcheck.Test, imageConfig.Healthcheck.Test) {
config.Healthcheck.Test = nil
}
if config.Healthcheck.Retries == imageConfig.Healthcheck.Retries {
config.Healthcheck.Retries = 0
}
if config.Healthcheck.Interval == imageConfig.Healthcheck.Interval {
config.Healthcheck.Interval = 0
}
if config.Healthcheck.Timeout == imageConfig.Healthcheck.Timeout {
config.Healthcheck.Timeout = 0
}
if config.Healthcheck.StartPeriod == imageConfig.Healthcheck.StartPeriod {
config.Healthcheck.StartPeriod = 0
}
}
config.Env = util.SliceSubtract(config.Env, imageConfig.Env)
config.Labels = util.StringMapSubtract(config.Labels, imageConfig.Labels)

View file

@ -21,7 +21,8 @@ func MockContainer(updates ...MockContainerUpdate) *Container {
},
}
image := types.ImageInspect{
ID: "image_id",
ID: "image_id",
Config: &dockerContainer.Config{},
}
for _, update := range updates {
@ -64,3 +65,15 @@ func WithContainerState(state types.ContainerState) MockContainerUpdate {
cnt.State = &state
}
}
func WithHealthcheck(healthConfig dockerContainer.HealthConfig) MockContainerUpdate {
return func(cnt *types.ContainerJSON, img *types.ImageInspect) {
cnt.Config.Healthcheck = &healthConfig
}
}
func WithImageHealthcheck(healthConfig dockerContainer.HealthConfig) MockContainerUpdate {
return func(cnt *types.ContainerJSON, img *types.ImageInspect) {
img.Config.Healthcheck = &healthConfig
}
}

View file

@ -1,7 +1,8 @@
package container
import (
"github.com/containrrr/watchtower/pkg/types"
"github.com/nicholas-fedor/watchtower/pkg/types"
dc "github.com/docker/docker/api/types/container"
"github.com/docker/go-connections/nat"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
@ -67,6 +68,93 @@ var _ = Describe("the container", func() {
})
})
})
Describe("GetCreateConfig", func() {
When("container healthcheck config is equal to image config", func() {
It("should return empty healthcheck values", func() {
c := MockContainer(WithHealthcheck(dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "1s"},
}), WithImageHealthcheck(dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "1s"},
}))
Expect(c.GetCreateConfig().Healthcheck).To(Equal(&dc.HealthConfig{}))
c = MockContainer(WithHealthcheck(dc.HealthConfig{
Timeout: 30,
}), WithImageHealthcheck(dc.HealthConfig{
Timeout: 30,
}))
Expect(c.GetCreateConfig().Healthcheck).To(Equal(&dc.HealthConfig{}))
c = MockContainer(WithHealthcheck(dc.HealthConfig{
StartPeriod: 30,
}), WithImageHealthcheck(dc.HealthConfig{
StartPeriod: 30,
}))
Expect(c.GetCreateConfig().Healthcheck).To(Equal(&dc.HealthConfig{}))
c = MockContainer(WithHealthcheck(dc.HealthConfig{
Retries: 30,
}), WithImageHealthcheck(dc.HealthConfig{
Retries: 30,
}))
Expect(c.GetCreateConfig().Healthcheck).To(Equal(&dc.HealthConfig{}))
})
})
When("container healthcheck config is different to image config", func() {
It("should return the container healthcheck values", func() {
c := MockContainer(WithHealthcheck(dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "1s"},
Interval: 30,
Timeout: 30,
StartPeriod: 10,
Retries: 2,
}), WithImageHealthcheck(dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "10s"},
Interval: 10,
Timeout: 60,
StartPeriod: 30,
Retries: 10,
}))
Expect(c.GetCreateConfig().Healthcheck).To(Equal(&dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "1s"},
Interval: 30,
Timeout: 30,
StartPeriod: 10,
Retries: 2,
}))
})
})
When("container healthcheck config is empty", func() {
It("should not panic", func() {
c := MockContainer(WithImageHealthcheck(dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "10s"},
Interval: 10,
Timeout: 60,
StartPeriod: 30,
Retries: 10,
}))
Expect(c.GetCreateConfig().Healthcheck).To(BeNil())
})
})
When("container image healthcheck config is empty", func() {
It("should not panic", func() {
c := MockContainer(WithHealthcheck(dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "1s"},
Interval: 30,
Timeout: 30,
StartPeriod: 10,
Retries: 2,
}))
Expect(c.GetCreateConfig().Healthcheck).To(Equal(&dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "1s"},
Interval: 30,
Timeout: 30,
StartPeriod: 10,
Retries: 2,
}))
})
})
})
When("asked for metadata", func() {
var c *Container
BeforeEach(func() {

View file

@ -3,16 +3,18 @@ package mocks
import (
"encoding/json"
"fmt"
"github.com/onsi/ginkgo"
"net/http"
"net/url"
"os"
"path/filepath"
"strings"
t "github.com/containrrr/watchtower/pkg/types"
"github.com/onsi/ginkgo"
t "github.com/nicholas-fedor/watchtower/pkg/types"
"github.com/docker/docker/api/types"
i "github.com/docker/docker/api/types/image"
"github.com/docker/docker/api/types/filters"
O "github.com/onsi/gomega"
"github.com/onsi/gomega/ghttp"
@ -262,12 +264,12 @@ func RemoveImageHandler(imagesWithParents map[string][]string) http.HandlerFunc
image := parts[len(parts)-1]
if parents, found := imagesWithParents[image]; found {
items := []types.ImageDeleteResponseItem{
items := []i.DeleteResponse{
{Untagged: image},
{Deleted: image},
}
for _, parent := range parents {
items = append(items, types.ImageDeleteResponseItem{Deleted: parent})
items = append(items, i.DeleteResponse{Deleted: parent})
}
ghttp.RespondWithJSONEncoded(http.StatusOK, items)(w, r)
} else {

View file

@ -4,7 +4,7 @@ import (
"fmt"
"os"
t "github.com/containrrr/watchtower/pkg/types"
t "github.com/nicholas-fedor/watchtower/pkg/types"
)
type imageRef struct {

View file

@ -30,9 +30,7 @@
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": [
"/var/run/docker.sock:/var/run/docker.sock"
],
"Binds": ["/var/run/docker.sock:/var/run/docker.sock"],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
@ -67,10 +65,7 @@
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"ConsoleSize": [0, 0],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
@ -155,12 +150,10 @@
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": null,
"Image": "containrrr/watchtower:latest",
"Image": "nickfedor/watchtower:latest",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"/watchtower"
],
"Entrypoint": ["/watchtower"],
"OnBuild": null,
"Labels": {
"com.centurylinklabs.watchtower": "true"

View file

@ -30,9 +30,7 @@
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": [
"/var/run/docker.sock:/var/run/docker.sock"
],
"Binds": ["/var/run/docker.sock:/var/run/docker.sock"],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
@ -67,10 +65,7 @@
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"ConsoleSize": [0, 0],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
@ -155,12 +150,10 @@
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": null,
"Image": "containrrr/watchtower:latest",
"Image": "nickfedor/watchtower:latest",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"/watchtower"
],
"Entrypoint": ["/watchtower"],
"OnBuild": null,
"Labels": {
"com.centurylinklabs.watchtower": "true"

View file

@ -30,9 +30,7 @@
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": [
"/var/run/docker.sock:/var/run/docker.sock"
],
"Binds": ["/var/run/docker.sock:/var/run/docker.sock"],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
@ -67,10 +65,7 @@
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"ConsoleSize": [0, 0],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
@ -155,12 +150,10 @@
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": null,
"Image": "containrrr/watchtower:latest",
"Image": "nickfedor/watchtower:latest",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"/watchtower"
],
"Entrypoint": ["/watchtower"],
"OnBuild": null,
"Labels": {
"com.centurylinklabs.watchtower": "true"

View file

@ -1,10 +1,8 @@
[
{
"Id": "ae8964ba86c7cd7522cf84e09781343d88e0e3543281c747d88b27e246578b65",
"Names": [
"/watchtower-stopped"
],
"Image": "containrrr/watchtower:latest",
"Names": ["/watchtower-stopped"],
"Image": "nickfedor/watchtower:latest",
"ImageID": "sha256:4dbc5f9c07028a985e14d1393e849ea07f68804c4293050d5a641b138db72daa",
"Command": "/watchtower",
"Created": 1554925882,
@ -49,10 +47,8 @@
},
{
"Id": "3d88e0e3543281c747d88b27e246578b65ae8964ba86c7cd7522cf84e0978134",
"Names": [
"/watchtower-running"
],
"Image": "containrrr/watchtower:latest",
"Names": ["/watchtower-running"],
"Image": "nickfedor/watchtower:latest",
"ImageID": "sha256:4dbc5f9c07028a985e14d1393e849ea07f68804c4293050d5a641b138db72daa",
"Command": "/watchtower",
"Created": 1554925882,
@ -97,9 +93,7 @@
},
{
"Id": "b978af0b858aa8855cce46b628817d4ed58e58f2c4f66c9b9c5449134ed4c008",
"Names": [
"/portainer"
],
"Names": ["/portainer"],
"Image": "portainer/portainer:latest",
"ImageID": "sha256:19d07168491a3f9e2798a9bed96544e34d57ddc4757a4ac5bb199dea896c87fd",
"Command": "/portainer",
@ -160,9 +154,7 @@
},
{
"Id": "ae8964ba86c7cd7522cf84e09781343d88e0e3543281c747d88b27e246578b67",
"Names": [
"/portainer"
],
"Names": ["/portainer"],
"Image": "portainer/portainer:latest",
"ImageID": "sha256:19d07168491a3f9e2798a9bed96544e34d57ddc4757a4ac5bb199dea896c87fd",
"Command": "/portainer",

View file

@ -1,8 +1,6 @@
{
"Id": "sha256:4dbc5f9c07028a985e14d1393e849ea07f68804c4293050d5a641b138db72daa",
"RepoTags": [
"containrrr/watchtower:latest"
],
"RepoTags": ["nickfedor/watchtower:latest"],
"RepoDigests": [],
"Parent": "sha256:2753b9621e0d76153e1725d0cea015baf0ae4d829782a463b4ea9532ec976447",
"Comment": "",
@ -21,18 +19,11 @@
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"ENTRYPOINT [\"/watchtower\"]"
],
"Cmd": ["/bin/sh", "-c", "#(nop) ", "ENTRYPOINT [\"/watchtower\"]"],
"Image": "sha256:2753b9621e0d76153e1725d0cea015baf0ae4d829782a463b4ea9532ec976447",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"/watchtower"
],
"Entrypoint": ["/watchtower"],
"OnBuild": null,
"Labels": {
"com.centurylinklabs.watchtower": "true"
@ -57,9 +48,7 @@
"Image": "sha256:2753b9621e0d76153e1725d0cea015baf0ae4d829782a463b4ea9532ec976447",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"/watchtower"
],
"Entrypoint": ["/watchtower"],
"OnBuild": null,
"Labels": {
"com.centurylinklabs.watchtower": "true"

View file

@ -1,7 +1,7 @@
package container_test
import (
wt "github.com/containrrr/watchtower/pkg/types"
wt "github.com/nicholas-fedor/watchtower/pkg/types"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)