From 97bfa8f8a689ac9a7e4b59e6f98e49d2b745ee61 Mon Sep 17 00:00:00 2001 From: Artur Trzop Date: Tue, 5 Aug 2025 16:35:28 +0200 Subject: [PATCH 1/5] add with Spot Instances tab --- docusaurus/docs/ruby/parallel_tests.md | 59 +++++++++++++++++++------- 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/docusaurus/docs/ruby/parallel_tests.md b/docusaurus/docs/ruby/parallel_tests.md index 419d34ec..09bd784a 100644 --- a/docusaurus/docs/ruby/parallel_tests.md +++ b/docusaurus/docs/ruby/parallel_tests.md @@ -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,52 @@ 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 + + + ```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 )) + # 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 + 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) )) + # 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 + # 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 -``` + 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 + ``` + + Running the above on CI should result in: From f608deeaf92bea45c9a3baa091dcd569d9671f19 Mon Sep 17 00:00:00 2001 From: Artur Trzop Date: Tue, 5 Aug 2025 16:37:55 +0200 Subject: [PATCH 2/5] rename file md to mdx --- docusaurus/docs/ruby/{parallel_tests.md => parallel_tests.mdx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docusaurus/docs/ruby/{parallel_tests.md => parallel_tests.mdx} (100%) diff --git a/docusaurus/docs/ruby/parallel_tests.md b/docusaurus/docs/ruby/parallel_tests.mdx similarity index 100% rename from docusaurus/docs/ruby/parallel_tests.md rename to docusaurus/docs/ruby/parallel_tests.mdx From fa3eb522c76df8720e8419c659df42428dc85620 Mon Sep 17 00:00:00 2001 From: Artur Trzop Date: Tue, 5 Aug 2025 16:55:14 +0200 Subject: [PATCH 3/5] update(parallel_tests): add an example of handling signals for Spot Instances --- docusaurus/docs/ruby/parallel_tests.mdx | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/docusaurus/docs/ruby/parallel_tests.mdx b/docusaurus/docs/ruby/parallel_tests.mdx index 09bd784a..88f23a56 100644 --- a/docusaurus/docs/ruby/parallel_tests.mdx +++ b/docusaurus/docs/ruby/parallel_tests.mdx @@ -81,9 +81,24 @@ Create `bin/parallel_tests` and make it executable `chmod u+x`: ``` + 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 )) @@ -99,7 +114,9 @@ Create `bin/parallel_tests` and make it executable `chmod u+x`: # 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 + bundle exec rake knapsack_pro:queue:rspec & + knapsack_pro_pid=$! + wait $knapsack_pro_pid ``` From 8f8eeda1607c5cb07bcc8f20c5ba9a3811b8d5b1 Mon Sep 17 00:00:00 2001 From: Artur Trzop Date: Tue, 5 Aug 2025 17:00:23 +0200 Subject: [PATCH 4/5] fix broken links --- docusaurus/docs/ruby/rspec.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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).
From 5cc9f370186b18880038ae4b44471038e04b744a Mon Sep 17 00:00:00 2001 From: Artur Trzop Date: Tue, 5 Aug 2025 17:01:44 +0200 Subject: [PATCH 5/5] Update parallel_tests.mdx --- docusaurus/docs/ruby/parallel_tests.mdx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docusaurus/docs/ruby/parallel_tests.mdx b/docusaurus/docs/ruby/parallel_tests.mdx index 88f23a56..5aa21b82 100644 --- a/docusaurus/docs/ruby/parallel_tests.mdx +++ b/docusaurus/docs/ruby/parallel_tests.mdx @@ -87,13 +87,13 @@ Create `bin/parallel_tests` and make it executable `chmod u+x`: #!/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 + 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