@relative-ci/agent
Version:
Send bundle stats and CI build information to RelativeCI
84 lines (78 loc) • 2.91 kB
JavaScript
;
var fs = require('fs/promises');
var path = require('path');
var fetch = require('node-fetch');
var en = require('../locales/en.js');
var debug = require('../utils/debug.js');
require('child_process');
require('env-ci');
var maskObjectProperty = require('../utils/mask-object-property.js');
var logger = require('../utils/logger.js');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var fs__default = /*#__PURE__*/_interopDefault(fs);
var path__default = /*#__PURE__*/_interopDefault(path);
var fetch__default = /*#__PURE__*/_interopDefault(fetch);
async function ingest(data, params, config = {}, logger$1 = logger.logger) {
const { key, endpoint, branch, build, buildUrl, commit, pr, slug, service, commitMessage, agentVersion, } = params;
const payload = {
key,
project: slug,
service,
agentVersion,
job: {
commit,
branch,
prNumber: pr,
buildNumber: build,
buildUrl,
commitMessage,
},
rawData: data,
};
const formattedPayload = maskObjectProperty.maskObjectProperties(payload, ['key']);
debug.debug('Payload size', Buffer.byteLength(JSON.stringify(payload)));
const { payloadFilepath } = config;
/**
* Save payload on disk for debugging
*/
if (payloadFilepath) {
logger$1.info('Save payload to', payloadFilepath);
try {
const payloadBaseDirectory = path__default.default.dirname(payloadFilepath);
await fs__default.default.mkdir(payloadBaseDirectory, { recursive: true });
await fs__default.default.writeFile(payloadFilepath, JSON.stringify(formattedPayload, null, 2));
}
catch (err) {
// On error, catch and log
logger$1.warn(`Error saving payload to "${payloadFilepath}"`, err instanceof Error ? err.message : undefined);
}
}
logger$1.log('Send bundle stats to RelativeCI', `branch=${branch}`, `commit=${commit}`);
let responseData = null;
try {
const response = await fetch__default.default(endpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=utf-8',
},
body: JSON.stringify(payload),
});
responseData = await response.json();
debug.debug('Response', responseData);
}
catch (error) {
throw new Error(en.INGEST_ERROR, { cause: error });
}
if (!responseData) {
throw new Error(en.INGEST_INVALID_DATA);
}
if (responseData.code) {
throw new Error(responseData.message, { cause: responseData });
}
if (!responseData.res) {
throw new Error(en.INGEST_INVALID_DATA, { cause: responseData });
}
return responseData;
}
module.exports = ingest;
//# sourceMappingURL=ingest.js.map