@rancher/shell 0.5.2 → 1.2.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 (338) hide show
  1. package/.DS_Store +0 -0
  2. package/assets/images/providers/aks-black.svg +28 -0
  3. package/assets/images/providers/aks.svg +31 -0
  4. package/assets/styles/global/_labeled-input.scss +1 -0
  5. package/assets/styles/global/_layout.scss +0 -99
  6. package/assets/translations/en-us.yaml +77 -71
  7. package/assets/translations/zh-hans.yaml +25 -23
  8. package/babel.config.js +1 -7
  9. package/chart/gatekeeper.vue +11 -2
  10. package/chart/istio.vue +10 -1
  11. package/chart/logging/index.vue +11 -2
  12. package/chart/monitoring/alerting/index.vue +21 -7
  13. package/chart/monitoring/grafana/index.vue +2 -57
  14. package/chart/monitoring/index.vue +26 -52
  15. package/chart/monitoring/prometheus/index.vue +43 -37
  16. package/chart/rancher-backup/index.vue +10 -3
  17. package/cloud-credential/azure.vue +17 -4
  18. package/components/AsyncButton.vue +0 -9
  19. package/components/Carousel.vue +0 -1
  20. package/components/ChartPsp.vue +76 -0
  21. package/components/CodeMirror.vue +21 -19
  22. package/components/CopyCode.vue +2 -6
  23. package/components/CopyToClipboard.vue +1 -2
  24. package/components/CopyToClipboardText.vue +9 -14
  25. package/components/CruResource.vue +0 -1
  26. package/components/EtcdInfoBanner.vue +5 -5
  27. package/components/ExplorerProjectsNamespaces.vue +1 -25
  28. package/components/IconOrSvg.vue +1 -1
  29. package/components/Markdown.vue +12 -16
  30. package/components/Questions/index.vue +1 -1
  31. package/components/ResourceDetail/Masthead.vue +9 -25
  32. package/components/ResourceList/Masthead.vue +18 -1
  33. package/components/ResourceTable.vue +2 -14
  34. package/components/ResourceYaml.vue +0 -5
  35. package/components/SideNav.vue +1 -1
  36. package/components/SortableTable/THead.vue +9 -7
  37. package/components/SortableTable/index.vue +3 -2
  38. package/components/StatusTable.vue +1 -5
  39. package/components/TabTitle.vue +84 -0
  40. package/components/Tabbed/index.vue +0 -12
  41. package/components/__tests__/ChartPsp.test.ts +75 -0
  42. package/components/__tests__/CopyCode.test.ts +4 -5
  43. package/components/fleet/FleetBundles.vue +11 -5
  44. package/components/fleet/FleetRepos.vue +27 -62
  45. package/components/fleet/FleetResources.vue +1 -6
  46. package/components/fleet/FleetStatus.vue +3 -3
  47. package/components/fleet/FleetSummary.vue +30 -35
  48. package/components/form/ArrayList.vue +8 -1
  49. package/components/form/ArrayListSelect.vue +9 -9
  50. package/components/form/KeyValue.vue +0 -1
  51. package/components/form/LabeledSelect.vue +0 -4
  52. package/components/form/Password.vue +1 -3
  53. package/components/form/Select.vue +1 -1
  54. package/components/form/SelectOrCreateAuthSecret.vue +4 -4
  55. package/components/form/__tests__/KeyValue.test.ts +1 -1
  56. package/components/formatter/Checked.vue +3 -11
  57. package/components/formatter/ClusterProvider.vue +18 -1
  58. package/components/formatter/FleetSummaryGraph.vue +11 -23
  59. package/components/formatter/LiveDate.vue +16 -0
  60. package/components/formatter/LiveDuration.vue +1 -1
  61. package/components/formatter/PercentageBar.vue +1 -1
  62. package/components/formatter/__tests__/ClusterProvider.test.ts +28 -0
  63. package/components/nav/Group.vue +2 -2
  64. package/components/nav/Header.vue +2 -1
  65. package/components/nav/TopLevelMenu.vue +3 -29
  66. package/components/nav/Type.vue +3 -1
  67. package/components/nav/WindowManager/ContainerLogs.vue +19 -120
  68. package/components/nav/WindowManager/ContainerShell.vue +1 -6
  69. package/components/nav/WindowManager/index.vue +10 -11
  70. package/components/nav/__tests__/TopLevelMenu.test.ts +0 -33
  71. package/components/nav/__tests__/Type.test.ts +1 -1
  72. package/components/nuxt/nuxt-child.js +78 -14
  73. package/components/nuxt/nuxt.js +1 -1
  74. package/components/user.retention/user-retention-header.vue +34 -0
  75. package/composables/useI18n.ts +26 -0
  76. package/composables/useStore.ts +16 -0
  77. package/config/harvester-manager-types.js +0 -2
  78. package/config/home-links.js +32 -2
  79. package/config/private-label.js +0 -22
  80. package/config/product/explorer.js +4 -4
  81. package/config/product/fleet.js +1 -6
  82. package/config/product/legacy.js +1 -84
  83. package/config/product/manager.js +15 -8
  84. package/config/query-params.js +0 -1
  85. package/config/router.js +368 -385
  86. package/config/settings.ts +9 -2
  87. package/config/store.js +1 -1
  88. package/config/system-namespaces.js +0 -3
  89. package/config/table-headers.js +27 -47
  90. package/config/types.js +5 -0
  91. package/config/uiplugins.js +1 -1
  92. package/core/plugin-helpers.js +5 -3
  93. package/core/plugin-routes.ts +114 -56
  94. package/core/plugin.ts +10 -16
  95. package/core/plugins-loader.js +9 -7
  96. package/core/plugins.js +3 -0
  97. package/core/types-provisioning.ts +0 -7
  98. package/creators/app/init +0 -19
  99. package/detail/fleet.cattle.io.cluster.vue +1 -11
  100. package/detail/node.vue +0 -42
  101. package/detail/pod.vue +1 -68
  102. package/detail/provisioning.cattle.io.cluster.vue +4 -6
  103. package/detail/workload/index.vue +1 -15
  104. package/dialog/ScaleMachineDownDialog.vue +17 -34
  105. package/edit/auth/googleoauth.vue +5 -1
  106. package/edit/catalog.cattle.io.clusterrepo.vue +7 -20
  107. package/edit/cloudcredential.vue +0 -2
  108. package/edit/fleet.cattle.io.gitrepo.vue +4 -3
  109. package/edit/management.cattle.io.project.vue +52 -1
  110. package/edit/management.cattle.io.setting.vue +2 -31
  111. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -12
  112. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +1 -2
  113. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
  114. package/edit/provisioning.cattle.io.cluster/{tabs/Basics.vue → Basics.vue} +126 -109
  115. package/edit/provisioning.cattle.io.cluster/{tabs/MachinePool.vue → MachinePool.vue} +7 -1
  116. package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryConfigs.vue → RegistryConfigs.vue} +3 -1
  117. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +7 -15
  118. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +237 -0
  119. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.test.ts → CustomCommand.tests.ts} +0 -6
  120. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  121. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +1 -7
  122. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  123. package/edit/provisioning.cattle.io.cluster/index.vue +37 -99
  124. package/edit/provisioning.cattle.io.cluster/rke2.vue +690 -181
  125. package/edit/service.vue +0 -12
  126. package/edit/workload/Upgrading.vue +2 -3
  127. package/edit/workload/index.vue +1 -2
  128. package/edit/workload/mixins/workload.js +1 -1
  129. package/initialize/App.js +71 -25
  130. package/initialize/client.js +162 -21
  131. package/initialize/index.js +124 -47
  132. package/initialize/layouts.ts +26 -0
  133. package/{components/templates → layouts}/blank.vue +1 -1
  134. package/{components/templates → layouts}/default.vue +98 -8
  135. package/{components/templates → layouts}/error.vue +19 -10
  136. package/{components/templates → layouts}/home.vue +1 -4
  137. package/{components/templates → layouts}/plain.vue +1 -4
  138. package/{components/templates → layouts}/standalone.vue +1 -1
  139. package/{components/templates → layouts}/unauthenticated.vue +1 -1
  140. package/list/management.cattle.io.feature.vue +7 -1
  141. package/list/management.cattle.io.user.vue +25 -1
  142. package/list/node.vue +0 -1
  143. package/machine-config/__tests__/vmwarevsphere.test.ts +161 -56
  144. package/machine-config/amazonec2.vue +1 -0
  145. package/machine-config/azure.vue +37 -21
  146. package/machine-config/vmwarevsphere.vue +47 -42
  147. package/middleware/authenticated.js +19 -14
  148. package/mixins/auth-config.js +7 -2
  149. package/mixins/brand.js +41 -29
  150. package/mixins/fetch.server.js +73 -0
  151. package/mixins/labeled-form-element.ts +1 -6
  152. package/models/__tests__/management.cattle.io.node.ts +0 -85
  153. package/models/__tests__/namespace.test.ts +9 -49
  154. package/models/cluster/node.js +4 -4
  155. package/models/cluster.x-k8s.io.machine.js +1 -1
  156. package/models/cluster.x-k8s.io.machinedeployment.js +0 -14
  157. package/models/fleet.cattle.io.cluster.js +0 -4
  158. package/models/fleet.cattle.io.gitrepo.js +13 -56
  159. package/models/management.cattle.io.cluster.js +3 -11
  160. package/models/management.cattle.io.kontainerdriver.js +0 -1
  161. package/models/management.cattle.io.node.js +14 -18
  162. package/models/management.cattle.io.nodepool.js +0 -17
  163. package/models/management.cattle.io.project.js +36 -0
  164. package/models/management.cattle.io.setting.js +7 -11
  165. package/models/management.cattle.io.user.js +65 -0
  166. package/models/namespace.js +1 -1
  167. package/models/pod.js +0 -20
  168. package/models/provisioning.cattle.io.cluster.js +8 -55
  169. package/models/secret.js +18 -117
  170. package/models/workload.js +0 -16
  171. package/models/workload.service.js +0 -18
  172. package/package.json +10 -12
  173. package/pages/about.vue +1 -0
  174. package/pages/account/create-key.vue +1 -0
  175. package/pages/account/index.vue +1 -0
  176. package/pages/auth/login.vue +1 -0
  177. package/pages/auth/logout.vue +2 -0
  178. package/pages/auth/setup.vue +4 -37
  179. package/pages/auth/verify.vue +8 -14
  180. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +17 -2
  181. package/pages/c/_cluster/apps/charts/index.vue +58 -64
  182. package/pages/c/_cluster/apps/charts/install.helpers.js +13 -2
  183. package/pages/c/_cluster/apps/charts/install.vue +5 -5
  184. package/pages/c/_cluster/apps/index.vue +2 -0
  185. package/pages/c/_cluster/auth/index.vue +2 -0
  186. package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
  187. package/pages/c/_cluster/ecm/index.vue +2 -0
  188. package/pages/c/_cluster/explorer/index.vue +53 -56
  189. package/pages/c/_cluster/explorer/tools/index.vue +3 -171
  190. package/pages/c/_cluster/fleet/index.vue +1 -1
  191. package/pages/c/_cluster/index.vue +2 -0
  192. package/pages/c/_cluster/manager/pages/_page.vue +5 -4
  193. package/pages/c/_cluster/monitoring/index.vue +1 -17
  194. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
  195. package/pages/c/_cluster/settings/banners.vue +2 -0
  196. package/pages/c/_cluster/settings/brand.vue +2 -0
  197. package/pages/c/_cluster/settings/index.vue +2 -0
  198. package/pages/c/_cluster/settings/links.vue +3 -2
  199. package/pages/c/_cluster/settings/performance.vue +1 -0
  200. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +4 -4
  201. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +1 -2
  202. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +46 -10
  203. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +5 -2
  204. package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +96 -0
  205. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +128 -0
  206. package/pages/c/_cluster/uiplugins/index.vue +2 -0
  207. package/pages/c/index.vue +9 -0
  208. package/pages/diagnostic.vue +2 -1
  209. package/pages/fail-whale.vue +1 -0
  210. package/pages/prefs.vue +1 -0
  211. package/pages/rio/mesh.vue +508 -0
  212. package/pages/support/index.vue +8 -2
  213. package/pkg/auto-import.js +1 -1
  214. package/plugins/axios.js +36 -0
  215. package/plugins/back-button.js +5 -3
  216. package/plugins/clean-html-directive.js +19 -1
  217. package/plugins/clean-tooltip-directive.js +1 -1
  218. package/plugins/codemirror-loader.js +1 -1
  219. package/plugins/codemirror.js +0 -41
  220. package/plugins/dashboard-store/__tests__/actions.spec.ts +250 -0
  221. package/plugins/dashboard-store/__tests__/{mutations.test.ts → mutations.spec.ts} +1 -1
  222. package/plugins/dashboard-store/actions.js +21 -22
  223. package/plugins/dashboard-store/classify.js +18 -1
  224. package/plugins/dashboard-store/getters.js +5 -10
  225. package/plugins/dashboard-store/index.js +12 -0
  226. package/plugins/dashboard-store/mutations.js +4 -0
  227. package/plugins/dashboard-store/resource-class.js +18 -59
  228. package/plugins/i18n.js +1 -1
  229. package/plugins/steve/__tests__/getters.spec.ts +56 -24
  230. package/plugins/steve/__tests__/subscribe.spec.ts +106 -0
  231. package/plugins/steve/getters.js +30 -7
  232. package/plugins/steve/mutations.js +5 -2
  233. package/plugins/steve/norman-class.js +0 -19
  234. package/plugins/steve/steve-class.js +0 -22
  235. package/plugins/steve/subscribe.js +34 -13
  236. package/plugins/transitions.js +4 -0
  237. package/plugins/vue-clipboard2.js +4 -0
  238. package/rancher-components/Accordion/Accordion.vue +3 -2
  239. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  240. package/rancher-components/Banner/Banner.test.ts +1 -5
  241. package/rancher-components/Banner/Banner.vue +2 -2
  242. package/rancher-components/Card/Card.vue +4 -4
  243. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  244. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  245. package/rancher-components/Form/LabeledInput/LabeledInput.vue +55 -24
  246. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  247. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  248. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  249. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  250. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  251. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  252. package/rancher-components/StringList/StringList.vue +8 -8
  253. package/rancher-components/components/Accordion/Accordion.vue +3 -2
  254. package/rancher-components/components/BadgeState/BadgeState.test.ts +12 -0
  255. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +2 -19
  256. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +14 -11
  257. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -1
  258. package/rancher-components/components/StringList/StringList.test.ts +0 -270
  259. package/rancher-components/components/StringList/StringList.vue +18 -57
  260. package/scripts/extension/bundle +7 -19
  261. package/scripts/extension/helm/scripts/package +3 -11
  262. package/scripts/extension/parse-tag-name +4 -4
  263. package/scripts/extension/publish +9 -20
  264. package/scripts/publish-shell.sh +1 -11
  265. package/scripts/test-plugins-build.sh +9 -85
  266. package/store/catalog.js +1 -1
  267. package/store/features.js +0 -1
  268. package/store/i18n.js +0 -11
  269. package/store/index.js +11 -8
  270. package/store/prefs.js +38 -33
  271. package/store/type-map.js +8 -13
  272. package/tsconfig.default.json +46 -0
  273. package/tsconfig.json +9 -35
  274. package/types/shell/index.d.ts +404 -463
  275. package/utils/__tests__/create-yaml.test.ts +10 -0
  276. package/utils/axios.js +19 -0
  277. package/utils/create-yaml.js +6 -6
  278. package/utils/custom-validators.js +2 -0
  279. package/utils/error.js +1 -16
  280. package/utils/monitoring.js +2 -37
  281. package/utils/nuxt.js +39 -18
  282. package/utils/object.js +0 -14
  283. package/utils/router.scrollBehavior.js +14 -12
  284. package/utils/socket.js +1 -0
  285. package/utils/time.js +1 -1
  286. package/utils/title.ts +3 -0
  287. package/utils/url.ts +1 -1
  288. package/utils/validators/formRules/__tests__/index.test.ts +4 -49
  289. package/utils/validators/formRules/index.ts +9 -12
  290. package/utils/validators/setting.js +10 -6
  291. package/vue.config.js +3 -24
  292. package/chart/monitoring/steps/uninstall-v1.vue +0 -135
  293. package/components/Certificates.vue +0 -164
  294. package/components/fleet/__tests__/FleetSummary.test.ts +0 -316
  295. package/components/formatter/FleetClusterSummaryGraph.vue +0 -27
  296. package/components/formatter/__tests__/Checked.test.ts +0 -19
  297. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +0 -186
  298. package/composables/useCompactInput.ts +0 -20
  299. package/composables/useLabeledFormElement.ts +0 -138
  300. package/creators/app/files/.gitlab-ci.yml +0 -14
  301. package/edit/__tests__/service.test.ts +0 -89
  302. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +0 -112
  303. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +0 -473
  304. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +0 -73
  305. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +0 -386
  306. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +0 -137
  307. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +0 -157
  308. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +0 -135
  309. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +0 -189
  310. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +0 -144
  311. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +0 -76
  312. package/mixins/v1-workload-metrics.js +0 -43
  313. package/models/__tests__/management.cattle.io.cluster.test.ts +0 -23
  314. package/models/__tests__/management.cattle.io.nodepool.ts +0 -83
  315. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +0 -90
  316. package/models/__tests__/workload.test.ts +0 -91
  317. package/plugins/clean-html.js +0 -53
  318. package/plugins/dashboard-store/__tests__/actions.test.ts +0 -165
  319. package/plugins/dashboard-store/__tests__/resource-class.test.ts +0 -49
  320. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +0 -7
  321. package/plugins/index.js +0 -11
  322. package/plugins/steve/__tests__/steve-class.spec.ts +0 -59
  323. package/plugins/steve/__tests__/utils/steve-mocks.ts +0 -31
  324. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +0 -50
  325. package/server/har-file.js +0 -183
  326. package/tsconfig.paths.json +0 -18
  327. package/utils/azure.js +0 -24
  328. package/utils/clipboard.js +0 -5
  329. /package/components/form/__tests__/{NameNsDescription.test.ts → NameNsDescription.ts} +0 -0
  330. /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.test.ts → selectors.ts} +0 -0
  331. /package/edit/provisioning.cattle.io.cluster/{tabs/networking/ACE.vue → ACE.vue} +0 -0
  332. /package/edit/provisioning.cattle.io.cluster/{tabs/AgentConfiguration.vue → AgentConfiguration.vue} +0 -0
  333. /package/edit/provisioning.cattle.io.cluster/{tabs/upgrade/DrainOptions.vue → DrainOptions.vue} +0 -0
  334. /package/edit/provisioning.cattle.io.cluster/{tabs/MemberRoles.vue → MemberRoles.vue} +0 -0
  335. /package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryMirrors.vue → RegistryMirrors.vue} +0 -0
  336. /package/edit/provisioning.cattle.io.cluster/{tabs/etcd/S3Config.vue → S3Config.vue} +0 -0
  337. /package/plugins/dashboard-store/__tests__/{getters.test.ts → getters.spec.ts} +0 -0
  338. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
@@ -398,276 +398,6 @@ describe('stringList.vue', () => {
398
398
  });
399
399
  });
400
400
 
401
- describe('bulk delimiter', () => {
402
- const delimiter = /;/;
403
-
404
- describe('add', () => {
405
- const items: string[] = [];
406
-
407
- beforeEach(() => {
408
- wrapper = mount(StringList, {
409
- propsData: {
410
- items,
411
- bulkAdditionDelimiter: delimiter,
412
- errorMessages: { duplicate: 'error, item is duplicate.' },
413
- }
414
- });
415
- });
416
-
417
- it('should split values if delimiter set', async() => {
418
- const value = 'test;test1;test2';
419
- const result = ['test', 'test1', 'test2'];
420
-
421
- // activate create mode
422
- await wrapper.setData({ isCreateItem: true });
423
- const inputField = wrapper.find('[data-testid="item-create"]');
424
-
425
- await inputField.setValue(value);
426
-
427
- // press enter
428
- await inputField.trigger('keydown.enter');
429
- await wrapper.vm.$nextTick();
430
-
431
- const itemsResult = (wrapper.emitted('change') || [])[0][0];
432
-
433
- expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
434
- });
435
-
436
- it('should show warning if one of the values is a duplicate', async() => {
437
- const value = 'test;test1;test2';
438
-
439
- await wrapper.setProps({ items: ['test1'] });
440
-
441
- // activate create mode
442
- await wrapper.setData({ isCreateItem: true });
443
- const inputField = wrapper.find('[data-testid="item-create"]');
444
-
445
- await inputField.setValue(value);
446
-
447
- // press enter
448
- await inputField.trigger('keydown.enter');
449
- await wrapper.vm.$nextTick();
450
-
451
- const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
452
-
453
- expect(isDuplicate).toBe(true);
454
- });
455
-
456
- it('should show a warning if the new values are all duplicates', async() => {
457
- const value = 'test;test';
458
-
459
- // activate create mode
460
- await wrapper.setData({ isCreateItem: true });
461
- const inputField = wrapper.find('[data-testid="item-create"]');
462
-
463
- await inputField.setValue(value);
464
-
465
- // press enter
466
- await inputField.trigger('keydown.enter');
467
- await wrapper.vm.$nextTick();
468
-
469
- const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
470
-
471
- expect(isDuplicate).toBe(true);
472
- });
473
-
474
- it('should not consider empty strings at the beginning', async() => {
475
- const value = ';test;test1;test2';
476
- const result = ['test', 'test1', 'test2'];
477
-
478
- // activate create mode
479
- await wrapper.setData({ isCreateItem: true });
480
- const inputField = wrapper.find('[data-testid="item-create"]');
481
-
482
- await inputField.setValue(value);
483
-
484
- // press enter
485
- await inputField.trigger('keydown.enter');
486
- await wrapper.vm.$nextTick();
487
-
488
- const itemsResult = (wrapper.emitted('change') || [])[0][0];
489
-
490
- expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
491
- });
492
-
493
- it('should not consider empty strings in the middle', async() => {
494
- const value = 'test;test1;;test2';
495
- const result = ['test', 'test1', 'test2'];
496
-
497
- // activate create mode
498
- await wrapper.setData({ isCreateItem: true });
499
- const inputField = wrapper.find('[data-testid="item-create"]');
500
-
501
- await inputField.setValue(value);
502
-
503
- // press enter
504
- await inputField.trigger('keydown.enter');
505
- await wrapper.vm.$nextTick();
506
-
507
- const itemsResult = (wrapper.emitted('change') || [])[0][0];
508
-
509
- expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
510
- });
511
-
512
- it('should not consider empty strings at the end', async() => {
513
- const value = 'test;test1;test2;';
514
- const result = ['test', 'test1', 'test2'];
515
-
516
- // activate create mode
517
- await wrapper.setData({ isCreateItem: true });
518
- const inputField = wrapper.find('[data-testid="item-create"]');
519
-
520
- await inputField.setValue(value);
521
-
522
- // press enter
523
- await inputField.trigger('keydown.enter');
524
- await wrapper.vm.$nextTick();
525
-
526
- const itemsResult = (wrapper.emitted('change') || [])[0][0];
527
-
528
- expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
529
- });
530
- });
531
-
532
- describe('edit', () => {
533
- const items = ['test1', 'test2'];
534
-
535
- beforeEach(() => {
536
- wrapper = mount(StringList, {
537
- propsData: {
538
- items,
539
- bulkAdditionDelimiter: delimiter,
540
- errorMessages: { duplicate: 'error, item is duplicate.' },
541
- }
542
- });
543
- });
544
-
545
- it('should split values if delimiter set', async() => {
546
- const newValue = 'test1;new;values';
547
- const result = ['test1', 'new', 'values', 'test2'];
548
-
549
- await wrapper.setData({ editedItem: items[0] });
550
- const inputField = wrapper.find('[data-testid^="item-edit"]');
551
-
552
- await inputField.setValue(newValue);
553
-
554
- // press enter
555
- await inputField.trigger('keydown.enter');
556
- await wrapper.vm.$nextTick();
557
-
558
- const itemsResult = (wrapper.emitted('change') || [])[0][0];
559
-
560
- expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
561
- });
562
-
563
- it('should show warning if one of the values is a duplicate', async() => {
564
- const newValue = 'test1;test2';
565
-
566
- await wrapper.setData({ editedItem: items[0] });
567
- const inputField = wrapper.find('[data-testid^="item-edit"]');
568
-
569
- await inputField.setValue(newValue);
570
-
571
- // press enter
572
- await inputField.trigger('keydown.enter');
573
- await wrapper.vm.$nextTick();
574
-
575
- const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
576
-
577
- expect(isDuplicate).toBe(true);
578
- });
579
-
580
- it('should show a warning if the new values are all duplicates', async() => {
581
- const newValue = 'test;test';
582
-
583
- await wrapper.setData({ editedItem: items[0] });
584
- const inputField = wrapper.find('[data-testid^="item-edit"]');
585
-
586
- await inputField.setValue(newValue);
587
-
588
- // press enter
589
- await inputField.trigger('keydown.enter');
590
- await wrapper.vm.$nextTick();
591
-
592
- const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
593
-
594
- expect(isDuplicate).toBe(true);
595
- });
596
-
597
- it('should not consider empty strings at the beginning', async() => {
598
- const newValue = ';test1;new;value';
599
- const result = ['test1', 'new', 'value', 'test2'];
600
-
601
- await wrapper.setData({ editedItem: items[0] });
602
- const inputField = wrapper.find('[data-testid^="item-edit"]');
603
-
604
- await inputField.setValue(newValue);
605
-
606
- // press enter
607
- await inputField.trigger('keydown.enter');
608
- await wrapper.vm.$nextTick();
609
-
610
- const itemsResult = (wrapper.emitted('change') || [])[0][0];
611
-
612
- expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
613
- });
614
-
615
- it('should not consider empty strings in the middle 1', async() => {
616
- const newValue = 'test1; ;new;value';
617
- const result = ['test1', 'new', 'value', 'test2'];
618
-
619
- await wrapper.setData({ editedItem: items[0] });
620
- const inputField = wrapper.find('[data-testid^="item-edit"]');
621
-
622
- await inputField.setValue(newValue);
623
-
624
- // press enter
625
- await inputField.trigger('keydown.enter');
626
- await wrapper.vm.$nextTick();
627
-
628
- const itemsResult = (wrapper.emitted('change') || [])[0][0];
629
-
630
- expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
631
- });
632
-
633
- it('should not consider empty strings in the middle 2', async() => {
634
- const newValue = 'test1;;new;value';
635
- const result = ['test1', 'new', 'value', 'test2'];
636
-
637
- await wrapper.setData({ editedItem: items[0] });
638
- const inputField = wrapper.find('[data-testid^="item-edit"]');
639
-
640
- await inputField.setValue(newValue);
641
-
642
- // press enter
643
- await inputField.trigger('keydown.enter');
644
- await wrapper.vm.$nextTick();
645
-
646
- const itemsResult = (wrapper.emitted('change') || [])[0][0];
647
-
648
- expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
649
- });
650
-
651
- it('should not consider empty strings at the end', async() => {
652
- const newValue = 'test1;new;value;';
653
- const result = ['test1', 'new', 'value', 'test2'];
654
-
655
- await wrapper.setData({ editedItem: items[0] });
656
- const inputField = wrapper.find('[data-testid^="item-edit"]');
657
-
658
- await inputField.setValue(newValue);
659
-
660
- // press enter
661
- await inputField.trigger('keydown.enter');
662
- await wrapper.vm.$nextTick();
663
-
664
- const itemsResult = (wrapper.emitted('change') || [])[0][0];
665
-
666
- expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
667
- });
668
- });
669
- });
670
-
671
401
  describe('errors handling', () => {
672
402
  it('show duplicate warning icon when errorMessages is defined', async() => {
673
403
  const items = ['test'];
@@ -82,13 +82,6 @@ export default Vue.extend({
82
82
  return {} as ErrorMessages;
83
83
  },
84
84
  },
85
- /**
86
- * Enables bulk addition and defines the delimiter to split the input string.
87
- */
88
- bulkAdditionDelimiter: {
89
- type: RegExp,
90
- default: null,
91
- }
92
85
  },
93
86
  data() {
94
87
  return {
@@ -132,9 +125,13 @@ export default Vue.extend({
132
125
  },
133
126
 
134
127
  methods: {
135
- onChange(value: string, index?: number) {
128
+ onChange(value: string) {
136
129
  this.value = value;
137
- const items = this.addValueToItems(this.items, value, index);
130
+
131
+ const items = [
132
+ ...this.items,
133
+ this.value
134
+ ];
138
135
 
139
136
  this.toggleError(
140
137
  'duplicate',
@@ -324,7 +321,10 @@ export default Vue.extend({
324
321
  const value = this.value?.trim();
325
322
 
326
323
  if (value) {
327
- const items = this.addValueToItems(this.items, value);
324
+ const items = [
325
+ ...this.items,
326
+ value,
327
+ ];
328
328
 
329
329
  if (!hasDuplicatedStrings(items, this.caseSensitive)) {
330
330
  this.updateItems(items);
@@ -343,8 +343,12 @@ export default Vue.extend({
343
343
  const value = this.value?.trim();
344
344
 
345
345
  if (value) {
346
- const index = findStringIndex(this.items, item, false);
347
- const items = index !== -1 ? this.addValueToItems(this.items, value, index) : this.items;
346
+ const items = [...this.items];
347
+ const index = findStringIndex(items, item, false);
348
+
349
+ if (index !== -1) {
350
+ items[index] = value;
351
+ }
348
352
 
349
353
  if (!hasDuplicatedStrings(items, this.caseSensitive)) {
350
354
  this.updateItems(items);
@@ -356,49 +360,6 @@ export default Vue.extend({
356
360
  }
357
361
  },
358
362
 
359
- /**
360
- * Add a new or update an exiting item in the items list.
361
- *
362
- * @param items The current items list.
363
- * @param value The new value to be added.
364
- * @param index The list index of the item to be updated (optional).
365
- * @returns Updated items list.
366
- */
367
- addValueToItems(items: string[], value: string, index?: number): string[] {
368
- const updatedItems = [...items];
369
-
370
- // Add new item
371
- if (index === undefined) {
372
- if (this.bulkAdditionDelimiter && value.search(this.bulkAdditionDelimiter) >= 0) {
373
- updatedItems.push(...this.splitBulkValue(value));
374
- } else {
375
- updatedItems.push(value);
376
- }
377
- } else { // Update existing item
378
- if (this.bulkAdditionDelimiter && value.search(this.bulkAdditionDelimiter) >= 0) {
379
- updatedItems.splice(index, 1, ...this.splitBulkValue(value));
380
- } else {
381
- updatedItems[index] = value;
382
- }
383
- }
384
-
385
- return updatedItems;
386
- },
387
-
388
- /**
389
- * Split the value by the defined delimiter and remove empty strings.
390
- *
391
- * @param value The value to be split.
392
- * @returns Array containing split values.
393
- */
394
- splitBulkValue(value: string): string[] {
395
- return value
396
- .split(this.bulkAdditionDelimiter)
397
- .filter((item) => {
398
- return item.trim().length > 0;
399
- });
400
- },
401
-
402
363
  /**
403
364
  * Remove an item from items list
404
365
  */
@@ -432,7 +393,7 @@ export default Vue.extend({
432
393
  @dblclick="onClickEmptyBody()"
433
394
  >
434
395
  <div
435
- v-for="(item, index) in items"
396
+ v-for="item in items"
436
397
  :key="item"
437
398
  :ref="item"
438
399
  :class="{
@@ -460,7 +421,7 @@ export default Vue.extend({
460
421
  :data-testid="`item-edit-${item}`"
461
422
  class="edit-input static"
462
423
  :value="value != null ? value : item"
463
- @input="onChange($event, index)"
424
+ @input="onChange($event)"
464
425
  @blur.prevent="updateItem(item)"
465
426
  @keydown.native.enter="updateItem(item, !errors.duplicate)"
466
427
  />
@@ -16,7 +16,6 @@ REGISTRY="${3}"
16
16
  REGISTRY_ORG="${4}"
17
17
  IMAGE_PREFIX="${5}"
18
18
  PUSH="${6}"
19
- PODMAN_CONTAINER="${7}"
20
19
 
21
20
  PKG_NAME="${PKG}-${PKG_VERSION}"
22
21
 
@@ -49,15 +48,12 @@ for d in ${BASE_DIR}/dist-pkg/*; do
49
48
  cp -R ${BASE_DIR}/dist-pkg/${pkg} ${TMP}/container/plugin
50
49
  done
51
50
 
52
- package() {
53
- if [ "${PODMAN_CONTAINER}" == "true" ]; then
54
- RUNTIME="podman"
55
- else
56
- RUNTIME="docker"
57
- fi
58
- echo -e "Container build: ${RUNTIME}"
51
+ # Build the docker image
52
+ pushd ${TMP}/container > /dev/null
53
+ echo -e "${CYAN}Building container image ...${RESET}"
59
54
 
60
- REGISTRY=${REGISTRY} ORG=${REGISTRY_ORG} REPO=${IMAGE_PREFIX}${PKG} TAG=${PKG_VERSION} RUNTIME=${RUNTIME} ./scripts/package
55
+ if [ ! -z "${REGISTRY}" ]; then
56
+ REGISTRY=${REGISTRY} ORG=${REGISTRY_ORG} REPO=${IMAGE_PREFIX}${PKG} TAG=${PKG_VERSION} ./scripts/package
61
57
 
62
58
  if [ "${PUSH}" == "--push" ]; then
63
59
  echo -e "${CYAN}Pushing container image ...${RESET}"
@@ -65,22 +61,14 @@ package() {
65
61
  # Ensure that you do not overwrite production images
66
62
  if [[ "${REGISTRY_ORG}" == "rancher" ]]; then
67
63
  IMAGE=${REGISTRY}${REGISTRY_ORG}/${IMAGE_PREFIX}${PKG}:${PKG_VERSION}
68
- if ${RUNTIME} manifest inspect ${IMAGE} 2>&1 1>/dev/null; then
64
+ if docker manifest inspect 2>&1 1>/dev/null; then
69
65
  echo -e "${RED}${BOLD}Cannot overwrite production image ${IMAGE_PREFIX}${PKG} since it already exists${RESET}"
70
66
  exit 1
71
67
  fi
72
68
  fi
73
69
 
74
- ${RUNTIME} push ${REGISTRY}${REGISTRY_ORG}/${IMAGE_PREFIX}${PKG}:${PKG_VERSION}
70
+ docker push ${REGISTRY}${REGISTRY_ORG}/${IMAGE_PREFIX}${PKG}:${PKG_VERSION}
75
71
  fi
76
- }
77
-
78
- # Build the container image
79
- pushd ${TMP}/container > /dev/null
80
- echo -e "${CYAN}Building container image ...${RESET}"
81
-
82
- if [ ! -z "${REGISTRY}" ]; then
83
- package
84
72
  fi
85
73
 
86
74
  popd > /dev/null
@@ -5,8 +5,8 @@ source $(dirname $0)/version
5
5
 
6
6
  cd $(dirname $0)/..
7
7
 
8
- if [[ -z ${ORG} ]] || [[ -z ${REPO} ]] || [[ -z ${TAG} ]] || [[ -z ${RUNTIME} ]]; then
9
- echo "Usage: [REGISTRY=] ORG= REPO= TAG= RUNTIME= ./scripts/package"
8
+ if [[ -z ${ORG} ]] || [[ -z ${REPO} ]] || [[ -z ${TAG} ]]; then
9
+ echo "Usage: [REGISTRY=] ORG= REPO= TAG= ./scripts/package"
10
10
  exit 1
11
11
  fi
12
12
 
@@ -19,13 +19,5 @@ if [ -e ${DOCKERFILE}.${ARCH} ]; then
19
19
  DOCKERFILE=${DOCKERFILE}.${ARCH}
20
20
  fi
21
21
 
22
- BUILD="${RUNTIME} build -f ${DOCKERFILE} -t ${IMAGE}"
23
-
24
- if [[ ${RUNTIME} == "podman" ]]; then
25
- BUILD="$BUILD -v /var/lib/containers:/var/lib/containers ."
26
- else
27
- BUILD="$BUILD ."
28
- fi
29
-
30
- $BUILD
22
+ docker build -f ${DOCKERFILE} -t ${IMAGE} .
31
23
  echo Built ${IMAGE}
@@ -4,8 +4,8 @@ GITHUB_RELEASE_TAG=$1
4
4
  GITHUB_RUN_ID=$2
5
5
  GITHUB_WORKFLOW_TYPE=$3
6
6
 
7
- # Ensure "catalog" workflow release tag name does not match a pkg/<pkg-name>
8
- if [[ "${GITHUB_WORKFLOW_TYPE}" == "catalog" ]]; then
7
+ # Check packages for released tag name
8
+ if [[ "${GITHUB_WORKFLOW_TYPE}" == "container" ]]; then
9
9
  for d in pkg/*/ ; do
10
10
  pkg=$(basename $d)
11
11
 
@@ -19,7 +19,7 @@ if [[ "${GITHUB_WORKFLOW_TYPE}" == "catalog" ]]; then
19
19
  fi
20
20
  done
21
21
  else
22
- # Ensure "charts" workflow release tag name does not match the root <pkg-name>
22
+ # Check base extension name for tag name
23
23
  BASE_EXT=$(jq -r .name package.json)
24
24
  EXT_VERSION=$(jq -r .version package.json)
25
25
 
@@ -27,4 +27,4 @@ else
27
27
  echo -e "tag: ${GITHUB_RELEASE_TAG}"
28
28
  gh run cancel ${GITHUB_RUN_ID}
29
29
  fi
30
- fi
30
+ fi
@@ -17,7 +17,6 @@ IMAGE_PREFIX="ui-extension-"
17
17
  FORCE="false"
18
18
  GITHUB_BUILD="true"
19
19
  GITHUB_RELEASE_TAG=""
20
- PODMAN_CONTAINER="false"
21
20
 
22
21
  GITHUB_SOURCE=$(git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/')
23
22
  GITHUB_BRANCH="main"
@@ -34,11 +33,10 @@ usage() {
34
33
  echo " -r <name> Specify destination container registry for built images"
35
34
  echo " -o <name> Specify destination container registry organization for built images"
36
35
  echo " -i <prefix> Specify prefix for the built container image (default: 'ui-extension-')"
37
- echo " -l Specify Podman container build"
38
36
  exit 1
39
37
  }
40
38
 
41
- while getopts "hvr:o:pi:fcb:t:s:l" opt; do
39
+ while getopts "hvr:o:pi:fcb:t:s:" opt; do
42
40
  case $opt in
43
41
  h)
44
42
  usage
@@ -72,9 +70,6 @@ while getopts "hvr:o:pi:fcb:t:s:l" opt; do
72
70
  t)
73
71
  GITHUB_RELEASE_TAG="${OPTARG}"
74
72
  ;;
75
- l)
76
- PODMAN_CONTAINER="true"
77
- ;;
78
73
  *)
79
74
  usage
80
75
  ;;
@@ -131,11 +126,7 @@ fi
131
126
 
132
127
  COMMANDS=("node" "jq" "yq" "git" "helm" "yarn")
133
128
  if [ "${GITHUB_BUILD}" == "false" ]; then
134
- if [ "${PODMAN_CONTAINER}" == "true" ]; then
135
- COMMANDS+=("podman")
136
- else
137
- COMMANDS+=("docker")
138
- fi
129
+ COMMANDS+=("docker")
139
130
  fi
140
131
 
141
132
  HAVE_COMMANDS="true"
@@ -181,12 +172,10 @@ if [ "${GITHUB_BUILD}" == "false" ]; then
181
172
  exit 1
182
173
  fi
183
174
 
184
- if [ "${PODMAN_CONTAINER}" == "false" ]; then
185
- docker images > /dev/null
186
- if [ $? -ne 0 ]; then
187
- echo "docker is not running - this is required to build container images for the UI Plugins"
188
- exit 1
189
- fi
175
+ docker images > /dev/null
176
+ if [ $? -ne 0 ]; then
177
+ echo "docker is not running - this is required to build container images for the UI Plugins"
178
+ exit 1
190
179
  fi
191
180
  fi
192
181
 
@@ -365,8 +354,8 @@ if [ "${GITHUB_BUILD}" == "false" ]; then
365
354
  echo -e "${CYAN}Base extension: ${BASE_EXT}${RESET}"
366
355
  echo -e "${CYAN}Extension version: ${EXT_VERSION}${RESET}"
367
356
 
368
- # Build the container image
369
- ${SCRIPT_DIR}/bundle "${BASE_EXT}" "${EXT_VERSION}" "${REGISTRY}" "${REGISTRY_ORG}" "${IMAGE_PREFIX}" "${PUSH}" "${PODMAN_CONTAINER}"
357
+ # Build the docker image
358
+ ${SCRIPT_DIR}/bundle ${BASE_EXT} ${EXT_VERSION} ${REGISTRY} ${REGISTRY_ORG} ${IMAGE_PREFIX} ${PUSH}
370
359
  else
371
360
  rm -rf ${CHART_TEMPLATE}
372
361
  fi
@@ -397,5 +386,5 @@ fi
397
386
  rm -rf ${CHART_TMP}
398
387
 
399
388
  if [ "${GITHUB_BUILD}" == "false" ]; then
400
- rm -rf ${TMP} ${ASSETS} ${CHARTS} ${BASE_DIR}/extensions ${BASE_DIR}/dist-pkg ${ROOT_INDEX}
389
+ rm -rf ${TMP}
401
390
  fi
@@ -8,8 +8,6 @@ BASE_DIR="$(
8
8
  SHELL_DIR=$BASE_DIR/shell/
9
9
  TMP_DIR=$BASE_DIR/tmp
10
10
  PUBLISH_ARGS="--no-git-tag-version --access public $PUBLISH_ARGS"
11
- FORCE_PUBLISH_TO_NPM="false"
12
- DEFAULT_YARN_REGISTRY="https://registry.npmjs.org"
13
11
 
14
12
  if [ ! -d "${BASE_DIR}/node_modules" ]; then
15
13
  echo "You need to run 'yarn install' first"
@@ -18,14 +16,6 @@ fi
18
16
 
19
17
  echo "Publishing Shell Packages"
20
18
 
21
- if [ "$1" == "--npm" ]; then
22
- FORCE_PUBLISH_TO_NPM="true"
23
- fi
24
-
25
- if [ "$FORCE_PUBLISH_TO_NPM" == "true" ]; then
26
- export YARN_REGISTRY=$DEFAULT_YARN_REGISTRY
27
- fi
28
-
29
19
  # We use the version from the shell package for the creator packages
30
20
  # Need to copy them to a temporary location, so we can patch the version number
31
21
  # before publishing
@@ -88,7 +78,7 @@ function publish() {
88
78
  # Make a note of dependency versions, if required
89
79
  node ${SCRIPT_DIR}/record-deps.js
90
80
 
91
- yarn publish . --new-version ${PKG_VERSION} ${PUBLISH_ARGS}
81
+ yarn publish . --new-version ${PKG_VERSION} ${PUBLISH_ARGS} --tag v1.2
92
82
  RET=$?
93
83
 
94
84
  popd >/dev/null