@rancher/shell 0.3.29 → 0.5.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.
- package/assets/images/providers/ovhcloudmks.svg +122 -0
- package/assets/images/providers/ovhcloudpubliccloud.svg +122 -0
- package/assets/styles/global/_layout.scss +99 -0
- package/assets/translations/en-us.yaml +31 -6
- package/assets/translations/zh-hans.yaml +2 -2
- package/babel.config.js +7 -1
- package/chart/monitoring/alerting/index.vue +7 -21
- package/chart/monitoring/grafana/index.vue +55 -0
- package/chart/monitoring/index.vue +51 -17
- package/chart/monitoring/prometheus/index.vue +37 -43
- package/chart/rancher-backup/index.vue +2 -1
- package/cloud-credential/azure.vue +4 -17
- package/components/AsyncButton.vue +17 -5
- package/components/Certificates.vue +164 -0
- package/components/CodeMirror.vue +19 -21
- package/components/CopyCode.vue +6 -2
- package/components/CopyToClipboard.vue +2 -1
- package/components/CopyToClipboardText.vue +14 -9
- package/components/CruResource.vue +1 -0
- package/components/DraggableZone.vue +2 -2
- package/components/EtcdInfoBanner.vue +5 -5
- package/components/ExplorerProjectsNamespaces.vue +25 -1
- package/components/IconOrSvg.vue +1 -1
- package/components/LandingPagePreference.vue +1 -4
- package/components/Markdown.vue +16 -12
- package/components/PodSecurityAdmission.vue +2 -2
- package/components/Questions/index.vue +1 -1
- package/components/ResourceDetail/Masthead.vue +25 -9
- package/components/ResourceTable.vue +14 -2
- package/components/ResourceYaml.vue +5 -0
- package/components/SideNav.vue +1 -1
- package/components/SingleClusterInfo.vue +1 -4
- package/components/StatusTable.vue +5 -1
- package/components/Tabbed/index.vue +12 -0
- package/components/__tests__/CopyCode.test.ts +5 -4
- package/components/fleet/FleetBundles.vue +5 -11
- package/components/fleet/FleetRepos.vue +62 -27
- package/components/fleet/FleetResources.vue +6 -1
- package/components/fleet/FleetSummary.vue +3 -3
- package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
- package/components/form/ArrayListSelect.vue +10 -0
- package/components/form/Error.vue +3 -3
- package/components/form/Footer.vue +2 -2
- package/components/form/GitPicker.vue +83 -38
- package/components/form/KeyValue.vue +4 -0
- package/components/form/LabeledSelect.vue +4 -0
- package/components/form/Password.vue +3 -1
- package/components/formatter/Checked.vue +11 -3
- package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
- package/components/formatter/FleetSummaryGraph.vue +23 -11
- package/components/formatter/LiveDuration.vue +1 -1
- package/components/formatter/PercentageBar.vue +1 -1
- package/components/formatter/__tests__/Checked.test.ts +19 -0
- package/components/nav/Group.vue +2 -2
- package/components/nav/Header.vue +1 -2
- package/components/nav/TopLevelMenu.vue +36 -6
- package/components/nav/Type.vue +1 -3
- package/components/nav/WindowManager/ContainerLogs.vue +101 -3
- package/components/nav/WindowManager/ContainerShell.vue +6 -1
- package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
- package/components/nav/WindowManager/index.vue +11 -10
- package/components/nav/__tests__/TopLevelMenu.test.ts +33 -0
- package/components/nav/__tests__/Type.test.ts +1 -1
- package/components/nuxt/nuxt-child.js +14 -78
- package/components/nuxt/nuxt.js +1 -1
- package/{layouts → components/templates}/blank.vue +1 -1
- package/{layouts → components/templates}/default.vue +8 -98
- package/{layouts → components/templates}/error.vue +10 -19
- package/{layouts → components/templates}/home.vue +4 -1
- package/{layouts → components/templates}/plain.vue +4 -1
- package/{layouts → components/templates}/standalone.vue +1 -1
- package/{layouts → components/templates}/unauthenticated.vue +1 -1
- package/composables/useCompactInput.test.ts +36 -0
- package/composables/useCompactInput.ts +20 -0
- package/composables/useLabeledFormElement.test.ts +135 -0
- package/composables/useLabeledFormElement.ts +138 -0
- package/config/harvester-manager-types.js +2 -0
- package/config/home-links.js +1 -1
- package/config/private-label.js +22 -0
- package/config/product/explorer.js +3 -0
- package/config/product/fleet.js +6 -1
- package/config/product/manager.js +8 -2
- package/config/query-params.js +1 -0
- package/config/router.js +385 -364
- package/config/settings.ts +1 -0
- package/config/store.js +1 -1
- package/config/system-namespaces.js +3 -0
- package/config/table-headers.js +47 -0
- package/core/plugin-helpers.js +3 -5
- package/core/plugin-routes.ts +56 -114
- package/core/plugin.ts +16 -10
- package/core/plugins-loader.js +7 -9
- package/core/plugins.js +0 -3
- package/creators/app/files/.gitlab-ci.yml +14 -0
- package/creators/app/init +19 -0
- package/detail/fleet.cattle.io.cluster.vue +11 -1
- package/detail/provisioning.cattle.io.cluster.vue +4 -3
- package/dialog/ScaleMachineDownDialog.vue +34 -17
- package/edit/__tests__/service.test.ts +89 -0
- package/edit/auth/googleoauth.vue +1 -5
- package/edit/cloudcredential.vue +2 -0
- package/edit/configmap.vue +2 -1
- package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +2 -2
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +12 -3
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +2 -1
- package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +15 -7
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +112 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +6 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +7 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +386 -0
- package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/index.vue +92 -36
- package/edit/provisioning.cattle.io.cluster/rke2.vue +171 -583
- package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +157 -0
- package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +94 -19
- package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +189 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +144 -0
- package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
- package/edit/service.vue +12 -0
- package/edit/workload/Upgrading.vue +3 -2
- package/edit/workload/mixins/workload.js +1 -1
- package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +2 -1
- package/initialize/App.js +25 -71
- package/initialize/client.js +21 -162
- package/initialize/index.js +47 -124
- package/list/management.cattle.io.feature.vue +1 -7
- package/list/node.vue +1 -0
- package/machine-config/__tests__/vmwarevsphere.test.ts +100 -21
- package/machine-config/vmwarevsphere.vue +73 -51
- package/middleware/authenticated.js +10 -17
- package/mixins/auth-config.js +2 -7
- package/mixins/brand.js +29 -41
- package/mixins/create-edit-view/index.js +2 -2
- package/mixins/labeled-form-element.ts +6 -1
- package/models/__tests__/management.cattle.io.cluster.test.ts +4 -0
- package/models/__tests__/management.cattle.io.node.ts +85 -0
- package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
- package/models/__tests__/namespace.test.ts +49 -9
- package/models/__tests__/workload.test.ts +91 -0
- package/models/cluster/node.js +4 -4
- package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
- package/models/fleet.cattle.io.cluster.js +4 -0
- package/models/fleet.cattle.io.gitrepo.js +56 -13
- package/models/management.cattle.io.cluster.js +7 -3
- package/models/management.cattle.io.kontainerdriver.js +1 -1
- package/models/management.cattle.io.node.js +18 -14
- package/models/management.cattle.io.nodepool.js +17 -0
- package/models/namespace.js +1 -1
- package/models/pod.js +20 -0
- package/models/provisioning.cattle.io.cluster.js +39 -4
- package/models/secret.js +117 -18
- package/models/workload.js +16 -0
- package/models/workload.service.js +18 -0
- package/package.json +11 -10
- package/pages/about.vue +0 -1
- package/pages/account/create-key.vue +0 -1
- package/pages/account/index.vue +0 -1
- package/pages/auth/login.vue +0 -1
- package/pages/auth/logout.vue +0 -2
- package/pages/auth/setup.vue +0 -4
- package/pages/auth/verify.vue +14 -8
- package/pages/c/_cluster/apps/charts/index.vue +64 -43
- package/pages/c/_cluster/apps/charts/install.vue +4 -4
- package/pages/c/_cluster/apps/index.vue +0 -2
- package/pages/c/_cluster/auth/index.vue +0 -2
- package/pages/c/_cluster/ecm/index.vue +0 -2
- package/pages/c/_cluster/explorer/index.vue +28 -2
- package/pages/c/_cluster/fleet/index.vue +1 -1
- package/pages/c/_cluster/index.vue +0 -2
- package/pages/c/_cluster/settings/banners.vue +0 -2
- package/pages/c/_cluster/settings/brand.vue +0 -2
- package/pages/c/_cluster/settings/index.vue +0 -2
- package/pages/c/_cluster/settings/links.vue +0 -1
- package/pages/c/_cluster/settings/performance.vue +0 -1
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +2 -1
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
- package/pages/c/_cluster/uiplugins/index.vue +0 -2
- package/pages/diagnostic.vue +1 -2
- package/pages/fail-whale.vue +0 -1
- package/pages/prefs.vue +0 -1
- package/pages/support/index.vue +2 -8
- package/pkg/auto-import.js +1 -1
- package/plugins/axios.js +0 -36
- package/plugins/back-button.js +3 -5
- package/plugins/clean-html-directive.js +1 -19
- package/plugins/clean-html.js +53 -0
- package/plugins/clean-tooltip-directive.js +1 -1
- package/plugins/codemirror-loader.js +1 -1
- package/plugins/codemirror.js +41 -0
- package/plugins/dashboard-store/__tests__/{mutations.spec.ts → mutations.test.ts} +1 -1
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
- package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
- package/plugins/dashboard-store/actions.js +30 -4
- package/plugins/dashboard-store/classify.js +1 -18
- package/plugins/dashboard-store/getters.js +10 -5
- package/plugins/dashboard-store/index.js +0 -12
- package/plugins/dashboard-store/mutations.js +0 -4
- package/plugins/dashboard-store/resource-class.js +59 -18
- package/plugins/index.js +11 -0
- package/plugins/steve/__tests__/steve-class.spec.ts +59 -0
- package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
- package/plugins/steve/getters.js +4 -1
- package/plugins/steve/norman-class.js +19 -0
- package/plugins/steve/steve-class.js +22 -0
- package/plugins/steve/subscribe.js +4 -10
- package/rancher-components/Accordion/Accordion.test.ts +45 -0
- package/rancher-components/Accordion/Accordion.vue +86 -0
- package/rancher-components/Accordion/index.ts +1 -0
- package/rancher-components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/Banner/Banner.vue +2 -2
- package/rancher-components/Card/Card.vue +3 -3
- package/rancher-components/Form/Checkbox/Checkbox.vue +3 -3
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +65 -24
- package/rancher-components/Form/Radio/RadioButton.test.ts +7 -3
- package/rancher-components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/Form/Radio/RadioGroup.test.ts +30 -0
- package/rancher-components/Form/Radio/RadioGroup.vue +8 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/StringList/StringList.test.ts +270 -0
- package/rancher-components/StringList/StringList.vue +65 -26
- package/rancher-components/components/Accordion/Accordion.test.ts +45 -0
- package/rancher-components/components/Accordion/Accordion.vue +86 -0
- package/rancher-components/components/Accordion/index.ts +1 -0
- package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/components/Banner/Banner.vue +2 -2
- package/rancher-components/components/Card/Card.vue +3 -3
- package/rancher-components/components/Form/Checkbox/Checkbox.vue +3 -3
- package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +18 -1
- package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +57 -24
- package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/components/StringList/StringList.vue +8 -8
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +50 -0
- package/scripts/extension/bundle +19 -7
- package/scripts/extension/helm/scripts/package +11 -3
- package/scripts/extension/parse-tag-name +2 -2
- package/scripts/extension/publish +20 -9
- package/scripts/publish-shell.sh +10 -0
- package/scripts/test-plugins-build.sh +85 -9
- package/server/har-file.js +183 -0
- package/store/catalog.js +1 -1
- package/store/features.js +1 -0
- package/store/i18n.js +11 -0
- package/store/index.js +13 -15
- package/store/prefs.js +33 -35
- package/store/type-map.js +8 -7
- package/tsconfig.json +35 -9
- package/tsconfig.paths.json +21 -0
- package/types/shell/index.d.ts +433 -234
- package/types/vue-shim.d.ts +42 -0
- package/utils/__tests__/create-yaml.test.ts +60 -0
- package/utils/axios.js +0 -19
- package/utils/azure.js +24 -0
- package/utils/clipboard.js +5 -0
- package/utils/create-yaml.js +17 -10
- package/utils/git.ts +1 -1
- package/utils/monitoring.js +1 -1
- package/utils/nuxt.js +18 -39
- package/utils/object.js +14 -0
- package/utils/router.scrollBehavior.js +12 -14
- package/utils/time.js +1 -1
- package/utils/url.ts +1 -1
- package/vue.config.js +23 -2
- package/.DS_Store +0 -0
- package/assets/images/providers/aks-black.svg +0 -28
- package/assets/images/providers/aks.svg +0 -31
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -234
- package/initialize/layouts.ts +0 -26
- package/mixins/fetch.server.js +0 -73
- package/pages/c/index.vue +0 -9
- package/pages/rio/mesh.vue +0 -508
- package/plugins/transitions.js +0 -4
- package/plugins/vue-clipboard2.js +0 -4
- package/tsconfig.default.json +0 -46
- package/yarn-error.log +0 -200
- /package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +0 -0
- /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
- /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
- /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
- /package/rancher-components/components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
.podman-setup: &podman-setup
|
|
2
|
+
- zypper --non-interactive install jq podman
|
|
3
|
+
- usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $(id -nu)
|
|
4
|
+
- podman login -u $REGISTRY_USER -p $REGISTRY_PASSWORD $REGISTRY
|
|
5
|
+
|
|
6
|
+
check_version_collisions:
|
|
7
|
+
stage: check_version
|
|
8
|
+
rules:
|
|
9
|
+
- changes:
|
|
10
|
+
- package.json
|
|
11
|
+
script:
|
|
12
|
+
- *podman-setup
|
|
13
|
+
- |
|
|
14
|
+
PACKAGE_VERSION=`jq -r .version package.json`
|
|
15
|
+
PACKAGE_NAME=`jq -r .name package.json`
|
|
16
|
+
|
|
17
|
+
readarray -t VERSIONS < <(podman search $REGISTRY/$IMAGE_NAMESPACE/ui-extension-$PACKAGE_NAME --list-tags --format {{.Tag}})
|
|
18
|
+
|
|
19
|
+
echo -e "Checking for version collisions with Extension version: ${PACKAGE_VERSION}"
|
|
20
|
+
for version in ${VERSIONS[@]}; do
|
|
21
|
+
if [[ ${version} == ${PACKAGE_VERSION} ]]; then
|
|
22
|
+
echo "Cannot overwrite production image version ${version} since it already exists."
|
|
23
|
+
podman logout $REGISTRY
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
done
|
|
27
|
+
|
|
28
|
+
echo -e "Published image not found for version ${PACKAGE_VERSION}, continuing build..."
|
|
29
|
+
tags:
|
|
30
|
+
- linux
|
|
31
|
+
|
|
32
|
+
build_and_release:
|
|
33
|
+
stage: build_catalog
|
|
34
|
+
rules:
|
|
35
|
+
- changes:
|
|
36
|
+
- package.json
|
|
37
|
+
script:
|
|
38
|
+
- *podman-setup
|
|
39
|
+
- zypper addrepo https://download.opensuse.org/repositories/devel:languages:nodejs/SLE_12_SP5/devel:languages:nodejs.repo
|
|
40
|
+
- zypper --non-interactive --no-gpg-checks refresh
|
|
41
|
+
- zypper --non-interactive install go git nodejs14 npm helm
|
|
42
|
+
- YQ_URL="https://github.com/mikefarah/yq/releases/download/v4.35.2/yq_linux_amd64"
|
|
43
|
+
- curl -sLf ${YQ_URL} -o /usr/bin/yq && chmod +x /usr/bin/yq
|
|
44
|
+
- npm install -g --unsafe-perm yarn
|
|
45
|
+
- yarn
|
|
46
|
+
- yarn publish-pkgs -cl -r $REGISTRY -o $IMAGE_NAMESPACE
|
|
47
|
+
- podman push `podman images -f reference!=registry.suse.com/bci/bci-base --format "{{index .Names 0}}"`
|
|
48
|
+
- podman logout $REGISTRY
|
|
49
|
+
tags:
|
|
50
|
+
- linux
|
package/scripts/extension/bundle
CHANGED
|
@@ -16,6 +16,7 @@ REGISTRY="${3}"
|
|
|
16
16
|
REGISTRY_ORG="${4}"
|
|
17
17
|
IMAGE_PREFIX="${5}"
|
|
18
18
|
PUSH="${6}"
|
|
19
|
+
PODMAN_CONTAINER="${7}"
|
|
19
20
|
|
|
20
21
|
PKG_NAME="${PKG}-${PKG_VERSION}"
|
|
21
22
|
|
|
@@ -48,12 +49,15 @@ for d in ${BASE_DIR}/dist-pkg/*; do
|
|
|
48
49
|
cp -R ${BASE_DIR}/dist-pkg/${pkg} ${TMP}/container/plugin
|
|
49
50
|
done
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
package() {
|
|
53
|
+
if [ "${PODMAN_CONTAINER}" == "true" ]; then
|
|
54
|
+
RUNTIME="podman"
|
|
55
|
+
else
|
|
56
|
+
RUNTIME="docker"
|
|
57
|
+
fi
|
|
58
|
+
echo -e "Container build: ${RUNTIME}"
|
|
54
59
|
|
|
55
|
-
|
|
56
|
-
REGISTRY=${REGISTRY} ORG=${REGISTRY_ORG} REPO=${IMAGE_PREFIX}${PKG} TAG=${PKG_VERSION} ./scripts/package
|
|
60
|
+
REGISTRY=${REGISTRY} ORG=${REGISTRY_ORG} REPO=${IMAGE_PREFIX}${PKG} TAG=${PKG_VERSION} RUNTIME=${RUNTIME} ./scripts/package
|
|
57
61
|
|
|
58
62
|
if [ "${PUSH}" == "--push" ]; then
|
|
59
63
|
echo -e "${CYAN}Pushing container image ...${RESET}"
|
|
@@ -61,14 +65,22 @@ if [ ! -z "${REGISTRY}" ]; then
|
|
|
61
65
|
# Ensure that you do not overwrite production images
|
|
62
66
|
if [[ "${REGISTRY_ORG}" == "rancher" ]]; then
|
|
63
67
|
IMAGE=${REGISTRY}${REGISTRY_ORG}/${IMAGE_PREFIX}${PKG}:${PKG_VERSION}
|
|
64
|
-
if
|
|
68
|
+
if ${RUNTIME} manifest inspect ${IMAGE} 2>&1 1>/dev/null; then
|
|
65
69
|
echo -e "${RED}${BOLD}Cannot overwrite production image ${IMAGE_PREFIX}${PKG} since it already exists${RESET}"
|
|
66
70
|
exit 1
|
|
67
71
|
fi
|
|
68
72
|
fi
|
|
69
73
|
|
|
70
|
-
|
|
74
|
+
${RUNTIME} push ${REGISTRY}${REGISTRY_ORG}/${IMAGE_PREFIX}${PKG}:${PKG_VERSION}
|
|
71
75
|
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
|
|
72
84
|
fi
|
|
73
85
|
|
|
74
86
|
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} ]]; then
|
|
9
|
-
echo "Usage: [REGISTRY=] ORG= REPO= TAG= ./scripts/package"
|
|
8
|
+
if [[ -z ${ORG} ]] || [[ -z ${REPO} ]] || [[ -z ${TAG} ]] || [[ -z ${RUNTIME} ]]; then
|
|
9
|
+
echo "Usage: [REGISTRY=] ORG= REPO= TAG= RUNTIME= ./scripts/package"
|
|
10
10
|
exit 1
|
|
11
11
|
fi
|
|
12
12
|
|
|
@@ -19,5 +19,13 @@ if [ -e ${DOCKERFILE}.${ARCH} ]; then
|
|
|
19
19
|
DOCKERFILE=${DOCKERFILE}.${ARCH}
|
|
20
20
|
fi
|
|
21
21
|
|
|
22
|
-
|
|
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
|
|
23
31
|
echo Built ${IMAGE}
|
|
@@ -5,7 +5,7 @@ GITHUB_RUN_ID=$2
|
|
|
5
5
|
GITHUB_WORKFLOW_TYPE=$3
|
|
6
6
|
|
|
7
7
|
# Check packages for released tag name
|
|
8
|
-
if [[ "${GITHUB_WORKFLOW_TYPE}" == "
|
|
8
|
+
if [[ "${GITHUB_WORKFLOW_TYPE}" == "charts" ]]; then
|
|
9
9
|
for d in pkg/*/ ; do
|
|
10
10
|
pkg=$(basename $d)
|
|
11
11
|
|
|
@@ -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,6 +17,7 @@ IMAGE_PREFIX="ui-extension-"
|
|
|
17
17
|
FORCE="false"
|
|
18
18
|
GITHUB_BUILD="true"
|
|
19
19
|
GITHUB_RELEASE_TAG=""
|
|
20
|
+
PODMAN_CONTAINER="false"
|
|
20
21
|
|
|
21
22
|
GITHUB_SOURCE=$(git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/')
|
|
22
23
|
GITHUB_BRANCH="main"
|
|
@@ -33,10 +34,11 @@ usage() {
|
|
|
33
34
|
echo " -r <name> Specify destination container registry for built images"
|
|
34
35
|
echo " -o <name> Specify destination container registry organization for built images"
|
|
35
36
|
echo " -i <prefix> Specify prefix for the built container image (default: 'ui-extension-')"
|
|
37
|
+
echo " -l Specify Podman container build"
|
|
36
38
|
exit 1
|
|
37
39
|
}
|
|
38
40
|
|
|
39
|
-
while getopts "hvr:o:pi:fcb:t:s:" opt; do
|
|
41
|
+
while getopts "hvr:o:pi:fcb:t:s:l" opt; do
|
|
40
42
|
case $opt in
|
|
41
43
|
h)
|
|
42
44
|
usage
|
|
@@ -70,6 +72,9 @@ while getopts "hvr:o:pi:fcb:t:s:" opt; do
|
|
|
70
72
|
t)
|
|
71
73
|
GITHUB_RELEASE_TAG="${OPTARG}"
|
|
72
74
|
;;
|
|
75
|
+
l)
|
|
76
|
+
PODMAN_CONTAINER="true"
|
|
77
|
+
;;
|
|
73
78
|
*)
|
|
74
79
|
usage
|
|
75
80
|
;;
|
|
@@ -126,7 +131,11 @@ fi
|
|
|
126
131
|
|
|
127
132
|
COMMANDS=("node" "jq" "yq" "git" "helm" "yarn")
|
|
128
133
|
if [ "${GITHUB_BUILD}" == "false" ]; then
|
|
129
|
-
|
|
134
|
+
if [ "${PODMAN_CONTAINER}" == "true" ]; then
|
|
135
|
+
COMMANDS+=("podman")
|
|
136
|
+
else
|
|
137
|
+
COMMANDS+=("docker")
|
|
138
|
+
fi
|
|
130
139
|
fi
|
|
131
140
|
|
|
132
141
|
HAVE_COMMANDS="true"
|
|
@@ -172,10 +181,12 @@ if [ "${GITHUB_BUILD}" == "false" ]; then
|
|
|
172
181
|
exit 1
|
|
173
182
|
fi
|
|
174
183
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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
|
|
179
190
|
fi
|
|
180
191
|
fi
|
|
181
192
|
|
|
@@ -354,8 +365,8 @@ if [ "${GITHUB_BUILD}" == "false" ]; then
|
|
|
354
365
|
echo -e "${CYAN}Base extension: ${BASE_EXT}${RESET}"
|
|
355
366
|
echo -e "${CYAN}Extension version: ${EXT_VERSION}${RESET}"
|
|
356
367
|
|
|
357
|
-
# Build the
|
|
358
|
-
${SCRIPT_DIR}/bundle ${BASE_EXT} ${EXT_VERSION} ${REGISTRY} ${REGISTRY_ORG} ${IMAGE_PREFIX} ${PUSH}
|
|
368
|
+
# Build the container image
|
|
369
|
+
${SCRIPT_DIR}/bundle "${BASE_EXT}" "${EXT_VERSION}" "${REGISTRY}" "${REGISTRY_ORG}" "${IMAGE_PREFIX}" "${PUSH}" "${PODMAN_CONTAINER}"
|
|
359
370
|
else
|
|
360
371
|
rm -rf ${CHART_TEMPLATE}
|
|
361
372
|
fi
|
|
@@ -386,5 +397,5 @@ fi
|
|
|
386
397
|
rm -rf ${CHART_TMP}
|
|
387
398
|
|
|
388
399
|
if [ "${GITHUB_BUILD}" == "false" ]; then
|
|
389
|
-
rm -rf ${TMP}
|
|
400
|
+
rm -rf ${TMP} ${ASSETS} ${CHARTS} ${BASE_DIR}/extensions ${BASE_DIR}/dist-pkg ${ROOT_INDEX}
|
|
390
401
|
fi
|
package/scripts/publish-shell.sh
CHANGED
|
@@ -8,6 +8,8 @@ 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"
|
|
11
13
|
|
|
12
14
|
if [ ! -d "${BASE_DIR}/node_modules" ]; then
|
|
13
15
|
echo "You need to run 'yarn install' first"
|
|
@@ -16,6 +18,14 @@ fi
|
|
|
16
18
|
|
|
17
19
|
echo "Publishing Shell Packages"
|
|
18
20
|
|
|
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
|
+
|
|
19
29
|
# We use the version from the shell package for the creator packages
|
|
20
30
|
# Need to copy them to a temporary location, so we can patch the version number
|
|
21
31
|
# before publishing
|
|
@@ -7,6 +7,9 @@ echo "Checking plugin build"
|
|
|
7
7
|
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
8
8
|
BASE_DIR="$( cd $SCRIPT_DIR && cd ../.. & pwd)"
|
|
9
9
|
SHELL_DIR=$BASE_DIR/shell/
|
|
10
|
+
SHELL_VERSION="99.99.99"
|
|
11
|
+
DEFAULT_YARN_REGISTRY="https://registry.npmjs.org"
|
|
12
|
+
VERDACCIO_YARN_REGISTRY="http://localhost:4873"
|
|
10
13
|
|
|
11
14
|
echo ${SCRIPT_DIR}
|
|
12
15
|
|
|
@@ -66,21 +69,24 @@ else
|
|
|
66
69
|
rm -rf ~/.config/verdaccio/storage/@rancher/*
|
|
67
70
|
fi
|
|
68
71
|
|
|
69
|
-
export YARN_REGISTRY
|
|
72
|
+
export YARN_REGISTRY=$VERDACCIO_YARN_REGISTRY
|
|
70
73
|
export NUXT_TELEMETRY_DISABLED=1
|
|
71
74
|
|
|
72
75
|
# Remove test package from previous run, if present
|
|
73
|
-
|
|
76
|
+
if [ $TEST_PERSIST_BUILD != "true" ]; then
|
|
77
|
+
echo "Removing folder ${BASE_DIR}/pkg/test-pkg"
|
|
78
|
+
rm -rf ${BASE_DIR}/pkg/test-pkg
|
|
79
|
+
fi
|
|
74
80
|
|
|
75
81
|
# We need to patch the version number of the shell, otherwise if we are running
|
|
76
82
|
# with the currently published version, things will fail as those versions
|
|
77
83
|
# are already published and Verdaccio will check, since it is a read-through cache
|
|
78
|
-
sed -i.bak -e "s/\"version\": \"[0-9]*.[0-9]*.[0-9]*\",/\"version\": \"
|
|
84
|
+
sed -i.bak -e "s/\"version\": \"[0-9]*.[0-9]*.[0-9]*\(-alpha\.[0-9]*\|-release[0-9]*.[0-9]*.[0-9]*\|-rc\.[0-9]*\)\{0,1\}\",/\"version\": \"${SHELL_VERSION}\",/g" ${SHELL_DIR}/package.json
|
|
79
85
|
rm ${SHELL_DIR}/package.json.bak
|
|
80
86
|
|
|
81
87
|
# Same as above for Rancher Components
|
|
82
88
|
# We might have bumped the version number but its not published yet, so this will fail
|
|
83
|
-
sed -i.bak -e "s/\"version\": \"[0-9]*.[0-9]*.[0-9]*\",/\"version\": \"
|
|
89
|
+
sed -i.bak -e "s/\"version\": \"[0-9]*.[0-9]*.[0-9]*\(-alpha\.[0-9]*\|-release[0-9]*.[0-9]*.[0-9]*\|-rc\.[0-9]*\)\{0,1\}\",/\"version\": \"${SHELL_VERSION}\",/g" ${BASE_DIR}/pkg/rancher-components/package.json
|
|
84
90
|
|
|
85
91
|
# Publish shell
|
|
86
92
|
echo "Publishing shell packages to local registry"
|
|
@@ -108,6 +114,7 @@ if [ "${SKIP_STANDALONE}" == "false" ]; then
|
|
|
108
114
|
yarn install
|
|
109
115
|
|
|
110
116
|
echo "Building skeleton app"
|
|
117
|
+
|
|
111
118
|
FORCE_COLOR=true yarn build | cat
|
|
112
119
|
|
|
113
120
|
# Package creator
|
|
@@ -127,22 +134,91 @@ if [ "${SKIP_STANDALONE}" == "false" ]; then
|
|
|
127
134
|
echo "Cleaning temporary dir"
|
|
128
135
|
popd > /dev/null
|
|
129
136
|
|
|
130
|
-
|
|
137
|
+
if [ $TEST_PERSIST_BUILD != "true" ]; then
|
|
138
|
+
echo "Removing folder ${DIR}"
|
|
139
|
+
rm -rf ${DIR}
|
|
140
|
+
fi
|
|
131
141
|
fi
|
|
132
142
|
|
|
133
143
|
pushd $BASE_DIR
|
|
134
|
-
pwd
|
|
135
|
-
ls
|
|
136
144
|
|
|
137
145
|
# Now try a plugin within the dashboard codebase
|
|
138
146
|
echo "Validating in-tree package"
|
|
139
147
|
|
|
140
148
|
yarn install
|
|
141
149
|
|
|
142
|
-
|
|
150
|
+
if [ $TEST_PERSIST_BUILD != "true" ]; then
|
|
151
|
+
echo "Removing folder ./pkg/test-pkg"
|
|
152
|
+
rm -rf ./pkg/test-pkg
|
|
153
|
+
fi
|
|
154
|
+
|
|
143
155
|
yarn create @rancher/pkg test-pkg -t
|
|
144
156
|
cp ${SHELL_DIR}/list/catalog.cattle.io.clusterrepo.vue ./pkg/test-pkg/list
|
|
145
157
|
FORCE_COLOR=true yarn build-pkg test-pkg | cat
|
|
146
|
-
|
|
158
|
+
if [ $TEST_PERSIST_BUILD != "true" ]; then
|
|
159
|
+
echo "Removing folder ./pkg/test-pkg"
|
|
160
|
+
rm -rf ./pkg/test-pkg
|
|
161
|
+
fi
|
|
162
|
+
|
|
163
|
+
# function to clone repos and install dependencies (including the newly published shell version)
|
|
164
|
+
function clone_repo_test_extension_build() {
|
|
165
|
+
REPO_NAME=$1
|
|
166
|
+
PKG_NAME=$2
|
|
167
|
+
|
|
168
|
+
echo -e "\nSetting up $REPO_NAME repository locally\n"
|
|
169
|
+
|
|
170
|
+
# set registry to default (to install all of the other dependencies)
|
|
171
|
+
yarn config set registry ${DEFAULT_YARN_REGISTRY}
|
|
172
|
+
|
|
173
|
+
if [ $TEST_PERSIST_BUILD != "true" ]; then
|
|
174
|
+
echo "Removing folder ${BASE_DIR}/$REPO_NAME"
|
|
175
|
+
rm -rf ${BASE_DIR}/$REPO_NAME
|
|
176
|
+
fi
|
|
177
|
+
|
|
178
|
+
# cloning repo
|
|
179
|
+
git clone https://github.com/rancher/$REPO_NAME.git
|
|
180
|
+
pushd ${BASE_DIR}/$REPO_NAME
|
|
181
|
+
|
|
182
|
+
echo -e "\nInstalling dependencies for $REPO_NAME\n"
|
|
183
|
+
yarn install
|
|
184
|
+
|
|
185
|
+
# set registry to local verdaccio (to install new shell)
|
|
186
|
+
yarn config set registry ${VERDACCIO_YARN_REGISTRY}
|
|
187
|
+
|
|
188
|
+
# update package.json to use a specific version of shell
|
|
189
|
+
sed -i.bak -e "s/\"\@rancher\/shell\": \"[0-9]*.[0-9]*.[0-9]*\",/\"\@rancher\/shell\": \"${SHELL_VERSION}\",/g" package.json
|
|
190
|
+
rm package.json.bak
|
|
191
|
+
|
|
192
|
+
# we need to remove yarn.lock, otherwise it would install a version that we don't want
|
|
193
|
+
rm yarn.lock
|
|
194
|
+
|
|
195
|
+
echo -e "\nInstalling newly built shell version\n"
|
|
196
|
+
|
|
197
|
+
# installing new version of shell
|
|
198
|
+
yarn add @rancher/shell@${SHELL_VERSION}
|
|
199
|
+
|
|
200
|
+
# test build-pkg
|
|
201
|
+
FORCE_COLOR=true yarn build-pkg $PKG_NAME | cat
|
|
202
|
+
|
|
203
|
+
# kubewarden has some unit tests and they should be quick to run... Let's check them as well
|
|
204
|
+
if [ "${REPO_NAME}" == "kubewarden-ui" ]; then
|
|
205
|
+
yarn test:ci
|
|
206
|
+
fi
|
|
207
|
+
|
|
208
|
+
# return back to the base path
|
|
209
|
+
popd
|
|
210
|
+
|
|
211
|
+
# delete folder
|
|
212
|
+
if [ $TEST_PERSIST_BUILD != "true" ]; then
|
|
213
|
+
echo "Removing folder ${BASE_DIR}/$REPO_NAME"
|
|
214
|
+
rm -rf ${BASE_DIR}/$REPO_NAME
|
|
215
|
+
fi
|
|
216
|
+
yarn config set registry ${DEFAULT_YARN_REGISTRY}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
# Here we just add the extension that we want to include as a check (all our official extensions should be included here)
|
|
220
|
+
# Don't forget to add the unit tests exception to clone_repo_test_extension_build function if a new extension has those
|
|
221
|
+
clone_repo_test_extension_build "kubewarden-ui" "kubewarden"
|
|
222
|
+
clone_repo_test_extension_build "elemental-ui" "elemental"
|
|
147
223
|
|
|
148
224
|
echo "All done"
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
// When we receive a request to this URL we will reset the session to replay again from the HAR file
|
|
5
|
+
// This allows the user to refresh the browser and replay the HAR file again
|
|
6
|
+
const RESET_URL = '/api/v1/namespaces/cattle-ui-plugin-system/services/http:ui-plugin-operator:80/proxy/index.json';
|
|
7
|
+
|
|
8
|
+
const EXCLUDES_QS = '?exclude=metadata.managedFields';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Load the network requests/responses from the har file
|
|
12
|
+
* @param name name/path of the file
|
|
13
|
+
* @param port port that the local dev server is running on
|
|
14
|
+
* @returns har file data
|
|
15
|
+
*/
|
|
16
|
+
function loadFile(name, port, dashboard) {
|
|
17
|
+
const newBase = `https://127.0.0.1:${ port }`;
|
|
18
|
+
const data = {};
|
|
19
|
+
|
|
20
|
+
console.log(`Loading HAR file: ${ name }`); // eslint-disable-line no-console
|
|
21
|
+
|
|
22
|
+
const rawData = fs.readFileSync(name);
|
|
23
|
+
const har = JSON.parse(rawData);
|
|
24
|
+
let base = '';
|
|
25
|
+
let uri = '';
|
|
26
|
+
|
|
27
|
+
if (har?.log?.pages) {
|
|
28
|
+
const page = har.log.pages.find((page) => page.title.includes('/dashboard/'));
|
|
29
|
+
|
|
30
|
+
if (page) {
|
|
31
|
+
const parts = page.title.split('/dashboard');
|
|
32
|
+
|
|
33
|
+
base = parts[0];
|
|
34
|
+
uri = parts[1];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (har?.log?.entries) {
|
|
39
|
+
console.log('Network requests:'); // eslint-disable-line no-console
|
|
40
|
+
|
|
41
|
+
har.log.entries.forEach((r) => {
|
|
42
|
+
const mimeType = r.response.content.mimeType;
|
|
43
|
+
|
|
44
|
+
// Only cache json responses
|
|
45
|
+
if (mimeType === 'application/json' || mimeType === 'text/plain') {
|
|
46
|
+
let url = r.request.url;
|
|
47
|
+
|
|
48
|
+
if (url.startsWith(base)) {
|
|
49
|
+
url = url.substr(base.length);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
console.log(` ${ r.request.method } ${ decodeURIComponent(url) }`); // eslint-disable-line no-console
|
|
53
|
+
|
|
54
|
+
data[url] = data[url] || {};
|
|
55
|
+
data[url][r.request.method] = data[url][r.request.method] || [];
|
|
56
|
+
|
|
57
|
+
const item = {
|
|
58
|
+
status: r.response.status,
|
|
59
|
+
statusText: r.response.statusText,
|
|
60
|
+
headers: r.response.headers,
|
|
61
|
+
content: r.response.content
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
if (item.content.text) {
|
|
65
|
+
item.content.text = item.content.text.replaceAll(base, newBase);
|
|
66
|
+
data[url][r.request.method].push(item);
|
|
67
|
+
} else {
|
|
68
|
+
console.log(' Warning: Omitting this response as there is no content - UI may not work as expected'); // eslint-disable-line no-console
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
console.log('Page:'); // eslint-disable-line no-console
|
|
75
|
+
console.log(` ${ newBase }${ dashboard }${ uri }`); // eslint-disable-line no-console
|
|
76
|
+
console.log(''); // eslint-disable-line no-console
|
|
77
|
+
|
|
78
|
+
return data;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function exportToFiles(data, folder) {
|
|
82
|
+
console.log(`Exporting request data to ${ folder }`); // eslint-disable-line no-console
|
|
83
|
+
|
|
84
|
+
Object.keys(data).forEach((r) => {
|
|
85
|
+
const out = path.join(folder, `.${ r }`);
|
|
86
|
+
const dir = path.dirname(out);
|
|
87
|
+
|
|
88
|
+
console.log(r); // eslint-disable-line no-console
|
|
89
|
+
|
|
90
|
+
Object.keys(data[r]).forEach((method) => {
|
|
91
|
+
const name = `${ path.basename(out) }.${ method.toLowerCase() }.json`;
|
|
92
|
+
|
|
93
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
94
|
+
|
|
95
|
+
data[r][method].forEach((request) => {
|
|
96
|
+
const formatted = JSON.stringify(JSON.parse(request.content.text), null, 2);
|
|
97
|
+
|
|
98
|
+
fs.writeFileSync(path.join(dir, name), formatted);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function harProxy(responses, folder) {
|
|
105
|
+
let session = JSON.parse(JSON.stringify(responses));
|
|
106
|
+
|
|
107
|
+
return (req, res, next) => {
|
|
108
|
+
if (req.originalUrl === RESET_URL) {
|
|
109
|
+
session = JSON.parse(JSON.stringify(responses));
|
|
110
|
+
console.log('>>>>>>>> Reset session replay from har file'); // eslint-disable-line no-console
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const url = decodeURIComponent(req.originalUrl);
|
|
114
|
+
let playback = session[req.originalUrl];
|
|
115
|
+
|
|
116
|
+
// If it did not match, try without the metadata excludes query string that was adding in 2.8.0
|
|
117
|
+
// This might allow HAR captures with Rancher < 2.8.0 to be replayed on >= 2.8.0
|
|
118
|
+
if (!playback && req.originalUrl.endsWith(EXCLUDES_QS)) {
|
|
119
|
+
playback = session[req.originalUrl.slice(0, -EXCLUDES_QS.length)];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (playback && playback[req.method] && playback[req.method].length) {
|
|
123
|
+
const resp = playback[req.method][0];
|
|
124
|
+
|
|
125
|
+
if (playback[req.method].length > 1) {
|
|
126
|
+
playback[req.method].shift();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const body = resp.content?.text || '';
|
|
130
|
+
|
|
131
|
+
res.type(resp.content.mimeType);
|
|
132
|
+
res.status(resp.status);
|
|
133
|
+
res.send(Buffer.from(body));
|
|
134
|
+
res.end();
|
|
135
|
+
|
|
136
|
+
const char = !!resp.used ? '*' : ' ';
|
|
137
|
+
|
|
138
|
+
console.log(`${ req.method }${ char } ${ resp.status } ${ url }`); // eslint-disable-line no-console
|
|
139
|
+
|
|
140
|
+
resp.used = true;
|
|
141
|
+
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (req.originalUrl.startsWith('/v1/') || req.originalUrl.startsWith('/v3/') || req.originalUrl.startsWith('/k8s/')) {
|
|
146
|
+
// If we have been configured with a folder, look for a file with the contents to use for the request
|
|
147
|
+
if (folder) {
|
|
148
|
+
// Remove query string
|
|
149
|
+
const name = req.originalUrl.split('?')[0];
|
|
150
|
+
const requestFile = path.join(folder, `.${ name }.${ req.method.toLowerCase() }.json`);
|
|
151
|
+
|
|
152
|
+
if (fs.existsSync(requestFile)) {
|
|
153
|
+
const data = fs.readFileSync(requestFile);
|
|
154
|
+
|
|
155
|
+
console.log(`${ req.method }f 200 ${ url }`); // eslint-disable-line no-console
|
|
156
|
+
|
|
157
|
+
res.type('application/json');
|
|
158
|
+
res.status(200);
|
|
159
|
+
res.send(data);
|
|
160
|
+
|
|
161
|
+
return res.end();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Fallback to sending a 404 response
|
|
166
|
+
res.status(404);
|
|
167
|
+
res.send('Not Found');
|
|
168
|
+
|
|
169
|
+
console.log(`${ req.method }? 404 ${ url }`); // eslint-disable-line no-console
|
|
170
|
+
|
|
171
|
+
return res.end();
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Continue on to serve up other resources
|
|
175
|
+
return next();
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
module.exports = {
|
|
180
|
+
loadFile,
|
|
181
|
+
harProxy,
|
|
182
|
+
exportToFiles,
|
|
183
|
+
};
|
package/store/catalog.js
CHANGED
|
@@ -354,7 +354,7 @@ export const actions = {
|
|
|
354
354
|
|
|
355
355
|
// As per comment above, when there are no clusters this will be management. Store it such that it can be used for those cases
|
|
356
356
|
commit('setInStore', inStore);
|
|
357
|
-
hash.cluster = hash.cluster
|
|
357
|
+
hash.cluster = hash.cluster?.filter((repo) => !(repo?.metadata?.annotations?.[CATALOG_ANNOTATIONS.HIDDEN_REPO] === 'true'));
|
|
358
358
|
|
|
359
359
|
commit('setRepos', hash);
|
|
360
360
|
|
package/store/features.js
CHANGED
|
@@ -27,6 +27,7 @@ export const mapFeature = function(name) {
|
|
|
27
27
|
export const MULTI_CLUSTER = create('multi-cluster-management', true);
|
|
28
28
|
export const LEGACY = create('legacy', false);
|
|
29
29
|
export const RKE2 = create('rke2', true);
|
|
30
|
+
export const RKE1_UI = create('rke1-ui', true);
|
|
30
31
|
export const UNSUPPORTED_STORAGE_DRIVERS = create('unsupported-storage-drivers', false);
|
|
31
32
|
export const FLEET = create('continuous-delivery', true);
|
|
32
33
|
export const HARVESTER = create('harvester', true);
|
package/store/i18n.js
CHANGED
|
@@ -308,6 +308,17 @@ export const actions = {
|
|
|
308
308
|
p.push(dispatch('mergeLoad', { locale, module: fn }));
|
|
309
309
|
});
|
|
310
310
|
|
|
311
|
+
// load all of the default locales from the plugins for fallback
|
|
312
|
+
if (locale !== DEFAULT_LOCALE) {
|
|
313
|
+
const defaultI18nExt = rootState.$plugin?.getDynamic('l10n', DEFAULT_LOCALE);
|
|
314
|
+
|
|
315
|
+
if (defaultI18nExt && defaultI18nExt.length) {
|
|
316
|
+
defaultI18nExt.forEach((fn) => {
|
|
317
|
+
p.push(dispatch('mergeLoad', { locale: DEFAULT_LOCALE, module: fn }));
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
311
322
|
try {
|
|
312
323
|
await Promise.all(p);
|
|
313
324
|
} catch (e) {
|
package/store/index.js
CHANGED
|
@@ -713,10 +713,7 @@ export const actions = {
|
|
|
713
713
|
|
|
714
714
|
const promises = {
|
|
715
715
|
// Clusters guaranteed always available or your money back
|
|
716
|
-
clusters: dispatch('management/findAll', {
|
|
717
|
-
type: MANAGEMENT.CLUSTER,
|
|
718
|
-
opt: { url: MANAGEMENT.CLUSTER }
|
|
719
|
-
}),
|
|
716
|
+
clusters: dispatch('management/findAll', { type: MANAGEMENT.CLUSTER }),
|
|
720
717
|
|
|
721
718
|
// Features checks on its own if they are available
|
|
722
719
|
features: dispatch('features/loadServer'),
|
|
@@ -804,14 +801,14 @@ export const actions = {
|
|
|
804
801
|
commit('targetRoute', targetRoute);
|
|
805
802
|
const sameCluster = state.clusterId && state.clusterId === id;
|
|
806
803
|
const samePackage = oldPkg?.name === newPkg?.name;
|
|
804
|
+
const sameProduct = oldProduct === product;
|
|
807
805
|
const isMultiCluster = getters['isMultiCluster'];
|
|
808
806
|
|
|
809
|
-
// Are we in the same cluster and package?
|
|
810
|
-
if ( sameCluster && samePackage) {
|
|
807
|
+
// Are we in the same cluster and package or product?
|
|
808
|
+
if ( sameCluster && (samePackage || sameProduct)) {
|
|
811
809
|
// Do nothing, we're already connected/connecting to this cluster
|
|
812
810
|
return;
|
|
813
811
|
}
|
|
814
|
-
|
|
815
812
|
const oldPkgClusterStore = oldPkg?.stores.find(
|
|
816
813
|
(s) => getters[`${ s.storeName }/isClusterStore`]
|
|
817
814
|
)?.storeName;
|
|
@@ -832,7 +829,6 @@ export const actions = {
|
|
|
832
829
|
// so that the nav and header stay the same when going to things like prefs
|
|
833
830
|
commit('clusterReady', false);
|
|
834
831
|
commit('clusterId', undefined);
|
|
835
|
-
|
|
836
832
|
await dispatch('cluster/unsubscribe');
|
|
837
833
|
commit('cluster/reset');
|
|
838
834
|
|
|
@@ -888,6 +884,10 @@ export const actions = {
|
|
|
888
884
|
// Try and wait until the schema exists before proceeding
|
|
889
885
|
await dispatch('management/waitForSchema', { type: MANAGEMENT.CLUSTER });
|
|
890
886
|
|
|
887
|
+
// Similar to above, we're still waiting on loadManagement to fetch required resources
|
|
888
|
+
// If we don't have all mgmt clusters yet a request to fetch this cluster and then all clusters (in cleanNamespaces) is kicked off
|
|
889
|
+
await dispatch('management/waitForHaveAll', { type: MANAGEMENT.CLUSTER });
|
|
890
|
+
|
|
891
891
|
// See if it really exists
|
|
892
892
|
try {
|
|
893
893
|
const cluster = await dispatch('management/find', {
|
|
@@ -1047,15 +1047,13 @@ export const actions = {
|
|
|
1047
1047
|
if ( route.name === 'index' ) {
|
|
1048
1048
|
router.replace('/auth/login');
|
|
1049
1049
|
} else {
|
|
1050
|
-
|
|
1051
|
-
const backTo = window.localStorage.getItem(BACK_TO);
|
|
1050
|
+
const backTo = window.localStorage.getItem(BACK_TO);
|
|
1052
1051
|
|
|
1053
|
-
|
|
1054
|
-
|
|
1052
|
+
const isLogin = route.name === 'auth-login' || route.path === '/login'; // Cover dashboard and case of log out from ember;
|
|
1053
|
+
const isLogout = route.name === 'auth-logout';
|
|
1055
1054
|
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
}
|
|
1055
|
+
if (!backTo && !isLogin && !isLogout) {
|
|
1056
|
+
window.localStorage.setItem(BACK_TO, window.location.href);
|
|
1059
1057
|
}
|
|
1060
1058
|
|
|
1061
1059
|
const QUERY = (LOGGED_OUT in route.query) ? LOGGED_OUT : TIMED_OUT;
|