Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move notifications about Tasks Localization PR from Slack to MS Teams - Part 1 #15917

Merged
merged 7 commits into from
Mar 11, 2022
27 changes: 12 additions & 15 deletions Localize/localize-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -109,21 +109,18 @@ stages:
displayName: Open a PR
condition: and(succeeded(), or(and(eq(variables['SHOULDCREATEPR'], 'True'), eq(variables['build.reason'], 'Schedule')), eq(variables['build.reason'], 'Manual')))

- powershell: |
$message="Created tasks localization update PR. Someone please approve/merge it. :please-puss-in-boots: $env:PR_LINK"
$body = [PSCustomObject]@{
text = $message
} | ConvertTo-Json
Invoke-RestMethod -Uri $(slackUri) -Method Post -Body $body -ContentType 'application/json'
displayName: 'Send Slack notification about PR opened'
# Two next tasks are used to notify about Localization update PRs
# Notifications are set by POST method to MS Teams webhook
# Body of message is compiled as Office 365 connector card
# More details about cards - https://docs.microsoft.com/en-us/microsoftteams/platform/task-modules-and-cards/cards/cards-reference#office-365-connector-card
- powershell: .\ci\localization-updates\send-notifications.ps1 -IsPRCreated $true -RepoName "Tasks"
displayName: 'Send MS Teams notification about PR opened'
env:
TEAMS_WEBHOOK: $(MSTeamsUri)
condition: and(succeeded(), eq(variables['SHOULDCREATEPR'], 'True'), eq(variables['build.reason'], 'Schedule'))

- powershell: |
$buildUrl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_build/results?buildId=$(Build.BuildId)&_a=summary"
$message="Something went wrong while creating tasks localization update PR. Build: $buildUrl"
$body = [PSCustomObject]@{
text = $message
} | ConvertTo-Json
Invoke-RestMethod -Uri $(slackUri) -Method Post -Body $body -ContentType 'application/json'
displayName: 'Send Slack notification about error'
- powershell: .\ci\localization-updates\send-notifications.ps1 -IsPRCreated $false -RepoName "Tasks"
displayName: 'Send MS Teams notification about error'
env:
TEAMS_WEBHOOK: $(MSTeamsUri)
condition: and(failed(), eq(variables['SHOULDCREATEPR'], 'True'), eq(variables['build.reason'], 'Schedule'))
45 changes: 45 additions & 0 deletions ci/localization-updates/send-notifications.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
param(
[Parameter(Mandatory = $true)]
[bool]$IsPRCreated,
[Parameter(Mandatory = $true)]
[string]$RepoName
)

# Function sends Office 365 connector card to webhook.
# It requires title and message text displyed in card and theme color used to hignlight card.
function Send-Notification {
param (
[Parameter(Mandatory = $true)]
[string]$titleText,
[Parameter(Mandatory = $true)]
[string]$messageText,
[Parameter(Mandatory = $true)]
[string]$themeColor
)

$body = [PSCustomObject]@{
title = $titleText
text = $messageText
themeColor = $themeColor
} | ConvertTo-Json

Invoke-RestMethod -Uri $($env:TEAMS_WEBHOOK) -Method Post -Body $body -ContentType 'application/json'
}

$wikiLink = "[Wiki](https://mseng.visualstudio.com/AzureDevOps/_wiki/wikis/AzureDevOps.wiki/16150/Localization-update)"

if ($IsPRCreated) {
$pullRequestLink = "[PR $($env:PR_NUMBER)]($($env:PR_LINK))"
$titleText = "Azure Pipelines $RepoName Localization update PR created - ID $($env:PR_NUMBER)"
$messageText = "Created $RepoName Localization update PR. Please review and approve/merge $pullRequestLink. Related article in $wikiLink."
$themeColor = "#FFFF00"
}
else {
$buildUrl = "$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI$env:SYSTEM_TEAMPROJECT/_build/results?buildId=$($env:BUILD_BUILDID)&_a=summary"
$buildLink = "[ID $($env:BUILD_BUILDID)]($($buildUrl))"
$titleText = "Azure Pipelines $RepoName Localization build failed - ID $($env:BUILD_BUILDID)"
$messageText = "Failed to create $RepoName Localization update PR. Please review the results of failed build $buildLink. Related article in $wikiLink."
$themeColor = "#FF0000"
}

Send-Notification -titleText $titleText -messageText $messageText -themeColor $themeColor
12 changes: 8 additions & 4 deletions ci/open-pullrequest.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ param(
$SourceBranch
)

# Getting a created PR. Result object has interface in accordance with article https://docs.github.com/en/rest/reference/pulls#get-a-pull-request
function Get-PullRequest() {
denis-tikhomirov marked this conversation as resolved.
Show resolved Hide resolved
$prInfo = (gh api -X GET repos/:owner/:repo/pulls -F head=":owner:$SourceBranch" -f state=open -f base=master | ConvertFrom-Json)
return $prInfo.html_url
return (gh api -X GET repos/:owner/:repo/pulls -F head=":owner:$SourceBranch" -f state=open -f base=master | ConvertFrom-Json)
}

$openedPR=Get-PullRequest

if ($openedPR.length -ne 0) {
if ($openedPR.html_url.length -ne 0) {
throw "A PR from $SourceBranch to master already exists."
}

Expand All @@ -20,6 +20,10 @@ $body = "This PR was auto-generated with [the localization pipeline build]($buil

gh pr create --head $SourceBranch --title 'Localization update' --body $body

# Getting a number to the opened PR
$PR_NUMBER = (Get-PullRequest).number
Write-Host "##vso[task.setvariable variable=PR_NUMBER]$PR_NUMBER"

# Getting a link to the opened PR
$PR_LINK = Get-PullRequest
$PR_LINK = (Get-PullRequest).html_url
Write-Host "##vso[task.setvariable variable=PR_LINK]$PR_LINK"