6262 run : |
6363 # Get runspace info
6464 $RepoRoot = $env:RUNNER_WORKSPACE
65+ $RepoName = $env:GITHUB_REPOSITORY
66+ $WorkflowName = $env:GITHUB_WORKFLOW -replace '[\\/:*?"<>|\s]', '_'
67+ $WorkflowRunId = $env:GITHUB_RUN_ID
68+ $WorkflowRunAttempt = $env:GITHUB_RUN_ATTEMPT
6569 $GitHubData = $env:PayloadJson | ConvertFrom-Json -Depth 50
6670 $AccessToken = $env:AccessToken
6771 $GitHubApiUrl = "https://api.github.com/repos/MicrosoftDocs/"
@@ -71,14 +75,16 @@ jobs:
7175 $PrCreator = $GitHubData.event.pull_request.user.login
7276 $TargetBranch = $GitHubData.event.pull_request.base.ref
7377 $GitHubState = $GitHubData.event.pull_request.state
74- $GitHubAction = $GithubData.event.action
78+ $GitHubAction = $GitHubData.event.action
79+ $PrNumber = $GitHubData.event.pull_request.number
7580 $IsPrDraft = $GitHubData.event.pull_request.draft
7681 $GitHubSender = $GitHubData.event.sender.login
7782 $GitHubRepoName = $GitHubData.event.repository.name
7883 $RepoLabelUrl = $GitHubData.event.repository.labels_url
7984 $PrFileListUrl = "$($GitHubData.event.pull_request.url)/files"
8085 $IssueUrl = $GitHubData.event.pull_request.issue_url
8186 $PrUrl = $GitHubData.event.pull_request.url
87+ $PrHtmlUrl = $GitHubData.event.pull_request.html_url
8288 $CommentsUrl = $GitHubData.event.pull_request.comments_url
8389 $UserPermissionUrl = $GitHubData.event.repository.collaborators_url.Replace("{/collaborator}", "/$PrCreator/permission" )
8490
@@ -110,11 +116,41 @@ jobs:
110116 $LabelColor = "BFDADC"
111117 $LabelDescription = ""
112118
119+ # Central workflow logging parameters
120+ $LoggingRepoName = "officedocs-pr"
121+ $LoggingBranch = "logging"
122+ $LoggingRootDir = ".github/workflow-logs"
123+ $Year = Get-Date -Format yyyy
124+ $Month = Get-Date -Format MM
125+ $LoggingFilePath = "$LoggingRootDir/$RepoName/$Year/$Month/PR$PrNumber/workflow-runs/$WorkflowName/${WorkflowRunId}_${WorkflowRunAttempt}.csv"
126+
127+ $LoggingData = [pscustomobject][ordered]@{
128+ RepoName = $RepoName
129+ PrNumber = $PrNumber
130+ PrUrl = $PrHtmlUrl
131+ PrCreator = $PrCreator
132+ WorkflowSender = $GitHubSender
133+ PrIsDraft = $IsPrDraft
134+ InitialReviewerList = $Null
135+ ValidatedReviewerList = $Null
136+ ReviewStatus = $Null
137+ ReviewDetails = $Null
138+ ServiceSubService = $Null
139+ PrEvent = $GitRequestEvent
140+ PrAction = $GitHubAction
141+ PrState = $GitHubState
142+ WorkflowName = $WorkflowName
143+ WorkflowRunId = $WorkflowRunId
144+ TimeStamp = (Get-Date).ToString("o")
145+ }
146+
147+ # Path to GE Taxonomy service/subservice to Content Lead GitHub account mapping file.
113148 $ServiceToGitHubUserMapRepo = "officedocs-pr"
114149 $ServiceToGitHubUserMapFilePath = "/contents/.github/workflows/resources/service-subservice-to-github-user-map.csv"
115150 $ServiceToGitHubUserMapRef = "main"
116151 $ServiceToGitHubUserMapUrl = $GitHubApiUrl + $ServiceToGitHubUserMapRepo + $ServiceToGitHubUserMapFilePath + "?ref=$ServiceToGitHubUserMapRef"
117152
153+ # Path to central workflow resources location.
118154 $WorkflowsResourcePath = "https://api.github.com/repos/MicrosoftDocs/microsoft-365-docs/contents/.github/workflows/resources"
119155 $WorkflowsRef = "workflows-prod"
120156
@@ -963,6 +999,59 @@ jobs:
963999
9641000 }
9651001
1002+ # ####################
1003+ # ####################
1004+ # Send-WorkflowLog
1005+
1006+ Function Send-WorkflowLog {
1007+ [CmdletBinding()]
1008+ Param(
1009+
1010+ [Parameter(Mandatory=$true)]
1011+ [PSCustomObject[]]$LogData
1012+
1013+ )
1014+
1015+
1016+ # Convert to CSV
1017+ $CsvContent = $LogData | ConvertTo-Csv -NoTypeInformation | Out-String
1018+ $Base64Content = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($CsvContent))
1019+
1020+ $FileUrl = "https://api.github.com/repos/MicrosoftDocs/$LoggingRepoName/contents/$LoggingFilePath"
1021+
1022+ Try {
1023+ $ExistingFile = Invoke-RestMethod -Uri $FileUrl -Headers $AppGitHubAccessHeaders -Method Get -StatusCodeVariable StatusCode
1024+ $Sha = $ExistingFile.sha
1025+ } Catch {
1026+ $Sha = $null
1027+ }
1028+
1029+ # Create or update file
1030+ $Body = @{
1031+ message = "Log from $RepoName workflow $WorkflowName (run $WorkflowRunId)"
1032+ content = $Base64Content
1033+ branch = $LoggingBranch
1034+ }
1035+
1036+ If ($Sha) {
1037+ $Body.sha = $Sha
1038+ }
1039+
1040+ Try {
1041+
1042+ $Response = Invoke-RestMethod -Uri $FileUrl -Headers $AppGitHubAccessHeaders -Method Put -Body ($Body | ConvertTo-Json)
1043+
1044+ } Catch {
1045+
1046+ Write-Host "ERROR : Failed to post workflow log."
1047+
1048+ }
1049+
1050+ Write-Host "Log pushed to $LoggingFilePath"
1051+ Return $Response
1052+ }
1053+
1054+
9661055 # ####################
9671056 # ####################
9681057 # Main
@@ -1079,6 +1168,7 @@ jobs:
10791168 $ExpandedServiceSubServiceRows = Expand-ServiceSubServiceRows -CsvContent $ServiceToAccountMap
10801169
10811170 $ReviewerArray = @()
1171+ $ServiceSubServiceArray = @() # Used in logging
10821172
10831173 ForEach ($File in $FileMetadataArray) {
10841174
@@ -1088,6 +1178,8 @@ jobs:
10881178
10891179 $FileReviewers = Get-ContentLeadAccounts -DataArray $ExpandedServiceSubServiceRows -Service $File.Service -SubService $File.SubService
10901180
1181+ $ServiceSubServiceArray += "$($File.Service)\$($File.Subservice)"
1182+
10911183 If ($FileReviewers -ne $Null) {
10921184
10931185 $ReviewerArray += $FileReviewers
@@ -1123,41 +1215,74 @@ jobs:
11231215
11241216 $ReviewerMessage = $AtMentionedGitHubAccounts + $(Get-PrMessage "AutoLabelAssign-ContentLeadReviewNotice")
11251217
1126- Set-PrReviewer -PrUrl $PrUrl -GitHubReviewers $ValidatedReviewerAccounts
1127- Set-PrConversationMessage -Message $ReviewerMessage
1218+ Try {
1219+
1220+ Set-PrReviewer -PrUrl $PrUrl -GitHubReviewers $ValidatedReviewerAccounts
1221+ Set-PrConversationMessage -Message $ReviewerMessage
1222+
1223+ $LoggingData.ReviewStatus = "ReviewerAddSuccess"
1224+
1225+ } Catch {
1226+
1227+ $LoggingData.ReviewStatus = "ReviewerAddFailed"
1228+ $LoggingData.ReviewDetails = $_
1229+
1230+ }
11281231
11291232 } Else {
11301233
11311234 Write-Host "No additional reviewers to add. Not setting reviewers or posting PR comment."
11321235
1236+ $LoggingData.ReviewStatus = "ReviewerAddSkipped"
1237+ $LoggingData.ReviewDetails = "No additional reviewers to add."
1238+
11331239 }
11341240
11351241 } Else {
11361242
11371243 Write-Host "No valid reviewers to assign."
11381244 Write-Host $TestedReviewerAccounts
1245+
1246+ $LoggingData.ReviewStatus = "ReviewerAddSkipped"
1247+ $LoggingData.ReviewDetails = "No valid reviewers to assign."
11391248
11401249 }
11411250
11421251 } Else {
11431252
11441253 Write-Host "No reviewers matched any services or subservices in PR articles."
1254+
1255+ $LoggingData.ReviewStatus = "ReviewerAddSkipped"
1256+ $LoggingData.ReviewDetails = "No reviewers matched any services or subservices."
1257+
11451258
11461259 }
11471260
11481261
11491262 } Else {
11501263
11511264 Write-Host "Not adding reviewer because submitter can sign off PR. User permission : $UserPermission."
1265+
1266+ $LoggingData.ReviewStatus = "ReviewerAddSkipped"
1267+ $LoggingData.ReviewDetails = "Not adding reviewer because submitter can sign off PR. User permission : $UserPermission."
11521268
11531269 }
11541270
11551271 } Else {
11561272
11571273 Write-Host "Not adding PR reviewers. PR action : $GitHubAction. Draft state: $IsPrDraft."
1274+
1275+ $LoggingData.ReviewStatus = "ReviewerAddSkipped"
1276+ $LoggingData.ReviewDetails = "Not adding reviewers because PR is draft."
11581277
11591278 }
11601279
1280+ $LoggingData.ServiceSubService = $($ServiceSubServiceArray | Select-Object -Unique) -Join ";"
1281+ $LoggingData.InitialReviewerList = $ReviewerArray -Join ";"
1282+ $Loggingdata.ValidatedReviewerList = $ValidatedReviewerAccounts -Join ";"
1283+
1284+ Send-WorkflowLog -LogData $LoggingData
1285+
11611286 } Else {
11621287
11631288 Write-Host "Auto reviewer assignment disabled."
0 commit comments