blob: f8967f34fff11cb641ad256cd5f522a02fe1e359 [file]
import { createHash } from 'node:crypto';
import {
prepareNodeCliToolchain,
validatePreparedNodeCliToolchain,
type PinnedNodeCliToolchainDefinition,
} from './node-cli-toolchain.js';
export const MAKA_NODE_TOOLCHAIN_CONTAINER_PATH = '/opt/maka-node-toolchain';
export const MAKA_NODE_TOOLCHAIN_SPEC = {
schemaVersion: 1,
platform: 'linux',
arch: 'x64',
node: {
version: '22.23.1',
archiveUrl: 'https://nodejs.org/dist/v22.23.1/node-v22.23.1-linux-x64.tar.gz',
archiveSha256: '7a8cb04b4a1df4eaf432125324b81b29a088e73570a23259a8de1c65d07fc129',
binarySha256: '93956de2e59480474a7b46571da1651180b1a050cdf32641ebec4ce6e478e068',
},
} as const;
export const MAKA_NODE_TOOLCHAIN_FINGERPRINT = `sha256:${createHash('sha256')
.update(JSON.stringify(MAKA_NODE_TOOLCHAIN_SPEC))
.digest('hex')}`;
export interface PreparedMakaNodeToolchain {
path: string;
fingerprint: typeof MAKA_NODE_TOOLCHAIN_FINGERPRINT;
}
const DEFINITION: PinnedNodeCliToolchainDefinition<typeof MAKA_NODE_TOOLCHAIN_SPEC> = {
label: 'Maka Node runtime',
fingerprint: MAKA_NODE_TOOLCHAIN_FINGERPRINT,
spec: MAKA_NODE_TOOLCHAIN_SPEC,
node: MAKA_NODE_TOOLCHAIN_SPEC.node,
packageFiles: [],
};
export async function validatePreparedMakaNodeToolchain(
path: string,
): Promise<PreparedMakaNodeToolchain> {
await validatePreparedNodeCliToolchain(path, DEFINITION);
return { path, fingerprint: MAKA_NODE_TOOLCHAIN_FINGERPRINT };
}
export async function prepareMakaNodeToolchain(
path: string,
options: { fetchFn?: typeof fetch } = {},
): Promise<PreparedMakaNodeToolchain> {
await prepareNodeCliToolchain(path, DEFINITION, options);
return { path, fingerprint: MAKA_NODE_TOOLCHAIN_FINGERPRINT };
}