Files
upstream-ory-kratos/DEVELOP.md
upstream-mirror c60cc7ca75
Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
snapshot of https://github.com/ory/kratos.git (master, 2026-09-15; blobs > 131072B omitted)
2026-09-15 21:19:12 +05:00

216 lines
4.1 KiB
Markdown

# Development
This document explains how to develop Ory Kratos, run tests, and work with the tooling around it.
## Upgrading and changelog
Check [releases tab](https://github.com/ory/kratos/releases) for updates and changelogs when using the open source license.
## Command line documentation
To see available commands and flags, run:
```bash
kratos -h
# or
kratos help
```
## Contribution guidelines
We encourage all contributions. Before opening a pull request, read the
[contribution guidelines](./CONTRIBUTING.md).
## Prerequisites
You need Go 1.16+ and, for the test suites:
* Docker and Docker Compose
* `make`
* Node.js and npm
You can develop Ory Kratos on Windows, but most guides assume a Unix shell such as `bash` or `zsh`.
## Install from source
To install Kratos from source:
```make
make install
```
## Formatting code
Format all code using:
```make
make format
```
The continuous integration pipeline checks code formatting.
## Running tests
There are three types of tests:
* Short tests that do not require a SQL database
* Regular tests that require PostgreSQL, MySQL, and CockroachDB
* End to end tests that use real databases and a test browser
### Short tests
Short tests run quickly and use SQLite.
Run all short tests:
```bash
go test -short ./...
```
Run short tests in a specific module:
```bash
cd client
go test -short .
```
### Regular tests
Regular tests require a database setup.
The test suite can start databases using
[ory/dockertest](https://github.com/ory/dockertest). In practice, it is usually
easier and faster to use the Makefile targets.
Run the full test suite:
```make
make test
```
> Note: `make test` recreates the databases every time. This can be slow if you
> are iterating frequently on a specific test.
If you want to reuse databases across test runs, initialize them once:
```bash
make test-resetdb
export TEST_DATABASE_MYSQL='mysql://root:secret@(127.0.0.1:3444)/mysql?parseTime=true'
export TEST_DATABASE_POSTGRESQL='postgres://postgres:secret@127.0.0.1:3445/kratos?sslmode=disable'
export TEST_DATABASE_COCKROACHDB='cockroach://root@127.0.0.1:3446/defaultdb?sslmode=disable'
```
Then you can run Go tests directly as often as needed:
```bash
go test ./...
# or in a module:
cd client
go test .
```
### Updating test fixtures
Some tests use snapshot fixtures.
Update snapshots for short tests:
```bash
make test-update-snapshots
```
Update all snapshots:
```bash
UPDATE_SNAPSHOTS=true go test -p 4 ./...
```
You can run this from the repository root or from subdirectories.
### End-to-end tests
End to end tests are implemented with [Cypress](https://www.cypress.io).
> On ARM based Macs you may need to install Rosetta 2 to run Cypress.
> See the Cypress documentation:
> [https://www.cypress.io/blog/2021/01/20/running-cypress-on-the-apple-m1-silicon-arm-architecture-using-rosetta-2/](https://www.cypress.io/blog/2021/01/20/running-cypress-on-the-apple-m1-silicon-arm-architecture-using-rosetta-2/)
To install Rosetta 2:
```bash
softwareupdate --install-rosetta --agree-to-license
```
Run e2e tests in development mode:
```bash
./test/e2e/run.sh --dev sqlite
```
Run all e2e tests with databases:
```make
make test-e2e
```
For more options:
```bash
./test/e2e/run.sh
```
#### Run a single test
Add `.only` to the test you want to run, for example:
```ts
it.only('invalid remote recovery email template', () => {
// ...
})
```
#### Run a subset of tests
To run a subset of e2e tests:
1. Edit `cypress.json` in `test/e2e/`.
2. Add the `testFiles` option and point it to the specs you want, for example:
```json
"testFiles": ["profiles/network/*"]
```
3. Start the tests again using the run script or Makefile.
## Build Docker image
To build a development Docker image:
```make
make docker
```
## Preview API documentation
To work on and preview the generated API documentation:
1. Update the SDK including the OpenAPI specification:
```make
make sdk
```
2. Run the preview server for API documentation:
```make
make docs/api
```
3. Run the preview server for Swagger documentation:
```make
make docs/swagger
```