From 208c3aa9dbcbb5167eababa5a6ec1b938b246891 Mon Sep 17 00:00:00 2001 From: worstell Date: Fri, 1 Mar 2024 21:08:09 -0500 Subject: [PATCH] chore: make ftl init create self contained kotlin modules (#1005) - removes parent POM + logic to update parent POM when new child POMs are added; each module has its own self-contained POM now - removes now unused`ftlEndpoint` and `ftlModuleName` maven properties - removes the `ftl-module-` prefix from kotlin module scaffolding fixes #933 --------- Co-authored-by: github-actions[bot] --- buildengine/build_kotlin.go | 16 +- cmd/ftl/cmd_init.go | 45 +---- .../kotlin/{ftl-module-echo => echo}/ftl.toml | 0 examples/kotlin/{ => echo}/pom.xml | 42 ++-- .../src/main/kotlin/ftl/echo/Echo.kt | 0 examples/kotlin/ftl-module-echo/pom.xml | 41 ---- examples/kotlin/ftl-module-time/pom.xml | 41 ---- .../kotlin/{ftl-module-time => time}/ftl.toml | 0 examples/kotlin/time/pom.xml | 185 ++++++++++++++++++ .../src/main/kotlin/ftl/time/Time.kt | 0 integration/integration_test.go | 5 +- .../ftl-module-{{ .Name | lower }}/pom.xml | 41 ---- .../ftl.toml | 0 .../{ => {{ .Name | lower }}}/pom.xml | 33 +++- .../{{ .Name | camel }}.kt | 0 15 files changed, 244 insertions(+), 205 deletions(-) rename examples/kotlin/{ftl-module-echo => echo}/ftl.toml (100%) rename examples/kotlin/{ => echo}/pom.xml (87%) rename examples/kotlin/{ftl-module-echo => echo}/src/main/kotlin/ftl/echo/Echo.kt (100%) delete mode 100644 examples/kotlin/ftl-module-echo/pom.xml delete mode 100644 examples/kotlin/ftl-module-time/pom.xml rename examples/kotlin/{ftl-module-time => time}/ftl.toml (100%) create mode 100644 examples/kotlin/time/pom.xml rename examples/kotlin/{ftl-module-time => time}/src/main/kotlin/ftl/time/Time.kt (100%) delete mode 100644 kotlin-runtime/scaffolding/ftl-module-{{ .Name | lower }}/pom.xml rename kotlin-runtime/scaffolding/{ftl-module-{{ .Name | lower }} => {{ .Name | lower }}}/ftl.toml (100%) rename kotlin-runtime/scaffolding/{ => {{ .Name | lower }}}/pom.xml (88%) rename kotlin-runtime/scaffolding/{ftl-module-{{ .Name | lower }} => {{ .Name | lower }}}/src/main/kotlin/ftl/{{ .Name | camel | lower }}/{{ .Name | camel }}.kt (100%) diff --git a/buildengine/build_kotlin.go b/buildengine/build_kotlin.go index 66235c60a9..ba50299e57 100644 --- a/buildengine/build_kotlin.go +++ b/buildengine/build_kotlin.go @@ -40,7 +40,7 @@ func (e externalModuleContext) ExternalModules() []*schema.Module { func buildKotlin(ctx context.Context, sch *schema.Schema, module Module) error { logger := log.FromContext(ctx) - if err := SetPOMProperties(ctx, filepath.Join(module.Dir, "..")); err != nil { + if err := SetPOMProperties(ctx, module.Dir); err != nil { return fmt.Errorf("unable to update ftl.version in %s: %w", module.Dir, err) } @@ -61,7 +61,7 @@ func buildKotlin(ctx context.Context, sch *schema.Schema, module Module) error { return nil } -// SetPOMProperties updates the ftl.version and ftlEndpoint properties in the +// SetPOMProperties updates the ftl.version properties in the // pom.xml file in the given base directory. func SetPOMProperties(ctx context.Context, baseDir string) error { logger := log.FromContext(ctx) @@ -70,11 +70,6 @@ func SetPOMProperties(ctx context.Context, baseDir string) error { ftlVersion = "1.0-SNAPSHOT" } - ftlEndpoint := os.Getenv("FTL_ENDPOINT") - if ftlEndpoint == "" { - ftlEndpoint = "http://127.0.0.1:8892" - } - pomFile := filepath.Clean(filepath.Join(baseDir, "pom.xml")) logger.Debugf("Setting ftl.version in %s to %s", pomFile, ftlVersion) @@ -94,13 +89,6 @@ func SetPOMProperties(ctx context.Context, baseDir string) error { } version.SetText(ftlVersion) - endpoint := properties.SelectElement("ftlEndpoint") - if endpoint == nil { - logger.Warnf("unable to find / in %s", pomFile) - } else { - endpoint.SetText(ftlEndpoint) - } - return tree.WriteToFile(pomFile) } diff --git a/cmd/ftl/cmd_init.go b/cmd/ftl/cmd_init.go index 4461d42a3f..8000bf856c 100644 --- a/cmd/ftl/cmd_init.go +++ b/cmd/ftl/cmd_init.go @@ -12,7 +12,6 @@ import ( "strings" "github.com/TBD54566975/scaffolder" - "github.com/beevik/etree" "github.com/TBD54566975/ftl/backend/schema" "github.com/TBD54566975/ftl/backend/schema/strcase" @@ -72,52 +71,16 @@ func (i initKotlinCmd) Run(ctx context.Context, parent *initCmd) error { return fmt.Errorf("module name %q is invalid", i.Name) } - if _, err := os.Stat(filepath.Join(i.Dir, "ftl-module-"+i.Name)); err == nil { + moduleDir := filepath.Join(i.Dir, i.Name) + if _, err := os.Stat(moduleDir); err == nil { return fmt.Errorf("module directory %s already exists", filepath.Join(i.Dir, i.Name)) } - options := []scaffolder.Option{} - - // Update root POM if it already exists. - pomFile := filepath.Join(i.Dir, "pom.xml") - if _, err := os.Stat(pomFile); err == nil { - options = append(options, scaffolder.Exclude("^pom.xml$")) - if err := updatePom(pomFile, i.Name); err != nil { - return err - } - } - - if err := scaffold(parent.Hermit, kotlinruntime.Files(), i.Dir, i, options...); err != nil { - return err - } - - return buildengine.SetPOMProperties(ctx, i.Dir) -} - -func updatePom(pomFile, name string) error { - tree := etree.NewDocument() - err := tree.ReadFromFile(pomFile) - if err != nil { + if err := scaffold(parent.Hermit, kotlinruntime.Files(), i.Dir, i); err != nil { return err } - // Add new module entry to root of XML file - root := tree.Root() - modules := root.SelectElement("modules") - if modules == nil { - modules = root.CreateElement("modules") - } - modules.CreateText(" ") - module := modules.CreateElement("module") - module.SetText("ftl-module-" + name) - modules.CreateText("\n ") - - // Write updated XML file back to disk - err = tree.WriteToFile(pomFile) - if err != nil { - return err - } - return nil + return buildengine.SetPOMProperties(ctx, moduleDir) } func unzipToTmpDir(reader *zip.Reader) (string, error) { diff --git a/examples/kotlin/ftl-module-echo/ftl.toml b/examples/kotlin/echo/ftl.toml similarity index 100% rename from examples/kotlin/ftl-module-echo/ftl.toml rename to examples/kotlin/echo/ftl.toml diff --git a/examples/kotlin/pom.xml b/examples/kotlin/echo/pom.xml similarity index 87% rename from examples/kotlin/pom.xml rename to examples/kotlin/echo/pom.xml index 7cd8e9adc2..3945bbad4d 100644 --- a/examples/kotlin/pom.xml +++ b/examples/kotlin/echo/pom.xml @@ -3,21 +3,13 @@ 4.0.0 ftl - ftl + echo 1.0-SNAPSHOT - pom - - - ftl-module-echo - ftl-module-time - - 1.0-SNAPSHOT - http://localhost:8892 1.8 - 1.9.0 + 1.9.22 true ${java.version} ${java.version} @@ -37,7 +29,7 @@ org.postgresql postgresql - 42.7.1 + 42.7.2 @@ -76,7 +68,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.2.0 + 3.6.1 @@ -119,7 +111,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.2.0 + 3.5.0 generate-sources @@ -137,7 +129,7 @@ com.github.ozsie detekt-maven-plugin - 1.23.3.1 + 1.23.5 true ${generated.classpath} @@ -169,5 +161,25 @@ + + + kotlin-maven-plugin + org.jetbrains.kotlin + + + org.apache.maven.plugins + maven-dependency-plugin + + + + org.codehaus.mojo + build-helper-maven-plugin + + + + com.github.ozsie + detekt-maven-plugin + + - + \ No newline at end of file diff --git a/examples/kotlin/ftl-module-echo/src/main/kotlin/ftl/echo/Echo.kt b/examples/kotlin/echo/src/main/kotlin/ftl/echo/Echo.kt similarity index 100% rename from examples/kotlin/ftl-module-echo/src/main/kotlin/ftl/echo/Echo.kt rename to examples/kotlin/echo/src/main/kotlin/ftl/echo/Echo.kt diff --git a/examples/kotlin/ftl-module-echo/pom.xml b/examples/kotlin/ftl-module-echo/pom.xml deleted file mode 100644 index d107548c27..0000000000 --- a/examples/kotlin/ftl-module-echo/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - 4.0.0 - ftl - ftl-module-echo - 1.0-SNAPSHOT - - ftl - ftl - 1.0-SNAPSHOT - - - - echo - - - - - - kotlin-maven-plugin - org.jetbrains.kotlin - - - org.apache.maven.plugins - maven-dependency-plugin - - - - org.codehaus.mojo - build-helper-maven-plugin - - - - com.github.ozsie - detekt-maven-plugin - - - - \ No newline at end of file diff --git a/examples/kotlin/ftl-module-time/pom.xml b/examples/kotlin/ftl-module-time/pom.xml deleted file mode 100644 index 05d4e2356d..0000000000 --- a/examples/kotlin/ftl-module-time/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - 4.0.0 - ftl - ftl-module-time - 1.0-SNAPSHOT - - ftl - ftl - 1.0-SNAPSHOT - - - - time - - - - - - kotlin-maven-plugin - org.jetbrains.kotlin - - - org.apache.maven.plugins - maven-dependency-plugin - - - - org.codehaus.mojo - build-helper-maven-plugin - - - - com.github.ozsie - detekt-maven-plugin - - - - \ No newline at end of file diff --git a/examples/kotlin/ftl-module-time/ftl.toml b/examples/kotlin/time/ftl.toml similarity index 100% rename from examples/kotlin/ftl-module-time/ftl.toml rename to examples/kotlin/time/ftl.toml diff --git a/examples/kotlin/time/pom.xml b/examples/kotlin/time/pom.xml new file mode 100644 index 0000000000..e82227baff --- /dev/null +++ b/examples/kotlin/time/pom.xml @@ -0,0 +1,185 @@ + + + 4.0.0 + + ftl + echo2 + 1.0-SNAPSHOT + + + 1.0-SNAPSHOT + 1.8 + 1.9.22 + true + ${java.version} + ${java.version} + + + + + org.jetbrains.kotlin + kotlin-stdlib + ${kotlin.version} + + + xyz.block + ftl-runtime + ${ftl.version} + + + org.postgresql + postgresql + 42.7.2 + + + + + + + + kotlin-maven-plugin + org.jetbrains.kotlin + ${kotlin.version} + + + compile + + compile + + + + ${project.basedir}/src/main/kotlin + + + + + test-compile + + test-compile + + + + ${project.basedir}/src/test/kotlin + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.6.1 + + + + copy-dependencies + compile + + copy-dependencies + + + ${project.build.directory}/dependency + runtime + + + + + build-classpath + compile + + build-classpath + + + ${project.build.directory}/classpath.txt + dependency + + + + build-classpath-property + compile + + build-classpath + + + generated.classpath + ${project.build.directory}/dependency + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.5.0 + + + generate-sources + + add-source + + + + ${project.build.directory}/generated-sources/ftl + + + + + + + com.github.ozsie + detekt-maven-plugin + 1.23.5 + + true + ${generated.classpath} + ${java.version} + ${java.home} + ${project.build.directory}/detekt.yml + + + ${project.build.directory}/dependency/ftl-runtime-${ftl.version}.jar + + + ${project.basedir}/src/main/kotlin,${project.build.directory}/generated-sources + + + + compile + + check-with-type-resolution + + + + + + xyz.block + ftl-runtime + ${ftl.version} + + + + + + + + kotlin-maven-plugin + org.jetbrains.kotlin + + + org.apache.maven.plugins + maven-dependency-plugin + + + + org.codehaus.mojo + build-helper-maven-plugin + + + + com.github.ozsie + detekt-maven-plugin + + + + \ No newline at end of file diff --git a/examples/kotlin/ftl-module-time/src/main/kotlin/ftl/time/Time.kt b/examples/kotlin/time/src/main/kotlin/ftl/time/Time.kt similarity index 100% rename from examples/kotlin/ftl-module-time/src/main/kotlin/ftl/time/Time.kt rename to examples/kotlin/time/src/main/kotlin/ftl/time/Time.kt diff --git a/integration/integration_test.go b/integration/integration_test.go index 4b3ed26140..34df7c85c8 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -301,19 +301,20 @@ func getRuntimeData(moduleName string, modulesDir string, runtime string) runtim panic(err) } ftlRoot := filepath.Join(cwd, "..") + modulesDir = filepath.Join(modulesDir, runtime) + os.MkdirAll(modulesDir, os.ModePerm) t := runtimeData{ testSuffix: strcase.ToUpperCamel(runtime), moduleName: moduleName, + moduleRoot: filepath.Join(modulesDir, moduleName), } switch runtime { case "go": - t.moduleRoot = filepath.Join(modulesDir, t.moduleName) t.modulePath = t.moduleRoot // include replace flag to use local ftl in go.mod t.initOpts = []string{"init", runtime, modulesDir, t.moduleName, "--replace", fmt.Sprintf("github.com/TBD54566975/ftl=%s", ftlRoot)} case "kotlin": - t.moduleRoot = filepath.Join(modulesDir, fmt.Sprintf("ftl-module-%s", t.moduleName)) t.modulePath = filepath.Join(t.moduleRoot, "src/main/kotlin/ftl", t.moduleName) t.initOpts = []string{"init", runtime, modulesDir, t.moduleName} default: diff --git a/kotlin-runtime/scaffolding/ftl-module-{{ .Name | lower }}/pom.xml b/kotlin-runtime/scaffolding/ftl-module-{{ .Name | lower }}/pom.xml deleted file mode 100644 index 2ca07efa39..0000000000 --- a/kotlin-runtime/scaffolding/ftl-module-{{ .Name | lower }}/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - 4.0.0 - ftl - ftl-module-{{ .Name | camel | lower }} - 1.0-SNAPSHOT - - {{ .GroupID }} - {{ .ArtifactID }} - 1.0-SNAPSHOT - - - - {{ .Name | lower }} - - - - - - kotlin-maven-plugin - org.jetbrains.kotlin - - - org.apache.maven.plugins - maven-dependency-plugin - - - - org.codehaus.mojo - build-helper-maven-plugin - - - - com.github.ozsie - detekt-maven-plugin - - - - \ No newline at end of file diff --git a/kotlin-runtime/scaffolding/ftl-module-{{ .Name | lower }}/ftl.toml b/kotlin-runtime/scaffolding/{{ .Name | lower }}/ftl.toml similarity index 100% rename from kotlin-runtime/scaffolding/ftl-module-{{ .Name | lower }}/ftl.toml rename to kotlin-runtime/scaffolding/{{ .Name | lower }}/ftl.toml diff --git a/kotlin-runtime/scaffolding/pom.xml b/kotlin-runtime/scaffolding/{{ .Name | lower }}/pom.xml similarity index 88% rename from kotlin-runtime/scaffolding/pom.xml rename to kotlin-runtime/scaffolding/{{ .Name | lower }}/pom.xml index b06a86d9c1..0454637fb8 100644 --- a/kotlin-runtime/scaffolding/pom.xml +++ b/kotlin-runtime/scaffolding/{{ .Name | lower }}/pom.xml @@ -1,22 +1,15 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 {{ .GroupID }} - {{ .ArtifactID }} + {{ .Name | camel | lower }} 1.0-SNAPSHOT - pom - - - ftl-module-{{ .Name | camel | lower }} - - 1.0-SNAPSHOT - http://127.0.0.1:8892 1.8 1.9.22 true @@ -170,5 +163,25 @@ + + + kotlin-maven-plugin + org.jetbrains.kotlin + + + org.apache.maven.plugins + maven-dependency-plugin + + + + org.codehaus.mojo + build-helper-maven-plugin + + + + com.github.ozsie + detekt-maven-plugin + + \ No newline at end of file diff --git a/kotlin-runtime/scaffolding/ftl-module-{{ .Name | lower }}/src/main/kotlin/ftl/{{ .Name | camel | lower }}/{{ .Name | camel }}.kt b/kotlin-runtime/scaffolding/{{ .Name | lower }}/src/main/kotlin/ftl/{{ .Name | camel | lower }}/{{ .Name | camel }}.kt similarity index 100% rename from kotlin-runtime/scaffolding/ftl-module-{{ .Name | lower }}/src/main/kotlin/ftl/{{ .Name | camel | lower }}/{{ .Name | camel }}.kt rename to kotlin-runtime/scaffolding/{{ .Name | lower }}/src/main/kotlin/ftl/{{ .Name | camel | lower }}/{{ .Name | camel }}.kt