View Source Contributing
Thanks for looking at Dynamo. Bug reports, questions and pull requests are welcome.
Before you open a pull request
- Open an issue first for anything that changes the public API or adds a DynamoDB feature, so the shape can be agreed before code is written.
- Read
Agents.mdfor the mental model andskills/dynamo-maintainer/SKILL.mdfor the invariants, the test tiers and the step-by-step procedure for adding a feature. The maintainer skill is written for AI agents and applies to humans just the same.
Running the checks
mix deps.get
mix format --check-formatted
MIX_ENV=test mix compile --force --warnings-as-errors
mix test
mix docs
All four must be clean. The unit suite runs against an in-memory fake
(test/support/fake_dynamo.ex) and takes about a second.
Changes that touch the wire (new request, new attribute type, endpoint routing)
also need a scenario in test/integration/live_test.exs. It runs against
DynamoDB Local or a real AWS account and cleans up its own tables:
DYNAMO_ENDPOINT=http://localhost:8000 AWS_ACCESS_KEY_ID=local AWS_SECRET_ACCESS_KEY=local \
mix test --include integration test/integration/live_test.exs
What a good pull request looks like
- One change per PR, with a test that fails without it.
- Request builders get a golden-payload test; schema DSL changes get a compile-error test for the failure case.
- Documentation updated in the same PR: README section,
Agents.mdcheat sheet, the relevant guide, and aCHANGELOG.mdline under "unreleased". Every snippet in the docs must run. - No new dependencies without discussion. Runtime deps are
reqandjason;decimalis optional and must stay optional.
Style
mix format decides. Beyond that: public functions return
{:ok, value} | {:error, %Dynamo.Error{}}, options are validated with
Keyword.validate/2, invalid input is an error and never a sentinel value.
Reporting a security issue
See SECURITY.md. Please don't open a public issue for it.