Skip to content

Commit

Permalink
Refactor Unit Test Suites (#1304)
Browse files Browse the repository at this point in the history
Refactor Unit Tests suites to have better visibility of the tests being run in different top level modules. Added bonus it cuts total UT/CodeCov runtime by ~10mins due to more parallelism.

---------

Co-authored-by: Sourav Maji <[email protected]>
  • Loading branch information
majisourav99 and Sourav Maji authored Nov 14, 2024
1 parent 020f099 commit 697ccf9
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 49 deletions.
54 changes: 54 additions & 0 deletions .github/workflows/UnitTests-core.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
on:
workflow_call:
inputs:
arg:
required: true
type: string
artifact_suffix:
required: true
type: string


jobs:
reusable_job:
name: "Unit Tests And Coverage"
strategy:
fail-fast: false
matrix:
jdk: [ 8, 11, 17 ]
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.jdk }}
distribution: 'temurin'
cache: 'gradle'
- shell: bash
run: |
git remote set-head origin --auto
git remote add upstream https://github.com/linkedin/venice
git fetch upstream
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Run Unit Tests with Code Coverage
run: ./gradlew -x :internal:venice-avro-compatibility-test:test ${{ inputs.arg }}
- name: Package Build Artifacts
if: success() || failure()
shell: bash
run: |
mkdir ${{ inputs.artifact_suffix }}-artifacts
find . -path "**/build/reports/*" -or -path "**/build/test-results/*" > artifacts.list
rsync -R --files-from=artifacts.list . ${{ inputs.artifact_suffix }}-artifacts
tar -zcvf ${{ inputs.artifact_suffix }}-jdk${{ matrix.jdk }}-logs.tar.gz ${{ inputs.artifact_suffix }}-artifacts
- name: Upload Build Artifacts
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.artifact_suffix }}-jdk${{ matrix.jdk }}
path: ${{ inputs.artifact_suffix }}-jdk${{ matrix.jdk }}-logs.tar.gz
retention-days: 30
95 changes: 46 additions & 49 deletions .github/workflows/VeniceCI-StaticAnalysisAndUnitTests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,69 +58,66 @@ jobs:
path: ${{ github.job }}-jdk${{ matrix.jdk }}-logs.tar.gz
retention-days: 30

UnitTestsAndCodeCoverage:
strategy:
fail-fast: false
matrix:
jdk: [8, 11, 17]
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.jdk }}
distribution: 'temurin'
cache: 'gradle'
- shell: bash
run: |
git remote set-head origin --auto
git remote add upstream https://github.com/linkedin/venice
git fetch upstream
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Run Unit Tests with Code Coverage
run: ./gradlew -x :internal:venice-avro-compatibility-test:test jacocoTestCoverageVerification diffCoverage --continue
- name: Package Build Artifacts
if: success() || failure()
shell: bash
run: |
mkdir ${{ github.job }}-artifacts
find . -path "**/build/reports/*" -or -path "**/build/test-results/*" > artifacts.list
rsync -R --files-from=artifacts.list . ${{ github.job }}-artifacts
tar -zcvf ${{ github.job }}-jdk${{ matrix.jdk }}-logs.tar.gz ${{ github.job }}-artifacts
- name: Upload Build Artifacts
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: ${{ github.job }}-jdk${{ matrix.jdk }}
path: ${{ github.job }}-jdk${{ matrix.jdk }}-logs.tar.gz
retention-days: 30
ClientsModule:
uses: ./.github/workflows/UnitTests-core.yml
with:
artifact_suffix: clients
arg: :clients:da-vinci-client:jacocoTestCoverageVerification :clients:da-vinci-client:diffCoverage
:clients:venice-admin-tool:jacocoTestCoverageVerification :clients:venice-admin-tool:diffCoverage
:clients:venice-producer:jacocoTestCoverageVerification :clients:venice-producer:diffCoverage
:clients:venice-pulsar:jacocoTestCoverageVerification :clients:venice-pulsar:diffCoverage
:clients:venice-client:jacocoTestCoverageVerification :clients:venice-client:diffCoverage
:clients:venice-push-job:jacocoTestCoverageVerification :clients:venice-push-job:diffCoverage
:clients:venice-samza:jacocoTestCoverageVerification :clients:venice-samza:diffCoverage
:clients:venice-thin-client:jacocoTestCoverageVerification :clients:venice-thin-client:diffCoverage --continue

InternalModule:
uses: ./.github/workflows/UnitTests-core.yml
with:
artifact_suffix: internal
arg: :internal:venice-client-common:jacocoTestCoverageVerification :internal:venice-client-common:diffCoverage
:internal:venice-common:jacocoTestCoverageVerification :internal:venice-common:diffCoverage
:internal:venice-jdk-compatibility-test:jacocoTestCoverageVerification :internal:venice-jdk-compatibility-test:diffCoverage
:internal:venice-test-common:jacocoTestCoverageVerification :internal:venice-test-common:diffCoverage --continue


ServicesModule:
uses: ./.github/workflows/UnitTests-core.yml
with:
artifact_suffix: services
arg: :services:venice-controller:jacocoTestCoverageVerification :services:venice-controller:diffCoverage
:services:venice-router:jacocoTestCoverageVerification :services:venice-router:diffCoverage
:services:venice-server:jacocoTestCoverageVerification :services:venice-server:diffCoverage --continue

StaticAnalysisAndUnitTestsCompletionCheck:
strategy:
fail-fast: false
runs-on: ubuntu-latest
needs: [ValidateGradleWrapper, StaticAnalysis, UnitTestsAndCodeCoverage]
needs: [ValidateGradleWrapper, StaticAnalysis, ClientsModule, InternalModule, ServicesModule]
timeout-minutes: 120
if: success() || failure() # Always run this job, regardless of previous job status
steps:
- name: Check previous job statuses
run: |
if [ "${{ needs.ValidateGradleWrapper.result }}" != "success" ]; then
echo "ValidateGradleWrapper failed."
exit 1
echo "ValidateGradleWrapper failed."
exit 1
fi
if [ "${{ needs.StaticAnalysis.result }}" != "success" ]; then
echo "StaticAnalysis failed."
exit 1
echo "StaticAnalysis failed."
exit 1
fi
if [ "${{ needs.ClientsModule.result }}" != "success" ]; then
echo "ClientsModule failed."
exit 1
fi
if [ "${{ needs.InternalModule.result }}" != "success" ]; then
echo "InternalModule failed."
exit 1
fi
if [ "${{ needs.UnitTestsAndCodeCoverage.result }}" != "success" ]; then
echo "UnitTestsAndCodeCoverage failed."
exit 1
if [ "${{ needs.ServicesModule.result }}" != "success" ]; then
echo "ServicesModule failed."
exit 1
fi
# If all previous jobs were successful, proceed
- name: Final Completion Check
Expand Down

0 comments on commit 697ccf9

Please sign in to comment.