@netlify/zip-it-and-ship-it
Version:
34 lines (33 loc) • 1.44 kB
JavaScript
import { readFile } from 'fs/promises';
import { detect, Runtime as BinaryRuntime, Arch, Platform } from '@netlify/binary-info';
import { RUNTIME } from './runtime.js';
const isValidFunctionBinary = (info) => info.arch === Arch.Amd64 && info.platform === Platform.Linux;
const warnIncompatibleBinary = function (path, binaryInfo) {
if (!global.ZISI_CLI) {
console.warn(`
Found incompatible prebuilt function binary in ${path}.
The binary needs to be built for Linux/Amd64, but it was built for ${Platform[binaryInfo.platform]}/${Arch[binaryInfo.arch]}`);
}
return undefined;
};
// Try to guess the runtime by inspecting the binary file.
export const detectBinaryRuntime = async function ({ path }) {
try {
const fileContents = await readFile(path);
const binaryInfo = detect(new Uint8Array(fileContents.buffer, fileContents.byteOffset, fileContents.byteLength / Uint8Array.BYTES_PER_ELEMENT));
if (!isValidFunctionBinary(binaryInfo)) {
return warnIncompatibleBinary(path, binaryInfo);
}
switch (binaryInfo.runtime) {
case BinaryRuntime.Go:
return RUNTIME.GO;
case BinaryRuntime.Rust:
return RUNTIME.RUST;
default:
return undefined;
}
}
catch {
// Possible errors are: non binary files, arch/platforms not supported by binary-info, path is directory
}
};