Skip to content
This repository was archived by the owner on Aug 3, 2024. It is now read-only.

Commit 4068a38

Browse files
committed
Merge branch 'dev' into main
2 parents 35ffaa2 + b958ade commit 4068a38

File tree

4 files changed

+138
-83
lines changed

4 files changed

+138
-83
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sudo-bot/gh-deployer",
3-
"version": "2.3.2",
3+
"version": "2.4.0",
44
"description": "A GitHub deployer robot",
55
"main": "dist/index.js",
66
"private": false,

src/deploy.ts

Lines changed: 96 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -7,86 +7,117 @@ import dns from '@src/dns';
77
import comments from '@src/comments';
88
import data, { emailData } from '@src/data';
99
import Message, { MessagePlatform } from './modeles/Message';
10+
import messages from '@root/test/messages';
11+
12+
const afterComment = (
13+
configBlock: string,
14+
emailInfos: emailData,
15+
deployCommentId: number,
16+
prInfos: {
17+
repoSlug: string;
18+
cloneUrl: string;
19+
ref: string;
20+
sha: string;
21+
}
22+
) => {
23+
if (emailInfos.commentId !== null && emailInfos.prId !== null) {
24+
const msg = new Message(
25+
emailInfos.requestedByUser,
26+
deployCommentId,
27+
emailInfos.prId,
28+
MessagePlatform.github,
29+
true,
30+
emailInfos.commentId
31+
);
32+
msg.save();
33+
}
34+
docker
35+
.createDocker(
36+
emailInfos.repoName,
37+
emailInfos.prId || 0,
38+
prInfos.cloneUrl,
39+
prInfos.ref,
40+
prInfos.sha,
41+
configBlock,
42+
data.randomString(80)
43+
)
44+
.then((docker) => {
45+
dns.publishDnsRecord(
46+
emailInfos.repoName,
47+
docker.containerName,
48+
emailInfos.prId || 0,
49+
prInfos.ref,
50+
prInfos.sha
51+
)
52+
.then((domain) => {
53+
logger.info('Published-domain:', domain);
54+
github.addReaction(emailInfos.commentId || 0, emailInfos.repoName, reactions.ROCKET);
55+
github
56+
.updateComment(
57+
emailInfos.prId || 0,
58+
prInfos.repoSlug,
59+
deployCommentId,
60+
comments.getDeployedComment(
61+
emailInfos.commentId || 0,
62+
prInfos.ref,
63+
prInfos.sha,
64+
docker.containerName,
65+
domain
66+
)
67+
)
68+
.then(() => {
69+
logger.info('Updated comment:#' + deployCommentId);
70+
})
71+
.catch((error: Error) => logger.error(error));
72+
})
73+
.catch((error: Error) => logger.error(error, emailInfos));
74+
})
75+
.catch((error: Error) => logger.error(error, prInfos, emailInfos));
76+
};
1077

1178
export default {
1279
deploy: (emailInfos: emailData, configBlock: string) => {
1380
if (emailInfos.prId === null || emailInfos.commentId === null) {
1481
logger.error('Missing data !', emailInfos);
1582
return;
1683
}
84+
const prId = emailInfos.prId || 0;
1785
github
1886
.getPrInfos(emailInfos.prId || 0, emailInfos.repoName)
1987
.then((prInfos) => {
20-
github
21-
.createComment(
22-
emailInfos.prId || 0,
23-
prInfos.data.base.repo.full_name,
24-
comments.getPendingComment(
25-
emailInfos.commentId || 0,
26-
prInfos.data.head.ref,
27-
prInfos.data.head.sha
28-
)
29-
)
30-
.then((deployComment) => {
31-
if (emailInfos.commentId !== null && emailInfos.prId !== null) {
32-
const msg = new Message(
33-
emailInfos.requestedByUser,
34-
deployComment.data.id,
35-
emailInfos.prId,
36-
MessagePlatform.github,
37-
true,
38-
emailInfos.commentId
39-
);
40-
msg.save();
41-
}
42-
docker
43-
.createDocker(
44-
emailInfos.repoName,
88+
Message.forPr(prId, emailInfos.repoName).then((messages) => {
89+
if (messages.length === 0) {
90+
logger.debug('No comment found, posting one.');
91+
github
92+
.createComment(
4593
emailInfos.prId || 0,
46-
prInfos.data.head.repo.clone_url,
47-
prInfos.data.head.ref,
48-
prInfos.data.head.sha,
49-
configBlock,
50-
data.randomString(80)
51-
)
52-
.then((docker) => {
53-
dns.publishDnsRecord(
54-
emailInfos.repoName,
55-
docker.containerName,
56-
emailInfos.prId || 0,
94+
prInfos.data.base.repo.full_name,
95+
comments.getPendingComment(
96+
emailInfos.commentId || 0,
5797
prInfos.data.head.ref,
5898
prInfos.data.head.sha
5999
)
60-
.then((domain) => {
61-
logger.info('Published-domain:', domain);
62-
github.addReaction(
63-
emailInfos.commentId || 0,
64-
emailInfos.repoName,
65-
reactions.ROCKET
66-
);
67-
github
68-
.updateComment(
69-
emailInfos.prId || 0,
70-
prInfos.data.base.repo.full_name,
71-
deployComment.data.id,
72-
comments.getDeployedComment(
73-
emailInfos.commentId || 0,
74-
prInfos.data.head.ref,
75-
prInfos.data.head.sha,
76-
docker.containerName,
77-
domain
78-
)
79-
)
80-
.then(() => {
81-
logger.info('Updated comment:#' + deployComment.data.id);
82-
})
83-
.catch((error: Error) => logger.error(error));
84-
})
85-
.catch((error: Error) => logger.error(error, emailInfos));
86-
})
100+
)
101+
.then((deployComment) =>
102+
afterComment(configBlock, emailInfos, deployComment.data.id, {
103+
sha: prInfos.data.head.sha,
104+
ref: prInfos.data.head.ref,
105+
cloneUrl: prInfos.data.head.repo.clone_url,
106+
repoSlug: prInfos.data.base.repo.full_name,
107+
})
108+
)
87109
.catch((error: Error) => logger.error(error, prInfos, emailInfos));
88-
})
89-
.catch((error: Error) => logger.error(error, prInfos, emailInfos));
110+
return;
111+
}
112+
logger.debug('Comment found, using it.');
113+
const lastMessage = messages[messages.length - 1];
114+
afterComment(configBlock, emailInfos, lastMessage.getCommentId(), {
115+
sha: prInfos.data.head.sha,
116+
ref: prInfos.data.head.ref,
117+
cloneUrl: prInfos.data.head.repo.clone_url,
118+
repoSlug: prInfos.data.base.repo.full_name,
119+
});
120+
});
90121
})
91122
.catch((error: Error) => logger.error(error, emailInfos));
92123
},

src/github.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ export enum reactions {
1818
}
1919

2020
export default {
21+
getComment: (commentId: number, repoName: string) => {
22+
const repoParts = repoName.split('/');
23+
return GHclient.issues.getComment({
24+
owner: repoParts[0],
25+
repo: repoParts[1],
26+
comment_id: commentId,
27+
});
28+
},
2129
createComment: (prId: number, repoName: string, commentBody: string) => {
2230
const repoParts = repoName.split('/');
2331
return GHclient.issues.createComment({

src/modeles/Message.ts

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -72,29 +72,45 @@ export default class Message {
7272
})
7373
.into('messages');
7474
}
75+
76+
public static buildMessage(message: any): Message {
77+
var newMessage = new Message(
78+
message.username,
79+
message.comment_id,
80+
message.pr_id,
81+
message.platform,
82+
message.is_sent,
83+
message.ref_comment_id
84+
);
85+
newMessage.setId(message.id);
86+
if (message.is_sent) {
87+
newMessage.setSent();
88+
} else {
89+
newMessage.setReceived();
90+
}
91+
return newMessage;
92+
}
93+
94+
public static forPr(prId: number, projectSlug: string): Promise<Message[]> {
95+
return knex
96+
.getConnection()
97+
.select('*')
98+
.from('messages')
99+
.orderBy('id', 'desc')
100+
.where('pr_id', prId)
101+
.where('is_sent', 1)
102+
.then((messages) => {
103+
return messages.map((message) => Message.buildMessage(message));
104+
});
105+
}
106+
75107
public static all(): Promise<Message[]> {
76108
return knex
77109
.getConnection()
78110
.select('*')
79111
.from('messages')
80112
.then((messages) => {
81-
return messages.map((message) => {
82-
var newMessage = new Message(
83-
message.username,
84-
message.comment_id,
85-
message.pr_id,
86-
message.platform,
87-
message.is_sent,
88-
message.ref_comment_id
89-
);
90-
newMessage.setId(message.id);
91-
if (message.is_sent) {
92-
newMessage.setSent();
93-
} else {
94-
newMessage.setReceived();
95-
}
96-
return newMessage;
97-
});
113+
return messages.map((message) => Message.buildMessage(message));
98114
});
99115
}
100116

0 commit comments

Comments
 (0)