diff --git a/.github/codeowners b/.github/codeowners index c68c45f7..a5451247 100644 --- a/.github/codeowners +++ b/.github/codeowners @@ -1 +1 @@ -* @benedeki @dk1844 @jakipatryk @lsulak @Zejnilovic +* @benedeki @dk1844 @jakipatryk @lsulak @Zejnilovic @salamonpavel @miroslavpojer diff --git a/.github/workflows/assign_issue_to_project.yml b/.github/workflows/assign_issue_to_project.yml index 382b3b33..dc88101e 100644 --- a/.github/workflows/assign_issue_to_project.yml +++ b/.github/workflows/assign_issue_to_project.yml @@ -1,4 +1,4 @@ -name: Auto Assign Issue to Project +name: Assign Issue to Project on: issues: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4ef8a539..64673324 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,8 @@ on: types: [ assigned, opened, synchronize, reopened, labeled ] jobs: - build: + build-test-and-doc: + name: Build, Test and Doc runs-on: ubuntu-latest services: postgres: @@ -42,7 +43,6 @@ jobs: fail-fast: false matrix: scala: [2.12.17, 2.13.12] - name: Build and test steps: - name: Checkout code uses: actions/checkout@v2 @@ -52,7 +52,9 @@ jobs: java-version: "adopt@1.8" - name: Build and run unit tests run: sbt ++${{matrix.scala}} test + - name: Generate documentation + run: sbt ++${{matrix.scala}} doc - name: Prepare testing database run: sbt flywayMigrate - - name: Build and run integration tests - run: sbt ++${{matrix.scala}} testIT doc + - name: Run integration tests + run: sbt ++${{matrix.scala}} testIT diff --git a/.github/workflows/dependent_items.yml b/.github/workflows/dependent_items.yml index fd0349ce..1ab7f5c1 100644 --- a/.github/workflows/dependent_items.yml +++ b/.github/workflows/dependent_items.yml @@ -1,4 +1,4 @@ -name: Dependent Issues +name: Dependent Items on: issues: @@ -24,7 +24,8 @@ on: - cron: '0 0 * * *' jobs: - check: + dependent-items-check: + name: Dependent Items Check runs-on: ubuntu-latest steps: - uses: z0al/dependent-issues@v1.5.2 diff --git a/.github/workflows/jacoco.yml b/.github/workflows/jacoco.yml deleted file mode 100644 index 57517fb8..00000000 --- a/.github/workflows/jacoco.yml +++ /dev/null @@ -1,114 +0,0 @@ -# -# Copyright 2022 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: Build - -on: - push: - branches: [master ] - pull_request: - types: [ assigned, opened, synchronize, reopened, labeled ] - -jobs: - jacoco: - runs-on: ubuntu-latest - services: - postgres: - image: postgres:15 - env: - POSTGRES_PASSWORD: postgres - POSTGRES_DB: movies - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 5432:5432 - env: - SCALA_VERSION: "2.13.12" - SCALA_SHORT_VERSION: "2.13" - COVERAGE_OVERALL_EXPECTATION: 75.0 - COVERAGE_CHANGED_EXPECTATION: 80.0 - name: Build and run JaCoCo - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Setup Scala - uses: olafurpg/setup-scala@v14 - with: - java-version: "adopt@1.8" - - name: Prepare testing database - run: sbt flywayMigrate - - name: Build and run all tests for code coverage - run: sbt ++${{env.SCALA_VERSION}} jacoco # We will need JaCoCo report in second job - - name: Add coverage to PR - id: jacoco-core - uses: madrapps/jacoco-report@v1.6.1 - with: - paths: > - ${{ github.workspace }}/core/target/scala-${{ env.SCALA_SHORT_VERSION }}/jacoco/report/jacoco.xml - token: ${{ secrets.GITHUB_TOKEN }} - min-coverage-overall: ${{ env.COVERAGE_OVERALL_EXPECTATION }} - min-coverage-changed-files: ${{ env.COVERAGE_CHANGED_EXPECTATION }} - title: JaCoCo core code coverage report - scala ${{ env.SCALA_VERSION }} - update-comment: true - - name: Get the Coverage info - run: | - echo "Total core core coverage ${{ steps.jacoco-core.outputs.coverage-overall }}" - echo "Changed core Files coverage ${{ steps.jacoco-core.outputs.coverage-changed-files }}" - - name: Add coverage to PR - id: jacoco-slick - uses: madrapps/jacoco-report@v1.6.1 - with: - paths: > - ${{ github.workspace }}/slick/target/scala-${{ env.SCALA_SHORT_VERSION }}/jacoco/report/jacoco.xml - token: ${{ secrets.GITHUB_TOKEN }} - min-coverage-overall: ${{ env.COVERAGE_OVERALL_EXPECTATION }} - min-coverage-changed-files: ${{ env.COVERAGE_CHANGED_EXPECTATION }} - title: JaCoCo slick code coverage report - scala ${{ env.SCALA_VERSION }} - update-comment: true - - name: Get the Coverage info - run: | - echo "Total slick coverage ${{ steps.jacoco-slick.outputs.coverage-overall }}" - echo "Changed slick Files coverage ${{ steps.jacoco-slick.outputs.coverage-changed-files }}" - - name: Add coverage to PR - id: jacoco-doobie - uses: madrapps/jacoco-report@v1.6.1 - with: - paths: > - ${{ github.workspace }}/doobie/target/scala-${{ env.SCALA_SHORT_VERSION }}/jacoco/report/jacoco.xml - token: ${{ secrets.GITHUB_TOKEN }} - min-coverage-overall: ${{ env.COVERAGE_OVERALL_EXPECTATION }} - min-coverage-changed-files: ${{ env.COVERAGE_CHANGED_EXPECTATION }} - title: JaCoCo doobie code coverage report - scala ${{ env.SCALA_VERSION }} - update-comment: true - - name: Get the Coverage info - run: | - echo "Total doobie coverage ${{ steps.jacoco-doobie.outputs.coverage-overall }}" - echo "Changed doobie Files coverage ${{ steps.jacoco-doobie.outputs.coverage-changed-files }}" - - name: Fail PR if changed files coverage is less than ${{ env.COVERAGE_CHANGED_EXPECTATION }}% - if: ${{ steps.jacoco-core.outputs.coverage-changed-files < 80.0 || steps.jacoco-slick.outputs.coverage-changed-files < 80.0 || steps.jacoco-doobie.outputs.coverage-changed-files < 80.0 }} - uses: actions/github-script@v6 - with: - script: | - core.setFailed('Changed files coverage is less than ${{ env.COVERAGE_CHANGED_EXPECTATION }}%!') - - name: Fail PR if total files coverage is less than ${{ env.COVERAGE_OVERALL_EXPECTATION }}% - if: ${{ steps.jacoco-core.outputs.coverage-overall < 75.0 || steps.jacoco-slick.outputs.coverage-overall < 75.0 || steps.jacoco-doobie.outputs.coverage-overall < 75.0 }} - uses: actions/github-script@v6 - with: - script: | - core.setFailed('Total files coverage is less than ${{ env.COVERAGE_OVERALL_EXPECTATION }}%!') diff --git a/.github/workflows/jacoco_report.yml b/.github/workflows/jacoco_report.yml new file mode 100644 index 00000000..bc629100 --- /dev/null +++ b/.github/workflows/jacoco_report.yml @@ -0,0 +1,157 @@ +# +# Copyright 2022 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 + +on: + pull_request: + branches: [ master ] + types: [ opened, edited, synchronize, reopened ] + +env: + scalaLong: 2.13.11 + scalaShort: 2.13 + coverage-overall: 57.0 + coverage-changed-files: 80.0 + check-overall-coverages: true + +jobs: + build-test-and-measure: + name: Build, Test and Measure + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:15 + env: + POSTGRES_PASSWORD: postgres + POSTGRES_DB: movies + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Setup Scala + uses: olafurpg/setup-scala@v14 + with: + java-version: "adopt@1.8" + - name: Prepare testing database + run: sbt flywayMigrate + - name: Build and run tests + continue-on-error: true + id: jacocorun + run: sbt ++${{env.scalaLong}} jacoco + - name: Add coverage to PR (core) + if: steps.jacocorun.outcome == 'success' + id: jacoco-core + uses: madrapps/jacoco-report@v1.6.1 + with: + paths: ${{ github.workspace }}/core/target/scala-${{ env.scalaShort }}/jacoco/report/jacoco.xml + token: ${{ secrets.GITHUB_TOKEN }} + min-coverage-overall: ${{ env.coverage-overall }} + min-coverage-changed-files: ${{ env.coverage-changed-files }} + title: JaCoCo `model` module code coverage report - scala ${{ env.scalaLong }} + update-comment: true + - name: Add coverage to PR (doobie) + if: steps.jacocorun.outcome == 'success' + id: jacoco-doobie + uses: madrapps/jacoco-report@v1.6.1 + with: + paths: ${{ github.workspace }}/doobie/target/scala-${{ env.scalaShort }}/jacoco/report/jacoco.xml + token: ${{ secrets.GITHUB_TOKEN }} + min-coverage-overall: ${{ env.coverage-overall }} + min-coverage-changed-files: ${{ env.coverage-changed-files }} + title: JaCoCo `agent` module code coverage report - scala ${{ env.scalaLong }} + update-comment: true + - name: Add coverage to PR (slick) + if: steps.jacocorun.outcome == 'success' + id: jacoco-slick + uses: madrapps/jacoco-report@v1.6.1 + with: + paths: ${{ github.workspace }}/slick/target/scala-${{ env.scalaShort }}/jacoco/report/jacoco.xml + token: ${{ secrets.GITHUB_TOKEN }} + min-coverage-overall: ${{env.coverage-overall }} + min-coverage-changed-files: ${{ env.coverage-changed-files }} + title: JaCoCo `slick` module code coverage report - scala ${{ env.scalaLong }} + update-comment: true + - name: Get the Coverage info + if: steps.jacocorun.outcome == 'success' + run: | + echo "Total `core` module coverage ${{ steps.jacoco-core.outputs.coverage-overall }}" + echo "Changed Files coverage ${{ steps.jacoco-core.outputs.coverage-changed-files }}" + echo "Total `doobie` module coverage ${{ steps.jacoco-doobie.outputs.coverage-overall }}" + echo "Changed Files coverage ${{ steps.jacoco-doobie.outputs.coverage-changed-files }}" + echo "Total `slick` module coverage ${{ steps.jacoco-slick.outputs.coverage-overall }}" + echo "Changed Files coverage ${{ steps.jacoco-slick.outputs.coverage-changed-files }}" + - name: Fail PR if changed files coverage is less than ${{ env.coverage-changed-files }}% + if: steps.jacocorun.outcome == 'success' + uses: actions/github-script@v6 + with: + script: | + const coverageCheckFailed = + Number('${{ steps.jacoco-core.outputs.coverage-changed-files }}') < Number('${{ env.coverage-changed-files }}') || + Number('${{ steps.jacoco-doobie.outputs.coverage-changed-files }}') < Number('${{ env.coverage-changed-files }}') || + Number('${{ steps.jacoco-slick.outputs.coverage-changed-files }}') < Number('${{ env.coverage-changed-files }}'); + if (coverageCheckFailed) { + core.setFailed('Changed files coverage is less than ${{ env.coverage-changed-files }}%!'); + } + - name: Fail PR if overall files coverage is less than ${{ env.coverage-overall }}% + if: ${{ (steps.jacocorun.outcome == 'success') && (env.check-overall-coverages == 'true') }} + uses: actions/github-script@v6 + with: + script: | + const coverageCheckFailed = + Number('${{ steps.jacoco-core.outputs.coverage-overall }}') < Number('${{ env.coverage-overall }}') || + Number('${{ steps.jacoco-doobie.outputs.coverage-overall }}') < Number('${{ env.coverage-overall }}') || + Number('${{ steps.jacoco-slick.outputs.coverage-overall }}') < Number('${{ env.coverage-overall }}'); + if (coverageCheckFailed) { + core.setFailed('Overall coverage is less than ${{ env.coverage-overall }}%!'); + } + - 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/license_check.yml b/.github/workflows/license_check.yml index 9042b0e0..2ab787b0 100644 --- a/.github/workflows/license_check.yml +++ b/.github/workflows/license_check.yml @@ -24,7 +24,8 @@ on: types: [ assigned, opened, synchronize, reopened, labeled ] jobs: - license-test: + license-check: + name: License Check runs-on: ubuntu-latest steps: - name: Checkout code diff --git a/.github/workflows/test_filenames_check.yml b/.github/workflows/test_filenames_check.yml new file mode 100644 index 00000000..a9ff5afd --- /dev/null +++ b/.github/workflows/test_filenames_check.yml @@ -0,0 +1,41 @@ +# +# Copyright 2022 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: Test Filenames Check + +on: + pull_request: + branches: [ master ] + types: [ opened, synchronize, reopened ] + +jobs: + test_filenames_check: + name: Test Filenames Check + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Filename Inspector + id: scan-test-files + uses: AbsaOSS/filename-inspector@master + with: + name-patterns: '*UnitTests.*,*IntegrationTests.*' + paths: '**/src/test/scala/**' + report-format: 'console' + excludes: 'slick/src/test/scala/za/co/absa/fadb/slick/Actor.scala,slick/src/test/scala/za/co/absa/fadb/slick/ActorSlickConverter.scala,slick/src/test/scala/za/co/absa/fadb/slick/SlickTest.scala,doobie/src/test/scala/za/co/absa/fadb/doobie/DoobieTest.scala,slick/src/test/scala/za/co/absa/fadb/slick/OptionalActorSlickConverter.scala' + verbose-logging: 'false' + fail-on-violation: 'true' diff --git a/publish.sbt b/publish.sbt index 8c558323..6f11edb4 100644 --- a/publish.sbt +++ b/publish.sbt @@ -32,9 +32,34 @@ ThisBuild / developers := List( name = "David Benedeki", email = "david.benedeki@absa.africa", url = url("https://github.com/benedeki") + ), + Developer( + id = "lsulak", + name = "Ladislav Sulak", + email = "ladislav.sulak@absa.africa", + url = url("https://github.com/lsulak") + ), + Developer( + id = "salamonpavel", + name = "Pavel Salamon", + email = "pavel.salamon@absa.africa", + url = url("https://github.com/salamonpavel") + ), + Developer( + id = "miroslavpojer", + name = "Miroslav Pojer", + email = "miroslav.pojer@absa.africa", + url = url("https://github.com/miroslavpojer") + ), + Developer( + id = "Zejnilovic", + name = "Saša Zejnilović", + email = "sasa.zejnilovic@absa.africa", + url = url("https://github.com/Zejnilovic") ) ) + ThisBuild / homepage := Some(url("https://github.com/AbsaOSS/fa-DB")) ThisBuild / description := "DB data access via DB functions"