sandboxbox 2.0.4 ā 2.0.7
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/0.60 +0 -0
- package/CLAUDE.md +138 -0
- package/Dockerfile +94 -94
- package/Dockerfile.local-workspace +56 -0
- package/README.md +242 -242
- package/cli.js +269 -278
- package/launch-sandboxbox.bat +75 -0
- package/launch-sandboxbox.sh +81 -0
- package/npx-test/package.json +1 -0
- package/package.json +38 -38
- package/scripts/download-podman.js +237 -148
- package/test/Dockerfile +19 -0
- package/test/index.js +16 -0
- package/test/package.json +13 -0
- package/test-cross-platform.sh +78 -0
- package/test-merge-workflow.sh +58 -0
- package/test-sandbox-workflow.sh +45 -0
- package/utils/claude-workspace.js +77 -0
- package/utils/colors.js +15 -0
- package/utils/podman.js +116 -0
- package/bin/.gitkeep +0 -1
package/cli.js
CHANGED
@@ -1,278 +1,269 @@
|
|
1
|
-
#!/usr/bin/env node
|
2
|
-
|
3
|
-
/**
|
4
|
-
* SandboxBox CLI - Portable Container Runner with Podman
|
5
|
-
*
|
6
|
-
* Cross-platform container runner using Podman
|
7
|
-
* Works on Windows, macOS, and Linux
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
import {
|
16
|
-
import {
|
17
|
-
import {
|
18
|
-
|
19
|
-
|
20
|
-
const
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
console.log(
|
41
|
-
console.log(
|
42
|
-
console.log('');
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
console.log(
|
47
|
-
console.log('
|
48
|
-
console.log('');
|
49
|
-
console.log(color('
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
console.log('
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
}
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
const
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
console.log('
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
const
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
console.log(color('
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
console.log(color('green', 'ā
Container
|
177
|
-
|
178
|
-
console.log('
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
}
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
if (!
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
console.log(color('
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
}
|
270
|
-
|
271
|
-
// Run if called directly
|
272
|
-
main().catch(error => {
|
273
|
-
console.error(color('red', 'ā SandboxBox failed:'));
|
274
|
-
console.error(color('red', error.message));
|
275
|
-
console.error('');
|
276
|
-
console.error(color('yellow', 'š” Try: npx sandboxbox --help'));
|
277
|
-
process.exit(1);
|
278
|
-
});
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
/**
|
4
|
+
* SandboxBox CLI - Portable Container Runner with Podman
|
5
|
+
*
|
6
|
+
* Cross-platform container runner using Podman with Claude Code integration
|
7
|
+
* Works on Windows, macOS, and Linux
|
8
|
+
*/
|
9
|
+
|
10
|
+
import { readFileSync, existsSync, writeFileSync } from 'fs';
|
11
|
+
import { execSync } from 'child_process';
|
12
|
+
import { resolve, dirname } from 'path';
|
13
|
+
import { fileURLToPath } from 'url';
|
14
|
+
|
15
|
+
import { color } from './utils/colors.js';
|
16
|
+
import { checkPodman, getPodmanPath } from './utils/podman.js';
|
17
|
+
import { buildClaudeContainerCommand, createClaudeDockerfile } from './utils/claude-workspace.js';
|
18
|
+
|
19
|
+
const __filename = fileURLToPath(import.meta.url);
|
20
|
+
const __dirname = dirname(__filename);
|
21
|
+
|
22
|
+
function showBanner() {
|
23
|
+
console.log(color('cyan', 'š¦ SandboxBox - Portable Container Runner'));
|
24
|
+
console.log(color('cyan', 'āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
25
|
+
console.log('');
|
26
|
+
}
|
27
|
+
|
28
|
+
function showHelp() {
|
29
|
+
console.log(color('yellow', 'Usage:'));
|
30
|
+
console.log(' npx sandboxbox <command> [options]');
|
31
|
+
console.log('');
|
32
|
+
console.log(color('yellow', 'Commands:'));
|
33
|
+
console.log(' build [dockerfile] Build container from Dockerfile');
|
34
|
+
console.log(' run <project-dir> [cmd] Run project in container');
|
35
|
+
console.log(' shell <project-dir> Start interactive shell');
|
36
|
+
console.log(' claude <project-dir> Start Claude Code with local repository');
|
37
|
+
console.log(' version Show version information');
|
38
|
+
console.log('');
|
39
|
+
console.log(color('yellow', 'Examples:'));
|
40
|
+
console.log(' npx sandboxbox build');
|
41
|
+
console.log(' npx sandboxbox claude ./my-project');
|
42
|
+
console.log(' npx sandboxbox run ./my-project "npm test"');
|
43
|
+
console.log(' npx sandboxbox shell ./my-project');
|
44
|
+
console.log('');
|
45
|
+
console.log(color('yellow', 'Requirements:'));
|
46
|
+
console.log(' - Podman (auto-downloaded if needed)');
|
47
|
+
console.log(' - Works on Windows, macOS, and Linux!');
|
48
|
+
console.log('');
|
49
|
+
console.log(color('magenta', 'š Fast startup ⢠True isolation ⢠Claude Code integration'));
|
50
|
+
}
|
51
|
+
|
52
|
+
function buildClaudeContainer() {
|
53
|
+
const dockerfilePath = resolve(__dirname, 'Dockerfile.claude');
|
54
|
+
const dockerfileContent = createClaudeDockerfile();
|
55
|
+
|
56
|
+
writeFileSync(dockerfilePath, dockerfileContent);
|
57
|
+
console.log(color('blue', 'šļø Building Claude Code container...'));
|
58
|
+
|
59
|
+
const podmanPath = checkPodman();
|
60
|
+
if (!podmanPath) return false;
|
61
|
+
|
62
|
+
try {
|
63
|
+
execSync(`"${podmanPath}" build -f "${dockerfilePath}" -t sandboxbox-local:latest .`, {
|
64
|
+
stdio: 'inherit',
|
65
|
+
cwd: __dirname,
|
66
|
+
shell: process.platform === 'win32'
|
67
|
+
});
|
68
|
+
console.log(color('green', '\nā
Claude Code container built successfully!'));
|
69
|
+
return true;
|
70
|
+
} catch (error) {
|
71
|
+
console.log(color('red', `\nā Build failed: ${error.message}`));
|
72
|
+
return false;
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
function runClaudeWorkspace(projectDir, command = 'claude') {
|
77
|
+
if (!existsSync(projectDir)) {
|
78
|
+
console.log(color('red', `ā Project directory not found: ${projectDir}`));
|
79
|
+
return false;
|
80
|
+
}
|
81
|
+
|
82
|
+
if (!existsSync(resolve(projectDir, '.git'))) {
|
83
|
+
console.log(color('red', `ā Not a git repository: ${projectDir}`));
|
84
|
+
console.log(color('yellow', 'Please run this command in a git repository directory'));
|
85
|
+
return false;
|
86
|
+
}
|
87
|
+
|
88
|
+
console.log(color('blue', 'š Starting Claude Code with local repository...'));
|
89
|
+
console.log(color('yellow', `Project: ${projectDir}`));
|
90
|
+
console.log(color('yellow', `Command: ${command}\n`));
|
91
|
+
|
92
|
+
const podmanPath = checkPodman();
|
93
|
+
if (!podmanPath) return false;
|
94
|
+
|
95
|
+
try {
|
96
|
+
const containerCommand = buildClaudeContainerCommand(projectDir, podmanPath, command);
|
97
|
+
execSync(containerCommand, {
|
98
|
+
stdio: 'inherit',
|
99
|
+
shell: process.platform === 'win32'
|
100
|
+
});
|
101
|
+
console.log(color('green', '\nā
Claude Code session completed!'));
|
102
|
+
return true;
|
103
|
+
} catch (error) {
|
104
|
+
console.log(color('red', `\nā Claude Code failed: ${error.message}`));
|
105
|
+
return false;
|
106
|
+
}
|
107
|
+
}
|
108
|
+
|
109
|
+
async function main() {
|
110
|
+
const args = process.argv.slice(2);
|
111
|
+
showBanner();
|
112
|
+
|
113
|
+
if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
|
114
|
+
showHelp();
|
115
|
+
process.exit(0);
|
116
|
+
}
|
117
|
+
|
118
|
+
const command = args[0].toLowerCase();
|
119
|
+
const commandArgs = args.slice(1);
|
120
|
+
|
121
|
+
switch (command) {
|
122
|
+
case 'build':
|
123
|
+
const dockerfilePath = commandArgs[0] || './Dockerfile';
|
124
|
+
|
125
|
+
if (!existsSync(dockerfilePath)) {
|
126
|
+
console.log(color('red', `ā Dockerfile not found: ${dockerfilePath}`));
|
127
|
+
process.exit(1);
|
128
|
+
}
|
129
|
+
|
130
|
+
console.log(color('blue', 'šļø Building container...'));
|
131
|
+
console.log(color('yellow', `Dockerfile: ${dockerfilePath}\n`));
|
132
|
+
|
133
|
+
const buildPodman = checkPodman();
|
134
|
+
if (!buildPodman) process.exit(1);
|
135
|
+
|
136
|
+
try {
|
137
|
+
execSync(`"${buildPodman}" build -f "${dockerfilePath}" -t sandboxbox:latest .`, {
|
138
|
+
stdio: 'inherit',
|
139
|
+
cwd: dirname(dockerfilePath),
|
140
|
+
shell: process.platform === 'win32'
|
141
|
+
});
|
142
|
+
console.log(color('green', '\nā
Container built successfully!'));
|
143
|
+
} catch (error) {
|
144
|
+
console.log(color('red', `\nā Build failed: ${error.message}`));
|
145
|
+
process.exit(1);
|
146
|
+
}
|
147
|
+
break;
|
148
|
+
|
149
|
+
case 'run':
|
150
|
+
if (commandArgs.length === 0) {
|
151
|
+
console.log(color('red', 'ā Please specify a project directory'));
|
152
|
+
console.log(color('yellow', 'Usage: npx sandboxbox run <project-dir> [command]'));
|
153
|
+
process.exit(1);
|
154
|
+
}
|
155
|
+
|
156
|
+
const projectDir = resolve(commandArgs[0]);
|
157
|
+
const cmd = commandArgs[1] || 'bash';
|
158
|
+
|
159
|
+
if (!existsSync(projectDir)) {
|
160
|
+
console.log(color('red', `ā Project directory not found: ${projectDir}`));
|
161
|
+
process.exit(1);
|
162
|
+
}
|
163
|
+
|
164
|
+
console.log(color('blue', 'š Running project in container...'));
|
165
|
+
console.log(color('yellow', `Project: ${projectDir}`));
|
166
|
+
console.log(color('yellow', `Command: ${cmd}\n`));
|
167
|
+
|
168
|
+
const runPodman = checkPodman();
|
169
|
+
if (!runPodman) process.exit(1);
|
170
|
+
|
171
|
+
try {
|
172
|
+
execSync(`"${runPodman}" run --rm -it -v "${projectDir}:/workspace" -w /workspace sandboxbox:latest ${cmd}`, {
|
173
|
+
stdio: 'inherit',
|
174
|
+
shell: process.platform === 'win32'
|
175
|
+
});
|
176
|
+
console.log(color('green', '\nā
Container execution completed!'));
|
177
|
+
} catch (error) {
|
178
|
+
console.log(color('red', `\nā Run failed: ${error.message}`));
|
179
|
+
process.exit(1);
|
180
|
+
}
|
181
|
+
break;
|
182
|
+
|
183
|
+
case 'shell':
|
184
|
+
if (commandArgs.length === 0) {
|
185
|
+
console.log(color('red', 'ā Please specify a project directory'));
|
186
|
+
console.log(color('yellow', 'Usage: npx sandboxbox shell <project-dir>'));
|
187
|
+
process.exit(1);
|
188
|
+
}
|
189
|
+
|
190
|
+
const shellProjectDir = resolve(commandArgs[0]);
|
191
|
+
|
192
|
+
if (!existsSync(shellProjectDir)) {
|
193
|
+
console.log(color('red', `ā Project directory not found: ${shellProjectDir}`));
|
194
|
+
process.exit(1);
|
195
|
+
}
|
196
|
+
|
197
|
+
console.log(color('blue', 'š Starting interactive shell...'));
|
198
|
+
console.log(color('yellow', `Project: ${shellProjectDir}\n`));
|
199
|
+
|
200
|
+
const shellPodman = checkPodman();
|
201
|
+
if (!shellPodman) process.exit(1);
|
202
|
+
|
203
|
+
try {
|
204
|
+
execSync(`"${shellPodman}" run --rm -it -v "${shellProjectDir}:/workspace" -w /workspace sandboxbox:latest /bin/bash`, {
|
205
|
+
stdio: 'inherit',
|
206
|
+
shell: process.platform === 'win32'
|
207
|
+
});
|
208
|
+
} catch (error) {
|
209
|
+
console.log(color('red', `\nā Shell failed: ${error.message}`));
|
210
|
+
process.exit(1);
|
211
|
+
}
|
212
|
+
break;
|
213
|
+
|
214
|
+
case 'claude':
|
215
|
+
if (commandArgs.length === 0) {
|
216
|
+
console.log(color('red', 'ā Please specify a project directory'));
|
217
|
+
console.log(color('yellow', 'Usage: npx sandboxbox claude <project-dir>'));
|
218
|
+
process.exit(1);
|
219
|
+
}
|
220
|
+
|
221
|
+
const claudeProjectDir = resolve(commandArgs[0]);
|
222
|
+
const claudeCommand = commandArgs.slice(1).join(' ') || 'claude';
|
223
|
+
|
224
|
+
// Check if Claude container exists, build if needed
|
225
|
+
const podmanPath = getPodmanPath();
|
226
|
+
try {
|
227
|
+
execSync(`"${podmanPath}" image inspect sandboxbox-local:latest`, {
|
228
|
+
stdio: 'pipe',
|
229
|
+
shell: process.platform === 'win32'
|
230
|
+
});
|
231
|
+
} catch {
|
232
|
+
console.log(color('yellow', 'š¦ Building Claude Code container...'));
|
233
|
+
if (!buildClaudeContainer()) {
|
234
|
+
process.exit(1);
|
235
|
+
}
|
236
|
+
}
|
237
|
+
|
238
|
+
if (!runClaudeWorkspace(claudeProjectDir, claudeCommand)) {
|
239
|
+
process.exit(1);
|
240
|
+
}
|
241
|
+
break;
|
242
|
+
|
243
|
+
case 'version':
|
244
|
+
try {
|
245
|
+
const packageJson = JSON.parse(readFileSync(resolve(__dirname, 'package.json'), 'utf-8'));
|
246
|
+
console.log(color('green', `SandboxBox v${packageJson.version}`));
|
247
|
+
console.log(color('cyan', 'Portable containers with Claude Code integration'));
|
248
|
+
if (checkPodman()) {
|
249
|
+
console.log('');
|
250
|
+
}
|
251
|
+
} catch (error) {
|
252
|
+
console.log(color('red', 'ā Could not read version'));
|
253
|
+
}
|
254
|
+
break;
|
255
|
+
|
256
|
+
default:
|
257
|
+
console.log(color('red', `ā Unknown command: ${command}`));
|
258
|
+
console.log(color('yellow', 'Use --help for usage information'));
|
259
|
+
process.exit(1);
|
260
|
+
}
|
261
|
+
}
|
262
|
+
|
263
|
+
main().catch(error => {
|
264
|
+
console.error(color('red', 'ā SandboxBox failed:'));
|
265
|
+
console.error(color('red', error.message));
|
266
|
+
console.error('');
|
267
|
+
console.error(color('yellow', 'š” Try: npx sandboxbox --help'));
|
268
|
+
process.exit(1);
|
269
|
+
});
|
@@ -0,0 +1,75 @@
|
|
1
|
+
@echo off
|
2
|
+
setlocal enabledelayedexpansion
|
3
|
+
|
4
|
+
REM SandboxBox Launcher with Claude Auth Transfer (Windows)
|
5
|
+
REM Usage: launch-sandboxbox.bat [repository-path] [command]
|
6
|
+
|
7
|
+
set "REPO_PATH=%~1"
|
8
|
+
if "%REPO_PATH%"=="" set "REPO_PATH=."
|
9
|
+
|
10
|
+
set "COMMAND=%~2"
|
11
|
+
if "%COMMAND%"=="" set "COMMAND=claude"
|
12
|
+
|
13
|
+
echo š Launching SandboxBox with Claude Code...
|
14
|
+
echo š Repository: %REPO_PATH%
|
15
|
+
echo š§ Command: %COMMAND%
|
16
|
+
|
17
|
+
REM Get absolute path
|
18
|
+
for %%F in ("%REPO_PATH%") do set "REPO_ABS_PATH=%%~fF"
|
19
|
+
|
20
|
+
echo š Absolute path: %REPO_ABS_PATH%
|
21
|
+
|
22
|
+
REM Check if it's a git repository
|
23
|
+
if not exist "%REPO_ABS_PATH%\.git" (
|
24
|
+
echo ā Error: %REPO_ABS_PATH% is not a git repository
|
25
|
+
echo Please ensure the directory contains a .git folder
|
26
|
+
exit /b 1
|
27
|
+
)
|
28
|
+
|
29
|
+
REM Collect Anthropic and Claude environment variables
|
30
|
+
set "ENV_ARGS="
|
31
|
+
for /f "tokens=1 delims==" %%a in ('set ^| findstr /r "^ANTHROPIC"^=') do (
|
32
|
+
set "ENV_ARGS=!ENV_ARGS! -e %%a=!%%a!"
|
33
|
+
)
|
34
|
+
for /f "tokens=1 delims==" %%a in ('set ^| findstr /r "^CLAUDE"^=') do (
|
35
|
+
set "ENV_ARGS=!ENV_ARGS! -e %%a=!%%a!"
|
36
|
+
)
|
37
|
+
|
38
|
+
echo š Environment variables transferred
|
39
|
+
|
40
|
+
REM Find SandboxBox podman binary
|
41
|
+
set "PODMAN_PATH="
|
42
|
+
if exist "bin\podman.exe" (
|
43
|
+
set "PODMAN_PATH=bin\podman.exe"
|
44
|
+
) else (
|
45
|
+
where podman >nul 2>&1
|
46
|
+
if !errorlevel! equ 0 (
|
47
|
+
for /f "tokens=*" %%i in ('where podman') do set "PODMAN_PATH=%%i"
|
48
|
+
)
|
49
|
+
)
|
50
|
+
|
51
|
+
if "%PODMAN_PATH%"=="" (
|
52
|
+
echo ā Error: Podman binary not found
|
53
|
+
echo Please ensure SandboxBox is properly installed
|
54
|
+
exit /b 1
|
55
|
+
)
|
56
|
+
|
57
|
+
echo š³ Using Podman: %PODMAN_PATH%
|
58
|
+
|
59
|
+
REM Build the Podman command with complete Claude session transfer
|
60
|
+
set "PODMAN_CMD=%PODMAN_PATH% run --rm -it"
|
61
|
+
set "PODMAN_CMD=%PODMAN_CMD% -v "%REPO_ABS_PATH%:/project""
|
62
|
+
set "PODMAN_CMD=%PODMAN_CMD% -v "%USERPROFILE%\.ssh:/root/.ssh:ro""
|
63
|
+
set "PODMAN_CMD=%PODMAN_CMD% -v "%USERPROFILE%\.gitconfig:/root/.gitconfig:ro""
|
64
|
+
set "PODMAN_CMD=%PODMAN_CMD% -v "%USERPROFILE%\.claude:/root/.claude""
|
65
|
+
set "PODMAN_CMD=%PODMAN_CMD% %ENV_ARGS%"
|
66
|
+
set "PODMAN_CMD=%PODMAN_CMD% --env REPO_PATH=/project"
|
67
|
+
set "PODMAN_CMD=%PODMAN_CMD% --env HOME=/root"
|
68
|
+
set "PODMAN_CMD=%PODMAN_CMD% sandboxbox-auth:latest"
|
69
|
+
set "PODMAN_CMD=%PODMAN_CMD% %COMMAND%"
|
70
|
+
|
71
|
+
echo šÆ Running command...
|
72
|
+
echo.
|
73
|
+
|
74
|
+
REM Execute the command
|
75
|
+
%PODMAN_CMD%
|