Repository navigation
Expand file tree
/
Copy pathclient.go
More file actions
81 lines (68 loc) · 1.93 KB
/
Copy pathclient.go
File metadata and controls
81 lines (68 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package pack
import (
"os"
"path/filepath"
"github.com/docker/docker/client"
"github.com/buildpack/pack/build"
"github.com/buildpack/pack/buildpack"
"github.com/buildpack/pack/config"
"github.com/buildpack/pack/image"
"github.com/buildpack/pack/lifecycle"
"github.com/buildpack/pack/logging"
)
type Client struct {
config *config.Config
logger logging.Logger
imageFetcher ImageFetcher
buildpackFetcher BuildpackFetcher
lifecycleFetcher LifecycleFetcher
lifecycle Lifecycle
docker *client.Client
}
func NewClient(
config *config.Config,
logger logging.Logger,
imageFetcher ImageFetcher,
buildpackFetcher BuildpackFetcher,
lifecycleFetcher LifecycleFetcher,
lifecycle Lifecycle,
docker *client.Client,
) *Client {
return &Client{
config: config,
logger: logger,
imageFetcher: imageFetcher,
buildpackFetcher: buildpackFetcher,
lifecycleFetcher: lifecycleFetcher,
lifecycle: lifecycle,
docker: docker,
}
}
type ClientOption func(c *Client)
// WithLogger supply your own logger.
func WithLogger(l logging.Logger) ClientOption {
return func(c *Client) {
c.logger = l
}
}
func DefaultClient(config *config.Config, opts ...ClientOption) (*Client, error) {
dockerClient, err := client.NewClientWithOpts(client.FromEnv, client.WithVersion("1.38"))
if err != nil {
return nil, err
}
var client Client
for _, opt := range opts {
opt(&client)
}
if client.logger == nil {
client.logger = logging.New(os.Stderr)
}
downloader := NewDownloader(client.logger, filepath.Join(config.Path(), "download-cache"))
client.config = config
client.imageFetcher = image.NewFetcher(client.logger, dockerClient)
client.buildpackFetcher = buildpack.NewFetcher(downloader)
client.lifecycleFetcher = lifecycle.NewFetcher(downloader)
client.lifecycle = build.NewLifecycle(dockerClient, client.logger)
client.docker = dockerClient
return &client, nil
}