-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[FX-NULL] Add ability to snooze notification (#4538)
- Loading branch information
Showing
1 changed file
with
77 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,9 @@ | ||
# 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: | ||
|
@@ -6,68 +12,90 @@ on: | |
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: 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: 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: 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: 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', | ||
}) | ||
- 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 | ||
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) | ||
// 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." | ||
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." |