faf-cli 3.0.6 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +275 -25
- package/dist/big-orange/compare.d.ts.map +1 -1
- package/dist/big-orange/compare.js +14 -16
- package/dist/big-orange/compare.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +137 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto.d.ts.map +1 -1
- package/dist/commands/auto.js +69 -12
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/bi-sync.d.ts.map +1 -1
- package/dist/commands/bi-sync.js +10 -3
- package/dist/commands/bi-sync.js.map +1 -1
- package/dist/commands/drift.d.ts +16 -0
- package/dist/commands/drift.d.ts.map +1 -0
- package/dist/commands/drift.js +517 -0
- package/dist/commands/drift.js.map +1 -0
- package/dist/commands/git.d.ts +25 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +355 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +85 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/rename.d.ts +18 -0
- package/dist/commands/rename.d.ts.map +1 -0
- package/dist/commands/rename.js +211 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/taf-init.d.ts +14 -0
- package/dist/commands/taf-init.d.ts.map +1 -0
- package/dist/commands/taf-init.js +138 -0
- package/dist/commands/taf-init.js.map +1 -0
- package/dist/commands/taf-log.d.ts +30 -0
- package/dist/commands/taf-log.d.ts.map +1 -0
- package/dist/commands/taf-log.js +303 -0
- package/dist/commands/taf-log.js.map +1 -0
- package/dist/commands/taf-stats.d.ts +8 -0
- package/dist/commands/taf-stats.d.ts.map +1 -0
- package/dist/commands/taf-stats.js +133 -0
- package/dist/commands/taf-stats.js.map +1 -0
- package/dist/commands/taf-validate.d.ts +8 -0
- package/dist/commands/taf-validate.d.ts.map +1 -0
- package/dist/commands/taf-validate.js +108 -0
- package/dist/commands/taf-validate.js.map +1 -0
- package/dist/commands/taf.d.ts +13 -0
- package/dist/commands/taf.d.ts.map +1 -0
- package/dist/commands/taf.js +97 -0
- package/dist/commands/taf.js.map +1 -0
- package/dist/compiler/faf-compiler.d.ts.map +1 -1
- package/dist/compiler/faf-compiler.js +18 -0
- package/dist/compiler/faf-compiler.js.map +1 -1
- package/dist/generators/faf-generator-championship.d.ts.map +1 -1
- package/dist/generators/faf-generator-championship.js +1 -0
- package/dist/generators/faf-generator-championship.js.map +1 -1
- package/dist/github/github-extractor.d.ts +56 -0
- package/dist/github/github-extractor.d.ts.map +1 -0
- package/dist/github/github-extractor.js +328 -0
- package/dist/github/github-extractor.js.map +1 -0
- package/dist/github/popular-repos.d.ts +43 -0
- package/dist/github/popular-repos.d.ts.map +1 -0
- package/dist/github/popular-repos.js +205 -0
- package/dist/github/popular-repos.js.map +1 -0
- package/dist/github/repo-selector.d.ts +48 -0
- package/dist/github/repo-selector.d.ts.map +1 -0
- package/dist/github/repo-selector.js +277 -0
- package/dist/github/repo-selector.js.map +1 -0
- package/dist/taf/index.d.ts +17 -0
- package/dist/taf/index.d.ts.map +1 -0
- package/dist/taf/index.js +57 -0
- package/dist/taf/index.js.map +1 -0
- package/dist/taf/logger.d.ts +88 -0
- package/dist/taf/logger.d.ts.map +1 -0
- package/dist/taf/logger.js +137 -0
- package/dist/taf/logger.js.map +1 -0
- package/dist/taf/parser.d.ts +32 -0
- package/dist/taf/parser.d.ts.map +1 -0
- package/dist/taf/parser.js +161 -0
- package/dist/taf/parser.js.map +1 -0
- package/dist/taf/stats.d.ts +31 -0
- package/dist/taf/stats.d.ts.map +1 -0
- package/dist/taf/stats.js +182 -0
- package/dist/taf/stats.js.map +1 -0
- package/dist/taf/types.d.ts +77 -0
- package/dist/taf/types.d.ts.map +1 -0
- package/dist/taf/types.js +9 -0
- package/dist/taf/types.js.map +1 -0
- package/dist/taf/validator.d.ts +18 -0
- package/dist/taf/validator.d.ts.map +1 -0
- package/dist/taf/validator.js +148 -0
- package/dist/taf/validator.js.map +1 -0
- package/dist/utils/file-utils.d.ts +10 -0
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +196 -33
- package/dist/utils/file-utils.js.map +1 -1
- package/dist/utils/native-file-finder.js +1 -1
- package/dist/utils/native-file-finder.js.map +1 -1
- package/dist/utils/yaml-generator.d.ts +1 -0
- package/dist/utils/yaml-generator.d.ts.map +1 -1
- package/dist/utils/yaml-generator.js +1 -0
- package/dist/utils/yaml-generator.js.map +1 -1
- package/package.json +9 -4
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* faf taf log - Log a test run
|
|
4
|
+
*
|
|
5
|
+
* Appends a test run entry to .taf file
|
|
6
|
+
* Supports both minimal and detailed modes
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.tafLog = tafLog;
|
|
43
|
+
exports.runTAFLog = runTAFLog;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const taf_1 = require("../taf");
|
|
47
|
+
async function tafLog(options = {}) {
|
|
48
|
+
const tafPath = path.join(process.cwd(), '.taf');
|
|
49
|
+
// Check if .taf exists
|
|
50
|
+
if (!fs.existsSync(tafPath)) {
|
|
51
|
+
console.error('❌ No .taf file found');
|
|
52
|
+
console.log('\nRun: faf taf init');
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
// Read and parse
|
|
56
|
+
let taf;
|
|
57
|
+
try {
|
|
58
|
+
const content = fs.readFileSync(tafPath, 'utf-8');
|
|
59
|
+
taf = (0, taf_1.parseTAF)(content);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error('❌ Failed to parse .taf file');
|
|
63
|
+
if (error instanceof Error) {
|
|
64
|
+
console.error(`\n${error.message}`);
|
|
65
|
+
}
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
// Validate required fields
|
|
69
|
+
if (options.total === undefined || options.passed === undefined || options.failed === undefined) {
|
|
70
|
+
console.error('❌ Missing required test counts');
|
|
71
|
+
console.log('\nRequired: --total, --passed, --failed');
|
|
72
|
+
console.log('Example: faf taf log --total 173 --passed 173 --failed 0');
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
// Validate input types and values
|
|
76
|
+
const total = options.total;
|
|
77
|
+
const passed = options.passed;
|
|
78
|
+
const failed = options.failed;
|
|
79
|
+
const skipped = options.skipped || 0;
|
|
80
|
+
// Check for NaN
|
|
81
|
+
if (isNaN(total) || isNaN(passed) || isNaN(failed) || isNaN(skipped)) {
|
|
82
|
+
console.error('❌ Invalid input: test counts must be numbers');
|
|
83
|
+
console.log('\nExample: faf taf log --total 173 --passed 173 --failed 0');
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
// Check for negative numbers
|
|
87
|
+
if (total < 0 || passed < 0 || failed < 0 || skipped < 0) {
|
|
88
|
+
console.error('❌ Invalid input: test counts cannot be negative');
|
|
89
|
+
console.log(`\nReceived: total=${total}, passed=${passed}, failed=${failed}, skipped=${skipped}`);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
// Check for integers
|
|
93
|
+
if (!Number.isInteger(total) || !Number.isInteger(passed) || !Number.isInteger(failed) || !Number.isInteger(skipped)) {
|
|
94
|
+
console.error('❌ Invalid input: test counts must be integers');
|
|
95
|
+
console.log(`\nReceived: total=${total}, passed=${passed}, failed=${failed}, skipped=${skipped}`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
// Check math: passed + failed + skipped should equal total
|
|
99
|
+
const sum = passed + failed + skipped;
|
|
100
|
+
if (sum !== total) {
|
|
101
|
+
console.error('❌ Invalid input: test counts do not add up');
|
|
102
|
+
console.log(`\nPassed (${passed}) + Failed (${failed}) + Skipped (${skipped}) = ${sum}`);
|
|
103
|
+
console.log(`But total is ${total}`);
|
|
104
|
+
console.log('\nThe numbers must add up correctly.');
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
// Check logical constraints
|
|
108
|
+
if (passed > total) {
|
|
109
|
+
console.error('❌ Invalid input: passed tests cannot exceed total tests');
|
|
110
|
+
console.log(`\nPassed: ${passed}, Total: ${total}`);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
if (failed > total) {
|
|
114
|
+
console.error('❌ Invalid input: failed tests cannot exceed total tests');
|
|
115
|
+
console.log(`\nFailed: ${failed}, Total: ${total}`);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
// Detect result if not provided
|
|
119
|
+
const previousRun = taf.test_history[taf.test_history.length - 1];
|
|
120
|
+
const result = options.result || (0, taf_1.detectResult)({ passed: options.passed, total: options.total }, previousRun ? { passed: previousRun.tests.passed, total: previousRun.tests.total } : undefined);
|
|
121
|
+
// Build environment info if variance detected
|
|
122
|
+
let environment;
|
|
123
|
+
if (options.env_variance || options.env_notes || options.environment) {
|
|
124
|
+
environment = options.environment || {
|
|
125
|
+
variance: options.env_variance ? [{
|
|
126
|
+
type: options.env_variance,
|
|
127
|
+
description: getVarianceDescription(options.env_variance),
|
|
128
|
+
detected_at: new Date().toISOString(),
|
|
129
|
+
}] : undefined,
|
|
130
|
+
notes: options.env_notes,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// Create test run entry
|
|
134
|
+
const run = options.minimal
|
|
135
|
+
? (0, taf_1.createMinimalRun)({
|
|
136
|
+
result,
|
|
137
|
+
total: options.total,
|
|
138
|
+
passed: options.passed,
|
|
139
|
+
failed: options.failed,
|
|
140
|
+
skipped: options.skipped,
|
|
141
|
+
environment,
|
|
142
|
+
})
|
|
143
|
+
: (0, taf_1.createDetailedRun)({
|
|
144
|
+
result,
|
|
145
|
+
command: options.command,
|
|
146
|
+
trigger: options.trigger,
|
|
147
|
+
tests: {
|
|
148
|
+
total: options.total,
|
|
149
|
+
passed: options.passed,
|
|
150
|
+
failed: options.failed,
|
|
151
|
+
skipped: options.skipped,
|
|
152
|
+
},
|
|
153
|
+
issues: options.issues,
|
|
154
|
+
root_cause: options.root_cause,
|
|
155
|
+
resolution: options.resolution,
|
|
156
|
+
environment,
|
|
157
|
+
});
|
|
158
|
+
// Append to TAF
|
|
159
|
+
const updatedTAF = (0, taf_1.appendTestRun)(taf, run);
|
|
160
|
+
// Serialize and format
|
|
161
|
+
const content = (0, taf_1.formatTAF)((0, taf_1.serializeTAF)(updatedTAF));
|
|
162
|
+
// Write back
|
|
163
|
+
fs.writeFileSync(tafPath, content, 'utf-8');
|
|
164
|
+
// Success message
|
|
165
|
+
const resultEmoji = result === 'PASSED' ? '✅' :
|
|
166
|
+
result === 'IMPROVED' ? '📈' :
|
|
167
|
+
result === 'DEGRADED' ? '📉' : '❌';
|
|
168
|
+
console.log(`${resultEmoji} Logged test run: ${result}`);
|
|
169
|
+
console.log(`\n Tests: ${options.passed}/${options.total} passing`);
|
|
170
|
+
// Show environment variance if flagged
|
|
171
|
+
if (environment?.variance && environment.variance.length > 0) {
|
|
172
|
+
console.log(` ⚠️ Environment variance detected:`);
|
|
173
|
+
environment.variance.forEach(v => {
|
|
174
|
+
console.log(` - ${v.type}: ${v.description}`);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
if (environment?.notes) {
|
|
178
|
+
console.log(` 📝 Environment notes: ${environment.notes}`);
|
|
179
|
+
}
|
|
180
|
+
if (result === 'PASSED') {
|
|
181
|
+
const streak = countCurrentStreak(updatedTAF.test_history);
|
|
182
|
+
if (streak > 1) {
|
|
183
|
+
console.log(` 🔥 Streak: ${streak} passing runs`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (options.root_cause) {
|
|
187
|
+
console.log(` Root cause: ${options.root_cause}`);
|
|
188
|
+
}
|
|
189
|
+
if (options.resolution) {
|
|
190
|
+
console.log(` Resolution: ${options.resolution}`);
|
|
191
|
+
}
|
|
192
|
+
console.log(`\nTotal runs: ${updatedTAF.test_history.length}`);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get human-readable description for variance type
|
|
196
|
+
*/
|
|
197
|
+
function getVarianceDescription(type) {
|
|
198
|
+
const descriptions = {
|
|
199
|
+
background_execution: 'Test running in background shell',
|
|
200
|
+
unstable_cwd: 'Working directory changing during test execution',
|
|
201
|
+
missing_dependencies: 'Required dependencies not found',
|
|
202
|
+
parallel_execution: 'Tests running in parallel when sequential expected',
|
|
203
|
+
resource_contention: 'System resources constrained',
|
|
204
|
+
network_unavailable: 'Network-dependent tests without network',
|
|
205
|
+
timing_sensitive: 'Race conditions or timing issues detected',
|
|
206
|
+
other: 'Custom environment variance',
|
|
207
|
+
};
|
|
208
|
+
return descriptions[type];
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Count current passing streak
|
|
212
|
+
*/
|
|
213
|
+
function countCurrentStreak(history) {
|
|
214
|
+
let streak = 0;
|
|
215
|
+
for (let i = history.length - 1; i >= 0; i--) {
|
|
216
|
+
if (history[i].result === 'PASSED') {
|
|
217
|
+
streak++;
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return streak;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* CLI wrapper - parse arguments
|
|
227
|
+
*/
|
|
228
|
+
async function runTAFLog(args) {
|
|
229
|
+
const options = {
|
|
230
|
+
minimal: args.includes('--minimal') || args.includes('-m'),
|
|
231
|
+
};
|
|
232
|
+
// Parse test counts
|
|
233
|
+
const totalIndex = args.findIndex(arg => arg === '--total' || arg === '-t');
|
|
234
|
+
if (totalIndex !== -1 && args[totalIndex + 1]) {
|
|
235
|
+
options.total = parseInt(args[totalIndex + 1]);
|
|
236
|
+
}
|
|
237
|
+
const passedIndex = args.findIndex(arg => arg === '--passed' || arg === '-p');
|
|
238
|
+
if (passedIndex !== -1 && args[passedIndex + 1]) {
|
|
239
|
+
options.passed = parseInt(args[passedIndex + 1]);
|
|
240
|
+
}
|
|
241
|
+
const failedIndex = args.findIndex(arg => arg === '--failed' || arg === '-f');
|
|
242
|
+
if (failedIndex !== -1 && args[failedIndex + 1]) {
|
|
243
|
+
options.failed = parseInt(args[failedIndex + 1]);
|
|
244
|
+
}
|
|
245
|
+
const skippedIndex = args.findIndex(arg => arg === '--skipped' || arg === '-s');
|
|
246
|
+
if (skippedIndex !== -1 && args[skippedIndex + 1]) {
|
|
247
|
+
options.skipped = parseInt(args[skippedIndex + 1]);
|
|
248
|
+
}
|
|
249
|
+
// Parse result (optional)
|
|
250
|
+
const resultIndex = args.findIndex(arg => arg === '--result' || arg === '-r');
|
|
251
|
+
if (resultIndex !== -1 && args[resultIndex + 1]) {
|
|
252
|
+
const resultStr = args[resultIndex + 1].toUpperCase();
|
|
253
|
+
if (['PASSED', 'FAILED', 'IMPROVED', 'DEGRADED'].includes(resultStr)) {
|
|
254
|
+
options.result = resultStr;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Parse detailed fields
|
|
258
|
+
const commandIndex = args.findIndex(arg => arg === '--command' || arg === '-c');
|
|
259
|
+
if (commandIndex !== -1 && args[commandIndex + 1]) {
|
|
260
|
+
options.command = args[commandIndex + 1];
|
|
261
|
+
}
|
|
262
|
+
const triggerIndex = args.findIndex(arg => arg === '--trigger');
|
|
263
|
+
if (triggerIndex !== -1 && args[triggerIndex + 1]) {
|
|
264
|
+
options.trigger = args[triggerIndex + 1];
|
|
265
|
+
}
|
|
266
|
+
const rootCauseIndex = args.findIndex(arg => arg === '--root-cause');
|
|
267
|
+
if (rootCauseIndex !== -1 && args[rootCauseIndex + 1]) {
|
|
268
|
+
options.root_cause = args[rootCauseIndex + 1];
|
|
269
|
+
}
|
|
270
|
+
const resolutionIndex = args.findIndex(arg => arg === '--resolution');
|
|
271
|
+
if (resolutionIndex !== -1 && args[resolutionIndex + 1]) {
|
|
272
|
+
options.resolution = args[resolutionIndex + 1];
|
|
273
|
+
}
|
|
274
|
+
// Parse issues (comma-separated)
|
|
275
|
+
const issuesIndex = args.findIndex(arg => arg === '--issues' || arg === '-i');
|
|
276
|
+
if (issuesIndex !== -1 && args[issuesIndex + 1]) {
|
|
277
|
+
options.issues = args[issuesIndex + 1].split(',').map(s => s.trim());
|
|
278
|
+
}
|
|
279
|
+
// Parse environment variance
|
|
280
|
+
const envVarianceIndex = args.findIndex(arg => arg === '--env-variance');
|
|
281
|
+
if (envVarianceIndex !== -1 && args[envVarianceIndex + 1]) {
|
|
282
|
+
const variance = args[envVarianceIndex + 1];
|
|
283
|
+
const validVariances = [
|
|
284
|
+
'background_execution',
|
|
285
|
+
'unstable_cwd',
|
|
286
|
+
'missing_dependencies',
|
|
287
|
+
'parallel_execution',
|
|
288
|
+
'resource_contention',
|
|
289
|
+
'network_unavailable',
|
|
290
|
+
'timing_sensitive',
|
|
291
|
+
'other',
|
|
292
|
+
];
|
|
293
|
+
if (validVariances.includes(variance)) {
|
|
294
|
+
options.env_variance = variance;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
const envNotesIndex = args.findIndex(arg => arg === '--env-notes');
|
|
298
|
+
if (envNotesIndex !== -1 && args[envNotesIndex + 1]) {
|
|
299
|
+
options.env_notes = args[envNotesIndex + 1];
|
|
300
|
+
}
|
|
301
|
+
await tafLog(options);
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=taf-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taf-log.js","sourceRoot":"","sources":["../../src/commands/taf-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* faf taf stats - Display testing statistics
|
|
3
|
+
*
|
|
4
|
+
* Shows pass rate, health score, streaks, and trends from .taf file
|
|
5
|
+
*/
|
|
6
|
+
export declare function tafStats(): Promise<void>;
|
|
7
|
+
export declare function runTAFStats(): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=taf-stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taf-stats.d.ts","sourceRoot":"","sources":["../../src/commands/taf-stats.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA4F9C;AAGD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjD"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* faf taf stats - Display testing statistics
|
|
4
|
+
*
|
|
5
|
+
* Shows pass rate, health score, streaks, and trends from .taf file
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.tafStats = tafStats;
|
|
42
|
+
exports.runTAFStats = runTAFStats;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const taf_1 = require("../taf");
|
|
46
|
+
async function tafStats() {
|
|
47
|
+
const tafPath = path.join(process.cwd(), '.taf');
|
|
48
|
+
// Check if .taf exists
|
|
49
|
+
if (!fs.existsSync(tafPath)) {
|
|
50
|
+
console.error('❌ No .taf file found');
|
|
51
|
+
console.log('\nRun: faf taf init');
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
// Read and parse
|
|
55
|
+
let taf;
|
|
56
|
+
try {
|
|
57
|
+
const content = fs.readFileSync(tafPath, 'utf-8');
|
|
58
|
+
taf = (0, taf_1.parseTAF)(content);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.error('❌ Failed to parse .taf file');
|
|
62
|
+
if (error instanceof Error) {
|
|
63
|
+
console.error(`\n${error.message}`);
|
|
64
|
+
}
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
// Calculate statistics
|
|
68
|
+
const stats = (0, taf_1.calculateStats)(taf);
|
|
69
|
+
const trend = (0, taf_1.getPassRateTrend)(taf);
|
|
70
|
+
const scoreContribution = (0, taf_1.calculateScoreContribution)(taf);
|
|
71
|
+
// Display header
|
|
72
|
+
console.log('📊 Testing Statistics\n');
|
|
73
|
+
// Project info
|
|
74
|
+
console.log(`Project: ${taf.project}`);
|
|
75
|
+
console.log(`Created: ${new Date(taf.created).toLocaleDateString()}\n`);
|
|
76
|
+
// Core stats
|
|
77
|
+
console.log(`${stats.health_score} Health Score: ${stats.pass_rate}`);
|
|
78
|
+
console.log(` Total runs: ${stats.total_runs}`);
|
|
79
|
+
console.log(` Current streak: ${stats.current_streak} passing`);
|
|
80
|
+
console.log(` Longest streak: ${stats.longest_streak} passing`);
|
|
81
|
+
console.log(` Total failures: ${stats.total_failures}`);
|
|
82
|
+
if (stats.avg_recovery_time_minutes) {
|
|
83
|
+
console.log(` Avg recovery: ${stats.avg_recovery_time_minutes} minutes`);
|
|
84
|
+
}
|
|
85
|
+
// Trend
|
|
86
|
+
const trendEmoji = trend === 'improving' ? '📈' : trend === 'declining' ? '📉' : '➡️';
|
|
87
|
+
console.log(`\n${trendEmoji} Trend: ${trend}`);
|
|
88
|
+
// Last run
|
|
89
|
+
if (stats.last_run) {
|
|
90
|
+
const lastRunDate = new Date(stats.last_run);
|
|
91
|
+
const now = new Date();
|
|
92
|
+
const hoursSince = Math.round((now.getTime() - lastRunDate.getTime()) / 1000 / 60 / 60);
|
|
93
|
+
console.log(`\n⏱️ Last run: ${hoursSince}h ago`);
|
|
94
|
+
}
|
|
95
|
+
// Score contribution (for .faf integration)
|
|
96
|
+
console.log(`\n🏆 .faf Score Contribution:`);
|
|
97
|
+
console.log(` .taf present: +${scoreContribution.taf_present} points`);
|
|
98
|
+
console.log(` .taf validated: +${scoreContribution.taf_validated} points`);
|
|
99
|
+
console.log(` Pass rate bonus: +${scoreContribution.pass_rate_bonus} points`);
|
|
100
|
+
console.log(` Total: +${scoreContribution.total} points`);
|
|
101
|
+
// FAF integration status
|
|
102
|
+
if (taf.faf_associated) {
|
|
103
|
+
console.log(`\n🔗 Native Reference: .faf linked`);
|
|
104
|
+
if (taf.faf_score !== undefined) {
|
|
105
|
+
console.log(` Current .faf score: ${taf.faf_score}/100`);
|
|
106
|
+
const projectedScore = taf.faf_score + scoreContribution.total;
|
|
107
|
+
if (projectedScore > taf.faf_score) {
|
|
108
|
+
console.log(` Projected with .taf: ${projectedScore}/100 (+${scoreContribution.total})`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
console.log(`\nℹ️ No .faf link (optional)`);
|
|
114
|
+
console.log(` Run 'faf taf init' in a project with .faf to enable native reference`);
|
|
115
|
+
}
|
|
116
|
+
// Recent runs preview
|
|
117
|
+
if (taf.test_history.length > 0) {
|
|
118
|
+
console.log(`\n📋 Recent Runs (last 5):`);
|
|
119
|
+
const recent = taf.test_history.slice(-5);
|
|
120
|
+
recent.forEach(run => {
|
|
121
|
+
const date = new Date(run.timestamp);
|
|
122
|
+
const resultEmoji = run.result === 'PASSED' ? '✅' :
|
|
123
|
+
run.result === 'IMPROVED' ? '📈' :
|
|
124
|
+
run.result === 'DEGRADED' ? '📉' : '❌';
|
|
125
|
+
console.log(` ${resultEmoji} ${date.toLocaleString()}: ${run.tests.passed}/${run.tests.total} passing`);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// CLI wrapper
|
|
130
|
+
async function runTAFStats() {
|
|
131
|
+
await tafStats();
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=taf-stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taf-stats.js","sourceRoot":"","sources":["../../src/commands/taf-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* faf taf validate - Validate .taf file format
|
|
3
|
+
*
|
|
4
|
+
* Validates .taf file structure and reports errors/warnings
|
|
5
|
+
*/
|
|
6
|
+
export declare function tafValidate(): Promise<void>;
|
|
7
|
+
export declare function runTAFValidate(): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=taf-validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taf-validate.d.ts","sourceRoot":"","sources":["../../src/commands/taf-validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA+DjD;AAGD,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpD"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* faf taf validate - Validate .taf file format
|
|
4
|
+
*
|
|
5
|
+
* Validates .taf file structure and reports errors/warnings
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.tafValidate = tafValidate;
|
|
42
|
+
exports.runTAFValidate = runTAFValidate;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const taf_1 = require("../taf");
|
|
46
|
+
async function tafValidate() {
|
|
47
|
+
const tafPath = path.join(process.cwd(), '.taf');
|
|
48
|
+
// Check if .taf exists
|
|
49
|
+
if (!fs.existsSync(tafPath)) {
|
|
50
|
+
console.error('❌ No .taf file found');
|
|
51
|
+
console.log('\nRun: faf taf init');
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
// Read and parse
|
|
55
|
+
let taf;
|
|
56
|
+
try {
|
|
57
|
+
const content = fs.readFileSync(tafPath, 'utf-8');
|
|
58
|
+
taf = (0, taf_1.parseTAF)(content);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.error('❌ Failed to parse .taf file');
|
|
62
|
+
if (error instanceof Error) {
|
|
63
|
+
console.error(`\n${error.message}`);
|
|
64
|
+
}
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
// Validate
|
|
68
|
+
const result = (0, taf_1.validateTAF)(taf);
|
|
69
|
+
// Display results
|
|
70
|
+
if (result.valid) {
|
|
71
|
+
console.log('✅ .taf file is valid');
|
|
72
|
+
console.log(`\nFormat version: ${taf.format_version}`);
|
|
73
|
+
console.log(`Project: ${taf.project}`);
|
|
74
|
+
console.log(`Test runs: ${taf.test_history.length}`);
|
|
75
|
+
if (taf.faf_associated) {
|
|
76
|
+
console.log(`\n🔗 Native Reference:`);
|
|
77
|
+
console.log(` .faf location: ${taf.faf_location || '.faf'}`);
|
|
78
|
+
if (taf.faf_score !== undefined) {
|
|
79
|
+
console.log(` .faf score: ${taf.faf_score}/100`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (result.warnings.length > 0) {
|
|
83
|
+
console.log(`\n⚠️ Warnings (${result.warnings.length}):`);
|
|
84
|
+
result.warnings.forEach(warning => {
|
|
85
|
+
console.log(` ${warning}`);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.error('❌ .taf file has errors');
|
|
91
|
+
console.error(`\nErrors (${result.errors.length}):`);
|
|
92
|
+
result.errors.forEach(error => {
|
|
93
|
+
console.error(` ${error}`);
|
|
94
|
+
});
|
|
95
|
+
if (result.warnings.length > 0) {
|
|
96
|
+
console.log(`\n⚠️ Warnings (${result.warnings.length}):`);
|
|
97
|
+
result.warnings.forEach(warning => {
|
|
98
|
+
console.log(` ${warning}`);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// CLI wrapper
|
|
105
|
+
async function runTAFValidate() {
|
|
106
|
+
await tafValidate();
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=taf-validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taf-validate.js","sourceRoot":"","sources":["../../src/commands/taf-validate.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMH,kCA+DC;AAGD,wCAEC;AAxED,uCAAyB;AACzB,2CAA6B;AAC7B,gCAA+C;AAExC,KAAK,UAAU,WAAW;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAEjD,uBAAuB;IACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,iBAAiB;IACjB,IAAI,GAAG,CAAC;IACR,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,GAAG,GAAG,IAAA,cAAQ,EAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,WAAW;IACX,MAAM,MAAM,GAAG,IAAA,iBAAW,EAAC,GAAG,CAAC,CAAC;IAEhC,kBAAkB;IAClB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QAErD,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,YAAY,IAAI,MAAM,EAAE,CAAC,CAAC;YAC/D,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,SAAS,MAAM,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;YAC3D,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAChC,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5B,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;YAC3D,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAChC,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,cAAc;AACP,KAAK,UAAU,cAAc;IAClC,MAAM,WAAW,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* faf taf - Testing Activity Feed commands
|
|
3
|
+
*
|
|
4
|
+
* Git-friendly testing timeline - automatic test logging
|
|
5
|
+
*
|
|
6
|
+
* Commands:
|
|
7
|
+
* - faf taf init Initialize .taf file
|
|
8
|
+
* - faf taf log Log a test run
|
|
9
|
+
* - faf taf validate Validate .taf format
|
|
10
|
+
* - faf taf stats Show test statistics
|
|
11
|
+
*/
|
|
12
|
+
export declare function tafCommand(args: string[]): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=taf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taf.d.ts","sourceRoot":"","sources":["../../src/commands/taf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC9D"}
|