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
66function guessPrNumber ( ) {
7+ if ( 'pull_request' === github . context . eventName ) {
8+ return github . context . payload . number
9+ }
710 if ( 'workflow_run' === github . context . eventName ) {
8- return 'pull_request' === github . context . payload . event && github . context . payload . pull_requests [ 0 ] ?. number
11+ return 'pull_request' === github . context . payload . workflow_run . event
912 ? github . context . payload . pull_requests [ 0 ] ?. number
1013 : undefined
1114 ;
1215 }
1316
14- return 'pull_request' === github . context . eventName ? github . context . payload . number : undefined ;
17+ return undefined ;
1518}
1619
1720function 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 }}"
21+ if ( 'pull_request' === github . context . eventName ) {
22+ return github . context . payload . pull_request . head . sha ;
23+ }
24+ if ( 'push' === github . context . eventName ) {
25+ return github . context . payload . after ;
26+ }
1927 if ( 'workflow_run' === github . context . eventName ) {
20- return 'pull_request' === github . context . payload . event || 'push' === github . context . payload . event
28+ return [ 'pull_request' , 'push' ] . includes ( github . context . payload . workflow_run . event )
2129 ? github . context . payload . head_sha
2230 : undefined
2331 ;
2432 }
2533
26- return 'pull_request' === github . context . eventName ? github . context . payload . number : undefined ;
34+ throw new Error ( 'Unable to guess the commit SHA !' ) ;
35+ }
36+
37+ function guessTriggeringWorkflowName ( ) {
38+ if ( 'workflow_run' === github . context . eventName ) {
39+ return github . context . payload . workflow . name ;
40+ }
41+
42+ return github . context . workflow ;
43+ }
44+
45+ function guessRunId ( ) {
46+ if ( 'workflow_run' === github . context . eventName ) {
47+ return github . context . payload . id ;
48+ }
49+
50+ return github . context . runId ;
51+ }
52+
53+ async function getWorkflowJobsForRunId ( octokit , owner , repo , runId ) {
54+ return octokit . paginate (
55+ 'GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs' ,
56+ {
57+ //filter: 'latest',
58+ // Url path parameters
59+ owner : owner ,
60+ repo : repo ,
61+ run_id : runId
62+ }
63+ ) ;
2764}
2865
2966async function run ( ) {
30- core . info ( 'TMP DEBUG ' + JSON . stringify ( github . context ) ) ; throw 'plop' ;
3167 /** INPUTS **/
3268 const checkName = core . getInput ( 'name' , { required : true } ) ;
3369 const githubToken = core . getInput ( 'github-token' , { required : true } ) ;
3470 const jobStatus = core . getInput ( 'job-status' , { required : true } ) ;
3571
3672 const isSuccessfulJobAsOfNow = 'success' === jobStatus ;
73+ const octokit = github . getOctokit ( githubToken ) ;
3774
3875 const requestParams = await core . group (
3976 'Build API params' ,
4077 async ( ) => {
41- const [ repoOwner , repoName ] = GITHUB_REPOSITORY . split ( '/' ) ;
42- const externalId = 'workflow_run' === github . context . eventName ? github . context . payload . id : GITHUB_RUN_ID ;
78+ const repoInfo = github . context . repo ;
79+ const triggeringWorkflowRunId = guessRunId ( ) ;
80+ core . info ( 'TMP DEBUG context=' + JSON . stringify ( github . context ) ) ;
81+ const jobsForCurrentWorkflow = await getWorkflowJobsForRunId ( octokit , repoInfo . owner , repoInfo . repo , github . context . runId ) ;
82+ core . info ( 'TMP DEBUG jobsForCurrentWorkflow=' + JSON . stringify ( jobsForCurrentWorkflow . map ( v => { v . steps = '-_-' ; return v ; } ) ) ) ;
83+ const jobsForTriggeringWorkflow = await getWorkflowJobsForRunId ( octokit , repoInfo . owner , repoInfo . repo , triggeringWorkflowRunId ) ;
84+ core . info ( 'TMP DEBUG jobsForTriggeringWorkflow=' + JSON . stringify ( jobsForTriggeringWorkflow . map ( v => { v . steps = '-_-' ; return v ; } ) ) ) ;
85+ core . info ( 'TMP DEBUG job name=' + process . env . GITHUB_JOB ) ;
4386 const commitSha = guessCommitSha ( ) ;
4487 const startedAt = ( new Date ( ) ) . toISOString ( ) ;
4588 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 ' ;
89+ const originalWorkflowName = guessTriggeringWorkflowName ( ) ;
90+ const outputTitle = '🔔 ' + github . context . workflow ; // Current workflow name !
91+ const originalWorkflowUrl = github . context . serverUrl + '/' + GITHUB_REPOSITORY + '/actions/runs/' + triggeringWorkflowRunId + ( undefined !== prNumber ? '?pr=' + prNumber : '' ) ;
92+ const outputSummary = '🪢 Triggered by <a href="' + originalWorkflowUrl + '" target="blank">**' + originalWorkflowName + '** workflow</a> ';
5093
5194 return {
5295 name : checkName ,
5396 head_sha : commitSha ,
54- details_url : detailsUrl ,
55- external_id : externalId ,
97+ // details_url: detailsUrl,
98+ external_id : triggeringWorkflowRunId ,
5699 status : isSuccessfulJobAsOfNow ? 'in_progress' : 'completed' ,
57100 output : {
58101 title : outputTitle ,
59102 summary : outputSummary ,
60- text : outputText ,
61103 } ,
62104 // Conclusion
63105 conclusion : isSuccessfulJobAsOfNow ? undefined : jobStatus ,
64106 started_at : startedAt ,
65107 completed_at : isSuccessfulJobAsOfNow ? undefined : startedAt ,
66108 // Url path parameters
67- owner : repoOwner ,
68- repo : repoName
109+ owner : repoInfo . owner ,
110+ repo : repoInfo . repo
69111 } ;
70112 }
71113 ) ;
72114 core . debug ( 'API params=' + JSON . stringify ( requestParams ) ) ;
73115
74- const apiResponse = await core . group ( 'Call API' , async ( ) => {
75- const octokit = github . getOctokit ( githubToken ) ;
76-
116+ const apiResponse = await core . group ( 'Create check-run' , async ( ) => {
77117 // @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 ;
118+ return octokit . request ( 'POST /repos/{owner}/{repo}/check-runs' , requestParams ) ;
83119 } ) ;
84- core . info ( 'TMP DEBUG ' + JSON . stringify ( apiResponse ) ) ;
120+ core . debug ( 'API call to ' + apiResponse . url + ' => HTTP ' + apiResponse . status ) ;
85121
86122 core . setOutput ( 'check-run-id' , apiResponse . data . id ) ;
87123 core . saveState ( 'check-run-id' , apiResponse . data . id ) ; // In order to use it during POST hook
@@ -90,21 +126,4 @@ async function run() {
90126 }
91127}
92128
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-
110129run ( ) ;
0 commit comments