Skip to content

Commit

Permalink
* Supports rollback from pekko migration
Browse files Browse the repository at this point in the history
* Prepare for github actions release process
  • Loading branch information
Brendan Doyle authored and scullxbones committed Sep 30, 2023
1 parent 0bace14 commit 44c27f2
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 40 deletions.
23 changes: 23 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Release
on:
push:
branches: [master, main]
tags: ["*"]
jobs:
publish:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 17
cache: sbt
- 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 }}
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

* Test suite verifies against MongoDB 3.6, 4.0, 4.2

### Preparing to migrate to Apache Pekko? Not to worry, an incremental upgrade is supported.

* Provides forwards compatibility for Akka / Pekko features that persist internal class names, allowing for you to safely roll back your application after migration.

### Using Akka 2.6? Use 3.x Series.
[![Build Status](https://travis-ci.com/scullxbones/akka-persistence-mongo.svg?branch=master)](https://travis-ci.org/scullxbones/akka-persistence-mongo)
![Maven Central 2.12](https://maven-badges.herokuapp.com/maven-central/com.github.scullxbones/akka-persistence-mongo-common_2.12/badge.svg)
Expand Down
25 changes: 19 additions & 6 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
val releaseV = "3.0.8"
publish / skip := true

val scala212V = "2.12.15"
val scala213V = "2.13.7"
Expand Down Expand Up @@ -39,8 +39,22 @@ val commonDeps = Seq(
lazy val Ci = config("ci").extend(Test)

ThisBuild / organization := "com.github.scullxbones"
ThisBuild / version := releaseV
ThisBuild / scalaVersion := scalaV
ThisBuild / versionScheme := Some("semver-spec")

import xerial.sbt.Sonatype._

ThisBuild / sonatypeProjectHosting := Some(GitHubHosting("scullxbones", "akka-persistence-mongo", "[email protected]"))
ThisBuild / licenses := Seq("APL2" -> url("http://www.apache.org/licenses/LICENSE-2.0.txt"))
ThisBuild / developers := List(
Developer(
"scullxbones",
"Brian Scully",
"@scullxbones",
url("https://github.com/scullxbones/")
)
)
ThisBuild / homepage := Some(url("https://github.com/scullxbones/akka-persistence-mongo"))

val commonSettings = Seq(
scalaVersion := scalaV,
Expand All @@ -52,8 +66,6 @@ val commonSettings = Seq(
"com.typesafe.akka" %% "akka-stream" % akkaV,
"org.mongodb" % "mongodb-driver-legacy" % MongoJavaDriverVersion
),
version := releaseV,
organization := "com.github.scullxbones",
scalacOptions ++= Seq(
"-unchecked",
"-deprecation",
Expand Down Expand Up @@ -131,14 +143,15 @@ lazy val `akka-persistence-mongo-tools` = (project in file("tools"))
.settings(
libraryDependencies ++= Seq(
"org.mongodb.scala" %% "mongo-scala-driver" % "2.7.0" % "compile"
)
),
publish / skip := true,
)
.configs(Ci)

lazy val `akka-persistence-mongo` = (project in file("."))
.aggregate(`akka-persistence-mongo-common`, `akka-persistence-mongo-rxmongo`, `akka-persistence-mongo-scala`, `akka-persistence-mongo-tools`)
.settings(
crossScalaVersions := Nil,
skip in publish := true,
publish / skip := true,
publishTo := Some(Resolver.file("file", new File("target/unusedrepo")))
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import akka.actor.ActorRef
import akka.persistence.journal.Tagged
import akka.persistence.query.{EventEnvelope, Offset}
import akka.persistence.{AtomicWrite, PersistentRepr}
import akka.serialization.{Serialization, SerializerWithStringManifest}
import akka.serialization.{Serialization, Serializer, SerializerWithStringManifest}

import scala.collection.immutable.{Seq => ISeq}
import scala.language.existentials
Expand Down Expand Up @@ -51,15 +51,28 @@ case class Serialized[C <: AnyRef](bytes: Array[Byte],
lazy val content: C = {

val clazz = loadClass.getClassFor[X forSome { type X <: AnyRef }](className)
Try(tryDeserialize(clazz, clazz.flatMap(c => Try(ser.serializerFor(c)))))
.recover({
case _ if className.startsWith("org.apache.pekko.") =>
val backwardsCompatClazz = loadClass.getClassFor[X forSome { type X <: AnyRef }](className.replaceFirst("org.apache.pekko", "akka"))
tryDeserialize(backwardsCompatClazz, backwardsCompatClazz.flatMap(c => Try(ser.serializerFor(c))))
case x => throw x
}) match {
case Failure(x) => throw x
case Success(deser) => deser
}
}

val tried = (serializedManifest,serializerId,clazz.flatMap(c => Try(ser.serializerFor(c)))) match {
private def tryDeserialize(clazz: Try[Class[_ <: X forSome {type X <: AnyRef}]],
serializer: Try[Serializer]): C = {
val tried = (serializedManifest, serializerId, serializer) match {
// Manifest was serialized, class exists ~ prefer read-time configuration
case (Some(manifest), _, Success(clazzSer)) =>
ser.deserialize(bytes, clazzSer.identifier, manifest)

// No manifest id serialized, prefer read-time configuration
case (None, _, Success(clazzSer)) =>
ser.deserialize[X forSome { type X <: AnyRef }](bytes, clazzSer.identifier, clazz.toOption)
ser.deserialize[X forSome {type X <: AnyRef}](bytes, clazzSer.identifier, clazz.toOption)

// Manifest, id were serialized, class doesn't exist - use write-time configuration
case (Some(manifest), Some(id), Failure(_)) =>
Expand Down
4 changes: 1 addition & 3 deletions project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value

addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.10")

addSbtPlugin("com.jsuereth" % "sbt-pgp" % "2.1.1")
addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12")
28 changes: 0 additions & 28 deletions sonatype.sbt

This file was deleted.

0 comments on commit 44c27f2

Please sign in to comment.