Support multi-game betas with automatic server selection
This commit is contained in:
@@ -158,8 +158,16 @@ async function advancePlan(stored: StoredPlan): Promise<void> {
|
||||
}
|
||||
const registry = db().prepare('SELECT server AS name, game, map FROM beta_test_coverage WHERE beta_id = ?').all(id) as Array<{ name: string; game: string | null; map: string | null }>;
|
||||
// All waves must be activated, even when the final coverage rule is a quorum.
|
||||
// A passing server proves only its assigned files. A quorum or coverage
|
||||
// group must not pass an unrelated game/map's untested bundle member.
|
||||
const ready = !queued.length && updated.every(s => !!currentRun(id, s.server)?.observing_at)
|
||||
&& coveragePassed(plan, updated.map(s => ({ ...registry.find(r => r.name === s.server)!, passed: s.stage === 'ready' })));
|
||||
&& coveragePassed(plan, updated.map(s => ({ ...registry.find(r => r.name === s.server)!, passed: s.stage === 'ready' })))
|
||||
&& !db().prepare(`SELECT 1 FROM beta_scripts files WHERE files.beta_id = ? AND NOT EXISTS (
|
||||
SELECT 1 FROM beta_server_scripts members JOIN beta_servers servers
|
||||
ON servers.beta_id = members.beta_id AND servers.server = members.server
|
||||
WHERE members.beta_id = files.beta_id AND members.script_id = files.script_id
|
||||
AND servers.server_deleted_at IS NULL AND servers.stage = 'ready'
|
||||
) LIMIT 1`).get(id);
|
||||
betaState(id, ready);
|
||||
setOutcome(id, ready ? 'passed' : 'active', null);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user