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: 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" shell: bash - id: set_test_image_name run: | echo "image=${{ env.test_image_name }}:${{ env.pg15_version }}${{ env.image_suffix }}" >> "$GITHUB_OUTPUT" shell: bash 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: | echo "PG_MAJOR=${PG_MAJOR}" >> $GITHUB_ENV ./ci/build-citus.sh shell: bash - uses: actions/upload-artifact@v3.1.1 with: name: build-${{ env.PG_MAJOR }} 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 - name: Expose $PG_MAJOR to Github Env run: echo "PG_MAJOR=${PG_MAJOR}" >> $GITHUB_ENV shell: bash - uses: actions/download-artifact@v3.0.1 with: name: build-${{ env.PG_MAJOR }} - 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" - 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() with: folder: ${{ matrix.id }} - uses: "./.github/actions/save_regressions" if: always() with: folder: ${{ matrix.id }} - uses: "./.github/actions/stack_trace" if: always()