- Node.js and npm
- Java (JDK 11+)
- Leiningen (for releases)
npm installnpm testNavigate to http://localhost:8021 to view test results. Tests will re-run automatically when source files change.
npm run test:ciTest results are output to the reports/ directory.
Visual regression tests that compare rendered output against reference images:
npm run test:renderIf tests fail, a diff image is generated at tests/render_test/diff.png.
npm run examplesNavigate to http://localhost:8085 to view the examples.
shadow-cljs provides hot-reloading. Start a watch build and connect your editor's REPL.
- Implement
IEntityTypeprotocol (and optionallyIUpdateableEntityTypefor in-place updates) insrc/main/threeagent/impl/entities.cljs - Add to the
builtin-entity-typesmap - Or register custom types via the
:entity-typesoption inthreeagent.core/render
- Unit tests go in
src/test/threeagent/ - Test namespaces must end with
-testto be picked up by the test runner - E2E tests are in
src/test/threeagent/e2e/ - Virtual scene tests are in
src/test/threeagent/virtual_scene/
Releases are managed through CircleCI with GPG-signed artifacts deployed to Clojars.
- Ensure all tests pass on
mainbranch - Create/checkout the
releasebranch frommain:git checkout -b release main git push -u origin release
- CircleCI will run tests automatically
- Approve the release in CircleCI (manual approval step)
- CircleCI executes
lein release :patchwhich:- Verifies all changes are committed
- Bumps version from SNAPSHOT to release (e.g.,
1.0.2-SNAPSHOT→1.0.2) - Commits the version change
- Creates a signed git tag (e.g.,
v1.0.2) - Deploys to Clojars
- Bumps version to next SNAPSHOT (e.g.,
1.0.3-SNAPSHOT) - Commits the version change
- Merges
releaseback tomain - Pushes all changes
The release uses :patch by default. For other version bumps:
:patch- 1.0.1 → 1.0.2:minor- 1.0.1 → 1.1.0:major- 1.0.1 → 2.0.0
Snapshot versions are automatically deployed to Clojars on every push to main after tests pass.
lein deployRequires CLOJARS_USERNAME and CLOJARS_PASSWORD environment variables and GPG key configured.