diff --git a/pkg/cmd/version/testdata/TestGetVersions-deployment_only_with_pipeline_installed.golden b/pkg/cmd/version/testdata/TestGetVersions-deployment_only_with_pipeline_installed.golden
new file mode 100644
index 0000000000..7291f23fb7
--- /dev/null
+++ b/pkg/cmd/version/testdata/TestGetVersions-deployment_only_with_pipeline_installed.golden
@@ -0,0 +1,2 @@
+Client version: dev
+Pipeline version: v0.10.0
diff --git a/pkg/cmd/version/testdata/TestGetVersions-deployment_with_pipeline,_triggers_and_dashboard_installed.golden b/pkg/cmd/version/testdata/TestGetVersions-deployment_with_pipeline,_triggers_and_dashboard_installed.golden
new file mode 100644
index 0000000000..bcecbf3ef2
--- /dev/null
+++ b/pkg/cmd/version/testdata/TestGetVersions-deployment_with_pipeline,_triggers_and_dashboard_installed.golden
@@ -0,0 +1,4 @@
+Client version: dev
+Pipeline version: v0.10.0
+Triggers version: v0.5.0
+Dashboard version: v0.7.0
diff --git a/pkg/cmd/version/testdata/TestGetVersions-deployment_with_pipeline_and_dashboard_installed.golden b/pkg/cmd/version/testdata/TestGetVersions-deployment_with_pipeline_and_dashboard_installed.golden
new file mode 100644
index 0000000000..0b70794616
--- /dev/null
+++ b/pkg/cmd/version/testdata/TestGetVersions-deployment_with_pipeline_and_dashboard_installed.golden
@@ -0,0 +1,3 @@
+Client version: dev
+Pipeline version: v0.10.0
+Dashboard version: v0.7.0
diff --git a/pkg/cmd/version/testdata/TestGetVersions-deployment_with_pipeline_and_triggers_installed.golden b/pkg/cmd/version/testdata/TestGetVersions-deployment_with_pipeline_and_triggers_installed.golden
new file mode 100644
index 0000000000..be27df77fb
--- /dev/null
+++ b/pkg/cmd/version/testdata/TestGetVersions-deployment_with_pipeline_and_triggers_installed.golden
@@ -0,0 +1,3 @@
+Client version: dev
+Pipeline version: v0.10.0
+Triggers version: v0.5.0
diff --git a/pkg/cmd/version/testdata/TestGetVersions-empty_deployment_items.golden b/pkg/cmd/version/testdata/TestGetVersions-empty_deployment_items.golden
new file mode 100644
index 0000000000..4f5540d7c3
--- /dev/null
+++ b/pkg/cmd/version/testdata/TestGetVersions-empty_deployment_items.golden
@@ -0,0 +1,2 @@
+Client version: dev
+Pipeline version: unknown, pipeline controller may be installed in another namespace please use tkn version -n {namespace}
diff --git a/pkg/cmd/version/testdata/TestVersionGood.golden b/pkg/cmd/version/testdata/TestVersionGood.golden
index 589514fc09..8d46e5ddd6 100644
--- a/pkg/cmd/version/testdata/TestVersionGood.golden
+++ b/pkg/cmd/version/testdata/TestVersionGood.golden
@@ -1,4 +1,2 @@
Client version: v1.2.3
Pipeline version: unknown, pipeline controller may be installed in another namespace please use tkn version -n {namespace}
-Triggers version: unknown, triggers controller may be installed in another namespace please use tkn version -n {namespace}
-Dashboard version: unknown, dashboard controller may be installed in another namespace please use tkn version -n {namespace}
diff --git a/pkg/cmd/version/version.go b/pkg/cmd/version/version.go
index ecf02a0c8f..ecfd67474d 100644
--- a/pkg/cmd/version/version.go
+++ b/pkg/cmd/version/version.go
@@ -67,17 +67,13 @@ func Command(p cli.Params) *cobra.Command {
fmt.Fprintf(cmd.OutOrStdout(), "Pipeline version: %s\n", pipelineVersion)
triggersVersion, _ := version.GetTriggerVersion(cs, namespace)
- if triggersVersion == "" {
- triggersVersion = "unknown, " +
- "triggers controller may be installed in another namespace please use tkn version -n {namespace}"
+ if triggersVersion != "" {
+ fmt.Fprintf(cmd.OutOrStdout(), "Triggers version: %s\n", triggersVersion)
}
- fmt.Fprintf(cmd.OutOrStdout(), "Triggers version: %s\n", triggersVersion)
dashboardVersion, _ := version.GetDashboardVersion(cs, namespace)
- if dashboardVersion == "" {
- dashboardVersion = "unknown, " +
- "dashboard controller may be installed in another namespace please use tkn version -n {namespace}"
+ if dashboardVersion != "" {
+ fmt.Fprintf(cmd.OutOrStdout(), "Dashboard version: %s\n", dashboardVersion)
}
- fmt.Fprintf(cmd.OutOrStdout(), "Dashboard version: %s\n", dashboardVersion)
}
if !check || clientVersion == devVersion {
diff --git a/pkg/cmd/version/version_test.go b/pkg/cmd/version/version_test.go
index 914545435e..fb586d5747 100644
--- a/pkg/cmd/version/version_test.go
+++ b/pkg/cmd/version/version_test.go
@@ -22,6 +22,7 @@ import (
"net"
"net/http"
"net/http/httptest"
+ "strings"
"testing"
"time"
@@ -29,6 +30,9 @@ import (
pipelinetest "github.com/tektoncd/pipeline/test/v1alpha1"
"gotest.tools/v3/assert"
"gotest.tools/v3/golden"
+ v1 "k8s.io/api/apps/v1"
+ corev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func TestVersionGood(t *testing.T) {
@@ -150,3 +154,104 @@ func testingHTTPClient(handler http.Handler) (*http.Client, func()) {
return cli, s.Close
}
+
+func TestGetVersions(t *testing.T) {
+ pipelineDeploymentLabels := map[string]string{
+ "app.kubernetes.io/part-of": "tekton-pipelines",
+ "app.kubernetes.io/component": "controller",
+ "app.kubernetes.io/name": "controller",
+ }
+ triggersDeploymentLabels := map[string]string{
+ "app.kubernetes.io/part-of": "tekton-triggers",
+ "app.kubernetes.io/component": "controller",
+ "app.kubernetes.io/name": "controller",
+ }
+ dashboardDeploymentLabels := map[string]string{
+ "app.kubernetes.io/part-of": "tekton-dashboard",
+ "app.kubernetes.io/component": "dashboard",
+ "app.kubernetes.io/name": "dashboard",
+ }
+ pipelineDeployment := getDeploymentData("pipeline-dep", "", pipelineDeploymentLabels, map[string]string{"app.kubernetes.io/version": "v0.10.0"}, nil)
+ triggersDeployment := getDeploymentData("triggers-dep", "", triggersDeploymentLabels, map[string]string{"app.kubernetes.io/version": "v0.5.0"}, nil)
+ dashboardDeployment := getDeploymentData("dashboard-dep", "", dashboardDeploymentLabels, map[string]string{"app.kubernetes.io/version": "v0.7.0"}, nil)
+
+ testParams := []struct {
+ name string
+ namespace string
+ userProvidedNamespace string
+ deployment []*v1.Deployment
+ goldenFile bool
+ }{{
+ name: "empty deployment items",
+ namespace: "tekton-pipelines",
+ deployment: []*v1.Deployment{},
+ goldenFile: true,
+ }, {
+ name: "deployment only with pipeline installed",
+ namespace: "test",
+ userProvidedNamespace: "test",
+ deployment: []*v1.Deployment{pipelineDeployment},
+ goldenFile: true,
+ }, {
+ name: "deployment with pipeline and triggers installed",
+ namespace: "test",
+ userProvidedNamespace: "test",
+ deployment: []*v1.Deployment{pipelineDeployment, triggersDeployment},
+ goldenFile: true,
+ }, {
+ name: "deployment with pipeline and dashboard installed",
+ namespace: "test",
+ userProvidedNamespace: "test",
+ deployment: []*v1.Deployment{pipelineDeployment, dashboardDeployment},
+ goldenFile: true,
+ }, {
+ name: "deployment with pipeline, triggers and dashboard installed",
+ namespace: "test",
+ userProvidedNamespace: "test",
+ deployment: []*v1.Deployment{pipelineDeployment, triggersDeployment, dashboardDeployment},
+ goldenFile: true,
+ }}
+ for _, tp := range testParams {
+ t.Run(tp.name, func(t *testing.T) {
+ seedData, _ := test.SeedTestData(t, pipelinetest.Data{})
+ cs := pipelinetest.Clients{Kube: seedData.Kube}
+ p := &test.Params{Kube: cs.Kube}
+ version := Command(p)
+ cls, err := p.Clients()
+ if err != nil {
+ t.Errorf("failed to get client: %v", err)
+ }
+ // To add multiple deployments in a particular namespace
+ for _, v := range tp.deployment {
+ if _, err := cls.Kube.AppsV1().Deployments(tp.namespace).Create(v); err != nil {
+ t.Errorf("failed to create deployment: %v", err)
+ }
+ }
+ got, _ := test.ExecuteCommand(version, "version", "-n", "test")
+ golden.Assert(t, got, strings.ReplaceAll(fmt.Sprintf("%s.golden", t.Name()), "/", "-"))
+ })
+ }
+}
+
+func getDeploymentData(name, image string, deploymentLabels, podTemplateLabels, annotations map[string]string) *v1.Deployment {
+ return &v1.Deployment{
+ TypeMeta: metav1.TypeMeta{},
+ ObjectMeta: metav1.ObjectMeta{
+ Name: name,
+ Labels: deploymentLabels,
+ },
+ Spec: v1.DeploymentSpec{
+ Template: corev1.PodTemplateSpec{
+ ObjectMeta: metav1.ObjectMeta{
+ Labels: podTemplateLabels,
+ Annotations: annotations,
+ },
+ Spec: corev1.PodSpec{
+ Containers: []corev1.Container{{
+ Image: image,
+ }},
+ },
+ },
+ },
+ }
+}