The OpenUPM service is composed of below sub-systems:
- Public upm registry
- *Automatic build pipelines
- *Website frontend
- *Website backend (API)
- *Package curated list
- OpenUPM-CLI command-line tool
* prefix are located in the main repository.
# Directory Structure
. ├── app # service backend │ ├── db # database, Redis │ ├── jobs # background jobs │ ├── models # models │ ├── queues # job queues │ ├── utils # useful scripts │ └── views # HTTP endpoints ├── config # configurations ├── data # data │ └── packages # package curated list (YAML files) ├── docs # web frontend (vuepress) └── tests # unit tests
# Public UPM Registry
OpenUPM uses a custom verdaccio to host the registry. Though verdaccio is the most popular open-source project to set up a private npm registry, most deployments served a very limited user base or for the testing purpose that doesn't care about performance much. OpenUPM try to solve quite a few issues related to the cluster deployment. Before these PRs get merged, OpenUPM will stay with the custom build:
- S3 storage with CDN #250
- Stateless s3 storage for cluster deployment #1595, #1459
npm publish -fand
npm unpublishreturn 404
- Wrong timestamp for old search api
Since OpenUPM has it's own way to organize the package list, the verdaccio website and API endpoints are disabled (headless mode).
# Automatic Build Pipelines
OpenUPM watches the package curated list regularly detects new contents and uses the job queue to build packages through Azure Pipelines.
# Job Queue
OpenUPM uses Bee-Queue to manage the job queue.
| ||fetch repo info and create build-rel jobs for valid Git tags|
| ||build pkg@version via Azure Pipelines|
# Website Frontend
OpenUPM uses VuePress - a static website generator to develop website frontend.
To enable webpack bundle analyzer:
WEBPACK_BUNDLE_ANALYZER=1 yarn docs:build
# Website Backend
OpenUPM uses Express to develop website backend (API).
# Package Curated List
OpenUPM uses git as a database to maintain the package curated list. Each package is described as a YAML file.