Skip to content

Commit d4d0537

Browse files
committed
refactor(packmanager): streamline package manager initialization
Create a singleton for the umbrella package manager and use it instead of global package-scoped maps. Use more dependency injection. Move the scattered init() calls to RegisterPackageManager into one place. Create a bootstrap package for handling flag/zip registration. Use the bootstrapping package in main(). Propagate errors up and report them if initialization fails. This should make things a bit more testable in the future. GitHub-Fixes: #425 Signed-off-by: Jakub Ciolek <jakub@ciolek.dev>
1 parent abb3be6 commit d4d0537

File tree

27 files changed

+277
-147
lines changed

27 files changed

+277
-147
lines changed

api/api.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,20 @@ import (
99

1010
zip "api.zip"
1111
"k8s.io/apimachinery/pkg/api/resource"
12-
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
1312

1413
machinev1alpha1 "kraftkit.sh/api/machine/v1alpha1"
1514
networkv1alpha1 "kraftkit.sh/api/network/v1alpha1"
1615
volumev1alpha1 "kraftkit.sh/api/volume/v1alpha1"
1716
)
1817

1918
func init() {
20-
utilruntime.Must(zip.Register(
19+
gob.Register(resource.Quantity{})
20+
}
21+
22+
func RegisterSchemes() error {
23+
return zip.Register(
2124
machinev1alpha1.AddToScheme,
2225
networkv1alpha1.AddToScheme,
2326
volumev1alpha1.AddToScheme,
24-
))
25-
26-
gob.Register(resource.Quantity{})
27+
)
2728
}

cmd/kraft/build/build.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,12 @@ func New() *cobra.Command {
8282
}
8383

8484
func (opts *Build) Pre(cmd *cobra.Command, args []string) error {
85-
ctx := cmd.Context()
86-
pm, err := packmanager.NewUmbrellaManager(ctx)
85+
ctx, err := packmanager.WithDefaultUmbrellaManagerInContext(cmd.Context())
8786
if err != nil {
8887
return err
8988
}
9089

91-
cmd.SetContext(packmanager.WithPackageManager(ctx, pm))
90+
cmd.SetContext(ctx)
9291

9392
if len(args) == 0 {
9493
opts.workdir, err = os.Getwd()

cmd/kraft/clean/clean.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,12 @@ func New() *cobra.Command {
7676
}
7777

7878
func (opts *Clean) Pre(cmd *cobra.Command, _ []string) error {
79-
ctx := cmd.Context()
80-
pm, err := packmanager.NewUmbrellaManager(ctx)
79+
ctx, err := packmanager.WithDefaultUmbrellaManagerInContext(cmd.Context())
8180
if err != nil {
8281
return err
8382
}
8483

85-
cmd.SetContext(packmanager.WithPackageManager(ctx, pm))
84+
cmd.SetContext(ctx)
8685

8786
opts.Platform = platform.PlatformByName(opts.Platform).String()
8887

cmd/kraft/fetch/fetch.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,12 @@ func New() *cobra.Command {
5252
}
5353

5454
func (opts *Fetch) Pre(cmd *cobra.Command, _ []string) error {
55-
ctx := cmd.Context()
56-
pm, err := packmanager.NewUmbrellaManager(ctx)
55+
ctx, err := packmanager.WithDefaultUmbrellaManagerInContext(cmd.Context())
5756
if err != nil {
5857
return err
5958
}
6059

61-
cmd.SetContext(packmanager.WithPackageManager(ctx, pm))
60+
cmd.SetContext(ctx)
6261

6362
opts.Platform = platform.PlatformByName(opts.Platform).String()
6463

cmd/kraft/kraft.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414

1515
"kraftkit.sh/cmdfactory"
1616
"kraftkit.sh/config"
17+
"kraftkit.sh/internal/bootstrap"
1718
"kraftkit.sh/internal/cli"
1819
kitupdate "kraftkit.sh/internal/update"
1920
kitversion "kraftkit.sh/internal/version"
@@ -146,5 +147,10 @@ func main() {
146147
}
147148
}
148149

150+
if err := bootstrap.InitKraftkit(ctx); err != nil {
151+
log.G(ctx).Errorf("could not init kraftkit: %v", err)
152+
os.Exit(1)
153+
}
154+
149155
cmdfactory.Main(ctx, cmd)
150156
}

cmd/kraft/menu/menu.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,12 @@ func New() *cobra.Command {
5555
}
5656

5757
func (opts *Menu) Pre(cmd *cobra.Command, _ []string) error {
58-
ctx := cmd.Context()
59-
pm, err := packmanager.NewUmbrellaManager(ctx)
58+
ctx, err := packmanager.WithDefaultUmbrellaManagerInContext(cmd.Context())
6059
if err != nil {
6160
return err
6261
}
6362

64-
cmd.SetContext(packmanager.WithPackageManager(ctx, pm))
63+
cmd.SetContext(ctx)
6564

6665
opts.Platform = platform.PlatformByName(opts.Platform).String()
6766

cmd/kraft/pkg/list/list.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,12 @@ func New() *cobra.Command {
5858
}
5959

6060
func (*List) Pre(cmd *cobra.Command, _ []string) error {
61-
ctx := cmd.Context()
62-
pm, err := packmanager.NewUmbrellaManager(ctx)
61+
ctx, err := packmanager.WithDefaultUmbrellaManagerInContext(cmd.Context())
6362
if err != nil {
6463
return err
6564
}
6665

67-
cmd.SetContext(packmanager.WithPackageManager(ctx, pm))
66+
cmd.SetContext(ctx)
6867

6968
return nil
7069
}

cmd/kraft/pkg/pkg.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,12 @@ func (opts *Pkg) Pre(cmd *cobra.Command, _ []string) error {
9090
return fmt.Errorf("the `--arch` and `--plat` options are not supported in addition to `--target`")
9191
}
9292

93-
ctx := cmd.Context()
94-
pm, err := packmanager.NewUmbrellaManager(ctx)
93+
ctx, err := packmanager.WithDefaultUmbrellaManagerInContext(cmd.Context())
9594
if err != nil {
9695
return err
9796
}
9897

99-
cmd.SetContext(packmanager.WithPackageManager(ctx, pm))
98+
cmd.SetContext(ctx)
10099

101100
opts.Platform = platform.PlatformByName(opts.Platform).String()
102101

cmd/kraft/pkg/pull/pull.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,12 @@ func New() *cobra.Command {
7474
}
7575

7676
func (opts *Pull) Pre(cmd *cobra.Command, _ []string) error {
77-
ctx := cmd.Context()
78-
pm, err := packmanager.NewUmbrellaManager(ctx)
77+
ctx, err := packmanager.WithDefaultUmbrellaManagerInContext(cmd.Context())
7978
if err != nil {
8079
return err
8180
}
8281

83-
cmd.SetContext(packmanager.WithPackageManager(ctx, pm))
82+
cmd.SetContext(ctx)
8483

8584
opts.Platform = platform.PlatformByName(opts.Platform).String()
8685

cmd/kraft/pkg/push/push.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,12 @@ func New() *cobra.Command {
5656
}
5757

5858
func (opts *Push) Pre(cmd *cobra.Command, _ []string) error {
59-
ctx := cmd.Context()
60-
pm, err := packmanager.NewUmbrellaManager(ctx)
59+
ctx, err := packmanager.WithDefaultUmbrellaManagerInContext(cmd.Context())
6160
if err != nil {
6261
return err
6362
}
6463

65-
cmd.SetContext(packmanager.WithPackageManager(ctx, pm))
64+
cmd.SetContext(ctx)
6665

6766
return nil
6867
}
@@ -111,7 +110,11 @@ func (opts *Push) Run(cmd *cobra.Command, args []string) error {
111110

112111
var pmananger packmanager.PackageManager
113112
if opts.Format != "auto" {
114-
pmananger = packmanager.PackageManagers()[pack.PackageFormat(opts.Format)]
113+
umbrella, err := packmanager.PackageManagers()
114+
if err != nil {
115+
return err
116+
}
117+
pmananger = umbrella[pack.PackageFormat(opts.Format)]
115118
if pmananger == nil {
116119
return errors.New("invalid package format specified")
117120
}

0 commit comments

Comments
 (0)