zephyr-agent
Version:
Zephyr plugin agent
51 lines (50 loc) • 2.19 kB
JavaScript
import "node:module";
import { createHash } from "crypto";
import { ZeErrors, ZephyrError } from "../errors/index.mjs";
import { uploadSnapshot } from "../http/upload-snapshot.mjs";
import { green, yellow } from "../logging/picocolor.mjs";
async function zeUploadSnapshot(zephyr_engine, { snapshot }) {
const zeStart = Date.now();
const application_uid = zephyr_engine.application_uid;
const logger = await zephyr_engine.logger;
const buildEnv = zephyr_engine.env.isCI ? 'ci' : 'local';
const envs = process.env;
const ze_envs = {};
for (const [key, value] of Object.entries(envs))if (key.startsWith('ZE_PUBLIC_') && 'string' == typeof value) ze_envs[key] = value;
const zeVarsEntries = Object.entries(ze_envs);
if (zeVarsEntries.length > 0) {
const sortedVariables = zeVarsEntries.map(([key, value])=>`${key}=${value}`).sort().join('\n');
const canonicalString = `${application_uid}\n${sortedVariables}`;
const hash = createHash('sha256');
hash.update(canonicalString, 'utf-8');
snapshot.ze_envs_hash = hash.digest('hex');
zephyr_engine.ze_env_vars = ze_envs;
zephyr_engine.ze_env_vars_hash = snapshot.ze_envs_hash;
}
const edgeTodo = await uploadSnapshot({
body: snapshot,
application_uid
});
const worker_version = edgeTodo?.worker_version;
if ('string' == typeof worker_version && worker_version.length > 0) {
zephyr_engine.worker_version = worker_version;
snapshot.worker_version = snapshot.worker_version ?? worker_version;
}
const versionUrl = edgeTodo?.urls?.version;
if (!versionUrl) {
logger({
level: 'error',
action: 'snapshot:upload:failed',
message: `failed uploading of ${buildEnv} snapshot to zephyr`
});
throw new ZephyrError(ZeErrors.ERR_SNAPSHOT_UPLOADS_NO_RESULTS);
}
logger({
level: 'info',
action: 'snapshot:upload:done',
message: `Uploaded ${green(buildEnv)} snapshot in ${yellow(`${Date.now() - zeStart}`)}ms`
});
return versionUrl;
}
export { zeUploadSnapshot };
//# sourceMappingURL=ze-upload-snapshot.mjs.map