File tree Expand file tree Collapse file tree 5 files changed +49
-2
lines changed Expand file tree Collapse file tree 5 files changed +49
-2
lines changed Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ const Command = require('../../Command');
3
3
const { crudFilenameOption } = require ( '../../helpers/general' ) ;
4
4
const { context, pipeline } = require ( '../../../../logic' ) . api ;
5
5
const yargs = require ( 'yargs' ) ;
6
+ const { validatePipelineFile } = require ( '../../helpers/validation' ) ;
6
7
7
8
const get = new Command ( {
8
9
root : true ,
@@ -22,6 +23,7 @@ const get = new Command({
22
23
handler : async ( argv ) => {
23
24
if ( ! argv . filename ) {
24
25
yargs . showHelp ( ) ;
26
+ return ;
25
27
}
26
28
27
29
const data = argv . filename ;
@@ -38,13 +40,18 @@ const get = new Command({
38
40
console . log ( `Context: ${ name } created` ) ;
39
41
break ;
40
42
case 'pipeline' :
43
+ try {
44
+ await validatePipelineFile ( data ) ;
45
+ } catch ( e ) {
46
+ console . warn ( e . message ) ;
47
+ return ;
48
+ }
41
49
await pipeline . createPipeline ( data ) ;
42
50
console . log ( `Pipeline '${ name } ' created` ) ;
43
51
break ;
44
52
default :
45
53
throw new CFError ( `Entity: ${ entity } not supported` ) ;
46
54
}
47
-
48
55
} ,
49
56
} ) ;
50
57
Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ const Command = require('../../Command');
3
3
const { crudFilenameOption } = require ( '../../helpers/general' ) ;
4
4
const { context, pipeline } = require ( '../../../../logic' ) . api ;
5
5
const yargs = require ( 'yargs' ) ;
6
+ const { validatePipelineFile } = require ( '../../helpers/validation' ) ;
6
7
7
8
const annotate = new Command ( {
8
9
root : true ,
@@ -38,6 +39,12 @@ const annotate = new Command({
38
39
console . log ( `Context: ${ name } created` ) ;
39
40
break ;
40
41
case 'pipeline' :
42
+ try {
43
+ await validatePipelineFile ( data ) ;
44
+ } catch ( e ) {
45
+ console . warn ( e . message ) ;
46
+ return ;
47
+ }
41
48
await pipeline . replaceByName ( name , data ) ;
42
49
console . log ( `Pipeline '${ name } ' updated` ) ;
43
50
break ;
Original file line number Diff line number Diff line change
1
+ const _ = require ( 'lodash' ) ;
2
+ const yaml = require ( 'js-yaml' ) ;
3
+ const { pipeline } = require ( '../../../logic' ) . api ;
4
+
5
+
6
+ async function validatePipelineFile ( data ) {
7
+ const validatedYaml = yaml . safeDump ( Object . assign ( { version : data . version } , data . spec ) ) ;
8
+ const validationResult = await pipeline . validateYaml ( validatedYaml ) ;
9
+ if ( ! validationResult . valid ) {
10
+ let finalMessage ;
11
+ if ( _ . isArray ( validationResult . details ) ) {
12
+ const errors = validationResult . details . map ( ( { message } ) => ` - ${ message } ` ) . join ( '\n' ) ;
13
+ finalMessage = `Provided spec is not valid:\n${ errors } ` ;
14
+ } else {
15
+ finalMessage = 'Provided spec is not valid!' ;
16
+ }
17
+ throw new Error ( finalMessage ) ;
18
+ }
19
+ }
20
+
21
+ module . exports = {
22
+ validatePipelineFile,
23
+ } ;
Original file line number Diff line number Diff line change @@ -66,6 +66,15 @@ const createPipeline = async (data) => {
66
66
return sendHttpRequest ( options ) ;
67
67
} ;
68
68
69
+ const validateYaml = async ( yaml ) => {
70
+ const optionsValidate = {
71
+ url : '/api/pipelines/yaml/validator' ,
72
+ method : 'POST' ,
73
+ body : { yaml } ,
74
+ } ;
75
+ return sendHttpRequest ( optionsValidate ) ;
76
+ } ;
77
+
69
78
const replaceByName = async ( name , data ) => {
70
79
const body = data ;
71
80
@@ -164,6 +173,7 @@ module.exports = {
164
173
getAll,
165
174
getPipelineByName,
166
175
createPipeline,
176
+ validateYaml,
167
177
replaceByName,
168
178
patchPipelineByName,
169
179
deletePipelineByName,
Original file line number Diff line number Diff line change 1
1
{
2
2
"name" : " codefresh" ,
3
- "version" : " 0.9.0 " ,
3
+ "version" : " 0.9.1 " ,
4
4
"description" : " Codefresh command line utility" ,
5
5
"main" : " index.js" ,
6
6
"preferGlobal" : true ,
You can’t perform that action at this time.
0 commit comments