From 372db36bcd7d53bc2618196c872cab7d2427b3c9 Mon Sep 17 00:00:00 2001 From: Thomas Schaffter Date: Fri, 11 Oct 2024 23:13:30 +0000 Subject: [PATCH] infer Angular framework --- .../src/plugins/build-image-target.ts | 5 +++-- .../plugins/build-project-configuration.ts | 3 ++- .../nx-plugin/src/plugins/project-metadata.ts | 20 +++++++++++++++---- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/libs/sage-monorepo/nx-plugin/src/plugins/build-image-target.ts b/libs/sage-monorepo/nx-plugin/src/plugins/build-image-target.ts index 428621294..05f686c0a 100644 --- a/libs/sage-monorepo/nx-plugin/src/plugins/build-image-target.ts +++ b/libs/sage-monorepo/nx-plugin/src/plugins/build-image-target.ts @@ -1,17 +1,18 @@ import { TargetConfiguration } from '@nx/devkit'; -import { Builder } from './project-metadata'; +import { Builder, Framework } from './project-metadata'; export async function buildImageTarget( projectRoot: string, projectName: string, projectBuilder: Builder | undefined | null, // TODO: builder could be app or image, be more specific + projectFramework: Framework | null, ): Promise { const dependsOn = []; if (projectBuilder === 'gradle') { dependsOn.push({ target: 'build-image-base', }); - } else if (projectBuilder === 'webpack') { + } else if (projectBuilder === 'webpack' && projectFramework === 'angular') { dependsOn.push({ // TODO: the task `server` is more about Angular that the build itself. To revisit. Also, // shall we let the user decide between CSR and SSR? diff --git a/libs/sage-monorepo/nx-plugin/src/plugins/build-project-configuration.ts b/libs/sage-monorepo/nx-plugin/src/plugins/build-project-configuration.ts index 62c69fafc..7d81885bd 100644 --- a/libs/sage-monorepo/nx-plugin/src/plugins/build-project-configuration.ts +++ b/libs/sage-monorepo/nx-plugin/src/plugins/build-project-configuration.ts @@ -10,11 +10,12 @@ export async function buildProjectConfiguration( const pluginConfig = options.pluginConfig; - if (options.projectMetadata.containerType === 'Docker') { + if (options.projectMetadata.containerType === 'docker') { targets[pluginConfig.buildImageTargetName] = await buildImageTarget( options.projectRoot, options.projectName, options.projectMetadata.builder, + options.projectMetadata.framework, ); } diff --git a/libs/sage-monorepo/nx-plugin/src/plugins/project-metadata.ts b/libs/sage-monorepo/nx-plugin/src/plugins/project-metadata.ts index 092befae1..d0192011c 100644 --- a/libs/sage-monorepo/nx-plugin/src/plugins/project-metadata.ts +++ b/libs/sage-monorepo/nx-plugin/src/plugins/project-metadata.ts @@ -7,9 +7,9 @@ export type Builder = 'esbuild' | 'webpack' | 'gradle' | 'maven' | 'poetry'; // export type TypeChecker = 'mypy' | 'pyright'; // export type TestingTool = 'pytest' | null; // export type Formatter = 'Black' | 'Prettier'; -export type ContainerType = 'Docker' | 'Singularity'; +export type ContainerType = 'docker' | 'singularity'; // export type Language = 'python' | 'typescript' | 'javascript'; -// export type Framework = 'Flask' | 'React' | 'Angular' | 'Vue' | null; +export type Framework = 'angular'; export type ProjectMetadata = { projectType: ProjectType; @@ -24,7 +24,7 @@ export type ProjectMetadata = { // formatter: Formatter; containerType: ContainerType | null; // language: Language; - // framework: Framework; + framework: Framework | null; }; export function inferProjectMetadata( @@ -37,6 +37,7 @@ export function inferProjectMetadata( projectType: inferProjectType(projectRoot), builder: inferBuilder(siblingFiles, localProjectConfiguration), containerType: inferContainerType(siblingFiles), + framework: inferFramework(localProjectConfiguration), }; } @@ -68,7 +69,18 @@ function inferBuilder( } function inferContainerType(siblingFiles: string[]): ContainerType | null { - if (siblingFiles.includes('Dockerfile')) return 'Docker'; + if (siblingFiles.includes('Dockerfile')) return 'docker'; + + return null; +} + +function inferFramework(localProjectConfiguration: ProjectConfiguration): Framework | null { + const buildExecutor = localProjectConfiguration?.targets?.['build']?.executor ?? ''; + const angularBuildExecutors = ['@angular-devkit/build-angular:browser']; + + if (angularBuildExecutors.includes(buildExecutor)) { + return 'angular'; + } return null; }