Skip to content

Commit f0b1042

Browse files
authored
Remove maven metadata from uploaded dependencies (#4231)
* Remove Maven metadata from uploaded dependencies. --------- Co-authored-by: Leonardo Araneda Freccero <[email protected]>
1 parent bfb8085 commit f0b1042

File tree

3 files changed

+59
-6
lines changed

3 files changed

+59
-6
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Amazon Q Code Transformation - Omit Maven metadata files when uploading dependencies to fix certain build failures in backend."
4+
}

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/CodeModernizerSessionContext.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,16 @@ const val BUILD_LOG_PATH = "build-logs.txt"
3737
const val MAVEN_CONFIGURATION_FILE_NAME = "pom.xml"
3838
const val MAVEN_DEFAULT_BUILD_DIRECTORY_NAME = "target"
3939
const val IDEA_DIRECTORY_NAME = ".idea"
40-
40+
const val INVALID_SUFFIX_SHA = "sha1"
41+
const val INVALID_SUFFIX_REPOSITORIES = "repositories"
4142
data class CodeModernizerSessionContext(
4243
val project: Project,
4344
val configurationFile: VirtualFile,
4445
val sourceJavaVersion: JavaSdkVersion,
4546
val targetJavaVersion: JavaSdkVersion,
4647
) {
4748
private val mapper = jacksonObjectMapper()
49+
private val ignoredDependencyFileExtensions = setOf(INVALID_SUFFIX_SHA, INVALID_SUFFIX_REPOSITORIES)
4850

4951
fun File.isMavenTargetFolder(): Boolean {
5052
val hasPomSibling = this.resolveSibling(MAVEN_CONFIGURATION_FILE_NAME).exists()
@@ -164,16 +166,18 @@ data class CodeModernizerSessionContext(
164166
}
165167
}
166168

167-
private fun iterateThroughDependencies(depDirectory: File): MutableList<File> {
169+
private fun Path.isIgnoredDependency() = this.toFile().extension in ignoredDependencyFileExtensions
170+
171+
fun iterateThroughDependencies(depDirectory: File): MutableList<File> {
168172
val dependencyfiles = mutableListOf<File>()
169173
Files.walkFileTree(
170174
depDirectory.toPath(),
171175
setOf(FileVisitOption.FOLLOW_LINKS),
172176
Int.MAX_VALUE,
173177
object : SimpleFileVisitor<Path>() {
174-
override fun visitFile(file: Path?, attrs: BasicFileAttributes?): FileVisitResult {
175-
if (file != null) {
176-
dependencyfiles.add(file.toFile())
178+
override fun visitFile(path: Path, attrs: BasicFileAttributes?): FileVisitResult {
179+
if (!path.isIgnoredDependency()) {
180+
dependencyfiles.add(path.toFile())
177181
}
178182
return FileVisitResult.CONTINUE
179183
}

plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeWhispererCodeModernizerSessionTest.kt

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,19 @@ import com.intellij.openapi.roots.ModuleRootManager
1414
import com.intellij.testFramework.common.ThreadLeakTracker
1515
import com.intellij.testFramework.runInEdtAndGet
1616
import com.intellij.testFramework.runInEdtAndWait
17+
import com.intellij.testFramework.utils.io.createFile
1718
import kotlinx.coroutines.runBlocking
1819
import org.apache.commons.codec.digest.DigestUtils
1920
import org.assertj.core.api.Assertions.assertThat
2021
import org.assertj.core.api.Assertions.fail
2122
import org.junit.Assert.assertEquals
2223
import org.junit.Assert.assertFalse
24+
import org.junit.Assert.assertNotNull
25+
import org.junit.Assert.assertTrue
2326
import org.junit.Before
2427
import org.junit.Rule
2528
import org.junit.Test
29+
import org.junit.rules.TemporaryFolder
2630
import org.mockito.Mockito.doReturn
2731
import org.mockito.Mockito.mock
2832
import org.mockito.Mockito.spy
@@ -54,7 +58,6 @@ import java.io.FileInputStream
5458
import java.util.Base64
5559
import java.util.zip.ZipFile
5660
import kotlin.io.path.Path
57-
import kotlin.test.assertNotNull
5861

5962
class CodeWhispererCodeModernizerSessionTest : CodeWhispererCodeModernizerTestBase(HeavyJavaCodeInsightTestFixtureRule()) {
6063
fun addFilesToProjectModule(vararg path: String) {
@@ -66,6 +69,10 @@ class CodeWhispererCodeModernizerSessionTest : CodeWhispererCodeModernizerTestBa
6669
@JvmField
6770
val wireMock = WireMockRule(WireMockConfiguration.wireMockConfig().dynamicPort())
6871

72+
@Rule
73+
@JvmField
74+
val tempFolder = TemporaryFolder()
75+
6976
@Before
7077
override fun setup() {
7178
super.setup()
@@ -338,6 +345,44 @@ class CodeWhispererCodeModernizerSessionTest : CodeWhispererCodeModernizerTestBa
338345
}
339346
}
340347

348+
@Test
349+
fun `CodeModernizerSession can create zip and excludes maven metadata from dependencies folder`() {
350+
// get project.projectFile because project.projectFile can not be null
351+
val context = CodeModernizerSessionContext(project, emptyPomFile, JavaSdkVersion.JDK_1_8, JavaSdkVersion.JDK_11)
352+
val m2Folders = listOf(
353+
"com/groupid1/artifactid1/version1",
354+
"com/groupid1/artifactid1/version2",
355+
"com/groupid1/artifactid2/version1",
356+
"com/groupid2/artifactid1/version1",
357+
"com/groupid2/artifactid1/version2",
358+
)
359+
// List of files that exist in m2 artifact directory
360+
val filesToAdd = listOf(
361+
"_remote.repositories",
362+
"test-0.0.1-20240315.145420-18.pom",
363+
"test-0.0.1-20240315.145420-18.pom.sha1",
364+
"test-0.0.1-SNAPSHOT.pom",
365+
"maven-metadata-test-repo.xml",
366+
"maven-metadata-test-repo.xml.sha1",
367+
"resolver-status.properties",
368+
)
369+
val expectedFilesAfterClean = listOf(
370+
"test-0.0.1-20240315.145420-18.pom",
371+
"test-0.0.1-SNAPSHOT.pom",
372+
"maven-metadata-test-repo.xml",
373+
"resolver-status.properties",
374+
)
375+
376+
m2Folders.forEach {
377+
val newFolder = tempFolder.newFolder(*it.split("/").toTypedArray())
378+
filesToAdd.forEach { file -> newFolder.toPath().resolve(file).createFile() }
379+
}
380+
381+
val dependenciesToUpload = context.iterateThroughDependencies(tempFolder.root)
382+
assertEquals(m2Folders.size * expectedFilesAfterClean.size, dependenciesToUpload.size)
383+
assertTrue(dependenciesToUpload.all { it.name in expectedFilesAfterClean })
384+
}
385+
341386
@Test
342387
fun `CodeModernizer can create modernization job`() {
343388
doReturn(ZipCreationResult.Succeeded(File("./tst-resources/codemodernizer/test.txt")))

0 commit comments

Comments
 (0)