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