diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a92b79ff..28beba09 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,131 +1,254 @@ -name: CI +# This file was autogenerated using `zio-sbt-ci` plugin via `sbt ciGenerateGithubWorkflow` +# task and should be included in the git repository. Please do not edit it manually. +name: CI env: - JDK_JAVA_OPTIONS: -XX:+PrintCommandLineFlags # JDK_JAVA_OPTIONS is _the_ env. variable to use for modern Java - JVM_OPTS: -XX:+PrintCommandLineFlags # for Java 8 only (sadly, it is not modern enough for JDK_JAVA_OPTIONS) - -on: - pull_request: - push: - branches: - - 'series/1.x' - - 'series/2.x' + JDK_JAVA_OPTIONS: -XX:+PrintCommandLineFlags + JVM_OPTS: -XX:+PrintCommandLineFlags +'on': + workflow_dispatch: {} release: types: - - published - + - published + push: + branches: + - series/2.x + pull_request: {} + create: {} jobs: - lint: - runs-on: ubuntu-20.04 - timeout-minutes: 30 - strategy: - fail-fast: false + build: + name: Build + runs-on: ubuntu-latest + continue-on-error: true steps: - - name: Checkout current branch - uses: actions/checkout@v3.3.0 - with: - fetch-depth: 0 - - name: Setup Java - uses: actions/setup-java@v3.9.0 - with: - distribution: temurin - java-version: 17 - check-latest: true - - name: Cache scala dependencies - uses: coursier/cache-action@v6 - - name: Lint code - run: ./sbt ciCheck - - website: - runs-on: ubuntu-20.04 - timeout-minutes: 60 + - name: Git Checkout + uses: actions/checkout@v3.5.0 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v3.10.0 + with: + distribution: temurin + java-version: '8' + check-latest: true + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Check all code compiles + run: sbt +Test/compile + - name: Check artifacts build process + run: sbt +publishLocal + - name: Check website build process + run: sbt docs/clean; sbt docs/buildWebsite + lint: + name: Lint + runs-on: ubuntu-latest + continue-on-error: false steps: - - name: Checkout current branch - uses: actions/checkout@v3.3.0 - - name: Setup Java - uses: actions/setup-java@v3.9.0 - with: - distribution: temurin - java-version: 17 - check-latest: true - - name: Cache scala dependencies - uses: coursier/cache-action@v6 - - name: Check Website Generation - run: ./sbt compileDocs - + - name: Git Checkout + uses: actions/checkout@v3.5.0 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v3.10.0 + with: + distribution: temurin + java-version: '8' + check-latest: true + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Check if the site workflow is up to date + run: sbt ciCheckGithubWorkflow + - name: Lint + run: sbt lint test: - runs-on: ubuntu-20.04 - timeout-minutes: 30 + name: Test + runs-on: ubuntu-latest + continue-on-error: false strategy: fail-fast: false matrix: - java: ['8', '11', '17'] - scala: ['2.12.17', '2.13.10', '3.2.2'] + java: + - '8' + - '11' + - '17' steps: - - name: Checkout current branch - uses: actions/checkout@v3.3.0 - with: - fetch-depth: 0 - - name: Setup Java - uses: actions/setup-java@v3.9.0 - with: - distribution: temurin - java-version: ${{ matrix.java }} - check-latest: true - - name: Cache scala dependencies - uses: coursier/cache-action@v6 - - name: Run tests - run: ./sbt ++${{ matrix.scala }}! test - - name: Compile examples - if: ${{ startsWith(matrix.scala, '2') }} - run: ./sbt ++${{ matrix.scala }}! compileExamples - - publishLocal: - runs-on: ubuntu-20.04 - timeout-minutes: 30 + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v3.10.0 + with: + distribution: temurin + java-version: ${{ matrix.java }} + check-latest: true + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Git Checkout + uses: actions/checkout@v3.5.0 + with: + fetch-depth: '0' + - name: Test + run: sbt ++test + update-readme: + name: Update README + runs-on: ubuntu-latest + continue-on-error: false + if: ${{ github.event_name == 'push' }} steps: - - name: Checkout current branch - uses: actions/checkout@v3.3.0 - - name: Setup Java - uses: actions/setup-java@v3.9.0 - with: - distribution: temurin - java-version: 8 - check-latest: true - - name: Cache scala dependencies - uses: coursier/cache-action@v6 - - name: Check that building packages works - run: ./sbt +publishLocal + - name: Git Checkout + uses: actions/checkout@v3.5.0 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v3.10.0 + with: + distribution: temurin + java-version: '8' + check-latest: true + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Generate Readme + run: sbt docs/generateReadme + - name: Commit Changes + run: | + git config --local user.email "zio-assistant[bot]@users.noreply.github.com" + git config --local user.name "ZIO Assistant" + git add README.md + git commit -m "Update README.md" || echo "No changes to commit" + - name: Generate Token + id: generate-token + uses: zio/generate-github-app-token@v1.0.0 + with: + app_id: ${{ secrets.APP_ID }} + app_private_key: ${{ secrets.APP_PRIVATE_KEY }} + - name: Create Pull Request + id: cpr + uses: peter-evans/create-pull-request@v5.0.0 + with: + body: |- + Autogenerated changes after running the `sbt docs/generateReadme` command of the [zio-sbt-website](https://zio.dev/zio-sbt) plugin. + I will automatically update the README.md file whenever there is new change for README.md, e.g. + - After each release, I will update the version in the installation section. + - After any changes to the "docs/index.md" file, I will update the README.md file accordingly. + branch: zio-sbt-website/update-readme + commit-message: Update README.md + token: ${{ steps.generate-token.outputs.token }} + delete-branch: true + title: Update README.md + - name: Approve PR + if: ${{ steps.cpr.outputs.pull-request-number }} + run: gh pr review "$PR_URL" --approve + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_URL: ${{ steps.cpr.outputs.pull-request-url }} + - name: Enable Auto-Merge + if: ${{ steps.cpr.outputs.pull-request-number }} + run: gh pr merge --auto --squash "$PR_URL" || gh pr merge --squash "$PR_URL" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_URL: ${{ steps.cpr.outputs.pull-request-url }} ci: - runs-on: ubuntu-20.04 - needs: [lint, test, publishLocal, website] + name: ci + runs-on: ubuntu-latest + continue-on-error: false + needs: + - lint + - test + - build steps: - - name: Aggregate job outcomes - run: echo "build succeeds" - - publish: - runs-on: ubuntu-20.04 - timeout-minutes: 30 - needs: [ci] - if: github.event_name != 'pull_request' + - name: Report Successful CI + run: echo "ci passed" + release: + name: Release + runs-on: ubuntu-latest + continue-on-error: false + needs: + - ci + if: ${{ github.event_name != 'pull_request' }} + steps: + - name: Git Checkout + uses: actions/checkout@v3.5.0 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v3.10.0 + with: + distribution: temurin + java-version: '8' + check-latest: true + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Release + run: sbt ci-release + env: + PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} + PGP_SECRET: ${{ secrets.PGP_SECRET }} + SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} + SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + release-docs: + name: Release Docs + runs-on: ubuntu-latest + continue-on-error: false + needs: + - release + if: ${{ ((github.event_name == 'release') && (github.event.action == 'published')) || (github.event_name == 'workflow_dispatch') }} + steps: + - name: Git Checkout + uses: actions/checkout@v3.5.0 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v3.10.0 + with: + distribution: temurin + java-version: '8' + check-latest: true + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Setup NodeJs + uses: actions/setup-node@v3 + with: + node-version: 16.x + registry-url: https://registry.npmjs.org + - name: Publish Docs to NPM Registry + run: sbt docs/publishToNpm + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + notify-docs-release: + name: Notify Docs Release + runs-on: ubuntu-latest + continue-on-error: false + needs: + - release-docs + if: ${{ (github.event_name == 'release') && (github.event.action == 'published') }} steps: - - name: Checkout current branch - uses: actions/checkout@v3.3.0 - with: - fetch-depth: 0 - - name: Setup Java - uses: actions/setup-java@v3.9.0 - with: - distribution: temurin - java-version: 8 - check-latest: true - - name: Cache scala dependencies - uses: coursier/cache-action@v6 - - name: Release artifacts - run: ./sbt ci-release - env: - PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} - PGP_SECRET: ${{ secrets.PGP_SECRET }} - SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} - SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + - name: Git Checkout + uses: actions/checkout@v3.5.0 + with: + fetch-depth: '0' + - name: notify the main repo about the new release of docs package + run: | + PACKAGE_NAME=$(cat docs/package.json | grep '"name"' | awk -F'"' '{print $4}') + PACKAGE_VERSION=$(npm view $PACKAGE_NAME version) + curl -L \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: token ${{ secrets.PAT_TOKEN }}"\ + https://api.github.com/repos/zio/zio/dispatches \ + -d '{ + "event_type":"update-docs", + "client_payload":{ + "package_name":"'"${PACKAGE_NAME}"'", + "package_version": "'"${PACKAGE_VERSION}"'" + } + }' diff --git a/.github/workflows/site.yml b/.github/workflows/site.yml index 7cc15f37..88304ce5 100644 --- a/.github/workflows/site.yml +++ b/.github/workflows/site.yml @@ -30,7 +30,7 @@ jobs: - name: Check if the README file is up to date run: sbt docs/checkReadme - name: Check if the site workflow is up to date - run: sbt docs/checkGithubWorkflow + run: sbt docs/ciCheckGithubWorkflow - name: Check artifacts build process run: sbt +publishLocal - name: Check website build process diff --git a/.scalafix.conf b/.scalafix.conf new file mode 100644 index 00000000..b090394c --- /dev/null +++ b/.scalafix.conf @@ -0,0 +1,27 @@ +rules = [ + Disable + DisableSyntax + ExplicitResultTypes + LeakingImplicitClassVal + NoAutoTupling + NoValInForComprehension + OrganizeImports + ProcedureSyntax + RemoveUnused +] + +Disable { + ifSynthetic = [ + "scala/Option.option2Iterable" + "scala/Predef.any2stringadd" + ] +} + +OrganizeImports { + # Allign with IntelliJ IDEA so that they don't fight each other + groupedImports = Merge +} + +RemoveUnused { + imports = false // handled by OrganizeImports +} diff --git a/.scalafmt.conf b/.scalafmt.conf index 074fa637..df35cda3 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -8,8 +8,8 @@ lineEndings = preserve includeCurlyBraceInSelectChains = false danglingParentheses.preset = true spaces { - inImportCurlyBraces = true + inImportCurlyBraces = false } optIn.annotationNewlines = true runner.dialect = scala213 -rewrite.rules = [SortImports, RedundantBraces] +rewrite.rules = [RedundantBraces] diff --git a/README.md b/README.md index 7d3d1188..e93a662e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [ZIO telemetry](https://github.com/zio/zio-telemetry) is purely-functional and type-safe. It provides clients for [OpenTracing](https://opentracing.io/), [OpenCensus](https://opencensus.io/) and [OpenTelemetry](https://opentelemetry.io/). -[![Production Ready](https://img.shields.io/badge/Project%20Stage-Production%20Ready-brightgreen.svg)](https://github.com/zio/zio/wiki/Project-Stages) ![CI Badge](https://github.com/zio/zio-telemetry/workflows/CI/badge.svg) [![Sonatype Releases](https://img.shields.io/nexus/r/https/oss.sonatype.org/dev.zio/zio-opentracing_2.12.svg?label=Sonatype%20Release)](https://oss.sonatype.org/content/repositories/releases/dev/zio/zio-opentracing_2.12/) [![Sonatype Snapshots](https://img.shields.io/nexus/s/https/oss.sonatype.org/dev.zio/zio-opentracing_2.12.svg?label=Sonatype%20Snapshot)](https://oss.sonatype.org/content/repositories/snapshots/dev/zio/zio-opentracing_2.12/) [![javadoc](https://javadoc.io/badge2/dev.zio/zio-telemetry-docs_2.12/javadoc.svg)](https://javadoc.io/doc/dev.zio/zio-telemetry-docs_2.12) [![ZIO Telemetry](https://img.shields.io/github/stars/zio/zio-telemetry?style=social)](https://github.com/zio/zio-telemetry) +[![Production Ready](https://img.shields.io/badge/Project%20Stage-Production%20Ready-brightgreen.svg)](https://github.com/zio/zio/wiki/Project-Stages) ![CI Badge](https://github.com/zio/zio-telemetry/workflows/CI/badge.svg) [![Sonatype Releases](https://img.shields.io/nexus/r/https/oss.sonatype.org/dev.zio/zio-opentracing_2.13.svg?label=Sonatype%20Release)](https://oss.sonatype.org/content/repositories/releases/dev/zio/zio-opentracing_2.13/) [![Sonatype Snapshots](https://img.shields.io/nexus/s/https/oss.sonatype.org/dev.zio/zio-opentracing_2.13.svg?label=Sonatype%20Snapshot)](https://oss.sonatype.org/content/repositories/snapshots/dev/zio/zio-opentracing_2.13/) [![javadoc](https://javadoc.io/badge2/dev.zio/zio-telemetry-docs_2.13/javadoc.svg)](https://javadoc.io/doc/dev.zio/zio-telemetry-docs_2.13) [![ZIO Telemetry](https://img.shields.io/github/stars/zio/zio-telemetry?style=social)](https://github.com/zio/zio-telemetry) ZIO Telemetry consists of the following projects: diff --git a/build.sbt b/build.sbt index 869da710..600d6018 100644 --- a/build.sbt +++ b/build.sbt @@ -1,11 +1,13 @@ -import BuildHelper._ +enablePlugins(ZioSbtEcosystemPlugin, ZioSbtCiPlugin) inThisBuild( List( - organization := "dev.zio", - homepage := Some(url("https://zio.dev/zio-telemetry/")), - licenses := List("Apache-2.0" -> url("http://www.apache.org/licenses/LICENSE-2.0")), - developers := List( + name := "ZIO Telemetry", + organization := "dev.zio", + zioVersion := "2.0.13", + homepage := Some(url("https://zio.dev/zio-telemetry/")), + licenses := List("Apache-2.0" -> url("http://www.apache.org/licenses/LICENSE-2.0")), + developers := List( Developer( "mijicd", "Dejan Mijic", @@ -19,10 +21,12 @@ inThisBuild( url("https://github.com/runtologist") ) ), - pgpPassphrase := sys.env.get("PGP_PASSWORD").map(_.toArray), - pgpPublicRing := file("/tmp/public.asc"), - pgpSecretRing := file("/tmp/secret.asc"), - scmInfo := Some( + crossScalaVersions := Seq(scala212.value, scala213.value, scala3.value), + ciEnabledBranches := Seq("series/2.x"), + pgpPassphrase := sys.env.get("PGP_PASSWORD").map(_.toArray), + pgpPublicRing := file("/tmp/public.asc"), + pgpSecretRing := file("/tmp/secret.asc"), + scmInfo := Some( ScmInfo( url("https://github.com/zio/zio-telemetry/"), "scm:git:git@github.com:zio/zio-telemetry.git" @@ -32,17 +36,19 @@ inThisBuild( ) Global / onChangedBuildSource := ReloadOnSourceChanges -Global / testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) -addCommandAlias("fmt", "all scalafmtSbt scalafmt test:scalafmt") addCommandAlias("check", "ciCheck;docsCheck") addCommandAlias("ciCheck", "all scalafmtSbtCheck scalafmtCheck test:scalafmtCheck") -addCommandAlias("docsCheck", "docs/checkReadme;docs/checkGithubWorkflow") +addCommandAlias("docsCheck", "docs/checkReadme;docs/ciCheckGithubWorkflow") addCommandAlias( "compileExamples", "opentracingExample/compile;opentelemetryExample/compile;opentelemetryInstrumentationExample/compile" ) +// Fix 'Flag set repeatedly' error allegedly introduced by the usage of sdtSettings +lazy val tempFixScalacOptions = + Seq("-deprecation", "-encoding", "utf8", "-feature", "-unchecked", "-language:implicitConversions") + lazy val root = project .in(file(".")) @@ -52,45 +58,84 @@ lazy val root = lazy val opentracing = project .in(file("opentracing")) - .settings(stdSettings("zio-opentracing")) - .settings(libraryDependencies := Dependencies.opentracing) + .settings(enableZIO()) + .settings( + stdSettings( + name = Some("zio-opentracing"), + packageName = Some("zio.telemetry.opentracing") + ), + scalacOptions --= tempFixScalacOptions + ) + .settings(libraryDependencies ++= Dependencies.opentracing) lazy val opentelemetry = project .in(file("opentelemetry")) - .settings(stdSettings("zio-opentelemetry")) - .settings(libraryDependencies := Dependencies.opentelemetry) + .settings(enableZIO()) + .settings( + stdSettings( + name = Some("zio-opentelemetry"), + packageName = Some("zio.telemetry.opentelemetry") + ), + scalacOptions --= tempFixScalacOptions + ) + .settings(libraryDependencies ++= Dependencies.opentelemetry) lazy val opencensus = project .in(file("opencensus")) - .settings(stdSettings("zio-opencensus")) - .settings(libraryDependencies := Dependencies.opencensus) + .settings(enableZIO()) + .settings( + stdSettings( + name = Some("zio-opencensus"), + packageName = Some("zio.telemetry.opencensus") + ), + scalacOptions --= tempFixScalacOptions + ) + .settings(libraryDependencies ++= Dependencies.opencensus) lazy val opentracingExample = project .in(file("opentracing-example")) - .settings(stdSettings("opentracing-example")) + .settings(enableZIO()) + .settings( + crossScalaVersions := Seq(scala212.value, scala213.value), + stdSettings( + name = Some("opentracing-example"), + packageName = Some("zio.telemetry.opentracing.example") + ) + ) .settings(publish / skip := true) - .settings(onlyWithScala2) - .settings(libraryDependencies := Dependencies.opentracingExample) + .settings(libraryDependencies ++= Dependencies.opentracingExample) .dependsOn(opentracing) lazy val opentelemetryExample = project .in(file("opentelemetry-example")) - .settings(stdSettings("opentelemetry-example")) + .settings(enableZIO()) + .settings( + crossScalaVersions := Seq(scala212.value, scala213.value), + stdSettings( + name = Some("opentelemetry-example"), + packageName = Some("zio.telemetry.opentelemetry.example") + ) + ) .settings(publish / skip := true) - .settings(onlyWithScala2) - .settings(libraryDependencies := Dependencies.opentelemetryExample) + .settings(libraryDependencies ++= Dependencies.opentelemetryExample) .dependsOn(opentelemetry) lazy val opentelemetryInstrumentationExample = project .in(file("opentelemetry-instrumentation-example")) - .settings(stdSettings("opentelemetry-instrumentation-example")) + .settings(enableZIO()) + .settings( + crossScalaVersions := Seq(scala212.value, scala213.value), + stdSettings( + name = Some("opentelemetry-instrumentation-example"), + packageName = Some("zio.telemetry.opentelemetry.instrumentation.example") + ) + ) .settings(publish / skip := true) - .settings(onlyWithScala2) - .settings(libraryDependencies := Dependencies.opentelemetryInstrumentationExample) + .settings(libraryDependencies ++= Dependencies.opentelemetryInstrumentationExample) .dependsOn(opentelemetry) lazy val docs = @@ -103,8 +148,7 @@ lazy val docs = projectName := "ZIO Telemetry", mainModuleName := (opentracing / moduleName).value, projectStage := ProjectStage.ProductionReady, - ScalaUnidoc / unidoc / unidocProjectFilter := inProjects(opentracing, opentelemetry, opencensus), - docsPublishBranch := "series/2.x" + ScalaUnidoc / unidoc / unidocProjectFilter := inProjects(opentracing, opentelemetry, opencensus) ) .dependsOn(opentracing, opentelemetry, opencensus) .enablePlugins(WebsitePlugin) diff --git a/opencensus/src/main/scala/zio/telemetry/opencensus/Tracing.scala b/opencensus/src/main/scala/zio/telemetry/opencensus/Tracing.scala index 2d4336c0..7dd21d9d 100644 --- a/opencensus/src/main/scala/zio/telemetry/opencensus/Tracing.scala +++ b/opencensus/src/main/scala/zio/telemetry/opencensus/Tracing.scala @@ -1,8 +1,8 @@ package zio.telemetry.opencensus -import zio._ import io.opencensus.trace._ import io.opencensus.trace.propagation.TextFormat +import zio._ trait Tracing { self => diff --git a/opencensus/src/test/scala/zio/telemetry/opencensus/InMemoryExporter.scala b/opencensus/src/test/scala/zio/telemetry/opencensus/InMemoryExporter.scala index a46c8519..65b6272b 100644 --- a/opencensus/src/test/scala/zio/telemetry/opencensus/InMemoryExporter.scala +++ b/opencensus/src/test/scala/zio/telemetry/opencensus/InMemoryExporter.scala @@ -2,8 +2,8 @@ package zio.telemetry.opencensus import io.opencensus.trace.`export`.SpanData import io.opencensus.trace.`export`.SpanExporter.Handler -import io.opencensus.trace.{ Tracing => OTracing } -import zio.{ Ref, Runtime, Unsafe, ZIO } +import io.opencensus.trace.{Tracing => OTracing} +import zio.{Ref, Runtime, Unsafe, ZIO} import java.util import scala.jdk.CollectionConverters._ @@ -23,7 +23,7 @@ object InMemoryExporter { class InMemoryExporter(finishedSpans: Ref[List[SpanData]]) extends Handler { override def `export`(spanDataList: util.Collection[SpanData]): Unit = Unsafe.unsafe { implicit unsafe => - runtime.unsafe.run(finishedSpans.update(x => x ++ spanDataList.asScala.toList)) + runtime.unsafe.run(finishedSpans.update(x => x ++ spanDataList.asScala.toList)): Unit () } } diff --git a/opencensus/src/test/scala/zio/telemetry/opencensus/TracingTest.scala b/opencensus/src/test/scala/zio/telemetry/opencensus/TracingTest.scala index 115ced3a..5f75a00a 100644 --- a/opencensus/src/test/scala/zio/telemetry/opencensus/TracingTest.scala +++ b/opencensus/src/test/scala/zio/telemetry/opencensus/TracingTest.scala @@ -2,7 +2,7 @@ package zio.telemetry.opencensus import io.opencensus.trace.`export`.SpanData import io.opencensus.trace.samplers.Samplers -import io.opencensus.trace.{ SpanId, Tracer, Tracing => OTracing } +import io.opencensus.trace.{SpanId, Tracer, Tracing => OTracing} import zio._ import zio.test.Assertion._ import zio.test._ @@ -31,7 +31,7 @@ object TracingTest extends ZIOSpecDefault { val customLayer: ULayer[Ref[List[SpanData]] with Tracer with Tracing] = exporterTracerLayer ++ (exporterTracerLayer >>> Tracing.live) - def spec = + def spec: Spec[Environment with TestEnvironment with Scope, Any] = suite("zio opencensus")( suite("Tracing")( spansSpec diff --git a/opentelemetry-example/src/main/scala/zio/telemetry/opentelemetry/example/http/BackendHttpServer.scala b/opentelemetry-example/src/main/scala/zio/telemetry/opentelemetry/example/http/BackendHttpServer.scala index 0c103d64..7d4339ce 100644 --- a/opentelemetry-example/src/main/scala/zio/telemetry/opentelemetry/example/http/BackendHttpServer.scala +++ b/opentelemetry-example/src/main/scala/zio/telemetry/opentelemetry/example/http/BackendHttpServer.scala @@ -8,11 +8,8 @@ import zio.telemetry.opentelemetry.example.config.AppConfig case class BackendHttpServer(config: AppConfig, httpApp: BackendHttpApp) { def start: ZIO[Any, Throwable, Nothing] = - for { - _ <- Server.start(config.backend.port, httpApp.routes) - _ <- printLine(s"BackendHttpServer started on port ${config.backend.port}") - never <- ZIO.never - } yield never + printLine(s"Starting BackendHttpServer on port ${config.backend.port}") *> + Server.start(config.backend.port, httpApp.routes) } diff --git a/opentelemetry-example/src/main/scala/zio/telemetry/opentelemetry/example/http/ProxyHttpServer.scala b/opentelemetry-example/src/main/scala/zio/telemetry/opentelemetry/example/http/ProxyHttpServer.scala index 897d8abb..a6264423 100644 --- a/opentelemetry-example/src/main/scala/zio/telemetry/opentelemetry/example/http/ProxyHttpServer.scala +++ b/opentelemetry-example/src/main/scala/zio/telemetry/opentelemetry/example/http/ProxyHttpServer.scala @@ -8,11 +8,8 @@ import zio.telemetry.opentelemetry.example.config.AppConfig case class ProxyHttpServer(config: AppConfig, httpApp: ProxyHttpApp) { def start: ZIO[Any, Throwable, Nothing] = - for { - _ <- Server.start(config.proxy.port, httpApp.routes) - _ <- printLine(s"ProxyHttpServer started on port ${config.backend.port}") - never <- ZIO.never - } yield never + printLine(s"Starting ProxyHttpServer on port ${config.backend.port}") *> + Server.start(config.proxy.port, httpApp.routes) } diff --git a/opentelemetry-instrumentation-example/src/main/scala/zio/telemetry/opentelemetry/instrumentation/example/http/HttpServer.scala b/opentelemetry-instrumentation-example/src/main/scala/zio/telemetry/opentelemetry/instrumentation/example/http/HttpServer.scala index e1accb51..f0a67cfd 100644 --- a/opentelemetry-instrumentation-example/src/main/scala/zio/telemetry/opentelemetry/instrumentation/example/http/HttpServer.scala +++ b/opentelemetry-instrumentation-example/src/main/scala/zio/telemetry/opentelemetry/instrumentation/example/http/HttpServer.scala @@ -8,11 +8,8 @@ import zio.telemetry.opentelemetry.instrumentation.example.config.AppConfig case class HttpServer(config: AppConfig, httpServerApp: HttpServerApp) { def start: ZIO[Any, Throwable, Nothing] = - for { - _ <- Server.start(config.server.port, httpServerApp.routes) - _ <- printLine(s"HttpServer started on port ${config.server.port}") - never <- ZIO.never - } yield never + printLine(s"Starting HttpServer on port ${config.server.port}") *> + Server.start(config.server.port, httpServerApp.routes) } diff --git a/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/baggage/Baggage.scala b/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/baggage/Baggage.scala index 08f76bea..6450813e 100644 --- a/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/baggage/Baggage.scala +++ b/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/baggage/Baggage.scala @@ -1,10 +1,10 @@ package zio.telemetry.opentelemetry.baggage -import io.opentelemetry.api.baggage.{ Baggage => Baggaje, BaggageBuilder, BaggageEntryMetadata } +import io.opentelemetry.api.baggage.{Baggage => Baggaje, BaggageBuilder, BaggageEntryMetadata} import io.opentelemetry.context.Context import zio._ import zio.telemetry.opentelemetry.baggage.propagation.BaggagePropagator -import zio.telemetry.opentelemetry.context.{ ContextStorage, IncomingContextCarrier, OutgoingContextCarrier } +import zio.telemetry.opentelemetry.context.{ContextStorage, IncomingContextCarrier, OutgoingContextCarrier} import scala.jdk.CollectionConverters._ diff --git a/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/context/IncomingContextCarrier.scala b/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/context/IncomingContextCarrier.scala index 7f37b436..c934e6f9 100644 --- a/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/context/IncomingContextCarrier.scala +++ b/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/context/IncomingContextCarrier.scala @@ -3,9 +3,9 @@ package zio.telemetry.opentelemetry.context import io.opentelemetry.context.propagation.TextMapGetter import zio.telemetry.opentelemetry.internal.ContextCarrier -import scala.jdk.CollectionConverters._ import java.lang import scala.collection.mutable +import scala.jdk.CollectionConverters._ /** * The wrapper for the context data from the external process. diff --git a/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/tracing/Tracing.scala b/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/tracing/Tracing.scala index d127158d..d44bf778 100644 --- a/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/tracing/Tracing.scala +++ b/opentelemetry/src/main/scala/zio/telemetry/opentelemetry/tracing/Tracing.scala @@ -1,10 +1,10 @@ package zio.telemetry.opentelemetry.tracing -import io.opentelemetry.api.common.{ AttributeKey, Attributes } +import io.opentelemetry.api.common.{AttributeKey, Attributes} import io.opentelemetry.api.trace._ import io.opentelemetry.context.Context import zio._ -import zio.telemetry.opentelemetry.context.{ ContextStorage, IncomingContextCarrier, OutgoingContextCarrier } +import zio.telemetry.opentelemetry.context.{ContextStorage, IncomingContextCarrier, OutgoingContextCarrier} import zio.telemetry.opentelemetry.tracing.propagation.TraceContextPropagator import java.util.concurrent.TimeUnit diff --git a/opentelemetry/src/test/scala/zio/telemetry/opentelemetry/baggage/BaggageTest.scala b/opentelemetry/src/test/scala/zio/telemetry/opentelemetry/baggage/BaggageTest.scala index d05ec159..a9a4bfb7 100644 --- a/opentelemetry/src/test/scala/zio/telemetry/opentelemetry/baggage/BaggageTest.scala +++ b/opentelemetry/src/test/scala/zio/telemetry/opentelemetry/baggage/BaggageTest.scala @@ -2,9 +2,9 @@ package zio.telemetry.opentelemetry.baggage import zio._ import zio.telemetry.opentelemetry.baggage.propagation.BaggagePropagator -import zio.telemetry.opentelemetry.context.{ ContextStorage, IncomingContextCarrier, OutgoingContextCarrier } -import zio.test._ +import zio.telemetry.opentelemetry.context.{ContextStorage, IncomingContextCarrier, OutgoingContextCarrier} import zio.test.Assertion._ +import zio.test._ import scala.collection.mutable @@ -16,7 +16,7 @@ object BaggageTest extends ZIOSpecDefault { def logAnnotatedBaggageLayer: ULayer[Baggage] = (ContextStorage.fiberRef >>> Baggage.logAnnotated) - def spec = + def spec: Spec[Environment with TestEnvironment with Scope, Any] = suite("zio opentelemetry")( suite("Baggage")( operationsSpec, diff --git a/opentelemetry/src/test/scala/zio/telemetry/opentelemetry/tracing/TracingTest.scala b/opentelemetry/src/test/scala/zio/telemetry/opentelemetry/tracing/TracingTest.scala index 8a1c5957..a7527f89 100644 --- a/opentelemetry/src/test/scala/zio/telemetry/opentelemetry/tracing/TracingTest.scala +++ b/opentelemetry/src/test/scala/zio/telemetry/opentelemetry/tracing/TracingTest.scala @@ -1,17 +1,17 @@ package zio.telemetry.opentelemetry.tracing -import io.opentelemetry.api.common.{ AttributeKey, Attributes } -import io.opentelemetry.api.trace.{ Span, SpanId, Tracer } +import io.opentelemetry.api.common.{AttributeKey, Attributes} +import io.opentelemetry.api.trace.{Span, SpanId, Tracer} import io.opentelemetry.context.Context import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter import io.opentelemetry.sdk.trace.SdkTracerProvider -import io.opentelemetry.sdk.trace.`export`.SimpleSpanProcessor import io.opentelemetry.sdk.trace.data.SpanData +import io.opentelemetry.sdk.trace.`export`.SimpleSpanProcessor import zio._ -import zio.telemetry.opentelemetry.context.{ ContextStorage, IncomingContextCarrier, OutgoingContextCarrier } +import zio.telemetry.opentelemetry.context.{ContextStorage, IncomingContextCarrier, OutgoingContextCarrier} import zio.telemetry.opentelemetry.tracing.propagation.TraceContextPropagator import zio.test.Assertion._ -import zio.test.{ assert, TestClock, ZIOSpecDefault } +import zio.test.{Spec, TestClock, ZIOSpecDefault, assert} import scala.collection.mutable import scala.concurrent.Future @@ -34,12 +34,12 @@ object TracingTest extends ZIOSpecDefault { val tracingMockLayer: ULayer[Tracing with InMemorySpanExporter with Tracer] = inMemoryTracerLayer >>> (Tracing.live ++ inMemoryTracerLayer) - def getFinishedSpans = + def getFinishedSpans: ZIO[InMemorySpanExporter, Nothing, List[SpanData]] = ZIO .service[InMemorySpanExporter] .map(_.getFinishedSpanItems.asScala.toList) - def spec = + def spec: Spec[Any, Throwable] = suite("zio opentelemetry")( suite("Tracing")( creationSpec, diff --git a/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/BackendHttpServer.scala b/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/BackendHttpServer.scala index 55cd5910..d1ef10cf 100644 --- a/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/BackendHttpServer.scala +++ b/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/BackendHttpServer.scala @@ -8,11 +8,8 @@ import zio.telemetry.opentracing.example.config.AppConfig case class BackendHttpServer(config: AppConfig, httpApp: BackendHttpApp) { def start: ZIO[Any, Throwable, Nothing] = - for { - _ <- Server.start(config.backend.port, httpApp.routes) - _ <- printLine(s"BackendHttpServer started on port ${config.backend.port}") - never <- ZIO.never - } yield never + printLine(s"Starting BackendHttpServer on port ${config.backend.port}") *> + Server.start(config.backend.port, httpApp.routes) } diff --git a/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/ProxyHttpApp.scala b/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/ProxyHttpApp.scala index d73f815e..3c7006ab 100644 --- a/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/ProxyHttpApp.scala +++ b/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/ProxyHttpApp.scala @@ -34,7 +34,7 @@ case class ProxyHttpApp(client: Client, tracing: OpenTracing) { ZIO.succeed { adapter.forEach { entry => - m.put(entry.getKey, entry.getValue) + m.put(entry.getKey, entry.getValue): Unit () } }.as(m.toMap) diff --git a/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/ProxyHttpServer.scala b/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/ProxyHttpServer.scala index cc1d318f..3c236403 100644 --- a/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/ProxyHttpServer.scala +++ b/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/ProxyHttpServer.scala @@ -8,11 +8,8 @@ import zio._ case class ProxyHttpServer(config: AppConfig, httpApp: ProxyHttpApp) { def start: ZIO[Any, Throwable, Nothing] = - for { - _ <- Server.start(config.proxy.port, httpApp.routes) - _ <- printLine(s"ProxyHttpServer started on port ${config.proxy.port}") - never <- ZIO.never - } yield never + printLine(s"Starting ProxyHttpServer on port ${config.proxy.port}") *> + Server.start(config.proxy.port, httpApp.routes) } diff --git a/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/Statuses.scala b/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/Statuses.scala index 6b5ebebe..9f367349 100644 --- a/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/Statuses.scala +++ b/opentracing-example/src/main/scala/zio/telemetry/opentracing/example/http/Statuses.scala @@ -2,7 +2,7 @@ package zio.telemetry.opentracing.example.http import zio.json._ -final case class Statuses(data: List[Status]) extends AnyVal +final case class Statuses(data: List[Status]) object Statuses { implicit val codec: JsonCodec[Statuses] = DeriveJsonCodec.gen[Statuses] diff --git a/opentracing/src/main/scala/zio/telemetry/opentracing/OpenTracing.scala b/opentracing/src/main/scala/zio/telemetry/opentracing/OpenTracing.scala index 9a939b09..55b5720b 100644 --- a/opentracing/src/main/scala/zio/telemetry/opentracing/OpenTracing.scala +++ b/opentracing/src/main/scala/zio/telemetry/opentracing/OpenTracing.scala @@ -1,12 +1,11 @@ package zio.telemetry.opentracing -import java.util.concurrent.TimeUnit - -import io.opentracing.propagation.Format -import io.opentracing.{ Span, SpanContext, Tracer } import io.opentracing.noop.NoopTracerFactory +import io.opentracing.propagation.Format +import io.opentracing.{Span, SpanContext, Tracer} import zio._ +import java.util.concurrent.TimeUnit import scala.jdk.CollectionConverters._ trait OpenTracing { self => diff --git a/opentracing/src/test/scala/zio/telemetry/opentracing/OpenTracingTest.scala b/opentracing/src/test/scala/zio/telemetry/opentracing/OpenTracingTest.scala index fde8c1ad..c4fa6524 100644 --- a/opentracing/src/test/scala/zio/telemetry/opentracing/OpenTracingTest.scala +++ b/opentracing/src/test/scala/zio/telemetry/opentracing/OpenTracingTest.scala @@ -1,17 +1,15 @@ package zio.telemetry.opentracing -import io.opentracing.mock.{ MockSpan, MockTracer } -import io.opentracing.propagation.{ BinaryAdapters, Format, TextMapAdapter } +import io.opentracing.mock.{MockSpan, MockTracer} +import io.opentracing.propagation.{BinaryAdapters, Format, TextMapAdapter} import zio._ -import zio.test._ import zio.test.Assertion._ -import zio.test.ZIOSpecDefault +import zio.test.{ZIOSpecDefault, _} +import java.nio.ByteBuffer import scala.collection.mutable import scala.jdk.CollectionConverters._ -import java.nio.ByteBuffer - object OpenTracingTest extends ZIOSpecDefault { val mockTracer: Layer[Nothing, MockTracer] = diff --git a/project/BuildHelper.scala b/project/BuildHelper.scala deleted file mode 100644 index 480d7ffc..00000000 --- a/project/BuildHelper.scala +++ /dev/null @@ -1,108 +0,0 @@ -import sbt._ -import sbt.Keys._ - -object BuildHelper { - - def stdSettings(prjName: String) = Seq( - name := s"$prjName", - crossScalaVersions := Seq(Scala212, Scala213, Scala3), - ThisBuild / scalaVersion := Scala212, - scalacOptions := stdOptions ++ extraOptions(scalaVersion.value, optimize = !isSnapshot.value), - libraryDependencies += compilerPlugin("com.olegpy" %% "better-monadic-for" % "0.3.1"), - incOptions ~= (_.withLogRecompileOnMacro(false)) - ) - - val onlyWithScala2 = Seq( - crossScalaVersions := Seq(Scala212, Scala213) - ) - - private val versions: Map[String, String] = { - import org.snakeyaml.engine.v2.api.{ Load, LoadSettings } - - import java.util.{ List => JList, Map => JMap } - import scala.jdk.CollectionConverters._ - - val doc = new Load(LoadSettings.builder().build()) - .loadFromReader(scala.io.Source.fromFile(".github/workflows/ci.yml").bufferedReader()) - val yaml = doc.asInstanceOf[JMap[String, JMap[String, JMap[String, JMap[String, JMap[String, JList[String]]]]]]] - - yaml - .get("jobs") - .get("test") - .get("strategy") - .get("matrix") - .get("scala") - .asScala - .map { v => - val vs = v.split('.') - val init = vs.take(vs(0) match { case "2" => 2; case _ => 1 }) - - init.mkString(".") -> v - } - .toMap - } - - private val Scala212: String = versions("2.12") - private val Scala213: String = versions("2.13") - private val Scala3: String = versions("3") - - private val stdOptions = Seq( - "-deprecation", - "-encoding", - "UTF-8", - "-feature", - "-unchecked" - ) ++ { - if (sys.env.contains("CI")) { - Seq("-Xfatal-warnings") - } else { - Nil // to enable Scalafix locally - } - } - - private val std2xOptions = Seq( - "-language:higherKinds", - "-language:existentials", - "-explaintypes", - "-Yrangepos", - "-Xlint:_,-missing-interpolator,-type-parameter-shadow", - "-Ywarn-numeric-widen", - "-Ywarn-value-discard" - ) - - private def optimizerOptions(optimize: Boolean) = - if (optimize) Seq("-opt:l:inline", "-opt-inline-from:zio.internal.**") else Nil - - private def extraOptions(scalaVersion: String, optimize: Boolean) = - CrossVersion.partialVersion(scalaVersion) match { - case Some((3, _)) => - Seq( - "-language:implicitConversions", - "-Xignore-scala2-macros" - ) - - case Some((2, 13)) => - Seq("-Ywarn-unused:params,-implicits", "-Xlint:-byname-implicit") ++ std2xOptions ++ optimizerOptions(optimize) - - case Some((2, 12)) => - Seq( - "-opt-warnings", - "-Ywarn-extra-implicit", - "-Ywarn-unused:_,imports", - "-Ywarn-unused:imports", - "-Ypartial-unification", - "-Yno-adapted-args", - "-Ywarn-inaccessible", - "-Ywarn-infer-any", - "-Ywarn-nullary-override", - "-Ywarn-nullary-unit", - "-Ywarn-unused:params,-implicits", - "-Xfuture", - "-Xsource:2.13", - "-Xmax-classfile-name", - "242" - ) ++ std2xOptions ++ optimizerOptions(optimize) - - case _ => Seq.empty - } -} diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 8bc4910e..026ae906 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -37,9 +37,7 @@ object Dependencies { } lazy val zio = Seq( - Orgs.zio %% "zio" % Versions.zio, - Orgs.zio %% "zio-test" % Versions.zio % Test, - Orgs.zio %% "zio-test-sbt" % Versions.zio % Test + Orgs.zio %% "zio" % Versions.zio ) lazy val opentracing = zio ++ Seq( @@ -63,7 +61,7 @@ object Dependencies { Orgs.scalaLangModules %% "scala-collection-compat" % Versions.scalaCollectionCompat % Test ) - lazy val example = Seq( + lazy val example = zio ++ Seq( Orgs.typelevel %% "cats-core" % ExampleVersions.cats, Orgs.jaegertracing % "jaeger-core" % ExampleVersions.jaeger, Orgs.jaegertracing % "jaeger-client" % ExampleVersions.jaeger, diff --git a/project/build.properties b/project/build.properties index 22af2628..72413de1 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.7.1 +sbt.version=1.8.3 diff --git a/project/plugins.sbt b/project/plugins.sbt index 33ec0929..01a37be1 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,12 +1,15 @@ -addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12") -addSbtPlugin("com.thoughtworks.sbt-api-mappings" % "sbt-api-mappings" % "3.0.2") -addSbtPlugin("com.github.sbt" % "sbt-unidoc" % "0.5.0") -addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.5.6") -addSbtPlugin("io.github.davidgregory084" % "sbt-tpolecat" % "0.4.2") -addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.6") -addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.3.7") -addSbtPlugin("org.scoverage" % "sbt-scoverage" % "2.0.7") -addSbtPlugin("dev.zio" % "zio-sbt-website" % "0.3.10") +val zioSbtVersion = "0.4.0-alpha.8" + +addSbtPlugin("com.thoughtworks.sbt-api-mappings" % "sbt-api-mappings" % "3.0.2") +addSbtPlugin("com.github.sbt" % "sbt-unidoc" % "0.5.0") +addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.5.6") +addSbtPlugin("io.github.davidgregory084" % "sbt-tpolecat" % "0.4.2") +addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.6") +addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.3.7") +addSbtPlugin("org.scoverage" % "sbt-scoverage" % "2.0.7") +addSbtPlugin("dev.zio" % "zio-sbt-ci" % zioSbtVersion) +addSbtPlugin("dev.zio" % "zio-sbt-ecosystem" % zioSbtVersion) +addSbtPlugin("dev.zio" % "zio-sbt-website" % zioSbtVersion) libraryDependencies += "org.snakeyaml" % "snakeyaml-engine" % "2.6"