diff --git a/.additional-certs/GTS_CA_1P5.cer b/.additional-certs/GTS_CA_1P5.cer new file mode 100644 index 0000000..9a622d5 Binary files /dev/null and b/.additional-certs/GTS_CA_1P5.cer differ diff --git a/.additional-certs/Sectigo_RSA_Domain_Validation_Secure_server_CA.cer b/.additional-certs/Sectigo_RSA_Domain_Validation_Secure_server_CA.cer new file mode 100644 index 0000000..993b2eb Binary files /dev/null and b/.additional-certs/Sectigo_RSA_Domain_Validation_Secure_server_CA.cer differ diff --git a/.github/link-validator.conf b/.github/link-validator.conf new file mode 100644 index 0000000..3936e67 --- /dev/null +++ b/.github/link-validator.conf @@ -0,0 +1,21 @@ +// config for https://github.com/ennru/site-link-validator/ +site-link-validator { + root-dir = "./docs/target/site/" + # relative to `root-dir` + start-file = "docs/akka-dependencies/snapshot/index.html" + + # Resolves URLs with the given prefix as local files instead + link-mappings = [ + ] + + ignore-missing-local-files-regex = "" + + ignore-prefixes = [ + # GitHub will block with "429 Too Many Requests" + "https://github.com/" + "https://repo.akka.io/" + ] + + non-https-whitelist = [ + ] +} diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index bc7dd6d..39232bb 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -6,7 +6,7 @@ on: jobs: check: name: Check - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v2 diff --git a/.github/workflows/link-validator.yml b/.github/workflows/link-validator.yml new file mode 100644 index 0000000..6aa9ea5 --- /dev/null +++ b/.github/workflows/link-validator.yml @@ -0,0 +1,38 @@ +name: Link Validator + +on: + pull_request: + schedule: + - cron: '0 6 * * 1' + workflow_dispatch: + +permissions: + contents: read + +jobs: + validate-links: + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v3.1.0 + + - name: Cache Coursier cache + uses: coursier/cache-action@v6.4.1 + + - name: Set up JDK 11 + uses: coursier/setup-action@v1.3.0 + with: + jvm: temurin:1.17.0.5 + apps: cs + + - name: Add additional root certs + run: | + JAVA_HOME=$(cs java-home --jvm adopt:11) + keytool -importcert -trustcacerts -storepass changeit -alias sectigo -keystore $JAVA_HOME/lib/security/cacerts -file .additional-certs/Sectigo_RSA_Domain_Validation_Secure_server_CA.cer + keytool -importcert -trustcacerts -storepass changeit -alias gts_ca_1p5 -keystore $JAVA_HOME/lib/security/cacerts -file .additional-certs/GTS_CA_1P5.cer + + - name: sbt site + run: sbt docs/makeSite + + - name: Run Link Validator + run: cs launch net.runne::site-link-validator:0.2.3 -- .github/link-validator.conf diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c4bed8e..ab8769e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,7 +8,7 @@ on: jobs: publish: name: Publish - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v2 @@ -41,3 +41,26 @@ jobs: PUBLISH_USER: ${{ secrets.PUBLISH_USER }} PUBLISH_PASSWORD: ${{ secrets.PUBLISH_PASSWORD }} run: sbt +publishSigned + + documentation: + name: Documentation + runs-on: ubuntu-22.04 + if: github.event.repository.fork == false + steps: + - name: Checkout + uses: actions/checkout@v3.1.0 + + - name: Cache Coursier cache + uses: coursier/cache-action@v6.4.0 + + - name: Set up JDK 17 + uses: coursier/setup-action@v1.3.0 + with: + jvm: temurin:1.17.0.5 + apps: cs + + - name: sbt site + run: sbt docs/makeSite + + - name: Run Link Validator + run: cs launch net.runne::site-link-validator:0.2.3 -- scripts/link-validator.conf diff --git a/.scalafmt.conf b/.scalafmt.conf index a6ccbdd..5d45e74 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,54 @@ -docstrings = JavaDoc -align.preset = more -maxColumn = 120 -rewrite.rules = [RedundantParens, SortImports, AvoidInfix] +version = 2.1.0 + +style = defaultWithAlign + +docstrings = JavaDoc +indentOperator = spray +maxColumn = 120 +lineEndings = preserve +rewrite.rules = [RedundantParens, SortImports, AvoidInfix] +unindentTopLevelOperators = true +align.tokens = [{code = "=>", owner = "Case"}] +align.openParenDefnSite = false +align.openParenCallSite = false +optIn.breakChainOnFirstMethodDot = false +optIn.configStyleArguments = false +danglingParentheses = false +spaces.inImportCurlyBraces = true +rewrite.neverInfix.excludeFilters = [ + and + min + max + until + to + by + eq + ne + "should.*" + "contain.*" + "must.*" + in + ignore + be + taggedAs + thrownBy + synchronized + have + when + size + only + noneOf + oneElementOf + noElementsOf + atLeastOneElementOf + atMostOneElementOf + allElementsOf + inOrderElementsOf + theSameElementsAs + theSameElementsInOrderAs +] +rewriteTokens = { + "⇒": "=>" + "→": "->" + "←": "<-" +} diff --git a/build.sbt b/build.sbt index d56f90c..64632ce 100644 --- a/build.sbt +++ b/build.sbt @@ -8,11 +8,7 @@ ThisBuild / resolvers ++= sys.env .map { repo => Seq( "lightbend-commercial-mvn".at(repo), - Resolver.url( - "lightbend-commercial-ivy", - url(repo) - )(Resolver.ivyStylePatterns) - ) + Resolver.url("lightbend-commercial-ivy", url(repo))(Resolver.ivyStylePatterns)) } .getOrElse(Seq.empty) @@ -27,17 +23,13 @@ lazy val `akka-dependencies` = name := "akka-dependencies", description := s"${description.value} (depending on Scala ${CrossVersion.binaryScalaVersion(scalaVersion.value)})", homepage := Some(url("https://akka.io/")), - licenses := Seq( - ("BUSL-1.1", url("https://raw.githubusercontent.com/lightbend/akka-dependencies/v10.22.0/LICENSE")) - ), + licenses := Seq(("BUSL-1.1", url("https://raw.githubusercontent.com/akka/akka-dependencies/v23.10.0/LICENSE"))), developers := List( - Developer( - "akka-contributors", - "Akka Contributors", - "akka.official@gmail.com", - url("https://github.com/lightbend/akka-dependencies/graphs/contributors") - ) - ), + Developer( + "akka-contributors", + "Akka Contributors", + "akka.official@gmail.com", + url("https://github.com/akka/akka-dependencies/graphs/contributors"))), // append -SNAPSHOT to version when isSnapshot ThisBuild / dynverSonatypeSnapshots := true, bomIncludeModules := akka ++ @@ -61,8 +53,39 @@ lazy val `akka-dependencies` = } }, publishLocalConfiguration := publishLocalConfiguration.value.withOverwrite(true), - publishM2Configuration := publishM2Configuration.value.withOverwrite(true) - ) + publishM2Configuration := publishM2Configuration.value.withOverwrite(true)) + .aggregate(docs) + +lazy val docs = project + .enablePlugins(SitePreviewPlugin, AkkaParadoxPlugin, ParadoxSitePlugin, PublishRsyncPlugin) + .settings( + name := "Akka Dependencies", + scalaVersion := Versions.Scala213, + previewPath := (Paradox / siteSubdirName).value, + Paradox / siteSubdirName := s"docs/akka-dependencies/${projectInfoVersion.value}", + projectInfoVersion := (if (isSnapshot.value) "snapshot" else version.value), + publish / skip := true, + paradoxProperties ++= Map( + "akka-scala-2.13.version" -> "2.13", + "akka-scala-3.version" -> Dependencies.Versions.Scala3, + "akka-dependencies.version" -> version.value, + "akka-dependencies.major-version" -> Dependencies.Versions.AkkaDependenciesMinor, + "akka.version" -> Dependencies.Versions.Akka, + "akka-http.version" -> Dependencies.Versions.AkkaHttp, + "akka-grpc.version" -> Dependencies.Versions.AkkaGrpc, + "akka-management.version" -> Dependencies.Versions.AkkaManagement, + "akka-diagnostics.version" -> Dependencies.Versions.AkkaDiagnostics, + "akka-projections.version" -> Dependencies.Versions.AkkaProjections, + "akka-persistence-cassandra.version" -> Dependencies.Versions.AkkaPersistenceCassandra, + "akka-persistence-jdbc.version" -> Dependencies.Versions.AkkaPersistenceJdbc, + "akka-persistence-r2dbc.version" -> Dependencies.Versions.AkkaPersistenceR2dbc, + "alpakka.version" -> Dependencies.Versions.Alpakka, + "alpakka-kafka.version" -> Dependencies.Versions.AlpakkaKafka), + paradoxRoots := List("index.html"), + Compile / paradoxGroups := Map("BuildTool" -> Seq("sbt", "Maven", "Gradle")), + resolvers += Resolver.jcenterRepo, + publishRsyncArtifacts += makeSite.value -> "www/", + publishRsyncHost := "akkarepo@gustav.akka.io") addCommandAlias("checkBom", ";scalafmtSbtCheck;+akka-dependencies/billOfMaterials:publishM2") addCommandAlias("checkPullBom", ";scalafmtSbtCheck;+update;+akka-dependencies/billOfMaterials:publishM2") diff --git a/docs/src/main/paradox/index.md b/docs/src/main/paradox/index.md new file mode 100644 index 0000000..da696f6 --- /dev/null +++ b/docs/src/main/paradox/index.md @@ -0,0 +1,354 @@ +# Akka module versions $akka-dependencies.major-version$ + +This table lists all Akka modules that are part of the Akka $akka-dependencies.major-version$ release along with their current versions. + +Akka $akka-dependencies.version$ is cross-built for Scala $akka-scala-2.13.version$ and Scala $akka-scala-3.version$. +Akka is certified for use with certain Java versions, see @ref[Java Versions](java-versions.md). + +Some modules in Akka do not live up to the high standards Lightbend requires to fully support them for Akka Licensees. Modules are marked with their @ref[readiness level](support-terminology.md) in the "project info" section of their documentation. + +| Module | Current version | Documentation | +|---------------------------------------|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Akka Dependencies BOM | $akka-dependencies.version$ | | +| Akka (core) | $akka.version$ | [Documentation](https://doc.akka.io/docs/akka/current/) [JavaDoc](https://doc.akka.io/japi/akka/current/index.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/) | +| Akka Actors | $akka.version$ | [Documentation](https://doc.akka.io/docs/akka/current/typed/index.html) [JavaDoc](https://doc.akka.io/japi/akka/current/akka/actor/typed/package-summary.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/actor/typed/index.html) | +| Akka Cluster | $akka.version$ | [Documentation](https://doc.akka.io/docs/akka/current/typed/index-cluster.html) [JavaDoc](https://doc.akka.io/japi/akka/current/akka/cluster/package-summary.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/cluster/index.html) | +| Akka Event Sourcing | $akka.version$ | [Documentation](https://doc.akka.io/docs/akka/current/typed/index-persistence.html) [JavaDoc](https://doc.akka.io/japi/akka/current/akka/persistence/typed/package-summary.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/persistence/typed/index.html) | +| Akka Durable State | $akka.version$ | [Documentation](https://doc.akka.io/docs/akka/current/typed/index-persistence-durable-state.html) [JavaDoc](https://doc.akka.io/japi/akka/current/akka/persistence/typed/state/javadsl/package-summary.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/persistence/typed/state/scaladsl/index.html) | +| Akka Streams | $akka.version$ | [Documentation](https://doc.akka.io/docs/akka/current/stream/index.html) [Operators](https://doc.akka.io/docs/akka/current/stream/operators/index.html) [JavaDoc](https://doc.akka.io/japi/akka/current/akka/stream/package-summary.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/stream/index.html) | +| Akka gRPC | $akka-grpc.version$ | [Documentation](https://doc.akka.io/docs/akka-grpc/current/) [ScalaDoc](https://doc.akka.io/api/akka-grpc/current/akka/grpc/) | +| Akka HTTP | $akka-http.version$ | [Documentation](https://doc.akka.io/docs/akka-http/current/) [Predefined Directives](https://doc.akka.io/docs/akka-http/current/routing-dsl/directives/alphabetically.html) [JavaDoc](https://doc.akka.io/japi/akka-http/current/) [ScalaDoc](https://doc.akka.io/api/akka-http/current/akka/http/scaladsl/index.html) | +| Akka Persistence plugin for Cassandra | $akka-persistence-cassandra.version$ | [Documentation](https://doc.akka.io/docs/akka-persistence-cassandra/current/) | +| Akka Persistence plugin for JDBC | $akka-persistence-jdbc.version$ | [Documentation](https://doc.akka.io/docs/akka-persistence-jdbc/current/) | +| Akka Persistence plugin for R2DBC | $akka-persistence-r2dbc.version$ | [Documentation](https://doc.akka.io/docs/akka-persistence-r2dbc/current/) | +| Akka Projections | $akka-projections.version$ | [Documentation](https://doc.akka.io/docs/akka-projection/current/) | +| Akka Management | $akka-management.version$ | [Documentation](https://doc.akka.io/docs/akka-management/current/) | +| Akka Diagnostics | $akka-diagnostics.version$ | [Documentation](https://doc.akka.io/docs/akka-diagnostics/current/) | +| Alpakka | $alpakka.version$ | [Documentation](https://doc.akka.io/docs/alpakka/current/) | +| Alpakka Kafka | $alpakka-kafka.version$ | [Documentation](https://doc.akka.io/docs/alpakka-kafka/current/) | + +## Repository + +The Akka dependencies are available from Akka's library repository. To access them there, you need to configure the URL for this repository. + +@@repository [Maven,sbt,Gradle] { +id="akka-repository" +name="Akka library repository" +url="https://repo.akka.io/maven" +} + +## Akka (core) $akka.version$ +At the core of Akka: A model for concurrency and distribution without all the pain of threading primitives. + +[Documentation](https://doc.akka.io/docs/akka/current/) [JavaDoc](https://doc.akka.io/japi/akka/current/index.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/) + +#### Complete dependency listing of Akka core modules + +Check the [documentation](https://doc.akka.io/docs/akka/current/) to learn which dependencies you require. + +@@dependency [Maven,sbt,Gradle] { +symbol1=AkkaVersion +value1="$akka.version$" +group1="com.typesafe.akka" artifact1="akka-actor_$scala.binary.version$" version1=AkkaVersion +group2="com.typesafe.akka" artifact2="akka-actor-testkit-typed_$scala.binary.version$" version2=AkkaVersion scope2=test +group3="com.typesafe.akka" artifact3="akka-actor-typed_$scala.binary.version$" version3=AkkaVersion +group4="com.typesafe.akka" artifact4="akka-coordination_$scala.binary.version$" version4=AkkaVersion +group5="com.typesafe.akka" artifact5="akka-cluster_$scala.binary.version$" version5=AkkaVersion +group6="com.typesafe.akka" artifact6="akka-cluster-typed_$scala.binary.version$" version6=AkkaVersion +group7="com.typesafe.akka" artifact7="akka-cluster-metrics_$scala.binary.version$" version7=AkkaVersion +group8="com.typesafe.akka" artifact8="akka-cluster-sharding_$scala.binary.version$" version8=AkkaVersion +group9="com.typesafe.akka" artifact9="akka-cluster-sharding-typed_$scala.binary.version$" version9=AkkaVersion +group10="com.typesafe.akka" artifact10="akka-cluster-tools_$scala.binary.version$" version10=AkkaVersion +group11="com.typesafe.akka" artifact11="akka-discovery_$scala.binary.version$" version11=AkkaVersion +group12="com.typesafe.akka" artifact12="akka-distributed-data_$scala.binary.version$" version12=AkkaVersion +group13="com.typesafe.akka" artifact13="akka-multi-node-testkit_$scala.binary.version$" version13=AkkaVersion scope13=test +group14="com.typesafe.akka" artifact14="akka-persistence_$scala.binary.version$" version14=AkkaVersion +group15="com.typesafe.akka" artifact15="akka-persistence-typed_$scala.binary.version$" version15=AkkaVersion +group16="com.typesafe.akka" artifact16="akka-persistence-query_$scala.binary.version$" version16=AkkaVersion +group17="com.typesafe.akka" artifact17="akka-protobuf-v3_$scala.binary.version$" version17=AkkaVersion +group18="com.typesafe.akka" artifact18="akka-remote_$scala.binary.version$" version18=AkkaVersion +group19="com.typesafe.akka" artifact19="akka-slf4j_$scala.binary.version$" version19=AkkaVersion +group20="com.typesafe.akka" artifact20="akka-stream_$scala.binary.version$" version20=AkkaVersion +group21="com.typesafe.akka" artifact21="akka-stream-testkit_$scala.binary.version$" version21=AkkaVersion scope21=test +group22="com.typesafe.akka" artifact22="akka-stream-typed_$scala.binary.version$" version22=AkkaVersion +group23="com.typesafe.akka" artifact23="akka-testkit_$scala.binary.version$" version23=AkkaVersion scope21=test +} + + +### Akka Actors +The Actor Model provides a higher level of abstraction for writing concurrent and distributed systems. It alleviates the developer from having to deal with explicit locking and thread management, making it easier to write correct concurrent and parallel systems. + +[Documentation](https://doc.akka.io/docs/akka/current/typed/index.html) [JavaDoc](https://doc.akka.io/japi/akka/current/akka/actor/typed/package-summary.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/actor/typed/index.html) + +### Akka Cluster +Akka Cluster provides a fault-tolerant decentralized peer-to-peer based Cluster Membership Service with no single point of failure or single point of bottleneck. It does this using gossip protocols and an automatic failure detector. + +[Documentation](https://doc.akka.io/docs/akka/current/typed/index-cluster.html) [JavaDoc](https://doc.akka.io/japi/akka/current/akka/cluster/package-summary.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/cluster/index.html) + +### Akka Event Sourcing +Akka Persistence enables stateful actors to persist their state so that it can be recovered when an actor is either restarted, such as after a JVM crash, by a supervisor or a manual stop-start, or migrated within a cluster. + +[Documentation](https://doc.akka.io/docs/akka/current/typed/index-persistence.html) [JavaDoc](https://doc.akka.io/japi/akka/current/akka/persistence/typed/package-summary.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/persistence/typed/index.html) + +### Akka Durable State +Enables stateful actors to persist their latest state, so that it can be recovered when an actor is restarted. + +[Documentation](https://doc.akka.io/docs/akka/current/typed/index-persistence-durable-state.html) [JavaDoc](https://doc.akka.io/japi/akka/current/akka/persistence/typed/state/javadsl/package-summary.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/persistence/typed/state/scaladsl/index.html) + +### Akka Streams +An intuitive and safe way to do asynchronous, non-blocking backpressured stream processing. + +[Documentation](https://doc.akka.io/docs/akka/current/stream/index.html) [Operators](https://doc.akka.io/docs/akka/current/stream/operators/index.html) + +[JavaDoc](https://doc.akka.io/japi/akka/current/akka/stream/package-summary.html) [ScalaDoc](https://doc.akka.io/api/akka/current/akka/stream/index.html) + +## Akka gRPC $akka-grpc.version$ +Akka gRPC provides support for building streaming gRPC servers and clients on top of Akka Streams and Akka HTTP. + +[Documentation](https://doc.akka.io/docs/akka-grpc/current/) [ScalaDoc](https://doc.akka.io/api/akka-grpc/current/akka/grpc/) + +sbt +: @@@vars + ```scala + // in project/plugins.sbt: + resolvers += "Akka library repository".at("https://repo.akka.io/maven") + addSbtPlugin("com.lightbend.akka.grpc" % "sbt-akka-grpc" % "$akka-grpc.version$") + // + // in build.sbt: + resolvers += "Akka library repository".at("https://repo.akka.io/maven") + enablePlugins(AkkaGrpcPlugin) + ``` +@@@ + +Gradle +: @@@vars + ```gradle + buildscript { + repositories { + gradlePluginPortal() + maven { + url "https://repo.akka.io/maven" + } + } + } + plugins { + id 'java' + id 'application' + id 'com.lightbend.akka.grpc.gradle' version '$akka-grpc.version$' + } + repositories { + mavenCentral() + maven { + url "https://repo.akka.io/maven" + } + } + ``` +@@@ + +Maven +: @@@vars + ```xml + + 4.0.0 + Project name + com.example + my-grpc-app + 0.1-SNAPSHOT + + $akka-grpc.version$ + UTF-8 + + + + akka-repository + Akka library repository + https://repo.akka.io/maven + + + + + akka-repository + Akka library repository + https://repo.akka.io/maven + + + + + com.lightbend.akka.grpc + akka-grpc-runtime_$scala.binary.version$ + ${akka.grpc.version} + + + + + + com.lightbend.akka.grpc + akka-grpc-maven-plugin + ${akka.grpc.version} + + + + generate + + + + + + + + ``` + @@@ + + +## Akka HTTP $akka-http.version$ +The Akka HTTP modules implement a full server- and client-side HTTP stack on top of Akka Actors and Akka Streams. + +[Documentation](https://doc.akka.io/docs/akka-http/current/) [Predefined Directives](https://doc.akka.io/docs/akka-http/current/routing-dsl/directives/alphabetically.html) + +[JavaDoc](https://doc.akka.io/japi/akka-http/current/) [ScalaDoc](https://doc.akka.io/api/akka-http/current/akka/http/scaladsl/index.html) + +#### Complete dependency listing of Akka HTTP modules + +Check the [documentation](https://doc.akka.io/docs/akka-http/current/) to learn which dependencies you require. + +@@dependency [Maven,sbt,Gradle] { + symbol1=AkkaHttpVersion + value1="$akka-http.version$" + group1="com.typesafe.akka" artifact1="akka-http_$scala.binary.version$" version1=AkkaHttpVersion + group2="com.typesafe.akka" artifact2="akka-http-core_$scala.binary.version$" version2=AkkaHttpVersion + group3="com.typesafe.akka" artifact3="akka-http-jackson_$scala.binary.version$" version3=AkkaHttpVersion + group4="com.typesafe.akka" artifact4="akka-http-spray-json_$scala.binary.version$" version4=AkkaHttpVersion + group5="com.typesafe.akka" artifact5="akka-http-testkit_$scala.binary.version$" version5=AkkaHttpVersion scope5=test + group6="com.typesafe.akka" artifact6="akka-http-xml_$scala.binary.version$" version6=AkkaHttpVersion +} + +## Akka Persistence plugin for Cassandra $akka-persistence-cassandra.version$ +The Akka Persistence Cassandra plugin allows for using Apache Cassandra as a backend for Akka Persistence and Akka Persistence Query. + +[Documentation](https://doc.akka.io/docs/akka-persistence-cassandra/current/) + +@@dependency [sbt,Maven,Gradle] { + group=com.typesafe.akka + artifact=akka-persistence-cassandra_$scala.binary.version$ + version=$akka-persistence-cassandra.version$ +} + +## Akka Persistence plugin for JDBC $akka-persistence-jdbc.version$ +The Akka Persistence JDBC plugin allows for using JDBC-compliant databases as backend for Akka Persistence and Akka Persistence Query. + +[Documentation](https://doc.akka.io/docs/akka-persistence-jdbc/current/) + +@@dependency [sbt,Maven,Gradle] { + group=com.lightbend.akka + artifact=akka-persistence-jdbc_$scala.binary.version$ + version=$akka-persistence-jdbc.version$ +} + +## Akka Persistence plugin for R2DBC $akka-persistence-r2dbc.version$ +The Akka Persistence R2DBC plugin allows for using SQL database with R2DBC as a backend for Akka Persistence. + +[Documentation](https://doc.akka.io/docs/akka-persistence-r2dbc/current/) + +@@dependency [Maven,sbt,Gradle] { + group=com.lightbend.akka + artifact=akka-persistence-r2dbc_$scala.binary.version$ + version=$akka-persistence-r2dbc.version$ +} + +## Akka Projections $akka-projections.version$ +Akka Projections is intended for implementing Command Query Responsibility Segregation (CQRS) and Service to service communication. + +[Documentation](https://doc.akka.io/docs/akka-projection/current/) + +@@dependency [Maven,sbt,Gradle] { + group=com.lightbend.akka + artifact=akka-projection-core_$scala.binary.version$ + version=$akka-projections.version$ +} + +## Akka Management $akka-management.version$ +Akka Management is a suite of tools for operating Akka Clusters. + +[Documentation](https://doc.akka.io/docs/akka-management/current/) + +#### Complete dependency listing of Akka Management modules + +Check the [documentation](https://doc.akka.io/docs/akka-management/current/) to learn which dependencies you require. + +@@dependency[sbt,Gradle,Maven] { + symbol1=AkkaManagementVersion + value1=$akka-management.version$ + group=com.lightbend.akka.management artifact="akka-management_$scala.binary.version$" version=AkkaManagementVersion + group2=com.lightbend.akka.management artifact2=akka-management-cluster-http_$scala.binary.version$ version2=AkkaManagementVersion + group3=com.lightbend.akka.management artifact3=akka-management-cluster-bootstrap_$scala.binary.version$ version3=AkkaManagementVersion + group4=com.lightbend.akka.management artifact4=akka-rolling-update-kubernetes_$scala.binary.version$ version4=AkkaManagementVersion + group5=com.lightbend.akka.discovery artifact5=akka-discovery-kubernetes-api_$scala.binary.version$ version5=AkkaManagementVersion +} + +## Akka Diagnostics $akka-diagnostics.version$ +The Akka Thread Starvation Detector is a diagnostic tool that monitors the dispatcher of an ActorSystem and will log a warning if the dispatcher becomes unresponsive. The Config Checker tries to help you by finding potential configuration issues. + +[Documentation](https://doc.akka.io/docs/akka-diagnostics/current/) + +@@dependency [Maven,sbt,Gradle] { +group=com.lightbend.akka +artifact=akka-diagnostics_$scala.binary.version$ +version=$akka-diagnostics.version$ +} + +## Alpakka $alpakka.version$ +The Alpakka project is an open source initiative to implement stream-aware and reactive integration pipelines for Java and Scala. It is built on top of Akka Streams. + +[Documentation](https://doc.akka.io/docs/alpakka/current/) + +### Alpakka Cassandra +Alpakka Cassandra offers an Akka Streams API on top of a `CqlSession` from the Datastax Java Driver version 4.0+. + +[Documentation](https://doc.akka.io/docs/alpakka/current/cassandra.html) + +### Alpakka Comma-separated files (CSV) +Comma-Separated Values are used as interchange format for tabular data of text. + +[Documentation](https://doc.akka.io/docs/alpakka/current/data-transformations/csv.html) + +## Alpakka Kafka $alpakka-kafka.version$ +Alpakka Kafka lets you connect Apache Kafka to Akka Streams. + +[Documentation](https://doc.akka.io/docs/alpakka-kafka/current/) + +@@dependency [Maven,sbt,Gradle] { + group=com.typesafe.akka + artifact=akka-stream-kafka_$scala.binary.version$ + version=$alpakka-kafka.version$ +} + +## Akka Insights + +[Lightbend Telemetry](https://developer.lightbend.com/docs/telemetry/current/home.html) provides a view into the distributed applications at runtime. This view allows developers and operations to respond quickly to problems, track down unexpected behavior and tune the system. + +| Akka | Compatible Akka Insights | +|------|--------------------------| +| Akka 23.10 | Lightbend Telemetry version 2.19 | +| Akka 23.05 | Lightbend Telemetry version 2.18 | +| Akka 22.10 (and older) | Lightbend Telemetry version 2.17 | + +## Architecture + +### Microservices +Tutorial bringing together essential parts of Akka to build resilient and scalable microservices. [Akka Guide](https://developer.lightbend.com/docs/akka-guide/microservices-tutorial/index.html) + +### Distributed Cluster + +Connect Akka services across geographical locations for lower latency and higher availability. [Akka Distributed Cluster](https://doc.akka.io/docs/akka-distributed-cluster/current/index.html) + +### Edge + +Move your endpoints to the edge of the cloud for lower latency and higher availability. [Akka Edge](https://doc.akka.io/docs/akka-edge/current/index.html) + + +@@@ index + +* [java-version](java-versions.md) +* [support-terminology](support-terminology.md) + +@@@ diff --git a/docs/src/main/paradox/java-versions.md b/docs/src/main/paradox/java-versions.md new file mode 100644 index 0000000..510d99b --- /dev/null +++ b/docs/src/main/paradox/java-versions.md @@ -0,0 +1,21 @@ +# Certified Java versions + +## Java 21 + +We are currently in the process of certifying [Temurin 21](https://adoptium.net/en-GB/marketplace/?version=21&os=any&arch=any) builds for use with Akka. + +## Java 17 + +[Temurin 17](https://adoptium.net/en-GB/marketplace/?version=17&os=any&arch=any) builds and Red Hat Enterprise Linux builds of OpenJDK 17 are @ref[certified](support-terminology.md#certified) for use with some components of the Lightbend Platform. + +## Java 11 + +[Temurin 11](https://adoptium.net/en-GB/marketplace/?version=11&os=any&arch=any) builds and Red Hat Enterprise Linux builds of OpenJDK 11 are @ref[certified](support-terminology.md#certified) for use with some components of the Lightbend Platform. + +## Java 8 + +Starting with the Akka 23.10 releases, we do not provide Java 8 compatible builds of Lightbend technologies anymore. + +## Java Platform Module System (JPMS) + +Use of the Java Platform Module System (JPMS) is Not Certified at this time. diff --git a/docs/src/main/paradox/support-terminology.md b/docs/src/main/paradox/support-terminology.md new file mode 100644 index 0000000..fbc9641 --- /dev/null +++ b/docs/src/main/paradox/support-terminology.md @@ -0,0 +1,25 @@ +# Lightbend support terminology + +Lightbend uses the following terminology to designate the level of support provided for products or specific components of products that are included in Lightbend's services. + +## Supported + +Applies to any product for which Lightbend will provide fixes and patches to subscribers on request. Examples of *Supported* products include: Akka, Akka HTTP, Akka Streams, and Alpakka Kafka Connector. + +## Certified + +Other products that work with Lightbend products and are production ready, but are not supported by Lightbend. We will not provide fixes or patches. Lightbend Support will assist subscribers using a *Certified* product via Developer Assist. We do our best to document the recommended and known-to-work configurations, approaches, and architectures when using Lightbend *Supported* products with *Certified* products. + +In specific cases we may choose to refer to these products as *Certified Integrations* -- products we integrate with -- or *Certified Platforms* -- foundational products that we require to run (such as a Java VM). Certification applies to a specific usage and not all usages. For example, Apache Cassandra will be Certified to work with Akka Persistence Cassandra. Lightbend assistance for Cassandra is limited to customers' use of Cassandra with the specific Lightbend product usage only, not for any other use case. + +## Incubating + +A component or integration that is not fully tested and may have limited functionality. These components are not recommended for production use. Although the component may be *Supported* or *Certified* in future releases, Lightbend cannot guarantee when or if that will happen. + +## End of Life (EOL) + +Lightbend commits to providing 1 year advance notice before ending support for any *Supported* component, so an EOL announcement will include the date on which a product is EOL. A product remains *Supported* until the EOL date. Once the EOL date passes, Lightbend will no longer support the product. + +## Community Driven + +Applies to projects or components which are part of Lightbend's repositories, but are not actively *Supported* or *Certified* by Lightbend. These are often projects that are specific to a subset of the community and are driven by community members. This may include projects that were idea spikes that were not interesting enough to pursue, or projects that used to be driven by Lightbend, but are no longer. Examples include many Alpakka connectors, or example code projects. diff --git a/project/Dependencies.scala b/project/Dependencies.scala index c303a61..ae85b25 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -2,22 +2,25 @@ import sbt._ object Dependencies { object Versions { - val Scala213 = "2.13.12" + val Scala213 = "2.13.12" val CrossScalaVersions = Seq(Scala213) + val Scala3 = "3.3" + // To update Cinnamon version, change the plugin version // in project/plugins.sbt - val Akka = "2.9.0" - val AkkaHttp = "10.6.0" - val AkkaManagement = "1.5.0" - val AkkaProjections = "1.5.0" - val AkkaGrpc = "2.4.0" + val AkkaDependenciesMinor = "23.10" + val Akka = "2.9.0" + val AkkaHttp = "10.6.0" + val AkkaManagement = "1.5.0" + val AkkaProjections = "1.5.0" + val AkkaGrpc = "2.4.0" val AkkaPersistenceCassandra = "1.2.0" - val AkkaPersistenceJdbc = "5.3.0" - val AkkaPersistenceR2dbc = "1.2.0" - val Alpakka = "7.0.0" - val AlpakkaKafka = "5.0.0" - val AkkaDiagnostics = "2.1.0" + val AkkaPersistenceJdbc = "5.3.0" + val AkkaPersistenceR2dbc = "1.2.0" + val Alpakka = "7.0.0" + val AlpakkaKafka = "5.0.0" + val AkkaDiagnostics = "2.1.0" } import Versions._ @@ -27,92 +30,81 @@ object Dependencies { * https://developer.lightbend.com/docs/introduction/getting-help/build-dependencies.html */ val akka = Seq( - "com.typesafe.akka" %% "akka-actor" % Akka, - "com.typesafe.akka" %% "akka-actor-testkit-typed" % Akka, - "com.typesafe.akka" %% "akka-actor-typed" % Akka, - "com.typesafe.akka" %% "akka-cluster" % Akka, - "com.typesafe.akka" %% "akka-cluster-metrics" % Akka, - "com.typesafe.akka" %% "akka-cluster-sharding" % Akka, + "com.typesafe.akka" %% "akka-actor" % Akka, + "com.typesafe.akka" %% "akka-actor-testkit-typed" % Akka, + "com.typesafe.akka" %% "akka-actor-typed" % Akka, + "com.typesafe.akka" %% "akka-cluster" % Akka, + "com.typesafe.akka" %% "akka-cluster-metrics" % Akka, + "com.typesafe.akka" %% "akka-cluster-sharding" % Akka, "com.typesafe.akka" %% "akka-cluster-sharding-typed" % Akka, - "com.typesafe.akka" %% "akka-cluster-tools" % Akka, - "com.typesafe.akka" %% "akka-cluster-typed" % Akka, - "com.typesafe.akka" %% "akka-coordination" % Akka, - "com.typesafe.akka" %% "akka-discovery" % Akka, - "com.typesafe.akka" %% "akka-distributed-data" % Akka, - "com.typesafe.akka" %% "akka-serialization-jackson" % Akka, - "com.typesafe.akka" %% "akka-multi-node-testkit" % Akka, - "com.typesafe.akka" %% "akka-persistence" % Akka, - "com.typesafe.akka" %% "akka-persistence-query" % Akka, - "com.typesafe.akka" %% "akka-persistence-typed" % Akka, - "com.typesafe.akka" %% "akka-persistence-testkit" % Akka, - "com.typesafe.akka" %% "akka-protobuf-v3" % Akka, - "com.typesafe.akka" %% "akka-pki" % Akka, - "com.typesafe.akka" %% "akka-remote" % Akka, - "com.typesafe.akka" %% "akka-slf4j" % Akka, - "com.typesafe.akka" %% "akka-stream" % Akka, - "com.typesafe.akka" %% "akka-stream-testkit" % Akka, - "com.typesafe.akka" %% "akka-stream-typed" % Akka, - "com.typesafe.akka" %% "akka-testkit" % Akka - ) + "com.typesafe.akka" %% "akka-cluster-tools" % Akka, + "com.typesafe.akka" %% "akka-cluster-typed" % Akka, + "com.typesafe.akka" %% "akka-coordination" % Akka, + "com.typesafe.akka" %% "akka-discovery" % Akka, + "com.typesafe.akka" %% "akka-distributed-data" % Akka, + "com.typesafe.akka" %% "akka-serialization-jackson" % Akka, + "com.typesafe.akka" %% "akka-multi-node-testkit" % Akka, + "com.typesafe.akka" %% "akka-persistence" % Akka, + "com.typesafe.akka" %% "akka-persistence-query" % Akka, + "com.typesafe.akka" %% "akka-persistence-typed" % Akka, + "com.typesafe.akka" %% "akka-persistence-testkit" % Akka, + "com.typesafe.akka" %% "akka-protobuf-v3" % Akka, + "com.typesafe.akka" %% "akka-pki" % Akka, + "com.typesafe.akka" %% "akka-remote" % Akka, + "com.typesafe.akka" %% "akka-slf4j" % Akka, + "com.typesafe.akka" %% "akka-stream" % Akka, + "com.typesafe.akka" %% "akka-stream-testkit" % Akka, + "com.typesafe.akka" %% "akka-stream-typed" % Akka, + "com.typesafe.akka" %% "akka-testkit" % Akka) val akkaHttp = Seq( - "com.typesafe.akka" %% "akka-http" % AkkaHttp, - "com.typesafe.akka" %% "akka-http-caching" % AkkaHttp, - "com.typesafe.akka" %% "akka-http-core" % AkkaHttp, - "com.typesafe.akka" %% "akka-http-jackson" % AkkaHttp, + "com.typesafe.akka" %% "akka-http" % AkkaHttp, + "com.typesafe.akka" %% "akka-http-caching" % AkkaHttp, + "com.typesafe.akka" %% "akka-http-core" % AkkaHttp, + "com.typesafe.akka" %% "akka-http-jackson" % AkkaHttp, "com.typesafe.akka" %% "akka-http-spray-json" % AkkaHttp, - "com.typesafe.akka" %% "akka-http-testkit" % AkkaHttp, - "com.typesafe.akka" %% "akka-http-xml" % AkkaHttp, - "com.typesafe.akka" %% "akka-parsing" % AkkaHttp - ) + "com.typesafe.akka" %% "akka-http-testkit" % AkkaHttp, + "com.typesafe.akka" %% "akka-http-xml" % AkkaHttp, + "com.typesafe.akka" %% "akka-parsing" % AkkaHttp) val akkaManagement = Seq( - "com.lightbend.akka.management" %% "akka-management" % AkkaManagement, - "com.lightbend.akka.management" %% "akka-management-cluster-http" % AkkaManagement, + "com.lightbend.akka.management" %% "akka-management" % AkkaManagement, + "com.lightbend.akka.management" %% "akka-management-cluster-http" % AkkaManagement, "com.lightbend.akka.management" %% "akka-management-cluster-bootstrap" % AkkaManagement, "com.lightbend.akka.management" %% "akka-management-loglevels-logback" % AkkaManagement, - "com.lightbend.akka.management" %% "akka-lease-kubernetes" % AkkaManagement, - "com.lightbend.akka.discovery" %% "akka-discovery-kubernetes-api" % AkkaManagement - ) + "com.lightbend.akka.management" %% "akka-lease-kubernetes" % AkkaManagement, + "com.lightbend.akka.discovery" %% "akka-discovery-kubernetes-api" % AkkaManagement) val akkaProjections = Seq( - "com.lightbend.akka" %% "akka-projection-core" % AkkaProjections, - "com.lightbend.akka" %% "akka-projection-eventsourced" % AkkaProjections, + "com.lightbend.akka" %% "akka-projection-core" % AkkaProjections, + "com.lightbend.akka" %% "akka-projection-eventsourced" % AkkaProjections, "com.lightbend.akka" %% "akka-projection-durable-state" % AkkaProjections, - "com.lightbend.akka" %% "akka-projection-kafka" % AkkaProjections, - "com.lightbend.akka" %% "akka-projection-cassandra" % AkkaProjections, - "com.lightbend.akka" %% "akka-projection-jdbc" % AkkaProjections, - "com.lightbend.akka" %% "akka-projection-r2dbc" % AkkaProjections, - "com.lightbend.akka" %% "akka-projection-grpc" % AkkaProjections, - "com.lightbend.akka" %% "akka-projection-testkit" % AkkaProjections - ) + "com.lightbend.akka" %% "akka-projection-kafka" % AkkaProjections, + "com.lightbend.akka" %% "akka-projection-cassandra" % AkkaProjections, + "com.lightbend.akka" %% "akka-projection-jdbc" % AkkaProjections, + "com.lightbend.akka" %% "akka-projection-r2dbc" % AkkaProjections, + "com.lightbend.akka" %% "akka-projection-grpc" % AkkaProjections, + "com.lightbend.akka" %% "akka-projection-testkit" % AkkaProjections) - val akkaGrpc = Seq( - "com.lightbend.akka.grpc" %% "akka-grpc-runtime" % AkkaGrpc - ) + val akkaGrpc = Seq("com.lightbend.akka.grpc" %% "akka-grpc-runtime" % AkkaGrpc) val akkaPersistencePlugins = Seq( - "com.typesafe.akka" %% "akka-persistence-cassandra" % AkkaPersistenceCassandra, - "com.lightbend.akka" %% "akka-persistence-jdbc" % AkkaPersistenceJdbc, - "com.lightbend.akka" %% "akka-persistence-r2dbc" % AkkaPersistenceR2dbc - ) + "com.typesafe.akka" %% "akka-persistence-cassandra" % AkkaPersistenceCassandra, + "com.lightbend.akka" %% "akka-persistence-jdbc" % AkkaPersistenceJdbc, + "com.lightbend.akka" %% "akka-persistence-r2dbc" % AkkaPersistenceR2dbc) val alpakka = Seq( - "com.lightbend.akka" %% "akka-stream-alpakka-cassandra" % Alpakka, - "com.lightbend.akka" %% "akka-stream-alpakka-csv" % Alpakka, - "com.typesafe.akka" %% "akka-stream-kafka" % AlpakkaKafka, - "com.typesafe.akka" %% "akka-stream-kafka-cluster-sharding" % AlpakkaKafka, - "com.typesafe.akka" %% "akka-stream-kafka-testkit" % AlpakkaKafka - ) + "com.lightbend.akka" %% "akka-stream-alpakka-cassandra" % Alpakka, + "com.lightbend.akka" %% "akka-stream-alpakka-csv" % Alpakka, + "com.typesafe.akka" %% "akka-stream-kafka" % AlpakkaKafka, + "com.typesafe.akka" %% "akka-stream-kafka-cluster-sharding" % AlpakkaKafka, + "com.typesafe.akka" %% "akka-stream-kafka-testkit" % AlpakkaKafka) - val akkaDiagnostics = Seq( - "com.lightbend.akka" %% "akka-diagnostics" % AkkaDiagnostics - ) + val akkaDiagnostics = Seq("com.lightbend.akka" %% "akka-diagnostics" % AkkaDiagnostics) /** * Commercial components */ - // sbt-cinnamon plugin does not have artifacts for Scala 2.13.x val telemetry = com.lightbend.cinnamon.sbt.Cinnamon.library.modules.filterNot(_.name.equals("sbt-cinnamon")) diff --git a/project/Publish.scala b/project/Publish.scala index e82decb..cde3220 100644 --- a/project/Publish.scala +++ b/project/Publish.scala @@ -6,7 +6,7 @@ import java.util.concurrent.atomic.AtomicBoolean import scala.language.postfixOps -import sbt.{Def, _} +import sbt.{ Def, _ } import Keys._ import com.geirsson.CiReleasePlugin import com.jsuereth.sbtpgp.PgpKeys.publishSigned @@ -24,7 +24,7 @@ object NoPublish extends AutoPlugin { object Publish extends AutoPlugin { override def requires = plugins.JvmPlugin - override def trigger = AllRequirements + override def trigger = AllRequirements lazy val beforePublishTask = taskKey[Unit]("setup before publish") @@ -47,8 +47,7 @@ object Publish extends AutoPlugin { Some(Resolver.file("file", target.value / "repository")) // FIXME snapshot repo else Some("Cloudsmith API".at("https://maven.cloudsmith.io/lightbend/akka/"))), - credentials ++= (if (isSnapshot.value) Seq[Credentials]() else cloudsmithCredentials(validate = false)) - ) + credentials ++= (if (isSnapshot.value) Seq[Credentials]() else cloudsmithCredentials(validate = false))) def cloudsmithCredentials(validate: Boolean): Seq[Credentials] = { (sys.env.get("PUBLISH_USER"), sys.env.get("PUBLISH_PASSWORD")) match { diff --git a/project/build.properties b/project/build.properties index 9edb75b..e8a1e24 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.5.4 +sbt.version=1.9.7 diff --git a/project/plugins.sbt b/project/plugins.sbt index 921bf27..d54c41a 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,4 +1,8 @@ -addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.2") -addSbtPlugin("com.lightbend.sbt" % "sbt-bill-of-materials" % "1.0.2") -addSbtPlugin("com.geirsson" % "sbt-ci-release" % "1.5.6") -addSbtPlugin("com.lightbend.cinnamon" % "sbt-cinnamon" % "2.17.3") +addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") +addSbtPlugin("com.lightbend.sbt" % "sbt-bill-of-materials" % "1.0.2") +addSbtPlugin("com.geirsson" % "sbt-ci-release" % "1.5.7") +addSbtPlugin("com.lightbend.cinnamon" % "sbt-cinnamon" % "2.17.3") +// docs +addSbtPlugin("com.lightbend.akka" % "sbt-paradox-akka" % "0.53") +addSbtPlugin("com.lightbend.sbt" % "sbt-publish-rsync" % "0.2") +addSbtPlugin("com.github.sbt" % "sbt-site-paradox" % "1.5.0") diff --git a/project/project-info.conf b/project/project-info.conf new file mode 100644 index 0000000..825d960 --- /dev/null +++ b/project/project-info.conf @@ -0,0 +1,3 @@ +project-info { + version: "current" +}