Skip to content

Commit

Permalink
Move notifications about Task-lib Localization PR from Slack to MS Te…
Browse files Browse the repository at this point in the history
…ams - Part 1 (#816)
  • Loading branch information
denis-tikhomirov committed Mar 11, 2022
1 parent bc0b5ea commit a492b03
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 21 deletions.
29 changes: 12 additions & 17 deletions Localize/localize-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,23 +95,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 task-lib 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: .\send-notifications.ps1 -IsPRCreated $true -RepoName "Task-lib"
env:
TEAMS_WEBHOOK: $(MSTeamsUri)
displayName: 'Send MS Teams notification about PR opened'
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 task-lib 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: .\send-notifications.ps1 -IsPRCreated $false -RepoName "Task-lib"
env:
TEAMS_WEBHOOK: $(MSTeamsUri)
displayName: 'Send MS Teams notification about error'
condition: and(failed(), eq(variables['SHOULDCREATEPR'], 'True'), eq(variables['build.reason'], 'Schedule'))
12 changes: 8 additions & 4 deletions 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() {
$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"
45 changes: 45 additions & 0 deletions 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

0 comments on commit a492b03

Please sign in to comment.