Skip to content

Commit 9fe059f

Browse files
authored
Refactor CI for forked repositories - Fix (yoanm#112)
1 parent b649d5b commit 9fe059f

File tree

6 files changed

+55
-24
lines changed

6 files changed

+55
-24
lines changed

.github/actions/reports-group/attach-check-run-to-triggering-workflow-action/action.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
name: TODO
22
description: TODO
33
inputs:
4-
name:
5-
description: Status check name
6-
required: true
74
github-token:
85
description: Github Authentication token used to create the check through GitHub API
96
required: true
107
job-status:
118
description: Job check status
129
required: true
10+
name:
11+
description: Status check name. Default to current job name
12+
required: false
1313

1414
outputs:
1515
check-run-id:

.github/actions/reports-group/attach-check-run-to-triggering-workflow-action/dist/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.github/actions/reports-group/attach-check-run-to-triggering-workflow-action/dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.github/actions/reports-group/attach-check-run-to-triggering-workflow-action/src/main.js

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
const github = require('@actions/github'); // @TODO move to 'imports from' when moved to TS !
22
const core = require('@actions/core');
33

4-
const {GITHUB_REPOSITORY} = process.env;
4+
const {GITHUB_REPOSITORY, RUNNER_NAME} = process.env;
55

66
/**
77
* @returns {number|undefined}
88
*/
9-
function guessPrNumber() {
9+
function guessTriggeringPrNumber() {
1010
if ('pull_request' === github.context.eventName) {
1111
return github.context.payload.number;
1212
} else if ('workflow_run' === github.context.eventName && 'pull_request' === github.context.payload.workflow_run.event) {
13-
return github.context.payload.pull_requests[0]?.number;
13+
return github.context.payload.workflow_run.pull_requests[0]?.number;
1414
}
1515

1616
return undefined;
@@ -19,7 +19,7 @@ function guessPrNumber() {
1919
/**
2020
* @returns {string|undefined}
2121
*/
22-
function guessCommitSha() {
22+
function guessTriggeringCommitSha() {
2323
if ('pull_request' === github.context.eventName) {
2424
return github.context.payload.pull_request.head.sha;
2525
}
@@ -47,14 +47,41 @@ function guessTriggeringWorkflowName() {
4747
/**
4848
* @returns {string}
4949
*/
50-
function guessRunId() {
50+
function guessTriggeringRunId() {
5151
if ('workflow_run' === github.context.eventName) {
5252
return github.context.payload.workflow.id.toString();
5353
}
5454

5555
return github.context.runId.toString();
5656
}
5757

58+
/**
59+
* @returns {Promise<Record<string, any>|undefined>}
60+
*/
61+
async function retrieveCurrentJob(octokit, owner, repo, runId) {
62+
const jobList = await getWorkflowJobsForRunId(octokit, owner, repo, runId);
63+
core.info('TMP DEBUG jobsForCurrentWorkflow=' + JSON.stringify(jobList));
64+
const candidateList = [];
65+
for (const job of jobList) {
66+
if (RUNNER_NAME === job.runner_name && 'in_progress' === job.status) {
67+
candidateList.push(job);
68+
}
69+
}
70+
if (candidateList.length === 0) {
71+
core.info('Unable to retrieve the current job !');
72+
return undefined;
73+
}
74+
if (candidateList.length > 1) {
75+
core.warning(
76+
'Multiple running jobs rely on runners with the same name, unable to retrieve the current job !'
77+
+ '\nCandidates: ' + Object.entries(candidateList).map(([k, v]) => v.name + '(' + k + ')').join(', ')
78+
);
79+
return undefined;
80+
}
81+
82+
return candidateList.shift();
83+
}
84+
5885
async function getWorkflowJobsForRunId(octokit, owner, repo, runId) {
5986
return octokit.paginate(
6087
'GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs',
@@ -70,9 +97,9 @@ async function getWorkflowJobsForRunId(octokit, owner, repo, runId) {
7097

7198
async function run() {
7299
/** INPUTS **/
73-
const checkName = core.getInput('name', {required: true});
74100
const githubToken = core.getInput('github-token', {required: true});
75101
const jobStatus = core.getInput('job-status', {required: true});
102+
const checkName = core.getInput('name');
76103

77104
const isSuccessfulJobAsOfNow = 'success' === jobStatus;
78105
const octokit = github.getOctokit(githubToken);
@@ -81,10 +108,10 @@ async function run() {
81108
'Build API params',
82109
async () => {
83110
const repoInfo = github.context.repo;
84-
const triggeringWorkflowRunId = guessRunId();
111+
const triggeringWorkflowRunId = guessTriggeringRunId();
85112
core.info('TMP DEBUG context=' + JSON.stringify(github.context));
86-
const jobsForCurrentWorkflow = await getWorkflowJobsForRunId(octokit, repoInfo.owner, repoInfo.repo, github.context.runId);
87-
core.info('TMP DEBUG jobsForCurrentWorkflow=' + JSON.stringify(jobsForCurrentWorkflow));
113+
//const jobsForCurrentWorkflow = await getWorkflowJobsForRunId(octokit, repoInfo.owner, repoInfo.repo, github.context.runId);
114+
//core.info('TMP DEBUG jobsForCurrentWorkflow=' + JSON.stringify(jobsForCurrentWorkflow));
88115
//const jobsForTriggeringWorkflow = await getWorkflowJobsForRunId(octokit, repoInfo.owner, repoInfo.repo, triggeringWorkflowRunId);
89116
//core.info('TMP DEBUG jobsForTriggeringWorkflow=' + JSON.stringify(jobsForTriggeringWorkflow));
90117
core.info('TMP DEBUG GITHUB_ACTION=' + process.env.GITHUB_ACTION);
@@ -97,16 +124,22 @@ async function run() {
97124
core.info('TMP DEBUG RUNNER_ARCH=' + process.env.RUNNER_ARCH);
98125
core.info('TMP DEBUG RUNNER_NAME=' + process.env.RUNNER_NAME);
99126
core.info('TMP DEBUG RUNNER_OS=' + process.env.RUNNER_OS);
100-
const commitSha = guessCommitSha();
127+
const currentJob = await retrieveCurrentJob(octokit, repoInfo.owner, repoInfo.repo, github.context.runId);
128+
core.info('TMP DEBUG CURRENT JOB=' + JSON.stringify(currentJob));
129+
const commitSha = guessTriggeringCommitSha();
101130
const startedAt = (new Date()).toISOString();
102-
const prNumber = guessPrNumber();
103-
const originalWorkflowName = guessTriggeringWorkflowName();
104-
const outputTitle = '🔔 ' + github.context.workflow; // Current workflow name !
105-
const originalWorkflowUrl = github.context.serverUrl + '/' + GITHUB_REPOSITORY + '/actions/runs/' + triggeringWorkflowRunId + (undefined !== prNumber ? '?pr=' + prNumber : '');
106-
const outputSummary = '🪢 Triggered by <a href="' + originalWorkflowUrl + '" target="blank">**' + originalWorkflowName + '** workflow</a>';
131+
const prNumber = guessTriggeringPrNumber();
132+
//const originalWorkflowName = guessTriggeringWorkflowName();
133+
const currentWorkflowName = github.context.workflow;
134+
const outputTitle = '🔔 ' + currentWorkflowName;
135+
const currentWorkflowUrl = github.context.serverUrl + '/' + GITHUB_REPOSITORY + '/actions/runs/' + github.context.runId.toString() + (undefined !== prNumber ? '?pr=' + prNumber : '');
136+
const outputSummary = '🪢 Check added by '
137+
+ (currentJob ? '<a href="' + currentJob.html_url + '" target="blank">**' + currentJob.name + '**</a>' : '')
138+
+ (currentJob ? ' (' : '') + '<a href="' + currentWorkflowUrl + '" target="blank">**' + currentWorkflowName + '** workflow</a>' + (currentJob ? ')' : '')
139+
;
107140

108141
return {
109-
name: checkName,
142+
name: checkName ? checkName : (currentJob?.name ?? currentWorkflowName + ' Check run'),
110143
head_sha: commitSha,
111144
//details_url: detailsUrl,
112145
external_id: triggeringWorkflowRunId?.toString(),

.github/workflows/codacy-upload-from-artifacts.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ jobs:
4747

4848
- uses: ./custom-action-repo/.github/actions/reports-group/attach-check-run-to-triggering-workflow-action
4949
with:
50-
name: "Codacy / Upload all reports"
5150
github-token: ${{ github.token }}
5251
job-status: ${{ job.status }}
5352

.github/workflows/codecov-upload-from-artifacts.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939

4040
- uses: ./custom-action-repo/.github/actions/reports-group/attach-check-run-to-triggering-workflow-action
4141
with:
42-
name: "Codecov / 📮 🗃️ Prepare uploads"
42+
name: "My custom check"
4343
github-token: ${{ github.token }}
4444
job-status: ${{ job.status }}
4545

@@ -125,7 +125,6 @@ jobs:
125125

126126
- uses: ./custom-action-repo/.github/actions/reports-group/attach-check-run-to-triggering-workflow-action
127127
with:
128-
name: "Codecov / ${{ matrix.artifact }} - ${{ matrix.path }}"
129128
github-token: ${{ github.token }}
130129
job-status: ${{ job.status }}
131130

0 commit comments

Comments
 (0)