aboutsummaryrefslogtreecommitdiff
path: root/build.gradle.kts
blob: 89b2ea9da67b4c6e01e4ebab5862d8b876281b47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import org.jetbrains.changelog.Changelog
import org.jetbrains.changelog.markdownToHTML

fun properties(key: String) = providers.gradleProperty(key)
fun environment(key: String) = providers.environmentVariable(key)

plugins {
    id("java")
    alias(libs.plugins.kotlin)
    alias(libs.plugins.intellij)
    alias(libs.plugins.kotlinter)
	alias(libs.plugins.changelog)
}

group = properties("pluginGroup").get()
version = properties("pluginVersion").get()

repositories {
    maven("https://repo.polyfrost.org/releases")
}

kotlin {
    jvmToolchain(17)
}

kotlinter {
    ignoreFailures = false
    reporters = arrayOf("checkstyle", "plain")
}

intellij {
    pluginName = properties("pluginName")
    version = properties("platformVersion")
	type = properties("platformType")

    plugins = properties("platformPlugins").map {
        it.split(',').map(String::trim).filter(String::isNotEmpty)
    }
}

changelog {
	groups.empty()
	repositoryUrl = properties("pluginRepositoryUrl")
}

tasks {
    wrapper {
        gradleVersion = properties("gradleVersion").get()
    }

    patchPluginXml {
        version = properties("pluginVersion")
        sinceBuild = properties("pluginSinceBuild")
        untilBuild = properties("pluginUntilBuild")

		pluginDescription = providers.fileContents(layout.projectDirectory.file("README.md")).asText.map {
			val start = "<!-- plugin description -->"
			val end = "<!-- plugin description end -->"

			with (it.lines()) {
				if (!containsAll(listOf(start, end))) {
					throw GradleException("Plugin description section not found in README.md:\n$start ... $end")
				}
				subList(indexOf(start) + 1, indexOf(end)).joinToString("\n").let(::markdownToHTML)
			}
		}

		val changelog = project.changelog
		changeNotes = properties("pluginVersion").map { pluginVersion ->
			with(changelog) {
				renderItem(
					(getOrNull(pluginVersion) ?: getUnreleased())
						.withHeader(false)
						.withEmptySections(false),
					Changelog.OutputType.HTML,
				)
			}
		}
    }

	runIdeForUiTests {
		systemProperty("robot-server.port", "8082")
		systemProperty("ide.mac.message.dialogs.as.sheets", "false")
		systemProperty("jb.privacy.policy.text", "<!--999.999-->")
		systemProperty("jb.consents.confirmation.enabled", "false")
	}

	signPlugin {
		certificateChain = environment("CERTIFICATE_CHAIN")
		privateKey = environment("PRIVATE_KEY")
		password = environment("PRIVATE_KEY_PASSWORD")
	}

	publishPlugin {
		dependsOn("patchChangelog")
		token = environment("PUBLISH_TOKEN")
		channels = properties("pluginVersion").map {
			listOf(it.substringAfter("-", "").substringBefore(".").ifEmpty {
				"default"
			})
		}
	}
}