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