forked from agu-z/gql-diff-action
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
90 lines (71 loc) · 2.24 KB
/
index.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
const core = require("@actions/core");
const github = require("@actions/github");
const {getDiff} = require("graphql-schema-diff");
const path = require("path");
const header = core.getInput("header");
function resolveHome(filepath) {
if (filepath[0] === '~') {
return path.join(process.env.HOME, filepath.slice(1));
}
return filepath;
}
const oldSchema = resolveHome(core.getInput("old-schema"));
const newSchema = resolveHome(core.getInput("new-schema"));
getDiff(oldSchema, newSchema).then(async result => {
const {repo:{owner, repo}, payload: {pull_request: {number}}} = github.context;
const kit = github.getOctokit(core.getInput("token"));
const {data: comments} = await kit.issues.listComments({
owner,
repo,
issue_number: number
});
core.info(JSON.stringify(comments, null, 2))
const existing = comments.find(comment => comment.body.startsWith(header));
if (result) {
const breaking = result.breakingChanges.length === 0 ? "" : `
### 🚨 Breaking Changes
${result.breakingChanges.map(x => " - " + x.description).join("\n")}
`
const dangerous = result.dangerousChanges.length === 0 ? "" : `
### ⚠️ Dangerous Changes
${result.dangerousChanges.map(x => " - " + x.description).join("\n")}
`
const body = `${header}
<details>
<summary>
View schema changes
</summary>
\`\`\`diff
${result.diffNoColor.split("\n").slice(2).join("\n")}
\`\`\`
</details>
${breaking}
${dangerous}
`
if (existing) {
await kit.issues.updateComment({
owner,
repo,
comment_id: existing.id,
body,
});
} else {
await kit.issues.createComment({
owner,
repo,
issue_number: number,
body,
});
}
} else {
core.info("No schema changes.");
if (existing) {
await kit.issues.deleteComment({
owner,
repo,
comment_id: existing.id
});
core.info("Deleted comment.")
}
}
}).catch((err) => core.setFailed(err.message));