Skip to content
This repository was archived by the owner on Mar 27, 2024. It is now read-only.

Commit e4a55a7

Browse files
authored
Merge pull request #229 from nkubala/registry
Switch from containers/image to go-containerregistry
2 parents 5f6f6ae + e197d50 commit e4a55a7

File tree

424 files changed

+10648
-55703
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

424 files changed

+10648
-55703
lines changed

Gopkg.lock

Lines changed: 19 additions & 73 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gopkg.toml

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,5 @@
3737
version = "1.0.4"
3838

3939
[[constraint]]
40-
name = "github.com/docker/distribution"
41-
branch = "master"
42-
43-
[[constraint]]
44-
name = "github.com/containers/image"
45-
revision = "495da41bd26c50be62fa07ae903ea2ee54c00283"
46-
47-
[[constraint]]
48-
branch = "master"
49-
name = "github.com/mitchellh/go-homedir"
40+
name = "github.com/google/go-containerregistry"
41+
revision = "9a6a2b004c1a6d2c946acc52af194d85b882f8c6"

cmd/BUILD.bazel

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ go_library(
1313
deps = [
1414
"//cmd/util/output:go_default_library",
1515
"//differs:go_default_library",
16-
"//pkg/cache:go_default_library",
1716
"//pkg/util:go_default_library",
1817
"//util:go_default_library",
19-
"//vendor/github.com/containers/image/docker:go_default_library",
20-
"//vendor/github.com/docker/docker/client:go_default_library",
21-
"//vendor/github.com/mitchellh/go-homedir:go_default_library",
18+
"//vendor/github.com/google/go-containerregistry/authn:go_default_library",
19+
"//vendor/github.com/google/go-containerregistry/name:go_default_library",
20+
"//vendor/github.com/google/go-containerregistry/v1:go_default_library",
21+
"//vendor/github.com/google/go-containerregistry/v1/daemon:go_default_library",
22+
"//vendor/github.com/google/go-containerregistry/v1/remote:go_default_library",
23+
"//vendor/github.com/google/go-containerregistry/v1/tarball:go_default_library",
2224
"//vendor/github.com/sirupsen/logrus:go_default_library",
2325
"//vendor/github.com/spf13/cobra:go_default_library",
2426
"//vendor/github.com/spf13/pflag:go_default_library",

cmd/analyze.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,11 @@ func analyzeImage(imageName string, analyzerArgs []string) error {
5959
return err
6060
}
6161

62-
cli, err := pkgutil.NewClient()
63-
if err != nil {
64-
return fmt.Errorf("Error getting docker client: %s", err)
65-
}
66-
defer cli.Close()
67-
68-
prepper, err := getPrepperForImage(imageName)
62+
image, err := getImageForName(imageName)
6963
if err != nil {
7064
return err
7165
}
7266

73-
image, err := prepper.GetImage()
74-
7567
if !save {
7668
defer pkgutil.CleanupImage(image)
7769
}

cmd/diff.go

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,6 @@ func diffImages(image1Arg, image2Arg string, diffArgs []string) error {
7575
return err
7676
}
7777

78-
cli, err := pkgutil.NewClient()
79-
if err != nil {
80-
return err
81-
}
82-
defer cli.Close()
8378
var wg sync.WaitGroup
8479
wg.Add(2)
8580

@@ -93,13 +88,7 @@ func diffImages(image1Arg, image2Arg string, diffArgs []string) error {
9388
for imageArg := range imageMap {
9489
go func(imageName string, imageMap map[string]*pkgutil.Image) {
9590
defer wg.Done()
96-
97-
prepper, err := getPrepperForImage(imageName)
98-
if err != nil {
99-
logrus.Error(err)
100-
return
101-
}
102-
image, err := prepper.GetImage()
91+
image, err := getImageForName(imageName)
10392
imageMap[imageName] = &image
10493
if err != nil {
10594
logrus.Warningf("Diff may be inaccurate: %s", err)

cmd/root.go

Lines changed: 54 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,22 @@ package cmd
1919
import (
2020
goflag "flag"
2121
"fmt"
22+
"io/ioutil"
23+
"net/http"
2224
"os"
23-
"path/filepath"
2425
"sort"
2526
"strings"
2627

28+
"github.com/google/go-containerregistry/authn"
29+
"github.com/google/go-containerregistry/name"
30+
"github.com/google/go-containerregistry/v1/daemon"
31+
"github.com/google/go-containerregistry/v1/remote"
32+
"github.com/google/go-containerregistry/v1/tarball"
33+
2734
"github.com/GoogleContainerTools/container-diff/differs"
28-
"github.com/GoogleContainerTools/container-diff/pkg/cache"
2935
pkgutil "github.com/GoogleContainerTools/container-diff/pkg/util"
3036
"github.com/GoogleContainerTools/container-diff/util"
31-
"github.com/containers/image/docker"
32-
"github.com/docker/docker/client"
33-
homedir "github.com/mitchellh/go-homedir"
37+
"github.com/google/go-containerregistry/v1"
3438
"github.com/sirupsen/logrus"
3539
"github.com/spf13/cobra"
3640
"github.com/spf13/pflag"
@@ -39,7 +43,6 @@ import (
3943
var json bool
4044
var save bool
4145
var types diffTypes
42-
var noCache bool
4346

4447
var LogLevel string
4548
var format string
@@ -121,67 +124,63 @@ func checkIfValidAnalyzer(_ []string) error {
121124
return nil
122125
}
123126

124-
func getPrepperForImage(image string) (pkgutil.Prepper, error) {
125-
cli, err := client.NewEnvClient()
126-
if err != nil {
127-
return nil, err
128-
}
129-
130-
if pkgutil.IsTar(image) {
131-
return &pkgutil.TarPrepper{
132-
Source: filepath.Clean(image),
133-
Client: cli,
134-
}, nil
135-
}
136-
137-
if strings.HasPrefix(image, DaemonPrefix) {
138-
// remove the DaemonPrefix
139-
image = strings.Replace(image, DaemonPrefix, "", -1)
140-
141-
return &pkgutil.DaemonPrepper{
142-
Source: image,
143-
Client: cli,
144-
}, nil
127+
func getImageForName(imageName string) (pkgutil.Image, error) {
128+
logrus.Infof("getting image for name %s", imageName)
129+
var img v1.Image
130+
var err error
131+
if pkgutil.IsTar(imageName) {
132+
img, err = tarball.ImageFromPath(imageName, nil)
133+
if err != nil {
134+
return pkgutil.Image{}, err
135+
}
145136
}
146137

147-
// either has remote prefix or has no prefix, in which case we force remote
148-
image = strings.Replace(image, RemotePrefix, "", -1)
149-
ref, err := docker.ParseReference("//" + image)
150-
if err != nil {
151-
return nil, err
152-
}
153-
src, err := ref.NewImageSource(nil)
154-
if err != nil {
155-
return nil, err
156-
}
157-
defer src.Close()
138+
if strings.HasPrefix(imageName, DaemonPrefix) {
139+
// remove the daemon prefix
140+
imageName = strings.Replace(imageName, DaemonPrefix, "", -1)
158141

159-
if !noCache {
160-
cacheDir, err := cacheDir()
142+
ref, err := name.ParseReference(imageName, name.WeakValidation)
161143
if err != nil {
162-
return nil, err
144+
return pkgutil.Image{}, err
163145
}
164146

165-
src, err = cache.NewFileCache(cacheDir, ref)
147+
img, err = daemon.Image(ref, &daemon.ReadOptions{})
148+
if err != nil {
149+
return pkgutil.Image{}, err
150+
}
151+
} else {
152+
// either has remote prefix or has no prefix, in which case we force remote
153+
imageName = strings.Replace(imageName, RemotePrefix, "", -1)
154+
ref, err := name.ParseReference(imageName, name.WeakValidation)
155+
if err != nil {
156+
return pkgutil.Image{}, err
157+
}
158+
auth, err := authn.DefaultKeychain.Resolve(ref.Context().Registry)
159+
if err != nil {
160+
return pkgutil.Image{}, err
161+
}
162+
img, err = remote.Image(ref, auth, http.DefaultTransport)
166163
if err != nil {
167-
return nil, err
164+
return pkgutil.Image{}, err
168165
}
169166
}
167+
// TODO(nkubala): implement caching
170168

171-
return &pkgutil.CloudPrepper{
172-
Source: image,
173-
Client: cli,
174-
ImageSource: src,
175-
}, nil
176-
}
177-
178-
func cacheDir() (string, error) {
179-
dir, err := homedir.Dir()
169+
// create tempdir and extract fs into it
170+
path, err := ioutil.TempDir("", strings.Replace(imageName, "/", "", -1))
180171
if err != nil {
181-
return "", err
172+
return pkgutil.Image{}, err
173+
}
174+
if err := pkgutil.GetFileSystemForImage(img, path, nil); err != nil {
175+
return pkgutil.Image{
176+
FSPath: path,
177+
}, err
182178
}
183-
rootDir := filepath.Join(dir, ".container-diff")
184-
return filepath.Join(rootDir, "cache"), nil
179+
return pkgutil.Image{
180+
Image: img,
181+
Source: imageName,
182+
FSPath: path,
183+
}, nil
185184
}
186185

187186
func init() {
@@ -221,5 +220,4 @@ func addSharedFlags(cmd *cobra.Command) {
221220
cmd.Flags().VarP(&types, "type", "t", "This flag sets the list of analyzer types to use. Set it repeatedly to use multiple analyzers.")
222221
cmd.Flags().BoolVarP(&save, "save", "s", false, "Set this flag to save rather than remove the final image filesystems on exit.")
223222
cmd.Flags().BoolVarP(&util.SortSize, "order", "o", false, "Set this flag to sort any file/package results by descending size. Otherwise, they will be sorted by name.")
224-
cmd.Flags().BoolVarP(&noCache, "no-cache", "n", false, "Set this to force retrieval of layers on each run.")
225223
}

0 commit comments

Comments
 (0)