11const github = require ( '@actions/github' ) ; // @TODO move to 'imports from' when moved to TS !
22const 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+
5885async 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
7198async 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 ( ) ,
0 commit comments