Skip to content

Unit & Integration Tests #25069

Unit & Integration Tests

Unit & Integration Tests #25069

Workflow file for this run

name: Unit & Integration Tests
env:
JAVA_OPTS: "-Xms512m -Xmx8048m -Xss512m -XX:ReservedCodeCacheSize=512m -server"
TERM: xterm-256color
GH_PACKAGE_REGISTRY_USER: ${{ secrets.GH_PACKAGE_REGISTRY_USER }}
GH_PACKAGE_REGISTRY_TOKEN: ${{ secrets.GH_PACKAGE_REGISTRY_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEVELOCITY_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
SONARCLOUD_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
COSMOS_DB_URL: ${{ secrets.COSMOS_DB_URL }}
COSMOS_DB_KEY: ${{ secrets.COSMOS_DB_KEY }}
AZURE_MAPS_API_KEY: ${{ secrets.AZURE_MAPS_API_KEY }}
AZURE_MAPS_CLIENT_ID: ${{ secrets.AZURE_MAPS_CLIENT_ID }}
AZURE_AD_CLIENT_ID: ${{ secrets.AZURE_AD_CLIENT_ID }}
AZURE_AD_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }}
AZURE_AD_CLIENT_SECRET_MAIL: ${{ secrets.AZURE_AD_CLIENT_SECRET_MAIL }}
AZURE_AD_USER_PASSWORD: ${{ secrets.AZURE_AD_USER_PASSWORD }}
AZURE_AD_TENANT: ${{ secrets.AZURE_AD_TENANT }}
AZURE_AD_DOMAIN: ${{ secrets.AZURE_AD_DOMAIN }}
PERMIT_IO_API_KEY: ${{ secrets.PERMIT_IO_API_KEY }}
JDK_CURRENT: 25
JDK_DISTRIBUTION: "corretto"
RETRY_ATTEMPTS: 2
RETRY_MINUTES: 45
CATEGORY_REGEX: ".*"
##########################################################################
on:
workflow_dispatch:
schedule:
- cron: '0 17 * * *'
- cron: '0 10 * * *' # This needs to match the condition below that disables PTS mode.
push:
branches:
- master
- '!**.**.**'
- '!heroku-*'
pull_request:
types: [ labeled ]
branches: [ master, pr-* ]
concurrency:
group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}"
cancel-in-progress: true
##########################################################################
jobs:
trigger-ci:
if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' || contains(github.event.pull_request.labels.*.name, 'CI')) }}
runs-on: ubuntu-latest
steps:
- name: Trigger CI
run: echo "CI Triggered"
##########################################################################
initialize:
needs: [ trigger-ci ]
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
persist-credentials: false
- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: ${{ env.JDK_CURRENT }}
distribution: ${{ env.JDK_DISTRIBUTION }}
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- name: Initialize
run: ls ./ci && find ./ci -type f -name "*.sh" -exec chmod +x "{}" \; && ./ci/init-build.sh
##########################################################################
testcategories:
needs: [ initialize ]
runs-on: ubuntu-latest
outputs:
categories: ${{ steps.get-categories.outputs.categories }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false
- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: ${{ env.JDK_CURRENT }}
distribution: ${{ env.JDK_DISTRIBUTION }}
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- id: print-categories
run: ./gradlew --build-cache --configure-on-demand --no-daemon -q testCategories
- id: get-categories
run: echo "categories=$(./gradlew --build-cache --configure-on-demand --no-daemon -q testCategories)" >> $GITHUB_OUTPUT
##########################################################################
tests:
needs: [ testcategories ]
continue-on-error: false
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest ]
category: ${{fromJSON(needs.testcategories.outputs.categories)}}
runs-on: ${{ matrix.os }}
name: ${{ matrix.category }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false
- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: ${{ env.JDK_CURRENT }}
distribution: ${{ env.JDK_DISTRIBUTION }}
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- name: Initialize
run: find ./ci -type f -name "*.sh" -exec chmod +x "{}" \; && ./ci/init-build.sh
shell: bash
- name: Run Tests
uses: nick-fields/retry@v4
with:
max_attempts: ${{ env.RETRY_ATTEMPTS }}
retry_on: error
retry_wait_seconds: 5
timeout_minutes: ${{ env.RETRY_MINUTES }}
shell: bash
command: |
chmod +x ./testcas.sh
if [[ "${{ github.event_name }}" == "schedule" ]] && [[ "${{ github.event.schedule == '0 10 * * *'}}" ]]; then
echo "Running tests without PTS mode"
./testcas.sh --no-watch --category ${{ matrix.category }} --events FAILED --no-pts --with-coverage
else
if [[ "${{ github.event_name }}" == "push" ]] || [[ "${{ github.event_name }}" == "schedule" ]]; then
ptsMode="REMAINING_TESTS";
else
ptsMode="RELEVANT_TESTS";
fi
echo "Running tests with PTS mode: $ptsMode"
./testcas.sh --no-watch --category ${{ matrix.category }} --events FAILED --pts $ptsMode --with-coverage
fi
- name: Check Coverage Report
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule'
run: |
xml_files=$(find build/reports -type f -name "*.xml")
if [ -z "$xml_files" ]; then
echo "No coverage XML files found"
else
echo ${xml_files}
fi
- name: Upload to SonarCloud
if: env.SONARCLOUD_TOKEN != null && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule')
continue-on-error: true
run: |
coverageReport="$PWD/build/reports/jacoco/jacocoRootReport/jacocoRootReport.xml"
echo "Uploading coverage report to SonarCloud from $coverageReport"
./gradlew sonar --build-cache --configure-on-demand \
--no-daemon -DskipAot=true -q --parallel \
-x javadoc -x test -DskipNestedConfigMetadataGen=true \
-PsonarOrganization="${{ github.repository_owner }}" \
-Dsonar.coverage.jacoco.xmlReportPaths="$coverageReport"
- name: "Upload to Codecov"
uses: "codecov/codecov-action@v6"
continue-on-error: true
if: env.CODECOV_TOKEN != null && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule')
with:
token: ${{ env.CODECOV_TOKEN }}
files: ./build/reports/jacoco/jacocoRootReport/jacocoRootReport.xml
flags: ${{ matrix.category }}
name: ${{ matrix.category }}
verbose: true
fail_ci_if_error: false
- name: Upload to Coveralls
uses: coverallsapp/github-action@v2
continue-on-error: true
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
file: ./build/reports/jacoco/jacocoRootReport/jacocoRootReport.xml
format: jacoco
parallel: true
build-number: ${{ github.run_id }}-${{ github.run_attempt }}
debug: true
- name: Upload Coverage Report
uses: "actions/upload-artifact@v7"
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule'
with:
name: "cas-tests-${{ matrix.category }}.coverage"
path: "./build/reports/jacoco/jacocoRootReport/jacocoRootReport.xml"
##########################################################################
coverage:
runs-on: ubuntu-latest
needs: [ tests ]
if: (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule')
outputs:
coverage-files: ${{ steps.coverage-files.outputs.coverage-files }}
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
persist-credentials: false
- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: ${{ env.JDK_CURRENT }}
distribution: ${{ env.JDK_DISTRIBUTION }}
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- name: Collect Coverage Files
id: coverage-files
run: |
find $PWD -type f -name 'jacocoRootReport.xml'
export files=''
for file in $(find $PWD -type f -name 'jacocoRootReport.xml'); do export files="$file,${files}"; done
export files="${files%?}"
echo $files
echo "COVERAGE_REPORTS=${files}" >> $GITHUB_ENV
- name: Upload Coverage to Codacy
continue-on-error: true
env:
CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
CODACY_REPORTER_OPTIONS: --http-timeout 60000 --num-retries 8 --sleep-time 15000
run: |
IFS=',' read -r -a reports <<< "${{ env.COVERAGE_REPORTS }}"
for report in "${reports[@]}"; do
echo "Uploading coverage report: $report"
bash <(curl -Ls https://coverage.codacy.com/get.sh) report -r "$report" --partial
done
bash <(curl -Ls https://coverage.codacy.com/get.sh) final
- name: Finish Coveralls
uses: coverallsapp/github-action@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel-finished: true
build-number: ${{ github.run_id }}-${{ github.run_attempt }}
debug: true