UNPKG

setup-cpp

Version:

Install all the tools required for building and testing C++/C projects.

89 lines 10.6 kB
import { tmpdir } from "os"; import { dirname, join } from "path"; import { warning } from "ci-log"; import { addPath } from "envosman"; import { execaSync } from "execa"; import { DownloaderHelper } from "node-downloader-helper"; import { installAptPack } from "setup-apt"; import which from "which"; /* eslint-disable require-atomic-updates */ let binDir; /** * Install brew * * @param options - Options for adding the brew path to the rc file * @returns The path to the bin directory of brew if brew is installed, otherwise undefined if brew is not supported on the current platform */ export async function setupBrew(options = {}) { if ( // brew is only available on darwin and linux !["darwin", "linux"].includes(process.platform) // brew is only supported on Linux x64 || (process.platform === "linux" && process.arch !== "x64")) { warning(`Brew is not supported on ${process.platform} ${process.arch}`); return undefined; } // check if the function has already been called if (typeof binDir === "string") { return { binDir }; } // check if brew is already installed const maybeBinDir = await which("brew", { nothrow: true }); if (maybeBinDir !== null) { binDir = dirname(maybeBinDir); return { binDir }; } // download the installation script await installAptPack([{ name: "ca-certificates" }]); const dl = new DownloaderHelper("https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh", tmpdir(), { fileName: "install-brew.sh", }); dl.on("error", (err) => { throw new Error(`Failed to download the brew installer script: ${err}`); }); await dl.start(); // brew installation is not thread-safe execaSync("/bin/bash", [dl.getDownloadPath()], { stdio: "inherit", env: { NONINTERACTIVE: "1", }, }); // add the bin directory to the PATH binDir = getBrewBinDir(); await addPath(binDir, options.rcOptions); return { binDir }; } /** * Get the path to the bin directory of brew * @returns {string} The path where brew binary is installed * * Based on the installation script from https://brew.sh */ export function getBrewBinDir() { return join(getBrewDir(), "bin"); } export function getBrewBinPath() { return join(getBrewBinDir(), "brew"); } /** * Get the path where brew is installed * @returns {string} The path where brew is installed * * Based on the installation script from https://brew.sh */ export function getBrewDir() { if (process.platform === "darwin") { if (process.arch === "arm64") { return "/opt/homebrew"; } else { return "/usr/local"; } } if (process.platform === "linux") { return "/home/linuxbrew/.linuxbrew"; } throw new Error("Unsupported platform for brew"); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnN0YWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDM0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNoQyxPQUFPLEVBQXVCLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDMUMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBR3pCLDJDQUEyQztBQUMzQyxJQUFJLE1BQTBCLENBQUE7QUFhOUI7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FBQyxVQUE0QixFQUFFO0lBQzVEO0lBQ0UsNkNBQTZDO0lBQzdDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDL0Msc0NBQXNDO1dBQ25DLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFDM0QsQ0FBQztRQUNELE9BQU8sQ0FBQyw0QkFBNEIsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUN2RSxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFBO0lBQ25CLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDMUQsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDekIsTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxNQUFNLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ25ELE1BQU0sRUFBRSxHQUFHLElBQUksZ0JBQWdCLENBQUMsb0VBQW9FLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDOUcsUUFBUSxFQUFFLGlCQUFpQjtLQUM1QixDQUFDLENBQUE7SUFDRixFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDekUsQ0FBQyxDQUFDLENBQUE7SUFDRixNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUVoQix1Q0FBdUM7SUFDdkMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFO1FBQzdDLEtBQUssRUFBRSxTQUFTO1FBQ2hCLEdBQUcsRUFBRTtZQUNILGNBQWMsRUFBRSxHQUFHO1NBQ3BCO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsb0NBQW9DO0lBQ3BDLE1BQU0sR0FBRyxhQUFhLEVBQUUsQ0FBQTtJQUN4QixNQUFNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRXhDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQTtBQUNuQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWM7SUFDNUIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDdEMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFVBQVU7SUFDeEIsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM3QixPQUFPLGVBQWUsQ0FBQTtRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sWUFBWSxDQUFBO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLE9BQU8sNEJBQTRCLENBQUE7SUFDckMsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQTtBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm9zXCJcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiXG5pbXBvcnQgeyB3YXJuaW5nIH0gZnJvbSBcImNpLWxvZ1wiXG5pbXBvcnQgeyB0eXBlIEFkZFBhdGhPcHRpb25zLCBhZGRQYXRoIH0gZnJvbSBcImVudm9zbWFuXCJcbmltcG9ydCB7IGV4ZWNhU3luYyB9IGZyb20gXCJleGVjYVwiXG5pbXBvcnQgeyBEb3dubG9hZGVySGVscGVyIH0gZnJvbSBcIm5vZGUtZG93bmxvYWRlci1oZWxwZXJcIlxuaW1wb3J0IHsgaW5zdGFsbEFwdFBhY2sgfSBmcm9tIFwic2V0dXAtYXB0XCJcbmltcG9ydCB3aGljaCBmcm9tIFwid2hpY2hcIlxuaW1wb3J0IHR5cGUgeyBJbnN0YWxsYXRpb25JbmZvIH0gZnJvbSBcIi4vSW5zdGFsbGF0aW9uSW5mby5qc1wiXG5cbi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXMgKi9cbmxldCBiaW5EaXI6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG5leHBvcnQgdHlwZSBTZXR1cEJyZXdPcHRpb25zID0ge1xuICAvKiogT3B0aW9ucyBmb3IgYWRkaW5nIHRoZSBicmV3IHBhdGggdG8gdGhlIHJjIGZpbGUgKi9cbiAgcmNPcHRpb25zPzogQWRkUGF0aE9wdGlvbnNcbiAgLyoqIChVbnN1cHBvcnRlZCBvcHRpb24pIFRoZSB2ZXJzaW9uIG9mIGJyZXcgdG8gaW5zdGFsbCAqL1xuICB2ZXJzaW9uPzogbmV2ZXJcbiAgLyoqIChVbnN1cHBvcnRlZCBvcHRpb24pIFRoZSBkaXJlY3Rvcnkgd2hlcmUgYnJldyBzaG91bGQgYmUgaW5zdGFsbGVkICovXG4gIHNldHVwRGlyPzogbmV2ZXJcbiAgLyoqIChVbnN1cHBvcnRlZCBvcHRpb24pIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHN5c3RlbSAqL1xuICBhcmNoPzogbmV2ZXJcbn1cblxuLyoqXG4gKiBJbnN0YWxsIGJyZXdcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIGFkZGluZyB0aGUgYnJldyBwYXRoIHRvIHRoZSByYyBmaWxlXG4gKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGUgYmluIGRpcmVjdG9yeSBvZiBicmV3IGlmIGJyZXcgaXMgaW5zdGFsbGVkLCBvdGhlcndpc2UgdW5kZWZpbmVkIGlmIGJyZXcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0dXBCcmV3KG9wdGlvbnM6IFNldHVwQnJld09wdGlvbnMgPSB7fSk6IFByb21pc2U8SW5zdGFsbGF0aW9uSW5mbyB8IHVuZGVmaW5lZD4ge1xuICBpZiAoXG4gICAgLy8gYnJldyBpcyBvbmx5IGF2YWlsYWJsZSBvbiBkYXJ3aW4gYW5kIGxpbnV4XG4gICAgIVtcImRhcndpblwiLCBcImxpbnV4XCJdLmluY2x1ZGVzKHByb2Nlc3MucGxhdGZvcm0pXG4gICAgLy8gYnJldyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBMaW51eCB4NjRcbiAgICB8fCAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJsaW51eFwiICYmIHByb2Nlc3MuYXJjaCAhPT0gXCJ4NjRcIilcbiAgKSB7XG4gICAgd2FybmluZyhgQnJldyBpcyBub3Qgc3VwcG9ydGVkIG9uICR7cHJvY2Vzcy5wbGF0Zm9ybX0gJHtwcm9jZXNzLmFyY2h9YClcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBjaGVjayBpZiB0aGUgZnVuY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBjYWxsZWRcbiAgaWYgKHR5cGVvZiBiaW5EaXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4geyBiaW5EaXIgfVxuICB9XG5cbiAgLy8gY2hlY2sgaWYgYnJldyBpcyBhbHJlYWR5IGluc3RhbGxlZFxuICBjb25zdCBtYXliZUJpbkRpciA9IGF3YWl0IHdoaWNoKFwiYnJld1wiLCB7IG5vdGhyb3c6IHRydWUgfSlcbiAgaWYgKG1heWJlQmluRGlyICE9PSBudWxsKSB7XG4gICAgYmluRGlyID0gZGlybmFtZShtYXliZUJpbkRpcilcbiAgICByZXR1cm4geyBiaW5EaXIgfVxuICB9XG5cbiAgLy8gZG93bmxvYWQgdGhlIGluc3RhbGxhdGlvbiBzY3JpcHRcbiAgYXdhaXQgaW5zdGFsbEFwdFBhY2soW3sgbmFtZTogXCJjYS1jZXJ0aWZpY2F0ZXNcIiB9XSlcbiAgY29uc3QgZGwgPSBuZXcgRG93bmxvYWRlckhlbHBlcihcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Ib21lYnJldy9pbnN0YWxsL0hFQUQvaW5zdGFsbC5zaFwiLCB0bXBkaXIoKSwge1xuICAgIGZpbGVOYW1lOiBcImluc3RhbGwtYnJldy5zaFwiLFxuICB9KVxuICBkbC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkb3dubG9hZCB0aGUgYnJldyBpbnN0YWxsZXIgc2NyaXB0OiAke2Vycn1gKVxuICB9KVxuICBhd2FpdCBkbC5zdGFydCgpXG5cbiAgLy8gYnJldyBpbnN0YWxsYXRpb24gaXMgbm90IHRocmVhZC1zYWZlXG4gIGV4ZWNhU3luYyhcIi9iaW4vYmFzaFwiLCBbZGwuZ2V0RG93bmxvYWRQYXRoKCldLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIGVudjoge1xuICAgICAgTk9OSU5URVJBQ1RJVkU6IFwiMVwiLFxuICAgIH0sXG4gIH0pXG5cbiAgLy8gYWRkIHRoZSBiaW4gZGlyZWN0b3J5IHRvIHRoZSBQQVRIXG4gIGJpbkRpciA9IGdldEJyZXdCaW5EaXIoKVxuICBhd2FpdCBhZGRQYXRoKGJpbkRpciwgb3B0aW9ucy5yY09wdGlvbnMpXG5cbiAgcmV0dXJuIHsgYmluRGlyIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHBhdGggdG8gdGhlIGJpbiBkaXJlY3Rvcnkgb2YgYnJld1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggd2hlcmUgYnJldyBiaW5hcnkgaXMgaW5zdGFsbGVkXG4gKlxuICogQmFzZWQgb24gdGhlIGluc3RhbGxhdGlvbiBzY3JpcHQgZnJvbSBodHRwczovL2JyZXcuc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyZXdCaW5EaXIoKSB7XG4gIHJldHVybiBqb2luKGdldEJyZXdEaXIoKSwgXCJiaW5cIilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJyZXdCaW5QYXRoKCkge1xuICByZXR1cm4gam9pbihnZXRCcmV3QmluRGlyKCksIFwiYnJld1wiKVxufVxuXG4vKipcbiAqIEdldCB0aGUgcGF0aCB3aGVyZSBicmV3IGlzIGluc3RhbGxlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggd2hlcmUgYnJldyBpcyBpbnN0YWxsZWRcbiAqXG4gKiBCYXNlZCBvbiB0aGUgaW5zdGFsbGF0aW9uIHNjcmlwdCBmcm9tIGh0dHBzOi8vYnJldy5zaFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJld0RpcigpIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIpIHtcbiAgICBpZiAocHJvY2Vzcy5hcmNoID09PSBcImFybTY0XCIpIHtcbiAgICAgIHJldHVybiBcIi9vcHQvaG9tZWJyZXdcIlxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCIvdXNyL2xvY2FsXCJcbiAgICB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJsaW51eFwiKSB7XG4gICAgcmV0dXJuIFwiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXdcIlxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgcGxhdGZvcm0gZm9yIGJyZXdcIilcbn1cbiJdfQ==