1
1
const github = require ( '@actions/github' ) ; // @TODO move to 'imports from' when moved to TS !
2
2
const core = require ( '@actions/core' ) ;
3
3
4
- const { GITHUB_REPOSITORY } = process . env ;
4
+ const { GITHUB_REPOSITORY , RUNNER_NAME } = process . env ;
5
5
6
6
/**
7
7
* @returns {number|undefined }
8
8
*/
9
- function guessPrNumber ( ) {
9
+ function guessTriggeringPrNumber ( ) {
10
10
if ( 'pull_request' === github . context . eventName ) {
11
11
return github . context . payload . number ;
12
12
} 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 ;
14
14
}
15
15
16
16
return undefined ;
@@ -19,7 +19,7 @@ function guessPrNumber() {
19
19
/**
20
20
* @returns {string|undefined }
21
21
*/
22
- function guessCommitSha ( ) {
22
+ function guessTriggeringCommitSha ( ) {
23
23
if ( 'pull_request' === github . context . eventName ) {
24
24
return github . context . payload . pull_request . head . sha ;
25
25
}
@@ -47,14 +47,41 @@ function guessTriggeringWorkflowName() {
47
47
/**
48
48
* @returns {string }
49
49
*/
50
- function guessRunId ( ) {
50
+ function guessTriggeringRunId ( ) {
51
51
if ( 'workflow_run' === github . context . eventName ) {
52
52
return github . context . payload . workflow . id . toString ( ) ;
53
53
}
54
54
55
55
return github . context . runId . toString ( ) ;
56
56
}
57
57
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
+
58
85
async function getWorkflowJobsForRunId ( octokit , owner , repo , runId ) {
59
86
return octokit . paginate (
60
87
'GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs' ,
@@ -70,9 +97,9 @@ async function getWorkflowJobsForRunId(octokit, owner, repo, runId) {
70
97
71
98
async function run ( ) {
72
99
/** INPUTS **/
73
- const checkName = core . getInput ( 'name' , { required : true } ) ;
74
100
const githubToken = core . getInput ( 'github-token' , { required : true } ) ;
75
101
const jobStatus = core . getInput ( 'job-status' , { required : true } ) ;
102
+ const checkName = core . getInput ( 'name' ) ;
76
103
77
104
const isSuccessfulJobAsOfNow = 'success' === jobStatus ;
78
105
const octokit = github . getOctokit ( githubToken ) ;
@@ -81,10 +108,10 @@ async function run() {
81
108
'Build API params' ,
82
109
async ( ) => {
83
110
const repoInfo = github . context . repo ;
84
- const triggeringWorkflowRunId = guessRunId ( ) ;
111
+ const triggeringWorkflowRunId = guessTriggeringRunId ( ) ;
85
112
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));
88
115
//const jobsForTriggeringWorkflow = await getWorkflowJobsForRunId(octokit, repoInfo.owner, repoInfo.repo, triggeringWorkflowRunId);
89
116
//core.info('TMP DEBUG jobsForTriggeringWorkflow=' + JSON.stringify(jobsForTriggeringWorkflow));
90
117
core . info ( 'TMP DEBUG GITHUB_ACTION=' + process . env . GITHUB_ACTION ) ;
@@ -97,16 +124,22 @@ async function run() {
97
124
core . info ( 'TMP DEBUG RUNNER_ARCH=' + process . env . RUNNER_ARCH ) ;
98
125
core . info ( 'TMP DEBUG RUNNER_NAME=' + process . env . RUNNER_NAME ) ;
99
126
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 ( ) ;
101
130
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
+ ;
107
140
108
141
return {
109
- name : checkName ,
142
+ name : checkName ? checkName : ( currentJob ?. name ?? currentWorkflowName + ' Check run' ) ,
110
143
head_sha : commitSha ,
111
144
//details_url: detailsUrl,
112
145
external_id : triggeringWorkflowRunId ?. toString ( ) ,
0 commit comments