Files
+1 98652c6476 Include sub projects (#10201)
* Add bump-changes

* Add utility tests

* Add utility tests

* Bump to new version of esbuild and typescript

* v0.7.3

* use platform rig 0.7.10

* upgrade: memory engine optimized; change name  to  (was recommended by Copilot and Onnikov, TODO: CHANGE CLIENT TOO!!!)

Signed-off-by: Leonid Kaganov <lleo@lleo.me>

* Fix rate limits bug

* Bump versions

* Fix lock file

* Fix bug in queue cleanup

* Add more tests for queue

* Add api-test tests

* Initial commit

* Improve hierarchy + tests

Add tests for hierarchy and few performance/memory  optimizations.

* Add more hierarchy tests

* Move from Huly platform repository

* Add docker tests setup

* Fix test to be executed only once

* Add connection tests

* Fix package include source files

* More tests

* Create README.md

* Fix pnpm lock

* Fix packages publish

* Remove broken tests

* feat: adjust hulylake client for storage adapter

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Fix export

* Fix publish

* Fix message update (#114)

Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>

* Bump version

Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>

* Bump versions

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Fix lang store (#115)

Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>

* update hulylake client

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Bump version

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Add hulylake storage adapter

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Bump version

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* fix validation issues

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* fix: do not fail on deseralization error and add logs

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* bump version -> 0.1.14

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* fix collaboration test

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Update prettier and new update-deps script

Prettier + svelte support

* fix unstable ydoc tests

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Add tx ordering middleware

* Fix ordering tests

* Fix Kafka close of admin

* Add tests for measurement and understand overhead

* Fix not updated lock file

* Fix update-deps

* Fix update-deps

* Use latest platform-rig

* Fix deps

* Add rush check to CI

* Use latest versions

* Bump versions

* Fix lock file

* validate json patch

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* bump version -> 0.1.15

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* fix merge unit tests

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Script to sync eslint deps

* Fix deps

* Fix tests

* Fix platform-rig detection

* Update to latest platform-rig

* Update to latest platform rig and core

* Bump typescript

* Bump typescript

* Rollback eslint plugins

* Fix lock file

* Bump platform-rig

* Update to latest platform-rig

* update to latest platform-rig

* Allow to compile svelte files

* Add ui-test component for checking compile

* Fix log levels rename compile ui -> compile ui-esbuild

* Fix build

* Bump esbuild svelte version

* Chore: use fixed versions in update-deps

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>

* Chore: commit changes

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>

* Update deps

* Add tests for session manager

* Fix txOrdering implementation

* Bump ordering

* Prevent metrics zero values in measure

+ Fix format svelte files

* Revert update-deps script logic

* v0.7.19

* update to latest platform-rig

* Update deps

* Fix pnpm

* Session counters

* Fix pnpm lock

* Add storage client

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Bump versions

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* fix versions

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Bump core

* Fix pnpm

* Get rid of communication dependency

* Add copilot memory file

* Use proper name for instructions file

* Fix instructions

* Use domain instead of test name in gauges

* Update instructions file

* fix front service upload

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* remove incorrect test

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Move packages to huly.core

* Move packages to core, since they are not utils

* Add global user profile

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>

* Fix lock file

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>

* Add support for memory limit check

* Bump version

* Fix pnpm

* report more accurate upload progress

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* fic validation issues

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Fix deps

Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>

* Move LowLevelStorage to server

* Fix linting

* Revert "Fix linting"

This reverts commit 54631d353e.

* Revert "Move LowLevelStorage to server"

This reverts commit aafb8f6f12.

* feature: add regorus engine with permit file

Signed-off-by: Leonid Kaganov <lleo@lleo.me>

* Fix one second counters for memory usage

* Fix kafka test

* use fresh core

* Version bump

* fix: key parameter added

Signed-off-by: Leonid Kaganov <lleo@lleo.me>

* Fix readme and few author mistakes

* Export domain schemas

* Bump version

* Tests (#117)

Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>

* Bump version

Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>

* feat: compact compact worker (#4)

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* bump version -> 0.1.16

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Add TypeIdentifier

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Add change logs

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* rename send -> try_send

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Bump

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Fix pnpm lock

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Add identifier middleware, bump core

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Add subsciption methods to account client

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>

* Fix lock file

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>

* Fix reaction notification (#118)

Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>

* Bump version

Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>

* Improve find methods schemas to convert to valid types

Signed-off-by: Nikolay Marchuk <nikolay.marchuk@hardcoreeng.com>

* Add change description

Signed-off-by: Nikolay Marchuk <nikolay.marchuk@hardcoreeng.com>

* Do not transcode while recording

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Open telemetry support

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* use proper content type in multipart upload

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Bump versions

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* fix build (#26)

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Fix peers (#120)

Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>

* Bump version

Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>

* Add ActivityCollaborativeChange

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Update pnpm

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Allow to suspend errors on with

* Fix pnpm cache

* update versions

* v0.7.17 for all

* v0.7.11

* v0.7.14

* remove arc from worker

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* bump version -> 0.1.17

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Rank for attributes

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Update pnpm

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Fix one second counters

* Fix withContext and allow pass options

* Fix formatting

* Use updated deps

* Bump versions

* Update deps

* Update deps to platform.core

* add support for textColor mark

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* add support for textStyle mark

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Bump versions

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Bump versions again

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Fix

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Rework on second timers

* fix merge of large blobs feched from s3

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* bump version -> 0.1.18

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* New subscription methods in account-client

* Update lock file

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>

* Send error on find for wrong domain

* Suspend connect custom errors events in traces

* Bump client

* Bump core

* update deps

* Fix lock file

* Sorting for TypeIdentifier

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Bump version

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* add workspace usage info

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Bump versions

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>

* Improve pg security perfomance

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Fix identifier middleware

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Update TxAccessLevel interface

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>

* Allow guest to update its identities

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>

* Add password login locked platform status

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>

* Fix Uptrace normalizeMarkdown errors

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Add change log

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Add txMatch to permission

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* update pnpm lock

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Bump

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Fix permission middleware

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Fix enum sorting

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Enable formatting check

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>

* Enable formatting check

* Add change

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>

* Fix Uptrace NaN error

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* feature: removed actors, improved performance

Signed-off-by: Leonid Kaganov <lleo@lleo.me>

* feature: ping from server to clients added

Signed-off-by: Leonid Kaganov <lleo@lleo.me>

* feature: ping from server to clients added

Signed-off-by: Leonid Kaganov <lleo@lleo.me>

* Compress kafka messages and fix exception in findAll

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Bump versions

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Bump versions

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Rush change

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Fix compression param

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Trigger change

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Clean up

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Trigger change

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Bump markdown version

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Enable sub projects

* Fix wrong double symbol scripts

* Include foundation packages

* Add support for custom exclude filters

Add support for custom exclude filters - by Andrey Sobolev - haiodo@gmail.com

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>

* Bump

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>

* Fix Uptrace filter is not a function error

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Sync versions

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>

---------

Signed-off-by: Leonid Kaganov <lleo@lleo.me>
Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>
Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>
Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
Signed-off-by: Nikolay Marchuk <nikolay.marchuk@hardcoreeng.com>
Signed-off-by: Artem Savchenko <armisav@gmail.com>
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
Co-authored-by: Leonid Kaganov <lleo@lleo.me>
Co-authored-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
Co-authored-by: Alexander Onnikov <Alexander.Onnikov@gmail.com>
Co-authored-by: Kristina <kristin.fefelova@gmail.com>
Co-authored-by: Alexey Zinoviev <alexey.zinoviev@xored.com>
Co-authored-by: Denis Bykhov <bykhov.denis@gmail.com>
Co-authored-by: Nikolay Marchuk <nikolay.marchuk@hardcoreeng.com>
Co-authored-by: Alexander Onnikov <aonnikov@hardcoreeng.com>
Co-authored-by: Artem Savchenko <armisav@gmail.com>
2025-11-26 19:15:30 +05:00

336 lines
9.2 KiB
JavaScript
Executable File

#!/usr/bin/env node
//
// Copyright © 2025 Hardcore Engineering Inc.
//
// Script to check and update @hcengineering/* dependencies across all Rush packages
//
const fs = require('fs')
const path = require('path')
const https = require('https')
const { execSync } = require('child_process')
const SCOPE = '@hcengineering/'
/**
* Get list of Rush projects using 'rush list --json'
*/
function getRushProjects() {
try {
const output = execSync('rush list --json', {
encoding: 'utf-8',
stdio: ['pipe', 'pipe', 'pipe']
})
const data = JSON.parse(output)
// rush list --json returns { projects: [...] }
const projects = data.projects || data
if (!Array.isArray(projects)) {
throw new Error('Expected rush list --json to return an array of projects')
}
return projects
} catch (err) {
if (err.message.includes('rush') || err.code === 'ENOENT') {
throw new Error('Failed to run "rush list --json". Make sure you are in a Rush workspace and Rush is installed.')
}
throw new Error(`Failed to get Rush projects: ${err.message}`)
}
}
/**
* Get the workspace root from rush list output
*/
function getWorkspaceRoot(projects) {
if (projects.length === 0) {
return process.cwd()
}
// Use fullPath from rush list output
const firstProject = projects[0]
if (firstProject.fullPath && firstProject.path) {
// Remove the relative path part from the full path to get workspace root
return firstProject.fullPath.replace(new RegExp(firstProject.path + '$'), '')
}
// Fallback: find rush.json
let currentDir = process.cwd()
while (currentDir !== '/') {
const rushJsonPath = path.join(currentDir, 'rush.json')
if (fs.existsSync(rushJsonPath)) {
return currentDir
}
currentDir = path.dirname(currentDir)
}
throw new Error('Could not determine workspace root')
}
/**
* Get the latest version of a package from npm registry
*/
function getLatestVersion(packageName) {
return new Promise((resolve, reject) => {
const url = `https://registry.npmjs.org/${packageName}/latest`
https
.get(url, (res) => {
let data = ''
res.on('data', (chunk) => {
data += chunk
})
res.on('end', () => {
if (res.statusCode === 200) {
try {
const parsed = JSON.parse(data)
resolve(parsed.version)
} catch (err) {
reject(new Error(`Failed to parse response for ${packageName}: ${err.message}`))
}
} else if (res.statusCode === 404) {
resolve(null) // Package not found in registry
} else {
reject(new Error(`HTTP ${res.statusCode} for ${packageName}`))
}
})
})
.on('error', (err) => {
reject(err)
})
})
}
/**
* Compare versions (simple semver comparison)
*/
function isNewerVersion(current, latest) {
// Remove workspace: prefix and version operators
current = current.replace(/^workspace:|[\^~><=]/g, '')
const currentParts = current.split('.').map(Number)
const latestParts = latest.split('.').map(Number)
for (let i = 0; i < 3; i++) {
if (latestParts[i] > currentParts[i]) return true
if (latestParts[i] < currentParts[i]) return false
}
return false
}
/**
* Check and update @hcengineering dependencies in a package.json
*/
async function updatePackageDependencies(project, latestVersions, dryRun = false) {
// Use fullPath from rush list output
const packageJsonPath = project.fullPath ? path.join(project.fullPath, 'package.json') : null
if (!packageJsonPath || !fs.existsSync(packageJsonPath)) {
return 0
}
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))
const packageName = packageJson.name
let hasChanges = false
const changes = []
const dependencyTypes = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']
for (const depType of dependencyTypes) {
const deps = packageJson[depType]
if (!deps) continue
for (const [depName, currentVersion] of Object.entries(deps)) {
if (!depName.startsWith(SCOPE)) continue
// Skip workspace dependencies
if (currentVersion.startsWith('workspace:')) {
continue
}
const latestVersion = latestVersions[depName]
if (!latestVersion) {
console.log(` ⚠️ ${depName}: not found in npm registry (current: ${currentVersion})`)
continue
}
if (isNewerVersion(currentVersion, latestVersion)) {
const prefix = currentVersion.match(/^[\^~]/)?.[0] || '^'
const newVersion = `${prefix}${latestVersion}`
changes.push({
depType,
depName,
oldVersion: currentVersion,
newVersion
})
if (!dryRun) {
deps[depName] = newVersion
hasChanges = true
}
}
}
}
if (changes.length > 0) {
console.log(`\n📦 ${packageName}`)
for (const change of changes) {
console.log(` ✓ ${change.depName}: ${change.oldVersion}${change.newVersion} (${change.depType})`)
}
if (!dryRun && hasChanges) {
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n', 'utf-8')
}
}
return changes.length
}
/**
* Get all @hcengineering packages and their latest versions
*/
async function fetchLatestVersions(projects) {
const packageNames = new Set()
// Collect all @hcengineering package names from all projects
for (const project of projects) {
const packageJsonPath = project.fullPath ? path.join(project.fullPath, 'package.json') : null
if (!packageJsonPath || !fs.existsSync(packageJsonPath)) continue
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))
const dependencyTypes = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']
for (const depType of dependencyTypes) {
const deps = packageJson[depType]
if (!deps) continue
for (const depName of Object.keys(deps)) {
if (depName.startsWith(SCOPE)) {
packageNames.add(depName)
}
}
}
}
console.log(`\n🔍 Checking latest versions for ${packageNames.size} @hcengineering packages...\n`)
const latestVersions = {}
const promises = Array.from(packageNames).map(async (packageName) => {
try {
const version = await getLatestVersion(packageName)
if (version) {
latestVersions[packageName] = version
console.log(` ✓ ${packageName}@${version}`)
} else {
console.log(` ⚠️ ${packageName}: not found in registry`)
}
} catch (err) {
console.error(` ✗ ${packageName}: ${err.message}`)
}
})
await Promise.all(promises)
return latestVersions
}
/**
* Main function
*/
async function main() {
const args = process.argv.slice(2)
// Show help
if (args.includes('--help') || args.includes('-h')) {
console.log(`
Rush @hcengineering Dependencies Updater
Usage:
update-hcengineering-deps [options]
Options:
--dry-run, -n Check for updates without modifying files
--help, -h Show this help message
Description:
This script checks all Rush packages for @hcengineering/* dependencies
and updates them to the latest versions available in npm registry.
Workspace dependencies (using 'workspace:' protocol) are never modified.
Examples:
# Check for updates (dry run)
update-hcengineering-deps --dry-run
# Apply updates
update-hcengineering-deps
After updating:
1. Run 'rush update' to update lockfiles
2. Run 'rush build' to verify builds
3. Test your changes
`)
return
}
const dryRun = args.includes('--dry-run') || args.includes('-n')
console.log('🚀 Rush @hcengineering Dependencies Updater\n')
// Get Rush projects using 'rush list --json'
const projects = getRushProjects()
const workspaceRoot = getWorkspaceRoot(projects)
console.log(`Workspace: ${workspaceRoot}`)
console.log(`Mode: ${dryRun ? 'DRY RUN (no changes will be made)' : 'UPDATE'}`)
console.log(`Found ${projects.length} projects`)
// Fetch latest versions from npm
const latestVersions = await fetchLatestVersions(projects)
if (Object.keys(latestVersions).length === 0) {
console.log('\n⚠️ No @hcengineering packages found in npm registry')
return
}
console.log('\n' + '='.repeat(80))
console.log('Checking for updates...')
console.log('='.repeat(80))
// Update each project's dependencies
let totalUpdates = 0
for (const project of projects) {
const updates = await updatePackageDependencies(project, latestVersions, dryRun)
totalUpdates += updates
}
console.log('\n' + '='.repeat(80))
if (totalUpdates === 0) {
console.log('✅ All @hcengineering dependencies are up to date!')
} else {
if (dryRun) {
console.log(`\n📊 Found ${totalUpdates} potential update(s)`)
console.log('\nRun without --dry-run flag to apply changes')
} else {
console.log(`\n✅ Updated ${totalUpdates} dependency version(s)`)
console.log('\n💡 Next steps:')
console.log(' 1. Run: rush update')
console.log(' 2. Run: rush build')
console.log(' 3. Test your changes')
}
}
}
// Run the script
main().catch((err) => {
console.error('\n❌ Error:', err.message)
process.exit(1)
})