forked from Azure/azure-rest-api-specs
-
Notifications
You must be signed in to change notification settings - Fork 1
67 lines (59 loc) · 2.4 KB
/
comment.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
name: Comment Processor
on:
issue_comment:
types: [created]
permissions: { }
jobs:
comment-handler:
permissions:
pull-requests: write # to read pull requests and write comments
repository-projects: read # Workaround issue with cli trying to read projects during edit
name: Handle ${{ github.event_name }} ${{ github.event.action }} event
runs-on: ubuntu-latest
steps:
- name: Process comment
shell: pwsh
run: |
$payload = Write-Output $env:PAYLOAD | ConvertFrom-Json -AsHashtable
if (!$payload.comment -or !$payload.comment.body) {
Write-Host "Skipping: empty comment."
return
}
$body = $payload.comment.body.Trim().ToLowerInvariant()
$expected = '/pr requestmerge'
if ($body -ne $expected) {
Write-Host "Skipping: comment did not equal '$expected'."
return
}
$label = 'MergeRequested'
$retryCount = 0
$maxRetries = 5
$retryDelay = 5 # Initial retry delay in seconds
while ($retryCount -lt $maxRetries) {
Write-Host "Attempt $($retryCount+1) out of $($maxRetries): gh pr edit $($payload.issue.number) --add-label `"$label`""
gh pr edit $payload.issue.html_url --add-label "$label"
if ($LASTEXITCODE -eq 0) {
Write-Host "Label added successfully on attempt $($retryCount+1) out of $($maxRetries)."
break
} else {
Write-Warning "Failed to add label on attempt $($retryCount+1) out of $($maxRetries)."
$retryCount++
if ($retryCount -lt $maxRetries) {
# $retryDelay = 5 exponential backoff in seconds:
# attempt 2: 5 = 1*5
# attempt 3: 10 = 2*5
# attempt 4: 20 = 4*5
# attempt 5: 40 = 8*5
Write-Host "Sleeping for $retryDelay seconds..."
Start-Sleep -Seconds $retryDelay
$retryDelay = $retryDelay * 2
}
}
}
if ($retryCount -ge $maxRetries) {
Write-Error "Max retry attempts of $maxRetries exhausted. Exiting with error ('exit 1')."
exit 1
}
env:
PAYLOAD: ${{ toJson(github.event) }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}