|
7 | 7 | "context" |
8 | 8 | "fmt" |
9 | 9 |
|
| 10 | + actions_model "code.gitea.io/gitea/models/actions" |
10 | 11 | activities_model "code.gitea.io/gitea/models/activities" |
11 | 12 | issues_model "code.gitea.io/gitea/models/issues" |
12 | 13 | repo_model "code.gitea.io/gitea/models/repo" |
@@ -202,3 +203,63 @@ func (m *mailNotifier) RepoPendingTransfer(ctx context.Context, doer, newOwner * |
202 | 203 | log.Error("SendRepoTransferNotifyMail: %v", err) |
203 | 204 | } |
204 | 205 | } |
| 206 | + |
| 207 | +func (m *mailNotifier) ActionRunFinished(ctx context.Context, run *actions_model.ActionRun) { |
| 208 | + // Check status first to avoid unnecessary processing |
| 209 | + if run.Status != actions_model.StatusSuccess && run.Status != actions_model.StatusFailure { |
| 210 | + return |
| 211 | + } |
| 212 | + |
| 213 | + // Load required attributes after status check |
| 214 | + if err := run.LoadAttributes(ctx); err != nil { |
| 215 | + log.Error("LoadAttributes: %v", err) |
| 216 | + return |
| 217 | + } |
| 218 | + |
| 219 | + subject := fmt.Sprintf("[%s] Workflow run %s: %s", |
| 220 | + run.Repo.FullName(), |
| 221 | + run.WorkflowName, |
| 222 | + run.Status, |
| 223 | + ) |
| 224 | + |
| 225 | + // Safely handle short commit SHA |
| 226 | + commitSHA := run.CommitSHA |
| 227 | + if len(commitSHA) > 7 { |
| 228 | + commitSHA = commitSHA[:7] |
| 229 | + } |
| 230 | + |
| 231 | + body := fmt.Sprintf(`Workflow "%s" run #%d has completed with status: %s |
| 232 | +
|
| 233 | +Repository: %s |
| 234 | +Branch: %s |
| 235 | +Commit: %s |
| 236 | +Triggered by: %s |
| 237 | +
|
| 238 | +View the run details here: %s`, |
| 239 | + run.WorkflowName, |
| 240 | + run.Index, |
| 241 | + run.Status, |
| 242 | + run.Repo.FullName(), |
| 243 | + run.RefName, |
| 244 | + commitSHA, |
| 245 | + run.TriggerUser.Name, |
| 246 | + run.HTMLURL(), |
| 247 | + ) |
| 248 | + |
| 249 | + // Send to repo owner if notifications enabled and email present |
| 250 | + if run.Repo.Owner.Email != "" && |
| 251 | + run.Repo.Owner.EmailNotificationsPreference != user_model.EmailNotificationsDisabled { |
| 252 | + if err := SendMail(ctx, []string{run.Repo.Owner.Email}, subject, body); err != nil { |
| 253 | + log.Error("Failed to send email to repo owner %s: %v", run.Repo.Owner.Email, err) |
| 254 | + } |
| 255 | + } |
| 256 | + |
| 257 | + // Send to commit author if different from trigger user and notifications enabled |
| 258 | + if run.TriggerUser.ID != run.CommitAuthor.ID && |
| 259 | + run.CommitAuthor.Email != "" && |
| 260 | + run.CommitAuthor.EmailNotificationsPreference != user_model.EmailNotificationsDisabled { |
| 261 | + if err := SendMail(ctx, []string{run.CommitAuthor.Email}, subject, body); err != nil { |
| 262 | + log.Error("Failed to send email to commit author %s: %v", run.CommitAuthor.Email, err) |
| 263 | + } |
| 264 | + } |
| 265 | +} |
0 commit comments