Merge pull request #42 from nrslib/issue/37-report-dir-prefix

fix: reportDirに.takt/reports/プレフィックスを含め、ルート直下へのレポート作成を修正 (#37)
This commit is contained in:
nrs 2026-01-30 21:32:24 +09:00 committed by GitHub
commit 8975fc974c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 9 additions and 6 deletions

View File

@ -14,6 +14,8 @@ import type { WorkflowStep, ReportObjectConfig, ReportConfig } from '../models/t
/**
* Extracted emitStepReports logic for unit testing.
* Mirrors engine.ts emitStepReports + emitIfReportExists.
*
* reportDir already includes the `.takt/reports/` prefix (set by engine constructor).
*/
function emitStepReports(
emitter: EventEmitter,
@ -22,7 +24,7 @@ function emitStepReports(
projectCwd: string,
): void {
if (!step.report || !reportDir) return;
const baseDir = join(projectCwd, '.takt', 'reports', reportDir);
const baseDir = join(projectCwd, reportDir);
if (typeof step.report === 'string') {
emitIfReportExists(emitter, step, baseDir, step.report);
@ -62,11 +64,12 @@ function createStep(overrides: Partial<WorkflowStep> = {}): WorkflowStep {
describe('emitStepReports', () => {
let tmpDir: string;
let reportBaseDir: string;
const reportDirName = 'test-report-dir';
// reportDir now includes .takt/reports/ prefix (matches engine constructor behavior)
const reportDirName = '.takt/reports/test-report-dir';
beforeEach(() => {
tmpDir = join(tmpdir(), `takt-report-test-${Date.now()}`);
reportBaseDir = join(tmpDir, '.takt', 'reports', reportDirName);
reportBaseDir = join(tmpDir, reportDirName);
mkdirSync(reportBaseDir, { recursive: true });
});

View File

@ -64,7 +64,7 @@ export class WorkflowEngine extends EventEmitter {
this.options = options;
this.language = options.language;
this.loopDetector = new LoopDetector(config.loopDetection);
this.reportDir = generateReportDir(task);
this.reportDir = `.takt/reports/${generateReportDir(task)}`;
this.ensureReportDirExists();
this.validateConfig();
this.state = createInitialState(config, options);
@ -78,7 +78,7 @@ export class WorkflowEngine extends EventEmitter {
/** Ensure report directory exists (always in project root, not clone) */
private ensureReportDirExists(): void {
const reportDirPath = join(this.projectCwd, '.takt', 'reports', this.reportDir);
const reportDirPath = join(this.projectCwd, this.reportDir);
if (!existsSync(reportDirPath)) {
mkdirSync(reportDirPath, { recursive: true });
}
@ -176,7 +176,7 @@ export class WorkflowEngine extends EventEmitter {
*/
private emitStepReports(step: WorkflowStep): void {
if (!step.report || !this.reportDir) return;
const baseDir = join(this.projectCwd, '.takt', 'reports', this.reportDir);
const baseDir = join(this.projectCwd, this.reportDir);
if (typeof step.report === 'string') {
this.emitIfReportExists(step, baseDir, step.report);