# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You 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: "Unit Tests shared workflow" on: workflow_call: inputs: jdk: required: true type: string description: 'JDK version used to test Druid' sql_compatibility: required: false type: boolean default: true description: 'For SQL compatibility' module: required: true type: string description: 'Name of group of tests that are running' maven_projects: required: true type: string description: 'Name of group of tests running (to display)' outputs: coverage_failure: description: 'Indicates if test failed by coverage issues' value: ${{ jobs.unit-tests.outputs.coverage_failure }} env: MVN: mvn -B MAVEN_SKIP: -P skip-static-checks -Dweb.console.skip=true -Dmaven.javadoc.skip=true MAVEN_SKIP_TESTS: -P skip-tests MAVEN_OPTS: -Xmx3500m FORCE_COLOR: 2 SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5 jobs: unit-tests: name: ${{ inputs.module }} modules test runs-on: ubuntu-latest outputs: coverage_failure: ${{ steps.set_outputs.outputs.coverage_failure }} steps: - name: checkout branch uses: actions/checkout@v4 with: fetch-depth: 0 # skip the "cache: maven" step from setup-java. We explicitly use a # different cache key since we cannot reuse it across commits. - uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: ${{ inputs.jdk }} # the build step produces SNAPSHOT artifacts into the local maven repository, # we include github.sha in the cache key to make it specific to that build/jdk - name: Restore Maven repository id: maven-restore uses: actions/cache/restore@v4 with: path: ~/.m2/repository key: maven-${{ runner.os }}-${{ inputs.jdk }}-${{ github.sha }} - name: setup node uses: actions/setup-node@v3 with: node-version: 16.17.0 - name: setup variables run: | export base_ref=${{ github.base_ref }} echo "GITHUB_BASE_REF=${base_ref}" >> $GITHUB_ENV # If sql_compatibilty is true, we want to set default_value_for_null # which enables compatibility mode if (${{ inputs.sql_compatibility }} == true); then echo "DRUID_USE_DEFAULT_VALUE_FOR_NULL=false" >> $GITHUB_ENV else echo "DRUID_USE_DEFAULT_VALUE_FOR_NULL=true" >> $GITHUB_ENV fi - name: test profiling run: | ./.github/scripts/setup_test_profiling_env.sh ${{ inputs.jdk }} ${{ github.run_id }} \ ${{ github.run_number }} ${{ github.run_attempt }} ${{ inputs.module }} >> $GITHUB_ENV - name: fetch base branch for test coverage if: ${{ github.base_ref != '' }} run: | # Add merge target branch to determine diff. # This is not needed for build triggered by tags, since there will be no code diff. git remote set-branches --add origin ${GITHUB_BASE_REF} && git fetch - name: setup diff-test-coverage run: npm install @connectis/diff-test-coverage@1.5.3 - name: Maven build if: steps.maven-restore.outputs.cache-hit != 'true' run: ./it.sh ci - name: test & coverage id: test_and_coverage env: MAVEN_PROJECTS: ${{ inputs.maven_projects }} run: ./.github/scripts/unit_tests_script.sh - name: Check for dumps on failure if: ${{ failure() }} id: check_for_dumps run: | if test -n "$(find "${GITHUB_WORKSPACE}" \( -name '*.hprof' -or -name 'hs_err_pid*' -or -name 'replay_pid*' -or -regex '.*/core\.[0-9]*' \))" then echo "found_dumps=true" >> "$GITHUB_ENV" else echo "found_dumps=false" >> "$GITHUB_ENV" fi - name: Collect dumps if they exist on failure if: ${{ failure() && env.found_dumps == 'true' }} run: | find "${GITHUB_WORKSPACE}" \ \( -name '*.hprof' -or -name 'hs_err_pid*' -or -name 'replay_pid*' -or -regex '.*/core\.[0-9]*' \) \ -exec tar -cvzf ${RUNNER_TEMP}/failure-dumps.tar.gz {} + - name: Upload dumps to GitHub if they exist on failure if: ${{ failure() && env.found_dumps == 'true' }} uses: actions/upload-artifact@master with: name: Failure-${{ inputs.group }} failure dumps (Compile=jdk${{ inputs.build_jdk }}, Run=jdk${{ inputs.runtime_jdk }}) path: ${{ runner.temp }}/failure-dumps.tar.gz - name: set outputs on failure id: set_outputs if: ${{ failure() }} run: echo "coverage_failure=${{ env.coverage_failure }}" >> "$GITHUB_OUTPUT"