@rancher/shell 3.0.1-rc.1 → 3.0.1-rc.2
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/translations/en-us.yaml +1 -4
- package/components/SideNav.vue +5 -3
- package/components/nav/TopLevelMenu.vue +5 -3
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +5 -2
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +17 -7
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +20 -6
- package/models/fleet.cattle.io.gitrepo.js +5 -0
- package/package.json +6 -4
- package/pages/auth/login.vue +7 -2
- package/scripts/extension/parse-tag-name +19 -12
- package/scripts/publish-shell.sh +10 -2
- package/scripts/test-plugins-build.sh +8 -9
- package/scripts/typegen.sh +2 -0
- package/types/shell/index.d.ts +96 -1
- package/utils/version.js +1 -1
- package/vue.config.js +2 -2
|
@@ -1475,6 +1475,7 @@ cluster:
|
|
|
1475
1475
|
placeholder: A unique name for the cluster
|
|
1476
1476
|
directoryConfig:
|
|
1477
1477
|
title: Data directory configuration
|
|
1478
|
+
banner: Data directory configuration can not be changed once the cluster has been created
|
|
1478
1479
|
radioInput:
|
|
1479
1480
|
defaultLabel: Use default data directory configuration
|
|
1480
1481
|
commonLabel: Use a common base directory for data directory configuration (sub-directories will be used for the system-agent, provisioning and distro paths)
|
|
@@ -4877,10 +4878,6 @@ rbac:
|
|
|
4877
4878
|
admin:
|
|
4878
4879
|
label: Administrator
|
|
4879
4880
|
description: Administrators have full control over the entire installation and all resources in all clusters.
|
|
4880
|
-
restricted-admin:
|
|
4881
|
-
label: Restricted Administrator
|
|
4882
|
-
description: Restricted Admins have full control over all resources in all downstream clusters but no access to the local cluster.
|
|
4883
|
-
deprecation: 'Warning: The Restricted Administrator role has been deprecated as of Rancher 2.8.0 and will be removed in a future release - Check out the <a href="{releaseNotesUrl}" target="_blank" rel="noopener noreferrer nofollow">Release Notes</a>'
|
|
4884
4881
|
user:
|
|
4885
4882
|
label: Standard User
|
|
4886
4883
|
description: Standard Users can create new clusters and manage clusters and projects they have been granted access to.
|
package/components/SideNav.vue
CHANGED
|
@@ -111,8 +111,10 @@ export default {
|
|
|
111
111
|
|
|
112
112
|
computed: {
|
|
113
113
|
...mapState(['managementReady', 'clusterReady']),
|
|
114
|
-
...mapGetters(['productId', 'clusterId', 'currentProduct', 'rootProduct', 'isSingleProduct', 'namespaceMode', 'isExplorer', 'isVirtualCluster']),
|
|
115
|
-
...mapGetters({
|
|
114
|
+
...mapGetters(['isStandaloneHarvester', 'productId', 'clusterId', 'currentProduct', 'rootProduct', 'isSingleProduct', 'namespaceMode', 'isExplorer', 'isVirtualCluster']),
|
|
115
|
+
...mapGetters({
|
|
116
|
+
locale: 'i18n/selectedLocaleLabel', availableLocales: 'i18n/availableLocales', hasMultipleLocales: 'i18n/hasMultipleLocales'
|
|
117
|
+
}),
|
|
116
118
|
...mapGetters('type-map', ['activeProducts']),
|
|
117
119
|
|
|
118
120
|
favoriteTypes: mapPref(FAVORITE_TYPES),
|
|
@@ -437,7 +439,7 @@ export default {
|
|
|
437
439
|
</span>
|
|
438
440
|
|
|
439
441
|
<!-- locale selector -->
|
|
440
|
-
<span v-if="isSingleProduct">
|
|
442
|
+
<span v-if="isSingleProduct && hasMultipleLocales && !isStandaloneHarvester">
|
|
441
443
|
<v-dropdown
|
|
442
444
|
popperClass="localeSelector"
|
|
443
445
|
placement="top"
|
|
@@ -920,7 +920,7 @@ export default {
|
|
|
920
920
|
// needs !important so that we can
|
|
921
921
|
// offset the tooltip a bit so it doesn't
|
|
922
922
|
// overlap the pin icon and cause bad UX
|
|
923
|
-
left:
|
|
923
|
+
left: 48px !important;
|
|
924
924
|
}
|
|
925
925
|
|
|
926
926
|
.localeSelector, .footer-tooltip {
|
|
@@ -1069,7 +1069,7 @@ export default {
|
|
|
1069
1069
|
line-height: normal;
|
|
1070
1070
|
|
|
1071
1071
|
& > p {
|
|
1072
|
-
width:
|
|
1072
|
+
width: 182px;
|
|
1073
1073
|
white-space: nowrap;
|
|
1074
1074
|
overflow: hidden;
|
|
1075
1075
|
text-overflow: ellipsis;
|
|
@@ -1117,9 +1117,11 @@ export default {
|
|
|
1117
1117
|
|
|
1118
1118
|
> i, > img {
|
|
1119
1119
|
display: block;
|
|
1120
|
-
width: 42px;
|
|
1121
1120
|
font-size: $icon-size;
|
|
1122
1121
|
margin-right: 14px;
|
|
1122
|
+
&.group-icon {
|
|
1123
|
+
width: 42px;
|
|
1124
|
+
}
|
|
1123
1125
|
}
|
|
1124
1126
|
|
|
1125
1127
|
.rancher-provider-icon,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import merge from 'lodash/merge';
|
|
3
3
|
import { ucFirst } from '@shell/utils/string';
|
|
4
|
-
import { isSimpleKeyValue } from '@shell/utils/object';
|
|
4
|
+
import { isSimpleKeyValue, set } from '@shell/utils/object';
|
|
5
5
|
import { _CREATE, _VIEW } from '@shell/config/query-params';
|
|
6
6
|
import { SCHEMA, NAMESPACE } from '@shell/config/types';
|
|
7
7
|
import CreateEditView from '@shell/mixins/create-edit-view';
|
|
@@ -222,6 +222,9 @@ export default {
|
|
|
222
222
|
this.value.spec.match.namespaces = [];
|
|
223
223
|
this.value.spec.match.excludedNamespaces = [];
|
|
224
224
|
}
|
|
225
|
+
},
|
|
226
|
+
setParameters(e) {
|
|
227
|
+
return set(this.value.spec, 'parameters', e);
|
|
225
228
|
}
|
|
226
229
|
}
|
|
227
230
|
};
|
|
@@ -356,7 +359,7 @@ export default {
|
|
|
356
359
|
v-model:value="parametersYaml"
|
|
357
360
|
class="yaml-editor"
|
|
358
361
|
:editor-mode="editorMode"
|
|
359
|
-
@newObject="
|
|
362
|
+
@newObject="setParameters"
|
|
360
363
|
/>
|
|
361
364
|
</Tab>
|
|
362
365
|
</Tabbed>
|
|
@@ -113,7 +113,7 @@ describe('component: DirectoryConfig', () => {
|
|
|
113
113
|
expect(wrapper.vm.value.k8sDistro).toStrictEqual(k8sDistroValue);
|
|
114
114
|
});
|
|
115
115
|
|
|
116
|
-
it('should render the component with configuration being an empty object, without errors and radio be of value DATA_DIR_RADIO_OPTIONS.
|
|
116
|
+
it('should render the component with configuration being an empty object, without errors and radio be of value DATA_DIR_RADIO_OPTIONS.CUSTOM (edit scenario)', () => {
|
|
117
117
|
const newMountOptions = clone(mountOptions);
|
|
118
118
|
|
|
119
119
|
newMountOptions.propsData.value = {};
|
|
@@ -131,17 +131,21 @@ describe('component: DirectoryConfig', () => {
|
|
|
131
131
|
const k8sDistroInput = wrapper.find('[data-testid="rke2-directory-config-k8sDistro-data-dir"]');
|
|
132
132
|
|
|
133
133
|
expect(title.exists()).toBe(true);
|
|
134
|
-
expect(radioInput.
|
|
134
|
+
expect(radioInput.isVisible()).toBe(false);
|
|
135
135
|
|
|
136
|
-
expect(wrapper.vm.dataConfigRadioValue).toBe(DATA_DIR_RADIO_OPTIONS.
|
|
136
|
+
expect(wrapper.vm.dataConfigRadioValue).toBe(DATA_DIR_RADIO_OPTIONS.CUSTOM);
|
|
137
137
|
|
|
138
138
|
// since we have all of the vars empty, then the inputs should not be there
|
|
139
|
-
expect(systemAgentInput.exists()).toBe(
|
|
140
|
-
expect(provisioningInput.exists()).toBe(
|
|
141
|
-
expect(k8sDistroInput.exists()).toBe(
|
|
139
|
+
expect(systemAgentInput.exists()).toBe(true);
|
|
140
|
+
expect(provisioningInput.exists()).toBe(true);
|
|
141
|
+
expect(k8sDistroInput.exists()).toBe(true);
|
|
142
|
+
|
|
143
|
+
expect(systemAgentInput.attributes().disabled).toBeDefined();
|
|
144
|
+
expect(provisioningInput.attributes().disabled).toBeDefined();
|
|
145
|
+
expect(k8sDistroInput.attributes().disabled).toBeDefined();
|
|
142
146
|
});
|
|
143
147
|
|
|
144
|
-
it('radio input should be set to DATA_DIR_RADIO_OPTIONS.CUSTOM with all data dir values existing and different (edit scenario)',
|
|
148
|
+
it('radio input should be set to DATA_DIR_RADIO_OPTIONS.CUSTOM with all data dir values existing and different (edit scenario)', () => {
|
|
145
149
|
const newMountOptions = clone(mountOptions);
|
|
146
150
|
const inputPath = 'some-data-dir';
|
|
147
151
|
|
|
@@ -157,14 +161,20 @@ describe('component: DirectoryConfig', () => {
|
|
|
157
161
|
|
|
158
162
|
expect(wrapper.vm.dataConfigRadioValue).toBe(DATA_DIR_RADIO_OPTIONS.CUSTOM);
|
|
159
163
|
|
|
164
|
+
const radioInput = wrapper.find('[data-testid="rke2-directory-config-radio-input"]');
|
|
160
165
|
const systemAgentInput = wrapper.find('[data-testid="rke2-directory-config-systemAgent-data-dir"]');
|
|
161
166
|
const provisioningInput = wrapper.find('[data-testid="rke2-directory-config-provisioning-data-dir"]');
|
|
162
167
|
const k8sDistroInput = wrapper.find('[data-testid="rke2-directory-config-k8sDistro-data-dir"]');
|
|
163
168
|
|
|
169
|
+
expect(radioInput.isVisible()).toBe(false);
|
|
164
170
|
expect(systemAgentInput.isVisible()).toBe(true);
|
|
165
171
|
expect(provisioningInput.isVisible()).toBe(true);
|
|
166
172
|
expect(k8sDistroInput.isVisible()).toBe(true);
|
|
167
173
|
|
|
174
|
+
expect(systemAgentInput.attributes().disabled).toBeDefined();
|
|
175
|
+
expect(provisioningInput.attributes().disabled).toBeDefined();
|
|
176
|
+
expect(k8sDistroInput.attributes().disabled).toBeDefined();
|
|
177
|
+
|
|
168
178
|
expect(wrapper.vm.value.systemAgent).toStrictEqual(`${ inputPath }/${ DEFAULT_SUBDIRS.AGENT }`);
|
|
169
179
|
expect(wrapper.vm.value.provisioning).toStrictEqual(`${ inputPath }/${ DEFAULT_SUBDIRS.PROVISIONING }`);
|
|
170
180
|
expect(wrapper.vm.value.k8sDistro).toStrictEqual(`${ inputPath }/${ DEFAULT_SUBDIRS.K8S_DISTRO_K3S }`);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
|
|
2
2
|
<script>
|
|
3
3
|
import { LabeledInput } from '@components/Form/LabeledInput';
|
|
4
|
-
import { _CREATE } from '@shell/config/query-params';
|
|
4
|
+
import { _CREATE, _EDIT } from '@shell/config/query-params';
|
|
5
5
|
import RadioGroup from '@components/Form/Radio/RadioGroup.vue';
|
|
6
|
+
import { Banner } from '@components/Banner';
|
|
6
7
|
|
|
7
8
|
export const DATA_DIR_RADIO_OPTIONS = {
|
|
8
9
|
DEFAULT: 'defaultDataDir',
|
|
@@ -23,7 +24,8 @@ export default {
|
|
|
23
24
|
name: 'DirectoryConfig',
|
|
24
25
|
components: {
|
|
25
26
|
LabeledInput,
|
|
26
|
-
RadioGroup
|
|
27
|
+
RadioGroup,
|
|
28
|
+
Banner
|
|
27
29
|
},
|
|
28
30
|
props: {
|
|
29
31
|
mode: {
|
|
@@ -50,9 +52,7 @@ export default {
|
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
if (this.mode !== _CREATE) {
|
|
53
|
-
|
|
54
|
-
dataConfigRadioValue = DATA_DIR_RADIO_OPTIONS.CUSTOM;
|
|
55
|
-
}
|
|
55
|
+
dataConfigRadioValue = DATA_DIR_RADIO_OPTIONS.CUSTOM;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
return {
|
|
@@ -85,6 +85,9 @@ export default {
|
|
|
85
85
|
}
|
|
86
86
|
},
|
|
87
87
|
computed: {
|
|
88
|
+
isDisabled() {
|
|
89
|
+
return this.mode === _EDIT;
|
|
90
|
+
},
|
|
88
91
|
dataConfigRadioOptions() {
|
|
89
92
|
const defaultDataDirOption = {
|
|
90
93
|
value: DATA_DIR_RADIO_OPTIONS.DEFAULT,
|
|
@@ -148,10 +151,17 @@ export default {
|
|
|
148
151
|
<template>
|
|
149
152
|
<div class="row">
|
|
150
153
|
<div class="col span-8">
|
|
151
|
-
<h3
|
|
154
|
+
<h3>
|
|
152
155
|
{{ t('cluster.directoryConfig.title') }}
|
|
153
156
|
</h3>
|
|
157
|
+
<Banner
|
|
158
|
+
class="mb-20"
|
|
159
|
+
:closable="false"
|
|
160
|
+
color="info"
|
|
161
|
+
label-key="cluster.directoryConfig.banner"
|
|
162
|
+
/>
|
|
154
163
|
<RadioGroup
|
|
164
|
+
v-show="!isDisabled"
|
|
155
165
|
:value="dataConfigRadioValue"
|
|
156
166
|
class="mb-10"
|
|
157
167
|
:mode="mode"
|
|
@@ -167,6 +177,7 @@ export default {
|
|
|
167
177
|
:mode="mode"
|
|
168
178
|
:label="t('cluster.directoryConfig.common.label')"
|
|
169
179
|
:tooltip="t('cluster.directoryConfig.common.tooltip')"
|
|
180
|
+
:disabled="isDisabled"
|
|
170
181
|
data-testid="rke2-directory-config-common-data-dir"
|
|
171
182
|
/>
|
|
172
183
|
<div v-if="dataConfigRadioValue === DATA_DIR_RADIO_OPTIONS.CUSTOM">
|
|
@@ -176,6 +187,7 @@ export default {
|
|
|
176
187
|
:mode="mode"
|
|
177
188
|
:label="t('cluster.directoryConfig.systemAgent.label')"
|
|
178
189
|
:tooltip="t('cluster.directoryConfig.systemAgent.tooltip')"
|
|
190
|
+
:disabled="isDisabled"
|
|
179
191
|
data-testid="rke2-directory-config-systemAgent-data-dir"
|
|
180
192
|
/>
|
|
181
193
|
<LabeledInput
|
|
@@ -184,6 +196,7 @@ export default {
|
|
|
184
196
|
:mode="mode"
|
|
185
197
|
:label="t('cluster.directoryConfig.provisioning.label')"
|
|
186
198
|
:tooltip="t('cluster.directoryConfig.provisioning.tooltip')"
|
|
199
|
+
:disabled="isDisabled"
|
|
187
200
|
data-testid="rke2-directory-config-provisioning-data-dir"
|
|
188
201
|
/>
|
|
189
202
|
<LabeledInput
|
|
@@ -192,6 +205,7 @@ export default {
|
|
|
192
205
|
:mode="mode"
|
|
193
206
|
:label="t('cluster.directoryConfig.k8sDistro.label')"
|
|
194
207
|
:tooltip="t('cluster.directoryConfig.k8sDistro.tooltip')"
|
|
208
|
+
:disabled="isDisabled"
|
|
195
209
|
data-testid="rke2-directory-config-k8sDistro-data-dir"
|
|
196
210
|
/>
|
|
197
211
|
</div>
|
|
@@ -338,6 +338,11 @@ export default class GitRepo extends SteveModel {
|
|
|
338
338
|
for (const bd of bundleDeployments) {
|
|
339
339
|
const clusterId = FleetUtils.clusterIdFromBundleDeploymentLabels(bd.metadata?.labels);
|
|
340
340
|
const c = clusters[clusterId];
|
|
341
|
+
|
|
342
|
+
if (!c) {
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
|
|
341
346
|
const resources = FleetUtils.resourcesFromBundleDeploymentStatus(bd.status);
|
|
342
347
|
|
|
343
348
|
resources.forEach((r) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rancher/shell",
|
|
3
|
-
"version": "3.0.1-rc.
|
|
3
|
+
"version": "3.0.1-rc.2",
|
|
4
4
|
"description": "Rancher Dashboard Shell",
|
|
5
5
|
"repository": "https://github.com/rancherlabs/dashboard",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -36,7 +36,6 @@
|
|
|
36
36
|
"@babel/plugin-proposal-private-property-in-object": "7.14.5",
|
|
37
37
|
"@babel/preset-typescript": "7.16.7",
|
|
38
38
|
"@novnc/novnc": "1.2.0",
|
|
39
|
-
"@nuxtjs/axios": "5.13.6",
|
|
40
39
|
"@popperjs/core": "2.4.4",
|
|
41
40
|
"@rancher/icons": "2.0.29",
|
|
42
41
|
"@types/is-url": "1.2.30",
|
|
@@ -51,6 +50,8 @@
|
|
|
51
50
|
"@vue/vue3-jest": "^27.0.0-alpha.1",
|
|
52
51
|
"add": "2.0.6",
|
|
53
52
|
"ansi_up": "5.0.0",
|
|
53
|
+
"axios": "0.21.4",
|
|
54
|
+
"axios-retry": "3.1.9",
|
|
54
55
|
"babel-eslint": "10.1.0",
|
|
55
56
|
"babel-plugin-module-resolver": "4.0.0",
|
|
56
57
|
"babel-preset-vue": "2.0.2",
|
|
@@ -73,6 +74,7 @@
|
|
|
73
74
|
"d3-selection": "1.4.1",
|
|
74
75
|
"dagre-d3": "0.6.4",
|
|
75
76
|
"dayjs": "1.8.29",
|
|
77
|
+
"defu": "5.0.1",
|
|
76
78
|
"diff2html": "3.4.24",
|
|
77
79
|
"dompurify": "2.5.4",
|
|
78
80
|
"element-matches": "^0.1.2",
|
|
@@ -160,7 +162,7 @@
|
|
|
160
162
|
"semver": "7.5.4",
|
|
161
163
|
"@types/lodash": "4.17.5",
|
|
162
164
|
"@types/node": "~20.10.0",
|
|
163
|
-
"@vue/cli-service/html-webpack-plugin": "^5.0.0"
|
|
165
|
+
"@vue/cli-service/html-webpack-plugin": "^5.0.0"
|
|
164
166
|
},
|
|
165
167
|
"nyc": {
|
|
166
168
|
"extension": [
|
|
@@ -168,4 +170,4 @@
|
|
|
168
170
|
".vue"
|
|
169
171
|
]
|
|
170
172
|
}
|
|
171
|
-
}
|
|
173
|
+
}
|
package/pages/auth/login.vue
CHANGED
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
import loadPlugins from '@shell/plugins/plugin';
|
|
32
32
|
import Loading from '@shell/components/Loading';
|
|
33
33
|
import { getGlobalBannerFontSizes } from '@shell/utils/banners';
|
|
34
|
+
import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
34
35
|
|
|
35
36
|
export default {
|
|
36
37
|
name: 'Login',
|
|
@@ -64,7 +65,7 @@ export default {
|
|
|
64
65
|
},
|
|
65
66
|
|
|
66
67
|
computed: {
|
|
67
|
-
...mapGetters(['
|
|
68
|
+
...mapGetters(['isSingleProduct']),
|
|
68
69
|
...mapGetters({ t: 'i18n/t', hasMultipleLocales: 'i18n/hasMultipleLocales' }),
|
|
69
70
|
|
|
70
71
|
loggedOutSuccessMsg() {
|
|
@@ -77,6 +78,10 @@ export default {
|
|
|
77
78
|
return this.t('login.loggedOut');
|
|
78
79
|
},
|
|
79
80
|
|
|
81
|
+
isHarvester() {
|
|
82
|
+
return this.isSingleProduct?.productName === HARVESTER;
|
|
83
|
+
},
|
|
84
|
+
|
|
80
85
|
singleProvider() {
|
|
81
86
|
return this.providers.length === 1 ? this.providers[0] : undefined;
|
|
82
87
|
},
|
|
@@ -498,7 +503,7 @@ export default {
|
|
|
498
503
|
</div>
|
|
499
504
|
</template>
|
|
500
505
|
<div
|
|
501
|
-
v-if="showLocaleSelector && hasMultipleLocales && !
|
|
506
|
+
v-if="showLocaleSelector && hasMultipleLocales && !isHarvester"
|
|
502
507
|
class="locale-selector"
|
|
503
508
|
>
|
|
504
509
|
<LocaleSelector
|
|
@@ -4,27 +4,34 @@ GITHUB_RELEASE_TAG=$1
|
|
|
4
4
|
GITHUB_RUN_ID=$2
|
|
5
5
|
GITHUB_WORKFLOW_TYPE=$3
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
echo "Parse tag name - evaluating release tag $GITHUB_RELEASE_TAG"
|
|
8
|
+
|
|
9
|
+
# Ensure "catalog" workflow release tag name matches the root <pkg-name>
|
|
8
10
|
if [[ "${GITHUB_WORKFLOW_TYPE}" == "catalog" ]]; then
|
|
11
|
+
BASE_EXT=$(jq -r .name package.json)
|
|
12
|
+
EXT_VERSION=$(jq -r .version package.json)
|
|
13
|
+
|
|
14
|
+
if [[ "${GITHUB_RELEASE_TAG}" != "${BASE_EXT}-${EXT_VERSION}" ]]; then
|
|
15
|
+
echo -e "release tag doesn't match catalog tag: release tag -> ${GITHUB_RELEASE_TAG} ::: curr catalog tag -> ${BASE_EXT}-${EXT_VERSION}"
|
|
16
|
+
gh run cancel ${GITHUB_RUN_ID}
|
|
17
|
+
fi
|
|
18
|
+
# Ensure "chart" workflow release tag name matches some pkg/<pkg-name>
|
|
19
|
+
else
|
|
20
|
+
NO_MATCHES="true"
|
|
21
|
+
|
|
9
22
|
for d in pkg/*/ ; do
|
|
10
23
|
pkg=$(basename $d)
|
|
11
24
|
|
|
12
25
|
PKG_VERSION=$(jq -r .version pkg/${pkg}/package.json)
|
|
13
|
-
|
|
26
|
+
CURR_PKG_TAG="${pkg}-${PKG_VERSION}"
|
|
14
27
|
|
|
15
|
-
if [[ "${GITHUB_RELEASE_TAG}" == "${
|
|
16
|
-
|
|
17
|
-
else
|
|
18
|
-
continue
|
|
28
|
+
if [[ "${GITHUB_RELEASE_TAG}" == "${CURR_PKG_TAG}" ]]; then
|
|
29
|
+
NO_MATCHES="false"
|
|
19
30
|
fi
|
|
20
31
|
done
|
|
21
|
-
else
|
|
22
|
-
# Ensure "charts" workflow release tag name does not match the root <pkg-name>
|
|
23
|
-
BASE_EXT=$(jq -r .name package.json)
|
|
24
|
-
EXT_VERSION=$(jq -r .version package.json)
|
|
25
32
|
|
|
26
|
-
if [[ "${
|
|
27
|
-
echo -e "tag: ${GITHUB_RELEASE_TAG}"
|
|
33
|
+
if [[ "${NO_MATCHES}" == "true" ]]; then
|
|
34
|
+
echo -e "release tag doesn't match any chart tag: ${GITHUB_RELEASE_TAG}. Check your pkg/<!-YOUR-EXT-> folders and corresponding versions to complete the match"
|
|
28
35
|
gh run cancel ${GITHUB_RUN_ID}
|
|
29
36
|
fi
|
|
30
37
|
fi
|
package/scripts/publish-shell.sh
CHANGED
|
@@ -6,7 +6,6 @@ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
|
|
|
6
6
|
BASE_DIR="$(cd $SCRIPT_DIR && cd ../.. && pwd)"
|
|
7
7
|
SHELL_DIR=$BASE_DIR/shell/
|
|
8
8
|
CREATORS_DIR=$BASE_DIR/creators/extension
|
|
9
|
-
PUBLISH_ARGS="--no-git-tag-version --access public --registry $NPM_REGISTRY $NPM_TAG"
|
|
10
9
|
FORCE_PUBLISH_TO_NPM="false"
|
|
11
10
|
DEFAULT_NPM_REGISTRY="https://registry.npmjs.org"
|
|
12
11
|
|
|
@@ -31,6 +30,8 @@ if [ "$FORCE_PUBLISH_TO_NPM" == "true" ]; then
|
|
|
31
30
|
export NPM_REGISTRY=$DEFAULT_NPM_REGISTRY
|
|
32
31
|
fi
|
|
33
32
|
|
|
33
|
+
PUBLISH_ARGS="--no-git-tag-version --access public --registry $NPM_REGISTRY"
|
|
34
|
+
|
|
34
35
|
pushd ${SHELL_DIR} >/dev/null
|
|
35
36
|
|
|
36
37
|
function publish() {
|
|
@@ -47,9 +48,16 @@ function publish() {
|
|
|
47
48
|
|
|
48
49
|
# if the PKG_VERSION has a - it means it will be a pre-release
|
|
49
50
|
if [[ $PKG_VERSION == *"-"* ]]; then
|
|
50
|
-
PUBLISH_ARGS="
|
|
51
|
+
PUBLISH_ARGS="$PUBLISH_ARGS --tag pre-release"
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# when testing the workflow, we don't want to actually do an npm publish but only a dry run
|
|
55
|
+
if [ ${DRY_RUN} == "true" ]; then
|
|
56
|
+
PUBLISH_ARGS="$PUBLISH_ARGS --dry-run"
|
|
51
57
|
fi
|
|
52
58
|
|
|
59
|
+
echo "Publish to NPM - arguments ::: ${PUBLISH_ARGS}"
|
|
60
|
+
|
|
53
61
|
echo "Publishing ${NAME} from ${FOLDER}"
|
|
54
62
|
pushd ${FOLDER} >/dev/null
|
|
55
63
|
|
|
@@ -169,8 +169,9 @@ fi
|
|
|
169
169
|
|
|
170
170
|
# function to clone repos and install dependencies (including the newly published shell version)
|
|
171
171
|
function clone_repo_test_extension_build() {
|
|
172
|
-
|
|
173
|
-
|
|
172
|
+
REPO_ORG=$1
|
|
173
|
+
REPO_NAME=$2
|
|
174
|
+
PKG_NAME=$3
|
|
174
175
|
|
|
175
176
|
echo -e "\nSetting up $REPO_NAME repository locally\n"
|
|
176
177
|
|
|
@@ -183,7 +184,7 @@ function clone_repo_test_extension_build() {
|
|
|
183
184
|
fi
|
|
184
185
|
|
|
185
186
|
# cloning repo
|
|
186
|
-
git clone https://github.com
|
|
187
|
+
git clone https://github.com/$REPO_ORG/$REPO_NAME.git
|
|
187
188
|
pushd ${BASE_DIR}/$REPO_NAME
|
|
188
189
|
|
|
189
190
|
echo -e "\nInstalling dependencies for $REPO_NAME\n"
|
|
@@ -196,9 +197,6 @@ function clone_repo_test_extension_build() {
|
|
|
196
197
|
sed -i.bak -e "s/\"\@rancher\/shell\": \"[0-9]*.[0-9]*.[0-9]*\",/\"\@rancher\/shell\": \"${SHELL_VERSION}\",/g" package.json
|
|
197
198
|
rm package.json.bak
|
|
198
199
|
|
|
199
|
-
# we need to remove yarn.lock, otherwise it would install a version that we don't want
|
|
200
|
-
rm yarn.lock
|
|
201
|
-
|
|
202
200
|
echo -e "\nInstalling newly built shell version\n"
|
|
203
201
|
|
|
204
202
|
# installing new version of shell
|
|
@@ -223,8 +221,9 @@ function clone_repo_test_extension_build() {
|
|
|
223
221
|
|
|
224
222
|
# Here we just add the extension that we want to include as a check (all our official extensions should be included here)
|
|
225
223
|
# Don't forget to add the unit tests exception to clone_repo_test_extension_build function if a new extension has those
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
224
|
+
clone_repo_test_extension_build "rancher" "kubewarden-ui" "kubewarden"
|
|
225
|
+
clone_repo_test_extension_build "rancher" "elemental-ui" "elemental"
|
|
226
|
+
clone_repo_test_extension_build "neuvector" "manager-ext" "neuvector-ui-ext"
|
|
227
|
+
# clone_repo_test_extension_build "rancher" "capi-ui-extension" "capi"
|
|
229
228
|
|
|
230
229
|
echo "All done"
|
package/scripts/typegen.sh
CHANGED
|
@@ -31,9 +31,11 @@ ${BASE_DIR}/node_modules/.bin/tsc ${SHELL_DIR}/plugins/dashboard-store/normalize
|
|
|
31
31
|
${BASE_DIR}/node_modules/.bin/tsc ${SHELL_DIR}/plugins/dashboard-store/resource-class.js --declaration --allowJs --emitDeclarationOnly --outDir ${SHELL_DIR}/tmp/plugins/dashboard-store/ > /dev/null
|
|
32
32
|
${BASE_DIR}/node_modules/.bin/tsc ${SHELL_DIR}/plugins/dashboard-store/classify.js --declaration --allowJs --emitDeclarationOnly --outDir ${SHELL_DIR}/tmp/plugins/dashboard-store/ > /dev/null
|
|
33
33
|
${BASE_DIR}/node_modules/.bin/tsc ${SHELL_DIR}/plugins/dashboard-store/actions.js --declaration --allowJs --emitDeclarationOnly --outDir ${SHELL_DIR}/tmp/plugins/dashboard-store/ > /dev/null
|
|
34
|
+
${BASE_DIR}/node_modules/.bin/tsc ${SHELL_DIR}/plugins/steve/steve-class.js --declaration --allowJs --emitDeclarationOnly --outDir ${SHELL_DIR}/tmp/plugins/steve/ > /dev/null
|
|
34
35
|
|
|
35
36
|
# # mixins
|
|
36
37
|
${BASE_DIR}/node_modules/.bin/tsc ${SHELL_DIR}/mixins/create-edit-view/index.js --declaration --allowJs --emitDeclarationOnly --outDir ${SHELL_DIR}/tmp/mixins/create-edit-view > /dev/null
|
|
38
|
+
${BASE_DIR}/node_modules/.bin/tsc ${SHELL_DIR}/mixins/resource-fetch.js --declaration --allowJs --emitDeclarationOnly --outDir ${SHELL_DIR}/tmp/mixins > /dev/null
|
|
37
39
|
|
|
38
40
|
# # models
|
|
39
41
|
${BASE_DIR}/node_modules/.bin/tsc ${SHELL_DIR}/models/namespace.js --declaration --allowJs --emitDeclarationOnly --outDir ${SHELL_DIR}/tmp/models/ > /dev/null
|
package/types/shell/index.d.ts
CHANGED
|
@@ -2352,6 +2352,67 @@ declare var _default: import("vue").DefineComponent<{
|
|
|
2352
2352
|
export default _default;
|
|
2353
2353
|
}
|
|
2354
2354
|
|
|
2355
|
+
// @shell/mixins/resource-fetch
|
|
2356
|
+
|
|
2357
|
+
declare module '@shell/mixins/resource-fetch' {
|
|
2358
|
+
declare namespace _default {
|
|
2359
|
+
const mixins: any[];
|
|
2360
|
+
const inheritAttrs: boolean;
|
|
2361
|
+
function data(): {
|
|
2362
|
+
perfConfig: {};
|
|
2363
|
+
init: boolean;
|
|
2364
|
+
multipleResources: any[];
|
|
2365
|
+
loadResources: any[];
|
|
2366
|
+
hasManualRefresh: boolean;
|
|
2367
|
+
watch: boolean;
|
|
2368
|
+
isTooManyItemsToAutoUpdate: boolean;
|
|
2369
|
+
force: boolean;
|
|
2370
|
+
incremental: boolean;
|
|
2371
|
+
fetchedResourceType: any[];
|
|
2372
|
+
paginating: any;
|
|
2373
|
+
};
|
|
2374
|
+
function data(): {
|
|
2375
|
+
perfConfig: {};
|
|
2376
|
+
init: boolean;
|
|
2377
|
+
multipleResources: any[];
|
|
2378
|
+
loadResources: any[];
|
|
2379
|
+
hasManualRefresh: boolean;
|
|
2380
|
+
watch: boolean;
|
|
2381
|
+
isTooManyItemsToAutoUpdate: boolean;
|
|
2382
|
+
force: boolean;
|
|
2383
|
+
incremental: boolean;
|
|
2384
|
+
fetchedResourceType: any[];
|
|
2385
|
+
paginating: any;
|
|
2386
|
+
};
|
|
2387
|
+
function beforeUnmount(): void;
|
|
2388
|
+
function beforeUnmount(): void;
|
|
2389
|
+
namespace computed {
|
|
2390
|
+
function rows(): any;
|
|
2391
|
+
function rows(): any;
|
|
2392
|
+
function loading(): any;
|
|
2393
|
+
function loading(): any;
|
|
2394
|
+
const refreshFlag: import("vuex").Computed;
|
|
2395
|
+
}
|
|
2396
|
+
namespace watch {
|
|
2397
|
+
function refreshFlag(neu: any): Promise<void>;
|
|
2398
|
+
function refreshFlag(neu: any): Promise<void>;
|
|
2399
|
+
}
|
|
2400
|
+
namespace methods {
|
|
2401
|
+
function $initializeFetchData(type: any, multipleResources: any[], storeType: any): void;
|
|
2402
|
+
function $initializeFetchData(type: any, multipleResources: any[], storeType: any): void;
|
|
2403
|
+
function $fetchType(type: any, multipleResources: any[], storeType: any): any;
|
|
2404
|
+
function $fetchType(type: any, multipleResources: any[], storeType: any): any;
|
|
2405
|
+
function __getCountForResources(resourceNames: any, namespace: any, storeType: any): any;
|
|
2406
|
+
function __getCountForResources(resourceNames: any, namespace: any, storeType: any): any;
|
|
2407
|
+
function __getCountForResource(resourceName: any, namespace: any, storeType: any): any;
|
|
2408
|
+
function __getCountForResource(resourceName: any, namespace: any, storeType: any): any;
|
|
2409
|
+
function __gatherResourceFetchData(resourceName: any, multipleResources: any, currStore: any): void;
|
|
2410
|
+
function __gatherResourceFetchData(resourceName: any, multipleResources: any, currStore: any): void;
|
|
2411
|
+
}
|
|
2412
|
+
}
|
|
2413
|
+
export default _default;
|
|
2414
|
+
}
|
|
2415
|
+
|
|
2355
2416
|
// @shell/models/namespace
|
|
2356
2417
|
|
|
2357
2418
|
declare module '@shell/models/namespace' {
|
|
@@ -3115,6 +3176,40 @@ export default class Resource {
|
|
|
3115
3176
|
}
|
|
3116
3177
|
}
|
|
3117
3178
|
|
|
3179
|
+
// @shell/plugins/steve/hybrid-class
|
|
3180
|
+
|
|
3181
|
+
declare module '@shell/plugins/steve/hybrid-class' {
|
|
3182
|
+
export function cleanHybridResources(data: any): any;
|
|
3183
|
+
export default class HybridModel {
|
|
3184
|
+
constructor(data: any, ctx: any, rehydrateNamespace?: any, setClone?: boolean);
|
|
3185
|
+
get labels(): any;
|
|
3186
|
+
setLabels(val: any): void;
|
|
3187
|
+
metadata: {};
|
|
3188
|
+
setLabel(key: any, val: any): void;
|
|
3189
|
+
get annotations(): any;
|
|
3190
|
+
setAnnotations(val: any): void;
|
|
3191
|
+
setAnnotation(key: any, val: any): void;
|
|
3192
|
+
get state(): any;
|
|
3193
|
+
}
|
|
3194
|
+
}
|
|
3195
|
+
|
|
3196
|
+
// @shell/plugins/steve/steve-class
|
|
3197
|
+
|
|
3198
|
+
declare module '@shell/plugins/steve/steve-class' {
|
|
3199
|
+
export default class SteveModel extends HybridModel {
|
|
3200
|
+
get name(): any;
|
|
3201
|
+
get namespace(): any;
|
|
3202
|
+
/**
|
|
3203
|
+
* Set description based on the type of model available with private fallback
|
|
3204
|
+
*/
|
|
3205
|
+
set description(arg: any);
|
|
3206
|
+
get description(): any;
|
|
3207
|
+
_description: any;
|
|
3208
|
+
cleanForSave(data: any, forNew: any): any;
|
|
3209
|
+
}
|
|
3210
|
+
import HybridModel from "./hybrid-class";
|
|
3211
|
+
}
|
|
3212
|
+
|
|
3118
3213
|
// @shell/store/features
|
|
3119
3214
|
|
|
3120
3215
|
declare module '@shell/store/features' {
|
|
@@ -4588,7 +4683,7 @@ declare module '@shell/utils/version' {
|
|
|
4588
4683
|
export function parse(str: any): any;
|
|
4589
4684
|
export function sortable(str: any): any;
|
|
4590
4685
|
export function compare(in1: any, in2: any): any;
|
|
4591
|
-
export function isPrerelease(version
|
|
4686
|
+
export function isPrerelease(version?: string): boolean;
|
|
4592
4687
|
export function isDevBuild(version: any): boolean;
|
|
4593
4688
|
export function getVersionInfo(store: any): {
|
|
4594
4689
|
displayVersion: any;
|
package/utils/version.js
CHANGED
package/vue.config.js
CHANGED
|
@@ -131,11 +131,11 @@ const instrumentCode = () => {
|
|
|
131
131
|
};
|
|
132
132
|
|
|
133
133
|
const getLoaders = (SHELL_ABS) => [
|
|
134
|
-
//
|
|
134
|
+
// no fallback for pre-2013 browsers https://caniuse.com/webworkers
|
|
135
135
|
{
|
|
136
136
|
test: /web-worker.[a-z-]+.js/i,
|
|
137
137
|
loader: 'worker-loader',
|
|
138
|
-
options: { inline: 'fallback' },
|
|
138
|
+
options: { inline: 'no-fallback' },
|
|
139
139
|
},
|
|
140
140
|
// Handler for csv files (e.g. ec2 instance data)
|
|
141
141
|
{
|