buildZeiten (einbau.js) liefert dem Runner-Auftrag { siteKey } bei Funktion in setup/active,
null bei Sperrliste und Fehlern. stosseNeubauAn (neubau.js) stößt den Neubau unter der
Sperre zeiten-neubau an und meldet angestossen oder manuell.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 lines
1.4 KiB
JavaScript
28 lines
1.4 KiB
JavaScript
import { withLocks } from '../keyedLock.js'
|
|
import { triggerRebuild } from '../previewRebuild.js'
|
|
import { isDevPreview } from '../analyse.js'
|
|
import { aufSperrliste } from './einbau.js'
|
|
|
|
/** Austauschbar fuer Tests: Neubau (Tests ersetzen das Feld, nie destrukturieren). */
|
|
export const zeitenDeps = { rebuild: triggerRebuild }
|
|
|
|
/**
|
|
* Neubau fuer den Einbau des Zeiten-Skripts anstossen (Spec 4.6), wenn die Funktion in einen ausgebenden Zustand
|
|
* (setup/active) wechselt. Hoechstens ein angestossener Neubau gleichzeitig (Portal-weite Sperre 'zeiten-neubau';
|
|
* nicht wiederbetretbar, nie innerhalb dieser Sperre aufrufen).
|
|
* 'angestossen': der Runner hat den Auftrag angenommen (result.queued === true).
|
|
* 'manuell': kein Repo, Preview aus, Dev-Modus, Sperrliste, Runner ausgelastet (503) oder Fehler; das Team baut ein.
|
|
* Wirft nie.
|
|
*/
|
|
export async function stosseNeubauAn(project) {
|
|
try {
|
|
if (!project?.repoFullName || project.previewMode === 'off' || isDevPreview(project) || aufSperrliste(project)) return 'manuell'
|
|
const result = await withLocks(['zeiten-neubau'], () => zeitenDeps.rebuild(project))
|
|
return result?.queued === true ? 'angestossen' : 'manuell'
|
|
} catch (err) {
|
|
// Zustand bleibt gespeichert, das Team setzt die Zeile von Hand ein
|
|
console.warn(`[zeiten] Neubau für Projekt ${project?.$id} nicht angestoßen: ${err?.message}`)
|
|
return 'manuell'
|
|
}
|
|
}
|