Skip to content

Commit fa17048

Browse files
committed
config: fix file/folder ownership
Signed-off-by: CrazyMax <[email protected]>
1 parent 1de3325 commit fa17048

File tree

17 files changed

+216
-92
lines changed

17 files changed

+216
-92
lines changed

build/build.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,11 @@ func toRepoOnly(in string) (string, error) {
151151
return strings.Join(out, ","), nil
152152
}
153153

154-
func Build(ctx context.Context, nodes []builder.Node, opts map[string]Options, docker *dockerutil.Client, configDir string, w progress.Writer) (resp map[string]*client.SolveResponse, err error) {
155-
return BuildWithResultHandler(ctx, nodes, opts, docker, configDir, w, nil)
154+
func Build(ctx context.Context, nodes []builder.Node, opts map[string]Options, docker *dockerutil.Client, cfg *confutil.Config, w progress.Writer) (resp map[string]*client.SolveResponse, err error) {
155+
return BuildWithResultHandler(ctx, nodes, opts, docker, cfg, w, nil)
156156
}
157157

158-
func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opts map[string]Options, docker *dockerutil.Client, configDir string, w progress.Writer, resultHandleFunc func(driverIndex int, rCtx *ResultHandle)) (resp map[string]*client.SolveResponse, err error) {
158+
func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opts map[string]Options, docker *dockerutil.Client, cfg *confutil.Config, w progress.Writer, resultHandleFunc func(driverIndex int, rCtx *ResultHandle)) (resp map[string]*client.SolveResponse, err error) {
159159
if len(nodes) == 0 {
160160
return nil, errors.Errorf("driver required for build")
161161
}
@@ -234,12 +234,12 @@ func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opts map[
234234
return nil, err
235235
}
236236
localOpt := opt
237-
so, release, err := toSolveOpt(ctx, np.Node(), multiDriver, &localOpt, gatewayOpts, configDir, w, docker)
237+
so, release, err := toSolveOpt(ctx, np.Node(), multiDriver, &localOpt, gatewayOpts, cfg, w, docker)
238238
opts[k] = localOpt
239239
if err != nil {
240240
return nil, err
241241
}
242-
if err := saveLocalState(so, k, opt, np.Node(), configDir); err != nil {
242+
if err := saveLocalState(so, k, opt, np.Node(), cfg); err != nil {
243243
return nil, err
244244
}
245245
addGitAttrs(so)

build/localstate.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ import (
55

66
"github.com/docker/buildx/builder"
77
"github.com/docker/buildx/localstate"
8+
"github.com/docker/buildx/util/confutil"
89
"github.com/moby/buildkit/client"
910
)
1011

11-
func saveLocalState(so *client.SolveOpt, target string, opts Options, node builder.Node, configDir string) error {
12+
func saveLocalState(so *client.SolveOpt, target string, opts Options, node builder.Node, cfg *confutil.Config) error {
1213
var err error
1314
if so.Ref == "" {
1415
return nil
@@ -30,7 +31,7 @@ func saveLocalState(so *client.SolveOpt, target string, opts Options, node build
3031
if lp == "" && dp == "" {
3132
return nil
3233
}
33-
l, err := localstate.New(configDir)
34+
l, err := localstate.New(cfg)
3435
if err != nil {
3536
return err
3637
}

build/opt.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import (
3535
"github.com/tonistiigi/fsutil"
3636
)
3737

38-
func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt *Options, bopts gateway.BuildOpts, configDir string, pw progress.Writer, docker *dockerutil.Client) (_ *client.SolveOpt, release func(), err error) {
38+
func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt *Options, bopts gateway.BuildOpts, cfg *confutil.Config, pw progress.Writer, docker *dockerutil.Client) (_ *client.SolveOpt, release func(), err error) {
3939
nodeDriver := node.Driver
4040
defers := make([]func(), 0, 2)
4141
releaseF := func() {
@@ -271,7 +271,7 @@ func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt *O
271271

272272
// add node identifier to shared key if one was specified
273273
if so.SharedKey != "" {
274-
so.SharedKey += ":" + confutil.TryNodeIdentifier(configDir)
274+
so.SharedKey += ":" + confutil.TryNodeIdentifier(cfg)
275275
}
276276

277277
if opt.Pull {

builder/builder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ func Create(ctx context.Context, txn *store.Txn, dockerCli command.Cli, opts Cre
439439
if buildkitdConfigFile == "" {
440440
// if buildkit daemon config is not provided, check if the default one
441441
// is available and use it
442-
if f, ok := confutil.DefaultConfigFile(dockerCli); ok {
442+
if f, ok := confutil.NewConfig(dockerCli).BuildKitConfigFile(); ok {
443443
buildkitdConfigFile = f
444444
}
445445
}
@@ -584,7 +584,7 @@ func Leave(ctx context.Context, txn *store.Txn, dockerCli command.Cli, opts Leav
584584
return err
585585
}
586586

587-
ls, err := localstate.New(confutil.ConfigDir(dockerCli))
587+
ls, err := localstate.New(confutil.NewConfig(dockerCli))
588588
if err != nil {
589589
return err
590590
}

commands/bake.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ func runBake(ctx context.Context, dockerCli command.Cli, targets []string, in ba
265265
}
266266

267267
done := timeBuildCommand(mp, attributes)
268-
resp, retErr := build.Build(ctx, nodes, bo, dockerutil.NewClient(dockerCli), confutil.ConfigDir(dockerCli), printer)
268+
resp, retErr := build.Build(ctx, nodes, bo, dockerutil.NewClient(dockerCli), confutil.NewConfig(dockerCli), printer)
269269
if err := printer.Wait(); retErr == nil {
270270
retErr = err
271271
}
@@ -470,7 +470,7 @@ func saveLocalStateGroup(dockerCli command.Cli, in bakeOptions, targets []string
470470
refs = append(refs, b.Ref)
471471
bo[k] = b
472472
}
473-
l, err := localstate.New(confutil.ConfigDir(dockerCli))
473+
l, err := localstate.New(confutil.NewConfig(dockerCli))
474474
if err != nil {
475475
return err
476476
}
@@ -621,7 +621,7 @@ func bakeMetricAttributes(dockerCli command.Cli, driverType, url, cmdContext str
621621
commandNameAttribute.String("bake"),
622622
attribute.Stringer(string(commandOptionsHash), &bakeOptionsHash{
623623
bakeOptions: options,
624-
configDir: confutil.ConfigDir(dockerCli),
624+
cfg: confutil.NewConfig(dockerCli),
625625
url: url,
626626
cmdContext: cmdContext,
627627
targets: targets,
@@ -633,7 +633,7 @@ func bakeMetricAttributes(dockerCli command.Cli, driverType, url, cmdContext str
633633

634634
type bakeOptionsHash struct {
635635
*bakeOptions
636-
configDir string
636+
cfg *confutil.Config
637637
url string
638638
cmdContext string
639639
targets []string
@@ -657,7 +657,7 @@ func (o *bakeOptionsHash) String() string {
657657

658658
joinedFiles := strings.Join(files, ",")
659659
joinedTargets := strings.Join(targets, ",")
660-
salt := confutil.TryNodeIdentifier(o.configDir)
660+
salt := confutil.TryNodeIdentifier(o.cfg)
661661

662662
h := sha256.New()
663663
for _, s := range []string{url, cmdContext, joinedFiles, joinedTargets, salt} {

commands/build.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ func buildMetricAttributes(dockerCli command.Cli, driverType string, options *bu
238238
commandNameAttribute.String("build"),
239239
attribute.Stringer(string(commandOptionsHash), &buildOptionsHash{
240240
buildOptions: options,
241-
configDir: confutil.ConfigDir(dockerCli),
241+
cfg: confutil.NewConfig(dockerCli),
242242
}),
243243
driverNameAttribute.String(options.builder),
244244
driverTypeAttribute.String(driverType),
@@ -250,7 +250,7 @@ func buildMetricAttributes(dockerCli command.Cli, driverType string, options *bu
250250
// the fmt.Stringer interface.
251251
type buildOptionsHash struct {
252252
*buildOptions
253-
configDir string
253+
cfg *confutil.Config
254254
result string
255255
resultOnce sync.Once
256256
}
@@ -267,7 +267,7 @@ func (o *buildOptionsHash) String() string {
267267
if contextPath != "-" && osutil.IsLocalDir(contextPath) {
268268
contextPath = osutil.ToAbs(contextPath)
269269
}
270-
salt := confutil.TryNodeIdentifier(o.configDir)
270+
salt := confutil.TryNodeIdentifier(o.cfg)
271271

272272
h := sha256.New()
273273
for _, s := range []string{target, contextPath, dockerfile, salt} {

controller/build/build.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,15 +214,15 @@ func buildTargets(ctx context.Context, dockerCli command.Cli, nodes []builder.No
214214
if generateResult {
215215
var mu sync.Mutex
216216
var idx int
217-
resp, err = build.BuildWithResultHandler(ctx, nodes, opts, dockerutil.NewClient(dockerCli), confutil.ConfigDir(dockerCli), progress, func(driverIndex int, gotRes *build.ResultHandle) {
217+
resp, err = build.BuildWithResultHandler(ctx, nodes, opts, dockerutil.NewClient(dockerCli), confutil.NewConfig(dockerCli), progress, func(driverIndex int, gotRes *build.ResultHandle) {
218218
mu.Lock()
219219
defer mu.Unlock()
220220
if res == nil || driverIndex < idx {
221221
idx, res = driverIndex, gotRes
222222
}
223223
})
224224
} else {
225-
resp, err = build.Build(ctx, nodes, opts, dockerutil.NewClient(dockerCli), confutil.ConfigDir(dockerCli), progress)
225+
resp, err = build.Build(ctx, nodes, opts, dockerutil.NewClient(dockerCli), confutil.NewConfig(dockerCli), progress)
226226
}
227227
if err != nil {
228228
return nil, res, err

controller/remote/controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ func prepareRootDir(dockerCli command.Cli, config *serverConfig) (string, error)
258258
}
259259

260260
func rootDataDir(dockerCli command.Cli) string {
261-
return filepath.Join(confutil.ConfigDir(dockerCli), "controller")
261+
return filepath.Join(confutil.NewConfig(dockerCli).Dir(), "controller")
262262
}
263263

264264
func newBuildxClientAndCheck(ctx context.Context, addr string) (*Client, error) {

localstate/localstate.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"path/filepath"
99
"sync"
1010

11-
"github.com/docker/docker/pkg/ioutils"
11+
"github.com/docker/buildx/util/confutil"
1212
"github.com/pkg/errors"
1313
"golang.org/x/sync/errgroup"
1414
)
@@ -42,26 +42,26 @@ type StateGroup struct {
4242
}
4343

4444
type LocalState struct {
45-
root string
45+
cfg *confutil.Config
4646
}
4747

48-
func New(root string) (*LocalState, error) {
49-
if root == "" {
50-
return nil, errors.Errorf("root dir empty")
48+
func New(cfg *confutil.Config) (*LocalState, error) {
49+
if cfg.Dir() == "" {
50+
return nil, errors.Errorf("config dir empty")
5151
}
52-
if err := os.MkdirAll(filepath.Join(root, refsDir), 0700); err != nil {
52+
if err := cfg.MkdirAll(refsDir, 0700); err != nil {
5353
return nil, err
5454
}
5555
return &LocalState{
56-
root: root,
56+
cfg: cfg,
5757
}, nil
5858
}
5959

6060
func (ls *LocalState) ReadRef(builderName, nodeName, id string) (*State, error) {
6161
if err := ls.validate(builderName, nodeName, id); err != nil {
6262
return nil, err
6363
}
64-
dt, err := os.ReadFile(filepath.Join(ls.root, refsDir, builderName, nodeName, id))
64+
dt, err := os.ReadFile(filepath.Join(ls.cfg.Dir(), refsDir, builderName, nodeName, id))
6565
if err != nil {
6666
return nil, err
6767
}
@@ -76,19 +76,19 @@ func (ls *LocalState) SaveRef(builderName, nodeName, id string, st State) error
7676
if err := ls.validate(builderName, nodeName, id); err != nil {
7777
return err
7878
}
79-
refDir := filepath.Join(ls.root, refsDir, builderName, nodeName)
80-
if err := os.MkdirAll(refDir, 0700); err != nil {
79+
refDir := filepath.Join(refsDir, builderName, nodeName)
80+
if err := ls.cfg.MkdirAll(refDir, 0700); err != nil {
8181
return err
8282
}
8383
dt, err := json.Marshal(st)
8484
if err != nil {
8585
return err
8686
}
87-
return ioutils.AtomicWriteFile(filepath.Join(refDir, id), dt, 0600)
87+
return ls.cfg.AtomicWriteFile(filepath.Join(refDir, id), dt, 0644)
8888
}
8989

9090
func (ls *LocalState) ReadGroup(id string) (*StateGroup, error) {
91-
dt, err := os.ReadFile(filepath.Join(ls.root, refsDir, groupDir, id))
91+
dt, err := os.ReadFile(filepath.Join(ls.cfg.Dir(), refsDir, groupDir, id))
9292
if err != nil {
9393
return nil, err
9494
}
@@ -100,23 +100,23 @@ func (ls *LocalState) ReadGroup(id string) (*StateGroup, error) {
100100
}
101101

102102
func (ls *LocalState) SaveGroup(id string, stg StateGroup) error {
103-
refDir := filepath.Join(ls.root, refsDir, groupDir)
104-
if err := os.MkdirAll(refDir, 0700); err != nil {
103+
refDir := filepath.Join(refsDir, groupDir)
104+
if err := ls.cfg.MkdirAll(refDir, 0700); err != nil {
105105
return err
106106
}
107107
dt, err := json.Marshal(stg)
108108
if err != nil {
109109
return err
110110
}
111-
return ioutils.AtomicWriteFile(filepath.Join(refDir, id), dt, 0600)
111+
return ls.cfg.AtomicWriteFile(filepath.Join(refDir, id), dt, 0600)
112112
}
113113

114114
func (ls *LocalState) RemoveBuilder(builderName string) error {
115115
if builderName == "" {
116116
return errors.Errorf("builder name empty")
117117
}
118118

119-
dir := filepath.Join(ls.root, refsDir, builderName)
119+
dir := filepath.Join(ls.cfg.Dir(), refsDir, builderName)
120120
if _, err := os.Lstat(dir); err != nil {
121121
if !os.IsNotExist(err) {
122122
return err
@@ -147,7 +147,7 @@ func (ls *LocalState) RemoveBuilderNode(builderName string, nodeName string) err
147147
return errors.Errorf("node name empty")
148148
}
149149

150-
dir := filepath.Join(ls.root, refsDir, builderName, nodeName)
150+
dir := filepath.Join(ls.cfg.Dir(), refsDir, builderName, nodeName)
151151
if _, err := os.Lstat(dir); err != nil {
152152
if !os.IsNotExist(err) {
153153
return err
@@ -208,7 +208,7 @@ func (ls *LocalState) removeGroup(id string) error {
208208
if id == "" {
209209
return errors.Errorf("group ref empty")
210210
}
211-
f := filepath.Join(ls.root, refsDir, groupDir, id)
211+
f := filepath.Join(ls.cfg.Dir(), refsDir, groupDir, id)
212212
if _, err := os.Lstat(f); err != nil {
213213
if !os.IsNotExist(err) {
214214
return err

localstate/localstate_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"path/filepath"
55
"testing"
66

7+
"github.com/docker/buildx/util/confutil"
78
"github.com/stretchr/testify/require"
89
)
910

@@ -39,10 +40,10 @@ func newls(t *testing.T) *LocalState {
3940
t.Helper()
4041
tmpdir := t.TempDir()
4142

42-
l, err := New(tmpdir)
43+
l, err := New(confutil.NewConfig(nil, confutil.WithDir(tmpdir)))
4344
require.NoError(t, err)
4445
require.DirExists(t, filepath.Join(tmpdir, refsDir))
45-
require.Equal(t, tmpdir, l.root)
46+
require.Equal(t, tmpdir, l.cfg.Dir())
4647

4748
require.NoError(t, l.SaveRef(testBuilderName, testNodeName, testStateRefID, testStateRef))
4849

0 commit comments

Comments
 (0)