From e1ab2cb4e219edb793f194ed2a2ea35ffb18bee7 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Sat, 26 Nov 2022 11:23:27 +0800 Subject: [PATCH 1/4] feat: add post-install tracking to CLI --- package.json | 2 +- packages/runtime/package.json | 2 +- packages/schema/.gitignore | 1 + packages/schema/build/bundle.js | 25 ++++++++++++++++++++++++- packages/schema/package.json | 5 +++-- packages/schema/script/post-install.js | 24 ++++++++++++++++++++++++ samples/todo/package.json | 2 +- 7 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 packages/schema/script/post-install.js diff --git a/package.json b/package.json index f85a235a8..2cf8af8e9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenstack-monorepo", - "version": "0.3.12", + "version": "0.3.17", "description": "", "scripts": { "build": "pnpm -r build", diff --git a/packages/runtime/package.json b/packages/runtime/package.json index e109c116c..b3509f408 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/runtime", "displayName": "ZenStack Runtime Library", - "version": "0.3.12", + "version": "0.3.17", "description": "Runtime of ZenStack for both client-side and server-side environments.", "repository": { "type": "git", diff --git a/packages/schema/.gitignore b/packages/schema/.gitignore index 54e9b11ea..5d5b5d0c9 100644 --- a/packages/schema/.gitignore +++ b/packages/schema/.gitignore @@ -3,3 +3,4 @@ /bundle *.vsix /README.md +/bin/post-install.js diff --git a/packages/schema/build/bundle.js b/packages/schema/build/bundle.js index 3813550ee..42c657982 100644 --- a/packages/schema/build/bundle.js +++ b/packages/schema/build/bundle.js @@ -33,6 +33,29 @@ require('esbuild') force: true, recursive: true, }); + + require('dotenv').config(); + + if (process.env.TELEMETRY_TRACKING_TOKEN) { + let postInstallContent = fs.readFileSync( + 'script/post-install.js', + 'utf-8' + ); + postInstallContent = postInstallContent.replace( + '', + process.env.TELEMETRY_TRACKING_TOKEN + ); + fs.writeFileSync('bin/post-install.js', postInstallContent, { + encoding: 'utf-8', + }); + } else { + fs.writeFileSync('bin/post-install.js', '', { + encoding: 'utf-8', + }); + } }) .then(() => console.log(success)) - .catch(() => process.exit(1)); + .catch((err) => { + console.error(err); + process.exit(1); + }); diff --git a/packages/schema/package.json b/packages/schema/package.json index 329c3c937..b0db20b0b 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -3,7 +3,7 @@ "publisher": "zenstack", "displayName": "ZenStack Language Tools", "description": "A toolkit for modeling data and access policies in full-stack development with Next.js and Typescript", - "version": "0.3.12", + "version": "0.3.17", "author": { "name": "ZenStack Team" }, @@ -79,7 +79,8 @@ "langium:watch": "langium generate --watch", "watch": "concurrently --kill-others \"npm:langium:watch\" \"npm:bundle-watch\"", "test": "jest", - "prepublishOnly": "cp ../../README.md ./ && pnpm build" + "prepublishOnly": "cp ../../README.md ./ && pnpm build", + "postinstall": "node bin/post-install.js" }, "dependencies": { "@zenstackhq/runtime": "workspace:../runtime/dist", diff --git a/packages/schema/script/post-install.js b/packages/schema/script/post-install.js new file mode 100644 index 000000000..202c26bf1 --- /dev/null +++ b/packages/schema/script/post-install.js @@ -0,0 +1,24 @@ +try { + if (process.env.DO_NOT_TRACK == '1') { + process.exit(0); + } + + const Mixpanel = require('mixpanel'); + const machineId = require('node-machine-id'); + const os = require('os'); + + const mixpanel = Mixpanel.init('', { + geolocate: true, + }); + + const version = require('../package.json').version; + const payload = { + distinct_id: machineId.machineIdSync(), + nodeVersion: process.version, + time: new Date(), + $os: os.platform(), + version, + }; + + mixpanel.track('npm:install', payload); +} catch {} diff --git a/samples/todo/package.json b/samples/todo/package.json index 31c6f672f..a74e6e693 100644 --- a/samples/todo/package.json +++ b/samples/todo/package.json @@ -1,6 +1,6 @@ { "name": "todo", - "version": "0.3.12", + "version": "0.3.17", "private": true, "scripts": { "dev": "next dev", From 605d4796612e995d394944ad4a0e7b7d877e9a1a Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Sat, 26 Nov 2022 11:28:18 +0800 Subject: [PATCH 2/4] add empty post-install script --- packages/schema/bin/post-install.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/schema/bin/post-install.js diff --git a/packages/schema/bin/post-install.js b/packages/schema/bin/post-install.js new file mode 100644 index 000000000..e69de29bb From a2b92a4332c8b8dc1b9c59a805dd12943ac24c75 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Sat, 26 Nov 2022 11:46:43 +0800 Subject: [PATCH 3/4] more update --- .github/workflows/build-test.yml | 1 + packages/schema/.gitignore | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 09d11a0bd..4a761f044 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -5,6 +5,7 @@ name: CI env: TELEMETRY_TRACKING_TOKEN: ${{ secrets.TELEMETRY_TRACKING_TOKEN }} + DO_NOT_TRACK: '1' on: push: diff --git a/packages/schema/.gitignore b/packages/schema/.gitignore index 5d5b5d0c9..54e9b11ea 100644 --- a/packages/schema/.gitignore +++ b/packages/schema/.gitignore @@ -3,4 +3,3 @@ /bundle *.vsix /README.md -/bin/post-install.js From d82e26c7ff1301f2f07c636b18101dcf3a3f2d57 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Sat, 26 Nov 2022 11:48:46 +0800 Subject: [PATCH 4/4] bump sample version --- samples/todo/package-lock.json | 37 +++++++++++++++++----------------- samples/todo/package.json | 4 ++-- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/samples/todo/package-lock.json b/samples/todo/package-lock.json index 678705d5f..6143d00f4 100644 --- a/samples/todo/package-lock.json +++ b/samples/todo/package-lock.json @@ -1,16 +1,16 @@ { "name": "todo", - "version": "0.3.12", + "version": "0.3.17", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "todo", - "version": "0.3.12", + "version": "0.3.17", "dependencies": { "@heroicons/react": "^2.0.12", "@prisma/client": "^4.4.0", - "@zenstackhq/runtime": "^0.3.12", + "@zenstackhq/runtime": "^0.3.17", "bcryptjs": "^2.4.3", "daisyui": "^2.31.0", "moment": "^2.29.4", @@ -35,7 +35,7 @@ "postcss": "^8.4.16", "tailwindcss": "^3.1.8", "typescript": "^4.6.2", - "zenstack": "^0.3.12" + "zenstack": "^0.3.17" } }, "../../packages/runtime": { @@ -752,9 +752,9 @@ } }, "node_modules/@zenstackhq/runtime": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@zenstackhq/runtime/-/runtime-0.3.12.tgz", - "integrity": "sha512-akXxw4h8uHOp4XHw5y1KSjL7A1URtRandWeXU82FLYBG6DKrjBUQuNhY2M+jD6BCboNiLOBzAJ54EPaJVr27uw==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@zenstackhq/runtime/-/runtime-0.3.17.tgz", + "integrity": "sha512-7TmC2u2GIG0ITMOJ8tf2fpyLGp3LiZJGMT68tE/AxB7j0NVgNGqnmsDOtmHdG0RATL8z0sRxw8HQDBPXCb1Aeg==", "dependencies": { "@types/bcryptjs": "^2.4.2", "bcryptjs": "^2.4.3", @@ -4605,12 +4605,13 @@ } }, "node_modules/zenstack": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/zenstack/-/zenstack-0.3.12.tgz", - "integrity": "sha512-oy1LiE18x7E2gGw+N+1eDOS5LXRTTUoYOvnBcBwflSSvHKdGddsIocrlSav/3y8uIwO2JdMjvh6NB88zpc11KA==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/zenstack/-/zenstack-0.3.17.tgz", + "integrity": "sha512-fRmDHcN8jotp4Jo4h7xNndJvgXtoF1wgyoYXpjafZEQQCbpVUb3Q6ML4GZmHBSMBp+e/7C0Mkpv42AFa5GNQdQ==", "dev": true, + "hasInstallScript": true, "dependencies": { - "@zenstackhq/runtime": "0.3.12", + "@zenstackhq/runtime": "0.3.17", "async-exit-hook": "^2.0.1", "change-case": "^4.1.2", "chevrotain": "^9.1.0", @@ -5129,9 +5130,9 @@ } }, "@zenstackhq/runtime": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@zenstackhq/runtime/-/runtime-0.3.12.tgz", - "integrity": "sha512-akXxw4h8uHOp4XHw5y1KSjL7A1URtRandWeXU82FLYBG6DKrjBUQuNhY2M+jD6BCboNiLOBzAJ54EPaJVr27uw==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@zenstackhq/runtime/-/runtime-0.3.17.tgz", + "integrity": "sha512-7TmC2u2GIG0ITMOJ8tf2fpyLGp3LiZJGMT68tE/AxB7j0NVgNGqnmsDOtmHdG0RATL8z0sRxw8HQDBPXCb1Aeg==", "requires": { "@types/bcryptjs": "^2.4.2", "bcryptjs": "^2.4.3", @@ -7926,12 +7927,12 @@ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "zenstack": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/zenstack/-/zenstack-0.3.12.tgz", - "integrity": "sha512-oy1LiE18x7E2gGw+N+1eDOS5LXRTTUoYOvnBcBwflSSvHKdGddsIocrlSav/3y8uIwO2JdMjvh6NB88zpc11KA==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/zenstack/-/zenstack-0.3.17.tgz", + "integrity": "sha512-fRmDHcN8jotp4Jo4h7xNndJvgXtoF1wgyoYXpjafZEQQCbpVUb3Q6ML4GZmHBSMBp+e/7C0Mkpv42AFa5GNQdQ==", "dev": true, "requires": { - "@zenstackhq/runtime": "0.3.12", + "@zenstackhq/runtime": "0.3.17", "async-exit-hook": "^2.0.1", "change-case": "^4.1.2", "chevrotain": "^9.1.0", diff --git a/samples/todo/package.json b/samples/todo/package.json index a74e6e693..8d28d8f50 100644 --- a/samples/todo/package.json +++ b/samples/todo/package.json @@ -21,7 +21,7 @@ "dependencies": { "@heroicons/react": "^2.0.12", "@prisma/client": "^4.4.0", - "@zenstackhq/runtime": "^0.3.12", + "@zenstackhq/runtime": "^0.3.17", "bcryptjs": "^2.4.3", "daisyui": "^2.31.0", "moment": "^2.29.4", @@ -46,6 +46,6 @@ "postcss": "^8.4.16", "tailwindcss": "^3.1.8", "typescript": "^4.6.2", - "zenstack": "^0.3.12" + "zenstack": "^0.3.17" } }