// STRYKE-DEMO — ENGINEERING REPORT

Gallery harness for the 14 stryke-* connectors · one s install pulls all deps · docker-compose.yml hosts 7 live services · run_all.stk pings + runs reachable demos

>_EXECUTIVE SUMMARY

stryke-demo is a meta-package that exercises every connector in the stryke-* family from a single repo. The 14 demos are runnable end-to-end: clone, s install, make up, make all. Each demo is a standalone .stk script (not embedded in test fixtures) so it doubles as living documentation for "how do I actually use this connector?" — and each is written to call every public verb of its connector, printing the function name alongside each line of output.

The harness is intentionally thin: no test framework, no assertions, no fancy reporting in the demo files. Each demo prints what it's doing as it goes. The orchestration lives in run_all.stk, which calls each connector's ::ping() to decide which demos can run in the current environment. A separate t/ directory holds cross-connector integration tests that do reconcile results between engines (Arrow↔DuckDB↔Parquet↔Polars).

14
demos / connectors
7
live services in compose
4
demos w/ no service needed
1
cloud-only demo (GCP w/ ADC)
34
cross-connector tests in t/
19
Makefile targets (.PHONY)

~HARNESS DESIGN

Demos live in demos/ with NN_pkg.stk naming. Numbering is stable across releases so the README, docs, and run_all.stk can refer to demos by index. Adding a new connector is "drop a new file with the next index, add a row to the README table, update stryke.toml".

ComponentRole
stryke.tomlPackage manifest. Declares all 14 stryke-* deps with git refs. s install reads this.
demos/NN_pkg.stkOne per connector. Imports its package, exercises 3–5 core verbs, prints progress.
demos/run_all.stkService probe (TCP / UDP / API ping per service) + dispatch + skip-on-unreachable + summary table.
docker-compose.ymlSeven services: mysql, postgres, redis, mongo, kafka (KRaft, single-node), localstack (S3 / DynamoDB / SQS / Lambda / STS), k3s (single-node Kubernetes for stryke-k8s).
MakefileOne target per demo (make arrow, make mysql, …) that sets connection env vars, plus make up / make down (compose), make all (run_all.stk), make install, make clean. 19 targets total, all declared .PHONY.
t/34 cross-connector integration tests (Arrow↔DuckDB↔Parquet↔Polars). Standalone .stk files run with s t/<name>.stk.
CI.github/workflows/ci.yml — validates structure only (manifest deps, demo layout 01..14, Makefile/.PHONY targets, docker compose config, tests/repo-contract.sh, and the docs/README/man-page gates). It does not run the demos live — the services aren't reproducible in GitHub Actions.

$SERVICE PROBE LOGIC

run_all.stk uses all 14 connector roots and classifies each demo into three buckets at startup:

BucketBehavior
always-runarrow + parquet run unconditionally; duckdb + spark gated on their own DuckDB::ping() / Spark::ping() (embedded, so normally true). No external service.
ping-and-runmysql, postgres, kafka, redis, mongo, k8s, docker — each run if its ::ping() returns truthy, else skipped with a reason. aws is gated on eval { AWS::sts_caller_identity(); 1 } rather than a port probe.
manualgcp + grpc need explicit positional args (a bucket/sub/topic, or a host:port), so run_all.stk prints a reminder line for each rather than invoking them.

Each runnable demo is dispatched via system("s", $path). Unreachable demos print ── NN name: SKIP (service not reachable); reachable ones print a ════ NN name ════ banner before their output. The in-process demos always run, so make all exercises a meaningful smoke set even on a bare machine.


&WHY GALLERY-NOT-TEST-SUITE

A test suite asserts. A gallery shows. The demos/*.stk files deliberately do no assertions — they print what they did and how, so the demo source reads as living documentation for each connector. The per-connector correctness tests live in each stryke-* package's own repo; this repo's job is to demonstrate the surface, not re-test it.

The CI workflow in this repo does not run the demos live — spinning up the full docker-compose stack on every GitHub Actions job is slow and brittle, and the cloud/reflection demos (gcp, grpc) can't run there at all. Instead CI pins the structure the demos depend on: the 14 git deps in stryke.toml, the contiguous 01..14 demo numbering, one Makefile target per demo, a valid docker compose config with the seven services, and the full doc/README/man-page gate set. Live runs happen on the maintainer's box via make all.


%DEMO ANATOMY

Every demos/NN_pkg.stk follows the same shape so the files stay scannable:

  1. #!/usr/bin/env stryke shebang + a header comment with the run command and any required env vars.
  2. A single use Pkg directive (the first non-comment line — pinned by tests/repo-contract.sh).
  3. One # ── Pkg::verb ── banner per public function, then a p "Pkg::verb ..." line that calls it and prints the result — so the output is a literal transcript of the connector's API.
  4. Cleanup at the end (drop temp files, temp tables, created topics / objects / k8s resources / containers).

The connection target comes from the environment (MYSQL_URI, POSTGRES_URI, REDIS_URL, MONGODB_URI, KAFKA_BROKERS, AWS_ENDPOINT_URL & friends, KUBECONFIG, DOCKER_HOST); the make target sets a localhost default that matches docker-compose.yml. A few demos read opt-in flags (STRYKE_DEMO_LAMBDA, STRYKE_DEMO_DOCKER_BUILD, STRYKE_DEMO_DOCKER_PUSH, STRYKE_DEMO_SPARK_SCRIPT) to enable slower or destructive branches; unset, those are skipped.


/EXTENDING

Adding a connector to the family means a set of coordinated edits in stryke-demo, several of which are pinned by tests/repo-contract.sh and the CI layout job:

  1. Add the dep to stryke.toml under [deps] (key must match the demo filename suffix and point at MenkeTechnologies/stryke-<name>).
  2. Drop demos/15_newpkg.stk — first line a use directive — that exercises the connector's public verbs.
  3. Add a make newpkg target (and list it under .PHONY).
  4. Add a run_demo "15 newpkg", Newpkg::ping(), "demos/15_newpkg.stk" line in run_all.stk (it dispatches each demo explicitly, not by directory scan).
  5. If it needs a live service, add it to docker-compose.yml.
  6. Update the count claims in this report and the demo table in index.html.

The numbering must stay contiguous (01..NN, no gaps or duplicates) and the [deps] keys must be a 1:1 match with the demo filenames — both are enforced by tests/repo-contract.sh.


#PROJECT METADATA

ItemValue
LicenseMIT
AuthorMenkeTechnologies
Repositorygithub.com/MenkeTechnologies/stryke-demo
Parent languagestrykelang
Meta umbrellaMenkeTechnologiesMeta
Issuesgithub.com/MenkeTechnologies/stryke-demo/issues