forked from atomist/samples
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfirstGoal.ts
70 lines (60 loc) · 2.53 KB
/
firstGoal.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
/*
* 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.
*/
/**
* Atomist SDM Sample
* @description Demonstrates how to create a first custom goal
* @tag goal
* @instructions <p>Now that the SDM is up and running, make a commit to a repository
* that has an Atomist webhook configured. You can observe the goal
* from chat or https://app.atomist.com.</p>
*/
import {
AnyPush,
goal,
} from "@atomist/sdm";
import { configure } from "@atomist/sdm-core";
import * as _ from "lodash";
export const configuration = configure(async () => {
// Create a first goal using the goal helper function
const messageGoal = goal(
{
displayName: "Message Contributor",
// Enable the following option; this will require to be started explicitly
// preApproval: true,
},
// Function that gets executed when the goal is ready to run
async gi => {
const { goalEvent, context, progressLog } = gi;
// Carefully get the screenName of the user authoring this push
const screenName = _.get(goalEvent, "push.after.author.person.chatId.screenName");
// When Atomist correlated the Git author to a chat identity, this will send a thank you note to the author
if (!!screenName) {
// Writing a log message into the progress log which is linked from the goal in chat or web
progressLog.write(`Sending thank you note to user ${screenName}`);
await context.messageClient.addressUsers(
":clap: Many thanks for your contribution! :tada:",
screenName,
{ id: "thank_you" }); // Using the same message id will make sure the user only sees one thank you note
}
});
return {
// Define a PushRule with name 'thank you' that schedules the messageGoal for any push
thank_you: {
test: AnyPush,
goals: messageGoal,
},
};
});