cispacempt-v2 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "main": "src/index.js",
3
3
  "name": "cispacempt-v2",
4
- "version": "0.1.0",
4
+ "version": "0.1.1",
5
5
  "description": "Fast CI engine for CodespaceMPT with script stages and file system hooks",
6
6
  "author": "argentidev",
7
7
  "license": "MIT",
package/src/index.js CHANGED
@@ -2,8 +2,60 @@ const path = require("path"),
2
2
  os = require("os"),
3
3
  fs = require("fs"),
4
4
  { spawn } = require("child_process"),
5
- { prepareProotEnv } = require("./lib/prootEnv"),
6
5
  yaml = require("js-yaml"),
6
+ https = require("https"),
7
+ { spawnSync } = require("child_process"),
8
+ rootfsMap = {
9
+ debian: "https://github.com/Proot-me/proot-distro/releases/download/20240515/debian-rootfs.tar.gz",
10
+ alpine: "https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-minirootfs-3.19.1-x86_64.tar.gz",
11
+ ubuntu: "https://partner-images.canonical.com/core/focal/current/ubuntu-focal-core-cloudimg-amd64-root.tar.gz",
12
+ arch: "https://mirror.rackspace.com/archlinux/iso/latest/archlinux-bootstrap-x86_64.tar.gz",
13
+ void: "https://repo-default.voidlinux.org/live/current/void-x86_64-ROOTFS-20230628.tar.xz",
14
+ fedora: "https://download.fedoraproject.org/pub/fedora/linux/releases/39/Container/x86_64/images/Fedora-Container-Base-39-1.5.x86_64.tar.xz",
15
+ centos: "https://buildlogs.centos.org/centos/7/container/x86_64/images/CentOS-7-Container-7.9.2009-20210916.0.x86_64.tar.xz"
16
+ };
17
+
18
+ const downloadFile = (url, dest) => new Promise((resolve, reject) => {
19
+ const file = fs.createWriteStream(dest);
20
+ https.get(url, (response) => {
21
+ response.pipe(file);
22
+ file.on("finish", () => {
23
+ file.close(resolve);
24
+ });
25
+ }).on("error", (err) => {
26
+ fs.unlinkSync(dest);
27
+ reject(err);
28
+ });
29
+ }),
30
+ prepareProotEnv = async (osName, cacheDir) => {
31
+ const prootBin = path.join(cacheDir, "proot");
32
+ const rootfsDir = path.join(cacheDir, `rootfs_${osName}`);
33
+ const tarball = path.join(cacheDir, `${osName}.tar.${osName.includes("xz") ? "xz" : "gz"}`);
34
+
35
+ // Descargar proot
36
+ if (!fs.existsSync(prootBin)) {
37
+ const url = "https://github.com/proot-me/proot/releases/download/v5.3.0/proot-static";
38
+ await downloadFile(url, prootBin);
39
+ fs.chmodSync(prootBin, 0o755);
40
+ }
41
+
42
+ // Descargar rootfs
43
+ if (!fs.existsSync(rootfsDir)) {
44
+ const url = rootfsMap[osName];
45
+ if (!url) throw new Error(`Unsupported OS "${osName}"`);
46
+ await downloadFile(url, tarball);
47
+
48
+ fs.mkdirSync(rootfsDir, { recursive: true });
49
+
50
+ // Extraer el tarball
51
+ const extCmd = tarball.endsWith(".xz") ? "tar -xJf" : "tar -xzf";
52
+ spawnSync(extCmd, [tarball, "-C", rootfsDir], { shell: true });
53
+
54
+ fs.unlinkSync(tarball); // limpiar
55
+ }
56
+
57
+ return { prootBin, rootfsDir };
58
+ },
7
59
  getCPUUsageSnapshot = function () {
8
60
  const cpus = os.cpus();
9
61
  return cpus.map(cpu => ({ ...cpu.times }));
@@ -214,8 +266,9 @@ module.exports = {
214
266
  await new Promise(async (res) => {
215
267
  const commandToRun = resolvedCommand;
216
268
  let finalCommand;
217
- if (ciScript.os && Object.keys(require("./lib/prootEnv").prepareProotEnv.rootfsMap || {}).includes(ciScript.os)) {
269
+ if (ciScript.os && Object.keys(rootfsMap || {}).includes(ciScript.os)) {
218
270
  const { prootBin, rootfsDir } = await prepareProotEnv(ciScript.os, path.join(__dirname, "ci_proot_cache"));
271
+ console.log("PROOT BIN:", prootBin, fs.existsSync(prootBin));
219
272
 
220
273
  finalCommand = `${prootBin} -R ${rootfsDir} -b ${tempDir}:/sandbox -w /sandbox /bin/sh -c "${commandToRun.replace(/"/g, '\\"')}"`;
221
274
  } else {
@@ -1,59 +0,0 @@
1
- const fs = require("fs");
2
- const path = require("path");
3
- const { spawnSync } = require("child_process");
4
- const https = require("https");
5
-
6
- const rootfsMap = {
7
- debian: "https://github.com/Proot-me/proot-distro/releases/download/20240515/debian-rootfs.tar.gz",
8
- alpine: "https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-minirootfs-3.19.1-x86_64.tar.gz",
9
- ubuntu: "https://partner-images.canonical.com/core/focal/current/ubuntu-focal-core-cloudimg-amd64-root.tar.gz",
10
- arch: "https://mirror.rackspace.com/archlinux/iso/latest/archlinux-bootstrap-x86_64.tar.gz",
11
- void: "https://repo-default.voidlinux.org/live/current/void-x86_64-ROOTFS-20230628.tar.xz",
12
- fedora: "https://download.fedoraproject.org/pub/fedora/linux/releases/39/Container/x86_64/images/Fedora-Container-Base-39-1.5.x86_64.tar.xz",
13
- centos: "https://buildlogs.centos.org/centos/7/container/x86_64/images/CentOS-7-Container-7.9.2009-20210916.0.x86_64.tar.xz"
14
- };
15
-
16
- const downloadFile = (url, dest) => new Promise((resolve, reject) => {
17
- const file = fs.createWriteStream(dest);
18
- https.get(url, (response) => {
19
- response.pipe(file);
20
- file.on("finish", () => {
21
- file.close(resolve);
22
- });
23
- }).on("error", (err) => {
24
- fs.unlinkSync(dest);
25
- reject(err);
26
- });
27
- });
28
-
29
- async function prepareProotEnv(osName, cacheDir) {
30
- const prootBin = path.join(cacheDir, "proot");
31
- const rootfsDir = path.join(cacheDir, `rootfs_${osName}`);
32
- const tarball = path.join(cacheDir, `${osName}.tar.${osName.includes("xz") ? "xz" : "gz"}`);
33
-
34
- // Descargar proot
35
- if (!fs.existsSync(prootBin)) {
36
- const url = "https://github.com/proot-me/proot/releases/download/v5.3.0/proot-static";
37
- await downloadFile(url, prootBin);
38
- fs.chmodSync(prootBin, 0o755);
39
- }
40
-
41
- // Descargar rootfs
42
- if (!fs.existsSync(rootfsDir)) {
43
- const url = rootfsMap[osName];
44
- if (!url) throw new Error(`Unsupported OS "${osName}"`);
45
- await downloadFile(url, tarball);
46
-
47
- fs.mkdirSync(rootfsDir, { recursive: true });
48
-
49
- // Extraer el tarball
50
- const extCmd = tarball.endsWith(".xz") ? "tar -xJf" : "tar -xzf";
51
- spawnSync(extCmd, [tarball, "-C", rootfsDir], { shell: true });
52
-
53
- fs.unlinkSync(tarball); // limpiar
54
- }
55
-
56
- return { prootBin, rootfsDir };
57
- }
58
-
59
- module.exports = { prepareProotEnv };