Doughnut is a Personal Knowledge Management (PKM) tool combining zettelkasten style of knowledge capture with some features to enhance learning (spaced-repetition, smart reminders) and ability to share knowledge bits with other people (for buddy/team learning).
For more background info you can read::
- We welcome product ideas and code contribution.
- Collaborate over:
- GitHub Discussions for product ideas/features,
- GitHub Issues for reporting issues or bugs, OR
- doughnut gitter.im
- FOSS style; Fork and submit GitHub PR.
- Please keep the PR small and on only one topic
- The code need to come with tests
🏁 From the root of doughnut directory, in a terminal, run:
./setup-doughnut-dev.sh
Ensure your OS (WSL2/Ubuntu/Fedora, etc) has /bin/sh
point to bash
.
If you are using Ubuntu where /bin/sh
is symlinked to dash
, please
run sudo dpkg-reconfigure dash
and answer "No" to reconfigure to bash
as default.
~/.sdkman
dir and comment out sdkman related config in ~/.<SHELL>rc
.
🚦 🚧 ONLY if you hit problems with the above quick-start setup, you should manually walk through the local development environment nix setup.
From the root of your doughnut directory, start your doughnut nix development environment with
nix develop
yarn && yarn frontend:build && yarn sut
- Rerun it each time you reset the database.
- From doughnut source root directory:
yarn backend:test
We use cucumber Gherkin + cypress (test driver) Javascript/Typescript framework to drive the end-to-end test suite.
The Cypress+Cucumber tests are in JavaScript/TypeScript.
For MS Windows WSL2 users:
- you need to ensure your WSL2 Linux has
xvfb
installed manually before you can run cypress. This is not managed by Nix! export NODE_OPTIONS="--max-old-space-size=4096"
before running any cypress related commands ( e.g.cy:open
orcy:run
).
Purpose | Command (run from doughnut source root directory) |
---|---|
Install needed e2e tooling | yarn |
Start SUT (backend system under test) | yarn sut (starts backend SUT ONLY) |
Start Mock for external backend | yarn mb (starts mocked external backend ONLY) |
Start only the Cypress IDE | yarn cy:open (starts Cypress IDE ONLY) |
Run all e2e test | yarn test (compile frontend assets, start backend SUT, mountebank virtual service provider & cypress headless e2e testing) |
Run all e2e test with FE in dev mode | yarn test:dev (starts backend SUT, frontend SUT in HMR mode, mountebank virtual service provider & cypress headless e2e testing) |
Run cypress IDE | yarn test:open (starts frontend SUT in HMR mode, backend SUT, mountebank virtual service provider & cypress IDE) |
Generate TypeScript Interfaces | yarn generateTypeScript (Generate TypeScript Interfaces from backend JSON classes. Should run manually every time backend JSON class changes) |
Purpose | Location |
---|---|
feature files | cypress/integration/*.feature |
step definitions | cypress/step_definitions/*.ts |
custom DSL | cypress/support/*.ts |
cucumber hooks | cypress/step_definitions/common/hook.ts |
test fixtures | cypress/fixtures/*.* |
cypress config | cypress/config/*.json |
cypress plugins | cypress/plugins/index.ts |
You can find the database migrations in backend/src/main/resources/db.migration/
.
The migrations are run automatically when the backend app starts up.
It will also run the migrations for test when you run yarn backend:test
.
To trigger the test DB migration manually, run backend/gradlew testDBMigrate
.
We chose Vue3 + Vite to build our frontend.
From doughnut
source root directory
yarn frontend:test
yarn frontend:sut
Build & Bundle Vue3 frontend web-app assets and startup backend app (backend webapp will launch on port 9081).
yarn frontend:build
yarn sut
Expect to find minified and uglified web bundle assets in backend/src/main/resources/static
directory:
❯ pwd
/home/lia/doughnut/backend/src/main/resources/static
❯ tree -L 3
.
├── assets
│ ├── main.32137c85.js
│ ├── main.b097c993.css
│ └── vendor.8f9eb49d.js
├── index.html
├── odd-e.ico
└── odd-e.png
1 directory, 6 files