@atomist/sdm-core
Version:
Atomist Software Delivery Machine - Implementation
159 lines • 10.3 kB
JavaScript
"use strict";
/*
* Copyright © 2019 Atomist, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
const sdm_1 = require("@atomist/sdm");
const _ = require("lodash");
const ReactToSemanticDiffsOnPushImpact_1 = require("../../handlers/events/delivery/code/ReactToSemanticDiffsOnPushImpact");
const FulfillGoalOnRequested_1 = require("../../handlers/events/delivery/goals/FulfillGoalOnRequested");
const RequestDownstreamGoalsOnGoalSuccess_1 = require("../../handlers/events/delivery/goals/RequestDownstreamGoalsOnGoalSuccess");
const RespondOnGoalCompletion_1 = require("../../handlers/events/delivery/goals/RespondOnGoalCompletion");
const SetGoalsOnGoal_1 = require("../../handlers/events/delivery/goals/SetGoalsOnGoal");
const SetGoalsOnPush_1 = require("../../handlers/events/delivery/goals/SetGoalsOnPush");
const SkipDownstreamGoalsOnGoalFailure_1 = require("../../handlers/events/delivery/goals/SkipDownstreamGoalsOnGoalFailure");
const VoteOnGoalApprovalRequest_1 = require("../../handlers/events/delivery/goals/VoteOnGoalApprovalRequest");
const ClosedIssueHandler_1 = require("../../handlers/events/issue/ClosedIssueHandler");
const NewIssueHandler_1 = require("../../handlers/events/issue/NewIssueHandler");
const UpdatedIssueHandler_1 = require("../../handlers/events/issue/UpdatedIssueHandler");
const OnChannelLink_1 = require("../../handlers/events/repo/OnChannelLink");
const OnFirstPushToRepo_1 = require("../../handlers/events/repo/OnFirstPushToRepo");
const OnPullRequest_1 = require("../../handlers/events/repo/OnPullRequest");
const OnRepoCreation_1 = require("../../handlers/events/repo/OnRepoCreation");
const OnRepoOnboarded_1 = require("../../handlers/events/repo/OnRepoOnboarded");
const OnTag_1 = require("../../handlers/events/repo/OnTag");
const OnUserJoiningChannel_1 = require("../../handlers/events/repo/OnUserJoiningChannel");
/**
* Implementation of SoftwareDeliveryMachine based on Atomist event handlers.
* Not intended for direct user instantiation. See machineFactory.ts
*/
class HandlerBasedSoftwareDeliveryMachine extends sdm_1.AbstractSoftwareDeliveryMachine {
get onRepoCreation() {
return this.repoCreationListeners.length > 0 ?
() => new OnRepoCreation_1.OnRepoCreation(this.repoCreationListeners, this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory) :
undefined;
}
get onFirstPush() {
return this.firstPushListeners.length > 0 ?
() => new OnFirstPushToRepo_1.OnFirstPushToRepo(this.firstPushListeners, this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory) :
undefined;
}
get semanticDiffReactor() {
return this.fingerprintDifferenceListeners.length > 0 ?
() => new ReactToSemanticDiffsOnPushImpact_1.ReactToSemanticDiffsOnPushImpact(this.fingerprintDifferenceListeners, this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory) :
undefined;
}
get goalSetting() {
if (this.pushMapping) {
return {
eventHandlers: [() => new SetGoalsOnPush_1.SetGoalsOnPush(this.configuration.sdm.projectLoader, this.configuration.sdm.repoRefResolver, this.pushMapping, this.goalsSetListeners, this.goalFulfillmentMapper, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory, this.configuration.sdm.enrichGoal, this.configuration.sdm.tagGoalSet),
() => new SetGoalsOnGoal_1.SetGoalsOnGoal(this.configuration.sdm.projectLoader, this.configuration.sdm.repoRefResolver, this.pushMapping, this.goalsSetListeners, this.goalFulfillmentMapper, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory, this.configuration.sdm.enrichGoal, this.configuration.sdm.tagGoalSet)],
commandHandlers: [],
ingesters: [],
};
}
else {
return {
eventHandlers: [],
commandHandlers: [],
ingesters: [],
};
}
}
get goalConsequences() {
if (this.pushMapping) {
return {
eventHandlers: [
() => new SkipDownstreamGoalsOnGoalFailure_1.SkipDownstreamGoalsOnGoalFailure(),
() => new RequestDownstreamGoalsOnGoalSuccess_1.RequestDownstreamGoalsOnGoalSuccess(this.configuration.name, this.goalFulfillmentMapper, this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory),
() => new RespondOnGoalCompletion_1.RespondOnGoalCompletion(this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.goalCompletionListeners, this.configuration.sdm.preferenceStoreFactory),
() => new VoteOnGoalApprovalRequest_1.VoteOnGoalApprovalRequest(this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.goalApprovalRequestVoters, this.goalApprovalRequestVoteDecisionManager, this.goalFulfillmentMapper, this.configuration.sdm.preferenceStoreFactory)
],
commandHandlers: [],
ingesters: [],
};
}
else {
return {
eventHandlers: [],
commandHandlers: [],
ingesters: [],
};
}
}
get allFunctionalUnits() {
return []
.concat([
this.goalSetting,
this.goalConsequences,
]);
}
get eventHandlers() {
return this.registrationManager.eventHandlers
.concat(this.goalFulfillmentMapper.hasImplementation() ? () => new FulfillGoalOnRequested_1.FulfillGoalOnRequested(this.goalFulfillmentMapper, this.goalExecutionListeners) : undefined)
.concat(_.flatten(this.allFunctionalUnits.map(fu => fu.eventHandlers)))
.concat([
this.userJoiningChannelListeners.length > 0 ?
() => new OnUserJoiningChannel_1.OnUserJoiningChannel(this.userJoiningChannelListeners, this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory) :
undefined,
this.tagListeners.length > 0 ?
() => new OnTag_1.OnTag(this.tagListeners, this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory) :
undefined,
this.newIssueListeners.length > 0 ?
() => new NewIssueHandler_1.NewIssueHandler(this.newIssueListeners, this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory) :
undefined,
this.updatedIssueListeners.length > 0 ?
() => new UpdatedIssueHandler_1.UpdatedIssueHandler(this.updatedIssueListeners, this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory) :
undefined,
this.closedIssueListeners.length > 0 ?
() => new ClosedIssueHandler_1.ClosedIssueHandler(this.closedIssueListeners, this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory) :
undefined,
this.channelLinkListeners.length > 0 ?
() => new OnChannelLink_1.OnChannelLink(this.configuration.sdm.projectLoader, this.configuration.sdm.repoRefResolver, this.channelLinkListeners, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory) :
undefined,
this.pullRequestListeners.length > 0 ?
() => new OnPullRequest_1.OnPullRequest(this.configuration.sdm.projectLoader, this.configuration.sdm.repoRefResolver, this.pullRequestListeners, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory) : undefined,
this.repoOnboardingListeners.length > 0 ?
() => new OnRepoOnboarded_1.OnRepoOnboarded(this.repoOnboardingListeners, this.configuration.sdm.repoRefResolver, this.configuration.sdm.credentialsResolver, this.configuration.sdm.preferenceStoreFactory) :
undefined,
this.onRepoCreation,
this.onFirstPush,
this.semanticDiffReactor,
])
.filter(m => !!m);
}
get commandHandlers() {
return this.registrationManager.commandHandlers
.concat(_.flatten(this.allFunctionalUnits.map(fu => fu.commandHandlers)))
.filter(m => !!m);
}
get ingesters() {
return this.registrationManager.ingesters
.concat(_.flatten(this.allFunctionalUnits.map(fu => fu.ingesters)))
.filter(m => !!m);
}
/**
* Construct a new software delivery machine, with zero or
* more goal setters.
* @param {string} name
* @param configuration automation client configuration we're running in
* @param {GoalSetter} goalSetters tell me what to do on a push. Hint: start with "whenPushSatisfies(...)"
*/
constructor(name, configuration, goalSetters) {
super(name, configuration, goalSetters);
}
}
exports.HandlerBasedSoftwareDeliveryMachine = HandlerBasedSoftwareDeliveryMachine;
//# sourceMappingURL=HandlerBasedSoftwareDeliveryMachine.js.map