citus/.github/workflows/flaky_test_debugging.yml

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()