Skip to content

Commit 18242e9

Browse files
authored
fix: getStorageType method (#1345)
* fix: getStorageType method Signed-off-by: Oleksii Orel <oorel@redhat.com>
1 parent f45c763 commit 18242e9

File tree

13 files changed

+253
-53
lines changed

13 files changed

+253
-53
lines changed

.deps/EXCLUDED/prod.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ This file lists dependencies that do not need CQs or auto-detection does not wor
22

33
| Packages | Resolved CQs |
44
| --- | --- |
5-
| `@devfile/api@2.3.0-1738854228` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@devfile/api/2.3.0-1738854228) |
5+
| `@devfile/api@2.3.0-1746644330` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@devfile/api/2.3.0-1746644330) |
66
| `@fastify/cors@9.0.1` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@fastify/cors/9.0.1) |
77
| `@hapi/hoek@10.0.1` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@hapi/hoek/10.0.1) |
8+
| `@inversifyjs/common@1.5.0` | transitive dependency |
9+
| `@inversifyjs/container@1.9.1` | transitive dependency |
810
| `@patternfly/react-core@4.278.0` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@patternfly/react-core/4.278.0) |
911
| `@patternfly/react-icons@4.93.7` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@patternfly/react-icons/4.93.7) |
1012
| `@patternfly/react-table@4.113.6` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@patternfly/react-table/4.113.6) |
@@ -13,6 +15,7 @@ This file lists dependencies that do not need CQs or auto-detection does not wor
1315
| `elliptic@6.6.1` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/elliptic/6.6.1) |
1416
| `fast-uri@2.4.0` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/fast-uri/2.4.0) |
1517
| `fastify@4.28.1` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/fastify/4.28.1) |
18+
| `inversify@7.5.1` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/inversify/7.5.1) |
1619
| `jsep@1.3.9` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/jsep/1.3.9) |
1720
| `light-my-request@5.14.0` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/light-my-request/5.14.0) |
1821
| `real-require@0.2.0` | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/real-require/0.2.0) |

.deps/dev.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
| [`@babel/helper-validator-identifier@7.25.9`](https://github.com/babel/babel.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@babel/helper-validator-identifier/7.25.9) |
2323
| [`@babel/helper-validator-option@7.22.15`](https://github.com/babel/babel.git) | MIT | #8961 |
2424
| [`@babel/helpers@7.26.10`](https://github.com/babel/babel.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@babel/helpers/7.26.10) |
25-
| [`@babel/parser@7.27.0`](https://github.com/babel/babel.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@babel/parser/7.27.0) |
25+
| [`@babel/parser@7.27.0`](https://github.com/babel/babel.git) | MIT | #21023 |
2626
| [`@babel/plugin-syntax-jsx@7.22.5`](https://github.com/babel/babel.git) | MIT | #9014 |
2727
| [`@babel/plugin-syntax-typescript@7.22.5`](https://github.com/babel/babel.git) | MIT | #8994 |
2828
| [`@babel/template@7.26.9`](https://github.com/babel/babel.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@babel/template/7.26.9) |

.deps/prod.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
| Packages | License | Resolved CQs |
44
| --- | --- | --- |
55
| [`@babel/runtime@7.27.0`](https://github.com/babel/babel.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@babel/runtime/7.27.0) |
6-
| [`@devfile/api@2.3.0-1738342178`](https://github.com/GIT_USER_ID/GIT_REPO_ID.git) | Apache-2.0 | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@devfile/api/2.3.0-1738342178) |
7-
| [`@devfile/api@2.3.0-1738854228`](https://github.com/devfile/api) | Apache-2.0 | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@devfile/api/2.3.0-1738854228) |
8-
| [`@eclipse-che/che-devworkspace-generator@7.99.0-next-1ccb963`](git+https://github.com/devfile/devworkspace-generator.git) | EPL-2.0 | ecd.che |
6+
| [`@devfile/api@2.3.0-1746644330`](https://github.com/devfile/api) | Apache-2.0 | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@devfile/api/2.3.0-1746644330) |
7+
| [`@eclipse-che/che-devworkspace-generator@7.103.0-next-4e46cbe`](git+https://github.com/devfile/devworkspace-generator.git) | EPL-2.0 | ecd.che |
98
| [`@fastify/accept-negotiator@1.1.0`](git+https://github.com/fastify/accept-negotiator.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@fastify/accept-negotiator/1.1.0) |
109
| [`@fastify/ajv-compiler@3.6.0`](git+https://github.com/fastify/ajv-compiler.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@fastify/ajv-compiler/3.6.0) |
1110
| [`@fastify/busboy@2.0.0`](https://github.com/fastify/busboy.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@fastify/busboy/2.0.0) |
@@ -29,6 +28,11 @@
2928
| `@hapi/hoek@10.0.1` | BSD-3-Clause | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@hapi/hoek/10.0.1) |
3029
| `@hapi/topo@5.1.0` | BSD-3-Clause | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@hapi/topo/5.1.0) |
3130
| `@hapi/wreck@18.0.1` | BSD-3-Clause | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@hapi/wreck/18.0.1) |
31+
| [`@inversifyjs/common@1.5.0`](git+https://github.com/inversify/monorepo.git) | MIT | transitive dependency |
32+
| [`@inversifyjs/container@1.9.1`](git+https://github.com/inversify/monorepo.git) | MIT | transitive dependency |
33+
| [`@inversifyjs/core@5.2.0`](git+https://github.com/inversify/monorepo.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@inversifyjs/core/5.2.0) |
34+
| [`@inversifyjs/prototype-utils@0.1.0`](git+https://github.com/inversify/monorepo.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@inversifyjs/prototype-utils/0.1.0) |
35+
| [`@inversifyjs/reflect-metadata-utils@1.1.0`](git+https://github.com/inversify/monorepo.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@inversifyjs/reflect-metadata-utils/1.1.0) |
3236
| `@isaacs/cliui@8.0.2` | ISC | #8260 |
3337
| [`@isaacs/fs-minipass@4.0.1`](https://github.com/npm/fs-minipass.git) | ISC | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@isaacs/fs-minipass/4.0.1) |
3438
| [`@jsep-plugin/assignment@1.2.1`](EricSmekens/jsep) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/@jsep-plugin/assignment/1.2.1) |
@@ -234,6 +238,7 @@
234238
| [`inversify-inject-decorators@3.1.0`](git+https://github.com/inversify/inversify-inject-decorators.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/inversify-inject-decorators/3.1.0) |
235239
| [`inversify-react@1.1.1`](https://github.com/Kukkimonsuta/inversify-react.git) | Apache-2.0 | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/inversify-react/1.1.1) |
236240
| [`inversify@6.0.2`](https://github.com/inversify/InversifyJS.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/inversify/6.0.2) |
241+
| [`inversify@7.5.1`](https://github.com/inversify/InversifyJS.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/inversify/7.5.1) |
237242
| [`ip-address@9.0.5`](git://github.com/beaugunderson/ip-address.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/ip-address/9.0.5) |
238243
| `ipaddr.js@1.9.1` | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/ipaddr.js/1.9.1) |
239244
| `is-fullwidth-code-point@3.0.0` | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/is-fullwidth-code-point/3.0.0) |
@@ -418,7 +423,7 @@
418423
| [`sprintf-js@1.1.3`](https://github.com/alexei/sprintf.js.git) | BSD-3-Clause | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/sprintf-js/1.1.3) |
419424
| [`sshpk@1.18.0`](git+https://github.com/joyent/node-sshpk.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/sshpk/1.18.0) |
420425
| [`ssri@10.0.5`](https://github.com/npm/ssri.git) | ISC | #5768 |
421-
| `statuses@2.0.1` | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/statuses/2.0.1) |
426+
| `statuses@2.0.1` | MIT | #20906 |
422427
| [`stream-buffers@3.0.2`](https://github.com/samcday/node-stream-buffer.git) | Unlicense | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/stream-buffers/3.0.2) |
423428
| [`stream-shift@1.0.3`](https://github.com/mafintosh/stream-shift.git) | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/stream-shift/1.0.3) |
424429
| `string-width@4.2.3` | MIT | [clearlydefined](https://clearlydefined.io/definitions/npm/npmjs/-/string-width/4.2.3) |

packages/common/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"test:watch": "yarn test --watch"
1919
},
2020
"devDependencies": {
21-
"@devfile/api": "2.3.0-1738854228",
21+
"@devfile/api": "2.3.0-1746644330",
2222
"@kubernetes/client-node": "^0.22.1",
2323
"@types/jest": "^29.5.3",
2424
"@typescript-eslint/eslint-plugin": "^6.3.0",

packages/dashboard-backend/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
],
2727
"license": "EPL-2.0",
2828
"dependencies": {
29-
"@devfile/api": "2.3.0-1738854228",
30-
"@eclipse-che/che-devworkspace-generator": "7.99.0-next-1ccb963",
29+
"@devfile/api": "2.3.0-1746644330",
30+
"@eclipse-che/che-devworkspace-generator": "7.103.0-next-4e46cbe",
3131
"@fastify/cors": "^9.0.1",
3232
"@fastify/error": "^3.4.1",
3333
"@fastify/http-proxy": "^9.5.0",

packages/dashboard-frontend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
"sanitize-html": "^2.11.0"
6767
},
6868
"devDependencies": {
69-
"@devfile/api": "2.3.0-1738854228",
69+
"@devfile/api": "2.3.0-1746644330",
7070
"@eclipse-che/api": "^7.86.0",
7171
"@kubernetes/client-node": "^0.22.1",
7272
"@react-mock/state": "^0.1.8",

packages/dashboard-frontend/src/components/WorkspaceProgress/CreatingSteps/Apply/Devfile/__tests__/prepareDevfile.spec.ts

Lines changed: 60 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,15 @@
1313
import { dump } from 'js-yaml';
1414
import cloneDeep from 'lodash/cloneDeep';
1515

16-
import { prepareDevfile } from '@/components/WorkspaceProgress/CreatingSteps/Apply/Devfile/prepareDevfile';
16+
import {
17+
getStorageType,
18+
prepareDevfile,
19+
} from '@/components/WorkspaceProgress/CreatingSteps/Apply/Devfile/prepareDevfile';
1720
import devfileApi from '@/services/devfileApi';
1821
import { DEVWORKSPACE_STORAGE_TYPE_ATTR } from '@/services/devfileApi/devWorkspace/spec/template';
22+
import { FactoryParams } from '@/services/helpers/factoryFlow/buildFactoryParams';
1923
import { generateWorkspaceName } from '@/services/helpers/generateName';
24+
import { che } from '@/services/models';
2025
import {
2126
DEVWORKSPACE_DEVFILE_SOURCE,
2227
DEVWORKSPACE_METADATA_ANNOTATION,
@@ -148,7 +153,7 @@ describe('FactoryLoaderContainer/prepareDevfile', () => {
148153
});
149154

150155
describe('DevWorkspace name', () => {
151-
it('should not change the name', () => {
156+
test('should not change the name', () => {
152157
const factoryId = 'url=https://devfile-location';
153158
const devfile = {
154159
schemaVersion: '2.2.0',
@@ -162,7 +167,7 @@ describe('FactoryLoaderContainer/prepareDevfile', () => {
162167
expect(newDevfile.metadata.name).toEqual('wksp-test');
163168
});
164169

165-
it('should append a suffix to the name', () => {
170+
test('should append a suffix to the name', () => {
166171
const factoryId = 'url=https://devfile-location';
167172
const devfile = {
168173
schemaVersion: '2.2.0',
@@ -176,7 +181,7 @@ describe('FactoryLoaderContainer/prepareDevfile', () => {
176181
expect(newDevfile.metadata.name).toEqual('wksp-test1234');
177182
});
178183

179-
it('should generate a new name #1', () => {
184+
test('should generate a new name #1', () => {
180185
const factoryId = 'url=https://devfile-location';
181186
const devfile = {
182187
schemaVersion: '2.2.0',
@@ -190,7 +195,7 @@ describe('FactoryLoaderContainer/prepareDevfile', () => {
190195
expect(newDevfile.metadata.name).toEqual('wksp-1234');
191196
});
192197

193-
it('should generate a new name #2', () => {
198+
test('should generate a new name #2', () => {
194199
const factoryId = 'url=https://devfile-location';
195200
const devfile = {
196201
schemaVersion: '2.2.0',
@@ -275,7 +280,7 @@ describe('FactoryLoaderContainer/prepareDevfile', () => {
275280
});
276281

277282
describe('with registryUrl', () => {
278-
it('with storage-type attribute', () => {
283+
test('with storage-type attribute', () => {
279284
devfile.parent!.id = 'nodejs';
280285
devfile.parent!.registryUrl = 'https://registry.devfile.io/';
281286
const _devfile = cloneDeep(devfile);
@@ -301,7 +306,7 @@ describe('FactoryLoaderContainer/prepareDevfile', () => {
301306
expect(newDevfile.attributes?.[DEVWORKSPACE_STORAGE_TYPE_ATTR]).toBeUndefined();
302307
});
303308

304-
it('without storage-type attribute', () => {
309+
test('without storage-type attribute', () => {
305310
devfile.parent!.id = 'nodejs';
306311
devfile.parent!.registryUrl = 'https://registry.devfile.io/';
307312
const _devfile = cloneDeep(devfile);
@@ -322,7 +327,7 @@ describe('FactoryLoaderContainer/prepareDevfile', () => {
322327
});
323328
});
324329
describe('with uri', () => {
325-
it('with storage-type attribute', () => {
330+
test('with storage-type attribute', () => {
326331
devfile.parent!.uri = 'https://raw.githubusercontent.com/test/devfile.yaml';
327332
const _devfile = cloneDeep(devfile);
328333

@@ -347,7 +352,7 @@ describe('FactoryLoaderContainer/prepareDevfile', () => {
347352
expect(newDevfile.attributes?.[DEVWORKSPACE_STORAGE_TYPE_ATTR]).toBeUndefined();
348353
});
349354

350-
it('without storage-type attribute', () => {
355+
test('without storage-type attribute', () => {
351356
devfile.parent!.uri = 'https://raw.githubusercontent.com/test/devfile.yaml';
352357
const _devfile = cloneDeep(devfile);
353358

@@ -367,5 +372,51 @@ describe('FactoryLoaderContainer/prepareDevfile', () => {
367372
});
368373
});
369374
});
375+
describe('get storageType', () => {
376+
beforeEach(() => {
377+
devfile.attributes = {};
378+
});
379+
test('apply storageType from factoryParams', () => {
380+
devfile.attributes = {
381+
[DEVWORKSPACE_STORAGE_TYPE_ATTR]: 'per-workspace',
382+
};
383+
const factoryParams = { storageType: 'ephemeral' } as FactoryParams;
384+
const preferredStorageType = 'per-user' as che.WorkspaceStorageType;
385+
386+
const storageType = getStorageType(factoryParams, devfile, preferredStorageType);
387+
388+
expect(storageType).toEqual('ephemeral');
389+
});
390+
391+
test('apply storageType from Devfile', () => {
392+
devfile.attributes = {
393+
[DEVWORKSPACE_STORAGE_TYPE_ATTR]: 'per-workspace',
394+
};
395+
const factoryParams = {} as FactoryParams;
396+
const preferredStorageType = 'per-user' as che.WorkspaceStorageType;
397+
398+
const storageType = getStorageType(factoryParams, devfile, preferredStorageType);
399+
400+
expect(storageType).toEqual('per-workspace');
401+
});
402+
403+
test('apply storageType from preferredStorageType', () => {
404+
const factoryParams = {} as FactoryParams;
405+
const preferredStorageType = 'per-user' as che.WorkspaceStorageType;
406+
407+
const storageType = getStorageType(factoryParams, devfile, preferredStorageType);
408+
409+
expect(storageType).toEqual('per-user');
410+
});
411+
412+
test('should return undefined', () => {
413+
const factoryParams = {} as FactoryParams;
414+
const preferredStorageType = '' as che.WorkspaceStorageType;
415+
416+
const storageType = getStorageType(factoryParams, devfile, preferredStorageType);
417+
418+
expect(storageType).toBeUndefined();
419+
});
420+
});
370421
});
371422
});

packages/dashboard-frontend/src/components/WorkspaceProgress/CreatingSteps/Apply/Devfile/index.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { TIMEOUT_TO_CREATE_SEC } from '@/components/WorkspaceProgress/const';
2222
import { configureProjectRemotes } from '@/components/WorkspaceProgress/CreatingSteps/Apply/Devfile/getGitRemotes';
2323
import { getProjectFromLocation } from '@/components/WorkspaceProgress/CreatingSteps/Apply/Devfile/getProjectFromLocation';
2424
import { prepareDevfile } from '@/components/WorkspaceProgress/CreatingSteps/Apply/Devfile/prepareDevfile';
25+
import { getStorageType } from '@/components/WorkspaceProgress/CreatingSteps/Apply/Devfile/prepareDevfile';
2526
import {
2627
ProgressStep,
2728
ProgressStepProps,
@@ -176,7 +177,7 @@ class CreatingStepApplyDevfile extends ProgressStep<Props, State> {
176177
}
177178

178179
private updateCurrentDevfile(devfile: devfileApi.Devfile): void {
179-
const { factoryResolver, allWorkspaces, defaultDevfile } = this.props;
180+
const { factoryResolver, allWorkspaces, defaultDevfile, preferredStorageType } = this.props;
180181
const { factoryParams } = this.state;
181182
const { factoryId, policiesCreate, sourceUrl, remotes } = factoryParams;
182183

@@ -216,7 +217,8 @@ class CreatingStepApplyDevfile extends ProgressStep<Props, State> {
216217
// test the devfile name to decide if we need to append a suffix to is
217218
const nameConflict = allWorkspaces.some(w => devfile.metadata.name === w.name);
218219

219-
const storageType = factoryParams.storageType || this.props.preferredStorageType || undefined;
220+
const storageType = getStorageType(factoryParams, devfile, preferredStorageType);
221+
220222
const appendSuffix = policiesCreate === 'perclick' || nameConflict;
221223
const parentDevfile = factoryResolver?.parentDevfile;
222224
const updatedDevfile = prepareDevfile(

packages/dashboard-frontend/src/components/WorkspaceProgress/CreatingSteps/Apply/Devfile/prepareDevfile.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import cloneDeep from 'lodash/cloneDeep';
1616
import { DevfileAdapter } from '@/services/devfile/adapter';
1717
import devfileApi from '@/services/devfileApi';
1818
import { DEVWORKSPACE_STORAGE_TYPE_ATTR } from '@/services/devfileApi/devWorkspace/spec/template';
19+
import { FactoryParams } from '@/services/helpers/factoryFlow/buildFactoryParams';
1920
import { generateWorkspaceName } from '@/services/helpers/generateName';
2021
import sanitizeName from '@/services/helpers/sanitizeName';
2122
import { che } from '@/services/models';
@@ -75,3 +76,23 @@ export function prepareDevfile(
7576

7677
return devfile;
7778
}
79+
80+
export function getStorageType(
81+
factoryParams: FactoryParams,
82+
devfile: devfileApi.Devfile | undefined,
83+
preferredStorageType: che.WorkspaceStorageType,
84+
): che.WorkspaceStorageType | undefined {
85+
let attributes: {
86+
DEVWORKSPACE_STORAGE_TYPE_ATTR?: che.WorkspaceStorageType;
87+
} = {};
88+
if (devfile) {
89+
attributes = DevfileAdapter.getAttributes(cloneDeep(devfile));
90+
}
91+
92+
return (
93+
factoryParams.storageType ||
94+
attributes[DEVWORKSPACE_STORAGE_TYPE_ATTR] ||
95+
preferredStorageType ||
96+
undefined
97+
);
98+
}

0 commit comments

Comments
 (0)