mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
feat: add script
This commit is contained in:
committed by
Daniel Hougaard
parent
2d2ad0724f
commit
b16ab6f763
88
npm/src/index.cjs
Normal file
88
npm/src/index.cjs
Normal file
@@ -0,0 +1,88 @@
|
||||
const { execSync } = require("child_process");
|
||||
const fs = require("fs");
|
||||
const stream = require("node:stream");
|
||||
const tar = require("tar");
|
||||
const path = require("path");
|
||||
const zlib = require("zlib");
|
||||
const packageJSON = require("../package.json");
|
||||
|
||||
const supportedPlatforms = ["linux", "darwin", "win32", "freebsd"];
|
||||
const outputDir = "bin";
|
||||
|
||||
const getPlatform = () => {
|
||||
const platform = process.platform;
|
||||
if (!supportedPlatforms.includes(platform)) {
|
||||
console.error(
|
||||
"Your platform doesn't seem to be of type darwin, linux or windows"
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
return platform;
|
||||
};
|
||||
|
||||
const getArchitecture = () => {
|
||||
const architecture = execSync("uname -m").toString().trim();
|
||||
let arch = "";
|
||||
if (architecture === "x86_64" || architecture === "amd64") {
|
||||
arch = "amd64";
|
||||
} else if (architecture === "arm64" || architecture === "aarch64") {
|
||||
arch = "arm64";
|
||||
} else if (architecture.startsWith("armv5")) {
|
||||
arch = "armv5";
|
||||
} else if (architecture.startsWith("armv6")) {
|
||||
arch = "armv6";
|
||||
} else if (architecture.startsWith("armv7")) {
|
||||
arch = "armv7";
|
||||
} else if (architecture === "i386" || architecture === "i686") {
|
||||
arch = "i386";
|
||||
} else {
|
||||
console.error(
|
||||
"Your architecture doesn't seem to be supported. Your architecture is",
|
||||
architecture
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
return arch;
|
||||
};
|
||||
|
||||
function main() {
|
||||
const PLATFORM = getPlatform();
|
||||
const ARCH = getArchitecture();
|
||||
const NUMERIC_RELEASE_VERSION = packageJSON.version;
|
||||
const LATEST_RELEASE_VERSION = `v${NUMERIC_RELEASE_VERSION}`;
|
||||
const downloadLink = `https://github.com/Infisical/infisical/releases/download/infisical-cli/${LATEST_RELEASE_VERSION}/infisical_${NUMERIC_RELEASE_VERSION}_${PLATFORM}_${ARCH}.tar.gz`;
|
||||
|
||||
if (!fs.existsSync(outputDir)) {
|
||||
fs.mkdirSync(outputDir);
|
||||
fetch(downloadLink, {
|
||||
headers: {
|
||||
Accept: "application/octet-stream",
|
||||
},
|
||||
})
|
||||
.then(async (response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error(
|
||||
`Failed to fetch: ${response.status} - ${response.statusText}`
|
||||
);
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const outStream = stream.Readable.fromWeb(response.body)
|
||||
.pipe(zlib.createGunzip())
|
||||
.pipe(
|
||||
tar.x({
|
||||
C: path.join(outputDir),
|
||||
filter: (path) => path === "infisical",
|
||||
})
|
||||
);
|
||||
|
||||
outStream.on("error", reject);
|
||||
outStream.on("close", resolve);
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Error downloading or extracting the asset:", error);
|
||||
});
|
||||
}
|
||||
}
|
||||
main();
|
||||
Reference in New Issue
Block a user