Skip to content

Commit ead7fb6

Browse files
authored
Merge branch 'feat/dep-upgrades' into feat/pom-resolution
2 parents 732aeb8 + 33203f9 commit ead7fb6

15 files changed

Lines changed: 79 additions & 55 deletions

File tree

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ This file is for coding agents working in `mule-linter`.
77
- Build system: Gradle.
88
- Language mix: mostly Groovy, plus a small Java-based Maven plugin module.
99
- Test framework: Spock on JUnit Platform.
10-
- Java toolchain: Java 8.
10+
- Java toolchain: Java 17.
1111
- Modules declared in `settings.gradle`:
1212
- `mule-linter-spi`
1313
- `mule-linter-core`

buildSrc/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ dependencies {
1010
implementation 'org.gradlex.maven-plugin-development:org.gradlex.maven-plugin-development.gradle.plugin:1.0.3'
1111
implementation 'net.thauvin.erik.gradle.semver:net.thauvin.erik.gradle.semver.gradle.plugin:1.0.4'
1212
implementation 'com.gradleup.shadow:shadow-gradle-plugin:8.3.9'
13-
testImplementation platform("org.spockframework:spock-bom:2.2-groovy-3.0")
13+
testImplementation platform("org.spockframework:spock-bom:2.4-groovy-4.0")
1414
testImplementation 'org.spockframework:spock-core'
1515
}

buildSrc/src/main/groovy/mule-linter.groovy-common-conventions.gradle

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import java.time.Duration
2+
13
plugins {
24
id 'groovy'
35
// id 'codenarc'
@@ -21,7 +23,7 @@ dependencies {
2123

2224
java {
2325
toolchain {
24-
languageVersion = JavaLanguageVersion.of(8)
26+
languageVersion = JavaLanguageVersion.of(17)
2527
}
2628
withSourcesJar()
2729
}
@@ -61,9 +63,6 @@ test {
6163

6264
// Optimize test startup - only scan for tests once
6365
scanForTestClasses = true
64-
65-
// Disable redundant outputs for faster test execution
66-
outputs.upToDateWhen { true }
6766
}
6867

6968
// Enable forked compilation for better memory management
@@ -97,18 +96,11 @@ tasks.register('groovydocJar', Jar) {
9796
// Note: 'from' and 'dependsOn' above are method calls, not property assignments - this syntax is correct
9897

9998
// Ensure groovydocJar is built when publishing
100-
gradle.taskGraph.whenReady { graph ->
101-
def publishTasks = [
102-
"${project.name}:publish",
103-
"${project.name}:publishToMavenLocal",
104-
'publishAllPublicationsToStagingRepository'
105-
].collect { taskName ->
106-
graph.allTasks.find { it.path.endsWith(taskName) || it.name == taskName }
107-
}.findAll { it != null }
108-
109-
if (!publishTasks.isEmpty() || project.hasProperty('generateDocs')) {
110-
jar.dependsOn(groovydocJar)
111-
}
99+
// Note: Only adds dependency when explicitly requested via -PgenerateDocs or during publish tasks
100+
// Uses startParameter to avoid configuration cache issues with taskGraph access
101+
if (project.hasProperty('generateDocs') ||
102+
gradle.startParameter.taskNames.any { it.contains('publish') }) {
103+
jar.dependsOn(groovydocJar)
112104
}
113105

114106
//codenarc {

mule-linter-core/build.gradle

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,11 @@ tasks.register('generateGDSL', JavaExec) {
2424
classpath += sourceSets.main.compileClasspath
2525
classpath += sourceSets.main.runtimeClasspath
2626

27-
// Incremental build - only run if template changes
27+
// Incremental build - rely on Gradle inputs/outputs up-to-date checking
2828
inputs.file(templateFile)
2929
inputs.dir(sourceSets.main.groovy.srcDirs)
3030
outputs.file(outputGdslFile)
31-
32-
// Only run when explicitly requested, during build, or when inputs change
33-
onlyIf {
34-
!outputGdslFile.exists() ||
35-
templateFile.lastModified() > outputGdslFile.lastModified() ||
36-
gradle.taskGraph.hasTask(":${project.name}:jar")
37-
}
3831
}
3932

40-
// Only run GDSL generation when building jar, not during test
41-
gradle.taskGraph.whenReady { graph ->
42-
if (graph.hasTask(":${project.name}:jar") && !graph.hasTask(":${project.name}:test")) {
43-
tasks.jar.dependsOn(generateGDSL)
44-
}
45-
}
33+
// Wire GDSL generation to jar task (only runs if onlyIf condition is met)
34+
jar.dependsOn(generateGDSL)

mule-linter-core/src/test/groovy/com/avioconsulting/mule/linter/TestApplication.groovy

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ import com.avioconsulting.mule.linter.rule.cicd.JenkinsFileExistsRule
1212
class TestApplication {
1313

1414
static final String SAMPLE_APP_NAME = 'SampleMuleApp'
15+
16+
// Store previous value of system property for restoration
17+
private String previousSkipEffectivePomValue
1518
static final List<String> CONFIGS = ['src/main/mule/business-logic.xml',
1619
'src/main/mule/global-config.xml',
1720
'src/main/mule/sample-mule-app-api.xml']
@@ -53,9 +56,11 @@ class TestApplication {
5356

5457
/**
5558
* Enable effective POM generation for tests.
56-
* Clears the skip flag so MuleApplication uses effective POM
59+
* Clears the skip flag so MuleApplication uses effective POM.
60+
* Remember to call cleanup() in test cleanup to restore the previous value.
5761
*/
5862
void useEffectivePomGeneration() {
63+
previousSkipEffectivePomValue = System.getProperty('mule.linter.skipEffectivePom')
5964
System.clearProperty('mule.linter.skipEffectivePom')
6065
}
6166

@@ -139,6 +144,19 @@ class TestApplication {
139144
void remove() {
140145
appDir.deleteDir()
141146
}
147+
148+
/**
149+
* Restore system properties that were modified during test setup.
150+
* Call this in test cleanup() to avoid polluting other tests.
151+
*/
152+
void cleanup() {
153+
// Restore the mule.linter.skipEffectivePom property
154+
if (previousSkipEffectivePomValue != null) {
155+
System.setProperty('mule.linter.skipEffectivePom', previousSkipEffectivePomValue)
156+
} else {
157+
System.clearProperty('mule.linter.skipEffectivePom')
158+
}
159+
}
142160

143161
void removeFile(String fileName) {
144162
File fileToRemove = new File(appDir, fileName)

mule-linter-core/src/test/groovy/com/avioconsulting/mule/linter/model/EffectivePomIntegrationTest.groovy

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,18 @@ import com.avioconsulting.mule.linter.rule.pom.PomDependencyVersionRule
1414
import com.avioconsulting.mule.linter.rule.pom.PomExistsRule
1515
import com.avioconsulting.mule.linter.rule.pom.PomPluginAttributeRule
1616
import com.avioconsulting.mule.linter.rule.pom.PomPropertyValueRule
17+
import spock.lang.IgnoreIf
1718
import spock.lang.Specification
1819

1920
/**
2021
* Integration tests for effective POM resolution with parent POM inheritance.
2122
* Tests comprehensive parent-child sample for end-to-end validation of POM rules.
23+
*
24+
* NOTE: These tests require Maven to be available (maven.home system property or
25+
* MAVEN_HOME environment variable) and network access to resolve parent POMs.
26+
* Tests are skipped if Maven is not configured.
2227
*/
28+
@IgnoreIf({ !System.getProperty('maven.home') && !System.getenv('MAVEN_HOME') })
2329
@SuppressWarnings(['MethodName', 'MethodReturnTypeRequired', 'StaticFieldsBeforeInstanceFields'])
2430
class EffectivePomIntegrationTest extends Specification {
2531

@@ -30,6 +36,8 @@ class EffectivePomIntegrationTest extends Specification {
3036
}
3137

3238
def cleanup() {
39+
// Restore system properties before removing test app to avoid state leakage
40+
testApp.cleanup()
3341
testApp.remove()
3442
}
3543

mule-linter-core/src/test/groovy/com/avioconsulting/mule/linter/rule/configuration/FlowErrorHandlerRuleTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/cu
196196
\t\t<avio-logger:log doc:id="d5eb2fc2-e566-43fe-9a3f-e91426f3fda2" config-ref="topgolf-core-config" message="END: Get records from ACME system" category="${log.category}.examples" doc:name="END" correlation_id="#[correlationId]" logLocationInfo="true" />
197197
\t\t<error-handler >
198198
\t\t\t<on-error-continue enableNotifications="true" logException="true" doc:name="On Error Continue" doc:id="51bc12f9-1ec3-42b9-8bc4-90bdac19fa42" >
199-
\t\t\t\t<avio-logger:log doc:name="Log ERROR" doc:id="7362ee98-b097-4bb5-8ab8-c4329ec10a2a" config-ref="avio-core-logging-config" message="'Error occured in the flow"/>
199+
\t\t\t\t<avio-logger:log doc:name="Log ERROR" doc:id="7362ee98-b097-4bb5-8ab8-c4329ec10a2a" config-ref="AVIO_Logger_Config" message="'Error occurred in the flow"/>
200200
\t\t\t</on-error-continue>
201201
\t\t</error-handler>
202202
\t</flow>

mule-linter-core/src/test/groovy/com/avioconsulting/mule/linter/rule/configuration/LoggerAttributesRuleTest.groovy

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/
5555
http://www.mulesoft.org/schema/mule/avio-logger http://www.mulesoft.org/schema/mule/avio-logger/current/mule-avio-logger.xsd">
5656
<sub-flow name="a-sub-flow">
5757
<logger level="DEBUG" doc:name="Log Start" message="Starting" category="com.avioconsulting.mulelinter"/>
58-
<avio-logger:log level="DEBUG" doc:name="Log Start" config-ref="avio-core-logging-config" correlationId="#[correlationId]" message="Starting" category="com.avioconsulting.mulelinter"/>
58+
<avio-logger:log level="DEBUG" doc:name="Log Start" config-ref="AVIO_Logger_Config" correlationId="#[correlationId]" message="Starting" category="com.avioconsulting.mulelinter"/>
5959
<ee:transform doc:name="Simple Transform">
6060
<ee:message>
6161
<ee:set-payload ><![CDATA[%dw 2.0
@@ -66,13 +66,13 @@ output application/java
6666
</ee:message>
6767
</ee:transform>
6868
<logger level="DEBUG" doc:name="Log End" message="Ending" />
69-
<avio-logger:log level="DEBUG" config-ref="avio-core-logging-config" correlationId="#[correlationId]"
69+
<avio-logger:log level="DEBUG" config-ref="AVIO_Logger_Config" correlationId="#[correlationId]"
7070
doc:name="Log End"
7171
message="Ending" />
7272
</sub-flow>
7373
<sub-flow name="b-sub-flow">
7474
<logger level="WARN" message="Starting 2" doc:name="Log Start" category="com.avioconsulting.mulelinter" />
75-
<avio-logger:log level="WARN" config-ref="avio-core-logging-config" correlationId="#[correlationId]"
75+
<avio-logger:log level="WARN" config-ref="AVIO_Logger_Config" correlationId="#[correlationId]"
7676
message="Starting 2"
7777
doc:name="Log Start" category="com.avioconsulting.mulelinter" />
7878
<ee:transform doc:name="Another_Simple Transform">
@@ -85,7 +85,7 @@ output application/java
8585
</ee:message>
8686
</ee:transform>
8787
<logger level="TRACE" doc:name="Log End" category="com.avioconsulting.mulelinter" />
88-
<avio-logger:log level="TRACE" config-ref="avio-core-logging-config" correlationId="#[correlationId]" doc:name="Log End" category="com.avioconsulting.mulelinter" />
88+
<avio-logger:log level="TRACE" config-ref="AVIO_Logger_Config" correlationId="#[correlationId]" doc:name="Log End" category="com.avioconsulting.mulelinter" />
8989
</sub-flow>
9090
</mule>
9191
'''

mule-linter-core/src/test/groovy/com/avioconsulting/mule/linter/rule/configuration/LoggerCategoryExistsRuleTest.groovy

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.
6060
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
6161
http://www.mulesoft.org/schema/mule/avio-logger http://www.mulesoft.org/schema/mule/avio-logger/current/mule-avio-logger.xsd">
6262
\t<sub-flow name="a-sub-flow">
63-
\t\t<avio-logger:log level="DEBUG" doc:name="Log Start" config-ref="avio-core-logging-config" correlationId="#[correlationId]" message="Starting" category="com.avioconsulting.mulelinter"/>
63+
\t\t<avio-logger:log level="DEBUG" doc:name="Log Start" config-ref="AVIO_Logger_Config" correlationId="#[correlationId]" message="Starting" category="com.avioconsulting.mulelinter"/>
6464
\t\t<logger level="DEBUG" doc:name="Log Start" message="Starting" category="com.avioconsulting.mulelinter"/>
6565
\t\t<ee:transform doc:name="Simple Transform">
6666
\t\t\t<ee:message >
@@ -71,11 +71,11 @@ output application/java
7171
}]]></ee:set-payload>
7272
\t\t\t</ee:message>
7373
\t\t</ee:transform>
74-
\t\t<avio-logger:log level="DEBUG" config-ref="avio-core-logging-config" doc:name="Log End" message="Ending" />
74+
\t\t<avio-logger:log level="DEBUG" config-ref="AVIO_Logger_Config" doc:name="Log End" message="Ending" />
7575
\t\t<logger level="DEBUG" doc:name="Log End" message="Ending" />
7676
\t</sub-flow>
7777
\t<sub-flow name="b-sub-flow">
78-
\t\t<avio-logger:log level="WARN" config-ref="avio-core-logging-config" message="Starting 2" doc:name="Log Start" category="com.avioconsulting.mulelinter" />
78+
\t\t<avio-logger:log level="WARN" config-ref="AVIO_Logger_Config" message="Starting 2" doc:name="Log Start" category="com.avioconsulting.mulelinter" />
7979
\t\t<logger level="WARN" message="Starting 2" doc:name="Log Start" category="com.avioconsulting.mulelinter" />
8080
\t\t<ee:transform doc:name="Another_Simple Transform">
8181
\t\t\t<ee:message >
@@ -86,7 +86,7 @@ output application/java
8686
}]]></ee:set-payload>
8787
\t\t\t</ee:message>
8888
\t\t</ee:transform>
89-
\t\t<avio-logger:log level="TRACE" config-ref="avio-core-logging-config" doc:name="Log End" category="com.avioconsulting.mulelinter" />
89+
\t\t<avio-logger:log level="TRACE" config-ref="AVIO_Logger_Config" doc:name="Log End" category="com.avioconsulting.mulelinter" />
9090
\t\t<logger level="TRACE" doc:name="Log End" category="com.avioconsulting.mulelinter" />
9191
\t</sub-flow>
9292
</mule>'''

mule-linter-core/src/test/groovy/com/avioconsulting/mule/linter/rule/configuration/LoggerMessageContentsRuleTest.groovy

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,18 @@ http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/
8282
http://www.mulesoft.org/schema/mule/avio-logger http://www.mulesoft.org/schema/mule/avio-logger/current/mule-avio-logger.xsd">
8383
\t<flow name="get:\\user\\(id)\\roles:application\\json:my-api-config" doc:id="bcadf69e-4504-4654-9c7a-38971a01ed11" >
8484
\t\t<logger level="INFO" doc:name="Logger" message="#[payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298a" />
85-
\t\t<avio-logger:log doc:name="Logger" config-ref="avio-core-logging-config" message="#[payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298a" />
85+
\t\t<avio-logger:log doc:name="Logger" config-ref="AVIO_Logger_Config" message="#[payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298a" />
8686
\t\t<logger level="WARN" doc:name="Logger" message="#['Improper Value in Payload: ' ++ payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298b" />
87-
\t\t<avio-logger:log level="WARN" doc:name="Logger" config-ref="avio-core-logging-config" message="#['Improper Value in Payload: ' ++ payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298b" />
87+
\t\t<avio-logger:log level="WARN" doc:name="Logger" config-ref="AVIO_Logger_Config" message="#['Improper Value in Payload: ' ++ payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298b" />
8888
\t\t<logger level="INFO" doc:name="Logger" message="#['Improper Value in Payload: ' ++ payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298c" />
89-
\t\t<avio-logger:log doc:name="Logger" config-ref="avio-core-logging-config" message="#['Improper Value in Payload: ' ++ payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298c" />
89+
\t\t<avio-logger:log doc:name="Logger" config-ref="AVIO_Logger_Config" message="#['Improper Value in Payload: ' ++ payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298c" />
9090
\t\t<logger level="INFO" doc:name="Logger" message="#[payload.cheeseWheels]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298d" />
91-
\t\t<avio-logger:log doc:name="Logger" config-ref="avio-core-logging-config" message="#[payload.cheeseWheels]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298d" />
91+
\t\t<avio-logger:log doc:name="Logger" config-ref="AVIO_Logger_Config" message="#[payload.cheeseWheels]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298d" />
9292
\t\t<logger level="DEBUG" doc:name="Logger" message="#[payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298e" />
93-
\t\t<avio-logger:log level="DEBUG" config-ref="avio-core-logging-config" doc:name="Logger" message="#[payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298e" />
93+
\t\t<avio-logger:log level="DEBUG" config-ref="AVIO_Logger_Config" doc:name="Logger" message="#[payload]" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298e" />
9494
\t\t<flow-ref doc:name="Flow Reference" doc:id="4bc8fa65-90c4-454f-b5b7-c1c318f3a1cb" name="business-subflow-two"/>
9595
\t\t<logger level="INFO" doc:name="Logger" message="#['payload']" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298f" />
96-
\t\t<avio-logger:log doc:name="Logger" config-ref="avio-core-logging-config" message="#['payload']" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298f" />
96+
\t\t<avio-logger:log doc:name="Logger" config-ref="AVIO_Logger_Config" message="#['payload']" doc:id="6a676a90-4f3a-48c5-90af-358e8c1c298f" />
9797
\t</flow>
9898
</mule>'''
9999
}

0 commit comments

Comments
 (0)