This is an automated email from the ASF dual-hosted git repository. pcongiusti pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/main by this push: new 7932a06f1 fix(quarkus): don't override application.properties 7932a06f1 is described below commit 7932a06f194bd91622d3dfc3a31045ccc98e18ca Author: Pasquale Congiusti <pasquale.congiu...@gmail.com> AuthorDate: Fri Mar 8 11:12:15 2024 +0100 fix(quarkus): don't override application.properties --- pkg/builder/quarkus.go | 19 ++++++++++++-- pkg/builder/quarkus_test.go | 60 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/pkg/builder/quarkus.go b/pkg/builder/quarkus.go index 3568a6b0c..3c074f540 100644 --- a/pkg/builder/quarkus.go +++ b/pkg/builder/quarkus.go @@ -221,9 +221,13 @@ func BuildQuarkusRunnerCommon(ctx context.Context, mc maven.Context, project mav } func computeApplicationProperties(appPropertiesPath string, applicationProperties map[string]string) error { - f, err := os.OpenFile(appPropertiesPath, os.O_RDWR|os.O_CREATE, 0666) + f, err := os.OpenFile(appPropertiesPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { - return fmt.Errorf("failure while creating application.properties: %w", err) + return fmt.Errorf("failure while opening/creating application.properties: %w", err) + } + fstat, err := f.Stat() + if err != nil { + return err } if applicationProperties == nil { // Default build time properties @@ -231,12 +235,23 @@ func computeApplicationProperties(appPropertiesPath string, applicationPropertie } // disable quarkus banner applicationProperties["quarkus.banner.enabled"] = "false" + // camel-quarkus does route discovery at startup, but we don't want + // this to happen as routes are loaded at runtime and looking for + // routes at build time may try to load camel-k-runtime routes builder + // proxies which in some case may fail. + applicationProperties["quarkus.camel.routes-discovery.enabled"] = "false" // required for to resolve data type transformers at runtime with service discovery // the different Camel runtimes use different resource paths for the service lookup applicationProperties["quarkus.camel.service.discovery.include-patterns"] = "META-INF/services/org/apache/camel/datatype/converter/*,META-INF/services/org/apache/camel/datatype/transformer/*,META-INF/services/org/apache/camel/transformer/*" // Workaround to prevent JS runtime errors, see https://github.com/apache/camel-quarkus/issues/5678 applicationProperties["quarkus.class-loading.parent-first-artifacts"] = "org.graalvm.regex:regex" defer f.Close() + // Add a new line if the file is already containing some value + if fstat.Size() > 0 { + if _, err := f.WriteString("\n"); err != nil { + return err + } + } // Fill with properties coming from user configuration for k, v := range applicationProperties { if _, err := f.WriteString(fmt.Sprintf("%s=%s\n", k, v)); err != nil { diff --git a/pkg/builder/quarkus_test.go b/pkg/builder/quarkus_test.go index 791cc24a4..4b994fd4c 100644 --- a/pkg/builder/quarkus_test.go +++ b/pkg/builder/quarkus_test.go @@ -162,6 +162,66 @@ func TestGenerateQuarkusProjectWithBuildTimeProperties(t *testing.T) { require.NoError(t, err) } +func TestGenerateQuarkusProjectWithNativeSources(t *testing.T) { + tmpDir, err := os.MkdirTemp("", "go-test-camel-k-quarkus-native") + require.NoError(t, err) + defaultCatalog, err := camel.DefaultCatalog() + require.NoError(t, err) + + builderContext := builderContext{ + C: context.TODO(), + Path: tmpDir, + Namespace: "test", + Build: v1.BuilderTask{ + Runtime: defaultCatalog.Runtime, + Maven: v1.MavenBuildSpec{ + MavenSpec: v1.MavenSpec{}, + }, + Sources: []v1.SourceSpec{v1.NewSourceSpec("Test.java", "bogus, irrelevant for test", v1.LanguageJavaSource)}, + }, + } + if strings.Contains(defaults.DefaultRuntimeVersion, "SNAPSHOT") { + builderContext.Build.Maven.Repositories = []v1.Repository{ + { + ID: "APACHE-SNAPSHOT", + Name: "Apache Snapshot", + URL: "https://repository.apache.org/content/repositories/snapshots-group", + Snapshots: v1.RepositoryPolicy{ + Enabled: true, + UpdatePolicy: "always", + ChecksumPolicy: "ignore", + }, + Releases: v1.RepositoryPolicy{ + Enabled: false, + }, + }, + } + } + + err = prepareProjectWithSources(&builderContext) + require.NoError(t, err) + err = generateQuarkusProject(&builderContext) + require.NoError(t, err) + // use local Maven executable in tests + t.Setenv("MAVEN_WRAPPER", "false") + _, ok := os.LookupEnv("MAVEN_CMD") + if !ok { + t.Setenv("MAVEN_CMD", "mvn") + } + err = buildQuarkusRunner(&builderContext) + require.NoError(t, err) + appProps, err := os.ReadFile(filepath.Join(tmpDir, "maven", "src", "main", "resources", "application.properties")) + require.NoError(t, err) + assert.Contains(t, string(appProps), "quarkus.camel.routes-discovery.enabled=false\n") + assert.Contains(t, string(appProps), "camel.main.routes-include-pattern = classpath:routes/Test.java\n") + materializedRoute, err := os.ReadFile(filepath.Join(tmpDir, "maven", "src", "main", "resources", "routes", "Test.java")) + require.NoError(t, err) + assert.Contains(t, string(materializedRoute), "bogus, irrelevant for test") + // At this stage a maven project should have been executed. Verify the package was created. + _, err = os.Stat(filepath.Join(tmpDir, "maven", "target", "camel-k-integration-"+defaults.Version+".jar")) + require.NoError(t, err) +} + func TestBuildQuarkusRunner(t *testing.T) { tmpDir, err := os.MkdirTemp("", "go-test-camel-k-quarkus") require.NoError(t, err)