mirror of
https://github.com/github/codeql-action.git
synced 2025-12-26 17:20:10 +08:00
54 lines
1.1 KiB
JavaScript
54 lines
1.1 KiB
JavaScript
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
|
|
import writeFileAtomic from 'write-file-atomic';
|
|
|
|
import isCi from './is-ci.js';
|
|
|
|
const FILENAME = 'failing-tests.json';
|
|
|
|
const scheduler = {
|
|
storeFailedTestFiles(runStatus, cacheDir) {
|
|
if (isCi || !cacheDir) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
writeFileAtomic.sync(path.join(cacheDir, FILENAME), JSON.stringify(runStatus.getFailedTestFiles()));
|
|
} catch {}
|
|
},
|
|
|
|
// Order test-files, so that files with failing tests come first
|
|
failingTestsFirst(selectedFiles, cacheDir, cacheEnabled) {
|
|
if (isCi || cacheEnabled === false) {
|
|
return selectedFiles;
|
|
}
|
|
|
|
const filePath = path.join(cacheDir, FILENAME);
|
|
let failedTestFiles;
|
|
try {
|
|
failedTestFiles = JSON.parse(fs.readFileSync(filePath));
|
|
} catch {
|
|
return selectedFiles;
|
|
}
|
|
|
|
return [...selectedFiles].sort((f, s) => {
|
|
if (failedTestFiles.includes(f) && failedTestFiles.includes(s)) {
|
|
return 0;
|
|
}
|
|
|
|
if (failedTestFiles.includes(f)) {
|
|
return -1;
|
|
}
|
|
|
|
if (failedTestFiles.includes(s)) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
});
|
|
},
|
|
};
|
|
|
|
export default scheduler;
|