Skip to content

Commit

Permalink
fix(ws-confg write) - fix errors when running ws-config write --dry-r…
Browse files Browse the repository at this point in the history
…un for the first time (#7197)
  • Loading branch information
GiladShoham authored Mar 26, 2023
1 parent 25efc8d commit 95ea54f
Show file tree
Hide file tree
Showing 8 changed files with 52 additions and 16 deletions.
8 changes: 7 additions & 1 deletion scopes/defender/eslint/eslint-config-writer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { ExecutionContext } from '@teambit/envs';
import type { ConfigWriterEntry, EnvMapValue, WrittenConfigFile, ExtendingConfigFile, ConfigFile } from '@teambit/workspace-config-files';
import { expandIncludeExclude } from '@teambit/typescript';
import { set } from 'lodash';
import { Logger } from '@teambit/logger';
import { LinterMain } from '@teambit/linter';
import { EslintLinterInterface } from './eslint-linter-interface';

Expand All @@ -13,7 +14,7 @@ export class EslintConfigWriter implements ConfigWriterEntry {
name = 'EslintConfigWriter';
cliName = 'eslint';

constructor(private linter: LinterMain) {}
constructor(private linter: LinterMain, private logger: Logger) {}
patterns: string[] = ['**/.eslintrc.json'];

calcConfigFiles(executionContext: ExecutionContext): ConfigFile[] | undefined {
Expand Down Expand Up @@ -50,6 +51,11 @@ export class EslintConfigWriter implements ConfigWriterEntry {
const tsConfigFile = writtenConfigFiles.find((file) => file.name.includes('tsconfig.bit.eslint'));
if (!tsConfigFile) return Promise.resolve();
const tsConfigPath = tsConfigFile.filePath;
const exists = await fs.pathExists(tsConfigPath);
if (!exists) {
this.logger.warn(`EslintConfigWriter, tsconfig file ${tsConfigPath} was not found for post process. if it is part of --dry-run, it is ok.`);
return Promise.resolve();
}
const tsConfig = await fs.readJson(tsConfigPath);
const compDirs: string[] = envMapValue.paths;
const newTsConfig = expandIncludeExclude(tsConfigPath, tsConfig, compDirs);
Expand Down
2 changes: 1 addition & 1 deletion scopes/defender/eslint/eslint.main.runtime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ export class ESLintMain {
LinterMain
]): Promise<ESLintMain> {
const logger = loggerExt.createLogger(ESLintAspect.id);
workspaceConfigFiles.registerConfigWriter(new EslintConfigWriter(linter));
workspaceConfigFiles.registerConfigWriter(new EslintConfigWriter(linter, logger));
return new ESLintMain(logger);
}
}
Expand Down
10 changes: 9 additions & 1 deletion scopes/typescript/typescript/ts-config-writer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import type {
PostProcessExtendingConfigFilesArgs,
} from '@teambit/workspace-config-files';
import { CompilerMain } from '@teambit/compiler';
import { Logger } from '@teambit/logger';
import { IdeConfig, TypescriptCompilerInterface } from './typescript-compiler-interface';
import { expandIncludeExclude } from './expand-include-exclude';

Expand All @@ -23,7 +24,7 @@ export class TypescriptConfigWriter implements ConfigWriterEntry {
name = 'TypescriptConfigWriter';
cliName = 'ts';

constructor(private compiler: CompilerMain) {}
constructor(private compiler: CompilerMain, private logger: Logger) {}
patterns: string[] = [`**/${CONFIG_NAME}`];

calcConfigFiles(executionContext: ExecutionContext): ConfigFile[] | undefined {
Expand Down Expand Up @@ -66,6 +67,12 @@ export class TypescriptConfigWriter implements ConfigWriterEntry {
const tsConfigFile = writtenConfigFiles.find((file) => file.name.includes('tsconfig.bit'));
if (!tsConfigFile) return Promise.resolve();
const tsConfigPath = tsConfigFile.filePath;
const exists = await fs.pathExists(tsConfigPath);

if (!exists) {
this.logger.warn(`TypescriptConfigWriter, tsconfig file ${tsConfigPath} was not found for post process. if it is part of --dry-run, it is ok.`);
return Promise.resolve();
}
const tsConfig = await fs.readJson(tsConfigPath);
const compDirs: string[] = envMapValue.paths;

Expand All @@ -86,6 +93,7 @@ export class TypescriptConfigWriter implements ConfigWriterEntry {
}

async postProcessExtendingConfigFiles?(args: PostProcessExtendingConfigFilesArgs): Promise<void> {
if (!args.configsRootDir || args.dryRun) return;
const { workspaceDir, configsRootDir } = args;
const rootTsConfigPath = join(workspaceDir, 'tsconfig.json');
const exists = await fs.pathExists(rootTsConfigPath);
Expand Down
2 changes: 1 addition & 1 deletion scopes/typescript/typescript/typescript.main.runtime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ export class TypescriptMain {
) {
schema.registerParser(new TypeScriptParser());
const logger = loggerExt.createLogger(TypescriptAspect.id);
workspaceConfigFiles.registerConfigWriter(new TypescriptConfigWriter(compiler));
workspaceConfigFiles.registerConfigWriter(new TypescriptConfigWriter(compiler, logger));

aspectLoader.registerPlugins([new SchemaTransformerPlugin(schemaTransformerSlot)]);
const tsconfigWriter = new TsconfigWriter(workspace, logger);
Expand Down
10 changes: 8 additions & 2 deletions scopes/workspace/workspace-config-files/config-writer-entry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,12 @@ export type PostProcessExtendingConfigFilesArgs = {
workspaceDir: string,
configsRootDir: string,
writtenExtendingConfigFiles: EnvsWrittenExtendingConfigFiles,
envCompsDirsMap: EnvCompsDirsMap
envCompsDirsMap: EnvCompsDirsMap,
dryRun: boolean,
}

export type PostProcessConfigFilesOptions = {
dryRun: boolean,
}

export interface ConfigWriterEntry {
Expand Down Expand Up @@ -71,7 +76,8 @@ export interface ConfigWriterEntry {
postProcessConfigFiles?(
writtenConfigFiles: WrittenConfigFile[],
executionContext: ExecutionContext,
envMapValue: EnvMapValue
envMapValue: EnvMapValue,
options: PostProcessConfigFilesOptions
): Promise<void>;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { BitError } from '@teambit/bit-error';

export default class WriteConfigFilesFailed extends BitError {
constructor() {
super('failed writing config files in the workspace. run with --log to see the error');
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { WorkspaceConfigFilesAspect } from './workspace-config-files.aspect';
import { ConfigFile, ConfigWriterEntry, ExtendingConfigFile } from './config-writer-entry';
import { WsConfigCleanCmd, WsConfigCmd, WsConfigListCmd, WsConfigWriteCmd } from './ws-config.cmd';
import { DedupedPaths, dedupePaths } from './dedup-paths';
import WriteConfigFilesFailed from './exceptions/write-failed';

export type ConfigWriterSlot = SlotRegistry<ConfigWriterEntry[]>;

Expand All @@ -39,7 +40,6 @@ export type WriteConfigFilesOptions = {
silent?: boolean; // no prompt
dedupe?: boolean;
dryRun?: boolean;
dryRunWithContent?: boolean;
writers?: string[];
};

Expand Down Expand Up @@ -125,7 +125,13 @@ export class WorkspaceConfigFilesMain {
cleanResults = await this.clean(options);
}

const aspectsWritersResults = await this.write(execContext, options);
let aspectsWritersResults;
try {
aspectsWritersResults = await this.write(execContext, options);
} catch (err) {
this.logger.info('writeConfigFiles failed', err);
throw new WriteConfigFilesFailed();
}
const totalWrittenFiles = aspectsWritersResults.reduce((acc, curr) => {
return acc + curr.totalWrittenFiles;
}, 0);
Expand All @@ -135,11 +141,11 @@ export class WorkspaceConfigFilesMain {
}

/**
* It cleans (delete) the config files from the workspace.
* This will check each file and will only delete it in case it was generated by bit
* @param {CleanConfigFilesOptions} options - CleanConfigFilesOptions = {}
* @returns An array of strings.
*/
* It cleans (delete) the config files from the workspace.
* This will check each file and will only delete it in case it was generated by bit
* @param {CleanConfigFilesOptions} options - CleanConfigFilesOptions = {}
* @returns An array of strings.
*/
async cleanConfigFiles(options: CleanConfigFilesOptions = {}): Promise<string[]> {
// const execContext = await this.getExecContext();
const cleanResults = await this.clean(options);
Expand Down Expand Up @@ -243,11 +249,13 @@ export class WorkspaceConfigFilesMain {
opts
);
if (configWriter.postProcessExtendingConfigFiles) {

await configWriter.postProcessExtendingConfigFiles({
workspaceDir: this.workspace.path,
configsRootDir,
writtenExtendingConfigFiles: extendingConfigFiles,
envCompsDirsMap,
dryRun: !!opts.dryRun,
});
}
const totalExtendingConfigFiles = extendingConfigFiles.reduce(
Expand Down Expand Up @@ -290,7 +298,9 @@ export class WorkspaceConfigFilesMain {
})
);
if (configWriter.postProcessConfigFiles) {
await configWriter.postProcessConfigFiles(writtenConfigFiles, executionContext, envMapValue);
await configWriter.postProcessConfigFiles(writtenConfigFiles, executionContext, envMapValue, {
dryRun: !!opts.dryRun
});
}
return writtenConfigFiles;
}
Expand Down
3 changes: 1 addition & 2 deletions scopes/workspace/workspace-config-files/ws-config.cmd.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,11 @@ export class WsConfigWriteCmd implements Command {

async json(_args, flags: WriteConfigCmdFlags) {
const { clean, silent, noDedupe, dryRunWithContent, writers } = flags;
const dryRun = dryRunWithContent ? true : flags.dryRun;
const dryRun = dryRunWithContent ? true : !!flags.dryRun;
const { cleanResults, writeResults, wsDir } = await this.workspaceConfigFilesMain.writeConfigFiles({
clean,
dedupe: !noDedupe,
dryRun,
dryRunWithContent,
silent,
writers: writers?.split(',')
});
Expand Down

0 comments on commit 95ea54f

Please sign in to comment.