From a78a8020215766f5280853105914b3791a58f788 Mon Sep 17 00:00:00 2001 From: Brian Scully Date: Sun, 17 Oct 2021 10:21:20 -0400 Subject: [PATCH] Transition from TravisCI to Github Actions --- .github/workflows/ci.yml | 62 +++++++++++++++++++ .gitignore | 1 + .travis.yml | 34 ---------- build.sbt | 14 ++--- ci_build.sh | 19 ++++++ .../persistence/mongodb/ReadJournalSpec.scala | 9 ++- travis_build.sh | 3 - 7 files changed, 96 insertions(+), 46 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml create mode 100755 ci_build.sh delete mode 100755 travis_build.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..078f1fa1 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,62 @@ +name: CI +on: [push, pull_request] +jobs: + build: + strategy: + fail-fast: false + matrix: + include: + - mongo-version: 3.6 + scala-version: 2.12.15 + - mongo-version: 3.6 + scala-version: 2.13.6 + # 4.0 must be quoted, otherwise will be truncated to 4 + - mongo-version: "4.0" + scala-version: 2.12.15 + - mongo-version: "4.0" + scala-version: 2.13.6 + - mongo-version: 4.2 + scala-version: 2.12.15 + - mongo-version: 4.2 + scala-version: 2.13.6 + env: + MONGODB_AUTH_PORT: 28117 + MONGODB_NOAUTH_PORT: 27117 + MONGODB_OPTS: --storageEngine wiredTiger --bind_ip_all + CONTAINER_HOST: 127.0.0.1 + AKKA_TEST_TIMEFACTOR: 10 + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup JDK + uses: actions/setup-java@v2 + with: + distribution: adopt + java-version: 8 + - name: Coursier cache + uses: coursier/cache-action@v6 + - name: Start mongod + run: | + echo Starting mongod version ${{matrix.mongo-version}} + sudo docker pull scullxbones/mongodb:${{matrix.mongo-version}} + sudo docker run -d -p $MONGODB_NOAUTH_PORT:27017 scullxbones/mongodb:${{matrix.mongo-version}} --noauth $MONGODB_OPTS + sudo docker run -d -p $MONGODB_AUTH_PORT:27017 scullxbones/mongodb:${{matrix.mongo-version}} --auth $MONGODB_OPTS + sudo docker ps -a + - name: Setup authentication + run: | + sleep 15 + sudo docker exec $(sudo docker ps -a | grep -e "--auth" | awk '{print $1;}') mongo admin --eval "db.createUser({user:'admin',pwd:'password',roles:['root']});" + - name: Build and test + shell: bash + run: | + echo Running test suite for scala version ${{matrix.scala-version}} + ./ci_build.sh ${{matrix.scala-version}} + - name: Cleanup before cache + shell: bash + run: | + rm -rf "$HOME/.ivy2/local" || true + find $HOME/Library/Caches/Coursier/v1 -name "ivydata-*.properties" -delete || true + find $HOME/.ivy2/cache -name "ivydata-*.properties" -delete || true + find $HOME/.cache/coursier/v1 -name "ivydata-*.properties" -delete || true + find $HOME/.sbt -name "*.lock" -delete || true \ No newline at end of file diff --git a/.gitignore b/.gitignore index eb0247f5..30979ee4 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,4 @@ out/ .bloop/ .bsp/ +.vscode/ \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index be805d5e..00000000 --- a/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -sudo: required -cache: - - $HOME/.ivy2 - - $HOME/.sbt -os: linux -dist: trusty -services: - - docker -language: scala -scala: - - 2.12.11 - - 2.13.2 -env: - matrix: - - MONGODB_VERSION=3.6 MONGODB_OPTS="--storageEngine wiredTiger --bind_ip_all" - - MONGODB_VERSION=4.0 MONGODB_OPTS="--storageEngine wiredTiger --bind_ip_all" - - MONGODB_VERSION=4.2 MONGODB_OPTS="--storageEngine wiredTiger --bind_ip_all" - global: - - MONGODB_AUTH_PORT=28117 - - MONGODB_NOAUTH_PORT=27117 - - CONTAINER_HOST=127.0.0.1 - - AKKA_TEST_TIMEFACTOR=10 -jdk: - - openjdk8 -before_install: - - docker pull scullxbones/mongodb:$MONGODB_VERSION - - docker run -d -p $MONGODB_NOAUTH_PORT:27017 scullxbones/mongodb:$MONGODB_VERSION --noauth $MONGODB_OPTS - - docker run -d -p $MONGODB_AUTH_PORT:27017 scullxbones/mongodb:$MONGODB_VERSION --auth $MONGODB_OPTS - - docker ps -a -before_script: - - sleep 15 - - docker exec $(docker ps -a | grep -e "--auth" | awk '{print $1;}') mongo admin --eval "db.createUser({user:'admin',pwd:'password',roles:['root']});" -script: - - travis_retry ./travis_build.sh diff --git a/build.sbt b/build.sbt index c2db5ac5..1a8284de 100644 --- a/build.sbt +++ b/build.sbt @@ -36,7 +36,7 @@ val commonDeps = Seq( "com.typesafe.akka" %% "akka-cluster-sharding" % akkaV % "test" ) -lazy val Travis = config("travis").extend(Test) +lazy val Ci = config("ci").extend(Test) ThisBuild / organization := "com.github.scullxbones" ThisBuild / version := releaseV @@ -82,16 +82,16 @@ val commonSettings = Seq( ), parallelExecution in Test := false, testOptions in Test += Tests.Argument("-oDS"), - testOptions in Travis += Tests.Argument("-l", "org.scalatest.tags.Slow"), + testOptions in Ci += Tests.Argument("-l", "org.scalatest.tags.Slow"), fork in Test := false, publishTo := sonatypePublishTo.value, publishConfiguration := publishConfiguration.value.withOverwrite(true), publishLocalConfiguration := publishLocalConfiguration.value.withOverwrite(true) -) ++ inConfig(Travis)(Defaults.testTasks) +) ++ inConfig(Ci)(Defaults.testTasks) lazy val `akka-persistence-mongo-common` = (project in file("common")) .settings(commonSettings:_*) - .configs(Travis) + .configs(Ci) lazy val `akka-persistence-mongo-scala` = (project in file("scala")) .dependsOn(`akka-persistence-mongo-common` % "test->test;compile->compile") @@ -108,7 +108,7 @@ lazy val `akka-persistence-mongo-scala` = (project in file("scala")) dependencyOverrides ++= Seq( ) ) - .configs(Travis) + .configs(Ci) lazy val `akka-persistence-mongo-rxmongo` = (project in file("rxmongo")) .dependsOn(`akka-persistence-mongo-common` % "test->test;compile->compile") @@ -123,7 +123,7 @@ lazy val `akka-persistence-mongo-rxmongo` = (project in file("rxmongo")) .excludeAll(ExclusionRule("org.apache.logging.log4j")) ) ) - .configs(Travis) + .configs(Ci) lazy val `akka-persistence-mongo-tools` = (project in file("tools")) .dependsOn(`akka-persistence-mongo-scala` % "test->test;compile->compile") @@ -133,7 +133,7 @@ lazy val `akka-persistence-mongo-tools` = (project in file("tools")) "org.mongodb.scala" %% "mongo-scala-driver" % "2.7.0" % "compile" ) ) - .configs(Travis) + .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`) diff --git a/ci_build.sh b/ci_build.sh new file mode 100755 index 00000000..5211cd86 --- /dev/null +++ b/ci_build.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +SCALA_VERSION=$1 + +if [ -z "$SCALA_VERSION" ]; then + echo "Missing value for SCALA_VERSION" + exit 1 +fi + +CURRENT=0 +MAX_TRIES=3 +COMMAND_STATUS=1 +until [[ $COMMAND_STATUS -eq 0 || $CURRENT -eq ${MAX_TRIES} ]]; do + sbt ++${SCALA_VERSION} ";akka-persistence-mongo-common/ci:test;akka-persistence-mongo-rxmongo/ci:test;akka-persistence-mongo-scala/ci:test;akka-persistence-mongo-tools/ci:test" + COMMAND_STATUS=$? + sleep 5 + let CURRENT=CURRENT+1 +done +exit $COMMAND_STATUS \ No newline at end of file diff --git a/common/src/test/scala/akka/contrib/persistence/mongodb/ReadJournalSpec.scala b/common/src/test/scala/akka/contrib/persistence/mongodb/ReadJournalSpec.scala index 25e23623..738f5673 100644 --- a/common/src/test/scala/akka/contrib/persistence/mongodb/ReadJournalSpec.scala +++ b/common/src/test/scala/akka/contrib/persistence/mongodb/ReadJournalSpec.scala @@ -144,7 +144,7 @@ abstract class ReadJournalSpec[A <: MongoPersistenceExtension](extensionClass: C val ar1 = as.actorOf(props("foo", promise1, 3)) val ar2 = as.actorOf(props("bar", promise2, 3)) - events slice (0, 3) foreach (ar1 ! _) + events take 3 foreach (ar1 ! _) Await.ready(promise1.future, 3.seconds) val readJournal = PersistenceQuery(as).readJournalFor[ScalaDslMongoReadJournal](MongoReadJournal.Identifier) @@ -158,7 +158,7 @@ abstract class ReadJournalSpec[A <: MongoPersistenceExtension](extensionClass: C .run() Thread.sleep(1000L) - events slice (3, 6) foreach (ar2 ! _) + events takeRight 3 foreach (ar2 ! _) probe.receiveN(events.size, 3.seconds.dilated).collect { case msg: EventEnvelope => msg.event.toString } should contain allOf ("this", "is", "just", "a", "test", "END") ks.shutdown() @@ -458,12 +458,17 @@ abstract class ReadJournalSpec[A <: MongoPersistenceExtension](extensionClass: C .eventsByPersistenceId("foo-live-2b", 0L, Long.MaxValue) .viaMat(KillSwitches.single)(Keep.right) .take(events2.size.toLong) + .wireTap(ee => System.out.println(s"${getClass.getSimpleName}-$suiteName Received envelope for event: ${ee.event}")) .toMat(Sink.seq[EventEnvelope])(Keep.both) .run() + Thread.sleep(1000L) + events foreach (ar ! _) events2 foreach (ar2 ! _) + promise2.future.futureValue(Timeout(1.seconds.dilated)) + sq.futureValue(Timeout(3.seconds.dilated)) .toList .map(_.event) should be(events2.map(_.s)) diff --git a/travis_build.sh b/travis_build.sh deleted file mode 100755 index ef120c8d..00000000 --- a/travis_build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -sbt ++$TRAVIS_SCALA_VERSION ";akka-persistence-mongo-common/travis:test;akka-persistence-mongo-rxmongo/travis:test;akka-persistence-mongo-scala/travis:test;akka-persistence-mongo-tools/travis:test"