4.0 KiB
GETTING STARTED
Ontime consists of 3 distinct parts
- client: A React app for Ontime's UI and web clients
- electron: An electron app which facilitates the cross-platform distribution of Ontime
- server: A node application which handles the domains services and integrations
The steps below will assume you have locally installed the necessary dependencies. Other dependencies will be installed as part of the setup
- node (~20)
- pnpm (~9)
- docker (only necessary to run and build docker images)
LOCAL DEVELOPMENT
The electron app is only necessary to distribute an installable version of the app and is not required for local development. Locally, we would need to run both the React client and the node.js server in development mode
From the project root, run the following commands
- Install the project dependencies by running
pnpm i - Run dev mode by running
turbo dev
Debugging backend
To debug backend code in Node.js:
- Open two separate terminals and navigate to the
apps/clientandapps/serverdirectories. - In each terminal, run the command
pnpm devto start the development servers for both the client and server applications. - If you need to set breakpoints and inspect the code execution, enable Node.js inspect mode by
running
pnpm dev:inspect.
TESTING
Generally we have 2 types of tests.
- Unit tests for functions that contain business logic
- End-to-end tests for core features
Unit tests
Unit tests are contained in mostly all the apps and packages (client, server and utils)
You can run unit tests by running turbo turbo test:pipeline from the project root.
This will run all tests and close test runner.
Alternatively you can navigate to an app or project and run pnpm test to run those tests in watch mode
E2E tests
E2E tests are in a separate package. On running, playwright will spin up an instance of the webserver to test against These tests also run against a separate version of the DB (test-db)
Before running the E2E, you should first build the project with pnpm build:local.
You can run playwright tests from project root with pnpm e2e
When writing tests, it can be handy to run playwright in interactive mode with pnpm e2e:i. You would need to manually
start the webserver with pnpm dev:server
Some other useful commands
pnpm e2e --uiopen playwright UIpnpm e2e --headedrun tests with a visible browser window
CREATE AN INSTALLABLE FILE (Windows | MacOS | Linux)
Ontime uses Electron to distribute the application. You can generate a distribution for your OS by running the following steps.
From the project root, run the following commands
- Install the project dependencies by running
pnpm i - Build the UI and server by running
turbo build:electron - Create the package by running
turbo dist-win,turbo dist-macorturbo dist-linux
The build distribution assets will be at .apps/electron/dist
Note: The MacOS build will only work in CI, locally it will fail due to notarisation issues.
Use the turbo dist-mac:local command to build a MacOS distribution locally.
DOCKER
Ontime provides a docker-compose file to aid with building and running docker images. While it should allow for a generic setup, it might need to be modified to fit your infrastructure.
From the project root, run the following commands
- Build docker image from by running
docker build -t getontime/ontime - Run docker image from compose by running
docker-compose up -d
Other useful commands
- List running processes by running
docker ps - Kill running process by running
docker kill <process-id>
General Info
APP Building
We build the app from app.js for almost all applications. The output file will still be named index.cjs. This is because of Electron. Building the app from index.ts only applies for applications that don't use electron. index.ts will take over the initialization of the server and UI when electron isn't present.