Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DevoxxFR - Comment nous utilisons Kotlin et Gra...

DevoxxFR - Comment nous utilisons Kotlin et Gradle pour faire évoluer la communauté WireMock

Le projet WireMock et sa communauté de développeurs se développent rapidement. Alors, nous avons besoin d'outils de développement appropriés pour offrir la meilleure expérience de développement possible à nos principaux utilisateurs finaux et contributeurs. WireMock utilise Gradle depuis longtemps, et nous adoptons Kotlin comme langage pour le développement d'extensions et les définitions de build. Même langage pour les développeurs pour le code d'extension, les scripts WireMock et les définitions de build? Ce serait cool!

Dans cette présentation, je vais expliquer comment nous utilisons et prévoyons d'utiliser Kotlin et Gradle pour améliorer la productivité des développeurs. Nous allons discuter Kotlin DSL pour Gradle, les “Gradle convention plugins” pour le logiciel des builds partagées, le développement d'extensions du WireMock dans Kotlin et ses DSL bindings. Je vais utiliser les exemples du WireMock qui sont open source et disponibles sur GitHub.

Oleg Nenashev

April 18, 2024
Tweet

Resources

More Decks by Oleg Nenashev

Other Decks in Technology

Transcript

  1. > whoami @oleg_nenashev oleg-nenashev Dr. Nenashev / Mr. Jenkins Architecte

    de communauté Bricoleur d'automatisation #RussiansAgainstPutin #StandWithUkraine 1.x
  2. wiremock.org IF func(requête) THEN func(réponse) * * La réalité est

    BIEN plus compliquée WireMock JSON: Client library réponse requête Client App Serveur de l’API HTTP/2
  3. 13

  4. Écosystème de WireMock & JVM • Java • Kotlin •

    Scala • Groovy • Clojure • (?)Android • JUnit 4/5 • Testcontainers • Sprint Boot • Spring Cloud Contract • Quarkus • Maven/Gradle • Spock • Pact
  5. DSL Bindings pour Kotlin 18 wiremock/kotlin-wiremock par Marcin Ziolo wiremock.get

    { url equalTo "/users/1" } returns { statusCode = 200 header = "Content-Type" to "application/json" body = """ { "id": 1, "name": "Bob" } """ }
  6. Adaptateur pour Kotest 19 kotest/kotest-extensions-wiremock class SomeTest : FunSpec({ val

    customerServiceServer = WireMockServer(9000) listener(WireMockListener(customerServiceServer, ListenerMode.PER_SPEC)) test("let me get customer information") { customerServiceServer.stubFor( WireMock.get(WireMock.urlEqualTo("/customers/123")) .willReturn(WireMock.ok()) ) val connection = URL("http://localhost:9000/customers/123") .openConnection() as HttpURLConnection connection.responseCode shouldBe 200 } // ... }) https://kotest.io
  7. 21

  8. Nous utilisons Gradle dans WireMock • build.gradle dans WireMock Java

    ◦ wiremock/wiremock/blob/master/build.gradle • la majorité des plugins • la majorité des intégrations JVM • outils de développement 24
  9. Et Kotlin! La Déclaration d'Expérience des Développeurs, l'île de Kotlin,

    2023 25 blog.gradle.org/kotlin-dsl-is-now-the-default -for-new-gradle-builds • 2023 - Kotlin est le langage par défaut pour les définitions Gradle • Scripts, Plugins, Convention Plugins
  10. Convention Plugins en Gradle Vous pouvez partager la logique •

    Dans votre project multi-repo 27 docs.gradle.org/current/samples/ sample_publishing_convention_plugins.html
  11. Convention Plugins en Gradle Vous pouvez partager la logique •

    Dans votre projet multi-repo • … ou entre l’autres repositories 28 plugins.gradle.org
  12. Convention Plugins en Gradle Vous pouvez partager la logique •

    Dans votre projet multi-repo ou entre les repositories • En DSL Kotlin/Groovy 29 D S L
  13. Convention Plugins en Gradle Partagez la logique • Dans votre

    projet multi-repo ou entre les repositories • En DSL Kotlin/Groovy • Le libraire Kotlin plein github.com/zapzombies/gradle-convention-plugins
  14. WireMock Convention Plugin wiremock/gradle-wiremock-extension-plugins • Processus Gradle unifié • Gestion

    des dépendances unifié • Shading pour la bibliothèque WireMock et WireMock Standalone • Generation des POMs Maven • Automatisation des releases vers Maven Central 31
  15. 37

  16. Les conclusions • Kotlin est bon pour encapsuler la complexité

    de votre automatisation • Gradle peut être simple pour les utilisateurs finaux • Considérez les plugins de convention et les catalogues de versions 38
  17. 40