Skip to content

Commit f49472e

Browse files
authored
Trim bundled changelog (#4164)
Max allowed length is 65535 characters
1 parent 6a2ae39 commit f49472e

File tree

8 files changed

+87
-34
lines changed

8 files changed

+87
-34
lines changed

buildSrc/src/main/kotlin/software/aws/toolkits/gradle/changelog/ChangeLogGenerator.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import org.gradle.api.logging.Logger
77
import java.nio.file.Path
88
import java.time.LocalDate
99
import java.time.format.DateTimeFormatter
10-
import kotlin.streams.toList
1110

1211
/**
1312
* Generates a combined change log file based in Markdown syntax
@@ -45,7 +44,7 @@ class ChangeLogGenerator(private val writers: List<ChangeLogWriter>, private val
4544
private fun generateEntry(entry: ReleaseEntry) {
4645
val renderedEntry = renderEntry(entry)
4746
writers.forEach { writer ->
48-
writer.writeLine(renderedEntry)
47+
writer.writeEntry(renderedEntry)
4948
}
5049
}
5150

buildSrc/src/main/kotlin/software/aws/toolkits/gradle/changelog/ChangeLogWriter.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33

44
package software.aws.toolkits.gradle.changelog
55

6-
abstract class ChangeLogWriter(issueUrl: String? = null) {
7-
private val issueUrl = issueUrl?.trimEnd('/')?.plus("/")
6+
abstract class ChangeLogWriter(protected val repoUrl: String? = null) {
7+
private val issueUrl = repoUrl?.trimEnd('/')?.plus("issues/")
88

9-
open fun writeLine(line: String) {
10-
append(expandIssueLinks(line))
9+
open fun writeEntry(entry: String) {
10+
append(expandIssueLinks(entry))
1111
}
1212

13-
protected abstract fun append(line: String)
13+
protected abstract fun append(entry: String)
1414
abstract fun close()
1515

1616
/**

buildSrc/src/main/kotlin/software/aws/toolkits/gradle/changelog/GithubWriter.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ package software.aws.toolkits.gradle.changelog
55

66
import java.nio.file.Path
77

8-
class GithubWriter(private val file: Path, issueUrl: String?) : ChangeLogWriter(issueUrl) {
8+
class GithubWriter(private val file: Path, repoUrl: String?) : ChangeLogWriter(repoUrl) {
99
private val writer = file.toFile().bufferedWriter()
1010

11-
override fun append(line: String) {
12-
writer.write(line)
11+
override fun append(entry: String) {
12+
writer.write(entry)
1313
}
1414

1515
override fun close() {

buildSrc/src/main/kotlin/software/aws/toolkits/gradle/changelog/JetBrainsWriter.kt

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,28 @@ import java.io.File
1111
import java.lang.Math.max
1212
import java.lang.Math.min
1313

14-
class JetBrainsWriter(private val changeNotesFile: File, issueUrl: String? = null) : ChangeLogWriter(issueUrl) {
14+
class JetBrainsWriter(private val changeNotesFile: File, repoUrl: String? = null) : ChangeLogWriter(repoUrl) {
1515
private val sb = StringBuilder()
16+
private var isMaxLength = false
1617

17-
override fun append(line: String) {
18-
sb.append(line)
18+
override fun append(entry: String) {
19+
if (isMaxLength) return
20+
21+
// Invalid plugin descriptor 'plugin.xml'. The value of the '<change-notes>' parameter is too long. Its length is 65573 which is more than maximum 65535 characters long.
22+
if ((sb.length + entry.length) > 65000) {
23+
isMaxLength = true
24+
// language=Markdown
25+
repoUrl?.let {
26+
sb.append("""
27+
----
28+
Full plugin changelog available on [GitHub]($repoUrl/blob/main/CHANGELOG.md)
29+
""".trimIndent())
30+
}
31+
32+
return
33+
}
34+
35+
sb.append(entry)
1936
}
2037

2138
override fun close() {

buildSrc/src/main/kotlin/software/aws/toolkits/gradle/changelog/tasks/GenerateChangeLog.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import software.aws.toolkits.gradle.changelog.JetBrainsWriter
1818
abstract class GenerateChangeLog(private val shouldStage: Boolean) : ChangeLogTask() {
1919
@Input
2020
@Optional
21-
val issuesUrl: Provider<String?> = project.objects.property(String::class.java).convention("https://github.com/aws/aws-toolkit-jetbrains/issues")
21+
val repoUrl: Provider<String?> = project.objects.property(String::class.java).convention("https://github.com/aws/aws-toolkit-jetbrains")
2222

2323
@Input
2424
val includeUnreleased: Property<Boolean> = project.objects.property(Boolean::class.java).convention(false)
@@ -54,9 +54,9 @@ abstract class GenerateChangeLog(private val shouldStage: Boolean) : ChangeLogTa
5454
}
5555

5656
open class GeneratePluginChangeLog : GenerateChangeLog(false) {
57-
override fun createWriter(): ChangeLogWriter = JetBrainsWriter(changeLogFile.get().asFile, issuesUrl.get())
57+
override fun createWriter(): ChangeLogWriter = JetBrainsWriter(changeLogFile.get().asFile, repoUrl.get())
5858
}
5959

6060
open class GenerateGithubChangeLog : GenerateChangeLog(true) {
61-
override fun createWriter(): ChangeLogWriter = GithubWriter(changeLogFile.get().asFile.toPath(), issuesUrl.get())
61+
override fun createWriter(): ChangeLogWriter = GithubWriter(changeLogFile.get().asFile.toPath(), repoUrl.get())
6262
}

buildSrc/src/test/kotlin/software/aws/toolkits/gradle/changelog/ChangeLogGeneratorTest.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class ChangeLogGeneratorTest {
8282
sut.close()
8383

8484
writer.inOrder {
85-
verify().writeLine(
85+
verify().writeEntry(
8686
renderEntry(
8787
ReleaseEntry(
8888
LocalDate.of(2017, 2, 1),
@@ -91,7 +91,7 @@ class ChangeLogGeneratorTest {
9191
)
9292
)
9393
)
94-
verify().writeLine(
94+
verify().writeEntry(
9595
renderEntry(
9696
ReleaseEntry(
9797
LocalDate.of(2017, 1, 3),
@@ -103,7 +103,7 @@ class ChangeLogGeneratorTest {
103103
)
104104
)
105105
)
106-
verify().writeLine(
106+
verify().writeEntry(
107107
renderEntry(
108108
ReleaseEntry(
109109
LocalDate.of(2017, 1, 1),
@@ -175,9 +175,9 @@ class ChangeLogGeneratorTest {
175175
sut.addReleasedChanges(listOf(entry))
176176
sut.close()
177177

178-
verify(firstWriter).writeLine(anyString())
178+
verify(firstWriter).writeEntry(anyString())
179179
verify(firstWriter).close()
180-
verify(secondWriter).writeLine(anyString())
180+
verify(secondWriter).writeEntry(anyString())
181181
verify(secondWriter).close()
182182
}
183183

@@ -224,7 +224,7 @@ class ChangeLogGeneratorTest {
224224
sut.close()
225225

226226
argumentCaptor<String>().apply {
227-
verify(writer, times(2)).writeLine(capture())
227+
verify(writer, times(2)).writeEntry(capture())
228228

229229
assertThat(firstValue.trim()).isEqualTo(
230230
"""
@@ -271,7 +271,7 @@ class ChangeLogGeneratorTest {
271271
sut.close()
272272

273273
argumentCaptor<String>().apply {
274-
verify(writer).writeLine(capture())
274+
verify(writer).writeEntry(capture())
275275

276276
assertThat(firstValue.trim()).isEqualTo(
277277
"""
@@ -314,7 +314,7 @@ class ChangeLogGeneratorTest {
314314
sut.close()
315315

316316
argumentCaptor<String>().apply {
317-
verify(writer).writeLine(capture())
317+
verify(writer).writeEntry(capture())
318318

319319
assertThat(firstValue.trim()).isEqualTo(
320320
"""

buildSrc/src/test/kotlin/software/aws/toolkits/gradle/changelog/GithubWriterTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class GithubWriterTest {
2121
val file = folder.newFile()
2222
val sut = GithubWriter(file.toPath(), null)
2323

24-
sut.writeLine(
24+
sut.writeEntry(
2525
renderEntry(
2626
ReleaseEntry(
2727
LocalDate.of(2017, 2, 1),
@@ -30,7 +30,7 @@ class GithubWriterTest {
3030
)
3131
)
3232
)
33-
sut.writeLine(
33+
sut.writeEntry(
3434
renderEntry(
3535
ReleaseEntry(
3636
LocalDate.of(2017, 1, 3),
@@ -59,9 +59,9 @@ class GithubWriterTest {
5959
@Test
6060
fun canHandleReplaceGithubIssueLinks() {
6161
val file = folder.newFile()
62-
val sut = GithubWriter(file.toPath(), issueUrl = "http://github.com/org/repo/issues/")
62+
val sut = GithubWriter(file.toPath(), repoUrl = "http://github.com/org/repo/issues/")
6363

64-
sut.writeLine(
64+
sut.writeEntry(
6565
renderEntry(
6666
ReleaseEntry(
6767
LocalDate.of(2017, 2, 1),

buildSrc/src/test/kotlin/software/aws/toolkits/gradle/changelog/JetBrainsWriterTest.kt

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class JetBrainsWriterTest {
2121
val file = folder.newFile()
2222
val sut = JetBrainsWriter(file)
2323

24-
sut.writeLine(
24+
sut.writeEntry(
2525
renderEntry(
2626
ReleaseEntry(
2727
LocalDate.of(2017, 2, 1),
@@ -30,7 +30,7 @@ class JetBrainsWriterTest {
3030
)
3131
)
3232
)
33-
sut.writeLine(
33+
sut.writeEntry(
3434
renderEntry(
3535
ReleaseEntry(
3636
LocalDate.of(2017, 1, 3),
@@ -64,7 +64,7 @@ class JetBrainsWriterTest {
6464
val file = folder.newFile()
6565
val sut = JetBrainsWriter(file)
6666

67-
sut.writeLine(
67+
sut.writeEntry(
6868
renderEntry(
6969
ReleaseEntry(
7070
LocalDate.of(2017, 2, 1),
@@ -100,7 +100,7 @@ class JetBrainsWriterTest {
100100
val file = folder.newFile()
101101
val sut = JetBrainsWriter(file)
102102

103-
sut.writeLine(
103+
sut.writeEntry(
104104
renderEntry(
105105
ReleaseEntry(
106106
LocalDate.of(2017, 2, 1),
@@ -133,9 +133,9 @@ class JetBrainsWriterTest {
133133
@Test
134134
fun canHandleReplaceGithubIssueLinks() {
135135
val file = folder.newFile()
136-
val sut = JetBrainsWriter(file, issueUrl = "http://github.com/org/repo/issues/")
136+
val sut = JetBrainsWriter(file, repoUrl = "http://github.com/org/repo/issues/")
137137

138-
sut.writeLine(
138+
sut.writeEntry(
139139
renderEntry(
140140
ReleaseEntry(
141141
LocalDate.of(2017, 2, 1),
@@ -161,6 +161,43 @@ class JetBrainsWriterTest {
161161
)
162162
}
163163

164+
@Test
165+
fun `handles large changelog`() {
166+
val file = folder.newFile()
167+
val sut = JetBrainsWriter(file, "https://github.com/org/repo")
168+
169+
sut.writeEntry(
170+
renderEntry(
171+
ReleaseEntry(
172+
LocalDate.of(2017, 2, 1),
173+
"2.0.0-preview-3",
174+
listOf(Entry(ChangeType.FEATURE, "Third feature"))
175+
)
176+
)
177+
)
178+
sut.writeEntry(
179+
renderEntry(
180+
ReleaseEntry(
181+
LocalDate.of(2017, 1, 3),
182+
"2.0.0-preview-2",
183+
generateSequence { Entry(ChangeType.BUGFIX, "Some bugfix") }.take(10000).toList()
184+
)
185+
)
186+
)
187+
sut.close()
188+
189+
assertThat(file.readText().trim()).isEqualToIgnoringWhitespace(
190+
"""
191+
<h3><em>2.0.0-preview-3</em> (2017-02-01)</h3>
192+
<ul>
193+
<li><strong>(Feature)</strong> Third feature</li>
194+
</ul>
195+
<hr />
196+
<p>Full plugin changelog available on <a href="https://github.com/org/repo/blob/main/CHANGELOG.md">GitHub</a></p>
197+
""".trimIndent().wrappedInCData()
198+
)
199+
}
200+
164201
private fun String.wrappedInCData() =
165202
"""
166203
<idea-plugin>

0 commit comments

Comments
 (0)