Skip to content

Commit 4151998

Browse files
authored
Add logging functionality
1 parent 9d12539 commit 4151998

1 file changed

Lines changed: 128 additions & 3 deletions

File tree

.github/workflows/Shared-AutoLabelAssign.yml

Lines changed: 128 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ jobs:
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

Comments
 (0)