@backstage-community/plugin-tekton 3.28.0 → 3.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/components/PipelineRunList/PipelineRunColumnHeader.esm.js.map +1 -1
  3. package/dist/components/PipelineRunList/PipelineRunList.esm.js +2 -1
  4. package/dist/components/PipelineRunList/PipelineRunList.esm.js.map +1 -1
  5. package/dist/components/PipelineRunList/PipelineRunListSearchBar.esm.js +2 -1
  6. package/dist/components/PipelineRunList/PipelineRunListSearchBar.esm.js.map +1 -1
  7. package/dist/components/PipelineRunList/PipelineRunOutput.esm.js +2 -1
  8. package/dist/components/PipelineRunList/PipelineRunOutput.esm.js.map +1 -1
  9. package/dist/components/PipelineRunList/PipelineRunRow.esm.js +2 -1
  10. package/dist/components/PipelineRunList/PipelineRunRow.esm.js.map +1 -1
  11. package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js +2 -1
  12. package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js.map +1 -1
  13. package/dist/components/PipelineRunList/PipelineRunVulnerabilities.esm.js +2 -1
  14. package/dist/components/PipelineRunList/PipelineRunVulnerabilities.esm.js.map +1 -1
  15. package/dist/components/PipelineRunList/PipelineTableHeader.esm.js +2 -1
  16. package/dist/components/PipelineRunList/PipelineTableHeader.esm.js.map +1 -1
  17. package/dist/components/PipelineRunList/PlrStatus.esm.js +2 -1
  18. package/dist/components/PipelineRunList/PlrStatus.esm.js.map +1 -1
  19. package/dist/components/PipelineRunLogs/PipelineRunLogDialog.esm.js +2 -1
  20. package/dist/components/PipelineRunLogs/PipelineRunLogDialog.esm.js.map +1 -1
  21. package/dist/components/PipelineRunLogs/PipelineRunLogDownloader.esm.js +2 -1
  22. package/dist/components/PipelineRunLogs/PipelineRunLogDownloader.esm.js.map +1 -1
  23. package/dist/components/PipelineRunLogs/PipelineRunLogViewer.esm.js +2 -1
  24. package/dist/components/PipelineRunLogs/PipelineRunLogViewer.esm.js.map +1 -1
  25. package/dist/components/PipelineRunLogs/PipelineRunLogs.esm.js +2 -1
  26. package/dist/components/PipelineRunLogs/PipelineRunLogs.esm.js.map +1 -1
  27. package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js +2 -1
  28. package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js.map +1 -1
  29. package/dist/components/PipelineRunLogs/TaskStatusStepper.esm.js +2 -1
  30. package/dist/components/PipelineRunLogs/TaskStatusStepper.esm.js.map +1 -1
  31. package/dist/components/PipelineRunOutput/PipelineRunOutputDialog.esm.js +2 -1
  32. package/dist/components/PipelineRunOutput/PipelineRunOutputDialog.esm.js.map +1 -1
  33. package/dist/components/common/ErrorPanel.esm.js +2 -1
  34. package/dist/components/common/ErrorPanel.esm.js.map +1 -1
  35. package/dist/components/common/PermissionAlert.esm.js +2 -1
  36. package/dist/components/common/PermissionAlert.esm.js.map +1 -1
  37. package/dist/components/common/StatusSelector.esm.js +2 -1
  38. package/dist/components/common/StatusSelector.esm.js.map +1 -1
  39. package/dist/components/common/TableExpandCollapse.esm.js +2 -1
  40. package/dist/components/common/TableExpandCollapse.esm.js.map +1 -1
  41. package/dist/components/pipeline-topology/PipelineTaskNode.esm.js +2 -1
  42. package/dist/components/pipeline-topology/PipelineTaskNode.esm.js.map +1 -1
  43. package/dist/components/pipeline-topology/PipelineVisualization.esm.js +2 -1
  44. package/dist/components/pipeline-topology/PipelineVisualization.esm.js.map +1 -1
  45. package/dist/components/pipeline-topology/PipelineVisualizationStepList.esm.js +2 -1
  46. package/dist/components/pipeline-topology/PipelineVisualizationStepList.esm.js.map +1 -1
  47. package/dist/components/pipeline-topology/PipelineVisualizationView.esm.js +2 -1
  48. package/dist/components/pipeline-topology/PipelineVisualizationView.esm.js.map +1 -1
  49. package/dist/index.d.ts +7 -1
  50. package/dist/index.esm.js +2 -1
  51. package/dist/index.esm.js.map +1 -1
  52. package/dist/translations/index.esm.js +10 -0
  53. package/dist/translations/index.esm.js.map +1 -0
  54. package/dist/{translation.esm.js → translations/ref.esm.js} +1 -1
  55. package/dist/{translation.esm.js.map → translations/ref.esm.js.map} +1 -1
  56. package/dist/utils/pipeline-step-utils.esm.js.map +1 -1
  57. package/dist/utils/tekton-utils.esm.js.map +1 -1
  58. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/**\n * Tekton translation reference.\n * @public\n */\nexport const tektonTranslationRef = createTranslationRef({\n id: 'tekton',\n messages: {\n errorPanel: {\n title: 'There was a problem retrieving Kubernetes objects',\n description:\n 'There was a problem retrieving some Kubernetes resources for the entity: {{entityName}}. This could mean that the Error Reporting card is not completely accurate.',\n },\n permissionAlert: {\n title: 'Permission required',\n description:\n 'To view Tekton Pipeline Runs, contact your administrator to give you the following permission(s): {{permissions}}.',\n },\n statusSelector: {\n label: 'Status',\n },\n tableExpandCollapse: {\n collapseAll: 'Collapse all',\n expandAll: 'Expand all',\n },\n pipelineVisualization: {\n emptyState: {\n description: 'No Pipeline Run to visualize',\n },\n noTasksDescription: 'This Pipeline Run has no tasks to visualize',\n stepList: {\n finallyTaskTitle: 'Finally Task',\n },\n },\n pipelineRunList: {\n title: 'Pipeline Runs',\n noPipelineRuns: 'No Pipeline Runs found',\n searchBarPlaceholder: 'Search',\n rowActions: {\n viewLogs: 'View logs',\n unauthorizedViewLogs: 'Unauthorized to view logs',\n viewSBOM: 'View SBOM',\n SBOMNotApplicable: 'View SBOM is not applicable for this PipelineRun',\n viewOutput: 'View output',\n outputNotApplicable:\n 'View Output is not applicable for this PipelineRun',\n },\n vulnerabilitySeverityTitle: {\n critical: 'Critical',\n high: 'High',\n medium: 'Medium',\n low: 'Low',\n },\n tableHeaderTitle: {\n name: 'NAME',\n vulnerabilities: 'VULNERABILITIES',\n status: 'STATUS',\n taskStatus: 'TASK STATUS',\n startTime: 'STARTED',\n duration: 'DURATION',\n actions: 'ACTIONS',\n },\n },\n pipelineRunLogs: {\n title: 'PipelineRun Logs',\n noLogs: 'No logs found',\n downloader: {\n downloadTaskLogs: 'Download',\n downloadPipelineRunLogs: 'Download all tasks logs',\n },\n podLogsDownloadLink: {\n title: 'Download',\n downloading: 'downloading logs',\n },\n taskStatusStepper: {\n skipped: 'Skipped',\n },\n },\n pipelineRunOutput: {\n title: 'PipelineRun Output',\n noOutput: 'No output',\n },\n pipelineRunStatus: {\n All: 'All',\n Cancelling: 'Cancelling',\n Succeeded: 'Succeeded',\n Failed: 'Failed',\n Running: 'Running',\n 'In Progress': 'In Progress',\n FailedToStart: 'FailedToStart',\n PipelineNotStarted: 'PipelineNotStarted',\n Skipped: 'Skipped',\n Cancelled: 'Cancelled',\n Pending: 'Pending',\n Idle: 'Idle',\n Other: 'Other',\n },\n pipelineRunDuration: {\n lessThanSec: 'less than a sec',\n hour_one: '{{count}} hour',\n hour_other: '{{count}} hours',\n minute_one: '{{count}} minute',\n minute_other: '{{count}} minutes',\n second_one: '{{count}} second',\n second_other: '{{count}} seconds',\n },\n },\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ref.esm.js","sources":["../../src/translations/ref.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/**\n * Tekton translation reference.\n * @public\n */\nexport const tektonTranslationRef = createTranslationRef({\n id: 'tekton',\n messages: {\n errorPanel: {\n title: 'There was a problem retrieving Kubernetes objects',\n description:\n 'There was a problem retrieving some Kubernetes resources for the entity: {{entityName}}. This could mean that the Error Reporting card is not completely accurate.',\n },\n permissionAlert: {\n title: 'Permission required',\n description:\n 'To view Tekton Pipeline Runs, contact your administrator to give you the following permission(s): {{permissions}}.',\n },\n statusSelector: {\n label: 'Status',\n },\n tableExpandCollapse: {\n collapseAll: 'Collapse all',\n expandAll: 'Expand all',\n },\n pipelineVisualization: {\n emptyState: {\n description: 'No Pipeline Run to visualize',\n },\n noTasksDescription: 'This Pipeline Run has no tasks to visualize',\n stepList: {\n finallyTaskTitle: 'Finally Task',\n },\n },\n pipelineRunList: {\n title: 'Pipeline Runs',\n noPipelineRuns: 'No Pipeline Runs found',\n searchBarPlaceholder: 'Search',\n rowActions: {\n viewLogs: 'View logs',\n unauthorizedViewLogs: 'Unauthorized to view logs',\n viewSBOM: 'View SBOM',\n SBOMNotApplicable: 'View SBOM is not applicable for this PipelineRun',\n viewOutput: 'View output',\n outputNotApplicable:\n 'View Output is not applicable for this PipelineRun',\n },\n vulnerabilitySeverityTitle: {\n critical: 'Critical',\n high: 'High',\n medium: 'Medium',\n low: 'Low',\n },\n tableHeaderTitle: {\n name: 'NAME',\n vulnerabilities: 'VULNERABILITIES',\n status: 'STATUS',\n taskStatus: 'TASK STATUS',\n startTime: 'STARTED',\n duration: 'DURATION',\n actions: 'ACTIONS',\n },\n },\n pipelineRunLogs: {\n title: 'PipelineRun Logs',\n noLogs: 'No logs found',\n downloader: {\n downloadTaskLogs: 'Download',\n downloadPipelineRunLogs: 'Download all tasks logs',\n },\n podLogsDownloadLink: {\n title: 'Download',\n downloading: 'downloading logs',\n },\n taskStatusStepper: {\n skipped: 'Skipped',\n },\n },\n pipelineRunOutput: {\n title: 'PipelineRun Output',\n noOutput: 'No output',\n },\n pipelineRunStatus: {\n All: 'All',\n Cancelling: 'Cancelling',\n Succeeded: 'Succeeded',\n Failed: 'Failed',\n Running: 'Running',\n 'In Progress': 'In Progress',\n FailedToStart: 'FailedToStart',\n PipelineNotStarted: 'PipelineNotStarted',\n Skipped: 'Skipped',\n Cancelled: 'Cancelled',\n Pending: 'Pending',\n Idle: 'Idle',\n Other: 'Other',\n },\n pipelineRunDuration: {\n lessThanSec: 'less than a sec',\n hour_one: '{{count}} hour',\n hour_other: '{{count}} hours',\n minute_one: '{{count}} minute',\n minute_other: '{{count}} minutes',\n second_one: '{{count}} second',\n second_other: '{{count}} seconds',\n },\n },\n});\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-step-utils.esm.js","sources":["../../src/utils/pipeline-step-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ComputedStatus, TerminatedReasons } from '@janus-idp/shared-react';\n\nimport { StepStatus, TaskStatus, TaskStatusStep } from '../types/taskRun';\nimport { calculateDuration } from './tekton-utils';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../translation';\n\nconst getMatchingStepDuration = (\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n matchingStep?: TaskStatusStep,\n) => {\n if (!matchingStep) return '';\n\n if (matchingStep.terminated) {\n return calculateDuration(\n t,\n matchingStep.terminated.startedAt,\n matchingStep.terminated.finishedAt,\n );\n }\n\n if (matchingStep.running) {\n return calculateDuration(t, matchingStep.running.startedAt);\n }\n\n return '';\n};\n\nconst getMatchingStep = (\n step: { name: string },\n status: TaskStatus,\n): TaskStatusStep | undefined => {\n const statusSteps: TaskStatusStep[] = status.steps || [];\n return statusSteps.find(statusStep => {\n // In rare occasions the status step name is prefixed with `step-`\n // This is likely a bug but this workaround will be temporary as it's investigated separately\n return (\n statusStep.name === step.name || statusStep.name === `step-${step.name}`\n );\n });\n};\n\nexport const createStepStatus = (\n step: { name: string },\n status: TaskStatus,\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n): StepStatus => {\n let stepRunStatus = ComputedStatus.PipelineNotStarted;\n let duration = null;\n\n if (!status?.reason) {\n stepRunStatus = ComputedStatus.Cancelled;\n } else if (status.reason === ComputedStatus['In Progress']) {\n // In progress, try to get granular statuses\n const matchingStep = getMatchingStep(step, status);\n\n if (!matchingStep) {\n stepRunStatus = ComputedStatus.Pending;\n } else if (matchingStep.terminated) {\n stepRunStatus =\n matchingStep.terminated.reason === TerminatedReasons.Completed\n ? ComputedStatus.Succeeded\n : ComputedStatus.Failed;\n duration = getMatchingStepDuration(t, matchingStep);\n } else if (matchingStep.running) {\n stepRunStatus = ComputedStatus['In Progress'];\n duration = getMatchingStepDuration(t, matchingStep);\n } else if (matchingStep.waiting) {\n stepRunStatus = ComputedStatus.Pending;\n }\n } else {\n // Not in progress, just use the run status reason\n stepRunStatus = status.reason;\n\n duration =\n getMatchingStepDuration(t, getMatchingStep(step, status)) ||\n status.duration;\n }\n\n return {\n duration,\n name: step.name,\n status: stepRunStatus as any,\n };\n};\n"],"names":[],"mappings":";;;AAsBA,MAAM,uBAAA,GAA0B,CAC9B,CAAA,EACA,YAAA,KACG;AACH,EAAA,IAAI,CAAC,cAAc,OAAO,EAAA;AAE1B,EAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,IAAA,OAAO,iBAAA;AAAA,MACL,CAAA;AAAA,MACA,aAAa,UAAA,CAAW,SAAA;AAAA,MACxB,aAAa,UAAA,CAAW;AAAA,KAC1B;AAAA,EACF;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,OAAO,iBAAA,CAAkB,CAAA,EAAG,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAO,EAAA;AACT,CAAA;AAEA,MAAM,eAAA,GAAkB,CACtB,IAAA,EACA,MAAA,KAC+B;AAC/B,EAAA,MAAM,WAAA,GAAgC,MAAA,CAAO,KAAA,IAAS,EAAC;AACvD,EAAA,OAAO,WAAA,CAAY,KAAK,CAAA,UAAA,KAAc;AAGpC,IAAA,OACE,UAAA,CAAW,SAAS,IAAA,CAAK,IAAA,IAAQ,WAAW,IAAA,KAAS,CAAA,KAAA,EAAQ,KAAK,IAAI,CAAA,CAAA;AAAA,EAE1E,CAAC,CAAA;AACH,CAAA;AAEO,MAAM,gBAAA,GAAmB,CAC9B,IAAA,EACA,MAAA,EACA,CAAA,KACe;AACf,EAAA,IAAI,gBAAgB,cAAA,CAAe,kBAAA;AACnC,EAAA,IAAI,QAAA,GAAW,IAAA;AAEf,EAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,IAAA,aAAA,GAAgB,cAAA,CAAe,SAAA;AAAA,EACjC,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,KAAW,cAAA,CAAe,aAAa,CAAA,EAAG;AAE1D,IAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AAEjD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,aAAA,GAAgB,cAAA,CAAe,OAAA;AAAA,IACjC,CAAA,MAAA,IAAW,aAAa,UAAA,EAAY;AAClC,MAAA,aAAA,GACE,aAAa,UAAA,CAAW,MAAA,KAAW,kBAAkB,SAAA,GACjD,cAAA,CAAe,YACf,cAAA,CAAe,MAAA;AACrB,MAAA,QAAA,GAAW,uBAAA,CAAwB,GAAG,YAAY,CAAA;AAAA,IACpD,CAAA,MAAA,IAAW,aAAa,OAAA,EAAS;AAC/B,MAAA,aAAA,GAAgB,eAAe,aAAa,CAAA;AAC5C,MAAA,QAAA,GAAW,uBAAA,CAAwB,GAAG,YAAY,CAAA;AAAA,IACpD,CAAA,MAAA,IAAW,aAAa,OAAA,EAAS;AAC/B,MAAA,aAAA,GAAgB,cAAA,CAAe,OAAA;AAAA,IACjC;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,aAAA,GAAgB,MAAA,CAAO,MAAA;AAEvB,IAAA,QAAA,GACE,wBAAwB,CAAA,EAAG,eAAA,CAAgB,MAAM,MAAM,CAAC,KACxD,MAAA,CAAO,QAAA;AAAA,EACX;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,MAAA,EAAQ;AAAA,GACV;AACF;;;;"}
1
+ {"version":3,"file":"pipeline-step-utils.esm.js","sources":["../../src/utils/pipeline-step-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ComputedStatus, TerminatedReasons } from '@janus-idp/shared-react';\n\nimport { StepStatus, TaskStatus, TaskStatusStep } from '../types/taskRun';\nimport { calculateDuration } from './tekton-utils';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../translations/index.ts';\n\nconst getMatchingStepDuration = (\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n matchingStep?: TaskStatusStep,\n) => {\n if (!matchingStep) return '';\n\n if (matchingStep.terminated) {\n return calculateDuration(\n t,\n matchingStep.terminated.startedAt,\n matchingStep.terminated.finishedAt,\n );\n }\n\n if (matchingStep.running) {\n return calculateDuration(t, matchingStep.running.startedAt);\n }\n\n return '';\n};\n\nconst getMatchingStep = (\n step: { name: string },\n status: TaskStatus,\n): TaskStatusStep | undefined => {\n const statusSteps: TaskStatusStep[] = status.steps || [];\n return statusSteps.find(statusStep => {\n // In rare occasions the status step name is prefixed with `step-`\n // This is likely a bug but this workaround will be temporary as it's investigated separately\n return (\n statusStep.name === step.name || statusStep.name === `step-${step.name}`\n );\n });\n};\n\nexport const createStepStatus = (\n step: { name: string },\n status: TaskStatus,\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n): StepStatus => {\n let stepRunStatus = ComputedStatus.PipelineNotStarted;\n let duration = null;\n\n if (!status?.reason) {\n stepRunStatus = ComputedStatus.Cancelled;\n } else if (status.reason === ComputedStatus['In Progress']) {\n // In progress, try to get granular statuses\n const matchingStep = getMatchingStep(step, status);\n\n if (!matchingStep) {\n stepRunStatus = ComputedStatus.Pending;\n } else if (matchingStep.terminated) {\n stepRunStatus =\n matchingStep.terminated.reason === TerminatedReasons.Completed\n ? ComputedStatus.Succeeded\n : ComputedStatus.Failed;\n duration = getMatchingStepDuration(t, matchingStep);\n } else if (matchingStep.running) {\n stepRunStatus = ComputedStatus['In Progress'];\n duration = getMatchingStepDuration(t, matchingStep);\n } else if (matchingStep.waiting) {\n stepRunStatus = ComputedStatus.Pending;\n }\n } else {\n // Not in progress, just use the run status reason\n stepRunStatus = status.reason;\n\n duration =\n getMatchingStepDuration(t, getMatchingStep(step, status)) ||\n status.duration;\n }\n\n return {\n duration,\n name: step.name,\n status: stepRunStatus as any,\n };\n};\n"],"names":[],"mappings":";;;AAsBA,MAAM,uBAAA,GAA0B,CAC9B,CAAA,EACA,YAAA,KACG;AACH,EAAA,IAAI,CAAC,cAAc,OAAO,EAAA;AAE1B,EAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,IAAA,OAAO,iBAAA;AAAA,MACL,CAAA;AAAA,MACA,aAAa,UAAA,CAAW,SAAA;AAAA,MACxB,aAAa,UAAA,CAAW;AAAA,KAC1B;AAAA,EACF;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,OAAO,iBAAA,CAAkB,CAAA,EAAG,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAO,EAAA;AACT,CAAA;AAEA,MAAM,eAAA,GAAkB,CACtB,IAAA,EACA,MAAA,KAC+B;AAC/B,EAAA,MAAM,WAAA,GAAgC,MAAA,CAAO,KAAA,IAAS,EAAC;AACvD,EAAA,OAAO,WAAA,CAAY,KAAK,CAAA,UAAA,KAAc;AAGpC,IAAA,OACE,UAAA,CAAW,SAAS,IAAA,CAAK,IAAA,IAAQ,WAAW,IAAA,KAAS,CAAA,KAAA,EAAQ,KAAK,IAAI,CAAA,CAAA;AAAA,EAE1E,CAAC,CAAA;AACH,CAAA;AAEO,MAAM,gBAAA,GAAmB,CAC9B,IAAA,EACA,MAAA,EACA,CAAA,KACe;AACf,EAAA,IAAI,gBAAgB,cAAA,CAAe,kBAAA;AACnC,EAAA,IAAI,QAAA,GAAW,IAAA;AAEf,EAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,IAAA,aAAA,GAAgB,cAAA,CAAe,SAAA;AAAA,EACjC,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,KAAW,cAAA,CAAe,aAAa,CAAA,EAAG;AAE1D,IAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AAEjD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,aAAA,GAAgB,cAAA,CAAe,OAAA;AAAA,IACjC,CAAA,MAAA,IAAW,aAAa,UAAA,EAAY;AAClC,MAAA,aAAA,GACE,aAAa,UAAA,CAAW,MAAA,KAAW,kBAAkB,SAAA,GACjD,cAAA,CAAe,YACf,cAAA,CAAe,MAAA;AACrB,MAAA,QAAA,GAAW,uBAAA,CAAwB,GAAG,YAAY,CAAA;AAAA,IACpD,CAAA,MAAA,IAAW,aAAa,OAAA,EAAS;AAC/B,MAAA,aAAA,GAAgB,eAAe,aAAa,CAAA;AAC5C,MAAA,QAAA,GAAW,uBAAA,CAAwB,GAAG,YAAY,CAAA;AAAA,IACpD,CAAA,MAAA,IAAW,aAAa,OAAA,EAAS;AAC/B,MAAA,aAAA,GAAgB,cAAA,CAAe,OAAA;AAAA,IACjC;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,aAAA,GAAgB,MAAA,CAAO,MAAA;AAEvB,IAAA,QAAA,GACE,wBAAwB,CAAA,EAAG,eAAA,CAAgB,MAAM,MAAM,CAAC,KACxD,MAAA,CAAO,QAAA;AAAA,EACX;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,MAAA,EAAQ;AAAA,GACV;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"tekton-utils.esm.js","sources":["../../src/utils/tekton-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n ClusterObjects,\n ObjectsByEntityResponse,\n} from '@backstage/plugin-kubernetes-common';\n\nimport { get } from 'lodash';\n\nimport {\n ComputedStatus,\n getTaskRunsForPipelineRun,\n pipelineRunFilterReducer,\n PipelineRunKind,\n pipelineRunStatus,\n SucceedConditionReason,\n TaskRunKind,\n TaskStatusTypes,\n updateTaskStatus,\n} from '@janus-idp/shared-react';\n\nimport { getPipelineRunScanResults } from '../hooks/usePipelineRunScanResults';\nimport { PipelineRunGVK, TaskRunGVK } from '../models';\nimport {\n ClusterErrors,\n Order,\n PipelineRunScanResults,\n TektonResponseData,\n} from '../types/types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../translation';\n\nexport const getClusters = (k8sObjects: ObjectsByEntityResponse) => {\n const clusters: string[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.cluster.name,\n );\n const errors: ClusterErrors[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.errors,\n );\n return { clusters, errors };\n};\n\nconst isTektonResource = (kind: string) =>\n [PipelineRunGVK.kind, TaskRunGVK.kind].includes(kind);\n\nconst getResourceType = (kind: string) => {\n switch (kind) {\n case PipelineRunGVK.kind:\n return 'pipelineruns';\n case TaskRunGVK.kind:\n return 'taskruns';\n default:\n return '';\n }\n};\n\nexport const getTektonResources = (\n cluster: number,\n k8sObjects: ObjectsByEntityResponse,\n) =>\n k8sObjects.items?.[cluster]?.resources?.reduce(\n (acc: TektonResponseData, res: any) => {\n if (res.type === 'pods') {\n return {\n ...acc,\n pods: { data: res.resources },\n };\n }\n if (\n res.type !== 'customresources' ||\n (res.type === 'customresources' && res.resources.length === 0)\n ) {\n return acc;\n }\n const customResKind = res.resources[0].kind;\n return {\n ...acc,\n ...(isTektonResource(customResKind) && {\n [getResourceType(customResKind)]: {\n data: res.resources,\n },\n }),\n };\n },\n {},\n );\n\nexport const totalPipelineRunTasks = (pipelinerun: PipelineRunKind): number => {\n if (!pipelinerun?.status?.pipelineSpec) {\n return 0;\n }\n const totalTasks = (pipelinerun.status.pipelineSpec?.tasks || []).length;\n const finallyTasks =\n (pipelinerun.status.pipelineSpec?.finally || []).length ?? 0;\n return totalTasks + finallyTasks;\n};\n\nexport const getTaskStatusOfPLR = (\n pipelinerun: PipelineRunKind,\n taskRuns: TaskRunKind[],\n) => {\n const totalTasks = totalPipelineRunTasks(pipelinerun);\n const plrTasks = getTaskRunsForPipelineRun(pipelinerun, taskRuns);\n const plrTaskLength = plrTasks?.length;\n const skippedTaskLength = pipelinerun?.status?.skippedTasks?.length || 0;\n\n const taskStatus: TaskStatusTypes = updateTaskStatus(pipelinerun, plrTasks);\n\n if (plrTasks?.length > 0) {\n const pipelineRunHasFailure = taskStatus[ComputedStatus.Failed] > 0;\n const pipelineRunIsCancelled =\n pipelineRunFilterReducer(pipelinerun) === ComputedStatus.Cancelled;\n const unhandledTasks =\n totalTasks >= plrTaskLength\n ? totalTasks - plrTaskLength - skippedTaskLength\n : totalTasks;\n\n if (pipelineRunHasFailure || pipelineRunIsCancelled) {\n taskStatus[ComputedStatus.Cancelled] += unhandledTasks;\n } else {\n taskStatus[ComputedStatus.Pending] += unhandledTasks;\n }\n } else if (\n pipelinerun?.status?.conditions?.[0]?.status === 'False' ||\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunCancelled\n ) {\n taskStatus[ComputedStatus.Cancelled] = totalTasks;\n } else if (\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunPending\n ) {\n taskStatus[ComputedStatus.Pending] += totalTasks;\n } else {\n taskStatus[ComputedStatus.PipelineNotStarted]++;\n }\n return taskStatus;\n};\n\nexport const getDuration = (\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n seconds: number,\n long?: boolean,\n): string => {\n if (seconds === 0) {\n return t('pipelineRunDuration.lessThanSec');\n }\n let sec = Math.round(seconds);\n let min = 0;\n let hr = 0;\n let duration = '';\n if (sec >= 60) {\n min = Math.floor(sec / 60);\n sec %= 60;\n }\n if (min >= 60) {\n hr = Math.floor(min / 60);\n min %= 60;\n }\n if (hr > 0) {\n duration += long ? t('pipelineRunDuration.hour', { count: hr }) : `${hr}h`;\n duration += ' ';\n }\n if (min > 0) {\n duration += long\n ? t('pipelineRunDuration.minute', { count: min })\n : `${min}m`;\n duration += ' ';\n }\n if (sec > 0) {\n duration += long\n ? t('pipelineRunDuration.second', { count: sec })\n : `${sec}s`;\n }\n\n return duration.trim();\n};\n\nexport const descendingComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n orderBy: string,\n) => {\n if (get(b, orderBy) < get(a, orderBy)) {\n return -1;\n }\n if (get(b, orderBy) > get(a, orderBy)) {\n return 1;\n }\n return 0;\n};\n\nexport const calculateDurationInSeconds = (\n startTime: string,\n endTime?: string,\n) => {\n const start = new Date(startTime).getTime();\n const end = endTime ? new Date(endTime).getTime() : new Date().getTime();\n const durationInSeconds = (end - start) / 1000;\n return durationInSeconds;\n};\n\nexport const durationComparator = (a: PipelineRunKind, b: PipelineRunKind) => {\n const durationA = a.status?.startTime\n ? calculateDurationInSeconds(a.status?.startTime, a.status?.completionTime)\n : 0;\n\n const durationB = b.status?.startTime\n ? calculateDurationInSeconds(b.status?.startTime, b.status?.completionTime)\n : 0;\n\n if (durationB < durationA) {\n return -1;\n }\n if (durationB > durationA) {\n return 1;\n }\n return 0;\n};\n\nconst vulnerabilitiesSortValue = (\n scanResults: PipelineRunScanResults,\n): number => {\n if (!scanResults?.vulnerabilities) {\n return -1;\n }\n // Expect no more than 999 of any one severity\n return (\n (scanResults.vulnerabilities.critical ?? 0) * 1000000000 +\n (scanResults.vulnerabilities.high ?? 0) * 1000000 +\n (scanResults.vulnerabilities.medium ?? 0) * 1000 +\n (scanResults.vulnerabilities.low ?? 0)\n );\n};\n\nexport const vulnerabilitiesComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n) => {\n const vulnerabilitiesSortValueA = vulnerabilitiesSortValue(\n getPipelineRunScanResults(a),\n );\n const vulnerabilitiesSortValueB = vulnerabilitiesSortValue(\n getPipelineRunScanResults(b),\n );\n\n if (vulnerabilitiesSortValueB < vulnerabilitiesSortValueA) {\n return -1;\n }\n if (vulnerabilitiesSortValueB > vulnerabilitiesSortValueA) {\n return 1;\n }\n return 0;\n};\n\nexport const getComparator = (\n order: Order,\n orderBy: string,\n orderById: string,\n) => {\n switch (orderById) {\n case 'duration':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? durationComparator(a, b)\n : -durationComparator(a, b);\n };\n case 'vulnerabilities':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? vulnerabilitiesComparator(a, b)\n : -vulnerabilitiesComparator(a, b);\n };\n default:\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? descendingComparator(a, b, orderBy)\n : -descendingComparator(a, b, orderBy);\n };\n }\n};\n\nexport const calculateDuration = (\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n startTime: string,\n endTime?: string,\n long?: boolean,\n) => {\n const durationInSeconds = calculateDurationInSeconds(startTime, endTime);\n return getDuration(t, durationInSeconds, long);\n};\n\nexport const pipelineRunDuration = (\n run: PipelineRunKind,\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n): string => {\n if (!run || Object.keys(run).length === 0) {\n return '-';\n }\n const startTime = run.status?.startTime;\n const completionTime = run.status?.completionTime;\n\n // Duration cannot be computed if start time is missing or a completed/failed pipeline/task has no end time\n if (!startTime || (!completionTime && pipelineRunStatus(run) !== 'Running')) {\n return '-';\n }\n return calculateDuration(t, startTime, completionTime, true);\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tekton-utils.esm.js","sources":["../../src/utils/tekton-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n ClusterObjects,\n ObjectsByEntityResponse,\n} from '@backstage/plugin-kubernetes-common';\n\nimport { get } from 'lodash';\n\nimport {\n ComputedStatus,\n getTaskRunsForPipelineRun,\n pipelineRunFilterReducer,\n PipelineRunKind,\n pipelineRunStatus,\n SucceedConditionReason,\n TaskRunKind,\n TaskStatusTypes,\n updateTaskStatus,\n} from '@janus-idp/shared-react';\n\nimport { getPipelineRunScanResults } from '../hooks/usePipelineRunScanResults';\nimport { PipelineRunGVK, TaskRunGVK } from '../models';\nimport {\n ClusterErrors,\n Order,\n PipelineRunScanResults,\n TektonResponseData,\n} from '../types/types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../translations/index.ts';\n\nexport const getClusters = (k8sObjects: ObjectsByEntityResponse) => {\n const clusters: string[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.cluster.name,\n );\n const errors: ClusterErrors[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.errors,\n );\n return { clusters, errors };\n};\n\nconst isTektonResource = (kind: string) =>\n [PipelineRunGVK.kind, TaskRunGVK.kind].includes(kind);\n\nconst getResourceType = (kind: string) => {\n switch (kind) {\n case PipelineRunGVK.kind:\n return 'pipelineruns';\n case TaskRunGVK.kind:\n return 'taskruns';\n default:\n return '';\n }\n};\n\nexport const getTektonResources = (\n cluster: number,\n k8sObjects: ObjectsByEntityResponse,\n) =>\n k8sObjects.items?.[cluster]?.resources?.reduce(\n (acc: TektonResponseData, res: any) => {\n if (res.type === 'pods') {\n return {\n ...acc,\n pods: { data: res.resources },\n };\n }\n if (\n res.type !== 'customresources' ||\n (res.type === 'customresources' && res.resources.length === 0)\n ) {\n return acc;\n }\n const customResKind = res.resources[0].kind;\n return {\n ...acc,\n ...(isTektonResource(customResKind) && {\n [getResourceType(customResKind)]: {\n data: res.resources,\n },\n }),\n };\n },\n {},\n );\n\nexport const totalPipelineRunTasks = (pipelinerun: PipelineRunKind): number => {\n if (!pipelinerun?.status?.pipelineSpec) {\n return 0;\n }\n const totalTasks = (pipelinerun.status.pipelineSpec?.tasks || []).length;\n const finallyTasks =\n (pipelinerun.status.pipelineSpec?.finally || []).length ?? 0;\n return totalTasks + finallyTasks;\n};\n\nexport const getTaskStatusOfPLR = (\n pipelinerun: PipelineRunKind,\n taskRuns: TaskRunKind[],\n) => {\n const totalTasks = totalPipelineRunTasks(pipelinerun);\n const plrTasks = getTaskRunsForPipelineRun(pipelinerun, taskRuns);\n const plrTaskLength = plrTasks?.length;\n const skippedTaskLength = pipelinerun?.status?.skippedTasks?.length || 0;\n\n const taskStatus: TaskStatusTypes = updateTaskStatus(pipelinerun, plrTasks);\n\n if (plrTasks?.length > 0) {\n const pipelineRunHasFailure = taskStatus[ComputedStatus.Failed] > 0;\n const pipelineRunIsCancelled =\n pipelineRunFilterReducer(pipelinerun) === ComputedStatus.Cancelled;\n const unhandledTasks =\n totalTasks >= plrTaskLength\n ? totalTasks - plrTaskLength - skippedTaskLength\n : totalTasks;\n\n if (pipelineRunHasFailure || pipelineRunIsCancelled) {\n taskStatus[ComputedStatus.Cancelled] += unhandledTasks;\n } else {\n taskStatus[ComputedStatus.Pending] += unhandledTasks;\n }\n } else if (\n pipelinerun?.status?.conditions?.[0]?.status === 'False' ||\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunCancelled\n ) {\n taskStatus[ComputedStatus.Cancelled] = totalTasks;\n } else if (\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunPending\n ) {\n taskStatus[ComputedStatus.Pending] += totalTasks;\n } else {\n taskStatus[ComputedStatus.PipelineNotStarted]++;\n }\n return taskStatus;\n};\n\nexport const getDuration = (\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n seconds: number,\n long?: boolean,\n): string => {\n if (seconds === 0) {\n return t('pipelineRunDuration.lessThanSec');\n }\n let sec = Math.round(seconds);\n let min = 0;\n let hr = 0;\n let duration = '';\n if (sec >= 60) {\n min = Math.floor(sec / 60);\n sec %= 60;\n }\n if (min >= 60) {\n hr = Math.floor(min / 60);\n min %= 60;\n }\n if (hr > 0) {\n duration += long ? t('pipelineRunDuration.hour', { count: hr }) : `${hr}h`;\n duration += ' ';\n }\n if (min > 0) {\n duration += long\n ? t('pipelineRunDuration.minute', { count: min })\n : `${min}m`;\n duration += ' ';\n }\n if (sec > 0) {\n duration += long\n ? t('pipelineRunDuration.second', { count: sec })\n : `${sec}s`;\n }\n\n return duration.trim();\n};\n\nexport const descendingComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n orderBy: string,\n) => {\n if (get(b, orderBy) < get(a, orderBy)) {\n return -1;\n }\n if (get(b, orderBy) > get(a, orderBy)) {\n return 1;\n }\n return 0;\n};\n\nexport const calculateDurationInSeconds = (\n startTime: string,\n endTime?: string,\n) => {\n const start = new Date(startTime).getTime();\n const end = endTime ? new Date(endTime).getTime() : new Date().getTime();\n const durationInSeconds = (end - start) / 1000;\n return durationInSeconds;\n};\n\nexport const durationComparator = (a: PipelineRunKind, b: PipelineRunKind) => {\n const durationA = a.status?.startTime\n ? calculateDurationInSeconds(a.status?.startTime, a.status?.completionTime)\n : 0;\n\n const durationB = b.status?.startTime\n ? calculateDurationInSeconds(b.status?.startTime, b.status?.completionTime)\n : 0;\n\n if (durationB < durationA) {\n return -1;\n }\n if (durationB > durationA) {\n return 1;\n }\n return 0;\n};\n\nconst vulnerabilitiesSortValue = (\n scanResults: PipelineRunScanResults,\n): number => {\n if (!scanResults?.vulnerabilities) {\n return -1;\n }\n // Expect no more than 999 of any one severity\n return (\n (scanResults.vulnerabilities.critical ?? 0) * 1000000000 +\n (scanResults.vulnerabilities.high ?? 0) * 1000000 +\n (scanResults.vulnerabilities.medium ?? 0) * 1000 +\n (scanResults.vulnerabilities.low ?? 0)\n );\n};\n\nexport const vulnerabilitiesComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n) => {\n const vulnerabilitiesSortValueA = vulnerabilitiesSortValue(\n getPipelineRunScanResults(a),\n );\n const vulnerabilitiesSortValueB = vulnerabilitiesSortValue(\n getPipelineRunScanResults(b),\n );\n\n if (vulnerabilitiesSortValueB < vulnerabilitiesSortValueA) {\n return -1;\n }\n if (vulnerabilitiesSortValueB > vulnerabilitiesSortValueA) {\n return 1;\n }\n return 0;\n};\n\nexport const getComparator = (\n order: Order,\n orderBy: string,\n orderById: string,\n) => {\n switch (orderById) {\n case 'duration':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? durationComparator(a, b)\n : -durationComparator(a, b);\n };\n case 'vulnerabilities':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? vulnerabilitiesComparator(a, b)\n : -vulnerabilitiesComparator(a, b);\n };\n default:\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? descendingComparator(a, b, orderBy)\n : -descendingComparator(a, b, orderBy);\n };\n }\n};\n\nexport const calculateDuration = (\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n startTime: string,\n endTime?: string,\n long?: boolean,\n) => {\n const durationInSeconds = calculateDurationInSeconds(startTime, endTime);\n return getDuration(t, durationInSeconds, long);\n};\n\nexport const pipelineRunDuration = (\n run: PipelineRunKind,\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n): string => {\n if (!run || Object.keys(run).length === 0) {\n return '-';\n }\n const startTime = run.status?.startTime;\n const completionTime = run.status?.completionTime;\n\n // Duration cannot be computed if start time is missing or a completed/failed pipeline/task has no end time\n if (!startTime || (!completionTime && pipelineRunStatus(run) !== 'Running')) {\n return '-';\n }\n return calculateDuration(t, startTime, completionTime, true);\n};\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-tekton",
3
- "version": "3.28.0",
3
+ "version": "3.29.0",
4
4
  "main": "dist/index.esm.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -75,7 +75,7 @@
75
75
  "@types/lodash": "4.17.20",
76
76
  "cross-fetch": "4.0.0",
77
77
  "msw": "1.3.5",
78
- "start-server-and-test": "2.0.13"
78
+ "start-server-and-test": "2.1.2"
79
79
  },
80
80
  "files": [
81
81
  "app-config.dynamic.yaml",
@@ -83,7 +83,7 @@
83
83
  ],
84
84
  "repository": {
85
85
  "type": "git",
86
- "url": "git+https://github.com/backstage/community-plugins.git",
86
+ "url": "https://github.com/backstage/community-plugins",
87
87
  "directory": "workspaces/tekton/plugins/tekton"
88
88
  },
89
89
  "keywords": [