Preview: Dev-Registrierung nutzt gespeicherten Branch und Stand

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-09-30 21:54:01 +00:00
1 parent cf2841adf5
commit 3316b562af
5 files changed
+96 -56

No files matched your search

+46 -29
View File
@@ -461,34 +461,46 @@ export async function waitForDevRegistration() {
while (registering) await registering
}
function registerDevSpecs(projects) {
if (registering) return
registering = (async () => {
const key = envKey()
await Promise.allSettled(
projects.map(async (project) => {
const sub = project.subdomain
try {
const repo = project.repoFullName
if (!repo) return
const branch = project.previewBranch || 'main'
let sha = project.previewBuiltSha
if (!SHA_RE.test(String(sha || ''))) {
try { sha = await resolveSha(repo, branch, null) } catch (err) {
console.error(`[previewDeploy] Dev-Registrierung ${sub} uebersprungen:`, err.message)
return
}
}
let env = {}
if (project.previewEnv && key) {
try { env = decryptEnv(project.previewEnv, key) } catch { env = {} }
}
await runnerClient.startDev(sub, { sub, repo, sha, branch, mode: 'dev', env })
} catch (err) {
console.error(`[previewDeploy] Dev-Registrierung ${sub} fehlgeschlagen:`, err.message)
let pendingProjects = null
async function registerDevRound(projects) {
const key = envKey()
await Promise.allSettled(
projects.map(async (project) => {
const sub = project.subdomain
try {
const repo = project.repoFullName
const { previewBranch: branch, previewBuiltSha: sha } = project
// Kein Raten (R17): ohne gespeicherten Branch/Stand wird uebersprungen
if (!repo || !branch || !SHA_RE.test(String(sha || ''))) {
console.error(`[previewDeploy] Dev-Registrierung ${sub} uebersprungen: Branch oder Stand unbekannt`)
return
}
})
)
let env = {}
if (project.previewEnv) {
try { env = decryptEnv(project.previewEnv, key) } catch {
console.error(`[previewDeploy] Dev-Registrierung ${sub} uebersprungen: Variablen nicht entschluesselbar`)
return
}
}
await runnerClient.startDev(sub, { sub, repo, sha, branch, mode: 'dev', env })
} catch (err) {
console.error(`[previewDeploy] Dev-Registrierung ${sub} fehlgeschlagen:`, err.message)
}
})
)
}
function registerDevSpecs(projects) {
// Laeuft schon eine Runde: genau eine Wiederholung danach (mit dem neuesten Stand)
if (registering) { pendingProjects = projects; return }
registering = (async () => {
let next = projects
while (next) {
pendingProjects = null
await registerDevRound(next)
next = pendingProjects
}
})().finally(() => { registering = null })
}
@@ -613,7 +625,12 @@ async function followRun({ repoFullName, project, token, runId, subdomain, job,
const now = new Date().toISOString()
if (!failure && run?.state === 'done') {
const detected = detectedLabel(run.detected, run.result)
const base = { previewDetected: detected, previewError: warning || '' }
const base = {
previewDetected: detected,
previewError: warning || '',
previewBranch: job.branch,
previewBuiltSha: run.sha || job.sha,
}
if (run.result === 'dev') {
await patchProject(repoFullName, project, { ...base, previewState: 'sleeping' })
try { await runnerClient.startDev(subdomain, job) } catch (err) {
@@ -621,7 +638,7 @@ async function followRun({ repoFullName, project, token, runId, subdomain, job,
}
} else {
await patchProject(repoFullName, project, {
...base, previewState: 'online', previewBuiltSha: run.sha || job.sha, previewBuiltAt: now,
...base, previewState: 'online', previewBuiltAt: now,
})
}
} else {