>_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).
~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".
| Component | Role |
|---|---|
stryke.toml | Package manifest. Declares all 14 stryke-* deps with git refs. s install reads this. |
demos/NN_pkg.stk | One per connector. Imports its package, exercises 3–5 core verbs, prints progress. |
demos/run_all.stk | Service probe (TCP / UDP / API ping per service) + dispatch + skip-on-unreachable + summary table. |
docker-compose.yml | Seven services: mysql, postgres, redis, mongo, kafka (KRaft, single-node), localstack (S3 / DynamoDB / SQS / Lambda / STS), k3s (single-node Kubernetes for stryke-k8s). |
Makefile | One 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:
| Bucket | Behavior |
|---|---|
| always-run | arrow + parquet run unconditionally; duckdb + spark gated on their own DuckDB::ping() / Spark::ping() (embedded, so normally true). No external service. |
| ping-and-run | mysql, 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. |
| manual | gcp + 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:
#!/usr/bin/env strykeshebang + a header comment with the run command and any required env vars.- A single
use Pkgdirective (the first non-comment line — pinned bytests/repo-contract.sh). - One
# ── Pkg::verb ──banner per public function, then ap "Pkg::verb ..."line that calls it and prints the result — so the output is a literal transcript of the connector's API. - 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:
- Add the dep to
stryke.tomlunder[deps](key must match the demo filename suffix and point atMenkeTechnologies/stryke-<name>). - Drop
demos/15_newpkg.stk— first line ausedirective — that exercises the connector's public verbs. - Add a
make newpkgtarget (and list it under.PHONY). - Add a
run_demo "15 newpkg", Newpkg::ping(), "demos/15_newpkg.stk"line inrun_all.stk(it dispatches each demo explicitly, not by directory scan). - If it needs a live service, add it to
docker-compose.yml. - 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
| Item | Value |
|---|---|
| License | MIT |
| Author | MenkeTechnologies |
| Repository | github.com/MenkeTechnologies/stryke-demo |
| Parent language | strykelang |
| Meta umbrella | MenkeTechnologiesMeta |
| Issues | github.com/MenkeTechnologies/stryke-demo/issues |