mirror of
https://github.com/hcengineering/platform.git
synced 2026-09-08 02:37:44 +02:00
Add 'foundations/core/' from commit '4f31d1b32637d2f124f555531ee12be8af3fd4fc'
git-subtree-dir: foundations/core git-subtree-mainline:16b1109180git-subtree-split:4f31d1b326
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# GitHub Copilot Instructions - Huly Core
|
||||
|
||||
**Type**: Rush monorepo (TypeScript)
|
||||
**License**: EPL-2.0
|
||||
**Build System**: Rush v5.158.1 + pnpm v10.15.1
|
||||
|
||||
## Critical Rules
|
||||
|
||||
1. **Always use Rush commands**, never npm/pnpm directly: `rush install`, `rush build`, `rush test`, `rush update`
|
||||
2. **Internal dependencies must use `workspace:^` protocol** in package.json
|
||||
3. **All packages extend `@hcengineering/platform-rig`** for tsconfig/eslint - don't override configs
|
||||
4. **Co-locate tests** in `src/__tests__/` directories (Jest + ts-jest)
|
||||
5. **Named exports only** - avoid default exports
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
rush install && rush build # Initial setup
|
||||
rush build:watch # Development mode
|
||||
rush rebuild # Force clean rebuild (clears cache)
|
||||
rush test # Run all tests
|
||||
```
|
||||
|
||||
## Package Structure (All packages follow this)
|
||||
|
||||
```
|
||||
packages/<name>/
|
||||
├── src/index.ts # Main entry (exports)
|
||||
├── lib/ # Compiled JS (gitignored)
|
||||
├── types/ # TS declarations (gitignored)
|
||||
├── package.json # Scope: @hcengineering/, main: lib/index.js
|
||||
├── tsconfig.json # Extends platform-rig
|
||||
└── jest.config.js # preset: 'ts-jest', roots: ['./src']
|
||||
```
|
||||
|
||||
## Key Architecture Patterns
|
||||
|
||||
**Plugin System**: `@hcengineering/platform` provides dependency injection. Packages register resources/services via plugin manifests. Example: `packages/core/src/plugin.ts`
|
||||
|
||||
**Data Flow**: `core` → abstract models (Doc, Ref, Class) → `client` → concrete implementations → WebSocket/REST via `api-client`
|
||||
|
||||
**Text Processing**: Modular `text-*` packages (core/html/markdown/ydoc) support extensible rich-text editing with Yjs collaboration
|
||||
|
||||
**Storage Abstraction**: `storage` package defines interfaces; `storage-client` provides implementations; backends are pluggable
|
||||
|
||||
## Common Tasks
|
||||
|
||||
**Add a package**: Create under `packages/`, add standard files (see structure above), register in `rush.json` if needed, run `rush update`
|
||||
|
||||
**Debug build failures**: Check `<package>/rush-logs/` and `.build/build.tsbuildinfo`; use `rush rebuild` to clear incremental state
|
||||
|
||||
**Run single package tests**: `cd packages/<name> && rushx test`
|
||||
|
||||
**Update dependencies**: Edit package.json, run `rush update`, verify with `rush build`
|
||||
|
||||
## Where to Look
|
||||
|
||||
- **Rush config**: `common/config/rush/`, `rush.json`
|
||||
- **Shared scripts**: `common/scripts/` (coverage merging, install helpers)
|
||||
- **Core abstractions**: `packages/core/src/` (Doc, Hierarchy, TxOperations)
|
||||
- **Platform runtime**: `packages/platform/src/` (plugin loader, resources)
|
||||
- **Client layer**: `packages/client/src/` (LiveQuery, TxOperations client wrapper)
|
||||
|
||||
## Watch Out For
|
||||
|
||||
- Rush uses **incremental builds** - cached artifacts in `.build/` and `common/temp/`
|
||||
- **TypeScript strict mode** enabled - type safety enforced
|
||||
- **platform-rig** centralizes tooling configs (ESLint, Prettier, tsconfig)
|
||||
- Check `common/temp/rush-recycler/` for moved files during dependency updates
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ['main']
|
||||
tags:
|
||||
- 'v0.7.*'
|
||||
- 's0.7.*'
|
||||
pull_request:
|
||||
branches: ['main']
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 2
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 22
|
||||
- name: Verify Change Logs
|
||||
run: node common/scripts/install-run-rush.js change --verify
|
||||
- name: Rush Install
|
||||
run: node common/scripts/install-run-rush.js install
|
||||
- name: Rush check
|
||||
run: node common/scripts/install-run-rush.js check --verbose
|
||||
- name: Rush validate
|
||||
run: node common/scripts/install-run-rush.js validate --verbose
|
||||
- name: Rush test
|
||||
run: node common/scripts/install-run-rush.js test --verbose
|
||||
- name: Formatting...
|
||||
run: node common/scripts/install-run-rush.js format --force
|
||||
- name: Check files formatting
|
||||
run: |
|
||||
echo '================================================================'
|
||||
echo 'Checking for diff files'
|
||||
echo '================================================================'
|
||||
git diff '*.js' '*.ts' '*.svelte' '*.json' '*.yaml' | cat
|
||||
[ -z "$(git diff --name-only '*.js' '*.ts' '*.svelte' '*.json' '*.yaml' | cat)" ]
|
||||
echo '================================================================'
|
||||
- name: Publish packages
|
||||
if: startsWith(github.ref, 'refs/tags/v0.7.') || startsWith(github.ref, 'refs/tags/s0.7.')
|
||||
env:
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
run: node common/scripts/install-run-rush.js publish --include-all --publish
|
||||
Reference in New Issue
Block a user