Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added http4s jdk-client integration #110

Merged
merged 2 commits into from
May 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -120,11 +120,11 @@ jobs:

- name: Make target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
run: mkdir -p modules/http4s-ember/.jvm/target modules/json4s/.js/target modules/http4s-ember/.js/target modules/http4s/.jvm/target modules/http4s/.js/target modules/client-test/.js/target modules/circe/.jvm/target modules/scalacheck/.native/target target modules/client/.native/target modules/client-test/.jvm/target unidocs/target modules/sttp/.native/target .js/target site/target modules/client/.js/target examples/cross-platform/.js/target modules/json4s/.native/target modules/jawn/.jvm/target modules/codec-test/.jvm/target modules/http4s-netty/.jvm/target modules/objects-test/.js/target modules/client/.jvm/target modules/codec-test/.native/target modules/manifests/.js/target modules/circe/.js/target modules/objects/.js/target modules/objects/.jvm/target modules/jawn/.js/target modules/spray-json/.jvm/target modules/play-json/.jvm/target modules/zio/.jvm/target examples/jvm/.jvm/target modules/codec-test/.js/target examples/cross-platform/.native/target modules/manifests/.jvm/target modules/http4s-blaze/.jvm/target .jvm/target .native/target modules/sttp/.js/target modules/objects-test/.jvm/target modules/http4s/.native/target modules/sttp/.jvm/target modules/jawn/.native/target modules/circe/.native/target modules/zio-json/.js/target modules/objects/.native/target modules/json4s/.jvm/target modules/scalacheck/.jvm/target modules/zio-json/.jvm/target modules/java-ssl/.jvm/target modules/http4s-ember/.native/target examples/cross-platform/.jvm/target modules/manifests/.native/target modules/scalacheck/.js/target project/target
run: mkdir -p modules/http4s-ember/.jvm/target modules/json4s/.js/target modules/http4s-ember/.js/target modules/http4s/.jvm/target modules/http4s/.js/target modules/client-test/.js/target modules/circe/.jvm/target modules/scalacheck/.native/target target modules/client/.native/target modules/client-test/.jvm/target unidocs/target modules/sttp/.native/target .js/target site/target modules/client/.js/target examples/cross-platform/.js/target modules/json4s/.native/target modules/jawn/.jvm/target modules/codec-test/.jvm/target modules/http4s-netty/.jvm/target modules/objects-test/.js/target modules/client/.jvm/target modules/codec-test/.native/target modules/manifests/.js/target modules/circe/.js/target modules/objects/.js/target modules/objects/.jvm/target modules/jawn/.js/target modules/spray-json/.jvm/target modules/play-json/.jvm/target modules/zio/.jvm/target examples/jvm/.jvm/target modules/codec-test/.js/target examples/cross-platform/.native/target modules/manifests/.jvm/target modules/http4s-blaze/.jvm/target .jvm/target .native/target modules/sttp/.js/target modules/objects-test/.jvm/target modules/http4s/.native/target modules/sttp/.jvm/target modules/http4s-jdk/.jvm/target modules/jawn/.native/target modules/circe/.native/target modules/zio-json/.js/target modules/objects/.native/target modules/json4s/.jvm/target modules/scalacheck/.jvm/target modules/zio-json/.jvm/target modules/java-ssl/.jvm/target modules/http4s-ember/.native/target examples/cross-platform/.jvm/target modules/manifests/.native/target modules/scalacheck/.js/target project/target

- name: Compress target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
run: tar cf targets.tar modules/http4s-ember/.jvm/target modules/json4s/.js/target modules/http4s-ember/.js/target modules/http4s/.jvm/target modules/http4s/.js/target modules/client-test/.js/target modules/circe/.jvm/target modules/scalacheck/.native/target target modules/client/.native/target modules/client-test/.jvm/target unidocs/target modules/sttp/.native/target .js/target site/target modules/client/.js/target examples/cross-platform/.js/target modules/json4s/.native/target modules/jawn/.jvm/target modules/codec-test/.jvm/target modules/http4s-netty/.jvm/target modules/objects-test/.js/target modules/client/.jvm/target modules/codec-test/.native/target modules/manifests/.js/target modules/circe/.js/target modules/objects/.js/target modules/objects/.jvm/target modules/jawn/.js/target modules/spray-json/.jvm/target modules/play-json/.jvm/target modules/zio/.jvm/target examples/jvm/.jvm/target modules/codec-test/.js/target examples/cross-platform/.native/target modules/manifests/.jvm/target modules/http4s-blaze/.jvm/target .jvm/target .native/target modules/sttp/.js/target modules/objects-test/.jvm/target modules/http4s/.native/target modules/sttp/.jvm/target modules/jawn/.native/target modules/circe/.native/target modules/zio-json/.js/target modules/objects/.native/target modules/json4s/.jvm/target modules/scalacheck/.jvm/target modules/zio-json/.jvm/target modules/java-ssl/.jvm/target modules/http4s-ember/.native/target examples/cross-platform/.jvm/target modules/manifests/.native/target modules/scalacheck/.js/target project/target
run: tar cf targets.tar modules/http4s-ember/.jvm/target modules/json4s/.js/target modules/http4s-ember/.js/target modules/http4s/.jvm/target modules/http4s/.js/target modules/client-test/.js/target modules/circe/.jvm/target modules/scalacheck/.native/target target modules/client/.native/target modules/client-test/.jvm/target unidocs/target modules/sttp/.native/target .js/target site/target modules/client/.js/target examples/cross-platform/.js/target modules/json4s/.native/target modules/jawn/.jvm/target modules/codec-test/.jvm/target modules/http4s-netty/.jvm/target modules/objects-test/.js/target modules/client/.jvm/target modules/codec-test/.native/target modules/manifests/.js/target modules/circe/.js/target modules/objects/.js/target modules/objects/.jvm/target modules/jawn/.js/target modules/spray-json/.jvm/target modules/play-json/.jvm/target modules/zio/.jvm/target examples/jvm/.jvm/target modules/codec-test/.js/target examples/cross-platform/.native/target modules/manifests/.jvm/target modules/http4s-blaze/.jvm/target .jvm/target .native/target modules/sttp/.js/target modules/objects-test/.jvm/target modules/http4s/.native/target modules/sttp/.jvm/target modules/http4s-jdk/.jvm/target modules/jawn/.native/target modules/circe/.native/target modules/zio-json/.js/target modules/objects/.native/target modules/json4s/.jvm/target modules/scalacheck/.jvm/target modules/zio-json/.jvm/target modules/java-ssl/.jvm/target modules/http4s-ember/.native/target examples/cross-platform/.jvm/target modules/manifests/.native/target modules/scalacheck/.js/target project/target

- name: Upload target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ libraryDependencies ++= Seq(
"dev.hnaderi" %% "scala-k8s-http4s-ember" % "@VERSION@", // JVM, JS, Native ; http4s ember client integration
"dev.hnaderi" %% "scala-k8s-http4s-netty" % "@VERSION@", // JVM ; http4s netty client integration
"dev.hnaderi" %% "scala-k8s-http4s-blaze" % "@VERSION@", // JVM; http4s blaze client integration
"dev.hnaderi" %% "scala-k8s-http4s-jdk" % "@VERSION@", // JVM; http4s jdk-client integration
"dev.hnaderi" %% "scala-k8s-http4s" % "@VERSION@", // JVM, JS, Native ; http4s core and fs2 integration
"dev.hnaderi" %% "scala-k8s-zio" % "@VERSION@", // JVM ; ZIO native integration using zio-http and zio-json
"dev.hnaderi" %% "scala-k8s-sttp" % "@VERSION@", // JVM, JS, Native ; sttp integration using jawn parser
Expand Down
14 changes: 14 additions & 0 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ lazy val root =
http4sEmber,
http4sNetty,
http4sBlaze,
http4sJDK,
zio,
sttp,
codecTest,
Expand Down Expand Up @@ -172,6 +173,18 @@ lazy val http4sBlaze = module("http4s-blaze") {
.dependsOn(http4s)
}

lazy val http4sJDK = module("http4s-jdk") {
crossProject(JVMPlatform)
.crossType(CrossType.Pure)
.settings(
description := "http4s jdk-client based client for kubernetes",
libraryDependencies ++= Seq(
"org.http4s" %% "http4s-jdk-http-client" % "0.9.0"
)
)
.dependsOn(http4s)
}

lazy val sttp = module("sttp") {
crossProject(JVMPlatform, JSPlatform, NativePlatform)
.crossType(CrossType.Pure)
Expand Down Expand Up @@ -384,6 +397,7 @@ lazy val unidocs = project
http4sEmber.jvm,
http4sNetty.jvm,
http4sBlaze.jvm,
http4sJDK.jvm,
zio.jvm,
sttp.jvm,
circe.jvm,
Expand Down
1 change: 1 addition & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ libraryDependencies ++= Seq(
"dev.hnaderi" %% "scala-k8s-http4s-ember" % "@VERSION@", // JVM, JS, Native ; http4s ember client integration
"dev.hnaderi" %% "scala-k8s-http4s-netty" % "@VERSION@", // JVM ; http4s netty client integration
"dev.hnaderi" %% "scala-k8s-http4s-blaze" % "@VERSION@", // JVM; http4s blaze client integration
"dev.hnaderi" %% "scala-k8s-http4s-jdk" % "@VERSION@", // JVM; http4s jdk-client integration
"dev.hnaderi" %% "scala-k8s-http4s" % "@VERSION@", // JVM, JS, Native ; http4s core and fs2 integration
"dev.hnaderi" %% "scala-k8s-zio" % "@VERSION@", // JVM ; ZIO native integration using zio-http and zio-json
"dev.hnaderi" %% "scala-k8s-sttp" % "@VERSION@", // JVM, JS, Native ; sttp integration using jawn parser
Expand Down
2 changes: 1 addition & 1 deletion examples/cross-platform/src/main/scala/EmberExample.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package test

import cats.effect._
import cats.effect.std.UUIDGen
import dev.hnaderi.k8s.circe._
import dev.hnaderi.k8s.client._
import dev.hnaderi.k8s.client.http4s.EmberKubernetesClient
Expand All @@ -25,7 +26,6 @@ import io.circe.Json
import io.k8s.api.core.v1.ConfigMap
import io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta
import org.http4s.circe._
import cats.effect.std.UUIDGen

object EmberExample extends IOApp {

Expand Down
12 changes: 6 additions & 6 deletions modules/http4s-ember/.js/src/main/scala/PlatformCompanion.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,19 @@

package dev.hnaderi.k8s.client

import fs2.io.net.tls.TLSContext
import fs2.io.net.tls.SecureContext
import cats.effect.kernel.Async
import cats.effect.kernel.Resource
import cats.syntax.all._
import dev.hnaderi.k8s.utils._
import org.http4s._
import org.http4s.ember.client.EmberClientBuilder
import fs2.Chunk
import fs2.Stream
import fs2.io.file.Files
import fs2.io.file.Path
import fs2.io.net.tls.SecureContext
import fs2.io.net.tls.TLSContext
import org.http4s._
import org.http4s.ember.client.EmberClientBuilder
import scodec.bits.ByteVector
import fs2.Chunk
import fs2.Stream

private[client] trait PlatformCompanion extends Http4sKubernetesClient {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,20 @@

package dev.hnaderi.k8s.client

import fs2.io.net.tls.TLSContext
import fs2.io.net.tls.S2nConfig
import cats.effect.kernel.Async
import fs2.io.file.Files
import cats.effect.kernel.Resource
import fs2.Stream
import cats.syntax.all._
import dev.hnaderi.k8s.utils._
import org.http4s._
import org.http4s.ember.client.EmberClientBuilder
import fs2.Stream
import fs2.io.file.Files
import fs2.io.file.Path
import scodec.bits.ByteVector
import fs2.io.net.tls.CertChainAndKey
import fs2.io.net.tls.S2nConfig
import fs2.io.net.tls.TLSContext
import org.http4s._
import org.http4s.client.Client
import org.http4s.ember.client.EmberClientBuilder
import scodec.bits.ByteVector

private[client] trait PlatformCompanion extends Http4sKubernetesClient {
private def dataOrFile[F[_]: Async](
Expand Down
55 changes: 55 additions & 0 deletions modules/http4s-jdk/src/main/scala/JDKKubernetesClient.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright 2022 Hossein Naderi
*
* 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
*
* http://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.
*/

package dev.hnaderi.k8s.client
package http4s

import cats.effect.kernel.Async
import cats.effect.kernel.Resource
import cats.syntax.all._
import org.http4s.client.Client
import org.http4s.jdkhttpclient.JdkHttpClient

import java.net.http
import javax.net.ssl.SSLContext

object JDKKubernetesClient extends Http4sKubernetesClient with JVMPlatform {

override protected def buildClient[F[_]: Async]: Resource[F, Client[F]] =
Resource.eval(JdkHttpClient.simple[F])

override protected def buildWithSSLContext[F[_]](implicit
F: Async[F]
): SSLContext => Resource[F, Client[F]] = ssl =>
Resource.eval(F.executor.flatMap { exec =>
F.delay {
val builder = http.HttpClient.newBuilder()
// workaround for https://github.com/http4s/http4s-jdk-http-client/issues/200
if (Runtime.version().feature() == 11) {
val params = ssl.getDefaultSSLParameters()
params.setProtocols(params.getProtocols().filter(_ != "TLSv1.3"))
}

val client = builder
.sslContext(ssl)
.executor(exec)
.build()

JdkHttpClient(client)
}
})

}
4 changes: 2 additions & 2 deletions modules/http4s/src/main/scala/Http4sBackend.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ import dev.hnaderi.k8s.utils._
import fs2.Stream
import io.k8s.apimachinery.pkg.apis.meta.v1
import org.http4s._
import org.http4s.{Request => HRequest}
import org.http4s.client.Client
import org.http4s.client.dsl.Http4sClientDsl
import org.http4s.headers.`Content-Type`
import org.http4s.headers.Cookie
import org.http4s.headers.`Content-Type`
import org.http4s.syntax.literals._
import org.http4s.{Request => HRequest}

final class Http4sBackend[F[_], T] private (client: Client[F])(implicit
F: Concurrent[F],
Expand Down
10 changes: 5 additions & 5 deletions modules/http4s/src/main/scala/Http4sKubernetesClient.scala
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@ package dev.hnaderi.k8s.client
import cats.effect.Concurrent
import cats.effect.kernel.Async
import cats.effect.kernel.Resource
import cats.effect.std.Env
import cats.syntax.all._
import dev.hnaderi.k8s.manifest
import dev.hnaderi.k8s.utils._
import fs2.Stream
import org.http4s._
import org.http4s.client.Client
import fs2.io.file.Files
import fs2.io.file.Path
import cats.syntax.all._
import dev.hnaderi.k8s.manifest
import cats.effect.std.Env
import org.http4s._
import org.http4s.client.Client

trait Http4sKubernetesClient {
final type KClient[F[_]] = HttpClient[F] with StreamingClient[Stream[F, *]]
Expand Down