Fix reviewer canonical repo mounts
This commit is contained in:
@@ -24,6 +24,7 @@ import {
|
||||
type RoomRoleContext,
|
||||
} from './room-role-context.js';
|
||||
import {
|
||||
assertReadonlyWorkspaceRepoConnectivity,
|
||||
buildReviewerGitGuardEnv,
|
||||
isReviewerRuntime,
|
||||
} from './reviewer-runtime.js';
|
||||
@@ -405,7 +406,12 @@ async function runAppServerSession(
|
||||
const reviewerRuntime =
|
||||
process.env.EJCLAW_REVIEWER_RUNTIME === '1' ||
|
||||
isReviewerRuntime(containerInput.roomRoleContext);
|
||||
const readonlyRuntime =
|
||||
reviewerRuntime ||
|
||||
process.env.EJCLAW_ARBITER_RUNTIME === '1' ||
|
||||
containerInput.roomRoleContext?.role === 'arbiter';
|
||||
const clientEnv = buildReviewerGitGuardEnv(process.env, reviewerRuntime);
|
||||
assertReadonlyWorkspaceRepoConnectivity(clientEnv, readonlyRuntime);
|
||||
const client = new CodexAppServerClient({
|
||||
cwd: EFFECTIVE_CWD,
|
||||
env: clientEnv,
|
||||
|
||||
@@ -186,3 +186,63 @@ exec "$real_git" "$@"
|
||||
PATH: `${wrapperDir}:${baseEnv.PATH || ''}`,
|
||||
};
|
||||
}
|
||||
|
||||
function readGitOutput(
|
||||
args: string[],
|
||||
baseEnv: NodeJS.ProcessEnv,
|
||||
cwd: string,
|
||||
): string {
|
||||
return execFileSync('git', args, {
|
||||
cwd,
|
||||
env: baseEnv,
|
||||
encoding: 'utf-8',
|
||||
stdio: ['ignore', 'pipe', 'pipe'],
|
||||
}).trim();
|
||||
}
|
||||
|
||||
export function assertReadonlyWorkspaceRepoConnectivity(
|
||||
baseEnv: NodeJS.ProcessEnv,
|
||||
enabled: boolean,
|
||||
): void {
|
||||
if (!enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
const protectedWorkDir = baseEnv.EJCLAW_WORK_DIR || '';
|
||||
if (!protectedWorkDir) {
|
||||
return;
|
||||
}
|
||||
|
||||
let originUrl = '';
|
||||
try {
|
||||
originUrl = readGitOutput(
|
||||
['config', '--get', 'remote.origin.url'],
|
||||
baseEnv,
|
||||
protectedWorkDir,
|
||||
);
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!path.isAbsolute(originUrl) || !fs.existsSync(originUrl)) {
|
||||
throw new Error(
|
||||
`EJClaw readonly runtime cannot access local git origin path: ${originUrl || '(missing)'}`,
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
readGitOutput(['rev-parse', '--git-dir'], baseEnv, originUrl);
|
||||
} catch {
|
||||
throw new Error(
|
||||
`EJClaw readonly runtime origin path is not mounted as a git repository: ${originUrl}`,
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
readGitOutput(['ls-remote', 'origin', 'HEAD'], baseEnv, protectedWorkDir);
|
||||
} catch {
|
||||
throw new Error(
|
||||
`EJClaw readonly runtime cannot resolve local git origin from ${protectedWorkDir}. Check canonical repo mount for ${originUrl}.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user