You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
closeAndReleaseStagingRepository has been renamed to closeAndReleaseStagingRepositories for consistency
In this particular example, we don't call the task that was renamed, but if we did, Renovate would allow merging such change. The worst thing is that it would be caught at the moment of running the release workflow, which currently e.g. for github-workflows-kt happens once a month.
./gradlew tasks --all returns a list of tasks in a format like [1], there's also Gradle tooling API. We could extract the task hierarchy from there, and generate Kotlin type-safe accessors, e.g. jit-binding-server:run would map to such Kotlin code: jitBindingServer.run
in the GitHub workflow using the Kotlin script, we would have a type-safe wrapper over Gradle that would allow passing only tasks defined in the previous step (+a way to refer to a task in an unsafe, string-based way), along with being able to pass extra arguments like --no-configuration-cache and other free-form arguments
sometimes we want to run the same task for several projects, e.g. when we loop across them (ref). Ideally the proposed feature would allow it, e.g. by understanding that if project1 and project2 expose a run task, both projects should probably implement a common interface where run in both cases is the same property in terms of API
Example
Before:
val librariesToPublish =listOf(
":shared-internal",
":github-workflows-kt",
":action-binding-generator",
)
librariesToPublish.forEach { library ->run(
name ="Publish '$library' to Sonatype",
command ="./gradlew $library:publishToSonatype closeAndReleaseSonatypeStagingRepository --no-configuration-cache",
)
}
After (rough idea, subject to discussion):
val librariesToPublish =listOf(
projects.sharedInternal,
projects.githubWorkflowsKt,
projects.actionBindingGenerator,
)
librariesToPublish.forEach { library ->
runGradle(
name ="Publish '$library' to Sonatype",
tasks =listOf(
library.publishToSonatype,
tasks.closeAndReleaseSonatypeStagingRepository,
),
flags =listOf(noConfigurationCache),
)
}
[1]
> Task :tasks
------------------------------------------------------------
Tasks runnable from root project 'github-workflows-kt-monorepo'
------------------------------------------------------------
Application tasks
-----------------
automation:code-generator:run - Runs this project as a JVM application
jit-binding-server:run - Runs this project as a JVM application
jit-binding-server:runShadow - Runs this project as a JVM application using the shadow jar
jit-binding-server:startShadowScripts - Creates OS specific scripts to run the project as a JVM application using the shadow jar
Build tasks
-----------
assemble - Assembles the outputs of this project.
action-binding-generator:assemble - Assembles the outputs of this project.
automation:code-generator:assemble - Assembles the outputs of this project.
github-workflows-kt:assemble - Assembles the outputs of this project.
jit-binding-server:assemble - Assembles the outputs of this project.
maven-binding-builder:assemble - Assembles the outputs of this project.
...
The text was updated successfully, but these errors were encountered:
if the project and task name is known up front, we should mimic Gradle's type-safe accesors, so projects.fooBar.baz.someTask
if we need to build some project or task name out of smaller string parts, we could have projects["foo-bar"]["baz"]["task"], and if someone attempts to access a project/task that doesn't exist, it would fail at Kotlin script runtime, so still better than GitHub workflow runtime
Problem
Currently, the only way of calling a specific Gradle task is to give it as string, e.g.:
github-workflows-kt/.github/workflows/release.main.kts
Line 48 in 7f4b41b
It requires great attention to type them correctly. It's also risky to keep these as strings with regards to automatic dependency updates. E.g. see https://github.com/gradle-nexus/publish-plugin/releases/tag/v2.0.0:
In this particular example, we don't call the task that was renamed, but if we did, Renovate would allow merging such change. The worst thing is that it would be caught at the moment of running the release workflow, which currently e.g. for github-workflows-kt happens once a month.
Idea
In the spirit of https://docs.gradle.org/current/userguide/kotlin_dsl.html#type-safe-accessors.
Rough notes, nothing formal:
./gradlew tasks --all
returns a list of tasks in a format like [1], there's also Gradle tooling API. We could extract the task hierarchy from there, and generate Kotlin type-safe accessors, e.g.jit-binding-server:run
would map to such Kotlin code:jitBindingServer.run
--no-configuration-cache
and other free-form argumentsproject1
andproject2
expose arun
task, both projects should probably implement a common interface whererun
in both cases is the same property in terms of APIExample
Before:
After (rough idea, subject to discussion):
[1]
The text was updated successfully, but these errors were encountered: