-
Notifications
You must be signed in to change notification settings - Fork 2
/
action.yml
130 lines (130 loc) · 5.07 KB
/
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
name: 'Avocado CI tools Collection'
description: 'Run avocado-framework specific actions for avocado projects on pull requests or issues to improve avocado-framework development.'
inputs:
avocado-static-checks:
description: |
Runs avocado-static-checks on pull requests.
Default is false.
default: false
avocado-project:
description: |
Mr. avocado configuration for manipulating with PR and issues.
Default is false.
default: false
bot_app_id:
description: |
Bot app ID which is needed to generate access token for bot. It is required by avocado-project.
default: ''
bot_app_installation_id:
description: |
Bot app installation ID which is needed to generate access token for bot. It is required by avocado-project.
default: ''
bot_app_private_key:
description: |
Bot app private key which is needed to generate access token for bot. It is required by avocado-project.
default: ''
runs:
using: "composite"
steps:
# --- avocado-static-checks ---
- if: ${{ inputs.avocado-static-checks == 'true' }}
uses: actions/checkout@v2
with:
repository: avocado-framework/avocado-static-checks
path: avocado-ci-tools/static-checks
- if: ${{ inputs.avocado-static-checks == 'true' }}
run: |
pip3 install -r avocado-ci-tools/static-checks/requirements.txt
avocado-ci-tools/static-checks/run-static-checks
shell: bash
# --- avocado-project ---
- if: ${{ inputs.avocado-project == 'true' }}
name: Generate token
id: generate_token
uses: tibdex/github-app-token@021a2405c7f990db57f5eae5397423dcc554159c
with:
app_id: ${{ inputs.bot_app_id }}
installation_id: ${{ inputs.bot_app_installation_id }}
private_key: ${{ inputs.bot_app_private_key }}
- if: ${{ inputs.avocado-project == 'true' }}
name: Get project data
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
ORGANIZATION: avocado-framework
PROJECT_NUMBER: 1
run: |
gh api graphql -f query='
query($org: String!, $number: Int!) {
organization(login: $org){
projectV2(number: $number) {
id
fields(first:20) {
nodes {
... on ProjectV2Field {
id
name
}
... on ProjectV2SingleSelectField {
id
name
options {
id
name
}
}
}
}
}
}
}' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json
echo 'PROJECT_ID='$(jq '.data.organization.projectV2.id' project_data.json) >> $GITHUB_ENV
echo 'STATUS_FIELD_ID='$(jq '.data.organization.projectV2.fields.nodes[] | select(.name== "Status") | .id' project_data.json) >> $GITHUB_ENV
if [[ ${{ github.event_name }} == pull_request_target ]]; then
echo 'EVENT_ID='${{ github.event.pull_request.node_id }} >> $GITHUB_ENV
echo 'FIELD_VALUE='$(jq '.data.organization.projectV2.fields.nodes[] | select(.name== "Status") | .options[] | select(.name=="Review Requested") |.id' project_data.json) >> $GITHUB_ENV
else
echo 'EVENT_ID='${{ github.event.issue.node_id }} >> $GITHUB_ENV
echo 'FIELD_VALUE='$(jq '.data.organization.projectV2.fields.nodes[] | select(.name== "Status") | .options[] | select(.name=="Triage") |.id' project_data.json) >> $GITHUB_ENV
fi
shell: bash
- if: ${{ inputs.avocado-project == 'true' }}
name: Add Item to project
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
run: |
item_id="$( gh api graphql -f query='
mutation($project:ID!, $item:ID!) {
addProjectV2ItemById(input: {projectId: $project, contentId: $item}) {
item {
id
}
}
}' -f project=$PROJECT_ID -f item=$EVENT_ID --jq '.data.addProjectV2ItemById.item.id')"
echo 'ITEM_ID='$item_id >> $GITHUB_ENV
shell: bash
- if: ${{ inputs.avocado-project == 'true' }}
name: Set fields
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
run: |
gh api graphql -f query='
mutation (
$project: ID!
$item: ID!
$status_field: ID!
$status_value: String!
) {
set_status: updateProjectV2ItemFieldValue(input: {
projectId: $project
itemId: $item
fieldId: $status_field
value: {
singleSelectOptionId: $status_value
}
}) {
projectV2Item {
id
}
}
}' -f project=$PROJECT_ID -f item=$ITEM_ID -f status_field=$STATUS_FIELD_ID -f status_value=${{ env.FIELD_VALUE }} --silent
shell: bash