diff --git a/docusaurus/docs/ruby/parallel_tests.md b/docusaurus/docs/ruby/parallel_tests.mdx similarity index 62% rename from docusaurus/docs/ruby/parallel_tests.md rename to docusaurus/docs/ruby/parallel_tests.mdx index 419d34ec..5aa21b82 100644 --- a/docusaurus/docs/ruby/parallel_tests.md +++ b/docusaurus/docs/ruby/parallel_tests.mdx @@ -3,6 +3,9 @@ pagination_next: null pagination_prev: null --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + # Using Knapsack Pro with `parallel_tests` :::caution @@ -54,26 +57,69 @@ bundle exec parallel_test -n $PARALLEL_TESTS_CONCURRENCY -e './bin/parallel_test Create `bin/parallel_tests` and make it executable `chmod u+x`: -```bash -#!/bin/bash - -# The Knapsack Pro API sees 3 * 2 = 6 parallel nodes -export KNAPSACK_PRO_CI_NODE_TOTAL=$(( $PARALLEL_TESTS_CONCURRENCY * $KNAPSACK_PRO_CI_NODE_TOTAL )) - -if [ "$TEST_ENV_NUMBER" == "" ]; then - export PARALLEL_TESTS_CONCURRENCY_INDEX=0 -else - export PARALLEL_TESTS_CONCURRENCY_INDEX=$(( $TEST_ENV_NUMBER - 1 )) -fi - -# The current index for the Knapsack Pro API is {0,1,2} + (3 * {0,1}) in other words either {0,1,2,3,4,5} -KNAPSACK_PRO_CI_NODE_INDEX=$(( $PARALLEL_TESTS_CONCURRENCY_INDEX + ($PARALLEL_TESTS_CONCURRENCY * $KNAPSACK_PRO_CI_NODE_INDEX) )) - -# Debug log -echo KNAPSACK_PRO_CI_NODE_TOTAL=$KNAPSACK_PRO_CI_NODE_TOTAL KNAPSACK_PRO_CI_NODE_INDEX=$KNAPSACK_PRO_CI_NODE_INDEX PARALLEL_TESTS_CONCURRENCY=$PARALLEL_TESTS_CONCURRENCY - -bundle exec rake knapsack_pro:queue:rspec -``` + + + ```bash + #!/bin/bash + + # The Knapsack Pro API sees 3 * 2 = 6 parallel nodes + export KNAPSACK_PRO_CI_NODE_TOTAL=$(( $PARALLEL_TESTS_CONCURRENCY * $KNAPSACK_PRO_CI_NODE_TOTAL )) + + if [ "$TEST_ENV_NUMBER" == "" ]; then + export PARALLEL_TESTS_CONCURRENCY_INDEX=0 + else + export PARALLEL_TESTS_CONCURRENCY_INDEX=$(( $TEST_ENV_NUMBER - 1 )) + fi + + # The current index for the Knapsack Pro API is {0,1,2} + (3 * {0,1}) in other words either {0,1,2,3,4,5} + KNAPSACK_PRO_CI_NODE_INDEX=$(( $PARALLEL_TESTS_CONCURRENCY_INDEX + ($PARALLEL_TESTS_CONCURRENCY * $KNAPSACK_PRO_CI_NODE_INDEX) )) + + # Debug log + echo KNAPSACK_PRO_CI_NODE_TOTAL=$KNAPSACK_PRO_CI_NODE_TOTAL KNAPSACK_PRO_CI_NODE_INDEX=$KNAPSACK_PRO_CI_NODE_INDEX PARALLEL_TESTS_CONCURRENCY=$PARALLEL_TESTS_CONCURRENCY + + bundle exec rake knapsack_pro:queue:rspec + ``` + + + If you use AWS Spot Instances as CI nodes, ensure that the termination signal is properly propagated down the script hierarchy. + + ```bash + #!/bin/bash + + handle_signal() { + local signal=$1 + if [[ -n $knapsack_pro_pid ]]; then + echo "KNAPSACK_PRO_CI_NODE_INDEX=$KNAPSACK_PRO_CI_NODE_INDEX Received signal $signal in bin/parallel_tests, terminating the Knapsack Pro process with TERM" + kill -TERM $knapsack_pro_pid + echo "KNAPSACK_PRO_CI_NODE_INDEX=$KNAPSACK_PRO_CI_NODE_INDEX Waiting for the Knapsack Pro process with PID $knapsack_pro_pid to terminate" + wait $knapsack_pro_pid + fi + } + + trap 'handle_signal TERM' TERM + trap 'handle_signal INT' INT + + # The Knapsack Pro API sees 3 * 2 = 6 parallel nodes + export KNAPSACK_PRO_CI_NODE_TOTAL=$(( $PARALLEL_TESTS_CONCURRENCY * $KNAPSACK_PRO_CI_NODE_TOTAL )) + + if [ "$TEST_ENV_NUMBER" == "" ]; then + export PARALLEL_TESTS_CONCURRENCY_INDEX=0 + else + export PARALLEL_TESTS_CONCURRENCY_INDEX=$(( $TEST_ENV_NUMBER - 1 )) + fi + + # The current index for the Knapsack Pro API is {0,1,2} + (3 * {0,1}) in other words either {0,1,2,3,4,5} + KNAPSACK_PRO_CI_NODE_INDEX=$(( $PARALLEL_TESTS_CONCURRENCY_INDEX + ($PARALLEL_TESTS_CONCURRENCY * $KNAPSACK_PRO_CI_NODE_INDEX) )) + + # Debug log + echo KNAPSACK_PRO_CI_NODE_TOTAL=$KNAPSACK_PRO_CI_NODE_TOTAL KNAPSACK_PRO_CI_NODE_INDEX=$KNAPSACK_PRO_CI_NODE_INDEX PARALLEL_TESTS_CONCURRENCY=$PARALLEL_TESTS_CONCURRENCY + + bundle exec rake knapsack_pro:queue:rspec & + knapsack_pro_pid=$! + wait $knapsack_pro_pid + ``` + + Running the above on CI should result in: diff --git a/docusaurus/docs/ruby/rspec.mdx b/docusaurus/docs/ruby/rspec.mdx index 4d4c4c16..fda4be9f 100644 --- a/docusaurus/docs/ruby/rspec.mdx +++ b/docusaurus/docs/ruby/rspec.mdx @@ -79,7 +79,7 @@ You need to install the [`rspec_junit_formatter`](https://github.com/sj26/rspec_ bundle exec rake "knapsack_pro:queue:rspec[--format documentation --format RspecJunitFormatter --out tmp/rspec_$MY_CI_NODE_INDEX.xml]" ``` - This also applies if you are running parallel test processes on each CI node (see how to [integrate Knapsack Pro with `parallel_tests` here](parallel_tests.md)). + This also applies if you are running parallel test processes on each CI node (see how to [integrate Knapsack Pro with `parallel_tests` here](parallel_tests.mdx)).
For legacy versions of `knapsack_pro` older than 7.0, please click here. @@ -111,7 +111,7 @@ You need to install the [`rspec_junit_formatter`](https://github.com/sj26/rspec_ FINAL_REPORT = "tmp/final_rspec_#{ENV['KNAPSACK_PRO_CI_NODE_INDEX']}.xml" ``` - This applies also if you are running parallel test processes on each CI node (see our page on to integrate Knapsack Pro with [`parallel_tests`](parallel_tests.md) for an example). + This applies also if you are running parallel test processes on each CI node (see our page on to integrate Knapsack Pro with [`parallel_tests`](parallel_tests.mdx) for an example).
@@ -136,7 +136,7 @@ You need to install the [`rspec_junit_formatter`](https://github.com/sj26/rspec_ bundle exec rake "knapsack_pro:queue:rspec[--format documentation --format json --out tmp/rspec_$MY_CI_NODE_INDEX.json]" ``` - This also applies if you are running parallel test processes on each CI node (see how to [integrate Knapsack Pro with `parallel_tests` here](parallel_tests.md)). + This also applies if you are running parallel test processes on each CI node (see how to [integrate Knapsack Pro with `parallel_tests` here](parallel_tests.mdx)).
For legacy versions of `knapsack_pro` older than 7.0, please click here. @@ -168,7 +168,7 @@ You need to install the [`rspec_junit_formatter`](https://github.com/sj26/rspec_ FINAL_REPORT = "tmp/final_rspec_#{ENV['KNAPSACK_PRO_CI_NODE_INDEX']}.json" ``` - This applies also if you are running parallel test processes on each CI node (see our page on to integrate Knapsack Pro with [`parallel_tests`](parallel_tests.md) for an example). + This applies also if you are running parallel test processes on each CI node (see our page on to integrate Knapsack Pro with [`parallel_tests`](parallel_tests.mdx) for an example).