-
Notifications
You must be signed in to change notification settings - Fork 15
101 lines (87 loc) · 4.02 KB
/
notify-about-pending-release-pull-requests.yaml
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
# This workflow sends a Slack notification to the #frontend-exp-team-notifications channel
# if there is a pending pull request with the title "Version Packages" that has been open for more than 3 hours.
#
# Use STALE_VERSION_PACKAGES_NOTIFICATION_SNOOZE_UNITL repository variable (https://github.com/toptal/picasso/settings/variables/actions)
# to snooze notification unitl specific moment of time. The variable value should be in the date ISO format.
name: Notify about pending release pull requests
on:
schedule:
- cron: '0 9-18/3 * * 1-5' # Runs every 3 hours during work hours (e.g., 9 AM to 6 PM) from Monday to Friday
workflow_dispatch:
jobs:
check-if-notification-is-snoozed:
runs-on: ubuntu-latest
outputs:
snooze-notification: ${{ steps.snooze-notification.outputs.result }}
steps:
- name: Check if the notification is snoozed
uses: actions/github-script@v7
id: snooze-notification
env:
SNOOZE_UNTIL: ${{ vars.STALE_VERSION_PACKAGES_NOTIFICATION_SNOOZE_UNITL }}
with:
script: |
const snoozeUntil = new Date(process.env.SNOOZE_UNTIL)
const now = new Date()
console.log("Snooze until: ", snoozeUntil.toISOString())
console.log("Current time: ", now.toISOString())
return (now <= snoozeUntil)
check-pending-release-pull-requests:
runs-on: ubuntu-latest
needs: check-if-notification-is-snoozed
if: ${{ needs.check-if-notification-is-snoozed.outputs.snooze-notification == 'false' }}
permissions:
contents: write
id-token: write
actions: write
issues: write
pull-requests: write
steps:
- name: Check out the repository
uses: actions/checkout@v4
- name: GSM Secrets
id: secrets_manager
uses: toptal/davinci-github-actions/[email protected]
with:
workload_identity_provider: ${{ secrets.IDENTITY_POOL }}
service_account: ${{ secrets.SA_IDENTITY_POOL }}
secrets_name: |-
SLACK_BOT_TOKEN:toptal-ci/SLACK_BOT_TOKEN
TOPTAL_DEVBOT_TOKEN:toptal-ci/TOPTAL_DEVBOT_TOKEN
- name: Parse secrets
id: parse_secrets
uses: toptal/davinci-github-actions/[email protected]
with:
json: ${{ steps.secrets_manager.outputs.secrets }}
- name: Set ENV Variables
shell: bash
run: |-
echo "SLACK_BOT_TOKEN=${{ steps.parse_secrets.outputs.SLACK_BOT_TOKEN }}" >> $GITHUB_ENV
echo "GITHUB_TOKEN=${{ steps.parse_secrets.outputs.TOPTAL_DEVBOT_TOKEN }}" >> $GITHUB_ENV
- name: Find version packages pull requests
uses: actions/github-script@v7
id: find-pull-requests
with:
github-token: ${{ env.GITHUB_TOKEN }}
script: |
const { data: prs } = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
})
const threeHoursInMilliseconds = 3 * 60 * 60 * 1000
// Find a PR with the title "Version Packages" that has been open long enough
const now = new Date()
const targetPR = prs.find(pr => pr.title.includes('Version Packages') && (now - new Date(pr.created_at)) > threeHoursInMilliseconds)
if (targetPR) {
// If there is at least one stale pull request, require notification
core.setOutput('notification_is_needed', 'true')
}
- name: Send a Slack notification
if: ${{ steps.find-pull-requests.outputs.notification_is_needed == 'true' }}
uses: slackapi/[email protected]
env:
SLACK_BOT_TOKEN: ${{ env.SLACK_BOT_TOKEN }}
with:
channel-id: "-frontend-exp-team-notifications"
slack-message: ":x: <!here> There is stale Version Packages pull request in <https://github.com/toptal/picasso/pulls|Picasso>, review and merge it. To snooze notifications, refer to the documentaion in the workflow code."