58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { randomUUID } from 'node:crypto'
|
|
|
|
export const AUTHOR_NAME = 'Sandbox Bot'
|
|
export const AUTHOR_EMAIL = 'sandbox@example.com'
|
|
export const USERNAME = 'git'
|
|
export const PASSWORD = 'token'
|
|
export const HOST = 'example.com'
|
|
export const PROTOCOL = 'https'
|
|
|
|
const BASE_DIR = '/tmp/test-git'
|
|
|
|
export async function createBaseDir(sandbox: any) {
|
|
const baseDir = `${BASE_DIR}/${randomUUID()}`
|
|
await sandbox.commands.run(`rm -rf "${baseDir}" && mkdir -p "${baseDir}"`)
|
|
return baseDir
|
|
}
|
|
|
|
export async function cleanupBaseDir(sandbox: any, baseDir: string) {
|
|
await sandbox.commands.run(`rm -rf "${baseDir}"`)
|
|
}
|
|
|
|
export async function createRepo(sandbox: any, baseDir: string) {
|
|
const repoPath = `${baseDir}/repo`
|
|
await sandbox.git.init(repoPath, { initialBranch: 'main' })
|
|
return repoPath
|
|
}
|
|
|
|
export async function createRepoWithCommit(sandbox: any, baseDir: string) {
|
|
const repoPath = await createRepo(sandbox, baseDir)
|
|
await sandbox.files.write(`${repoPath}/README.md`, 'hello\n')
|
|
await sandbox.git.add(repoPath)
|
|
await sandbox.git.commit(repoPath, 'Initial commit', {
|
|
authorName: AUTHOR_NAME,
|
|
authorEmail: AUTHOR_EMAIL,
|
|
})
|
|
return repoPath
|
|
}
|
|
|
|
export async function startGitDaemon(sandbox: any, baseDir: string) {
|
|
const remotePath = `${baseDir}/remote.git`
|
|
await sandbox.commands.run(
|
|
`git init --bare --initial-branch=main "${remotePath}"`
|
|
)
|
|
const port = 9418 + Math.floor(Math.random() * 1000)
|
|
const handle = await sandbox.commands.run(
|
|
`git daemon --reuseaddr --base-path="${baseDir}" --export-all ` +
|
|
`--enable=receive-pack --informative-errors --listen=127.0.0.1 --port=${port}`,
|
|
{ background: true }
|
|
)
|
|
await sandbox.commands.run('sleep 1')
|
|
return {
|
|
handle,
|
|
remotePath,
|
|
remoteUrl: `git://127.0.0.1:${port}/remote.git`,
|
|
port,
|
|
}
|
|
}
|