-
Notifications
You must be signed in to change notification settings - Fork 21
/
triggerFactory.js
109 lines (93 loc) · 3.68 KB
/
triggerFactory.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
'use strict';
const BaseFactory = require('./baseFactory');
const Trigger = require('./trigger');
let instance;
class TriggerFactory extends BaseFactory {
/**
* Construct a TriggerFactory object
* @method constructor
* @param {Object} config
* @param {Datastore} config.datastore Object that will perform operations on the datastore
*/
constructor(config) {
super('trigger', config);
}
/**
* Instantiate a Trigger class
* @method createClass
* @param {Object} config Trigger data
* @param {Datastore} config.datastore Object that will perform operations on the datastore
* @param {String} config.src Job that initiates the trigger
* @param {String} config.dest Job that is triggered
* @return {Trigger}
*/
createClass(config) {
return new Trigger(config);
}
/**
* Get downstream triggers given a source
* @param {String} src Source trigger (e.g. ~sd@123:main)
* @return {Array} Array of dest
*/
getDestFromSrc(src) {
return super.list({ params: { src } }).then(triggerArray => {
const resultArray = triggerArray.map(trigger => trigger.dest);
return resultArray;
});
}
/**
* Get all triggers related to a pipeline
* @param {Object} config
* @param {String} config.pipelineId pipelineId
* @param {String} [config.type] Type of job to get ('pr' or 'pipeline'; default 'pipeline')
* @return {Object} Returns object with dest triggers split by src jobs
*/
getTriggers({ pipelineId, type }) {
// eslint-disable-next-line global-require
const PipelineFactory = require('./pipelineFactory');
const pipelineFactory = PipelineFactory.getInstance();
const result = [];
return pipelineFactory.get(pipelineId).then(pipeline => {
if (pipeline) {
// Get pipeline job names
return pipeline.getJobs({ type: type || 'pipeline' }).then(jobs => {
let srcArray = jobs.map(j => `~sd@${pipelineId}:${j.name}`);
srcArray = srcArray.concat(jobs.map(j => `sd@${pipelineId}:${j.name}`));
// Get dest triggers for each src job
return super
.list({
params: {
src: srcArray
}
})
.then(triggersArr => {
// Push jobName and dest triggers to result
jobs.forEach(j => {
let matchArr = triggersArr.filter(
t =>
t.src === `~sd@${pipelineId}:${j.name}` ||
t.src === `sd@${pipelineId}:${j.name}`
);
matchArr = matchArr.map(m => m.dest);
result.push({ jobName: j.name, triggers: matchArr });
});
return result;
});
});
}
return result;
});
}
/**
* Get an instance of the TriggerFactory
* @method getInstance
* @param {Object} config
* @param {Datastore} config.datastore
* @return {TriggerFactory}
*/
static getInstance(config) {
instance = BaseFactory.getInstance(TriggerFactory, instance, config);
return instance;
}
}
module.exports = TriggerFactory;