const cp = require('child_process') const fetch = require('node-fetch') const checks = require('./checks') const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/') function getCurrentCommitSha () { return cp .execSync('git rev-parse HEAD') .toString() .trim() } // The SHA provied by GITHUB_SHA is the merge (PR) commit. // We need to get the current commit sha ourself. const sha = getCurrentCommitSha() async function setStatus (context, state, description) { return fetch(`https://api.github.com/repos/${owner}/${repo}/statuses/${sha}`, { method: 'POST', body: JSON.stringify({ state, description, context }), headers: { Authorization: `Bearer ${process.env.GITHUB_TOKEN}`, 'Content-Type': 'application/json' } }) } (async () => { console.log(`Starting status checks for commit ${sha}`) // Run in parallel await Promise.all( checks.map(async check => { const { name, callback } = check await setStatus(name, 'pending', 'Running check..') try { const response = await callback() await setStatus(name, 'success', response) } catch (err) { const message = err ? err.message : 'Something went wrong' await setStatus(name, 'failure', message) } }) ) console.log('Finished status checks') })()