druid/.github/workflows/reusable-unit-tests.yml

146 lines
5.3 KiB
YAML

# 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 .hprof files on failure
if: ${{ failure() }}
id: check_for_heap_dump
run: |
if ls ${GITHUB_WORKSPACE}/target/*.hprof 1> /dev/null 2>&1; then
echo "found_hprof=true" >> "$GITHUB_ENV"
else
echo "found_hprof=false" >> "$GITHUB_ENV"
fi
- name: Collect tarball hprof dumps if they exist on failure
if: ${{ failure() && env.found_hprof == 'true' }}
run: |
tar cvzf ${RUNNER_TEMP}/hprof-dumps.tgz ${GITHUB_WORKSPACE}/target/*.hprof
- name: Upload hprof dumps to GitHub if they exist on failure
if: ${{ failure() && env.found_hprof == 'true' }}
uses: actions/upload-artifact@master
with:
name: Hprof-${{ inputs.group }} hprof dumps (Compile=jdk${{ inputs.build_jdk }}, Run=jdk${{ inputs.runtime_jdk }})
path: ${{ runner.temp }}/hprof-dumps.tgz
- name: set outputs on failure
id: set_outputs
if: ${{ failure() }}
run: echo "coverage_failure=${{ env.coverage_failure }}" >> "$GITHUB_OUTPUT"