Skip to content

Commit

Permalink
Adds chains version in output of tkn version command
Browse files Browse the repository at this point in the history
Signed-off-by: mansi103 <[email protected]>
  • Loading branch information
mansi103 committed Feb 16, 2022
1 parent 7b2e08e commit 6d52473
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 6 deletions.
2 changes: 1 addition & 1 deletion docs/cmd/tkn_version.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Prints version information

```
--check check if a newer version is available
--component string provide a particular component name for its version (client|pipeline|triggers|dashboard)
--component string provide a particular component name for its version (client|chains|pipeline|triggers|dashboard)
-c, --context string name of the kubeconfig context to use (default: kubectl config current-context)
-h, --help help for version
-k, --kubeconfig string kubectl config file (default: $HOME/.kube/config)
Expand Down
2 changes: 1 addition & 1 deletion docs/man/man1/tkn-version.1
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Prints version information

.PP
\fB\-\-component\fP=""
provide a particular component name for its version (client|pipeline|triggers|dashboard)
provide a particular component name for its version (client|chains|pipeline|triggers|dashboard)

.PP
\fB\-c\fP, \fB\-\-context\fP=""
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Client version: dev
Chains version: v0.8.0
Pipeline version: v0.10.0
Triggers version: v0.5.0
Dashboard version: v0.7.0
Operator version: v0.54.0
14 changes: 12 additions & 2 deletions pkg/cmd/version/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ func Command(p cli.Params) *cobra.Command {
switch component {
case "":
fmt.Fprintf(cmd.OutOrStdout(), "Client version: %s\n", clientVersion)
chainsVersion, _ := version.GetChainsVersion(cs, namespace)
if chainsVersion != "" {
fmt.Fprintf(cmd.OutOrStdout(), "Chains version: %s\n", chainsVersion)
}
pipelineVersion, _ := version.GetPipelineVersion(cs, namespace)
if pipelineVersion == "" {
pipelineVersion = "unknown, " +
Expand All @@ -96,6 +100,12 @@ func Command(p cli.Params) *cobra.Command {
}
case "client":
fmt.Fprintf(cmd.OutOrStdout(), "%s\n", clientVersion)
case "chains":
chainsVersion, _ := version.GetChainsVersion(cs, namespace)
if chainsVersion == "" {
chainsVersion = "unknown"
}
fmt.Fprintf(cmd.OutOrStdout(), "%s\n", chainsVersion)
case "pipeline":
pipelineVersion, _ := version.GetPipelineVersion(cs, namespace)
if pipelineVersion == "" {
Expand Down Expand Up @@ -129,7 +139,7 @@ func Command(p cli.Params) *cobra.Command {
fmt.Fprintf(cmd.OutOrStdout(), "Client version: %s\n", clientVersion)
case "client":
fmt.Fprintf(cmd.OutOrStdout(), "%s\n", clientVersion)
case "pipeline", "triggers", "dashboard", "operator":
case "chains", "pipeline", "triggers", "dashboard", "operator":
fmt.Fprintf(cmd.OutOrStdout(), "unknown\n")
default:
fmt.Fprintf(cmd.OutOrStdout(), "Invalid component value\n")
Expand All @@ -151,7 +161,7 @@ func Command(p cli.Params) *cobra.Command {
"namespace to check installed controller version")
flags.AddTektonOptions(cmd)

cmd.Flags().StringVarP(&component, "component", "", "", "provide a particular component name for its version (client|pipeline|triggers|dashboard)")
cmd.Flags().StringVarP(&component, "component", "", "", "provide a particular component name for its version (client|chains|pipeline|triggers|dashboard)")

if skipCheckFlag != "true" {
cmd.Flags().BoolVar(&check, "check", false, "check if a newer version is available")
Expand Down
10 changes: 9 additions & 1 deletion pkg/cmd/version/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,7 @@ func TestGetVersions(t *testing.T) {
dashboardDeployment := getDeploymentData("dashboard-dep", "", dashboardDeploymentLabels, map[string]string{"app.kubernetes.io/version": "v0.7.0"}, nil)

pipelineConfigMap := getConfigMapData("pipelines-info", "v0.10.0", map[string]string{"app.kubernetes.io/part-of": "tekton-pipelines"})
chainsConfigMap := getConfigMapData("chains-info", "v0.8.0", map[string]string{"app.kubernetes.io/part-of": "tekton-chains"})
triggersConfigMap := getConfigMapData("triggers-info", "v0.5.0", map[string]string{"app.kubernetes.io/part-of": "tekton-pipelines"})
dashboardConfigMap := getConfigMapData("dashboard-info", "v0.7.0", map[string]string{"app.kubernetes.io/part-of": "tekton-pipelines"})
operatorConfigMap := getConfigMapData("operators-info", "v0.54.0", map[string]string{"app.kubernetes.io/part-of": "tekton-pipelines"})
Expand Down Expand Up @@ -303,6 +304,13 @@ func TestGetVersions(t *testing.T) {
deployment: []*v1.Deployment{},
configMap: []*corev1.ConfigMap{pipelineConfigMap, triggersConfigMap, dashboardConfigMap, operatorConfigMap},
goldenFile: true,
}, {
name: "deployment with pipeline, chains, triggers, dashboard and operator installed",
namespace: "test",
userProvidedNamespace: "test",
deployment: []*v1.Deployment{},
configMap: []*corev1.ConfigMap{pipelineConfigMap, chainsConfigMap, triggersConfigMap, dashboardConfigMap, operatorConfigMap},
goldenFile: true,
}}
for _, tp := range testParams {
t.Run(tp.name, func(t *testing.T) {
Expand Down Expand Up @@ -365,4 +373,4 @@ func getConfigMapData(name, version string, labels map[string]string) *corev1.Co
"version": version,
},
}
}
}
27 changes: 26 additions & 1 deletion pkg/version/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"github.com/tektoncd/cli/pkg/cli"
v1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

Expand All @@ -32,13 +33,14 @@ const (
oldTriggersControllerSelector string = "app.kubernetes.io/component=controller,app.kubernetes.io/name=tekton-triggers"
dashboardControllerSelector string = "app.kubernetes.io/part-of=tekton-dashboard,app.kubernetes.io/component=dashboard,app.kubernetes.io/name=dashboard"
oldDashboardControllerSelector string = "app=tekton-dashboard"
chainsInfo string = "chains-info"
pipelinesInfo string = "pipelines-info"
triggersInfo string = "triggers-info"
dashboardInfo string = "dashboard-info"
operatorInfo string = "operators-info"
)

var defaultNamespaces = []string{"tekton-pipelines", "openshift-pipelines"}
var defaultNamespaces = []string{"tekton-pipelines", "openshift-pipelines", "tekton-chains"}

// GetPipelineVersion Get pipeline version, functions imported from Dashboard
func GetPipelineVersion(c *cli.Clients, ns string) (string, error) {
Expand Down Expand Up @@ -131,6 +133,9 @@ func getConfigMap(c *cli.Clients, name, ns string) (*corev1.ConfigMap, error) {
for _, n := range defaultNamespaces {
configMap, err = c.Kube.CoreV1().ConfigMaps(n).Get(context.Background(), name, metav1.GetOptions{})
if err != nil {
if errors.IsNotFound(err) {
continue
}
return nil, err
}
if configMap != nil {
Expand Down Expand Up @@ -178,6 +183,26 @@ func findPipelineVersion(deployments []v1.Deployment) string {
return version
}

// GetChainsVersion Get chains version
func GetChainsVersion(c *cli.Clients, ns string) (string, error) {

var version string
configMap, err := getConfigMap(c, chainsInfo, ns)
if err == nil {
version = configMap.Data["version"]
}

if version != "" {
return version, nil
}

if err != nil {
return "", err
}

return version, nil
}

// GetTriggerVersion Get triggers version.
func GetTriggerVersion(c *cli.Clients, ns string) (string, error) {

Expand Down
39 changes: 39 additions & 0 deletions pkg/version/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,45 @@ func getDeploymentData(name, image string, deploymentLabels, podTemplateLabels,
}
}

func TestGetChainsVersionViaConfigMap(t *testing.T) {

testParams := []struct {
name string
namespace string
userProvidedNamespace string
configMap *corev1.ConfigMap
want string
}{
{
name: "get chains version from configmap present in different namespace other than default namespaces",
namespace: "test",
userProvidedNamespace: "test",
configMap: getConfigMapData("chains-info", "test", map[string]string{"app.kubernetes.io/part-of": "tekton-chains"}),
want: "test",
}, {
name: "get chains version from configmap in tekton-chains namespace",
namespace: "tekton-chains",
configMap: getConfigMapData("chains-info", "main", map[string]string{"app.kubernetes.io/part-of": "tekton-chains"}),
want: "main",
},
}
for _, tp := range testParams {
t.Run(tp.name, func(t *testing.T) {
cs, _ := test.SeedTestData(t, pipelinetest.Data{})
p := &test.Params{Kube: cs.Kube}
cls, err := p.Clients()
if err != nil {
t.Errorf("failed to get client: %v", err)
}
if _, err := cls.Kube.CoreV1().ConfigMaps(tp.namespace).Create(context.Background(), tp.configMap, metav1.CreateOptions{}); err != nil {
t.Errorf("failed to create configmap: %v", err)
}
version, _ := GetChainsVersion(cls, tp.userProvidedNamespace)
test.AssertOutput(t, tp.want, version)
})
}
}

func TestGetTriggerVersion(t *testing.T) {
oldDeploymentLabels := map[string]string{
"app.kubernetes.io/component": "controller",
Expand Down

0 comments on commit 6d52473

Please sign in to comment.