AFFiNE/docs/BUILDING.md

121 lines
3.5 KiB
Markdown
Raw Normal View History

2023-03-05 21:18:56 +03:00
# Building AFFiNE Web
2023-02-09 10:34:43 +03:00
2023-08-06 19:45:30 +03:00
> **Warning**:
>
> This document is not guaranteed to be up-to-date.
2023-08-06 19:45:30 +03:00
> If you find any outdated information, please feel free to open an issue or submit a PR.
> **Note**
> For developing & building desktop client app, please refer to [building-desktop-client-app.md](./building-desktop-client-app.md)
2023-02-09 10:34:43 +03:00
## Table of Contents
- [Prerequisites](#prerequisites)
- [Setup Environment](#setup-environment)
2023-03-05 21:18:56 +03:00
- [Start Development Server](#start-development-server)
2023-02-09 10:34:43 +03:00
- [Testing](#testing)
## Prerequisites
AFFiNE client has both **Node.js** & **Rust** toolchains.
### Install Node.js
2023-02-09 10:34:43 +03:00
We suggest develop our product under node.js LTS(Long-term support) version
#### Option 1: Manually install node.js
2023-02-09 10:34:43 +03:00
install [Node LTS version](https://nodejs.org/en/download)
> Up to now, the major node.js version is 20.x
2023-02-09 10:34:43 +03:00
#### Option 2: Use node version manager
2023-02-09 10:34:43 +03:00
2023-09-01 02:50:54 +03:00
install [fnm](https://github.com/Schniz/fnm)
2023-02-09 10:34:43 +03:00
```sh
2023-09-01 02:50:54 +03:00
fnm use
2023-02-09 10:34:43 +03:00
```
### Install Rust Tools
Please follow the official guide at https://www.rust-lang.org/tools/install.
### Setup Node.js Environment
2023-02-09 10:34:43 +03:00
This setup requires modern yarn (currently `4.x`), run this if your yarn version is `1.x`
Reference: [Yarn installation doc](https://yarnpkg.com/getting-started/install)
```sh
corepack enable
corepack prepare yarn@stable --activate
```
2023-02-09 10:34:43 +03:00
```sh
# install dependencies
2023-03-21 08:12:42 +03:00
yarn install
2023-02-09 10:34:43 +03:00
```
### Clone repository
#### Linux & MacOS
```sh
git clone https://github.com/toeverything/AFFiNE
```
#### Windows
In our codebase, we use symbolic links. Due to the security design of Windows, the creation of symbolic links requires administrator privileges. This is part of the security policy settings of Windows, and more information can be found at [Security Policy Settings for Creating Symbolic Links](https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/create-symbolic-links).
For detailed guidance on enabling this feature, please refer to the official documentation: [Enable Developer Mode on Windows](https://learn.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development).
Once Developer Mode is enabled, execute the following command with administrator privileges:
```sh
# Enable symbolic links
git config --global core.symlinks true
# Clone the repository
git clone https://github.com/toeverything/AFFiNE
```
### Build Native Dependencies
2023-02-09 10:34:43 +03:00
Run the following script. It will build the native module at [`/packages/frontend/native`](/packages/frontend/native) and build Node.js binding using [NAPI.rs](https://napi.rs/).
This could take a while if you build it for the first time.
2023-08-08 10:25:56 +03:00
Note: use `strip` from system instead of `binutils` if you are running MacOS. [see problem here](https://github.com/toeverything/AFFiNE/discussions/2840)
2023-03-21 08:12:42 +03:00
2023-02-09 10:34:43 +03:00
```
yarn workspace @affine/native build
2023-03-21 08:12:42 +03:00
```
2023-09-01 02:50:54 +03:00
### Build Server Dependencies
2023-03-21 08:12:42 +03:00
2023-09-01 02:50:54 +03:00
```sh
yarn workspace @affine/server-native build
```
2023-02-09 10:34:43 +03:00
## Testing
Adding test cases is strongly encouraged when you contribute new features and bug fixes.
We use [Playwright](https://playwright.dev/) for E2E test, and [vitest](https://vitest.dev/) for unit test.
To test locally, please make sure browser binaries are already installed via `npx playwright install`.
2023-09-01 02:50:54 +03:00
Also make sure you have built the `@affine/core` workspace before running E2E tests.
### Unit Test
2023-02-09 10:34:43 +03:00
```sh
2023-03-21 08:12:42 +03:00
yarn test
2023-02-09 10:34:43 +03:00
```
2023-09-01 02:50:54 +03:00
### E2E Test
2023-09-01 02:50:54 +03:00
```shell
# there are `affine-local`, `affine-migration`, `affine-local`, `affine-prototype` e2e tests,
2023-09-01 02:50:54 +03:00
# which are run under different situations.
cd tests/affine-local
yarn e2e
```