Type-safe Gradle task accessors
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
- Type d'issue
- Fonctionnalité
- Clarté
- À clarifier
- Activité
- À l'abandon
- Stack technique
- github-actions, kotlin
- Domaine
- build-system, ci-cd, devops
Piste de recherche
Start with the referenced .github/workflows/release.main.kts lines 45-48 and inspect the output of ./gradlew tasks --all, then compare the Gradle tooling API. The issue names no implementation files or tests; done would require an agreed design for generated project and task accessors, unsafe task references, extra flags, and shared tasks across projects.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Problem
Currently, the only way of calling a specific Gradle task is to give it as string, e.g.:
https://github.com/typesafegithub/github-workflows-kt/blob/7f4b41b5156d811a0d129ade49ebb64569d85ded/.github/workflows/release.main.kts#L48
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:
Backward incompatible changes
- 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.
Idea
In the spirit of https://docs.gradle.org/current/userguide/kotlin_dsl.html#type-safe-accessors.
Rough notes, nothing formal:
./gradlew tasks --allreturns 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:runwould 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-cacheand 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
project1andproject2expose aruntask, both projects should probably implement a common interface whererunin 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.
...
- Langage dominant
- Kotlin
- Étoiles
- 665
- Forks
- 30
- Merge moyen
- 4 j 19 h
- PR mergées (30 j)
- 5
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de typesafegithub/github-workflows-kt
-
bug
Difficulté 3/5 1-2 jours Accessibilité débutants 58/100
typesafegithub/github-workflows-kt#2389 · 7 commentaires ·
-
bug
Difficulté 3/5 1-2 jours Accessibilité débutants 42/100
typesafegithub/github-workflows-kt#2368 · 1 commentaire ·
-
problem
Difficulté 4/5 3-5 jours Accessibilité débutants 42/100
typesafegithub/github-workflows-kt#2348 · 2 commentaires ·
-
Use a lib to interact with GitHubPeut-être pris @LeoColman l’a pris il y a 553 jours. Ouverteoperational
typesafegithub/github-workflows-kt#1884 · 1 personne assignée ·
-
problem
Difficulté 3/5 1-2 jours Accessibilité débutants 30/100
typesafegithub/github-workflows-kt#1864 · 5 commentaires ·
Toutes les issues de typesafegithub/github-workflows-kt
Issues similaires
-
good first issue help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
[c7#258] fix(embedded): scheduled user task delivery runs on the service task worker executorOuverteSource: c7 Type: bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
navikt/esyfo-narmesteleder#654 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
nonbili/meron#79 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
KaliScan is probably deadOuverteSource is down
Difficulté 1/5 Moins d'une heure Accessibilité débutants 70/100
keiyoushi/extensions-source#19728 ·
Les mainteneurs répondent en général sous 1 jour