cispacempt-v2 0.1.1 → 0.1.2

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.1",
4
+ "version": "0.1.2",
5
5
  "description": "Fast CI engine for CodespaceMPT with script stages and file system hooks",
6
6
  "author": "argentidev",
7
7
  "license": "MIT",
Binary file
package/src/index.js CHANGED
@@ -6,7 +6,7 @@ const path = require("path"),
6
6
  https = require("https"),
7
7
  { spawnSync } = require("child_process"),
8
8
  rootfsMap = {
9
- debian: "https://github.com/Proot-me/proot-distro/releases/download/20240515/debian-rootfs.tar.gz",
9
+ debian: "https://github.com/EXALAB/Anlinux-Resources/blob/master/Rootfs/Debian/arm64/debian-rootfs-arm64.tar.xz",
10
10
  alpine: "https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-minirootfs-3.19.1-x86_64.tar.gz",
11
11
  ubuntu: "https://partner-images.canonical.com/core/focal/current/ubuntu-focal-core-cloudimg-amd64-root.tar.gz",
12
12
  arch: "https://mirror.rackspace.com/archlinux/iso/latest/archlinux-bootstrap-x86_64.tar.gz",
@@ -16,32 +16,64 @@ const path = require("path"),
16
16
  };
17
17
 
18
18
  const downloadFile = (url, dest) => new Promise((resolve, reject) => {
19
+ console.log(`Starting download from: ${url}`);
19
20
  const file = fs.createWriteStream(dest);
20
- https.get(url, (response) => {
21
+
22
+ const request = https.get(url, (response) => {
23
+ if (response.statusCode >= 300 && response.statusCode < 400 && response.headers.location) {
24
+ console.log(`Redirected to: ${response.headers.location}`);
25
+ // Si hay redirección, cerrar este stream y descargar la nueva url
26
+ file.close();
27
+ fs.unlinkSync(dest);
28
+ return downloadFile(response.headers.location, dest).then(resolve).catch(reject);
29
+ }
30
+
31
+ if (response.statusCode !== 200) {
32
+ file.close();
33
+ fs.unlinkSync(dest);
34
+ return reject(new Error(`Failed to download file, status code: ${response.statusCode}`));
35
+ }
36
+
21
37
  response.pipe(file);
38
+
22
39
  file.on("finish", () => {
40
+ console.log(`Download finished: ${dest}`);
23
41
  file.close(resolve);
24
42
  });
25
- }).on("error", (err) => {
43
+ });
44
+
45
+ request.on("error", (err) => {
46
+ console.error(`Download error: ${err.message}`);
47
+ file.close();
26
48
  fs.unlinkSync(dest);
27
49
  reject(err);
28
50
  });
29
- }),
51
+
52
+ file.on("error", (err) => {
53
+ console.error(`File write error: ${err.message}`);
54
+ file.close();
55
+ fs.unlinkSync(dest);
56
+ reject(err);
57
+ });
58
+ }),
30
59
  prepareProotEnv = async (osName, cacheDir) => {
31
60
  const prootBin = path.join(cacheDir, "proot");
32
61
  const rootfsDir = path.join(cacheDir, `rootfs_${osName}`);
33
62
  const tarball = path.join(cacheDir, `${osName}.tar.${osName.includes("xz") ? "xz" : "gz"}`);
34
63
 
64
+ // Crear el directorio cacheDir si no existe
65
+ fs.mkdirSync(cacheDir, { recursive: true });
66
+
35
67
  // Descargar proot
36
68
  if (!fs.existsSync(prootBin)) {
37
- const url = "https://github.com/proot-me/proot/releases/download/v5.3.0/proot-static";
69
+ const url = "https://proot.gitlab.io/proot/bin/proot";
38
70
  await downloadFile(url, prootBin);
39
71
  fs.chmodSync(prootBin, 0o755);
40
72
  }
41
73
 
42
74
  // Descargar rootfs
43
75
  if (!fs.existsSync(rootfsDir)) {
44
- const url = rootfsMap[osName];
76
+ const url = rootfsMap[osName];
45
77
  if (!url) throw new Error(`Unsupported OS "${osName}"`);
46
78
  await downloadFile(url, tarball);
47
79
 
@@ -53,7 +85,7 @@ const path = require("path"),
53
85
 
54
86
  fs.unlinkSync(tarball); // limpiar
55
87
  }
56
-
88
+
57
89
  return { prootBin, rootfsDir };
58
90
  },
59
91
  getCPUUsageSnapshot = function () {
@@ -268,7 +300,7 @@ module.exports = {
268
300
  let finalCommand;
269
301
  if (ciScript.os && Object.keys(rootfsMap || {}).includes(ciScript.os)) {
270
302
  const { prootBin, rootfsDir } = await prepareProotEnv(ciScript.os, path.join(__dirname, "ci_proot_cache"));
271
- console.log("PROOT BIN:", prootBin, fs.existsSync(prootBin));
303
+ console.log("PROOT BIN:", prootBin, fs.existsSync(prootBin));
272
304
 
273
305
  finalCommand = `${prootBin} -R ${rootfsDir} -b ${tempDir}:/sandbox -w /sandbox /bin/sh -c "${commandToRun.replace(/"/g, '\\"')}"`;
274
306
  } else {