Skip to content

Commit 942c851

Browse files
authored
Merge pull request #41124 from rayane-djouah/improve-workflow-failure-notifier
2 parents 4d9e102 + aa13921 commit 942c851

File tree

2 files changed

+49
-11
lines changed

2 files changed

+49
-11
lines changed

.github/workflows/failureNotifier.yml

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,49 @@ jobs:
2727
});
2828
return jobsData.data;
2929
30+
- name: Fetch Previous Workflow Run
31+
id: previous-workflow-run
32+
uses: actions/github-script@v7
33+
with:
34+
script: |
35+
const runId = ${{ github.event.workflow_run.id }};
36+
const allRuns = await github.rest.actions.listWorkflowRuns({
37+
owner: context.repo.owner,
38+
repo: context.repo.repo,
39+
workflow_id: 'preDeploy.yml',
40+
});
41+
const filteredRuns = allRuns.data.workflow_runs.filter(run => run.actor.login !== 'OSBotify' && run.status !== 'cancelled');
42+
const currentIndex = filteredRuns.findIndex(run => run.id === runId);
43+
const previousRun = filteredRuns[currentIndex + 1];
44+
return previousRun;
45+
46+
- name: Fetch Previous Workflow Run Jobs
47+
id: previous-workflow-jobs
48+
uses: actions/github-script@v7
49+
with:
50+
script: |
51+
const previousRun = ${{ steps.previous-workflow-run.outputs.result }};
52+
const runId = previousRun.id;
53+
const jobsData = await github.rest.actions.listJobsForWorkflowRun({
54+
owner: context.repo.owner,
55+
repo: context.repo.repo,
56+
run_id: runId,
57+
});
58+
return jobsData.data;
59+
3060
- name: Process Each Failed Job
3161
uses: actions/github-script@v7
3262
with:
3363
script: |
3464
const jobs = ${{ steps.fetch-workflow-jobs.outputs.result }};
35-
65+
const previousRun = ${{ steps.previous-workflow-run.outputs.result }};
66+
const previousRunJobs = ${{ steps.previous-workflow-jobs.outputs.result }};
3667
const headCommit = "${{ github.event.workflow_run.head_commit.id }}";
3768
const prData = await github.rest.repos.listPullRequestsAssociatedWithCommit({
3869
owner: context.repo.owner,
3970
repo: context.repo.repo,
4071
commit_sha: headCommit,
4172
});
42-
4373
const pr = prData.data[0];
4474
const prLink = pr.html_url;
4575
const prAuthor = pr.user.login;
@@ -50,14 +80,8 @@ jobs:
5080
if (jobs.jobs[i].conclusion == 'failure') {
5181
const jobName = jobs.jobs[i].name;
5282
const jobLink = jobs.jobs[i].html_url;
53-
const issues = await github.rest.issues.listForRepo({
54-
owner: context.repo.owner,
55-
repo: context.repo.repo,
56-
labels: failureLabel,
57-
state: 'open'
58-
});
59-
const existingIssue = issues.data.find(issue => issue.title.includes(jobName));
60-
if (!existingIssue) {
83+
const previousJob = previousRunJobs.jobs.find(job => job.name === jobName);
84+
if (previousJob?.conclusion === 'success') {
6185
const annotations = await github.rest.checks.listAnnotations({
6286
owner: context.repo.owner,
6387
repo: context.repo.repo,

workflow_tests/mocks/failureNotifierMocks.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,22 @@ import {createMockStep} from '../utils/utils';
55

66
// notifyfailure
77
const FAILURENOTIFIER__NOTIFYFAILURE__FETCH_WORKFLOW_RUN_JOBS__STEP_MOCK = createMockStep('Fetch Workflow Run Jobs', 'Fetch Workflow Run Jobs', 'NOTIFYFAILURE', [], []);
8+
const FAILURENOTIFIER__NOTIFYFAILURE_FETCH_PREVIOUS_WORKFLOW_RUN__STEP_MOCK = createMockStep('Fetch Previous Workflow Run', 'Fetch Previous Workflow Run', 'NOTIFYFAILURE', [], []);
9+
const FAILURENOTIFIER__NOTIFYFAILURE_FETCH_PREVIOUS_WORKFLOW_RUN_JOBS__STEP_MOCK = createMockStep(
10+
'Fetch Previous Workflow Run Jobs',
11+
'Fetch Previous Workflow Run Jobs',
12+
'NOTIFYFAILURE',
13+
[],
14+
[],
15+
);
816
const FAILURENOTIFIER__NOTIFYFAILURE__PROCESS_EACH_FAILED_JOB__STEP_MOCK = createMockStep('Process Each Failed Job', 'Process Each Failed Job', 'NOTIFYFAILURE', [], []);
9-
const FAILURENOTIFIER__NOTIFYFAILURE__STEP_MOCKS = [FAILURENOTIFIER__NOTIFYFAILURE__FETCH_WORKFLOW_RUN_JOBS__STEP_MOCK, FAILURENOTIFIER__NOTIFYFAILURE__PROCESS_EACH_FAILED_JOB__STEP_MOCK];
17+
18+
const FAILURENOTIFIER__NOTIFYFAILURE__STEP_MOCKS = [
19+
FAILURENOTIFIER__NOTIFYFAILURE__FETCH_WORKFLOW_RUN_JOBS__STEP_MOCK,
20+
FAILURENOTIFIER__NOTIFYFAILURE_FETCH_PREVIOUS_WORKFLOW_RUN__STEP_MOCK,
21+
FAILURENOTIFIER__NOTIFYFAILURE_FETCH_PREVIOUS_WORKFLOW_RUN_JOBS__STEP_MOCK,
22+
FAILURENOTIFIER__NOTIFYFAILURE__PROCESS_EACH_FAILED_JOB__STEP_MOCK,
23+
];
1024

1125
export default {
1226
FAILURENOTIFIER__NOTIFYFAILURE__STEP_MOCKS,

0 commit comments

Comments
 (0)