diff --git a/.github/workflows/jacoco_check.yml b/.github/workflows/jacoco_check.yml index c3e2671e3..e9757b0e3 100644 --- a/.github/workflows/jacoco_check.yml +++ b/.github/workflows/jacoco_check.yml @@ -21,52 +21,131 @@ on: branches: [ master ] types: [ opened, edited, synchronize, reopened ] +env: + scalaLong12: 2.12.18 + scalaShort12: "2.12" + scalaLong13: 2.13.11 + scalaShort13: "2.13" + overall: 80.0 + changed: 80.0 + jobs: test: name: Build and test runs-on: ubuntu-latest - strategy: - matrix: - include: - # The project supports Scala 2.11, 2.12 and the default version of spark2 - # The CI runs all tests suites for all supported Scala versions at build.yml - # The codebase for all Scala versions is the same, so the coverage is calculated only once - # Scala 2.12 is chosen since it is supported by the most wide range of Spark versions and - # vendor distributions. - - scala: 2.12.18 - scalaShort: "2.12" - overall: 80.0 - changed: 80.0 + + services: + postgres: + image: postgres:15 + env: + POSTGRES_PASSWORD: postgres + POSTGRES_DB: atum_db + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Setup Scala - uses: olafurpg/setup-scala@v10 + uses: olafurpg/setup-scala@v14 with: java-version: "adopt@1.8" + - name: Prepare testing database + run: sbt flywayMigrate - name: Build and run tests - run: sbt "++${{matrix.scala}}; project agent; jacoco" - # Agent module code coverage + continue-on-error: true + id: jacocorun + run: sbt jacoco + # server module code coverage - name: Add coverage to PR + if: steps.jacocorun.outcome == 'success' + id: jacoco-server + uses: madrapps/jacoco-report@v1.6.1 + with: + paths: ${{ github.workspace }}/server/target/jvm-${{ env.scalaShort13 }}/jacoco/report/jacoco.xml + token: ${{ secrets.GITHUB_TOKEN }} + min-coverage-overall: ${{env.overall }} + min-coverage-changed-files: ${{ env.changed }} + title: JaCoCo server module code coverage report - scala ${{ env.scalaLong13 }} + update-comment: true + # agent module code coverage + - name: Add coverage to PR + if: steps.jacocorun.outcome == 'success' id: jacoco-agent uses: madrapps/jacoco-report@v1.6.1 with: - paths: ${{ github.workspace }}/agent/target/spark2-jvm-${{ matrix.scalaShort }}/jacoco/report/jacoco.xml + name: agent-jacoco-report + paths: ${{ github.workspace }}/agent/target/jvm-${{ env.scalaShort12 }}/jacoco/report/jacoco.xml token: ${{ secrets.GITHUB_TOKEN }} - min-coverage-overall: ${{matrix.overall }} - min-coverage-changed-files: ${{ matrix.changed }} - title: JaCoCo agent module code coverage report - spark:2 - scala ${{ matrix.scala }} + min-coverage-overall: ${{ env.overall }} + min-coverage-changed-file: ${{ env.changed }} + title: JaCoCo agent module code coverage report - scala ${{ env.scalaLong12 }} + update-comment: true + # model module code coverage + - name: Add coverage to PR + if: steps.jacocorun.outcome == 'success' + id: jacoco-model + uses: madrapps/jacoco-report@v1.6.1 + with: + name: model-jacoco-report + paths: ${{ github.workspace }}/model/target/jvm-${{ env.scalaShort12 }}/jacoco/report/jacoco.xml + token: ${{ secrets.GITHUB_TOKEN }} + min-coverage-overall: ${{ env.overall }} + min-coverage-changed-file: ${{ env.changed }} + title: JaCoCo model module code coverage report - scala ${{ env.scalaLong12 }} update-comment: true - name: Get the Coverage info + if: steps.jacocorun.outcome == 'success' run: | + echo "Total sever module coverage ${{ steps.jacoco-server.outputs.coverage-overall }}" + echo "Changed Files coverage ${{ steps.jacoco-server.outputs.coverage-changed-files }}" echo "Total agent module coverage ${{ steps.jacoco-agent.outputs.coverage-overall }}" echo "Changed Files coverage ${{ steps.jacoco-agent.outputs.coverage-changed-files }}" - - name: Fail PR if changed files coverage is less than ${{ matrix.changed }}% - if: | - ${{ steps.jacoco-agent.outputs.coverage-changed-files < 80.0 }} + echo "Total model module coverage ${{ steps.jacoco-model.outputs.coverage-overall }}" + echo "Changed Files coverage ${{ steps.jacoco-model.outputs.coverage-changed-files }}" + - name: Fail PR if changed files coverage is less than ${{ env.changed }}% + if: steps.jacocorun.outcome == 'success' uses: actions/github-script@v6 with: script: | - core.setFailed('Changed files coverage is less than ${{ matrix.changed }}%!') + const coverageCheckFailed = + Number('${{ steps.jacoco-server.outputs.coverage-changed-files }}') < Number('${{ env.changed }}') || + Number('${{ steps.jacoco-agent.outputs.coverage-changed-files }}') < Number('${{ env.changed }}') || + Number('${{ steps.jacoco-model.outputs.coverage-changed-files }}') < Number('${{ env.changed }}'); + if (coverageCheckFailed) { + core.setFailed('Changed files coverage is less than ${{ env.changed }}%!'); + } + - name: Edit JaCoCo comments on build failure + if: steps.jacocorun.outcome != 'success' + uses: actions/github-script@v6 + with: + script: | + const issue_number = context.issue.number; + const owner = context.repo.owner; + const repo = context.repo.repo; + const jacocoReportRegExp = /^### JaCoCo .* code coverage report .*/; + + const comments = await github.rest.issues.listComments({ + owner, + repo, + issue_number, + }); + for (const comment of comments.data) { + const lines = comment.body.split('\n'); + if (lines.length > 0 && jacocoReportRegExp.test(lines[0])) { + await github.rest.issues.updateComment({ + owner, + repo, + comment_id: comment.id, + body: lines[0] + "\n\n### Build Failed", + }); + } + } + core.setFailed('JaCoCo test coverage report generation failed, and related PR comments were updated.'); diff --git a/.github/workflows/jacoco_check_server.yml b/.github/workflows/jacoco_check_server.yml deleted file mode 100644 index 6c4c6ee99..000000000 --- a/.github/workflows/jacoco_check_server.yml +++ /dev/null @@ -1,84 +0,0 @@ -# -# Copyright 2021 ABSA Group Limited -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -name: JaCoCo report server - -on: - pull_request: - branches: [ master ] - types: [ opened, edited, synchronize, reopened ] - -jobs: - test: - name: Build and test - runs-on: ubuntu-latest - - services: - postgres: - image: postgres:15 - env: - POSTGRES_PASSWORD: postgres - POSTGRES_DB: atum_db - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 5432:5432 - - strategy: - matrix: - include: - - scala: 2.13.11 - scalaShort: "2.13" - overall: 80.0 - changed: 80.0 - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Setup Scala - uses: olafurpg/setup-scala@v10 - with: - java-version: "adopt@1.8" - - name: Prepare testing database - run: sbt flywayMigrate - - name: Build and run tests - run: sbt "++${{matrix.scala}}; project server; jacoco" - # server module code coverage - - name: Add coverage to PR - id: jacoco-server - uses: madrapps/jacoco-report@v1.6.1 - with: - paths: ${{ github.workspace }}/server/target/jvm-${{ matrix.scalaShort }}/jacoco/report/jacoco.xml - token: ${{ secrets.GITHUB_TOKEN }} - min-coverage-overall: ${{matrix.overall }} - min-coverage-changed-files: ${{ matrix.changed }} - title: JaCoCo server module code coverage report - scala ${{ matrix.scala }} - update-comment: true - - name: Get the Coverage info - run: | - echo "Total sever module coverage ${{ steps.jacoco-server.outputs.coverage-overall }}" - echo "Changed Files coverage ${{ steps.jacoco-server.outputs.coverage-changed-files }}" - - name: Fail PR if changed files coverage is less than ${{ matrix.changed }}% - if: | - ${{ steps.jacoco-server.outputs.coverage-changed-files < 80.0 }} - uses: actions/github-script@v6 - with: - script: | - core.setFailed('Changed files coverage is less than ${{ matrix.changed }}%!') - - diff --git a/.github/workflows/release_draft.yml b/.github/workflows/release_draft.yml new file mode 100644 index 000000000..7421f25b1 --- /dev/null +++ b/.github/workflows/release_draft.yml @@ -0,0 +1,115 @@ +# +# Copyright 2021 ABSA Group Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: Release - create draft release +on: + workflow_dispatch: + inputs: + tagName: + description: 'Name of git tag to be created, and then draft release created. Syntax: "v[0-9]+.[0-9]+.[0-9]+".' + required: true + +jobs: + tag: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Validate format of received tag + uses: actions/github-script@v7 + with: + script: | + const newTag = core.getInput('tag-name'); + const regex = /^v[0-9]+\.[0-9]+\.[0-9]+$/; + + if (!regex.test(newTag)) { + core.setFailed('Tag does not match the required format "v[0-9]+.[0-9]+.[0-9]+"'); + return; + } + + // get all tags + const { data: refs } = await github.rest.git.listMatchingRefs({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: 'tags/' + }); + + const latestTag = refs.sort((a, b) => new Date(b.object.date) - new Date(a.object.date))[0].ref.replace('refs/tags/', ''); + const latestVersion = latestTag.replace('v', '').split('.').map(Number); + const newVersion = newTag.replace('v', '').split('.').map(Number); + + // check tag's correct version increase + const isValidVersion = (latestVersion[0] === newVersion[0] && latestVersion[1] === newVersion[1] && newVersion[2] === latestVersion[2] + 1) || + (latestVersion[0] === newVersion[0] && newVersion[1] === latestVersion[1] + 1 && newVersion[2] === 0) || + (newVersion[0] === latestVersion[0] + 1 && newVersion[1] === 0 && newVersion[2] === 0); + + if (!isValidVersion) { + core.setFailed('New tag is not one version higher than the latest tag'); + return; + } + tag-name: ${{ github.event.inputs.tagName }} + + - name: Create and push tag + uses: actions/github-script@v7 + with: + script: | + const tag = core.getInput('tag-name') + const ref = `refs/tags/${tag}`; + const sha = context.sha; // The SHA of the commit to tag + + await github.rest.git.createRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: ref, + sha: sha + }); + + console.log(`Tag created: ${tag}`); + github-token: ${{ secrets.GITHUB_TOKEN }} + tag-name: ${{ github.event.inputs.tagName }} + + release-draft: + needs: tag + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: refs/tags/${{ github.event.inputs.tagName }} + - name: Generate release notes + id: generate_release_notes + uses: AbsaOSS/generate-release-notes@v0.2.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + chapters: | + [ + {"title": "Breaking Changes 💥", "label": "breaking-change"}, + {"title": "New Features 🎉", "label": "enhancement"}, + {"title": "Bugfixes 🛠", "label": "bug"} + ] + warnings: true + - name: Create draft release + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + name: ${{ github.event.inputs.tagName }} + body: ${{ steps.generate_release_notes.outputs.releaseNotes }} + tag_name: ${{ github.event.inputs.tagName }} + draft: true + prerelease: false diff --git a/.github/workflows/release.yml b/.github/workflows/release_publish.yml similarity index 61% rename from .github/workflows/release.yml rename to .github/workflows/release_publish.yml index 2f418b92c..4d52f137f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release_publish.yml @@ -14,21 +14,32 @@ # limitations under the License. # -name: Release +name: Release - publish artifacts on: - workflow_dispatch: + release: + types: [released] jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2.3.4 + - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: olafurpg/setup-scala@v13 - - run: sbt ci-release + - uses: olafurpg/setup-scala@v14 + - name: Run sbt ci-release (produces war as well) + 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: Find WAR file + id: find_war + run: echo "WAR_PATH=$(find . -name '*.war' | head -n 1)" >> $GITHUB_ENV + + - name: Upload WAR file to GitHub Release + run: gh release upload ${{ github.event.release.tag_name }} ${{ env.WAR_PATH }} --repo ${{ github.repository }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 40c2ffbd0..51cf180ef 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Atum Service -Atum Service is a data completeness and accuracy application meant to be used for data being processed by Apache Spark. +Atum Service is a data completeness and accuracy application meant to be used for data processed by Apache Spark. One of the challenges regulated industries face is the requirement to track and prove that their systems preserve the accuracy and completeness of data. In an attempt to solve this data processing problem in Apache Spark applications, diff --git a/build.sbt b/build.sbt index 26375e327..46cc208d9 100644 --- a/build.sbt +++ b/build.sbt @@ -15,12 +15,11 @@ */ import Dependencies._ -import SparkVersionAxis._ import JacocoSetup._ import sbt.Keys.name - -ThisBuild / organization := "za.co.absa" +ThisBuild / organization := "za.co.absa.atum-service" +sonatypeProfileName := "za.co.absa" ThisBuild / scalaVersion := Versions.scala212 // default version @@ -28,28 +27,19 @@ ThisBuild / versionScheme := Some("early-semver") Global / onChangedBuildSource := ReloadOnSourceChanges +publish / skip := true lazy val printSparkScalaVersion = taskKey[Unit]("Print Spark and Scala versions for atum-service is being built for.") -ThisBuild / printSparkScalaVersion := { - val log = streams.value.log - val sparkVer = sparkVersionForScala(scalaVersion.value) - log.info(s"Building with Spark $sparkVer, Scala ${scalaVersion.value}") -} +lazy val printScalaVersion = taskKey[Unit]("Print Scala versions for atum-service is being built for.") lazy val commonSettings = Seq( libraryDependencies ++= commonDependencies, scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature", "-Xfatal-warnings"), javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-Xlint"), - Test / parallelExecution := false + Test / parallelExecution := false, + jacocoExcludes := jacocoProjectExcludes() ) -val mergeStrategy: Def.SettingsDefinition = assembly / assemblyMergeStrategy := { - case PathList("META-INF", _) => MergeStrategy.discard - case "application.conf" => MergeStrategy.concat - case "reference.conf" => MergeStrategy.concat - case _ => MergeStrategy.first -} - enablePlugins(FlywayPlugin) flywayUrl := FlywayConfiguration.flywayUrl flywayUser := FlywayConfiguration.flywayUser @@ -58,15 +48,6 @@ flywayLocations := FlywayConfiguration.flywayLocations flywaySqlMigrationSuffixes := FlywayConfiguration.flywaySqlMigrationSuffixes libraryDependencies ++= flywayDependencies -lazy val root = (projectMatrix in file(".")) - .aggregate(model, server, agent, database) - .settings( - name := "atum-service-root", - javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-Xlint"), - publish / skip := true, - mergeStrategy - ) - lazy val server = (projectMatrix in file("server")) .settings( commonSettings ++ Seq( @@ -74,18 +55,19 @@ lazy val server = (projectMatrix in file("server")) libraryDependencies ++= Dependencies.serverDependencies, scalacOptions ++= Seq("-Ymacro-annotations"), Compile / packageBin / publishArtifact := false, - (Compile / compile) := ((Compile / compile) dependsOn printSparkScalaVersion).value, + printScalaVersion := { + val log = streams.value.log + log.info(s"Building ${name.value} with Scala ${scalaVersion.value}") + }, + (Compile / compile) := ((Compile / compile) dependsOn printScalaVersion).value, packageBin := (Compile / assembly).value, artifactPath / (Compile / packageBin) := baseDirectory.value / s"target/${name.value}-${version.value}.war", webappWebInfClasses := true, inheritJarManifest := true, - testFrameworks += new TestFramework("zio.test.sbt.ZTestFramework") + publish / skip := true, + jacocoReportSettings := jacocoSettings(scalaVersion.value, "atum-server") ): _* ) - .settings( - jacocoReportSettings := jacocoSettings(scalaVersion.value, "atum-server"), - jacocoExcludes := jacocoProjectExcludes() - ) .enablePlugins(AssemblyPlugin) .enablePlugins(TomcatPlugin) .enablePlugins(AutomateHeaderPlugin) @@ -95,44 +77,48 @@ lazy val server = (projectMatrix in file("server")) lazy val agent = (projectMatrix in file("agent")) .settings( commonSettings ++ Seq( - name := "atum-agent", + name := "agent", libraryDependencies ++= Dependencies.agentDependencies( if (scalaVersion.value == Versions.scala211) Versions.spark2 else Versions.spark3, scalaVersion.value ), + printSparkScalaVersion := { + val log = streams.value.log + val sparkVer = sparkVersionForScala(scalaVersion.value) + log.info(s"Building ${name.value} with Spark $sparkVer, Scala ${scalaVersion.value}") + }, (Compile / compile) := ((Compile / compile) dependsOn printSparkScalaVersion).value, - mergeStrategy + jacocoReportSettings := jacocoSettings(scalaVersion.value, "atum-agent") ): _* ) - .settings( - jacocoReportSettings := jacocoSettings(scalaVersion.value, "atum-agent"), - jacocoExcludes := jacocoProjectExcludes() - ) - .sparkRow(SparkVersionAxis(Versions.spark2), scalaVersions = Seq(Versions.scala211, Versions.scala212)) - .sparkRow(SparkVersionAxis(Versions.spark3), scalaVersions = Seq(Versions.scala212, Versions.scala213)) .jvmPlatform(scalaVersions = Versions.clientSupportedScalaVersions) .dependsOn(model) lazy val model = (projectMatrix in file("model")) .settings( commonSettings ++ Seq( - name := "atum-model", + name := "model", libraryDependencies ++= Dependencies.modelDependencies(scalaVersion.value), - (Compile / compile) := ((Compile / compile) dependsOn printSparkScalaVersion).value, + printScalaVersion := { + val log = streams.value.log + log.info(s"Building ${name.value} with Scala ${scalaVersion.value}") + }, + (Compile / compile) := ((Compile / compile) dependsOn printScalaVersion).value, + jacocoReportSettings := jacocoSettings(scalaVersion.value, "atum-agent: model") ): _* ) - .settings( - jacocoReportSettings := jacocoSettings(scalaVersion.value, "atum-model: model"), - jacocoExcludes := jacocoProjectExcludes() - ) .jvmPlatform(scalaVersions = Versions.clientSupportedScalaVersions) lazy val database = (projectMatrix in file("database")) .settings( commonSettings ++ Seq( name := "atum-database", + printScalaVersion := { + val log = streams.value.log + log.info(s"Building ${name.value} with Scala ${scalaVersion.value}") + }, libraryDependencies ++= Dependencies.databaseDependencies, - (Compile / compile) := ((Compile / compile) dependsOn printSparkScalaVersion).value, + (Compile / compile) := ((Compile / compile) dependsOn printScalaVersion).value, test := {} ): _* ) diff --git a/database/src/test/resources/database.properties.template b/database/src/test/resources/database.properties similarity index 100% rename from database/src/test/resources/database.properties.template rename to database/src/test/resources/database.properties diff --git a/project/Dependencies.scala b/project/Dependencies.scala index a7e3ac5cd..385e6e1eb 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -13,7 +13,6 @@ * limitations under the License. */ - import sbt._ object Dependencies { @@ -68,33 +67,34 @@ object Dependencies { } - private def limitVersion(version: String, parts: Int): String = { - version.split("\\.", parts + 1).take(parts).mkString(".") + + private def truncateVersion(version: String, parts: Int): String = { + version.split("\\.").take(parts).mkString(".") } def getVersionUpToMinor(version: String): String = { - limitVersion(version, 2) + truncateVersion(version, 2) } def getVersionUpToMajor(version: String): String = { - limitVersion(version, 1) + truncateVersion(version, 1) } // this is just for the compile-depended printing task def sparkVersionForScala(scalaVersion: String): String = { - scalaVersion match { - case _ if scalaVersion.startsWith("2.11") => Versions.spark2 - case _ if scalaVersion.startsWith("2.12") => Versions.spark3 - case _ if scalaVersion.startsWith("2.13") => Versions.spark3 + truncateVersion(scalaVersion, 2) match { + case "2.11" => Versions.spark2 + case "2.12" => Versions.spark3 + case "2.13" => Versions.spark3 case _ => throw new IllegalArgumentException("Only Scala 2.11, 2.12, and 2.13 are currently supported.") } } def json4sVersionForScala(scalaVersion: String): String = { - scalaVersion match { - case _ if scalaVersion.startsWith("2.11") => Versions.json4s_spark2 - case _ if scalaVersion.startsWith("2.12") => Versions.json4s_spark3 - case _ if scalaVersion.startsWith("2.13") => Versions.json4s_spark3 + truncateVersion(scalaVersion, 2) match { + case "2.11" => Versions.json4s_spark2 + case "2.12" => Versions.json4s_spark3 + case "2.13" => Versions.json4s_spark3 case _ => throw new IllegalArgumentException("Only Scala 2.11, 2.12, and 2.13 are currently supported.") } } @@ -205,8 +205,6 @@ object Dependencies { } def modelDependencies(scalaVersion: String): Seq[ModuleID] = { - val json4sVersion = json4sVersionForScala(scalaVersion) - lazy val specs2core = "org.specs2" %% "specs2-core" % Versions.specs2 % Test lazy val typeSafeConfig = "com.typesafe" % "config" % Versions.typesafeConfig diff --git a/project/plugins.sbt b/project/plugins.sbt index 93b65ac1c..f5ca6af36 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -17,7 +17,7 @@ addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "4.2.4") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.7.0") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.0") -addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.9.1") +addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.9.1") addSbtPlugin("com.thoughtworks.sbt-api-mappings" % "sbt-api-mappings" % "3.0.2") diff --git a/publish.sbt b/publish.sbt index 406e14a6e..7399d85ce 100644 --- a/publish.sbt +++ b/publish.sbt @@ -64,7 +64,7 @@ ThisBuild / developers := List( ThisBuild / organizationName := "ABSA Group Limited" ThisBuild / organizationHomepage := Some(url("https://www.absa.africa")) -ThisBuild / description := "A tool for fixing Spark Structured Streaming metadata files" +ThisBuild / description := "Data completeness and accuracy application meant to be used for data processed by Apache Spark" ThisBuild / startYear := Some(2021) ThisBuild / licenses += "Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0.txt") ThisBuild / homepage := Some(url("https://github.com/AbsaOSS/atum-service"))