From b99934af57781f244bdc8aa6bac8e590bab73fdb Mon Sep 17 00:00:00 2001 From: Dayuan Date: Fri, 26 Apr 2024 15:33:21 +0800 Subject: [PATCH] feat: download kusion modules with current os arch filter --- .../api/generate/generator/generator.go | 6 +++--- pkg/engine/api/generate/run/run.go | 21 +++++++++++++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/pkg/engine/api/generate/generator/generator.go b/pkg/engine/api/generate/generator/generator.go index a199b4ef..2f5bbd29 100644 --- a/pkg/engine/api/generate/generator/generator.go +++ b/pkg/engine/api/generate/generator/generator.go @@ -103,17 +103,17 @@ func copyDependentModules(workDir string) error { if dep.Source.Oci != nil { info := dep.Source.Oci pkgDir := filepath.Join(absPkgPath, dep.FullName) - source := filepath.Join(pkgDir, runtime.GOOS, runtime.GOARCH, "kusion-module-"+dep.FullName) - + source := filepath.Join(pkgDir, "kusion-module-"+dep.FullName) moduleDir := filepath.Join(kusionHomePath, "modules", info.Repo, info.Tag, runtime.GOOS, runtime.GOARCH) dest := filepath.Join(moduleDir, fmt.Sprintf("kusion-module-%s", dep.FullName)) if runtime.GOOS == "windows" { source = fmt.Sprintf("%s.exe", source) dest = fmt.Sprintf("%s.exe", dest) } + // copy the module binary to the $KUSION_HOME modules directory err = io.CopyFile(source, dest) if err == nil { - // mark the dest file executable + // mark the dest file as executable err = os.Chmod(dest, 0o755) } allErrs = append(allErrs, err) diff --git a/pkg/engine/api/generate/run/run.go b/pkg/engine/api/generate/run/run.go index cc7696a8..756b2a7a 100644 --- a/pkg/engine/api/generate/run/run.go +++ b/pkg/engine/api/generate/run/run.go @@ -3,10 +3,12 @@ package run import ( "os" "path/filepath" + "runtime" kcl "kcl-lang.io/kcl-go" kclpkg "kcl-lang.io/kcl-go/pkg/kcl" - "kcl-lang.io/kpm/pkg/api" + "kcl-lang.io/kpm/pkg/client" + "kcl-lang.io/kpm/pkg/downloader" "kcl-lang.io/kpm/pkg/opt" ) @@ -23,15 +25,26 @@ var _ CodeRunner = &KPMRunner{} type KPMRunner struct{} // Run calls KPM api to compile and run KCL based configuration code. -func (r *KPMRunner) Run(workDir string, arguments map[string]string) ([]byte, error) { +func (r *KPMRunner) Run(workDir string, arguments map[string]string) (res []byte, err error) { cacheDir := filepath.Join(workDir, ".kclvm") - defer os.RemoveAll(cacheDir) + defer func(path string) { + if err != nil { + return + } + err = os.RemoveAll(path) + }(cacheDir) optList, err := buildKCLOptions(workDir, arguments) if err != nil { return nil, err } - result, err := api.RunWithOpts( + cli, err := client.NewKpmClient() + if err != nil { + return nil, err + } + cli.DepDownloader = downloader.NewOciDownloader(runtime.GOOS + "/" + runtime.GOARCH) + + result, err := cli.RunWithOpts( opt.WithKclOption(*kclpkg.NewOption().Merge(optList...)), opt.WithNoSumCheck(false), opt.WithLogWriter(nil),