Giter Club home page Giter Club logo

hubdle's Introduction

Kotlin version MavenCentral Snapshot

Build Coverage Quality Tech debt

Hubdle

Project and settings convention plugins which allow to create easily projects with different tools:

  • Kotlin projects like JVM, Android, Multiplatform, Gradle plugins, with different features, for example Compose,Kotest, Coroutines, Serialization...
  • Autoconfiguration of multiple tools like coverage, analysis, lints, formatting, documentation, publishing...
  • Auto-include projects and version catalogs.

Usage

plugins {
    id("com.javiersc.hubdle") version "$version"
}

// basic config to get a Kotlin jvm project with coroutines and a custom dependency
hubdle {
    kotlin {
        jvm {
            features {
                coroutines()
            }

            main {
                dependencies {
                    implementation("org.example:example:1.0.0")
                }
            }
        }
    }
}

Configurations

Visit the website

License

Copyright 2022 Javier Segovia Córdoba

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

hubdle's People

Contributors

actions-user avatar dependabot[bot] avatar javierqonto avatar javiersegoviacordoba avatar renovate-bot avatar renovate[bot] avatar wentum avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

hubdle's Issues

Project isolation support

Known issues:

  • all-projects plugin
    • Kover plugin 🚫
  • docs plugin
  • coverage plugin
    • Kover plugin 🚫
  • code-analysis
    • Detekt plugin ❓

Refactor DSL

Move to language-oriented instead of mixing it with some features or frameworks. For example:

From this one

kotlin {
  gradle {
    plugin { ... }
  }
}

To this one

kotlin {
  jvm {
    features {
      gradlePlugin { ... }
      // or more nested:
      // gradle {
      //   plugin { ... }
      // }
    }
  }
}

Fix documentation

All extensions are 404.

The problem could be the routes on nav in mkdocs.yml

image

Improve test tasks

Kotlin Multiplatform has a test tasks structure based on the source sets (commonTest, jvmTest, etc).

At the same time, Kotlin JVM and Android projects don't use that structure, so running all tests for a multi-project that combines JVM and Android projects can be challenging.

For Kotlin JVM projects:

  • Create allTest task, this task depends on jvmTest task.
  • Create jvmTest task, this task depends on the test task.

For Android projects it should be the same:

  • Create allTest task, this task depends on androidTest` task.
  • Create androidTest task, this task depends on the test task and on android<Variant>UnitTest*

Warning
*Additionally can be interesting, if the module has only one variant/flavor, that test depends on android<Variant>UnitTest.

Merge all publish plugin into one

Checks:

  • Kotlin Multiplatform if org.jetbrains.kotlin.multiplatform is applied
  • Kotlin JVM if org.jetbrains.kotlin.jvm is applied
  • Android library if com.android.libraryis applied and org.jetbrains.kotlin.multiplatform is not applied
  • Version Catalog if version-catalog is applied
  • version-catalog should not be applied by the publish plugin as it is doing right now
  • id("com.gradle.plugin-publish") should not be applied by the publish plugin as it is doing right now
  • Remove Dokka because publishing is using an empty javadoc

Source tasks shouldn't be wired to any task.

There are some tasks like generateProjectData which is generating source code in build/generated/... and that task is being wired directly to assemble and KotlinCompile tasks.

Instead, the generateProjectData task must be added as output of the correct source directory:

kotlin
    .extensions
    .findByType<KotlinProjectExtension>()
    .sourceSets["main"] // or `commonMain`
    .kotlin
    .srcDir(generateProjectData)

Single entry extension

Extension Overview

  • hubdle
    • config
      • analysis
        • isEnabled: Boolean
        • ignoreFailures: Boolean
        • includes: MutableList
        • excludes: MutableList
        • reports
          • html: Boolean
          • sarif: Boolean
          • txt: Boolean
          • xml: Boolean
        • rawConfig
          • detekt
      • binaryCompatibilityValidator
        • isEnabled: Boolean
        • rawConfig
          • apiValidation
      • coverage
        • isEnabled: Boolean
        • rawConfig
          • kover
      • documentation
        • changelog
        • readme
        • site
      • explicitApi: ExplicitApiMode
      • format
        • isEnabled: Boolean
        • includes: MutableList
        • excludes: MutableList
        • ktfmtVersion: String
        • rawConfig
          • spotless
      • install
        • preCommits
          • isEnabled: Boolean
          • allTests: Boolean
          • applyFormat: Boolean
          • assemble: Boolean
          • checkAnalysis: Boolean
          • checkApi: Boolean
          • checkFormat: Boolean
          • dumpApi: Boolean
      • nexus
        • isEnabled: Boolean
      • publishing
        • isEnabled: Boolean
        • rawConfig:
          • publishing
          • signing
      • versioning:
        • isEnabled: Boolean
        • tagPrefix: String
        • rawConfig:
          • semver
    • kotlin
      • android
        • library
          • isEnabled: Boolean
          • compileSdk: Int
          • minSdk: Int
          • jvmVersion: Int
          • main: Unit
          • test: Unit
          • features
          • rawConfig
            • android
      • gradle
        • plugin
          • isEnabled: Boolean
          • jvmVersion: Int
          • main
          • test
          • features
          • rawConfig
            • kotlin
            • gradlePlugin
        • versionCatalog
          • isEnabled: Boolean
          • catalogs: Unit
      • jvm
        • isEnabled: Boolean
        • jvmVersion: Int
        • main
        • test
        • features
        • rawConfig
          • kotlin
      • multiplatform
        • isEnabled: Boolean
        • jvmVersion: Boolean
        • common
        • android
          • publishLibraryVariants
          • publishAllLibraryVariants
          • rawConfig
            • android
        • ios
        • iosArm32
        • iosArm64
        • iosX64
        • iosSimulatorArm64
        • jvm
        • js
        • linux
        • linuxArm32Hfp
        • linuxArm64
        • linuxMips32
        • linuxMipsel32
        • linuxX64
        • macos
        • macosArm64
        • macosX64
        • mingw
        • mingwX64
        • mingwX86
        • native
        • tvos
        • tvosArm64
        • tvosSimulatorArm64
        • tvosX64
        • wasm
        • wasm32
        • watchos
        • watchosArm32
        • watchosArm64
        • watchosX64
        • watchosSimulatorArm64
        • watchosX86
        • features
          • minimumTargetsPerOS
        • rawConfig
          • kotlin

Dokka versioning

  1. Run switch gh-pages
  2. Copy old version to build/TBD
  3. Run switch -
  4. Build docs
  5. Deploy all versions

Improve Multiplatform extension

  • Add/Fix generic platform source sets (ios, darwin, ...)
  • Add Ignore* annotation for all platforms (i.e. IgnoreIOS)
    • Probable this should belong to a new library called kotlin-test-stdlib

Remove applying a plugin before configurate it

The state allows checking if a combination of plugins is compatible. Still, currently, in some places, multiple plugins can be applied to enable configuring something, for example, the source sets.

If pluginManager.withPlugin is used, it is possible to remove this issue as the lambda is executed even if the plugin is applied later. For example

pluginManager.withPlugin("org.jetbrains.kotlin.jvm") {
    the<KotlinJvmProjectExtension>().sourceSets.getByName("main").kotlin.srcDirs("foo")
}

if (state.kotlin.jvm.isEnabled) pluginManager.apply("org.jetbrains.kotlin.jvm")

Publish hubdle catalog

Instead of codegen the catalog, it should be possible to publish it. This allows publishing updated dependencies without needing a new Hubdle version.

This opens a new door, the default version of this catalog applied automatically by Hubdle can be the latest one on MavenCentral, if a specific project has any issue with any dependency, that dependency can be overridden with the official approach, or by downgrading the version of the catalog.

A problem related to Hubdle using the latest version of a catalog by default can be any breaking change, for example deleting a library will break a build without touching it. That can be fixed by setting a specific version of the catalog, but it would still be annoying.

Probably the better approach is to publish a compatible version of the catalog with Hubdle, and if a new version of the catalog is released, the consumer would upload the catalog in its project, if it breaks checks wouldn't pass.

The version can be passed from outside, for example:

hubdleSettings {
    hubdleVersionCatalog {
        version.set("1.0.0")
        // version.set("latest.release") other possibilities
        // version.set(hubdle.catalog.get().version.toString())
    }
}

Action Required: Fix Renovate Configuration

There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.

Location: .github/renovate.json
Error type: The renovate configuration file contains some invalid settings
Message: Invalid regExp for packageRules[0].matchPackagePatterns: 'org.jetbrains.kotlin(?!x\\b).', Invalid regExp for packageRules[0].matchPackagePatterns: 'org.jetbrains.kotlin(?!x\\b):'

Add `fixChecks` task

This task should depend on, if they exist:

  • applyFormat
  • dumpApi
  • kotlinUpgradeYarnLock

Improve Dokka configuration

Dokka is applied to all projects from the root project. Instead, force to apply manually to each project if a project needs to be documented.

Split site into site and api

Add Android NDK

  • androidNative
    • androidNativeArm32
    • androidNativeArm64
    • androidNativeX64
    • androidNativeX86

Fix Molecule config

Molecule plugin must not be applied if compose feature is enabled, only add the runtime library.


  * What went wrong:
  Failed to apply plugin 'app.cash.molecule'.
  > The Molecule Gradle plugin cannot be applied to the same project as the JetBrains Compose Gradle plugin.
    
    Both plugins attempt to configure the Compose compiler plugin which is incompatible. To use Molecule
    within a JetBrains Compose project you only need to add the runtime dependency:
    
        kotlin {
          sourceSets {
            commonMain {
              dependencies {
                implementation("app.cash.molecule:molecule-runtime:1.0.0")
              }
            }
          }
        }

Split tests

Use all of the new source sets:

  • test
  • integrationTest
  • functionalTest
  • testFixtures (if necessary)

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

  • Update Sqldelight to v2.0.2 (app.cash.sqldelight, app.cash.sqldelight:sqlite-driver, app.cash.sqldelight:native-driver, app.cash.sqldelight:jdbc-driver, app.cash.sqldelight:coroutines-extensions, app.cash.sqldelight:android-driver)

Detected dependencies

github-actions
.github/workflows/add-element-to-hubdle-catalog.yaml
  • JavierSegoviaCordoba/reusable-workflows main
  • JavierSegoviaCordoba/reusable-workflows main
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/apply-format.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/build-changelog-renovate-bot.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/build-itself-kotlin.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/build-kotlin-dispatcher.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/build-kotlin.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/dump-api.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/fix-checks.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/generate-version-tag.yaml
  • JavierSegoviaCordoba/reusable-workflows main
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/publish-kotlin-tag-c.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/publish-kotlin-tag-p.yaml
  • JavierSegoviaCordoba/reusable-workflows main
gradle
buildSrc/src/main/kotlin/com/javiersc/hubdle/logic/GenerateHubdleTask.kt
gradle.properties
settings.gradle.kts
build.gradle.kts
buildSrc/settings.gradle.kts
buildSrc/build.gradle.kts
gradle/hubdle.libs.versions.toml
  • com.android.tools.build:gradle 8.4.1
  • com.android.tools:desugar_jdk_libs 2.0.4
  • androidx.activity:activity-compose 1.9.0
  • androidx.activity:activity-ktx 1.9.0
  • androidx.appcompat:appcompat 1.7.0
  • androidx.compose.animation:animation 1.6.7
  • androidx.compose.animation:animation-core 1.6.7
  • androidx.compose.animation:animation-graphics 1.6.7
  • androidx.compose.compiler:compiler 1.5.14
  • androidx.compose.foundation:foundation 1.6.7
  • androidx.compose.foundation:foundation-layout 1.6.7
  • androidx.compose.foundation:foundation-text 1.2.1
  • androidx.compose.material:material 1.6.7
  • androidx.compose.material:material-icons-core 1.6.7
  • androidx.compose.material:material-icons-extended 1.6.7
  • androidx.compose.material:material-ripple 1.6.7
  • androidx.compose.material3:material3 1.2.1
  • androidx.compose.material3:material3-window-size-class 1.2.1
  • androidx.compose.runtime:runtime 1.6.7
  • androidx.compose.runtime:runtime-saveable 1.6.7
  • androidx.compose.runtime:runtime-tracing 1.0.0-beta01
  • androidx.compose.ui:ui 1.6.7
  • androidx.compose.ui:ui-test 1.6.7
  • androidx.compose.ui:ui-test-manifest 1.6.7
  • androidx.compose.ui:ui-tooling 1.6.7
  • androidx.compose.ui:ui-tooling-preview 1.6.7
  • androidx.compose.ui:ui-util 1.6.7
  • androidx.core:core-ktx 1.13.1
  • androidx.core:core-splashscreen 1.0.1
  • androidx.hilt:hilt-navigation-compose 1.2.0
  • androidx.lifecycle:lifecycle-viewmodel 2.8.1
  • androidx.lifecycle:lifecycle-viewmodel-compose 2.8.1
  • androidx.lifecycle:lifecycle-viewmodel-ktx 2.8.1
  • androidx.navigation:navigation-compose 2.7.7
  • io.arrow-kt:arrow-core 1.2.4
  • app.cash.molecule:molecule-runtime 2.0.0
  • app.cash.sqldelight:android-driver 2.0.0
  • app.cash.sqldelight:coroutines-extensions 2.0.0
  • app.cash.sqldelight:jdbc-driver 2.0.0
  • app.cash.sqldelight:native-driver 2.0.0
  • app.cash.sqldelight:sqlite-driver 2.0.0
  • app.cash.turbine:turbine 1.1.0
  • org.eclipse.jgit:org.eclipse.jgit 6.9.0.202403050737-r
  • com.facebook:ktfmt 0.49
  • io.insert-koin:koin-android 3.5.6
  • io.insert-koin:koin-androidx-compose 3.5.6
  • io.insert-koin:koin-core 3.5.6
  • io.insert-koin:koin-ktor 3.5.6
  • io.insert-koin:koin-logger-slf4j 3.5.6
  • io.insert-koin:koin-test 3.5.6
  • io.insert-koin:koin-test-junit4 3.5.6
  • io.insert-koin:koin-test-junit5 3.5.6
  • com.javiersc.gradle:gradle-extensions 1.0.0-alpha.34
  • com.javiersc.gradle:gradle-test-extensions 1.0.0-alpha.34
  • com.javiersc.kotlin:kotlin-compiler-extensions 0.1.1+2.0.0-RC1
  • com.javiersc.kotlin:kotlin-compiler-test-extensions 0.1.1+2.0.0-RC1
  • com.javiersc.kotlin:kotlin-stdlib 0.1.0-alpha.16
  • com.javiersc.kotlin:kotlin-test-junit 0.1.0-alpha.16
  • com.javiersc.kotlin:kotlin-test-junit5 0.1.0-alpha.16
  • com.javiersc.kotlin:kotlin-test-testng 0.1.0-alpha.16
  • com.javiersc.kotlinx:coroutines-run-blocking 0.1.0-rc.1
  • com.javiersc.kotlinx:coroutines-run-blocking-all 0.1.0-rc.1
  • com.javiersc.mokoki:mokoki 0.2.0-alpha.1
  • com.javiersc.mokoki:mokoki-serialization 0.2.0-alpha.1
  • com.javiersc.network:network-either 0.2.0-alpha.2
  • com.javiersc.network:network-either-logger 0.2.0-alpha.2
  • com.javiersc.network:resource-either 0.2.0-alpha.2
  • com.javiersc.network:network-resource-either-extensions 0.2.0-alpha.2
  • com.javiersc.semver:semver-core 0.1.0-beta.13
  • org.jetbrains.compose.compiler:compiler 1.5.14
  • org.jetbrains.kotlin:kotlin-annotations-jvm 2.0.0
  • org.jetbrains.kotlin:kotlin-compiler 2.0.0
  • org.jetbrains.kotlin:kotlin-compiler-embeddable 2.0.0
  • org.jetbrains.kotlin:kotlin-compiler-internal-test-framework 2.0.0
  • org.jetbrains.kotlin:kotlin-gradle-plugin 2.0.0
  • org.jetbrains.kotlin:kotlin-gradle-plugin-api 2.0.0
  • org.jetbrains.kotlin:kotlin-reflect 2.0.0
  • org.jetbrains.kotlin:kotlin-script-runtime 2.0.0
  • org.jetbrains.kotlin:kotlin-serialization 2.0.0
  • org.jetbrains.kotlin:kotlin-test 2.0.0
  • org.jetbrains.kotlin:kotlin-test-annotations-common 2.0.0
  • org.jetbrains.kotlin:kotlin-test-junit 2.0.0
  • org.jetbrains.kotlin:kotlin-test-junit5 2.0.0
  • org.jetbrains.kotlin:kotlin-test-testng 2.0.0
  • org.jetbrains.kotlinx:atomicfu 0.24.0
  • org.jetbrains.kotlinx:kotlinx-collections-immutable 0.3.7
  • org.jetbrains.kotlinx:kotlinx-coroutines-android 1.8.1
  • org.jetbrains.kotlinx:kotlinx-coroutines-core 1.8.1
  • org.jetbrains.kotlinx:kotlinx-coroutines-test 1.8.1
  • org.jetbrains.kotlinx:kotlinx-datetime 0.6.0
  • org.jetbrains.kotlinx:kotlinx-io-core 0.3.5
  • org.jetbrains.kotlinx:multik-core 0.2.3
  • org.jetbrains.kotlinx:multik-default 0.2.3
  • org.jetbrains.kotlinx:multik-kotlin 0.2.3
  • org.jetbrains.kotlinx:multik-openblas 0.2.3
  • org.jetbrains.kotlinx:kotlinx-serialization-core 1.6.3
  • org.jetbrains.kotlinx:kotlinx-serialization-json 1.6.3
  • org.jetbrains:markdown 0.7.3
  • org.junit:junit-bom 5.10.2
  • org.junit.jupiter:junit-jupiter 5.10.2
  • org.junit.jupiter:junit-jupiter-api 5.10.2
  • org.junit.jupiter:junit-jupiter-params 5.10.2
  • org.junit.platform:junit-platform-commons 1.10.2
  • org.junit.platform:junit-platform-launcher 1.10.2
  • org.junit.platform:junit-platform-runner 1.10.2
  • org.junit.platform:junit-platform-suite-api 1.10.2
  • io.kotest:kotest-assertions-core 5.9.0
  • io.kotest:kotest-assertions-json 5.9.0
  • io.kotest:kotest-assertions-sql 5.9.0
  • io.kotest.extensions:kotest-assertions-arrow 1.4.0
  • io.kotest.extensions:kotest-assertions-compiler 1.0.0
  • io.kotest.extensions:kotest-assertions-jsoup 1.0.1
  • io.kotest.extensions:kotest-assertions-klock 1.0.0
  • io.kotest.extensions:kotest-assertions-konform 1.1.0
  • io.kotest.extensions:kotest-assertions-kotlinx-datetime 1.1.0
  • io.kotest.extensions:kotest-assertions-ktor 2.0.0
  • io.kotest.extensions:kotest-extensions-allure 1.4.0
  • io.kotest.extensions:kotest-extensions-embedded-kafka 2.0.0
  • io.kotest.extensions:kotest-extensions-koin 1.3.0
  • io.kotest.extensions:kotest-extensions-mockserver 1.3.0
  • io.kotest.extensions:kotest-extensions-robolectric 0.5.0
  • io.kotest.extensions:kotest-extensions-spring 1.1.3
  • io.kotest.extensions:kotest-extensions-testcontainers 2.0.2
  • io.kotest.extensions:kotest-extensions-wiremock 3.1.0
  • io.kotest:kotest-property 5.9.0
  • io.kotest:kotest-runner-junit4 5.9.0
  • io.kotest:kotest-runner-junit5 5.9.0
  • io.ktor:ktor-client-cio 2.3.11
  • io.ktor:ktor-client-content-negotiation 2.3.11
  • io.ktor:ktor-client-core 2.3.11
  • io.ktor:ktor-client-mock 2.3.11
  • io.ktor:ktor-client-okhttp 2.3.11
  • io.ktor:ktor-serialization-kotlinx-json 2.3.11
  • com.russhwolf:multiplatform-settings 1.1.1
  • com.russhwolf:multiplatform-settings-coroutines 1.1.1
  • com.russhwolf:multiplatform-settings-datastore 1.1.1
  • com.russhwolf:multiplatform-settings-no-arg 1.1.1
  • com.russhwolf:multiplatform-settings-serialization 1.1.1
  • com.russhwolf:multiplatform-settings-test 1.1.1
  • app.softwork:kotlinx-serialization-csv 0.0.18
  • app.softwork:kotlinx-serialization-flf 0.0.18
  • com.squareup.moshi:moshi 1.15.1
  • com.squareup.okhttp3:mockwebserver 5.0.0-alpha.14
  • com.squareup.okhttp3:mockwebserver3-junit4 5.0.0-alpha.14
  • com.squareup.okhttp3:mockwebserver3-junit5 5.0.0-alpha.14
  • com.squareup.okhttp3:okhttp 5.0.0-alpha.14
  • com.squareup.okio:okio 3.9.0
  • com.squareup.retrofit2:converter-gson 2.11.0
  • com.squareup.retrofit2:converter-jackson 2.11.0
  • com.squareup.retrofit2:converter-jaxb 2.11.0
  • com.squareup.retrofit2:converter-jaxb3 2.11.0
  • com.squareup.retrofit2:converter-kotlinx-serialization 2.11.0
  • com.squareup.retrofit2:converter-moshi 2.11.0
  • com.squareup.retrofit2:converter-protobuf 2.11.0
  • com.squareup.retrofit2:converter-scalars 2.11.0
  • com.squareup.retrofit2:converter-simplexml 2.11.0
  • com.squareup.retrofit2:converter-wire 2.11.0
  • com.squareup.retrofit2:retrofit 2.11.0
  • com.squareup.retrofit2:retrofit-mock 2.11.0
  • com.adarshr.test-logger 4.0.0
  • com.android.application 8.4.1
  • com.android.library 8.4.1
  • app.cash.sqldelight 2.0.0
  • com.diffplug.gradle.spotless 6.25.0
  • io.github.gradle-nexus.publish-plugin 2.0.0
  • com.github.triplet.play 3.9.1
  • io.gitlab.arturbosch.detekt 1.23.6
  • com.gradle.develocity 3.17.4
  • com.gradle.plugin-publish 1.2.1
  • org.gradle.test-retry 1.5.9
  • com.javiersc.hubdle 0.7.0
  • com.javiersc.semver 0.5.1
  • org.jetbrains.changelog 2.2.0
  • org.jetbrains.compose 1.6.10
  • org.jetbrains.dokka 1.9.20
  • org.jetbrains.intellij 1.17.3
  • org.jetbrains.kotlin.android 2.0.0
  • org.jetbrains.kotlin.jvm 2.0.0
  • org.jetbrains.kotlin.multiplatform 2.0.0
  • org.jetbrains.kotlin.plugin.compose 2.0.0
  • org.jetbrains.kotlin.plugin.serialization 2.0.0
  • org.jetbrains.kotlinx.binary-compatibility-validator 0.14.0
  • org.jetbrains.kotlinx.kover 0.8.0
  • org.sonarqube 5.0.0.4638
  • ru.vyarus.mkdocs 4.0.1
hubdle-gradle-plugin/build.gradle.kts
hubdle-version-catalog/build.gradle.kts
sandbox/gradle.properties
sandbox/settings.gradle.kts
sandbox/build.gradle.kts
sandbox/consumer-kotlin-android/build.gradle.kts
sandbox/consumer-kotlin-jvm/gradle.properties
sandbox/consumer-kotlin-jvm/build.gradle.kts
sandbox/consumer-kotlin-multiplatform/build.gradle.kts
sandbox/consumer-settings/gradle.properties
sandbox/consumer-settings/settings.gradle.kts
sandbox/consumer-settings/included-library/settings.gradle.kts
sandbox/consumer-settings/library/build.gradle.kts
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.8

  • Check this box to trigger a request for Renovate to run again on this repository

Fix multiple publications in `hubdle-version-catalog` project

Multiple publications with coordinates 'com.javiersc.hubdle:hubdle-version-catalog:0.1.1-alpha.3' are published to repository 'sonatype'. The publications 'java' in project ':hubdle-version-catalog' and 'versionCatalog' in project ':hubdle-version-catalog' will overwrite each other!

Investigate `ExtensionAware` (extend third-party plugin extensions)

Investigate ExtensionAware to check if the currennt extension setup can be simplified.

package org.gradle.api.plugins;

import org.gradle.api.tasks.Internal;

/**
 * Objects that can be extended at runtime with other objects.
 *
 * <pre class='autoTested'>
 * // Extensions are just plain objects, there is no interface/type
 * class MyExtension {
 *   String foo
 *
 *   MyExtension(String foo) {
 *     this.foo = foo
 *   }
 * }
 *
 * // Add new extensions via the extension container
 * project.extensions.create('custom', MyExtension, "bar")
 * //                       («name»,   «type»,       «constructor args», …)
 *
 * // extensions appear as properties on the target object by the given name
 * assert project.custom instanceof MyExtension
 * assert project.custom.foo == "bar"
 *
 * // also via a namespace method
 * project.custom {
 *   assert foo == "bar"
 *   foo = "other"
 * }
 * assert project.custom.foo == "other"
 *
 * // Extensions added with the extension container's create method are themselves extensible
 * assert project.custom instanceof ExtensionAware
 * project.custom.extensions.create("nested", MyExtension, "baz")
 * assert project.custom.nested.foo == "baz"
 *
 * // All extension aware objects have a special “ext” extension of type ExtraPropertiesExtension
 * assert project.hasProperty("myProperty") == false
 * project.ext.myProperty = "myValue"
 *
 * // Properties added to the “ext” extension are promoted to the owning object
 * assert project.myProperty == "myValue"
 * </pre>
 *
 * Many Gradle objects are extension aware. This includes; projects, tasks, configurations, dependencies etc.
 * <p>
 * For more on adding &amp; creating extensions, see {@link ExtensionContainer}.
 * <p>
 * For more on extra properties, see {@link ExtraPropertiesExtension}.
 * <p>
 * An <code>ExtensionAware</code> object has several 'scopes' that Gradle searches for properties. These scopes are:</p>
 *
 * <ul>
 * <li>The object itself. This scope includes any property getters and setters declared by the
 * implementation class. The properties of this scope are readable or writable depending on the presence
 * of the corresponding getter or setter method.</li>
 *
 * <li>Groovy Meta-programming methods implemented by the object's class, like <code>propertyMissing()</code>. Care must be taken by plugin authors to
 * ensure <code>propertyMissing()</code> is implemented such that if a property is not found a MissingPropertyException(String, Class) exception is thrown.
 * If <code>propertyMissing()</code> always returns a value for any property, <em>Gradle will not search the rest of the scopes below.</em></li>
 *
 * <li>The <em>extra</em> properties of the object.  Each object maintains a map of extra properties, which
 * can contain any arbitrary name -&gt; value pair.  Once defined, the properties of this scope are readable and writable.</li>
 *
 * <li>The <em>extensions</em> added to the object by plugins. Each extension is available as a read-only property with the same name as the extension.</li>
 * </ul>
 */
public interface ExtensionAware {

    /**
     * The container of extensions.
     */
    @Internal
    ExtensionContainer getExtensions();

}

Cleanup Kotlin Multiplatform deprecated targets

Note

https://kotlinlang.org/docs/native-target-support.html

JS

  • Use js() instead of js(BOTH) or js(LEGACY)

Add targets

  • Add androidNativeArm32
  • Add androidNativeArm64
  • Add androidNativeX86
  • Add androidNativeX64
  • Add watchosDeviceArm64

Remove targets

  • Remove iosArm32
  • Remove watchosX86
  • Remove wasm32
  • Remove mingwX86
  • Remove linuxArm32Hfp
  • Remove linuxMips32
  • Remove linuxMipsel32

Blocked by:

  • Update to Kotlin 1.8.20
  • Update Compose Compiler to a version compatible with Kotlin 1.8.20

Allow using properties on Hubdle project and settings extensions

Currently, a bunch of properties can be set only via gradle.properties. This doesn't allow us to use integration tests as they only work with Gradle TestKit for now.

Property list:

Android

  • namespace
  • namespaceUseProject
  • namespaceUseKotlinFile

BuildFeatures

  • aidl
  • buildConfig
  • compose
  • renderScript
  • resValues
  • shaders
  • viewBinding

Analysis

Qodana

  • projectKey

Sonar

  • hostUrl
  • login
  • organization
  • projectKey
  • projectName

JetBrains

  • marketplaceCertificateChain
  • marketplaceKey
  • marketplaceKeyPassphrase

IntelliJ

  • downloadSources
  • publishToken token
  • type
  • sinceBuild
  • untilBuild
  • updateSinceUntilBuild
  • version

Nexus

  • nexusSnapshotRepositoryUrl
  • nexusStagingProfileId
  • nexusToken
  • nexusUrl
  • nexusUser

POM

  • name
  • description
  • url
  • licenseName
  • licenseUrl
  • developerId
  • developerName
  • developerEmail
  • scmUrl
  • scmConnection
  • scmDeveloperConnection

Project

  • group
  • mainProjectName
  • rootProjectDirName
  • rootProjectName
  • version

Publishing

  • nonSemver
  • sign

Signing

  • gnupgKey
  • gnupgPassphrase
  • keyId

Replace dependencies codegen

Instead of codegen dependencies, create a hubdle catalog.

Generate the catalog in build/catalogs/hubdle.libs.versions.toml

The user can override any version from the catalog easily using the official Gradle APIs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.