@@ -167,7 +167,7 @@ func GenerateMaintenanceWorkflow(ctx context.Context, opts GenerateMaintenanceWo
167167 runsOnValue := FormatRunsOn (configuredRunsOn , defaultRunsOn )
168168
169169 // Scan workflows for expires fields and track the minimum expires value
170- hasExpires , minExpires := scanWorkflowsForExpires (workflowDataList )
170+ hasExpires , minExpires , triggerReason := scanWorkflowsForExpires (workflowDataList )
171171
172172 // Get the setup action reference (local or remote based on mode).
173173 // Use the first available WorkflowData's ActionResolver to enable SHA pinning.
@@ -210,6 +210,7 @@ func GenerateMaintenanceWorkflow(ctx context.Context, opts GenerateMaintenanceWo
210210 })
211211 }
212212
213+ maintenanceLog .Printf ("Maintenance workflow generation triggered: %s" , triggerReason )
213214 maintenanceLog .Printf ("Generating maintenance workflow for expired discussions, issues, and pull requests (minimum expires: %d hours)" , minExpires )
214215
215216 // Convert hours to days for cron schedule generation
@@ -338,10 +339,19 @@ func allCopilotWorkflowsUseOrgBilling(workflowDataList []*WorkflowData) bool {
338339}
339340
340341// scanWorkflowsForExpires checks all workflow data for expires fields and returns
341- // whether any expires fields are set and the minimum expires value in hours.
342- func scanWorkflowsForExpires (workflowDataList []* WorkflowData ) (bool , int ) {
342+ // whether any expires fields are set, the minimum expires value in hours, and the
343+ // first reason that triggered maintenance workflow generation.
344+ func scanWorkflowsForExpires (workflowDataList []* WorkflowData ) (bool , int , string ) {
343345 hasExpires := false
344346 minExpires := 0 // Track minimum expires value in hours
347+ triggerReason := ""
348+
349+ setTriggerReason := func (reason string ) {
350+ if triggerReason == "" {
351+ triggerReason = reason
352+ maintenanceLog .Printf ("Maintenance workflow became required: %s" , reason )
353+ }
354+ }
345355
346356 for _ , workflowData := range workflowDataList {
347357 if workflowData == nil || workflowData .SafeOutputs == nil {
@@ -352,6 +362,7 @@ func scanWorkflowsForExpires(workflowDataList []*WorkflowData) (bool, int) {
352362 if workflowData .SafeOutputs .CreateDiscussions .Expires > 0 {
353363 hasExpires = true
354364 expires := workflowData .SafeOutputs .CreateDiscussions .Expires
365+ setTriggerReason (fmt .Sprintf ("workflow %q sets safe_outputs.create_discussions.expires=%dh" , workflowData .Name , expires ))
355366 maintenanceLog .Printf ("Workflow %s has expires field set to %d hours for discussions" , workflowData .Name , expires )
356367 if minExpires == 0 || expires < minExpires {
357368 minExpires = expires
@@ -363,6 +374,7 @@ func scanWorkflowsForExpires(workflowDataList []*WorkflowData) (bool, int) {
363374 if workflowData .SafeOutputs .CreateIssues .Expires > 0 {
364375 hasExpires = true
365376 expires := workflowData .SafeOutputs .CreateIssues .Expires
377+ setTriggerReason (fmt .Sprintf ("workflow %q sets safe_outputs.create_issues.expires=%dh" , workflowData .Name , expires ))
366378 maintenanceLog .Printf ("Workflow %s has expires field set to %d hours for issues" , workflowData .Name , expires )
367379 if minExpires == 0 || expires < minExpires {
368380 minExpires = expires
@@ -374,6 +386,7 @@ func scanWorkflowsForExpires(workflowDataList []*WorkflowData) (bool, int) {
374386 if workflowData .SafeOutputs .CreatePullRequests .Expires > 0 {
375387 hasExpires = true
376388 expires := workflowData .SafeOutputs .CreatePullRequests .Expires
389+ setTriggerReason (fmt .Sprintf ("workflow %q sets safe_outputs.create_pull_requests.expires=%dh" , workflowData .Name , expires ))
377390 maintenanceLog .Printf ("Workflow %s has expires field set to %d hours for pull requests" , workflowData .Name , expires )
378391 if minExpires == 0 || expires < minExpires {
379392 minExpires = expires
@@ -385,6 +398,7 @@ func scanWorkflowsForExpires(workflowDataList []*WorkflowData) (bool, int) {
385398 if isNoOpReportAsIssueEnabled (workflowData .SafeOutputs .NoOp .ReportAsIssue ) {
386399 hasExpires = true
387400 expires := defaultNoOpIssueExpirationHours
401+ setTriggerReason (fmt .Sprintf ("workflow %q enables no-op issue reporting (default expiration %dh)" , workflowData .Name , expires ))
388402 maintenanceLog .Printf ("Workflow %s has no-op report-as-issue enabled, using %d-hour no-op issue expiration" , workflowData .Name , expires )
389403 if minExpires == 0 || expires < minExpires {
390404 minExpires = expires
@@ -393,5 +407,5 @@ func scanWorkflowsForExpires(workflowDataList []*WorkflowData) (bool, int) {
393407 }
394408 }
395409
396- return hasExpires , minExpires
410+ return hasExpires , minExpires , triggerReason
397411}
0 commit comments