generated from freeCodeCamp/template
-
-
Notifications
You must be signed in to change notification settings - Fork 31
158 lines (151 loc) · 6 KB
/
slash-command-action.yml
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
on:
issue_comment:
types: [created]
name: Issue Comments
permissions:
issues: write
jobs:
validate_command:
name: Validate command
runs-on: ubuntu-latest
# Run the job only if the new comment starts with '/'
if: |
!github.event.issue.pull_request && startsWith(github.event.comment.body, '/')
outputs:
valid_command: ${{ steps.command_check.outputs.valid_command }}
command: ${{ steps.command_check.outputs.command }}
target_status: ${{ steps.command_check.outputs.target_status }} # Which status to move the card to
steps:
- name: Validate command
id: command_check
run: |
if [[ "${{ github.event.comment.body }}" == /translate* ]]; then
echo "::set-output name=command::translate"
echo "::set-output name=target_status::in Translation"
echo "::set-output name=valid_command::true"
elif [[ "${{ github.event.comment.body }}" == /review* ]]; then
echo "::set-output name=command::review"
echo "::set-output name=target_status::in Review"
echo "::set-output name=valid_command::true"
else
echo "::warning::Invalid command. The comment must start with /translate or /review."
echo "::set-output name=valid_command::false"
fi
# Reply to the user if the command was invalid
- name: Feedback for invalid command
if: steps.command_check.outputs.valid_command != 'true'
uses: actions/github-script@v7
with:
script: |
const issueComment = `
@${{ github.event.comment.user.login }} The command was invalid. The comment must start with /translate or /review.
`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: issueComment
});
github-token: ${{ secrets.GITHUB_TOKEN }}
get_project_card_info:
name: Get project card information
needs: validate_command
if: needs.validate_command.outputs.valid_command == 'true'
runs-on: ubuntu-latest
outputs:
cardId: ${{ steps.get_card.outputs.cardId }}
projectUrl: ${{ steps.get_card.outputs.projectUrl }}
projectName: ${{ steps.get_card.outputs.projectName }}
steps:
- name: Get project card
id: get_card
uses: actions/github-script@v7
env:
ISSUE_NODE_ID: ${{ github.event.issue.node_id }}
with:
script: |
const query = `
query ($id: ID!) {
node(id: $id) {
... on Issue {
projectsV2(first: 1) {
edges {
node {
id
url
title
items(first: 100) {
edges {
node {
id
content {
... on Issue {
id
}
}
}
}
}
}
}
}
}
}
}
`;
const variables = {
id: process.env.ISSUE_NODE_ID
};
const result = await github.graphql(query, variables);
console.log(`Result: ${JSON.stringify(result)}`);
const cardId = result.node.projectsV2.edges[0].node.items.edges.find(edge => edge.node.content.id === process.env.ISSUE_NODE_ID).node.id;
const projectUrl = result.node.projectsV2.edges[0].node.url;
const projectName = result.node.projectsV2.edges[0].node.title;
console.log(`Card ID: ${cardId}`);
console.log(`Project URL: ${projectUrl}`);
console.log(`Project Name: ${projectName}`);
core.setOutput('cardId', cardId);
core.setOutput('projectUrl', projectUrl);
core.setOutput('projectName', projectName);
github-token: ${{ secrets.MOVE_CARDS_TOKEN }}
assign_issue:
name: Assign issue
needs: [validate_command, get_project_card_info]
if: needs.validate_command.outputs.valid_command == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout # Prepare to run the following scripts
uses: actions/checkout@v3
- name: Assign issue to the commenter as translator
if: needs.validate_command.outputs.command == 'translate'
uses: actions/github-script@v7
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
script: |
const script = require('./scripts/assignTranslator.js');
await script({github, context, core});
- name: Assign issue to the reviewer
if: needs.validate_command.outputs.command == 'review'
uses: actions/github-script@v7
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
script: |
const script = require('./scripts/assignReviewer.js');
const projectName = '${{ needs.get_project_card_info.outputs.projectName }}';
await script({github, context, core, projectName});
update_project_card:
name: Update project card
needs: [validate_command, get_project_card_info, assign_issue]
if: needs.validate_command.outputs.valid_command == 'true'
runs-on: ubuntu-latest
steps:
- name: Update project card status
uses: titoportas/update-project-fields@v0.1.0
with:
project-url: ${{ needs.get_project_card_info.outputs.projectUrl }}
github-token: ${{ secrets.MOVE_CARDS_TOKEN }}
item-id: ${{ needs.get_project_card_info.outputs.cardId }}
field-keys: Status
field-values: ${{ needs.validate_command.outputs.target_status }}