Skip to content

Commit a5b15d4

Browse files
Feature/olegz/saas 4818 create annotation from manifest (#382)
* SAAS-4818 #time 1h 30m Added creating annotation from manifest format, made some refactoring in process * SAAS-4818 #time 0h 1m Bump * SAAS-4818 #time 0h 1m Bump * SAAS-4818 #time 0h 1m Bump * rebuild Co-authored-by: Denis Melnik <58072595+denis-codefresh@users.noreply.github.com>
1 parent 9f7ec62 commit a5b15d4

File tree

5 files changed

+66
-39
lines changed

5 files changed

+66
-39
lines changed

lib/interface/cli/commands/root/create.cmd.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
const _ = require('lodash');
2-
const CFError = require('cf-errors');
32
const Command = require('../../Command');
43
const { crudFilenameOption } = require('../../helpers/general');
5-
const EntitiesManifests = require('../../helpers/entitiesManifests');
4+
const { createEntity, entityList } = require('../../helpers/entitiesManifests');
65
const yargs = require('yargs');
76

87
function _getSupportedResourcesStr() {
9-
return EntitiesManifests.list
8+
return entityList
109
.map(entity => `\n\t'${entity}'`)
1110
.join('');
1211
}
@@ -33,15 +32,10 @@ const get = new Command({
3332

3433
const data = argv.filename;
3534
const entity = data.kind;
36-
3735
const name = data.metadata.name;
38-
if (!name) {
39-
throw new CFError('Name is missing');
40-
}
4136

42-
const manifests = new EntitiesManifests({ name, data });
43-
await manifests.createEntity(entity);
44-
console.log(`${_.capitalize(entity)}: ${name} created`);
37+
await createEntity({ name, data, entity });
38+
console.log(_.compact([_.capitalize(entity), name, 'created']).join(' '));
4539
},
4640
});
4741

lib/interface/cli/helpers/entitiesManifests.js

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,59 @@ const _ = require('lodash');
22
const CFError = require('cf-errors');
33
const { validatePipelineSpec, checkOrProjectExists } = require('./validation');
44
const { sdk } = require('../../../logic');
5+
const { createAnnotations } = require('../commands/annotation/annotation.logic');
56

6-
class EntitiesManifests {
7-
constructor({ name, data } = {}) {
8-
this.name = name;
9-
this.data = data;
10-
}
11-
12-
createEntity(entity) {
13-
if (!EntitiesManifests._entities[entity]) {
14-
throw new CFError(`Entity: ${entity} not supported`);
15-
}
16-
return EntitiesManifests._entities[entity]({
17-
name: this.name,
18-
data: this.data,
19-
});
7+
function _basicValidation({ name }) {
8+
if (!name) {
9+
throw new CFError('Name is missing');
2010
}
2111
}
2212

23-
EntitiesManifests._entities = {
24-
context: ({ data }) => sdk.contexts.create(data),
25-
'step-type': ({ data }) => sdk.steps.create(data),
26-
project: ({ name, data }) => checkOrProjectExists(name)
27-
.then(() => sdk.projects.create({ projectName: name, ..._.pick(data.metadata, ['tags', 'variables']) })),
28-
pipeline: ({ data }) => validatePipelineSpec(data)
29-
.then((result = {}) => (result.valid ? sdk.pipelines.create(data) : console.warn(result.message))),
13+
const _entities = {
14+
15+
context: {
16+
validate: _basicValidation,
17+
create: ({ data }) => sdk.contexts.create(data),
18+
},
19+
'step-type': {
20+
validate: _basicValidation,
21+
create: ({ data }) => sdk.steps.create(data),
22+
},
23+
project: {
24+
validate: _basicValidation,
25+
create: ({ name, data }) => checkOrProjectExists(name)
26+
.then(() => sdk.projects.create({ projectName: name, ..._.pick(data.metadata, ['tags', 'variables']) })),
27+
},
28+
pipeline: {
29+
validate: _basicValidation,
30+
create: ({ data }) => validatePipelineSpec(data)
31+
.then((result = {}) => (result.valid ? sdk.pipelines.create(data) : console.warn(result.message))),
32+
},
33+
annotation: {
34+
create: ({ data }) => {
35+
const labels = _.get(data.metadata, 'labels', [])
36+
.map(({ key, value }) => `${key}=${value}`);
37+
return createAnnotations({ labels, ..._.pick(data.metadata, ['entityId', 'entityType']) });
38+
},
39+
},
3040
};
3141

32-
EntitiesManifests.list = Object.keys(EntitiesManifests._entities);
42+
const entityList = Object.keys(_entities);
43+
44+
function createEntity(options) {
45+
const { entity } = options;
46+
if (!_entities[entity]) {
47+
throw new CFError(`Entity: ${entity} not supported`);
48+
}
49+
50+
if (_entities[entity].validate instanceof Function) {
51+
_entities[entity].validate(options);
52+
}
3353

34-
module.exports = EntitiesManifests;
54+
return _entities[entity].create(options);
55+
}
56+
57+
module.exports = {
58+
createEntity,
59+
entityList,
60+
};

lib/interface/cli/helpers/helpers.unit.spec.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const _ = require('lodash');
22
const helper = require('./image');
3-
const EntitiesManifests = require('./entitiesManifests');
3+
const { createEntity, entityList } = require('./entitiesManifests');
44

55
const { extractImages } = helper;
66

@@ -10,6 +10,12 @@ jest.mock('../../../logic/entities/Image', () => class {
1010
}
1111
});
1212

13+
jest.mock('../commands/annotation/annotation.logic', () => class {
14+
static createAnnotations() {
15+
return Promise.resolve();
16+
}
17+
});
18+
1319
describe('helpers unit tests', () => {
1420
describe('creating entites', () => {
1521
const request = require('requestretry');
@@ -18,11 +24,11 @@ describe('helpers unit tests', () => {
1824
request.mockClear();
1925
await configureSdk(); // eslint-disable-line
2026
});
21-
const manifests = new EntitiesManifests({});
2227

23-
it('should have some length', () => expect(EntitiesManifests.list.length).not.toBe(0));
24-
for (const entity of EntitiesManifests.list) {
25-
it(`${entity} should be promise`, () => expect(manifests.createEntity(entity).catch(() => null) instanceof Promise).toBe(true));
28+
it('should have some length', () => expect(entityList.length).not.toBe(0));
29+
for (const entity of entityList) {
30+
const args = { entity, name: 'default', data: {} };
31+
it(`${entity} should be promise`, () => expect(createEntity(args).catch(() => null) instanceof Promise).toBe(true));
2632
}
2733
});
2834

lib/logic/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ const sdk = require('./sdk');
33
module.exports = {
44
sdk,
55
};
6+

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codefresh",
3-
"version": "0.39.4",
3+
"version": "0.39.5",
44
"description": "Codefresh command line utility",
55
"main": "index.js",
66
"preferGlobal": true,

0 commit comments

Comments
 (0)