163 lines
5.3 KiB
JavaScript
163 lines
5.3 KiB
JavaScript
const Handlebars = require('handlebars');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const { Octokit, App } = require('octokit');
|
|
|
|
async function addToContextAndValidate(context) {
|
|
if (!context.env.WORKFLOW_CONCLUSION) {
|
|
throw new Error('Please ensure the env var WORKFLOW_CONCLUSION is set');
|
|
}
|
|
if (!context.env.GITHUB_TOKEN) {
|
|
throw new Error('Please ensure the env var GITHUB_TOKEN is set');
|
|
}
|
|
if (!context.env.GITHUB_RUN_ID) {
|
|
throw new Error('Please ensure the env var GITHUB_RUN_ID is set');
|
|
}
|
|
if (!context.env.GITHUB_REPOSITORY) {
|
|
throw new Error('Please ensure the env var GITHUB_REPOSITORY is set');
|
|
}
|
|
}
|
|
|
|
async function getMessageBody(context) {
|
|
const source = fs
|
|
.readFileSync(
|
|
context.env.WORKFLOW_CONCLUSION === 'success'
|
|
? path.resolve(__dirname, 'templates', 'success')
|
|
: path.resolve(__dirname, 'templates', 'failure'),
|
|
)
|
|
.toString();
|
|
const template = Handlebars.compile(source);
|
|
|
|
// get job details from GitHub API
|
|
const octokit = new Octokit({ auth: context.env.GITHUB_TOKEN });
|
|
const [owner, repo] = context.env.GITHUB_REPOSITORY.split('/');
|
|
const {
|
|
data: { jobs },
|
|
} = await octokit.rest.actions.listJobsForWorkflowRun({
|
|
run_id: context.env.GITHUB_RUN_ID,
|
|
owner,
|
|
repo,
|
|
});
|
|
|
|
// uncomment this to see what is available for each job
|
|
if(process.env.SHOW_DEBUG) {
|
|
console.dir(jobs, { depth: null });
|
|
}
|
|
|
|
/*
|
|
|
|
a sample of the response is:
|
|
|
|
{
|
|
total_count: 10,
|
|
jobs: [
|
|
{
|
|
id: 5182940024,
|
|
run_id: 1840752095,
|
|
run_url: 'https://api.github.com/repos/nymtech/nym/actions/runs/1840752095',
|
|
run_attempt: 1,
|
|
node_id: 'CR_kwDODdjOis8AAAABNO1jeA',
|
|
head_sha: 'aa00eb70d57751bfa556bd3602df87c7473367fc',
|
|
url: 'https://api.github.com/repos/nymtech/nym/actions/jobs/5182940024',
|
|
html_url: 'https://github.com/nymtech/nym/runs/5182940024?check_suite_focus=true',
|
|
status: 'completed',
|
|
conclusion: 'success',
|
|
started_at: '2022-02-14T11:28:34Z',
|
|
completed_at: '2022-02-14T11:28:38Z',
|
|
name: 'matrix_prep',
|
|
steps: [
|
|
{
|
|
name: 'Set up job',
|
|
status: 'completed',
|
|
conclusion: 'success',
|
|
number: 1,
|
|
started_at: '2022-02-14T13:28:34.000+02:00',
|
|
completed_at: '2022-02-14T13:28:36.000+02:00'
|
|
},
|
|
{
|
|
name: 'Run actions/checkout@v2',
|
|
status: 'completed',
|
|
conclusion: 'success',
|
|
number: 2,
|
|
started_at: '2022-02-14T13:28:36.000+02:00',
|
|
completed_at: '2022-02-14T13:28:37.000+02:00'
|
|
},
|
|
...
|
|
],
|
|
check_run_url: 'https://api.github.com/repos/nymtech/nym/check-runs/5182940024',
|
|
labels: [ 'ubuntu-20.04' ],
|
|
runner_id: 1,
|
|
runner_name: 'Hosted Agent',
|
|
runner_group_id: 2,
|
|
runner_group_name: 'GitHub Actions'
|
|
},
|
|
{
|
|
id: 5182943473,
|
|
run_id: 1840752095,
|
|
run_url: 'https://api.github.com/repos/nymtech/nym/actions/runs/1840752095',
|
|
run_attempt: 1,
|
|
node_id: 'CR_kwDODdjOis8AAAABNO1w8Q',
|
|
head_sha: 'aa00eb70d57751bfa556bd3602df87c7473367fc',
|
|
url: 'https://api.github.com/repos/nymtech/nym/actions/jobs/5182943473',
|
|
html_url: 'https://github.com/nymtech/nym/runs/5182943473?check_suite_focus=true',
|
|
status: 'completed',
|
|
conclusion: 'failure',
|
|
started_at: '2022-02-14T11:29:04Z',
|
|
completed_at: '2022-02-14T11:55:45Z',
|
|
name: 'build (macos-latest, stable, schedule)',
|
|
steps: [
|
|
{
|
|
name: 'Set up job',
|
|
status: 'completed',
|
|
conclusion: 'success',
|
|
number: 1,
|
|
started_at: '2022-02-14T13:29:04.000+02:00',
|
|
completed_at: '2022-02-14T13:29:26.000+02:00'
|
|
},
|
|
{
|
|
name: 'Install Dependencies (Linux)',
|
|
status: 'completed',
|
|
conclusion: 'skipped',
|
|
number: 2,
|
|
started_at: '2022-02-14T13:29:26.000+02:00',
|
|
completed_at: '2022-02-14T13:29:26.000+02:00'
|
|
},
|
|
{
|
|
name: 'Keybase - Send Notification',
|
|
status: 'completed',
|
|
conclusion: 'failure',
|
|
number: 15,
|
|
started_at: '2022-02-14T13:55:44.000+02:00',
|
|
completed_at: '2022-02-14T13:55:44.000+02:00'
|
|
},
|
|
],
|
|
check_run_url: 'https://api.github.com/repos/nymtech/nym/check-runs/5182943473',
|
|
labels: [ 'macos-latest' ],
|
|
runner_id: 4,
|
|
runner_name: 'GitHub Actions 4',
|
|
runner_group_id: 2,
|
|
runner_group_name: 'GitHub Actions'
|
|
},
|
|
...
|
|
]
|
|
}
|
|
*/
|
|
|
|
const jobResults = jobs
|
|
.map((job) => {
|
|
const icon = job.conclusion === 'success' ? '🟩' : '🟥';
|
|
|
|
// each job is converted into formatted markdown text
|
|
return `${icon} ${job.conclusion}: ${job.name} - ${job.html_url}`;
|
|
})
|
|
// and join with newlines for display in the template
|
|
.join('\n\n');
|
|
|
|
return template({ ...context, jobResults });
|
|
}
|
|
|
|
module.exports = {
|
|
addToContextAndValidate,
|
|
getMessageBody,
|
|
};
|