UNPKG

buildkite-test-collector

Version:

Buildkite Test Engine collectors for JavaScript test frameworks

75 lines (62 loc) 2.43 kB
const Debug = require('../util/debug') const axios = require('axios') const CHUNK_SIZE = 5000 const DEFAULT_BUILDKITE_ANALYTICS_BASE_URL = 'https://analytics-api.buildkite.com/v1/uploads' const uploadTestResults = (env, tags, results, options, done) => { const buildkiteAnalyticsToken = options?.token || process.env.BUILDKITE_ANALYTICS_TOKEN const buildkiteAnalyticsUrl = options?.url || process.env.BUILDKITE_ANALYTICS_BASE_URL || DEFAULT_BUILDKITE_ANALYTICS_BASE_URL if (!buildkiteAnalyticsToken) { console.error('Missing BUILDKITE_ANALYTICS_TOKEN') if (done !== undefined) { return done() } return } const config = { headers: { 'Authorization': `Token token="${buildkiteAnalyticsToken}"`, 'Content-Type': 'application/json' } } const requests = []; if (Debug.enabled()) { axios.interceptors.request.use(function (config) { Debug.log(`Test Engine Sending: ${JSON.stringify(config)}`); return config; }, function (error) { if (error.response) { Debug.log(`Test Engine request error: ${error.response.status} ${error.response.statusText} ${JSON.stringify(error.response.data)}`); } else { Debug.log(`Test Engine request error: ${error.message}`) } // Do something with request error return Promise.reject(error); }); } // Add a response interceptor axios.interceptors.response.use(function (response) { // Any status code that lie within the range of 2xx cause this function to trigger // Do something with response data Debug.log(`Test Engine success response ${JSON.stringify(response.data)}`); return response; }, function (error) { if (error.response) { console.log(`⚠️ Test Engine error response: ${error.response.status} ${error.response.statusText} ${JSON.stringify(error.response.data)}`); } else { console.log(`⚠️ Test Engine error: ${error.message}`) } return Promise.reject(error); }); for (let i = 0; i < results.length; i += CHUNK_SIZE) { const data = { 'format': 'json', 'run_env': env, 'tags': tags || {}, "data": results.slice(i, i + CHUNK_SIZE), } requests.push(axios.post(buildkiteAnalyticsUrl, data, config)) } return Promise.allSettled(requests) .finally(function (responses) { if (done !== undefined) { return done() } }) } module.exports = uploadTestResults