diff --git a/.github/workflows/sqlancer-test-pipelines.yml b/.github/workflows/sqlancer-test-pipelines.yml new file mode 100644 index 000000000..b42795120 --- /dev/null +++ b/.github/workflows/sqlancer-test-pipelines.yml @@ -0,0 +1,116 @@ +name: Run sqlancer tests + +on: + workflow_dispatch: + inputs: + citus_release: + default: main + description: 'Branch, tag or SHA to run tests against' + required: true + +jobs: + + run-sqlancer-test-on-citus: + runs-on: ubuntu-latest + container: + image: 'citus/exttester:15.4-dev-c5dad6b' + + steps: + - name: Checkout citus release + uses: actions/checkout@v3 + with: + ref: ${{ inputs.citus_release }} + repository: citusdata/citus + + - name: Configure + run: | + echo "Current Shell:$0" + echo "GCC Version: $(gcc --version)" + ./configure 2>&1 | tee output.log + + - name: Make install-all + run: | + make install-all -sj$(cat /proc/cpuinfo | grep "core id" | wc -l) 2>&1 | tee -a output.log + + + - name: Setup Maven + uses: s4u/setup-maven-action@v1.6.0 + with: + java-version: 11 + + - name: Checkout Sqlancer + uses: actions/checkout@v3 + with: + ref: gokhangulbiz/citus_v12_support + repository: gokhangulbiz/sqlancer + + - name: Build SQLancer + run: mvn -B package -DskipTests=true + + - name: Set up Citus cluster + run: | + mkdir -p citus/coordinator citus/worker1 citus/worker2 + chown -R circleci:circleci citus + gosu circleci initdb -D citus/coordinator + gosu circleci initdb -D citus/worker1 + gosu circleci initdb -D citus/worker2 + gosu circleci echo "shared_preload_libraries = 'citus'" >> citus/coordinator/postgresql.conf + gosu circleci echo "shared_preload_libraries = 'citus'" >> citus/worker1/postgresql.conf + gosu circleci echo "shared_preload_libraries = 'citus'" >> citus/worker2/postgresql.conf + gosu circleci pg_ctl -D citus/coordinator -o "-p 9700" -l citus/coordinator_logfile start + gosu circleci pg_ctl -D citus/worker1 -o "-p 9701" -l citus/worker1_logfile start + gosu circleci ls citus/worker1 + gosu circleci pg_ctl -D citus/worker2 -o "-p 9702" -l citus/worker2_logfile start + gosu circleci psql -c "CREATE ROLE sqlancer SUPERUSER LOGIN CREATEDB PASSWORD 'sqlancer';" -p 9700 -d postgres + gosu circleci createdb test -p 9700 + gosu circleci psql -c "CREATE ROLE sqlancer SUPERUSER LOGIN CREATEDB PASSWORD 'sqlancer';" -p 9701 -d postgres + gosu circleci createdb test -p 9701 + gosu circleci psql -c "CREATE ROLE sqlancer SUPERUSER LOGIN CREATEDB PASSWORD 'sqlancer';" -p 9702 -d postgres + gosu circleci createdb test -p 9702 + gosu circleci psql -c "CREATE EXTENSION citus;" -p 9700 -d test + gosu circleci psql -c "CREATE EXTENSION citus;" -p 9701 -d test + gosu circleci psql -c "CREATE EXTENSION citus;" -p 9702 -d test + gosu circleci psql -c "SELECT * from citus_add_node('localhost', 9701);" -p 9700 -d test + gosu circleci psql -c "SELECT * from citus_add_node('localhost', 9702);" -p 9700 -d test + - name: Run Tests + run: CITUS_AVAILABLE=true mvn -Dtest=TestCitus test + + - name: Publish Logs + if: ${{ always() }} + uses: actions/upload-artifact@v3 + with: + name: logs + path: | + logs + citus/coordinator_logfile + citus/worker1_logfile + citus/worker2_logfile + + - name: Publish Summary + if: ${{ always() }} + run: | + declare -A errors_table + + while read line + do + IFS=':' + read -a delimitedArr <<< "$line" + + file=${delimitedArr[0]} + category=${delimitedArr[2]} + error=${delimitedArr[3]} + + if [[ -z "${errors_table[$error]}" ]] + then + errors_table["$error"]="$file " + else + errors_table["$error"]=" ${errors_table[$error]}, $file " + fi + + done < <(grep -noR "ERROR:.*" logs/citus) + + for key in "${!errors_table[@]}"; do + echo "### $key" >> $GITHUB_STEP_SUMMARY + echo "in ${errors_table[$key]}" >> $GITHUB_STEP_SUMMARY + done + shell: bash