You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iggy.apache.org by hg...@apache.org on 2025/11/18 11:19:35 UTC
(iggy) 01/12: chore(example): test python examples in CI
This is an automated email from the ASF dual-hosted git repository.
hgruszecki pushed a commit to branch 1889-test-examples
in repository https://gitbox.apache.org/repos/asf/iggy.git
commit 8ce703cdef0a35a19df496d515cc397bf8f62665
Author: Huan-Cheng Chang <ch...@gmail.com>
AuthorDate: Sun Sep 14 22:20:00 2025 +0100
chore(example): test python examples in CI
---
.../actions/python-maturin/pre-merge/action.yml | 13 +++++
examples/python/basic/consumer.py | 1 +
examples/python/basic/producer.py | 1 +
foreign/python/scripts/test_examples.sh | 60 ++++++++++++++++++++++
4 files changed, 75 insertions(+)
diff --git a/.github/actions/python-maturin/pre-merge/action.yml b/.github/actions/python-maturin/pre-merge/action.yml
index 878845cc0..75eda5161 100644
--- a/.github/actions/python-maturin/pre-merge/action.yml
+++ b/.github/actions/python-maturin/pre-merge/action.yml
@@ -137,6 +137,19 @@ runs:
exit ${TEST_EXIT_CODE:-0}
shell: bash
+ - name: Run Python example tests
+ if: inputs.task == 'test' && steps.iggy.outcome == 'success'
+ run: |
+ echo "Running example tests with Iggy server at ${{ steps.iggy.outputs.address }}..."
+
+ IGGY_SERVER_HOST=127.0.0.1 \
+ IGGY_SERVER_TCP_PORT=8090 \
+ ./foreign/python/scripts/test_examples.sh || TEST_EXIT_CODE=$?
+
+ # Exit with test result
+ exit ${TEST_EXIT_CODE:-0}
+ shell: bash
+
- name: Run Python unit tests only (fallback)
if: inputs.task == 'test' && steps.iggy.outcome != 'success'
run: |
diff --git a/examples/python/basic/consumer.py b/examples/python/basic/consumer.py
index 8523bf8cf..8a4829feb 100644
--- a/examples/python/basic/consumer.py
+++ b/examples/python/basic/consumer.py
@@ -40,6 +40,7 @@ def parse_args() -> argparse.Namespace:
"Connection string for Iggy client, e.g. 'iggy+tcp://iggy:iggy@127.0.0.1:8090'"
),
default="iggy+tcp://iggy:iggy@127.0.0.1:8090",
+ nargs="?",
type=str,
)
return parser.parse_args()
diff --git a/examples/python/basic/producer.py b/examples/python/basic/producer.py
index b3548f70d..624074467 100644
--- a/examples/python/basic/producer.py
+++ b/examples/python/basic/producer.py
@@ -41,6 +41,7 @@ def parse_args() -> argparse.Namespace:
"Connection string for Iggy client, e.g. 'iggy+tcp://iggy:iggy@127.0.0.1:8090'"
),
default="iggy+tcp://iggy:iggy@127.0.0.1:8090",
+ nargs="?",
type=str,
)
return parser.parse_args()
diff --git a/foreign/python/scripts/test_examples.sh b/foreign/python/scripts/test_examples.sh
new file mode 100755
index 000000000..08dc77392
--- /dev/null
+++ b/foreign/python/scripts/test_examples.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+# Must be executed from the root of the repo.
+
+echo "🚀 Running example scripts..."
+
+cd examples/python || exit 1
+
+EXEC_TIMEOUT_SEC=5
+
+for example in ./*; do
+ # Skip readme
+ if [ -f "./$example" ]; then
+ continue
+ fi
+
+ # Run producer
+ producer_path="./$example/producer.py"
+ if [ ! -f "$producer_path" ]; then
+ echo "⚠️ producer.py not found in example '${example}'"
+ TEST_EXIT_CODE=1
+ continue
+ fi
+
+ # Note: Examples might run indefinitely, so we'll just test they start correctly
+ # Assuming that the script does not require arguments or has default arguments
+ timeout $EXEC_TIMEOUT_SEC python3 "$producer_path"
+ EXIT_CODE=$?
+
+ # Code 124: default exit code produced by timeout when the task runs out of time
+ if [[ $EXIT_CODE = 0 || $EXIT_CODE = 124 ]]; then
+ echo "✅ Producer in example '$example' started successfully"
+ else
+ echo "❌ Producer in example '$example' failed to start"
+ TEST_EXIT_CODE=1
+ continue
+ fi
+
+ # Run consumer
+ consumer_path="./$example/consumer.py"
+ if [ ! -f "$consumer_path" ]; then
+ echo "⚠️ consumer.py not found in example '$example'"
+ TEST_EXIT_CODE=1
+ continue
+ fi
+
+ # Note: Examples might run indefinitely, so we'll just test they start correctly
+ # Assuming that the script does not require arguments or has default arguments.
+ timeout $EXEC_TIMEOUT_SEC python3 "$consumer_path"
+ EXIT_CODE=$?
+
+ if [[ $EXIT_CODE = 0 || $EXIT_CODE = 124 ]]; then
+ echo "✅ Consumer in example '$example' started successfully"
+ else
+ echo "❌ Consumer in example '$example' failed to start"
+ TEST_EXIT_CODE=1
+ fi
+done
+
+exit "$TEST_EXIT_CODE"