Skip to content

Notify about pending release pull requests #267

Notify about pending release pull requests

Notify about pending release pull requests #267

# 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/gsm-secrets@v15.4.1
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/expose-json-outputs@v15.4.1
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/slack-github-action@v1.27.0
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."