Skip to content
Snippets Groups Projects
Select Git revision
  • support-for-intellij-25.1
  • develop default protected
  • chore/support-for-intellijj-2024.3
  • feature/references
  • feature/commenter-for-aspect-files
  • feature/link-generated-code-and-definition
  • main
  • legacy
  • v0.3.5 protected
  • v0.3.4 protected
  • v0.3.3 protected
  • v0.3.2 protected
  • v0.3.1 protected
  • v0.3.0 protected
  • v0.2.0 protected
15 results

build.gradle.kts

Blame
  • build.gradle.kts 6.07 KiB
    import io.gitlab.arturbosch.detekt.Detekt
    import org.jetbrains.changelog.markdownToHTML
    import org.jetbrains.grammarkit.tasks.GenerateLexer
    import org.jetbrains.grammarkit.tasks.GenerateParser
    import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
    
    fun properties(key: String) = project.findProperty(key).toString()
    
    plugins {
    
        id("idea")
        // Java support
        id("java")
        // Kotlin support
        id("org.jetbrains.kotlin.jvm") version "1.5.10"
        // gradle-intellij-plugin - read more: https://github.com/JetBrains/gradle-intellij-plugin
        id("org.jetbrains.intellij") version "1.0"
        // gradle-changelog-plugin - read more: https://github.com/JetBrains/gradle-changelog-plugin
        id("org.jetbrains.changelog") version "1.1.2"
        // detekt linter - read more: https://detekt.github.io/detekt/gradle.html
        id("io.gitlab.arturbosch.detekt") version "1.18.1"
        // ktlint linter - read more: https://github.com/JLLeitschuh/ktlint-gradle
        id("org.jlleitschuh.gradle.ktlint") version "10.2.0"
    
        id("org.jetbrains.grammarkit") version "2021.1.3"
    }
    
    group = properties("pluginGroup")
    version = properties("pluginVersion")
    
    // Configure project's dependencies
    repositories {
        mavenCentral()
    }
    dependencies {
        detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.18.1")
    }
    java {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    
    idea {
        module {
            generatedSourceDirs.add(file("./src/gen"))
        }
    }
    
    // Configure gradle-intellij-plugin plugin.
    // Read more: https://github.com/JetBrains/gradle-intellij-plugin
    intellij {
        pluginName.set(properties("pluginName"))
        version.set(properties("platformVersion"))
        type.set(properties("platformType"))
        downloadSources.set(properties("platformDownloadSources").toBoolean())
        updateSinceUntilBuild.set(true)
    
        // Plugin Dependencies. Uses `platformPlugins` property from the gradle.properties file.
        plugins.set(properties("platformPlugins").split(',').map(String::trim).filter(String::isNotEmpty))
    }
    
    sourceSets {
        main {
            java.srcDir("src/gen/java")
        }
    }
    
    // Configure gradle-changelog-plugin plugin.
    // Read more: https://github.com/JetBrains/gradle-changelog-plugin
    changelog {
        version = properties("pluginVersion")
        groups = listOf("Added", "Changed", "Deprecated", "Removed", "Fixed")
    }
    
    // Configure detekt plugin.
    // Read more: https://detekt.github.io/detekt/kotlindsl.html
    detekt {
        config = files("./detekt-config.yml")
        buildUponDefaultConfig = true
    
        reports {
            html.enabled = true
            xml.enabled = false
            txt.enabled = false
        }
    }
    
    tasks {
    
        val generateGrammarLexer = task<GenerateLexer>("generateGrammarLexer") {
            source = "src/main/grammar/Grammar.flex"
            targetDir = "src/gen/java/org/jastadd/tooling/grammar/lexer/"
            targetClass = "GrammarLexer"
            purgeOldFiles = true
        }
    
        // not fully working because of https://github.com/JetBrains/gradle-grammar-kit-plugin/issues/3
        val generateGrammarParser = task<GenerateParser>("generateGrammarParser") {
            source = "src/main/grammar/Grammar.bnf"
            targetRoot = "src/gen/java"
            pathToParser = "/org/jastadd/tooling/grammar/GrammarParser.java"
            pathToPsiRoot = "/org/jastadd/tooling/grammar/psi"
            purgeOldFiles = true
        }
    
        val generateAspectLexer = task<GenerateLexer>("generateAspectLexer") {
            source = "src/main/grammar/Aspect.flex"
            targetDir = "src/gen/java/org/jastadd/tooling/aspect/lexer/"
            targetClass = "AspectLexer"
            purgeOldFiles = true
        }
    
        // not fully working because of https://github.com/JetBrains/gradle-grammar-kit-plugin/issues/3
        val generateAspectParser = task<GenerateParser>("generateAspectParser") {
            source = "src/main/grammar/Aspect.bnf"
            targetRoot = "src/gen/java"
            pathToParser = "/org/jastadd/tooling/aspect/AspectParser.java"
            pathToPsiRoot = "/org/jastadd/tooling/aspect/psi"
            purgeOldFiles = true
        }
    
        compileJava {
            dependsOn(generateGrammarLexer)
            dependsOn(generateGrammarParser)
            dependsOn(generateAspectLexer)
            dependsOn(generateAspectParser)
        }
    
        // Set the compatibility versions to 1.8
        withType<JavaCompile> {
            sourceCompatibility = "1.8"
            targetCompatibility = "1.8"
        }
        withType<KotlinCompile> {
            kotlinOptions.jvmTarget = "1.8"
        }
    
        withType<Detekt> {
            jvmTarget = "1.8"
        }
    
        patchPluginXml {
            version.set(properties("pluginVersion"))
            sinceBuild.set(properties("pluginSinceBuild"))
            untilBuild.set(properties("pluginUntilBuild"))
    
            // Extract the <!-- Plugin description --> section from README.md and provide for the plugin's manifest
            pluginDescription.set(
                File(projectDir, "README.md").readText().lines().run {
                    val start = "<!-- Plugin description -->"
                    val end = "<!-- Plugin description end -->"
    
                    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").run { markdownToHTML(this) }
            )
    
            // Get the latest available change notes from the changelog file
            changeNotes.set(provider { changelog.getLatest().toHTML() })
        }
    
        runPluginVerifier {
            ideVersions.set(properties("pluginVerifierIdeVersions").split(',').map(String::trim).filter(String::isNotEmpty))
        }
    
        publishPlugin {
            dependsOn("patchChangelog")
            token.set(System.getenv("PUBLISH_TOKEN"))
            // pluginVersion is based on the SemVer (https://semver.org) and supports pre-release labels, like 2.1.7-alpha.3
            // Specify pre-release label to publish the plugin in a custom Release Channel automatically. Read more:
            // https://plugins.jetbrains.com/docs/intellij/deployment.html#specifying-a-release-channel
            channels.set(listOf(properties("pluginVersion").split('-').getOrElse(1) { "default" }.split('.').first()))
        }
    }