Feat v0.7.2 package runners ci gate (#56)
All checks were successful
CI/CD / detect-changes (push) Successful in 4s
CI/CD / test-runners (push) Has been skipped
CI/CD / test-frontend (push) Successful in 6s
CI/CD / test-go-pg (push) Successful in 2m39s
CI/CD / test-sqlite (push) Successful in 2m55s
CI/CD / build-and-deploy (push) Successful in 29s
All checks were successful
CI/CD / detect-changes (push) Successful in 4s
CI/CD / test-runners (push) Has been skipped
CI/CD / test-frontend (push) Successful in 6s
CI/CD / test-go-pg (push) Successful in 2m39s
CI/CD / test-sqlite (push) Successful in 2m55s
CI/CD / build-and-deploy (push) Successful in 29s
Co-authored-by: Jeffrey Smith <jasafpro@gmail.com> Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
This commit was merged in pull request #56.
This commit is contained in:
@@ -127,11 +127,22 @@
|
||||
});
|
||||
}
|
||||
|
||||
// Runner dependency declarations.
|
||||
// Stored here (not in manifests) to avoid the package system marking
|
||||
// runners as dormant due to install-order timing during bundled install.
|
||||
var RUNNER_REQUIRES = {
|
||||
'notes-runner': ['notes'],
|
||||
'chat-runner': ['chat', 'chat-core'],
|
||||
'schedules-runner': ['schedules'],
|
||||
'workflow-runner': ['content-approval'],
|
||||
'renderer-runner': ['mermaid-renderer']
|
||||
};
|
||||
|
||||
// Check requires for a runner
|
||||
function checkRequires(runner) {
|
||||
var requires = runner.manifest?.requires || runner.requires || [];
|
||||
var requires = RUNNER_REQUIRES[runner.id] || runner.manifest?.requires || runner.requires || [];
|
||||
if (!requires.length || !allPkgs) return { met: requires, missing: [] };
|
||||
var installedIds = allPkgs.map(function (p) { return p.id; });
|
||||
var installedIds = allPkgs.filter(function (p) { return p.enabled; }).map(function (p) { return p.id; });
|
||||
var met = [], missing = [];
|
||||
for (var i = 0; i < requires.length; i++) {
|
||||
if (installedIds.indexOf(requires[i]) !== -1) met.push(requires[i]);
|
||||
@@ -141,6 +152,14 @@
|
||||
}
|
||||
|
||||
// Run all suites
|
||||
// Post results to kernel API for CI consumption (fire-and-forget)
|
||||
function postResults(runnerId, data) {
|
||||
sw.api.post('/api/v1/admin/test-runners/results', {
|
||||
runner_id: runnerId || 'all',
|
||||
results: data
|
||||
}).catch(function (e) { console.warn('[TestRunners] Failed to store results:', e.message); });
|
||||
}
|
||||
|
||||
var runAll = useCallback(async function () {
|
||||
if (running) return;
|
||||
setRunning(true);
|
||||
@@ -149,6 +168,7 @@
|
||||
try {
|
||||
var r = await sw.testing.run();
|
||||
setResults(r);
|
||||
postResults('all', r);
|
||||
} catch (e) {
|
||||
setError('Run failed: ' + e.message);
|
||||
}
|
||||
@@ -162,8 +182,13 @@
|
||||
setRunning(true);
|
||||
setRunningSuite(runner.id);
|
||||
|
||||
var prefix = runner.id === 'icd-test-runner' ? 'icd/' :
|
||||
runner.id === 'sdk-test-runner' ? 'sdk/' : runner.id + '/';
|
||||
// Map runner package ID to suite name prefix.
|
||||
// ICD/SDK runners use 'icd/'/'sdk/' prefixes.
|
||||
// Package runners use the package name they test: 'notes/', 'chat/', etc.
|
||||
var prefix;
|
||||
if (runner.id === 'icd-test-runner') prefix = 'icd/';
|
||||
else if (runner.id === 'sdk-test-runner') prefix = 'sdk/';
|
||||
else prefix = runner.id.replace(/-runner$/, '') + '/';
|
||||
var suiteNames = sw.testing.suites().filter(function (n) { return n.indexOf(prefix) === 0; });
|
||||
|
||||
var allSuiteResults = [];
|
||||
@@ -186,12 +211,14 @@
|
||||
if (r.suites[0] && r.suites[0].status === 'skipped') summary.skipped++;
|
||||
}
|
||||
|
||||
setResults({
|
||||
var runnerResults = {
|
||||
timestamp: new Date().toISOString(),
|
||||
duration_ms: Math.round(performance.now() - start),
|
||||
summary: summary,
|
||||
suites: allSuiteResults
|
||||
});
|
||||
};
|
||||
setResults(runnerResults);
|
||||
postResults(runner.id, runnerResults);
|
||||
setRunning(false);
|
||||
setRunningSuite(null);
|
||||
}, [running]);
|
||||
@@ -299,7 +326,7 @@
|
||||
<h2>Test Runners</h2>
|
||||
${props.running
|
||||
? html`<span class="ext-test-runners-running"><span class="ext-test-runners-spinner"></span> Running${props.runningSuite === 'all' ? ' all' : ''}...</span>`
|
||||
: html`<button class="sw-btn sw-btn--primary" onClick=${props.onRunAll}>Run All (${props.suiteCount} suites)</button>`
|
||||
: html`<button class="sw-btn sw-btn--primary" onClick=${props.onRunAll}>Run All</button> <span class="ext-test-runners-suite-count">${props.suiteCount} suites</span>`
|
||||
}
|
||||
${s ? html`
|
||||
<div class="ext-test-runners-summary">
|
||||
@@ -332,7 +359,8 @@
|
||||
|
||||
// Filter results for this runner's suites
|
||||
var prefix = r.id === 'icd-test-runner' ? 'icd/' :
|
||||
r.id === 'sdk-test-runner' ? 'sdk/' : r.id + '/';
|
||||
r.id === 'sdk-test-runner' ? 'sdk/' :
|
||||
r.id.replace(/-runner$/, '') + '/';
|
||||
var runnerSuites = props.results?.suites?.filter(function (s) {
|
||||
return s.name.indexOf(prefix) === 0;
|
||||
}) || [];
|
||||
|
||||
Reference in New Issue
Block a user