Skip to content

Commit

Permalink
Feat: support vela show for workflow step definition (kubevela#3161)
Browse files Browse the repository at this point in the history
Signed-off-by: FogDong <[email protected]>
(cherry picked from commit 23852b3)

Co-authored-by: FogDong <[email protected]>
  • Loading branch information
github-actions[bot] and FogDong authored Jan 25, 2022
1 parent 20c11f2 commit 29ecc5c
Show file tree
Hide file tree
Showing 11 changed files with 174 additions and 56 deletions.
27 changes: 22 additions & 5 deletions pkg/cue/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,34 @@ import (
"strings"

"cuelang.org/go/cue"
"cuelang.org/go/cue/build"

"github.com/oam-dev/kubevela/apis/types"
"github.com/oam-dev/kubevela/pkg/cue/model"
"github.com/oam-dev/kubevela/pkg/cue/packages"
)

// GetParameters get parameter from cue template
func GetParameters(templateStr string) ([]types.Parameter, error) {
r := cue.Runtime{}
template, err := r.Compile("", templateStr+BaseTemplate)
if err != nil {
return nil, err
func GetParameters(templateStr string, pd *packages.PackageDiscover) ([]types.Parameter, error) {
var template *cue.Instance
var err error
if pd != nil {
bi := build.NewContext().NewInstance("", nil)
err := bi.AddFile("-", templateStr+BaseTemplate)
if err != nil {
return nil, err
}

template, err = pd.ImportPackagesAndBuildInstance(bi)
if err != nil {
return nil, err
}
} else {
r := cue.Runtime{}
template, err = r.Compile("", templateStr+BaseTemplate)
if err != nil {
return nil, err
}
}
tempStruct, err := template.Value().Struct()
if err != nil {
Expand Down
10 changes: 5 additions & 5 deletions pkg/cue/convert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import (

func TestGetParameter(t *testing.T) {
data, _ := os.ReadFile("testdata/workloads/metrics.cue")
params, err := GetParameters(string(data))
params, err := GetParameters(string(data), nil)
assert.NoError(t, err)
assert.Equal(t, params, []types.Parameter{
{Name: "format", Required: false, Default: "prometheus", Usage: "format of the metrics, " +
Expand All @@ -38,7 +38,7 @@ func TestGetParameter(t *testing.T) {
{Name: "selector", Required: false, Usage: "the label selector for the pods, default is the workload labels", Type: cue.StructKind},
})
data, _ = os.ReadFile("testdata/workloads/deployment.cue")
params, err = GetParameters(string(data))
params, err = GetParameters(string(data), nil)
assert.NoError(t, err)
assert.Equal(t, []types.Parameter{
{Name: "name", Required: true, Default: "", Type: cue.StringKind},
Expand All @@ -50,7 +50,7 @@ func TestGetParameter(t *testing.T) {
params)

data, _ = os.ReadFile("testdata/workloads/test-param.cue")
params, err = GetParameters(string(data))
params, err = GetParameters(string(data), nil)
assert.NoError(t, err)
assert.Equal(t, []types.Parameter{
{Name: "name", Required: true, Default: "", Type: cue.StringKind},
Expand All @@ -61,13 +61,13 @@ func TestGetParameter(t *testing.T) {
{Name: "fval", Default: 64.3, Type: cue.FloatKind},
{Name: "nval", Default: float64(0), Required: true, Type: cue.NumberKind}}, params)
data, _ = os.ReadFile("testdata/workloads/empty.cue")
params, err = GetParameters(string(data))
params, err = GetParameters(string(data), nil)
assert.NoError(t, err)
var exp []types.Parameter
assert.Equal(t, exp, params)

data, _ = os.ReadFile("testdata/workloads/webservice.cue") // test cue parameter with "// +ignore" annotation
params, err = GetParameters(string(data)) // Only test for func RetrieveComments
params, err = GetParameters(string(data), nil) // Only test for func RetrieveComments
assert.NoError(t, err)
var flag bool
for _, para := range params {
Expand Down
27 changes: 22 additions & 5 deletions pkg/utils/common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (

"cuelang.org/go/cue"
"cuelang.org/go/cue/ast"
"cuelang.org/go/cue/build"
"cuelang.org/go/cue/format"
"cuelang.org/go/encoding/openapi"
"github.com/AlecAivazis/survey/v2"
Expand Down Expand Up @@ -62,6 +63,7 @@ import (
"github.com/oam-dev/kubevela/apis/types"
velacue "github.com/oam-dev/kubevela/pkg/cue"
"github.com/oam-dev/kubevela/pkg/cue/model"
"github.com/oam-dev/kubevela/pkg/cue/packages"
"github.com/oam-dev/kubevela/pkg/oam"
)

Expand Down Expand Up @@ -146,11 +148,26 @@ func HTTPGet(ctx context.Context, url string) ([]byte, error) {
}

// GetCUEParameterValue converts definitions to cue format
func GetCUEParameterValue(cueStr string) (cue.Value, error) {
r := cue.Runtime{}
template, err := r.Compile("", cueStr+velacue.BaseTemplate)
if err != nil {
return cue.Value{}, err
func GetCUEParameterValue(cueStr string, pd *packages.PackageDiscover) (cue.Value, error) {
var template *cue.Instance
var err error
if pd != nil {
bi := build.NewContext().NewInstance("", nil)
err := bi.AddFile("-", cueStr+velacue.BaseTemplate)
if err != nil {
return cue.Value{}, err
}

template, err = pd.ImportPackagesAndBuildInstance(bi)
if err != nil {
return cue.Value{}, err
}
} else {
r := cue.Runtime{}
template, err = r.Compile("", cueStr+velacue.BaseTemplate)
if err != nil {
return cue.Value{}, err
}
}
tempStruct, err := template.Value().Struct()
if err != nil {
Expand Down
4 changes: 2 additions & 2 deletions pkg/utils/common/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ output: {

for name, tc := range cases {
t.Run(name, func(t *testing.T) {
_, err := GetCUEParameterValue(tc.cueStr)
_, err := GetCUEParameterValue(tc.cueStr, nil)
if tc.want.err != nil {
if diff := cmp.Diff(tc.want.err, err, test.EquateErrors()); diff != "" {
t.Errorf("\n%s\nGenOpenAPIFromFile(...): -want error, +got error:\n%s", tc.reason, diff)
Expand Down Expand Up @@ -162,7 +162,7 @@ name

for name, tc := range cases {
t.Run(name, func(t *testing.T) {
_, err := GetCUEParameterValue(tc.cueStr)
_, err := GetCUEParameterValue(tc.cueStr, nil)
if diff := cmp.Diff(tc.want.errMsg, err.Error(), test.EquateConditions()); diff != "" {
t.Errorf("\n%s\nGenOpenAPIFromFile(...): -want error, +got error:\n%s", tc.reason, diff)
}
Expand Down
4 changes: 2 additions & 2 deletions references/cli/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -762,14 +762,14 @@ func ParseCapability(mapper discoverymapper.DiscoveryMapper, data []byte) (types
}
workloadDefinitionRef = ref.Name
}
return plugins.HandleDefinition(cd.Name, workloadDefinitionRef, cd.Annotations, cd.Labels, cd.Spec.Extension, types.TypeComponentDefinition, nil, cd.Spec.Schematic)
return plugins.HandleDefinition(cd.Name, workloadDefinitionRef, cd.Annotations, cd.Labels, cd.Spec.Extension, types.TypeComponentDefinition, nil, cd.Spec.Schematic, nil)
case "TraitDefinition":
var td v1beta1.TraitDefinition
err = yaml.Unmarshal(data, &td)
if err != nil {
return types.Capability{}, err
}
return plugins.HandleDefinition(td.Name, td.Spec.Reference.Name, td.Annotations, td.Labels, td.Spec.Extension, types.TypeTrait, td.Spec.AppliesToWorkloads, td.Spec.Schematic)
return plugins.HandleDefinition(td.Name, td.Spec.Reference.Name, td.Annotations, td.Labels, td.Spec.Extension, types.TypeTrait, td.Spec.AppliesToWorkloads, td.Spec.Schematic, nil)
case "ScopeDefinition":
// TODO(wonderflow): support scope definition here.
}
Expand Down
64 changes: 51 additions & 13 deletions references/cli/show.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
"github.com/spf13/cobra"

"github.com/oam-dev/kubevela/apis/types"
"github.com/oam-dev/kubevela/pkg/cue/packages"
"github.com/oam-dev/kubevela/pkg/utils/common"
"github.com/oam-dev/kubevela/pkg/utils/system"
cmdutil "github.com/oam-dev/kubevela/pkg/utils/util"
Expand Down Expand Up @@ -62,8 +63,8 @@ var webSite bool
func NewCapabilityShowCommand(c common.Args, ioStreams cmdutil.IOStreams) *cobra.Command {
cmd := &cobra.Command{
Use: "show",
Short: "Show the reference doc for a component type or trait.",
Long: "Show the reference doc for component or trait types.",
Short: "Show the reference doc for a component, trait or workflow.",
Long: "Show the reference doc for component, trait or workflow types.",
Example: `show webservice`,
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) == 0 {
Expand Down Expand Up @@ -126,7 +127,7 @@ func startReferenceDocsSite(ctx context.Context, ns string, c common.Args, ioStr
}
}
if !capabilityIsValid {
return fmt.Errorf("%s is not a valid component type or trait", capabilityName)
return fmt.Errorf("%s is not a valid component, trait or workflow", capabilityName)
}

cli, err := c.GetClient()
Expand All @@ -139,7 +140,15 @@ func startReferenceDocsSite(ctx context.Context, ns string, c common.Args, ioStr
},
}

if err := ref.CreateMarkdown(ctx, capabilities, docsPath, plugins.ReferenceSourcePath); err != nil {
config, err := c.GetConfig()
if err != nil {
return err
}
pd, err := packages.NewPackageDiscover(config)
if err != nil {
return err
}
if err := ref.CreateMarkdown(ctx, capabilities, docsPath, plugins.ReferenceSourcePath, pd); err != nil {
return err
}

Expand Down Expand Up @@ -171,6 +180,8 @@ func startReferenceDocsSite(ctx context.Context, ns string, c common.Args, ioStr
case types.TypeScope:
case types.TypeComponentDefinition:
capabilityPath = plugins.ComponentDefinitionTypePath
case types.TypeWorkflowStep:
capabilityPath = plugins.WorkflowStepPath
default:
return fmt.Errorf("unsupported type: %v", capabilityType)
}
Expand Down Expand Up @@ -216,7 +227,7 @@ func launch(server *http.Server, errChan chan<- error) {

func generateSideBar(capabilities []types.Capability, docsPath string) error {
sideBar := filepath.Join(docsPath, SideBar)
components, traits := getComponentsAndTraits(capabilities)
components, traits, workflowsteps := getDefinitions(capabilities)
f, err := os.Create(sideBar)
if err != nil {
return err
Expand All @@ -237,6 +248,14 @@ func generateSideBar(capabilities []types.Capability, docsPath string) error {
return err
}
}
if _, err := f.WriteString("- Workflow Steps\n"); err != nil {
return err
}
for _, t := range workflowsteps {
if _, err := f.WriteString(fmt.Sprintf(" - [%s](%s/%s.md)\n", t, plugins.WorkflowStepPath, t)); err != nil {
return err
}
}
return nil
}

Expand Down Expand Up @@ -303,12 +322,12 @@ func generateREADME(capabilities []types.Capability, docsPath string) error {
if err != nil {
return err
}
if _, err := f.WriteString("# KubeVela Reference Docs for Component Types and Traits\n" +
"Click the navigation bar on the left or the links below to look into the detailed referennce of a Workload type or a Trait.\n"); err != nil {
if _, err := f.WriteString("# KubeVela Reference Docs for Component Types, Traits and WorkflowSteps\n" +
"Click the navigation bar on the left or the links below to look into the detailed reference of a Workload type, Trait or Workflow Step.\n"); err != nil {
return err
}

workloads, traits := getComponentsAndTraits(capabilities)
workloads, traits, workflowsteps := getDefinitions(capabilities)

if _, err := f.WriteString("## Component Types\n"); err != nil {
return err
Expand All @@ -328,28 +347,47 @@ func generateREADME(capabilities []types.Capability, docsPath string) error {
return err
}
}

if _, err := f.WriteString("## Workflow Steps\n"); err != nil {
return err
}
for _, t := range workflowsteps {
if _, err := f.WriteString(fmt.Sprintf(" - [%s](%s/%s.md)\n", t, plugins.WorkflowStepPath, t)); err != nil {
return err
}
}
return nil
}

func getComponentsAndTraits(capabilities []types.Capability) ([]string, []string) {
var components, traits []string
func getDefinitions(capabilities []types.Capability) ([]string, []string, []string) {
var components, traits, workflowSteps []string
for _, c := range capabilities {
switch c.Type {
case types.TypeComponentDefinition:
components = append(components, c.Name)
case types.TypeTrait:
traits = append(traits, c.Name)
case types.TypeWorkflowStep:
workflowSteps = append(workflowSteps, c.Name)
case types.TypeScope:
case types.TypeWorkload:
default:
}
}
return components, traits
return components, traits, workflowSteps
}

// ShowReferenceConsole will show capability reference in console
func ShowReferenceConsole(ctx context.Context, c common.Args, ioStreams cmdutil.IOStreams, capabilityName string, ns string) error {
capability, err := plugins.GetCapabilityByName(ctx, c, capabilityName, ns)
config, err := c.GetConfig()
if err != nil {
return err
}
pd, err := packages.NewPackageDiscover(config)
if err != nil {
return err
}
capability, err := plugins.GetCapabilityByName(ctx, c, capabilityName, ns, pd)
if err != nil {
return err
}
Expand Down Expand Up @@ -377,7 +415,7 @@ func ShowReferenceConsole(ctx context.Context, c common.Args, ioStreams cmdutil.
return err
}
case types.CUECategory:
propertyConsole, err = ref.GenerateCUETemplateProperties(capability)
propertyConsole, err = ref.GenerateCUETemplateProperties(capability, pd)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion references/cli/show_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ func TestGetWorkloadAndTraits(t *testing.T) {
}
for name, tc := range cases {
t.Run(name, func(t *testing.T) {
gotWorkloads, gotTraits := getComponentsAndTraits(tc.capabilities)
gotWorkloads, gotTraits, _ := getDefinitions(tc.capabilities)
assert.Equal(t, tc.want, want{workloads: gotWorkloads, traits: gotTraits})
})
}
Expand Down
Loading

0 comments on commit 29ecc5c

Please sign in to comment.