[test] add examples-check target with stubbed BIN and no-network validation for example scripts

This commit is contained in:
2025-08-12 05:15:41 +02:00
parent 94c816acdf
commit a26eade80b
7 changed files with 87 additions and 0 deletions

23
Makefile Normal file
View File

@@ -0,0 +1,23 @@
# Lightweight examples-check: runs all examples/*.sh with --no-interaction -q and stubbed BIN
# This target does not perform network calls and never prompts for input.
.SHELL := /bin/bash
.PHONY: examples-check
examples-check:
@set -euo pipefail; \
shopt -s nullglob; \
BIN_WRAPPER="$(PWD)/scripts/with_flags.sh"; \
failed=0; \
for f in examples/*.sh; do \
echo "[examples-check] Running $$f"; \
BIN="$$BIN_WRAPPER" bash "$$f" </dev/null >/dev/null 2>&1 || { \
echo "[examples-check] FAILED: $$f"; failed=1; \
}; \
done; \
if [[ $$failed -ne 0 ]]; then \
echo "[examples-check] Some examples failed."; \
exit 1; \
else \
echo "[examples-check] All examples passed (no interaction, quiet)."; \
fi

View File

@@ -47,6 +47,16 @@ Tests
- cargo test - cargo test
- The test suite includes CLI-oriented integration tests and unit tests. Some tests simulate GPU detection using env vars (POLYSCRIBE_TEST_FORCE_*). Do not rely on these flags in production code. - The test suite includes CLI-oriented integration tests and unit tests. Some tests simulate GPU detection using env vars (POLYSCRIBE_TEST_FORCE_*). Do not rely on these flags in production code.
Examples check (no network, non-interactive)
- To quickly validate that example scripts are wired correctly (no prompts, quiet, exit 0), run:
- make examples-check
- What it does:
- Iterates over examples/*.sh
- Forces execution with --no-interaction and -q via a wrapper
- Uses a stubbed BIN that performs no network access and exits successfully
- Redirects stdin from /dev/null to ensure no prompts
- This is intended for CI smoke checks and local verification; it does not actually download models or transcribe audio.
Clippy Clippy
- Run lint checks and treat warnings as errors: - Run lint checks and treat warnings as errors:
- cargo clippy --all-targets -- -D warnings - cargo clippy --all-targets -- -D warnings

0
examples/download_models_interactive.sh Normal file → Executable file
View File

0
examples/transcribe_file.sh Normal file → Executable file
View File

0
examples/update_models.sh Normal file → Executable file
View File

26
scripts/bin_stub.sh Executable file
View File

@@ -0,0 +1,26 @@
#!/usr/bin/env bash
# Lightweight stub for examples-check: simulates the PolyScribe CLI without I/O or network
# - Accepts any arguments
# - Exits 0
# - Produces no output unless VERBOSE_STUB=1
# - Never performs network operations
# - Never reads from stdin
set -euo pipefail
if [[ "${VERBOSE_STUB:-0}" == "1" ]]; then
echo "[stub] polyscribe $*" 1>&2
fi
# Behave quietly if -q/--quiet is present by default (no output)
# Honor --help/-h: print minimal usage if verbose requested
if [[ "${VERBOSE_STUB:-0}" == "1" ]]; then
for arg in "$@"; do
if [[ "$arg" == "-h" || "$arg" == "--help" ]]; then
echo "PolyScribe stub: no-op (examples-check)" 1>&2
break
fi
done
fi
# Always succeed quietly
exit 0

28
scripts/with_flags.sh Executable file
View File

@@ -0,0 +1,28 @@
#!/usr/bin/env bash
# Wrapper that ensures --no-interaction -q are present, then delegates to the real BIN (stub by default)
set -euo pipefail
REAL_BIN=${REAL_BIN:-"$(dirname "$0")/bin_stub.sh"}
# Append flags if not already present in args
args=("$@")
need_no_interaction=1
need_quiet=1
for a in "${args[@]}"; do
[[ "$a" == "--no-interaction" ]] && need_no_interaction=0
[[ "$a" == "-q" || "$a" == "--quiet" ]] && need_quiet=0
done
if [[ $need_no_interaction -eq 1 ]]; then
args=("--no-interaction" "${args[@]}")
fi
if [[ $need_quiet -eq 1 ]]; then
args=("-q" "${args[@]}")
fi
# Never read stdin; prevent accidental blocking by redirecting from /dev/null
# Also advertise offline via env variables commonly checked by the app
export CI=1
export POLYSCRIBE_MODELS_BASE_COPY_DIR="${POLYSCRIBE_MODELS_BASE_COPY_DIR:-}" # leave empty by default
exec "$REAL_BIN" "${args[@]}" </dev/null