{"record":{"id":"2c35b85a365a7a3d","repo":"angular/components","slug":"skipping-migration-for-project-projectname-una","errorCode":null,"errorMessage":"Skipping migration for project ${projectName}. Unable to determine 'tsconfig.json' file in workspace config.","messagePattern":"Skipping migration for project (.+?)\\. Unable to determine 'tsconfig\\.json' file in workspace config\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/cdk/schematics/ng-update/devkit-migration-rule.ts","lineNumber":96,"sourceCode":"      return;\n    }\n\n    // Keep track of all project source files which have been checked/migrated. This is\n    // necessary because multiple TypeScript projects can contain the same source file and\n    // we don't want to check these again, as this would result in duplicated failure messages.\n    const analyzedFiles = new Set<WorkspacePath>();\n    const fileSystem = new DevkitFileSystem(tree);\n    const projectNames = workspace.projects.keys();\n    const migrations = [...cdkMigrations, ...extraMigrations] as NullableDevkitMigration[];\n    let hasFailures = false;\n\n    for (const projectName of projectNames) {\n      const project = workspace.projects.get(projectName)!;\n      const buildTsconfigPath = getTargetTsconfigPath(project, 'build');\n      const testTsconfigPath = getTargetTsconfigPath(project, 'test');\n\n      if (!buildTsconfigPath && !testTsconfigPath) {\n        logger.warn(\n          `Skipping migration for project ${projectName}. Unable to determine 'tsconfig.json' file in workspace config.`,\n        );\n        continue;\n      }\n\n      // In some applications, developers will have global stylesheets which are not\n      // specified in any Angular component. Therefore we glob up all CSS and SCSS files\n      // in the project and migrate them if needed.\n      // TODO: rework this to collect global stylesheets from the workspace config.\n      // TODO: https://github.com/angular/components/issues/24032.\n      const additionalStylesheetPaths = findStylesheetFiles(tree, project.root);\n\n      if (buildTsconfigPath !== null) {\n        runMigrations(project, projectName, buildTsconfigPath, additionalStylesheetPaths, false);\n      }\n      if (testTsconfigPath !== null) {\n        runMigrations(project, projectName, testTsconfigPath, additionalStylesheetPaths, true);\n      }","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/angular/components/blob/0411926e7d8ae06b32236ec1048a888cfad5abf2/src/cdk/schematics/ng-update/devkit-migration-rule.ts#L78-L114","documentation":"The CDK schematics update migrations (e.g. updateToV22) run per workspace project and need a tsconfig path (build or test target) to resolve type checking during migration. If the project config defines neither, the rule skips that project with this warning instead of migrating it.","triggerScenarios":"Running ng update / the migration schematic on a workspace whose project (projectName) has no architect 'build' or 'test' target with a tsConfig option in angular.json/workspace config, hitting the logger.warn in createMigrationSchematicRule.","commonSituations":"Custom angular.json with renamed targets (no 'build'/'test' architect targets); library-only or bare projects without tsconfig references; monorepos with non-standard configurations; partially migrated Nx workspaces.","solutions":["Add architect build/test targets with a tsConfig option to the project in angular.json, then re-run the migration","Ensure the project's targets point at an existing tsconfig.json file","Run the migration for affected files manually if the project intentionally has no tsconfig","Check angular.json for typos in target names (build/test)"],"exampleFix":"// before (angular.json)\n\"architect\": { \"my-build\": { \"options\": {} } }\n// after (angular.json)\n\"architect\": { \"build\": { \"options\": { \"tsConfig\": \"projects/app/tsconfig.app.json\" } } }","handlingStrategy":"validation","validationCode":"const project = workspace.projects.get(name);\nconst hasTsconfig = ['build', 'test'].some(t =>\n  project?.targets?.get(t)?.options?.tsConfig);\nif (!hasTsconfig) console.warn(`Project ${name} lacks a tsconfig; migration will be skipped`);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep standard 'build' and 'test' architect targets in angular.json","Ensure tsConfig option paths exist on disk","Audit non-standard workspace configs before running ng update","Re-run migrations after fixing workspace config so skipped projects are covered"],"tags":["schematics","migration","ng-update","tsconfig","angular-cdk"],"backgroundTag":"missing-tsconfig","analyzedSha":"0411926e7d8ae06b32236ec1048a888cfad5abf2","analyzedAt":"2026-08-31T11:58:23.400Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}