mirror of
https://github.com/getpaseo/paseo.git
synced 2026-08-14 20:32:46 +00:00
* Update files * Git panel: share checkout actions Hoist checkout-scoped async git actions into a shared store and keep primary Push CTA loading in-place. Also stabilize e2e git flows. * Stabilize git panel async actions and fix e2e flakes
41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
import { execSync } from 'node:child_process';
|
|
import { mkdtemp, writeFile, rm, mkdir } from 'node:fs/promises';
|
|
import { tmpdir } from 'node:os';
|
|
import path from 'node:path';
|
|
|
|
type TempRepo = {
|
|
path: string;
|
|
cleanup: () => Promise<void>;
|
|
};
|
|
|
|
export const createTempGitRepo = async (
|
|
prefix = 'paseo-e2e-',
|
|
options?: { withRemote?: boolean }
|
|
): Promise<TempRepo> => {
|
|
const repoPath = await mkdtemp(path.join(tmpdir(), prefix));
|
|
const withRemote = options?.withRemote ?? false;
|
|
|
|
execSync('git init -b main', { cwd: repoPath, stdio: 'ignore' });
|
|
execSync('git config user.email "e2e@paseo.test"', { cwd: repoPath, stdio: 'ignore' });
|
|
execSync('git config user.name "Paseo E2E"', { cwd: repoPath, stdio: 'ignore' });
|
|
await writeFile(path.join(repoPath, 'README.md'), '# Temp Repo\n');
|
|
execSync('git add README.md', { cwd: repoPath, stdio: 'ignore' });
|
|
execSync('git commit -m "Initial commit"', { cwd: repoPath, stdio: 'ignore' });
|
|
|
|
if (withRemote) {
|
|
// Deterministic local remote to avoid relying on external auth/network in e2e.
|
|
const remoteDir = path.join(repoPath, 'remote.git');
|
|
await mkdir(remoteDir, { recursive: true });
|
|
execSync(`git init --bare -b main ${remoteDir}`, { cwd: repoPath, stdio: 'ignore' });
|
|
execSync(`git remote add origin ${remoteDir}`, { cwd: repoPath, stdio: 'ignore' });
|
|
execSync('git push -u origin main', { cwd: repoPath, stdio: 'ignore' });
|
|
}
|
|
|
|
return {
|
|
path: repoPath,
|
|
cleanup: async () => {
|
|
await rm(repoPath, { recursive: true, force: true });
|
|
},
|
|
};
|
|
};
|