HausDAO / daohaus-monorepo-deprecated

MIT License
13 stars 5 forks source link

DAOhaus v3 Monorepo

DAOhaus is a no-code platform for summoning and managing Moloch DAOs. We've worked to reimagine our platform into multiple apps, libraries, and microservices. We're using a monorepo to streamline the development of all of these elements, and we used Nx to scaffold our monorepo.

If you'd like to join our community, we coordinate on Discord.

Packages

Our monorepo follows the recommended Nx structure with apps and libs folders. The apps folder contains our core applications, subgraphs, and infrastructure jobs. The libs has our utilities, librarires, and infrastructure resources.

Apps

Our applications in the apps folder are our DAO infrastructure and leverage our libraries, subgraphs, and contracts. Currently, we have two categories for these applications:

App Build Entry Points
Core App vite, ts apps/core-app
Hub App vite, ts apps/hub-app
Summoner App vite, ts apps/summon-app
DAO Producer Job webpack, ts apps/dao-producer-job
v3 Subgraph webpack, ts apps/v3-subgraph, apps/summoner-app

Libs

Our libraries in the libs folder are structured to be consumed by our apps as well as used by external developers using our tooling. Currently, we have three categories of libraries:

Lib Entry Point
ABI Utilities libs/abi-utilities
Contract Utilities libs/contract-utilties
Common Utilities libs/common-utilities
DAO Data SDK libs/dao-data-sdk
Component Library (UI) libs/ui
DAOhaus Connect libs/daohaus-connect-feature
Tx Builder libs/tx-builder-feature
Helm Chart Infrastructure Playbook libs/infra-chart

Getting Started

Our monorepos use Nx as a build system and for scaffolding. If this your first time using Nx, you'll have to install it globally on your system: npm install -g nx

Here is a basic guide. Each package README (and project.json) will have more details about commands within each package.


`git clone git@github.com:HausDAO/daohaus-monorepo.git` or `git@github.com:HausDAO/daohaus-monorepo.git`
# clone the entire monorepo at the top level on the develop branch
`nvm use`
# switch to node 16.16.0
`yarn global add nx`
# download nx globally for running nx commands
`yarn`
# run yarn to install all of the packages and dependencies

Once cloned and everything is installed, you'll be able to run each package! Package-level commands are run with nx run instead of yarn -- this may be new if you're used to working in a different monorepo structure. Each package has similar command structure, but some packages have additional commands.

The package-level commands can be found in each package's project.json.


# run a specific package locally (usually on localhost:3000)
# such as the component library or frontend applications

nx run app-name:serve

# example to run the Hub app:

nx run hub-app:serve

# lint a specific package

nx run app-name:lint

# example to lint the Hub app:

nx run hub-app:lint

# build a specific package:

nx run app-name:build

# example to build the Hub app:

nx run hub-app:build

Nx Generators

We've created generators that leverage nx with predetermined option flags.

React App

Our stack uses Vite as our React build tool. This generator will scaffold a new React app, such as a frontend app, using vite and styled-components.

nx g @nxext/react:application --name <name of app> --pascalCaseFiles true --routing true --style styled-components

TypeScript is enabled and included by default.

React Library

Our stack uses Vite as our React build tool. This generator will scaffold a new React library (such as a component library) with vite and styled-components.

TypeScript is enabled and included by default.

Notes: - use the --publishable flag for external libraries - use the --buildable flag for internal libraries

TypeScript Library

Notes: - use the --publishable flag for external libraries - use the --buildable flag for internal libraries

Node Application

Lamdba Application

Common Issues