This is an automated email from the ASF dual-hosted git repository.

klesh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 9974ce917 fix(plugins): change testmo icon color, add beta tag, remove 
project creation (#8513)
9974ce917 is described below

commit 9974ce917ed538bf9ac0f58bed92c7d51747fc1c
Author: Richard Boisvert <[email protected]>
AuthorDate: Tue Jul 29 22:56:45 2025 -0400

    fix(plugins): change testmo icon color, add beta tag, remove project 
creation (#8513)
    
    Improve and fix the Testmo plugin:
    1. Icon Color Update
    
    Redesigned icon.svg to use DevLake's signature blue (#7497f7)
    Simplified to clean three-layer hexagonal structure for better visual 
integration
    
    2. Added Beta Tag
    
    Added isBeta: true in config.tsx to display beta indicator in UI
    
    3. Enhanced Task Display Names
    
    Added Name field to TestmoOptions (task_data.go)
    Updated blueprint_v200.go and task.tsx to show meaningful names like 
"Testmo:ProjectName"
    Improves task identification during pipeline execution
    
    4. Removed Invalid Project Creation
    
    Removed tasks.ConvertProjectsMeta from SubTaskMetas (impl.go)
    Deleted project_converter.go entirely
    Prevents creation of invalid domain layer projects that don't align with 
DevLake's project model
---
 backend/plugins/testmo/api/blueprint_v200.go       |  1 +
 backend/plugins/testmo/impl/impl.go                |  1 -
 backend/plugins/testmo/tasks/project_converter.go  | 79 ----------------------
 backend/plugins/testmo/tasks/task_data.go          |  1 +
 .../src/plugins/register/testmo/assets/icon.svg    | 43 ++++++------
 config-ui/src/plugins/register/testmo/config.tsx   |  3 +-
 config-ui/src/routes/pipeline/components/task.tsx  |  3 +
 7 files changed, 27 insertions(+), 104 deletions(-)

diff --git a/backend/plugins/testmo/api/blueprint_v200.go 
b/backend/plugins/testmo/api/blueprint_v200.go
index d46371828..56b8eaf20 100644
--- a/backend/plugins/testmo/api/blueprint_v200.go
+++ b/backend/plugins/testmo/api/blueprint_v200.go
@@ -69,6 +69,7 @@ func makePipelinePlanV200(
                        tasks.TestmoOptions{
                                ConnectionId: connection.ID,
                                ProjectId:    scope.Id,
+                               Name:         scope.Name,
                                ScopeConfig:  scopeConfig,
                        },
                )
diff --git a/backend/plugins/testmo/impl/impl.go 
b/backend/plugins/testmo/impl/impl.go
index 9603d5c90..68de13212 100644
--- a/backend/plugins/testmo/impl/impl.go
+++ b/backend/plugins/testmo/impl/impl.go
@@ -92,7 +92,6 @@ func (p Testmo) SubTaskMetas() []plugin.SubTaskMeta {
                tasks.ExtractAutomationRunsMeta,
                tasks.CollectTestsMeta,
                tasks.ExtractTestsMeta,
-               tasks.ConvertProjectsMeta,
                tasks.ConvertAutomationRunsMeta,
                tasks.ConvertTestsMeta,
        }
diff --git a/backend/plugins/testmo/tasks/project_converter.go 
b/backend/plugins/testmo/tasks/project_converter.go
deleted file mode 100644
index 29fee30c5..000000000
--- a/backend/plugins/testmo/tasks/project_converter.go
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package tasks
-
-import (
-       "reflect"
-
-       "github.com/apache/incubator-devlake/core/dal"
-       "github.com/apache/incubator-devlake/core/errors"
-       "github.com/apache/incubator-devlake/core/models"
-       "github.com/apache/incubator-devlake/core/plugin"
-       helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
-       testmoModels "github.com/apache/incubator-devlake/plugins/testmo/models"
-)
-
-var ConvertProjectsMeta = plugin.SubTaskMeta{
-       Name:             "convertProjects",
-       EntryPoint:       ConvertProjects,
-       EnabledByDefault: true,
-       Description:      "Convert tool layer table testmo_projects into domain 
layer table projects",
-       DomainTypes:      []string{plugin.DOMAIN_TYPE_CODE_QUALITY},
-}
-
-func ConvertProjects(taskCtx plugin.SubTaskContext) errors.Error {
-       data := taskCtx.GetData().(*TestmoTaskData)
-       db := taskCtx.GetDal()
-
-       cursor, err := db.Cursor(dal.From(&testmoModels.TestmoProject{}), 
dal.Where("connection_id = ? AND id = ?", data.Options.ConnectionId, 
data.Options.ProjectId))
-       if err != nil {
-               return err
-       }
-       defer cursor.Close()
-
-       converter, err := helper.NewDataConverter(helper.DataConverterArgs{
-               RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
-                       Ctx: taskCtx,
-                       Params: TestmoApiParams{
-                               ConnectionId: data.Options.ConnectionId,
-                               ProjectId:    data.Options.ProjectId,
-                       },
-                       Table: RAW_PROJECT_TABLE,
-               },
-               InputRowType: reflect.TypeOf(testmoModels.TestmoProject{}),
-               Input:        cursor,
-               Convert: func(inputRow interface{}) ([]interface{}, 
errors.Error) {
-                       project := inputRow.(*testmoModels.TestmoProject)
-
-                       domainProject := &models.Project{
-                               BaseProject: models.BaseProject{
-                                       Name:        project.Name,
-                                       Description: "",
-                               },
-                       }
-
-                       return []interface{}{domainProject}, nil
-               },
-       })
-
-       if err != nil {
-               return err
-       }
-
-       return converter.Execute()
-}
diff --git a/backend/plugins/testmo/tasks/task_data.go 
b/backend/plugins/testmo/tasks/task_data.go
index 133ff7b9a..854326804 100644
--- a/backend/plugins/testmo/tasks/task_data.go
+++ b/backend/plugins/testmo/tasks/task_data.go
@@ -27,6 +27,7 @@ import (
 type TestmoOptions struct {
        ConnectionId uint64 `json:"connectionId"`
        ProjectId    uint64 `json:"projectId"`
+       Name         string `json:"name"`
        ScopeConfig  *models.TestmoScopeConfig
 
        // Time filter
diff --git a/config-ui/src/plugins/register/testmo/assets/icon.svg 
b/config-ui/src/plugins/register/testmo/assets/icon.svg
index 2e9e7f837..dadbbf9ce 100644
--- a/config-ui/src/plugins/register/testmo/assets/icon.svg
+++ b/config-ui/src/plugins/register/testmo/assets/icon.svg
@@ -1,23 +1,20 @@
-<svg xmlns="http://www.w3.org/2000/svg"; fill="none" viewBox="0 0 94.833 109" 
style="max-height: 500px" width="94.833" height="109">
-<path fill="#002942" d="M139.151 
36.1165H148.124V45.9625H139.151V62.4784C139.151 66.7661 142.248 66.8455 148.124 
66.5279V75.8181C134.069 77.4062 128.908 73.3566 128.908 
62.4784V45.9625H122V36.1165H128.908V28.0967L139.151 25V36.1165Z"/>
-<path fill="#002942" d="M192.298 55.9673C192.298 57.3171 192.139 58.667 
191.901 60.1757H161.966C163.316 65.1781 167.048 67.6396 173.162 67.6396C177.053 
67.6396 180.07 66.2897 182.055 63.6694L190.313 68.4336C186.422 74.0712 180.626 
76.9298 173.003 76.9298C166.412 76.9298 161.172 74.9447 157.202 70.9745C153.232 
67.0043 151.246 62.0019 151.246 55.9673C151.246 50.012 153.232 45.0096 157.122 
41.0395C161.013 36.9899 166.095 35.0048 172.209 35.0048C178.005 35.0048 182.849 
36.9899 186.581 41.039 [...]
-<path fill="#002942" d="M206.553 47.3917C206.553 45.4066 208.538 44.1362 
211.158 44.1362C214.096 44.1362 216.24 45.486 217.51 48.1858L226.245 
43.4216C223.148 38.0221 217.59 35.0048 211.158 35.0048C206.87 35.0048 203.297 
36.1165 200.359 38.4192C197.501 40.6425 196.071 43.7392 196.071 47.6299C196.071 
55.8879 203.456 58.3494 209.332 59.858C213.381 60.8903 216.558 62.0813 216.558 
64.2252C216.558 66.5279 214.731 67.6396 211.079 67.6396C207.029 67.6396 204.488 
65.8927 203.297 62.4784L194.404 6 [...]
-<path fill="#002942" d="M245.406 
36.1165H254.378V45.9625H245.406V62.4784C245.406 66.7661 248.502 66.8455 254.378 
66.5279V75.8181C240.324 77.4062 235.163 73.3566 235.163 
62.4784V45.9625H228.255V36.1165H235.163V28.0967L245.406 25V36.1165Z"/>
-<path fill="#002942" d="M305.337 35.0048C300.096 35.0048 296.126 36.9105 
293.505 40.7219C291.203 36.9105 287.55 35.0048 282.707 35.0048C277.704 35.0048 
274.052 36.7517 271.67 40.3248V36.1165H261.427V75.8181H271.67V53.5058C271.67 
47.7093 274.608 44.5332 279.133 44.5332C283.342 44.5332 285.803 47.3123 285.803 
52.0765V75.8181H296.046V53.5058C296.046 47.7093 298.746 44.5332 303.431 
44.5332C307.639 44.5332 310.101 47.3123 310.101 
52.0765V75.8181H320.344V51.3619C320.344 41.4365 314.468 35.0048 [...]
-<path fill="#002942" d="M368.189 55.9673C368.189 61.8431 366.125 66.8455 
362.075 70.8951C358.026 74.9447 353.023 76.9298 347.147 76.9298C341.272 76.9298 
336.269 74.9447 332.22 70.8951C328.17 66.8455 326.185 61.8431 326.185 
55.9673C326.185 50.0914 328.17 45.1684 332.22 41.1189C336.269 37.0693 341.272 
35.0048 347.147 35.0048C353.023 35.0048 358.026 37.0693 362.075 41.1189C366.125 
45.1684 368.189 50.0914 368.189 55.9673ZM336.428 55.9673C336.428 59.1434 337.46 
61.7637 339.445 63.8282C341.51  [...]
-<path fill="#005CB1" d="M61.7653 0L94.3469 18.4141V56.2131L61.7655 
75.3027L28.9287 56.2222V18.4051L61.7653 0ZM36.4909 22.8355V51.8702L61.7497 
66.5473L86.7847 51.8792V22.8265L61.75 8.67771L36.4909 22.8355Z" 
clip-rule="evenodd" fill-rule="evenodd"/>
-<path fill="#32CDFF" d="M33.1772 16.0554L66.4426 35.2106V72.5672L33.3511 
91.6701L0 72.5762V34.6524L33.1772 16.0554ZM7.56222 39.0827V68.1918L33.3354 
82.9473L58.8804 68.2009V39.5824L33.1269 24.7528L7.56222 39.0827Z" 
clip-rule="evenodd" fill-rule="evenodd"/>
-<g opacity="0.5">
-<path fill="#005EE2" d="M66.0334 72.8036L61.7337 75.2857L54.1955 
70.9055L58.8807 68.2009V64.8817L61.7497 66.5488L66.4429 63.7991V72.5637L66.0334 
72.8036Z"/>
-<path fill="#005EE2" d="M40.7798 20.4331L33.1774 16.0554L28.9287 
18.437V27.1062L33.1272 24.7528L36.4909 26.6898V22.837L40.7798 20.4331Z"/>
-</g>
-<path fill="#3DD279" d="M61.7654 32.549L94.3469 51.081V89.0804L61.7656 
108.292L28.9287 89.0895V51.072L61.7654 32.549ZM36.4909 55.4886V84.7514L61.7497 
99.5227L86.7847 84.7605V55.4796L61.7499 41.2401L36.4909 55.4886Z" 
clip-rule="evenodd" fill-rule="evenodd"/>
-<g opacity="0.5">
-<path fill="#08AD98" d="M66.4429 35.2095L61.7653 32.549L54.1435 
36.8484L58.8807 39.5762V42.8586L61.7499 41.2401L66.4429 43.9094V35.2095Z"/>
-<path fill="#08AD98" d="M40.8797 87.318L33.3513 91.6639L32.3821 91.109L28.9287 
89.0895V80.418L33.3357 82.9411L36.4909 81.1197V84.7514L40.8797 87.318Z"/>
-</g>
-<g opacity="0.5">
-<path fill="#006387" d="M28.9287 51.0733V56.2188L36.4909 
60.613V55.4899L39.6548 53.7052L36.4909 51.8668V46.8075L28.9287 51.0733Z"/>
-<path fill="#006387" d="M86.7847 46.781V51.8758L83.6626 53.7051L86.7847 
55.4809V60.6404L94.3469 56.2097V51.0823L86.7847 46.781Z"/>
-</g>
-</svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg";
+     viewBox="0 0 94.833 109"
+     width="94.833"
+     height="109">
+  <g fill="#7497f7" fill-rule="evenodd" clip-rule="evenodd">
+    <!-- Top hexagon -->
+    <path d="M61.765 0 94.347 18.414v37.799L61.765 75.303 28.929 
56.222V18.405L61.765 0ZM36.491 22.836v29.034l25.259 14.677 
25.035-14.668V22.827L61.75 8.678 36.491 22.836Z"/>
+    <!-- Mid‑layer hexagon -->
+    <path d="M33.177 16.055 66.443 35.211v37.356L33.351 91.67 0 
72.576V34.652l33.177-18.597Zm-25.615 23.028v29.109l25.773 14.755 
25.545-14.647V39.582L33.127 24.753 7.562 39.083Z"/>
+    <!-- Bottom hexagon -->
+    <path d="M61.765 32.549 94.347 51.081v38L61.766 108.292 28.929 
89.09V51.072l32.836-18.523Zm-25.274 22.94v29.263l25.259 14.771 
25.035-14.762V55.48L61.75 41.24 36.491 55.489Z"/>
+    <!-- Semi‑transparent highlights -->
+    <path opacity=".5" d="M66.033 72.804 61.734 75.286l-7.538-4.38 
4.685-2.704v-3.319l2.869 1.667 4.693-2.75v8.765Z"/>
+    <path opacity=".5" d="M40.78 20.433 33.177 16.055l-4.249 
2.382v8.669l4.198-2.353 3.364 1.937v-3.853l4.289-2.404Z"/>
+    <path opacity=".5" d="M66.443 35.209 61.765 32.549l-7.622 4.299 4.737 
2.728v3.282l2.87-1.619 4.693 2.669v-8.7Z"/>
+    <path opacity=".5" d="M40.88 87.318 33.351 
91.664l-.969-.555-3.453-2.02v-8.672l4.407 2.523 3.155-1.822v3.632l4.389 
2.567Z"/>
+    <path opacity=".5" d="M28.929 51.073v5.146l7.562 
4.394v-5.123l3.164-1.785-3.164-1.839v-5.059l-7.562 4.266Z"/>
+    <path opacity=".5" d="M86.785 46.781v5.095l-3.122 1.829 3.122 
1.776v5.159l7.562-4.431v-5.128l-7.562-4.301Z"/>
+  </g>
+</svg>
diff --git a/config-ui/src/plugins/register/testmo/config.tsx 
b/config-ui/src/plugins/register/testmo/config.tsx
index fc01e2ff9..b830fa334 100644
--- a/config-ui/src/plugins/register/testmo/config.tsx
+++ b/config-ui/src/plugins/register/testmo/config.tsx
@@ -24,6 +24,7 @@ export const TestmoConfig: IPluginConfig = {
   plugin: 'testmo',
   name: 'Testmo',
   icon: ({ color }) => <Icon fill={color} />,
+  isBeta: true,
   sort: 160,
   connection: {
     docLink: 'https://devlake.apache.org/docs/Configuration/Testmo',
@@ -62,4 +63,4 @@ export const TestmoConfig: IPluginConfig = {
     entities: ['TEST', 'TESTCASE', 'TESTRESULT'],
     transformation: {},
   },
-}
+};
diff --git a/config-ui/src/routes/pipeline/components/task.tsx 
b/config-ui/src/routes/pipeline/components/task.tsx
index d4a012a11..937a7dc49 100644
--- a/config-ui/src/routes/pipeline/components/task.tsx
+++ b/config-ui/src/routes/pipeline/components/task.tsx
@@ -86,6 +86,9 @@ export const PipelineTask = ({ task }: Props) => {
       case ['bamboo'].includes(config.plugin):
         name = `${name}:${options.planKey}`;
         break;
+      case ['testmo'].includes(config.plugin):
+        name = `${name}:${options.name}`;
+        break;
       case ['azuredevops_go'].includes(config.plugin):
         name = `ado:${options.name}`;
         break;

Reply via email to