Skip to content

Commit 06a8570

Browse files
authored
feat: automatically download kusion modules in the mod add (#1150)
1 parent db5886a commit 06a8570

File tree

3 files changed

+19
-20
lines changed

3 files changed

+19
-20
lines changed

pkg/cmd/mod/add.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ package mod
33
import (
44
"fmt"
55
"net/url"
6+
"runtime"
67
"strings"
78

89
"github.com/spf13/cobra"
910
"k8s.io/cli-runtime/pkg/genericiooptions"
1011
"k8s.io/kubectl/pkg/util/templates"
11-
"kcl-lang.io/kpm/pkg/api"
12+
"kcl-lang.io/kpm/pkg/client"
13+
"kcl-lang.io/kpm/pkg/downloader"
1214
pkg "kcl-lang.io/kpm/pkg/package"
1315

1416
"kusionstack.io/kusion/pkg/cmd/meta"
@@ -64,13 +66,20 @@ func (o *AddOptions) Run() error {
6466
if stack == nil {
6567
return fmt.Errorf("cannot find stack with empty name")
6668
}
67-
kclPkg, err := api.GetKclPackage(stack.Path)
69+
70+
cli, err := client.NewKpmClient()
71+
if err != nil {
72+
return err
73+
}
74+
cli.DepDownloader = downloader.NewOciDownloader(runtime.GOOS + "/" + runtime.GOARCH)
75+
76+
kclPkg, err := cli.LoadPkgFromPath(stack.Path)
6877
if err != nil {
6978
return err
7079
}
71-
dependencies := kclPkg.GetDependenciesInModFile()
80+
dependencies := kclPkg.ModFile.Dependencies.Deps
7281
if dependencies == nil {
73-
dependencies = &pkg.Dependencies{Deps: make(map[string]pkg.Dependency)}
82+
dependencies = make(map[string]pkg.Dependency)
7483
}
7584

7685
// path example: oci://ghcr.io/kusionstack/service
@@ -83,7 +92,7 @@ func (o *AddOptions) Run() error {
8392
return fmt.Errorf("invalid module path: %s", m.Path)
8493
}
8594

86-
dependencies.Deps[o.ModuleName] = pkg.Dependency{
95+
dependencies[o.ModuleName] = pkg.Dependency{
8796
Name: o.ModuleName,
8897
FullName: o.ModuleName + "_" + m.Version,
8998
Version: m.Version,
@@ -96,11 +105,12 @@ func (o *AddOptions) Run() error {
96105
},
97106
}
98107

99-
// Save the dependencies to the kcl.mod file
100-
err = kclPkg.StoreModFile()
108+
// update kcl.mod and download dependencies
109+
err = cli.UpdateDeps(kclPkg)
101110
if err != nil {
102111
return err
103112
}
113+
104114
return nil
105115
}
106116

pkg/cmd/mod/add_test.go

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package mod
22

33
import (
4-
"math/rand"
54
"testing"
65

76
"github.com/stretchr/testify/assert"
87
"k8s.io/cli-runtime/pkg/genericiooptions"
9-
"kcl-lang.io/kpm/pkg/api"
108

119
v1 "kusionstack.io/kusion/pkg/apis/api.kusion.io/v1"
1210
"kusionstack.io/kusion/pkg/cmd/meta"
@@ -60,12 +58,6 @@ func TestAddOptions_Run(t *testing.T) {
6058
})
6159

6260
t.Run("ValidModuleAddition", func(t *testing.T) {
63-
b := make([]byte, 4)
64-
letter := "abcdefghijklmnopqrstuvwxyz"
65-
for i := range b {
66-
b[i] = letter[rand.Intn(len(letter))]
67-
}
68-
6961
o := &AddOptions{
7062
MetaOptions: meta.MetaOptions{
7163
RefStack: &v1.Stack{
@@ -76,7 +68,7 @@ func TestAddOptions_Run(t *testing.T) {
7668
Modules: v1.ModuleConfigs{
7769
"service": {
7870
Path: "oci://ghcr.io/kusionstack/service",
79-
Version: string(b),
71+
Version: "0.1.0",
8072
},
8173
},
8274
},
@@ -86,9 +78,5 @@ func TestAddOptions_Run(t *testing.T) {
8678
}
8779
err := o.Run()
8880
assert.NoError(t, err)
89-
kclPkg, err := api.GetKclPackage(o.RefStack.Path)
90-
assert.NoError(t, err)
91-
file := kclPkg.GetDependenciesInModFile()
92-
assert.Equal(t, file.Deps["service"].Version, string(b))
9381
})
9482
}

pkg/engine/api/generate/generator/generator.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ func CopyDependentModules(workDir string) error {
115115
dest = fmt.Sprintf("%s.exe", dest)
116116
}
117117
// copy the module binary to the $KUSION_HOME modules directory
118+
// todo: replace with symlink
118119
err = io.CopyFile(source, dest)
119120
if err == nil {
120121
// mark the dest file as executable

0 commit comments

Comments
 (0)