-
Notifications
You must be signed in to change notification settings - Fork 3
/
SetDeployEnablement.ts
102 lines (91 loc) · 3.32 KB
/
SetDeployEnablement.ts
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
/*
* Copyright © 2018 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.
*/
import {
addressEvent,
failure,
HandlerError,
HandlerResult,
MappedParameter,
MappedParameters,
Parameter,
Parameters,
Success,
Value,
} from "@atomist/automation-client";
import {
CommandHandlerRegistration,
CommandListenerInvocation,
slackSuccessMessage,
} from "@atomist/sdm";
import { bold } from "@atomist/slack-messages";
import {
DeployEnablementRootType,
SdmDeployEnablement,
} from "../../ingesters/sdmDeployEnablement";
@Parameters()
export class SetDeployEnablementParameters {
@Parameter({ required: false, displayable: false })
public msgId?: string;
@MappedParameter(MappedParameters.GitHubOwner)
public owner: string;
@MappedParameter(MappedParameters.GitHubRepository)
public repo: string;
@MappedParameter(MappedParameters.GitHubRepositoryProvider)
public providerId: string;
@Value("name")
public name: string;
@Value("version")
public version: string;
}
/**
* Command to set deploy enablement on the currently mapped repo
* @param {CommandListenerInvocation} cli
* @param {boolean} enable
* @returns {Promise<HandlerResult | HandlerError>}
*/
export function setDeployEnablement(cli: CommandListenerInvocation<SetDeployEnablementParameters>,
enable: boolean): Promise<HandlerResult | HandlerError> {
const deployEnablement: SdmDeployEnablement = {
state: enable ? "requested" : "disabled",
owner: cli.parameters.owner,
repo: cli.parameters.repo,
providerId: cli.parameters.providerId,
};
return cli.context.messageClient.send(deployEnablement, addressEvent(DeployEnablementRootType))
.then(() => cli.context.messageClient.respond(
slackSuccessMessage(
"Deploy Enablement",
`Successfully ${enable ? "enabled" : "disabled"} deployment of ${
bold(`${cli.parameters.owner}/${cli.parameters.repo}`)}`,
{
footer: `${cli.parameters.name}:${cli.parameters.version}`,
}), { id: cli.parameters.msgId }))
.then(() => Success, failure);
}
export const EnableDeploy: CommandHandlerRegistration<SetDeployEnablementParameters> = {
name: "EnableDeploy",
intent: "enable deploy",
description: "Enable deployment via Atomist SDM",
paramsMaker: SetDeployEnablementParameters,
listener: async cli => setDeployEnablement(cli, true),
};
export const DisableDeploy: CommandHandlerRegistration<SetDeployEnablementParameters> = {
name: "DisableDeploy",
intent: "disable deploy",
description: "Disable deployment via Atomist SDM",
paramsMaker: SetDeployEnablementParameters,
listener: async cli => setDeployEnablement(cli, false),
};