PayloadStash is a YAML-driven HTTP and AMQP workflow runner and executable test suite. Define requests and messages as test cases, carry captured values between them, evaluate reusable expectations, and use the final exit status in local or automated test runs. PayloadStash also injects secrets before transport and writes deterministic evidence for every run. Loaded secrets are redacted from resolved configurations and logs, while native, containerized, and offline deployment paths keep the same suite portable.
Installing, configuring, and operating PayloadStash:
📖 Open the PayloadStash user guide
The GitHub Pages guide is the source of truth for end users, including local/bootstrap, cloned UV, Git-based UV tool, and GHCR Docker installations. User configuration, CLI, examples, output, and troubleshooting details live there rather than in repository READMEs.
uv sync
uv run payloadstash --helpUV uses pyproject.toml and uv.lock to create the project environment. Run the CLI directly from the checkout with uv run payloadstash ....
python3 bootstrap.py --editable
./payloadstash --helpbootstrap.py creates a repository-local .venv. Editable installs normally need reinstalling only when dependencies or console entry points change.
The current test suite uses executable Python scripts rather than a test-runner dependency:
uv run python tests/test_asserts.py
uv run python tests/test_header_case.py
uv run python tests/test_url_operators.py
uv run python tests/test_amqp.pyThe AMQP integration harness under amqp-test/ uses Docker Compose and a real RabbitMQ broker; see amqp-test/README.md.
Documentation changes are validated separately:
python3 -m venv .venv-docs
.venv-docs/bin/python -m pip install -r docs/requirements.txt
.venv-docs/bin/mkdocs build --strict.github/workflows/docs.yml strictly builds documentation pull requests and deploys the site/ artifact after qualifying pushes to main. Generated HTML is never committed.
Before the first deployment, a repository administrator must open Settings → Pages and select GitHub Actions as the Pages source. The workflow handles later deployments; no gh-pages branch is used.
payload_stash/main.pydefines the Click CLI and orchestrates validation, execution, and artifact generation.payload_stash/config_schema.pycontains Pydantic configuration models and resolution rules.payload_stash/config_utility.pyresolves operators, captures, JSONPath, and expectations.payload_stash/request_manager.pyperforms HTTP work and retry handling.payload_stash/amqp_manager.pyperforms AMQP publishing, confirms, TLS, RPC, and subscription waits.config/config-example.ymlis the canonical executable example.docs/is the sole source for end-user documentation;mkdocs.ymldefines the published site.
Requests in each sequence execute sequentially or through a bounded concurrent worker pool. Resolution applies YAML parsing, defaults/request/forced precedence, dynamic operators, and secret redaction before transport dispatch. Each run writes a resolved configuration, CSV results, detailed log, Markdown report, and response bodies.
| Command | Purpose |
|---|---|
./x-python-package-payloadstash.sh |
Build the portable Python distribution archive |
./x-docker-build-payloadstash.sh |
Build the local container image |
./x-docker-package-payloadstash.sh |
Build the air-gapped Docker distribution archive |
./x-payloadstash-version-set.sh |
Update project version metadata |
Artifact-production notes remain in packaged-python/README - Python Version.md and packaged-docker/README - Docker Version.md. Publishing a GitHub Release builds, validates, and pushes the corresponding versioned image to ghcr.io/ericwastaken/payloadstash; normal commits do not publish containers.
Use DEVELOPMENT.md for the complete maintainer procedure. In summary, update the version without a v prefix, test and commit it to main, then publish a GitHub Release whose tag adds the prefix, such as project version 1.3.0 with tag v1.3.0. Draft releases do not publish images. Stable releases produce exact, minor, and latest GHCR tags; prereleases produce only their exact prerelease tag.
