Skip to content

Commit

Permalink
Plugins that make working with Gradle simpler (#101)
Browse files Browse the repository at this point in the history
  • Loading branch information
eygraber authored Dec 27, 2022
1 parent 1568275 commit 7114807
Show file tree
Hide file tree
Showing 38 changed files with 1,451 additions and 69 deletions.
1 change: 1 addition & 0 deletions .ci-java-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
17
14 changes: 0 additions & 14 deletions .github/dependabot.yml

This file was deleted.

28 changes: 14 additions & 14 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ jobs:
danger:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b
- uses: actions/checkout@v3

- name: Danger
uses: docker://ghcr.io/danger/danger-kotlin:1.1.0
uses: docker://ghcr.io/danger/danger-kotlin:1.2.0
with:
args: --failOnErrors --no-publish-check
env:
Expand All @@ -19,25 +19,25 @@ jobs:
no_accessors:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b
- uses: actions/checkout@v3

- name: Don't allow any accessor imports
run: if grep --include=\*.{kt,kts} -rne 'import gradle\.kotlin\.dsl\.accessors\._' .; then false; else true; fi

build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b
- uses: actions/checkout@v3

- uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b
- uses: actions/setup-java@v3.9.0
with:
distribution: 'zulu'
java-version: 17
java-version-file: .ci-java-version

- uses: gradle/wrapper-validation-action@55e685c48d84285a5b0418cd094606e199cca3b6
- uses: gradle/wrapper-validation-action@v1

- name: Setup Gradle
uses: gradle/gradle-build-action@3fbe033aaae657f011f88f29be9e65ed26bd29ef
uses: gradle/gradle-build-action@v2
with:
gradle-version: wrapper

Expand All @@ -47,22 +47,22 @@ jobs:
detektWithTypeResolution:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b
- uses: actions/checkout@v3

- uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b
- uses: actions/setup-java@v3.9.0
with:
distribution: 'zulu'
java-version: 17
java-version-file: .ci-java-version

- uses: gradle/wrapper-validation-action@55e685c48d84285a5b0418cd094606e199cca3b6
- uses: gradle/wrapper-validation-action@v1

- name: Setup Gradle
uses: gradle/gradle-build-action@3fbe033aaae657f011f88f29be9e65ed26bd29ef
uses: gradle/gradle-build-action@v2
with:
gradle-version: wrapper

- name: Ensure project builds
run: ./gradlew detektMain
run: ./gradlew :utils-base:detektMain :utils-detekt:detektMain :utils-kotlin:detektMain


env:
Expand Down
22 changes: 11 additions & 11 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,24 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b
- uses: actions/checkout@v3

- name: Generate versions
uses: HardNorth/github-version-generate@91998704a2b37be20604933d9c989ebade9c5f89
uses: HardNorth/github-version-generate@v1.3.0
with:
version-source: file
version-file: ${{ env.VERSION_FILE }}
version-file-extraction-pattern: ${{ env.VERSION_EXTRACT_PATTERN }}

- uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b
- uses: actions/setup-java@v3.9.0
with:
distribution: 'zulu'
java-version: 17
java-version-file: .ci-java-version

- uses: gradle/wrapper-validation-action@55e685c48d84285a5b0418cd094606e199cca3b6
- uses: gradle/wrapper-validation-action@v1

- name: Setup Gradle
uses: gradle/gradle-build-action@3fbe033aaae657f011f88f29be9e65ed26bd29ef
uses: gradle/gradle-build-action@v2
with:
gradle-version: wrapper

Expand All @@ -45,7 +45,7 @@ jobs:
run: ./gradlew publish -PVERSION_NAME=${{ env.RELEASE_VERSION }}

- name: Import GPG Key
uses: crazy-max/ghaction-import-gpg@111c56156bcc6918c056dbef52164cfa583dc549
uses: crazy-max/ghaction-import-gpg@v5.2.0
with:
gpg_private_key: ${{ secrets.GIT_SIGNING_PRIVATE_KEY }}
passphrase: ${{ secrets.GIT_SIGNING_PRIVATE_KEY_PASSWORD }}
Expand All @@ -55,7 +55,7 @@ jobs:

- name: Create tag
id: create_tag
uses: actions/github-script@d556feaca394842dc55e4734bf3bb9f685482fa0
uses: actions/github-script@v6
with:
script: |
github.rest.git.createRef({
Expand All @@ -67,7 +67,7 @@ jobs:
- name: Build changelog
id: build_changelog
uses: mikepenz/release-changelog-builder-action@d0814e580b0dffbc99d2b25e54cd42d2eb533a97
uses: mikepenz/release-changelog-builder-action@v3
with:
configuration: "changelog_config.json"
toTag: ${{ env.RELEASE_VERSION }}
Expand All @@ -76,15 +76,15 @@ jobs:

- name: Create release
id: create_release
uses: ncipollo/release-action@a2e71bdd4e7dab70ca26a852f29600c98b33153e
uses: ncipollo/release-action@v1.12.0
with:
body: ${{ steps.build_changelog.outputs.changelog }}
commit: release
name: Release ${{ env.RELEASE_VERSION }}
tag: ${{ env.RELEASE_VERSION }}
token: ${{ secrets.GITHUB_TOKEN }}

- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b
- uses: actions/checkout@v3
with:
ref: 'master'
token: ${{ secrets.PUSH_PAT }}
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/publish_snapshot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b
- uses: actions/checkout@v3

- uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b
- uses: actions/setup-java@v3.9.0
with:
distribution: 'zulu'
java-version: 17
java-version-file: .ci-java-version

- uses: gradle/wrapper-validation-action@55e685c48d84285a5b0418cd094606e199cca3b6
- uses: gradle/wrapper-validation-action@v1

- name: Setup Gradle
uses: gradle/gradle-build-action@3fbe033aaae657f011f88f29be9e65ed26bd29ef
uses: gradle/gradle-build-action@v2
with:
gradle-version: wrapper

Expand Down
10 changes: 10 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
[versions]
android-cacheFix = "2.6.0"

android-plugin = "8.0.0-alpha10"

compose-jetbrains = "1.2.2"

detekt = "1.22.0"
detektEygraber = "1.0.11"

Expand All @@ -22,9 +28,13 @@ kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
publish = { id = "com.vanniktech.maven.publish", version.ref = "publish" }

[libraries]
buildscript-android = { module = "com.android.tools.build:gradle", version.ref = "android-plugin" }
buildscript-androidCacheFix = { module = "gradle.plugin.org.gradle.android:android-cache-fix-gradle-plugin", version.ref = "android-cacheFix" }
buildscript-compose-jetbrains = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "compose-jetbrains" }
buildscript-detekt = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" }
buildscript-dokka = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" }
buildscript-ejson = { module = "com.eygraber:ejson-gradle", version.ref = "ejson" }
buildscript-foojay = "org.gradle.toolchains:foojay-resolver:0.4.0"
buildscript-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
buildscript-publish = { module = "com.vanniktech:gradle-maven-publish-plugin", version.ref = "publish" }
buildscript-utils-detekt = { module = "com.eygraber:gradle-utils-detekt", version.ref = "gradleUtils" }
Expand Down
2 changes: 1 addition & 1 deletion renovate.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"extends": [
"config:base"
],
"enabledManagers": ["gradle"],
"enabledManagers": ["gradle", "gradle-wrapper", "github-actions"],
"labels": ["dependencies"],
"prHourlyLimit": 3
}
5 changes: 5 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ pluginManagement {
}
gradlePluginPortal()
mavenCentral()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") {
content {
includeGroupByRegex("org\\.jetbrains\\.compose.*")
}
}
}
}

Expand Down
45 changes: 40 additions & 5 deletions utils-detekt/src/main/kotlin/com/eygraber/gradle/detekt/detekt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,38 @@ import io.gitlab.arturbosch.detekt.Detekt
import io.gitlab.arturbosch.detekt.extensions.DetektExtension
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.provider.Provider
import org.gradle.internal.Actions
import java.io.File

public fun Project.configureDetekt(
jdkVersion: Provider<String>,
configFile: File = File("$rootDir/detekt.yml"),
useRootConfigFile: Boolean = true,
useProjectConfigFile: Boolean = true,
configFiles: ConfigurableFileCollection = files(),
ignoredAndroidFlavors: List<String> = emptyList(),
ignoredAndroidVariants: List<String> = emptyList(),
configure: Action<DetektExtension> = Actions.doNothing()
) {
configureDetekt(jdkVersion.get(), configFile, configure)
configureDetekt(
jdkVersion.get(),
useRootConfigFile,
useProjectConfigFile,
configFiles,
ignoredAndroidFlavors,
ignoredAndroidVariants,
configure
)
}

public fun Project.configureDetekt(
jdkVersion: String,
configFile: File = File("$rootDir/detekt.yml"),
useRootConfigFile: Boolean = true,
useProjectConfigFile: Boolean = true,
configFiles: ConfigurableFileCollection = files(),
ignoredAndroidFlavors: List<String> = emptyList(),
ignoredAndroidVariants: List<String> = emptyList(),
configure: Action<DetektExtension> = Actions.doNothing()
) {
detekt {
Expand All @@ -30,14 +46,33 @@ public fun Project.configureDetekt(

buildUponDefaultConfig = true

config = files(configFile)
config = configFiles.apply {
val rootConfig = rootProject.file("detekt.yml")
if(useRootConfigFile && rootConfig.exists()) {
from(rootConfig)
}

val projectConfig = project.file("detekt.yml")
if(useProjectConfigFile && projectConfig.exists()) {
from(projectConfig)
}
}

ignoredFlavors = ignoredFlavors + ignoredAndroidFlavors
ignoredVariants = ignoredVariants + ignoredAndroidVariants

configure.execute(this)
}

tasks.withType(Detekt::class.java).configureEach {
// Target version of the generated JVM bytecode. It is used for type resolution.
jvmTarget = jdkVersion
val projectDir = projectDir
val buildDir = project.buildDir

exclude {
it.file.relativeTo(projectDir).startsWith(buildDir.relativeTo(projectDir))
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,20 @@ package com.eygraber.gradle.detekt

import com.eygraber.gradle.kotlin.kmp.kmpSourceSets
import org.gradle.api.Project
import org.gradle.api.UnknownTaskException
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper

public fun Project.registerCommonTestDetektTask() {
plugins.withType(KotlinMultiplatformPluginWrapper::class.java) {
registerDetektTask(
name = "metadataTest",
sourceSet = kmpSourceSets.getByName("commonTest")
)
try {
tasks.named("detektMetadataTest")
}
catch(_: UnknownTaskException) {
// only register the task if it hasn't already been registered
registerDetektTask(
name = "metadataTest",
sourceSet = kmpSourceSets.getByName("commonTest")
)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.eygraber.gradle.kotlin

public sealed class KotlinFreeCompilerArg(public val value: String) {
public class Unknown(value: String) : KotlinFreeCompilerArg(value)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.eygraber.gradle.kotlin

public sealed class KotlinOptIn(public val value: String) {
public object ExperimentalCoroutines : KotlinOptIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
public object ExperimentalTime : KotlinOptIn("kotlin.time.ExperimentalTime")
public object FlowPreview : KotlinOptIn("kotlinx.coroutines.FlowPreview")
public object JsExport : KotlinOptIn("kotlin.js.ExperimentalJsExport")
public object RequiresOptIn : KotlinOptIn("kotlin.RequiresOptIn")
public class Unknown(value: String) : KotlinOptIn(value)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.eygraber.gradle.kotlin

import org.gradle.api.Project
import org.gradle.api.artifacts.Dependency

public fun Project.doOnFirstMatchingIncomingDependencyBeforeResolution(
configurationName: String,
dependencyPredicate: Dependency.() -> Boolean,
onMatch: (Dependency) -> Unit
) {
configurations.named(configurationName).configure {
incoming.beforeResolve {
for(dependency in dependencies) {
if(dependencyPredicate(dependency)) {
onMatch(dependency)
break
}
}
}
}
}
Loading

0 comments on commit 7114807

Please sign in to comment.