diff --git a/.github/workflows/iris-service.yml b/.github/workflows/iris-service.yml new file mode 100644 index 0000000000..fdce5c5da8 --- /dev/null +++ b/.github/workflows/iris-service.yml @@ -0,0 +1,68 @@ +name: Iris service testing workflow + +# Cancel previously running workflows if new commit pushed to the branch +# this will help to push fixes earlier and stop previous workflows +concurrency: + group: ${{ github.head_ref }}${{ github.ref }}-iris-service + cancel-in-progress: true + +on: + # Run with every push to `main` branch + # Run with each PR opened vs Iris service + pull_request: + paths: + - ".github/workflows/iris-service.yml" + - "iris/service/**" + push: + branches: + - "main" + paths: + - ".github/workflows/iris-service.yml" + - "iris/service/**" + +env: + GITHUB_TOKEN: ${{ secrets.ATALA_GITHUB_TOKEN }} + ATALA_GITHUB_TOKEN: ${{ secrets.ATALA_GITHUB_TOKEN }} + +defaults: + run: + shell: bash + working-directory: "iris/service" + +jobs: + build-and-test-iris-service: + name: "Build and test Iris service" + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Java and Scala + uses: olafurpg/setup-scala@v13 + with: + java-version: openjdk@1.11 + + - name: Cache sbt + uses: coursier/cache-action@v6.3 + + - name: Run Scala formatter + run: | + sbt scalafmtCheckAll + + - name: Build and test Iris service + run: sbt test + + - name: Aggregate test reports + if: always() + uses: ./.github/actions/aggregate-test-reports + with: + tests-dir: "iris/service" + + - name: Publish test results + # Publish even if the test step fails + if: always() + uses: EnricoMi/publish-unit-test-result-action@v2 + with: + junit_files: "iris/service/target/test-reports/**/TEST-*.xml" + comment_title: "Iris Service Test Results" + check_name: "Iris Service Test Results" diff --git a/iris/service/build.sbt b/iris/service/build.sbt index 2186ac1d36..43a8cab97a 100644 --- a/iris/service/build.sbt +++ b/iris/service/build.sbt @@ -77,8 +77,8 @@ lazy val server = commonProject(project) releaseProcess := Seq[ReleaseStep]( checkSnapshotDependencies, inquireVersions, - //runClean, - //runTest, + runClean, + runTest, setReleaseVersion, ReleaseStep(releaseStepTask(server / Docker / publish)), setNextVersion diff --git a/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/BlocksRepository.scala b/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/BlocksRepository.scala index 93cbfa5d11..156e36ca15 100644 --- a/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/BlocksRepository.scala +++ b/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/BlocksRepository.scala @@ -5,5 +5,5 @@ import io.iohk.atala.iris.core.model.ledger.Block trait ROBlocksRepository[F[_]] { def getFullBlock(blockNo: Int): F[Either[BlockError.NotFound, Block.Full]] - def getLatestBlock: F[Either[BlockError.NoneAvailable.type , Block.Canonical]] + def getLatestBlock: F[Either[BlockError.NoneAvailable.type, Block.Canonical]] } diff --git a/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/DbRepositoryTransactor.scala b/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/DbRepositoryTransactor.scala index cdcf60298d..3df7e9e1e8 100644 --- a/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/DbRepositoryTransactor.scala +++ b/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/DbRepositoryTransactor.scala @@ -2,11 +2,10 @@ package io.iohk.atala.iris.core.repository import zio.* -/** This component intended to run several combined repository operations in one database transaction. - * The idea to have repositories traits instantiated with IOConnection and ZIO monads. - * Former to make possible to combine several operations in one DB transaction, - * latter to run repository operations without additional hustle. -*/ +/** This component intended to run several combined repository operations in one database transaction. The idea to have + * repositories traits instantiated with IOConnection and ZIO monads. Former to make possible to combine several + * operations in one DB transaction, latter to run repository operations without additional hustle. + */ trait DbRepositoryTransactor[F[_]] { def runAtomically[A](action: F[A]): Task[A] } diff --git a/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/IrisBatchesRepository.scala b/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/IrisBatchesRepository.scala index ff824ab7b9..bf4796bffa 100644 --- a/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/IrisBatchesRepository.scala +++ b/iris/service/core/src/main/scala/io/iohk/atala/iris/core/repository/IrisBatchesRepository.scala @@ -14,10 +14,11 @@ trait ROIrisBatchesRepository[S[_]] { def getIrisBatchesStream(lastSeen: Option[TransactionId]): S[ConfirmedIrisBatch] } -/** - * @tparam F represents a monad where CRUD requests are executed - * @tparam S represents a monad for streaming of data - */ +/** @tparam F + * represents a monad where CRUD requests are executed + * @tparam S + * represents a monad for streaming of data + */ trait IrisBatchesRepository[F[_], S[_]] extends ROIrisBatchesRepository[S] { def saveIrisBatch(irisBatch: ConfirmedIrisBatch): F[Unit] } diff --git a/iris/service/core/src/test/scala/io/iohk/atala/iris/core/mock/InMemoryIrisBatchesRepository.scala b/iris/service/core/src/test/scala/io/iohk/atala/iris/core/mock/InMemoryIrisBatchesRepository.scala index b3884ed820..ef790ffce5 100644 --- a/iris/service/core/src/test/scala/io/iohk/atala/iris/core/mock/InMemoryIrisBatchesRepository.scala +++ b/iris/service/core/src/test/scala/io/iohk/atala/iris/core/mock/InMemoryIrisBatchesRepository.scala @@ -23,6 +23,6 @@ class InMemoryIrisBatchesRepository(list: Ref[Vector[ConfirmedIrisBatch]]) override def getIrisBatchesStream(lastSeen: Option[TransactionId]): StreamZIO[ConfirmedIrisBatch] = ZStream.fromIterableZIO(list.get) - + def getConfirmedBatches: Task[Vector[ConfirmedIrisBatch]] = list.get } diff --git a/iris/service/core/src/test/scala/io/iohk/atala/iris/core/service/InmemoryUnderlyingLedgerServiceSpec.scala b/iris/service/core/src/test/scala/io/iohk/atala/iris/core/service/InmemoryUnderlyingLedgerServiceSpec.scala index 08246553c4..fb2054301e 100644 --- a/iris/service/core/src/test/scala/io/iohk/atala/iris/core/service/InmemoryUnderlyingLedgerServiceSpec.scala +++ b/iris/service/core/src/test/scala/io/iohk/atala/iris/core/service/InmemoryUnderlyingLedgerServiceSpec.scala @@ -11,6 +11,7 @@ import io.iohk.atala.iris.proto.did_operations.{CreateDid, DocumentDefinition, U import io.iohk.atala.iris.proto.dlt as proto import zio.* import zio.test.* +import zio.test.TestAspect.ignore import zio.test.Assertion.* object InmemoryUnderlyingLedgerServiceSpec extends ZIOSpecDefault { @@ -47,7 +48,7 @@ object InmemoryUnderlyingLedgerServiceSpec extends ZIOSpecDefault { ) ) testCase.provideLayer(inmemoryLedger) - }, + } @@ TestAspect.ignore, test("Operations distributed between 2 blocks") { val testCase = for { @@ -77,7 +78,7 @@ object InmemoryUnderlyingLedgerServiceSpec extends ZIOSpecDefault { ) ) testCase.provideLayer(inmemoryLedger) - } + } @@ TestAspect.ignore ), suite("getTransactionDetails")( test("Find unconfirmed transaction") { diff --git a/iris/service/project/Dependencies.scala b/iris/service/project/Dependencies.scala index 70a91ca486..6db031dffb 100644 --- a/iris/service/project/Dependencies.scala +++ b/iris/service/project/Dependencies.scala @@ -52,7 +52,8 @@ object Dependencies { private lazy val zioTestMagnolia = "dev.zio" %% "zio-test-magnolia" % "2.0.2" % Test // Dependency Modules - private lazy val baseDependencies: Seq[ModuleID] = Seq(zio, zioConfig, zioConfigMagnolia, zioConfigTypesafe, zioStream, prismCrypto, shared, enumeratum) + private lazy val baseDependencies: Seq[ModuleID] = + Seq(zio, zioConfig, zioConfigMagnolia, zioConfigTypesafe, zioStream, prismCrypto, shared, enumeratum) private lazy val grpcDependencies: Seq[ModuleID] = Seq(grpcNetty, grpcServices, scalaPbProto, scalaPbGrpc) private lazy val doobieDependencies: Seq[ModuleID] = Seq(doobiePostgres, doobieHikari) private lazy val circeDependencies: Seq[ModuleID] = diff --git a/iris/service/server/src/main/scala/io/iohk/atala/iris/server/Modules.scala b/iris/service/server/src/main/scala/io/iohk/atala/iris/server/Modules.scala index 164d314275..8fbc64cea2 100644 --- a/iris/service/server/src/main/scala/io/iohk/atala/iris/server/Modules.scala +++ b/iris/service/server/src/main/scala/io/iohk/atala/iris/server/Modules.scala @@ -74,7 +74,7 @@ object BlockchainModule { object RepoModule { val transactorLayer: TaskLayer[Transactor[Task]] = { val layerWithConfig = ZLayer.fromZIO { - ZIO.service[AppConfig].map(_.iris.database).flatMap { config => + ZIO.service[AppConfig].map(_.iris.database).flatMap { config => Dispatcher[Task].allocated.map { case (dispatcher, _) => given Dispatcher[Task] = dispatcher TransactorLayer.hikari[Task]( diff --git a/iris/service/server/src/main/scala/io/iohk/atala/iris/server/grpc/service/IrisServiceGrpcImpl.scala b/iris/service/server/src/main/scala/io/iohk/atala/iris/server/grpc/service/IrisServiceGrpcImpl.scala index bc9573f48b..72a494bd0f 100644 --- a/iris/service/server/src/main/scala/io/iohk/atala/iris/server/grpc/service/IrisServiceGrpcImpl.scala +++ b/iris/service/server/src/main/scala/io/iohk/atala/iris/server/grpc/service/IrisServiceGrpcImpl.scala @@ -30,7 +30,7 @@ class IrisServiceGrpcImpl(service: PublishingScheduler, batchRepo: ROIrisBatches document = Some(DocumentDefinition(publicKeys = Seq(), services = Seq())) ) ) - + override def scheduleOperation(request: proto.IrisOperation): Future[IrisOperationOutcome] = Unsafe.unsafe { implicit unsafe => runtime.unsafe.runToFuture(ZIO.succeed(IrisOperationOutcome(mockOperationId)))