From a3a6a3f53681453ebf0a4d46d7dfe2c69e896dac Mon Sep 17 00:00:00 2001 From: supalarry Date: Mon, 15 Sep 2025 13:18:36 +0200 Subject: [PATCH 1/2] refactor: local dev use local libraries --- apps/api/v2/README.md | 21 ++-- apps/api/v2/package.json | 6 +- packages/platform/libraries/scripts/local.js | 25 ----- .../platform/libraries/scripts/postpublish.js | 97 ------------------- .../platform/libraries/scripts/prepublish.js | 65 ------------- yarn.lock | 14 +-- 6 files changed, 12 insertions(+), 216 deletions(-) delete mode 100644 packages/platform/libraries/scripts/local.js delete mode 100644 packages/platform/libraries/scripts/postpublish.js delete mode 100644 packages/platform/libraries/scripts/prepublish.js diff --git a/apps/api/v2/README.md b/apps/api/v2/README.md index a6dd8ab878c626..376f7257ccc97a 100644 --- a/apps/api/v2/README.md +++ b/apps/api/v2/README.md @@ -58,26 +58,22 @@ CALCOM_LICENSE_KEY=00000000-0000-0000-0000-000000000000 # Development +v2 api can't directly re-use monorepo code because nest.js works only with cjs. Which is why we have dependencies that we first build and watch for changes: ```bash -$ yarn run start +$ yarn local ``` -OR if you don't want to use docker, you can run following command. - +And then we run the app: ```bash -$ yarn dev:no-docker +$ yarn dev ``` -Additionally you can run following command(in different terminal) to ensure that any change in any of the dependencies is rebuilt and detected. It watches platform-libraries, platform-constants, platform-enums, platform-utils, platform-types. - -```bash -$ yarn run dev:build:watch -``` +if you make changes to code that v2 uses from platform-libraries or some other manually built dependency changes then wait for v2 to restart. -If you are making changes in packages/platform/libraries, you should run the following command too that would connect your local packages/platform/libraries to the api/v2 +OR if you don't want to use docker, you can run following command. ```bash -$ yarn local +$ yarn dev:no-docker ``` # watch mode @@ -87,9 +83,6 @@ $ yarn run start:dev $ yarn run start:prod ``` - - - ## Test ```bash diff --git a/apps/api/v2/package.json b/apps/api/v2/package.json index fadedd32a4b39c..8d53d33bcdf69e 100644 --- a/apps/api/v2/package.json +++ b/apps/api/v2/package.json @@ -16,8 +16,8 @@ "_dev:build:watch:enums": "yarn workspace @calcom/platform-enums build:watch", "_dev:build:watch:utils": "yarn workspace @calcom/platform-utils build:watch", "_dev:build:watch:types": "yarn workspace @calcom/platform-types build:watch", - "dev:build": "yarn workspace @calcom/platform-constants build && yarn workspace @calcom/platform-enums build && yarn workspace @calcom/platform-utils build && yarn workspace @calcom/platform-types build", - "dev": "yarn dev:build && ts-node scripts/docker-start.ts && yarn copy-swagger-module && yarn start --watch", + "dev:build": "yarn workspace @calcom/platform-constants build && yarn workspace @calcom/platform-enums build && yarn workspace @calcom/platform-utils build && yarn workspace @calcom/platform-types build && yarn workspace @calcom/platform-libraries build", + "dev": "ts-node scripts/docker-start.ts && yarn copy-swagger-module && yarn start --watch", "dev:no-docker": "yarn dev:build && yarn copy-swagger-module && yarn start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node ./dist/apps/api/v2/src/main.js", @@ -38,7 +38,7 @@ "@axiomhq/winston": "^1.2.0", "@calcom/platform-constants": "*", "@calcom/platform-enums": "*", - "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.359", + "@calcom/platform-libraries": "*", "@calcom/platform-types": "*", "@calcom/platform-utils": "*", "@calcom/prisma": "*", diff --git a/packages/platform/libraries/scripts/local.js b/packages/platform/libraries/scripts/local.js deleted file mode 100644 index 76694926242d49..00000000000000 --- a/packages/platform/libraries/scripts/local.js +++ /dev/null @@ -1,25 +0,0 @@ -import fs from "fs"; -import path from "path"; -import { fileURLToPath } from "url"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const VERSION = "9.9.9"; - -// note(Lauris): update libraries package.json version -const librariesPath = path.join(__dirname, ".."); -const librariesPackageJsonPath = path.join(librariesPath, "package.json"); -const librariesPackageJson = JSON.parse(fs.readFileSync(librariesPackageJsonPath, "utf8")); - -librariesPackageJson.version = VERSION; - -fs.writeFileSync(librariesPackageJsonPath, `${JSON.stringify(librariesPackageJson, null, 2)}\n`); - -// note(Lauris): update API v2 package.json dependency -const apiV2PackageJsonPath = path.join(librariesPath, "..", "..", "..", "apps", "api", "v2", "package.json"); -const apiV2PackageJson = JSON.parse(fs.readFileSync(apiV2PackageJsonPath, "utf8")); - -apiV2PackageJson.dependencies["@calcom/platform-libraries"] = `npm:@calcom/platform-libraries@${VERSION}`; - -fs.writeFileSync(apiV2PackageJsonPath, `${JSON.stringify(apiV2PackageJson, null, 2)}\n`); diff --git a/packages/platform/libraries/scripts/postpublish.js b/packages/platform/libraries/scripts/postpublish.js deleted file mode 100644 index c7ddd13f89a0ff..00000000000000 --- a/packages/platform/libraries/scripts/postpublish.js +++ /dev/null @@ -1,97 +0,0 @@ -import { spawn } from "child_process"; -import fs from "fs"; -import path from "path"; -import { fileURLToPath } from "url"; - -import { getCurrentVersion } from "./prepublish.js"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -main(); - -async function main() { - try { - // Get the published version before resetting - const librariesPath = path.join(__dirname, ".."); - const librariesPackageJsonPath = path.join(librariesPath, "package.json"); - const librariesPackageJson = JSON.parse(fs.readFileSync(librariesPackageJsonPath, "utf8")); - const publishedVersion = librariesPackageJson.version; - - // Wait for the npm registry to reflect our published version - await waitForNewestNpmRelease(publishedVersion); - - // Reset libraries package.json version to 0.0.0 - librariesPackageJson.version = "0.0.0"; - fs.writeFileSync(librariesPackageJsonPath, `${JSON.stringify(librariesPackageJson, null, 2)}\n`); - - // Update API v2 package.json dependency - const apiV2PackageJsonPath = path.join( - librariesPath, - "..", - "..", - "..", - "apps", - "api", - "v2", - "package.json" - ); - const apiV2PackageJson = JSON.parse(fs.readFileSync(apiV2PackageJsonPath, "utf8")); - - apiV2PackageJson.dependencies[ - "@calcom/platform-libraries" - ] = `npm:@calcom/platform-libraries@${publishedVersion}`; - fs.writeFileSync(apiV2PackageJsonPath, `${JSON.stringify(apiV2PackageJson, null, 2)}\n`); - - // Run yarn install - const yarnInstall = spawn("yarn", ["install"], { - stdio: "inherit", - cwd: path.join(librariesPath, "..", "..", ".."), - }); - - yarnInstall.on("close", (code) => { - if (code !== 0) { - console.error("yarn install failed"); - process.exit(1); - } - console.log("Successfully reset version and updated dependencies"); - }); - } catch (error) { - console.error("Error:", error); - process.exit(1); - } -} - -async function waitForNewestNpmRelease(publishedVersion) { - console.log(`Waiting for npm registry to update with version ${publishedVersion}...`); - let npmVersion; - let attempts = 0; - const maxAttempts = 12; - - while (true) { - attempts++; - npmVersion = await getCurrentVersion(); - - if (publishedVersion === npmVersion) { - console.log( - `Version match confirmed (${publishedVersion}) after ${attempts} attempts. Proceeding with updates...` - ); - break; - } - - if (attempts >= maxAttempts) { - console.log( - `Reached maximum attempts (${maxAttempts}). Latest npm version: ${npmVersion}, local version: ${publishedVersion}` - ); - console.log("Proceeding with updates anyway..."); - break; - } - - console.log( - `Attempt ${attempts}/${maxAttempts}: npm version (${npmVersion}) doesn't match local version (${publishedVersion}) yet. Retrying in 5 seconds...` - ); - await new Promise((resolve) => setTimeout(resolve, 5000)); - } - - return npmVersion; -} diff --git a/packages/platform/libraries/scripts/prepublish.js b/packages/platform/libraries/scripts/prepublish.js deleted file mode 100644 index 9e51ebd861d86f..00000000000000 --- a/packages/platform/libraries/scripts/prepublish.js +++ /dev/null @@ -1,65 +0,0 @@ -import fs from "fs"; -import https from "https"; -import path from "path"; -import { fileURLToPath } from "url"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -// Fetch current version from npm registry -export function getCurrentVersion() { - return new Promise((resolve, reject) => { - https - .get( - "https://registry.npmjs.org/@calcom/platform-libraries", - { - headers: { Accept: "application/json" }, - }, - (res) => { - let data = ""; - res.on("data", (chunk) => (data += chunk)); - res.on("end", () => { - try { - const packageInfo = JSON.parse(data); - const currentVersion = packageInfo["dist-tags"].latest; - resolve(currentVersion); - } catch (error) { - reject(error); - } - }); - } - ) - .on("error", reject); - }); -} - -// Increment patch version (a.b.c -> a.b.c+1) -function incrementPatchVersion(version) { - const parts = version.split("."); - parts[2] = String(Number(parts[2]) + 1); - return parts.join("."); -} - -async function main() { - try { - // Get and increment version - const currentVersion = await getCurrentVersion(); - const newVersion = incrementPatchVersion(currentVersion); - console.log(`Current version in npm: ${currentVersion}. Incremented locally to ${newVersion}`); - - // Update libraries package.json version - const librariesPath = path.join(__dirname, ".."); - const librariesPackageJsonPath = path.join(librariesPath, "package.json"); - const librariesPackageJson = JSON.parse(fs.readFileSync(librariesPackageJsonPath, "utf8")); - - librariesPackageJson.version = newVersion; - fs.writeFileSync(librariesPackageJsonPath, `${JSON.stringify(librariesPackageJson, null, 2)}\n`); - - console.log("Successfully incremented @calcom/platform-libraries package.json version."); - } catch (error) { - console.error("Error:", error); - process.exit(1); - } -} - -main(); diff --git a/yarn.lock b/yarn.lock index 1ec1fd34d479db..750a8e34b396bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2715,7 +2715,7 @@ __metadata: "@axiomhq/winston": ^1.2.0 "@calcom/platform-constants": "*" "@calcom/platform-enums": "*" - "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.359" + "@calcom/platform-libraries": "*" "@calcom/platform-types": "*" "@calcom/platform-utils": "*" "@calcom/prisma": "*" @@ -3774,17 +3774,7 @@ __metadata: languageName: unknown linkType: soft -"@calcom/platform-libraries@npm:@calcom/platform-libraries@0.0.359": - version: 0.0.359 - resolution: "@calcom/platform-libraries@npm:0.0.359" - dependencies: - "@calcom/features": "*" - "@calcom/lib": "*" - checksum: 265d73c95334e34d076406d943ba6e80cff0037b4cf4620ed86519d41ac8e24e643000b84773c1f17cece28c4f50bd1cd70a0306764908248a55af49b44f054f - languageName: node - linkType: hard - -"@calcom/platform-libraries@workspace:packages/platform/libraries": +"@calcom/platform-libraries@*, @calcom/platform-libraries@workspace:packages/platform/libraries": version: 0.0.0-use.local resolution: "@calcom/platform-libraries@workspace:packages/platform/libraries" dependencies: From d706af4179ed16fc0627003a69bed43855abd048 Mon Sep 17 00:00:00 2001 From: supalarry Date: Mon, 15 Sep 2025 13:36:54 +0200 Subject: [PATCH 2/2] refactor: use workspace* --- apps/api/v2/package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/api/v2/package.json b/apps/api/v2/package.json index 8d53d33bcdf69e..e2a1c6af99e8f5 100644 --- a/apps/api/v2/package.json +++ b/apps/api/v2/package.json @@ -38,7 +38,7 @@ "@axiomhq/winston": "^1.2.0", "@calcom/platform-constants": "*", "@calcom/platform-enums": "*", - "@calcom/platform-libraries": "*", + "@calcom/platform-libraries": "workspace:*", "@calcom/platform-types": "*", "@calcom/platform-utils": "*", "@calcom/prisma": "*", diff --git a/yarn.lock b/yarn.lock index 750a8e34b396bc..5692b0c61ed781 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2715,7 +2715,7 @@ __metadata: "@axiomhq/winston": ^1.2.0 "@calcom/platform-constants": "*" "@calcom/platform-enums": "*" - "@calcom/platform-libraries": "*" + "@calcom/platform-libraries": "workspace:*" "@calcom/platform-types": "*" "@calcom/platform-utils": "*" "@calcom/prisma": "*" @@ -3774,7 +3774,7 @@ __metadata: languageName: unknown linkType: soft -"@calcom/platform-libraries@*, @calcom/platform-libraries@workspace:packages/platform/libraries": +"@calcom/platform-libraries@workspace:*, @calcom/platform-libraries@workspace:packages/platform/libraries": version: 0.0.0-use.local resolution: "@calcom/platform-libraries@workspace:packages/platform/libraries" dependencies: