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)

Reply via email to