Files
zitadel/README.md

100 lines
3.8 KiB
Markdown
Raw Normal View History

2023-04-03 15:38:50 +02:00
# ZITADEL typescript with Turborepo and Changesets
2023-04-03 11:45:27 +02:00
2023-04-03 15:38:50 +02:00
This is an monorepo containing all typescript/javascript packages and applications for ZITADEL. Versioning and package publishing is handled by [Changesets](https://github.com/changesets/changesets) and fully automated with GitHub Actions.
2023-04-03 11:45:27 +02:00
## What's inside?
This Turborepo includes the following:
### Apps and Packages
- `login`: The new login UI powered by Next.js
2023-04-14 09:09:21 +02:00
- `@zitadel/server`: core components for establishing node client connection, grpc stub
- `@zitadel/client`: core components for establishing web client connection, grpc stub
2023-04-14 14:35:21 +02:00
- `@zitadel/react`: shared React utilities and components built with tailwindcss
2023-04-03 15:38:50 +02:00
- `@zitadel/next`: shared Next.js utilities
2023-04-03 11:45:27 +02:00
- `@zitadel/tsconfig`: shared `tsconfig.json`s used throughout the monorepo
- `eslint-config-zitadel`: ESLint preset
Each package and app is 100% [TypeScript](https://www.typescriptlang.org/).
### Utilities
2023-04-03 15:38:50 +02:00
This repo has some additional tools:
2023-04-03 11:45:27 +02:00
- [TypeScript](https://www.typescriptlang.org/) for static type checking
- [ESLint](https://eslint.org/) for code linting
- [Prettier](https://prettier.io) for code formatting
### Useful commands
2023-05-05 16:32:57 +02:00
- `pnpm generate` - Build proto stubs for server and client package
2023-04-19 15:54:21 +02:00
- `pnpm build` - Build all packages and the login app
- `pnpm dev` - Develop all packages and the login app
2023-04-03 15:38:50 +02:00
- `pnpm lint` - Lint all packages
- `pnpm changeset` - Generate a changeset
- `pnpm clean` - Clean up all `node_modules` and `dist` folders (runs each package's clean script)
2023-04-03 11:45:27 +02:00
## Versioning and Publishing packages
2023-04-03 15:38:50 +02:00
Package publishing has been configured using [Changesets](https://github.com/changesets/changesets). Here is their [documentation](https://github.com/changesets/changesets#documentation) for more information about the workflow.
2023-04-03 11:45:27 +02:00
2023-04-03 15:38:50 +02:00
The [GitHub Action](https://github.com/changesets/action) needs an `NPM_TOKEN` and `GITHUB_TOKEN` in the repository settings. The [Changesets bot](https://github.com/apps/changeset-bot) should also be installed on the GitHub repository.
2023-04-03 11:45:27 +02:00
2023-04-03 15:38:50 +02:00
Read the [changesets documentation](https://github.com/changesets/changesets/blob/main/docs/automating-changesets.md) for more information about this automation
2023-04-03 11:45:27 +02:00
### npm
If you want to publish package to the public npm registry and make them publicly available, this is already setup.
To publish packages to a private npm organization scope, **remove** the following from each of the `package.json`'s
```diff
- "publishConfig": {
- "access": "public"
- },
```
### GitHub Package Registry
See [Working with the npm registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#publishing-a-package-using-publishconfig-in-the-packagejson-file)
2023-04-03 15:38:50 +02:00
### TODOs
- Buf setup to get grpc stub in the core package
- Decide whether a seperate client package is required to expose public client convenience methods only or generate a grpc-web output there
- Fix #/\* path in login application
2023-05-05 16:32:57 +02:00
### Run Login UI
To run the application make sure to install the dependencies with
```sh
pnpm install
```
2023-05-05 17:25:46 +02:00
then setup the environment for the login application which needs a `.env.local` in `/apps/login`.
Go to your instance and create a service user for the application having the IAM_OWNER manager role.
This user is required to have access to create users on your primary organization and reading policy data so it can be restricted to your personal use case but we'll stick with IAM_OWNER for convenience. Create a PAT and copy the value to paste it under the `ZITADEL_SERVICE_USER_TOKEN` key.
The file should look as follows:
```
ZITADEL_API_URL=[yourinstanceurl]
ZITADEL_ORG_ID=[yourprimaryorg]
ZITADEL_SERVICE_USER_TOKEN=[yourserviceuserpersonalaccesstoken]
```
2023-05-05 16:32:57 +02:00
then generate the GRPC stubs with
```sh
pnpm generate
```
and then run it with
```sh
pnpm dev
```
Open the login application with your favorite browser at `localhost:3000`.