From f18aae83bbc91a7711329882be30cd31f7bf9a15 Mon Sep 17 00:00:00 2001 From: Dayuan Date: Fri, 7 Jun 2024 14:04:24 +0800 Subject: [PATCH] feat: automatically download kusion modules in the `mod add` --- pkg/cmd/mod/add.go | 24 +++++++++++++------ .../api/generate/generator/generator.go | 1 + 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/pkg/cmd/mod/add.go b/pkg/cmd/mod/add.go index d0250932..6ab1595d 100644 --- a/pkg/cmd/mod/add.go +++ b/pkg/cmd/mod/add.go @@ -3,12 +3,14 @@ package mod import ( "fmt" "net/url" + "runtime" "strings" "github.com/spf13/cobra" "k8s.io/cli-runtime/pkg/genericiooptions" "k8s.io/kubectl/pkg/util/templates" - "kcl-lang.io/kpm/pkg/api" + "kcl-lang.io/kpm/pkg/client" + "kcl-lang.io/kpm/pkg/downloader" pkg "kcl-lang.io/kpm/pkg/package" "kusionstack.io/kusion/pkg/cmd/meta" @@ -64,13 +66,20 @@ func (o *AddOptions) Run() error { if stack == nil { return fmt.Errorf("cannot find stack with empty name") } - kclPkg, err := api.GetKclPackage(stack.Path) + + cli, err := client.NewKpmClient() + if err != nil { + return err + } + cli.DepDownloader = downloader.NewOciDownloader(runtime.GOOS + "/" + runtime.GOARCH) + + kclPkg, err := cli.LoadPkgFromPath(stack.Path) if err != nil { return err } - dependencies := kclPkg.GetDependenciesInModFile() + dependencies := kclPkg.ModFile.Dependencies.Deps if dependencies == nil { - dependencies = &pkg.Dependencies{Deps: make(map[string]pkg.Dependency)} + dependencies = make(map[string]pkg.Dependency) } // path example: oci://ghcr.io/kusionstack/service @@ -83,7 +92,7 @@ func (o *AddOptions) Run() error { return fmt.Errorf("invalid module path: %s", m.Path) } - dependencies.Deps[o.ModuleName] = pkg.Dependency{ + dependencies[o.ModuleName] = pkg.Dependency{ Name: o.ModuleName, FullName: o.ModuleName + "_" + m.Version, Version: m.Version, @@ -96,11 +105,12 @@ func (o *AddOptions) Run() error { }, } - // Save the dependencies to the kcl.mod file - err = kclPkg.StoreModFile() + // download dependencies + err = cli.UpdateDeps(kclPkg) if err != nil { return err } + return nil } diff --git a/pkg/engine/api/generate/generator/generator.go b/pkg/engine/api/generate/generator/generator.go index 7ae769e9..2ab9c73b 100644 --- a/pkg/engine/api/generate/generator/generator.go +++ b/pkg/engine/api/generate/generator/generator.go @@ -115,6 +115,7 @@ func CopyDependentModules(workDir string) error { dest = fmt.Sprintf("%s.exe", dest) } // copy the module binary to the $KUSION_HOME modules directory + // todo: replace with symlink err = io.CopyFile(source, dest) if err == nil { // mark the dest file as executable