mirror of https://github.com/citusdata/citus.git
126 lines
4.2 KiB
YAML
126 lines
4.2 KiB
YAML
name: Flaky test detector
|
|
run-name: Flaky test detector - ${{ inputs.flaky_test }} (${{ inputs.flaky_test_runs_per_job }}x${{ inputs.flaky_test_parallel_jobs }})
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
flaky_test:
|
|
required: true
|
|
type: string
|
|
description: Test to run
|
|
flaky_test_runs_per_job:
|
|
required: false
|
|
default: 8
|
|
type: number
|
|
description: Number of times to run the test
|
|
flaky_test_parallel_jobs:
|
|
required: false
|
|
default: 32
|
|
type: number
|
|
description: Number of parallel jobs to run
|
|
env:
|
|
pg_major: 15
|
|
image_suffix: -v1b94240
|
|
pg15_version: 15.4
|
|
build_image_name: citus/extbuilder
|
|
test_image_name: citus/failtester
|
|
jobs:
|
|
set_image_names:
|
|
name: Set CI image names
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
build_image: ${{ steps.set_build_image_name.outputs.image }}
|
|
test_image: ${{ steps.set_test_image_name.outputs.image }}
|
|
steps:
|
|
- id: set_build_image_name
|
|
run: |
|
|
echo "image=${{ env.build_image_name }}:${{ env.pg15_version }}${{ env.image_suffix }}" >> "$GITHUB_OUTPUT"
|
|
- id: set_test_image_name
|
|
run: |
|
|
echo "image=${{ env.test_image_name }}:${{ env.pg15_version }}${{ env.image_suffix }}" >> "$GITHUB_OUTPUT"
|
|
build:
|
|
name: Build Citus
|
|
runs-on: ubuntu-latest
|
|
needs: set_image_names
|
|
container:
|
|
image: ${{ needs.set_image_names.outputs.build_image }}
|
|
options: --user root
|
|
steps:
|
|
- uses: actions/checkout@v3.5.0
|
|
- name: Configure, Build, and Install
|
|
run: "./ci/build-citus.sh"
|
|
- uses: actions/upload-artifact@v3.1.1
|
|
with:
|
|
path: |-
|
|
./build-${{ env.pg_major }}/*
|
|
./install-${{ env.pg_major }}.tar
|
|
prepare_parallelization_matrix:
|
|
name: Prepare parallelization matrix
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
json: ${{ steps.parallelization.outputs.json }}
|
|
steps:
|
|
- uses: actions/checkout@v3.5.0
|
|
- uses: "./.github/actions/parallelization"
|
|
id: parallelization
|
|
with:
|
|
count: ${{ inputs.flaky_test_parallel_jobs }}
|
|
test_flakyness:
|
|
name: Test flakyness
|
|
if: ${{ inputs.flaky_test }}
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: ${{ needs.set_image_names.outputs.test_image }}
|
|
options: --user root
|
|
needs:
|
|
[set_image_names, build, prepare_parallelization_matrix]
|
|
env:
|
|
test: "${{ inputs.flaky_test }}"
|
|
runs: "${{ inputs.flaky_test_runs_per_job }}"
|
|
skip: false
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.prepare_parallelization_matrix.outputs.json) }}
|
|
steps:
|
|
- uses: actions/checkout@v3.5.0
|
|
- uses: actions/download-artifact@v3.0.1
|
|
with:
|
|
path: "."
|
|
- name: Detect regression tests need to be ran
|
|
id: detect-regression-tests
|
|
run: |-
|
|
testForDebugging="${{ env.test }}"
|
|
if [ -z "$testForDebugging" ]; then
|
|
detected_changes=$(git diff origin/main... --name-only --diff-filter=AM | (grep 'src/test/regress/sql/.*\.sql\|src/test/regress/spec/.*\.spec\|src/test/regress/citus_tests/test/test_.*\.py' || true))
|
|
tests=${detected_changes}
|
|
else
|
|
tests=$testForDebugging;
|
|
fi
|
|
if [ -z "$tests" ]; then
|
|
echo "No test found."
|
|
gh run cancel ${{ github.run_id }}
|
|
gh run watch ${{ github.run_id }}
|
|
else
|
|
echo "Detected tests " $tests
|
|
fi
|
|
echo "tests=$tests" >> "$GITHUB_OUTPUT"
|
|
- uses: "./.github/actions/install_extension"
|
|
with:
|
|
pg_major: "${{ env.pg_major }}"
|
|
- uses: "./.github/actions/configure"
|
|
- uses: "./.github/actions/enable_core"
|
|
- name: Run minimal tests
|
|
run: |-
|
|
tests_array=(${{ steps.detect-regression-tests.outputs.tests }})
|
|
for test in "${tests_array[@]}"
|
|
do
|
|
test_name=$(echo "$test" | sed -r "s/.+\/(.+)\..+/\1/")
|
|
gosu circleci src/test/regress/citus_tests/run_test.py $test_name --repeat ${{ env.runs }} --use-base-schedule --use-whole-schedule-line
|
|
done
|
|
shell: bash
|
|
- uses: "./.github/actions/save_logs_and_results"
|
|
if: always()
|
|
- uses: "./.github/actions/save_regressions"
|
|
if: always()
|
|
- uses: "./.github/actions/stack_trace"
|
|
if: always()
|