ember-material-icons
Version:
Google Material icons for your ember-cli app
82 lines (67 loc) • 2.48 kB
JavaScript
require('babel-polyfill')
const Promise = require('bluebird')
const {promisify} = Promise
const request = require('request-promise')
const Travis = require('travis-ci')
module.exports = async function travisDeployOnce ({token} = {}) {
token = token || process.env.GH_TOKEN
if (!token) throw new Error('GitHub token missing')
if (!process.env.TRAVIS === 'true') throw new Error('Not running on Travis')
if (!process.env.TRAVIS_JOB_NUMBER.endsWith('.1')) return null
if (process.env.TRAVIS_TEST_RESULT === '1') return false
if (process.env.TRAVIS_TEST_RESULT !== '0') throw new Error('Not running in Travis after_success hook')
const {private: pro} = await request({
json: true,
url: `https://api.github.com/repos/${process.env.TRAVIS_REPO_SLUG}`,
headers: {
Authorization: `token ${token}`,
'user-agent': 'travis-deploy-once'
}
})
const travis = new Travis({
pro,
version: '2.0.0',
headers: {
'user-agent': 'Travis'
}
})
await promisify(travis.authenticate, {context: travis})({
github_token: token
})
const buildId = parseInt(process.env.TRAVIS_BUILD_ID, 10)
const buildApi = travis.builds(buildId)
const {build: {job_ids: jobs}} = await promisify(buildApi.get, {context: buildApi})()
const currentJobId = parseInt(process.env.TRAVIS_JOB_ID, 10)
for (let attempt = 1; attempt <= 100; attempt++) {
let successes = 0
for (let jobId of jobs) {
if (jobId === currentJobId) {
successes++
continue
}
const jobApi = travis.jobs(jobId)
const {job} = await promisify(jobApi.get, {context: jobApi})()
if (job.allow_failure) {
successes++
continue
}
if (job.state === 'created' || job.state === 'started') {
console.error(`[Travis Deploy Once]: Aborting attempt ${attempt}, because job ${job.number} is still pending.`)
break
}
if (job.state === 'errored' || job.state === 'failed') {
console.error(`[Travis Deploy Once]: Aborting at attempt ${attempt}. Job ${job.number} failed.`)
return false
}
if (job.state === 'passed') {
successes++
}
}
if (successes >= jobs.length) {
console.error(`[Travis Deploy Once]: Success at attempt ${attempt}. All ${successes} jobs passed.`)
return true
}
await Promise.delay(3000)
}
throw new Error('Timeout. Could not get accumulated results after 100 attempts.')
}