@agentgrader/sandbox-docker 2.0.0 → 3.0.0

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.
Files changed (2) hide show
  1. package/dist/index.js +18 -14
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { spawn } from 'child_process';
1
+ import { execFile } from 'child_process';
2
2
  import { existsSync } from 'fs';
3
3
  import { resolve } from 'path';
4
4
  import { Writable } from 'stream';
@@ -131,24 +131,21 @@ async function copyDirToContainer(container, localPath, containerPath, excludes
131
131
  args.push("--exclude", exclude);
132
132
  }
133
133
  args.push("-cf", "-", "-C", localPath, ".");
134
- const tarProcess = spawn("tar", args, {
135
- env: {
136
- ...process.env,
137
- COPYFILE_DISABLE: "1"
138
- }
139
- });
140
- await new Promise((resolve2, reject) => {
141
- container.putArchive(tarProcess.stdout, { path: containerPath }, (err) => {
134
+ const tarBuffer = await new Promise((resolve2, reject) => {
135
+ execFile("tar", args, {
136
+ env: { ...process.env, COPYFILE_DISABLE: "1" },
137
+ maxBuffer: 1024 * 1024 * 1024,
138
+ encoding: "buffer"
139
+ }, (err, stdout) => {
142
140
  if (err) reject(err);
143
- else resolve2();
141
+ else resolve2(stdout);
144
142
  });
145
143
  });
146
144
  await new Promise((resolve2, reject) => {
147
- tarProcess.on("close", (code) => {
148
- if (code === 0) resolve2();
149
- else reject(new Error(`tar process exited with code ${code}`));
145
+ container.putArchive(tarBuffer, { path: containerPath }, (err) => {
146
+ if (err) reject(err);
147
+ else resolve2();
150
148
  });
151
- tarProcess.on("error", (err) => reject(err));
152
149
  });
153
150
  }
154
151
  var DockerSandboxProvider = class {
@@ -159,6 +156,13 @@ var DockerSandboxProvider = class {
159
156
  }
160
157
  async create(opts) {
161
158
  const image = opts.image || "node:20";
159
+ try {
160
+ await this.docker.ping();
161
+ } catch (e) {
162
+ throw new Error(
163
+ `Could not connect to Docker (${e.message}). Make sure Docker is installed and running.`
164
+ );
165
+ }
162
166
  let imageExists = false;
163
167
  try {
164
168
  await this.docker.getImage(image).inspect();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentgrader/sandbox-docker",
3
- "version": "2.0.0",
3
+ "version": "3.0.0",
4
4
  "description": "Docker-based SandboxProvider implementation for the Agentgrader framework",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -21,7 +21,7 @@
21
21
  "build:watch": "tsup src/index.ts --format esm --dts --watch"
22
22
  },
23
23
  "dependencies": {
24
- "@agentgrader/core": "^1.1.0",
24
+ "@agentgrader/core": "^1.2.0",
25
25
  "dockerode": "^4.0.2"
26
26
  },
27
27
  "devDependencies": {
@@ -29,6 +29,6 @@
29
29
  "tsup": "^8.5.1"
30
30
  },
31
31
  "peerDependencies": {
32
- "@agentgrader/core": "^1.1.0"
32
+ "@agentgrader/core": "^1.2.0"
33
33
  }
34
34
  }