11const github = require ( '@actions/github' ) ; // @TODO move to 'imports from' when moved to TS !
22const core = require ( '@actions/core' ) ;
33
4- const { GITHUB_REPOSITORY , GITHUB_SERVER_URL , GITHUB_RUN_ID , GITHUB_JOB } = process . env ;
4+ const { GITHUB_REPOSITORY } = process . env ;
55
6+ /**
7+ * @returns {number|undefined }
8+ */
69function guessPrNumber ( ) {
10+ if ( 'pull_request' === github . context . eventName ) {
11+ return github . context . payload . number
12+ }
713 if ( 'workflow_run' === github . context . eventName ) {
8- return 'pull_request' === github . context . payload . event && github . context . payload . pull_requests [ 0 ] ?. number
14+ return 'pull_request' === github . context . payload . workflow_run . event
915 ? github . context . payload . pull_requests [ 0 ] ?. number
1016 : undefined
1117 ;
1218 }
1319
14- return 'pull_request' === github . context . eventName ? github . context . payload . number : undefined ;
20+ return undefined ;
1521}
1622
23+ /**
24+ * @returns {string|undefined }
25+ */
1726function guessCommitSha ( ) {
18- // "${{ ('workflow_run' == github.event_name && ('pull_request' == github.event.workflow_run.event || 'push' == github.event.workflow_run.event) && github.event.workflow_run.head_sha) || ('pull_request' == github.event_name && github.event.pull_request.head.sha) || ('push' == github.event_name && github.sha) || null }}"
27+ if ( 'pull_request' === github . context . eventName ) {
28+ return github . context . payload . pull_request . head . sha ;
29+ }
30+ if ( 'push' === github . context . eventName ) {
31+ return github . context . payload . after ;
32+ }
33+ if ( 'workflow_run' === github . context . eventName && [ 'pull_request' , 'push' ] . includes ( github . context . payload . workflow_run . event ) ) {
34+ return github . context . payload . workflow_run . head_sha ;
35+ }
36+
37+ throw new Error ( 'Unable to guess the commit SHA !' ) ;
38+ }
39+
40+ /**
41+ * @returns {string }
42+ */
43+ function guessTriggeringWorkflowName ( ) {
1944 if ( 'workflow_run' === github . context . eventName ) {
20- return 'pull_request' === github . context . payload . event || 'push' === github . context . payload . event
21- ? github . context . payload . head_sha
22- : undefined
23- ;
45+ return github . context . payload . workflow . name ;
46+ }
47+
48+ return github . context . workflow ;
49+ }
50+
51+ /**
52+ * @returns {string }
53+ */
54+ function guessRunId ( ) {
55+ if ( 'workflow_run' === github . context . eventName ) {
56+ return github . context . payload . id . toString ( ) ;
2457 }
2558
26- return 'pull_request' === github . context . eventName ? github . context . payload . number : undefined ;
59+ return github . context . runId . toString ( ) ;
60+ }
61+
62+ async function getWorkflowJobsForRunId ( octokit , owner , repo , runId ) {
63+ return octokit . paginate (
64+ 'GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs' ,
65+ {
66+ //filter: 'latest',
67+ // Url path parameters
68+ owner : owner ,
69+ repo : repo ,
70+ run_id : runId
71+ }
72+ ) ;
2773}
2874
2975async function run ( ) {
30- core . info ( 'TMP DEBUG ' + JSON . stringify ( github . context ) ) ; throw 'plop' ;
3176 /** INPUTS **/
3277 const checkName = core . getInput ( 'name' , { required : true } ) ;
3378 const githubToken = core . getInput ( 'github-token' , { required : true } ) ;
3479 const jobStatus = core . getInput ( 'job-status' , { required : true } ) ;
3580
3681 const isSuccessfulJobAsOfNow = 'success' === jobStatus ;
82+ const octokit = github . getOctokit ( githubToken ) ;
3783
3884 const requestParams = await core . group (
3985 'Build API params' ,
4086 async ( ) => {
41- const [ repoOwner , repoName ] = GITHUB_REPOSITORY . split ( '/' ) ;
42- const externalId = 'workflow_run' === github . context . eventName ? github . context . payload . id : GITHUB_RUN_ID ;
87+ const repoInfo = github . context . repo ;
88+ const triggeringWorkflowRunId = guessRunId ( ) ;
89+ //core.info('TMP DEBUG context=' + JSON.stringify(github.context));
90+ //const jobsForCurrentWorkflow = await getWorkflowJobsForRunId(octokit, repoInfo.owner, repoInfo.repo, github.context.runId);
91+ //core.info('TMP DEBUG jobsForCurrentWorkflow=' + JSON.stringify(jobsForCurrentWorkflow.map(v => {v.steps = '-_-'; return v;})));
92+ //const jobsForTriggeringWorkflow = await getWorkflowJobsForRunId(octokit, repoInfo.owner, repoInfo.repo, triggeringWorkflowRunId);
93+ //core.info('TMP DEBUG jobsForTriggeringWorkflow=' + JSON.stringify(jobsForTriggeringWorkflow.map(v => {v.steps = '-_-'; return v;})));
94+ //core.info('TMP DEBUG job name=' + process.env.GITHUB_JOB);
4395 const commitSha = guessCommitSha ( ) ;
4496 const startedAt = ( new Date ( ) ) . toISOString ( ) ;
4597 const prNumber = guessPrNumber ( ) ;
46- const detailsUrl = GITHUB_SERVER_URL + '/' + GITHUB_REPOSITORY + '/actions/runs/' + GITHUB_RUN_ID + '/job/' + GITHUB_JOB + ( undefined !== prNumber ? '?pr=' + prNumber : '' ) ;
47- const outputTitle = 'My title' ;
48- const outputSummary = 'My summary' ;
49- const outputText = 'My text ' ;
98+ const originalWorkflowName = guessTriggeringWorkflowName ( ) ;
99+ const outputTitle = '🔔 ' + github . context . workflow ; // Current workflow name !
100+ const originalWorkflowUrl = github . context . serverUrl + '/' + GITHUB_REPOSITORY + '/actions/runs/' + triggeringWorkflowRunId + ( undefined !== prNumber ? '?pr=' + prNumber : '' ) ;
101+ const outputSummary = '🪢 Triggered by <a href="' + originalWorkflowUrl + '" target="blank">**' + originalWorkflowName + '** workflow</a> ';
50102
51103 return {
52104 name : checkName ,
53105 head_sha : commitSha ,
54- details_url : detailsUrl ,
55- external_id : externalId ,
106+ // details_url: detailsUrl,
107+ external_id : triggeringWorkflowRunId ?. toString ( ) ,
56108 status : isSuccessfulJobAsOfNow ? 'in_progress' : 'completed' ,
57109 output : {
58110 title : outputTitle ,
59111 summary : outputSummary ,
60- text : outputText ,
61112 } ,
62113 // Conclusion
63114 conclusion : isSuccessfulJobAsOfNow ? undefined : jobStatus ,
64115 started_at : startedAt ,
65116 completed_at : isSuccessfulJobAsOfNow ? undefined : startedAt ,
66117 // Url path parameters
67- owner : repoOwner ,
68- repo : repoName
118+ owner : repoInfo . owner ,
119+ repo : repoInfo . repo
69120 } ;
70121 }
71122 ) ;
72123 core . debug ( 'API params=' + JSON . stringify ( requestParams ) ) ;
73124
74- const apiResponse = await core . group ( 'Call API' , async ( ) => {
75- const octokit = github . getOctokit ( githubToken ) ;
76-
125+ const apiResponse = await core . group ( 'Create check-run' , async ( ) => {
77126 // @TODO Move back to `octokit.rest.checks.create()`
78- const res = await octokit . request ( 'POST /repos/{owner}/{repo}/check-runs' , requestParams ) ;
79-
80- core . info ( 'TMP DEBUG0 ' + JSON . stringify ( res ) ) ;
81-
82- return res ;
127+ return octokit . request ( 'POST /repos/{owner}/{repo}/check-runs' , requestParams ) ;
83128 } ) ;
84- core . info ( 'TMP DEBUG ' + JSON . stringify ( apiResponse ) ) ;
129+ core . debug ( 'API call to ' + apiResponse . url + ' => HTTP ' + apiResponse . status ) ;
85130
86131 core . setOutput ( 'check-run-id' , apiResponse . data . id ) ;
87132 core . saveState ( 'check-run-id' , apiResponse . data . id ) ; // In order to use it during POST hook
@@ -90,21 +135,4 @@ async function run() {
90135 }
91136}
92137
93- /**
94- * @param {string } val
95- *
96- * @returns {string|undefined }
97- */
98- function undefinedIfEmpty ( val ) {
99- return ! isEmpty ( val ) ? val : undefined
100- }
101- /**
102- * @param {string } val
103- *
104- * @returns {boolean }
105- */
106- function isEmpty ( val ) {
107- return val . trim ( ) . length === 0 ;
108- }
109-
110138run ( ) ;
0 commit comments