Compare commits

...
2 Commits
Author SHA1 Message Date
mrcharles 21b6f50613 fix(demo): make validation suite runnable and shellcheck-clean
validate-all.sh aborted after the very first check because its
post-increment counters (`((VAR++))`) return exit status 1 when the old
value is 0, and `set -e` terminated the script. Use arithmetic
assignment so the suite runs to completion.

Add a .shellcheckrc to suppress the SC1090/SC1091 warnings that are
inherent to the environment-driven design (dynamic `source` of demo.env),
and drop an unused variable in demo-test.sh, so every script passes
shellcheck cleanly.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-07-30 13:00:58 -05:00
mrcharles 92a0fd76cb fix(demo): repair Kiwix service with catalog-based ZIM bootstrap
Kiwix was failing to start: its inline bootstrap command had a shell
syntax error (a YAML-wrapped multi-line wget left a dangling `||`), and
the hard-coded sample-ZIM URL returned 404 because Kiwix rotates the
date-stamped filenames monthly.

Replace the inline command with a bind-mounted bootstrap script that
resolves the current ZIM filename from the Kiwix OPDS catalog at startup,
so the download URL never rots. kiwix-serve is also started on port 8080
to match the container port mapping and healthcheck (it defaults to 80).

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-07-30 13:00:54 -05:00
5 changed files with 56 additions and 18 deletions
+5
View File
@@ -0,0 +1,5 @@
# ShellCheck configuration for the TSYS Developer Support Stack
# These rules are inherent to the environment-driven (dynamic source) design:
# SC1090 - can't follow non-constant source (e.g. `source "$ENV_FILE"`)
# SC1091 - not following external file specified as input (demo.env)
disable=SC1090,SC1091
+45
View File
@@ -0,0 +1,45 @@
#!/bin/sh
# Kiwix bootstrap: ensure a sample ZIM file is present, then serve it.
#
# ZIM filenames on download.kiwix.org are date-stamped and rotate monthly,
# so hard-coded URLs rot quickly. Instead this script resolves the current
# filename from the Kiwix OPDS catalog, which always points at the live file.
set -u
ZIM_DIR=/data
ZIM_FILE=devdocs_en_lit.zim
CATALOG_URL='https://library.kiwix.org/catalog/v2/entries?name=devdocs_en_lit&count=1'
MAX_ATTEMPTS=6
RETRY_DELAY=5
if ! ls "$ZIM_DIR"/*.zim >/dev/null 2>&1; then
echo "[kiwix] No ZIM files found; resolving a sample ZIM from the Kiwix catalog..."
attempt=0
while [ "$attempt" -lt "$MAX_ATTEMPTS" ]; do
attempt=$((attempt + 1))
zim_url=$(wget -q -O - "$CATALOG_URL" 2>/dev/null \
| grep -o 'https://[^"]*\.zim\.meta4' | head -n1 \
| sed 's/\.meta4$//')
if [ -n "$zim_url" ]; then
echo "[kiwix] Downloading: $zim_url"
if wget -q --timeout=60 -O "$ZIM_DIR/$ZIM_FILE" "$zim_url"; then
echo "[kiwix] Download complete."
break
fi
rm -f "$ZIM_DIR/$ZIM_FILE"
echo "[kiwix] Download failed; retrying in ${RETRY_DELAY}s..."
else
echo "[kiwix] Catalog lookup failed; retrying in ${RETRY_DELAY}s..."
fi
sleep "$RETRY_DELAY"
done
fi
if ls "$ZIM_DIR"/*.zim >/dev/null 2>&1; then
echo "[kiwix] Starting kiwix-serve..."
exec kiwix-serve --port 8080 "$ZIM_DIR"/*.zim
else
echo "[kiwix] No ZIM files available; sleeping indefinitely."
exec sleep infinity
fi
+3 -15
View File
@@ -750,23 +750,11 @@ services:
- "${KIWIX_PORT}:8080"
volumes:
- ${COMPOSE_PROJECT_NAME}_kiwix_data:/data
- ./config/kiwix/bootstrap.sh:/bootstrap.sh:ro
entrypoint: []
command:
- /bin/sh
- -c
- |
if ! ls /data/*.zim 1>/dev/null 2>&1; then
echo 'No ZIM files found. Downloading sample ZIM...';
wget -q -O /data/demo.zim
'https://download.kiwix.org/zim/other/bleedingedge_climate-change_en.zim'
|| echo 'Download failed';
fi
if ls /data/*.zim 1>/dev/null 2>&1; then
exec kiwix-serve /data/*.zim
else
echo 'No ZIM files available, sleeping indefinitely'
exec sleep infinity
fi
- sh
- /bootstrap.sh
environment:
- PUID=${DEMO_UID}
- PGID=${DEMO_GID}
+1 -1
View File
@@ -74,7 +74,7 @@ test_service_health() {
log_test "Service health"
local unhealthy=0
while IFS= read -r line; do
local name status
local name
name=$(echo "$line" | awk '{print $1}')
[[ "$name" == "NAMES" || -z "$name" ]] && continue
if echo "$line" | grep -q "(healthy)"; then
+2 -2
View File
@@ -17,8 +17,8 @@ BLUE='\033[0;34m'
NC='\033[0m'
log_validation() { echo -e "${BLUE}[VALIDATE]${NC} $1"; }
log_pass() { echo -e "${GREEN}[PASS]${NC} $1"; ((VALIDATION_PASSED++)); }
log_fail() { echo -e "${RED}[FAIL]${NC} $1"; ((VALIDATION_FAILED++)); }
log_pass() { echo -e "${GREEN}[PASS]${NC} $1"; VALIDATION_PASSED=$((VALIDATION_PASSED + 1)); }
log_fail() { echo -e "${RED}[FAIL]${NC} $1"; VALIDATION_FAILED=$((VALIDATION_FAILED + 1)); }
validate_yaml_files() {
log_validation "Validating YAML files with yamllint..."