diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..2766c310e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* text=auto eol=lf + +*.bat text=auto eol=crlf \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 659fe2184..e31698560 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,10 +5,24 @@ I want to think you first for considering contributing to ZenStack 🙏🏻. It' ## Prerequisites - [Node.js](https://nodejs.org/): v18 or above -- [pnpm](https://pnpm.io/): latest version +- [pnpm](https://pnpm.io/): v8.x + +If you want to run the tests, you should be aware that some of the integration tests run against postgres. These tests will attempt to set up and subsequently their own database, so you'll need to provide a connection details for a postgres user with at least those permissions. To provide connection details, you can configure the following environment variables or provide them when executing `pnpm test` commands. + +- `ZENSTACK_TEST_DB_USER`: The postgres username, for a user with permission to create/drop databases. Default: `postgres`. +- `ZENSTACK_TEST_DB_PASS`: Password for said user. Default: `abc123`. +- `ZENSTACK_TEST_DB_NAME`: Default database to connect onto. This database isn't used any further, so it's recommended to just use the default `postgres` database. Default: `postgres`. +- `ZENSTACK_TEST_DB_HOST`: Hostname or IP to connect onto. Default: `localhost`. +- `ZENSTACK_TEST_DB_PORT`: Port number to connect onto. Default: `5432`. ## Get started +1. (Windows only) Your environment should support symlinks, by enabling "Developer mode" in `Settings => System => For developers` (Windows 10/11 only) and setting the `core.symlinks` setting in git to `true`. For more info [refer to this StackOverflow answer](https://stackoverflow.com/questions/5917249/git-symbolic-links-in-windows/59761201#59761201). + + ```pwsh + git config --global core.symlinks true + ``` + 1. Make a fork of the repository Make sure all branches are included. diff --git a/packages/ide/jetbrains/package.json b/packages/ide/jetbrains/package.json index 7f18e5e4a..5392f2b67 100644 --- a/packages/ide/jetbrains/package.json +++ b/packages/ide/jetbrains/package.json @@ -6,12 +6,15 @@ "homepage": "https://zenstack.dev", "private": true, "scripts": { - "build": "./gradlew buildPlugin" + "build": "run-script-os", + "build:win32": "gradlew.bat buildPlugin", + "build:default": "./gradlew buildPlugin" }, "author": "ZenStack Team", "license": "MIT", "devDependencies": { - "zenstack": "workspace:*", - "@zenstackhq/language": "workspace:*" + "@zenstackhq/language": "workspace:*", + "run-script-os": "^1.1.6", + "zenstack": "workspace:*" } } diff --git a/packages/language/package.json b/packages/language/package.json index 01ae8ec10..9ed8397d9 100644 --- a/packages/language/package.json +++ b/packages/language/package.json @@ -9,7 +9,7 @@ "generate": "langium generate && npx ts-node script/generate-plist.ts", "watch": "concurrently \"langium generate --watch\" \"tsc --watch\"", "lint": "eslint src --ext ts", - "build": "pnpm lint --max-warnings=0 && pnpm clean && pnpm generate && tsc && copyfiles -F ./README.md ./LICENSE ./package.json 'syntaxes/**/*' dist && pnpm pack dist --pack-destination ../../../.build", + "build": "pnpm lint --max-warnings=0 && pnpm clean && pnpm generate && tsc && copyfiles -F ./README.md ./LICENSE ./package.json \"syntaxes/**/*\" dist && pnpm pack dist --pack-destination ../../../.build", "prepublishOnly": "pnpm build" }, "publishConfig": { diff --git a/packages/plugins/trpc/package.json b/packages/plugins/trpc/package.json index 7027f2d0a..9e4f1a4c5 100644 --- a/packages/plugins/trpc/package.json +++ b/packages/plugins/trpc/package.json @@ -10,7 +10,7 @@ }, "scripts": { "clean": "rimraf dist", - "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && copyfiles ./package.json ./README.md ./LICENSE 'res/**/*' dist && pnpm pack dist --pack-destination ../../../../.build", + "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && copyfiles ./package.json ./README.md ./LICENSE \"res/**/*\" dist && pnpm pack dist --pack-destination ../../../../.build", "watch": "tsc --watch", "lint": "eslint src --ext ts", "test": "jest", diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 12aa58df1..6609dadc8 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -9,7 +9,7 @@ }, "scripts": { "clean": "rimraf dist", - "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && tsup-node --config ./tsup-browser.config.ts && tsup-node --config ./tsup-cross.config.ts && copyfiles ./package.json ./README.md ../../LICENSE dist && copyfiles -u1 'res/**/*' dist && pnpm pack dist --pack-destination '../../../.build'", + "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && tsup-node --config ./tsup-browser.config.ts && tsup-node --config ./tsup-cross.config.ts && copyfiles ./package.json ./README.md ../../LICENSE dist && copyfiles -u1 \"res/**/*\" dist && pnpm pack dist --pack-destination ../../../.build", "watch": "concurrently \"tsc --watch\" \"tsup-node --config ./tsup-browser.config.ts --watch\" \"tsup-node --config ./tsup-cross.config.ts --watch\"", "lint": "eslint src --ext ts", "prepublishOnly": "pnpm build" diff --git a/packages/schema/package.json b/packages/schema/package.json index a27f41f3b..90d3d8edd 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -80,7 +80,7 @@ "vscode:prepublish": "pnpm bundle", "vscode:package": "pnpm bundle && vsce package --no-dependencies", "clean": "rimraf dist", - "build": "pnpm clean && pnpm lint --max-warnings=0 && tsc && copyfiles -F \"bin/*\" dist && copyfiles ./README-global.md ./LICENSE ./package.json dist && renamer --replace \"README.md\" dist/README-global.md && copyfiles -u 1 \"src/res/*\" dist && node build/post-build.js && pnpm pack dist --pack-destination '../../../.build'", + "build": "pnpm clean && pnpm lint --max-warnings=0 && tsc && copyfiles -F \"bin/*\" dist && copyfiles ./README-global.md ./LICENSE ./package.json dist && renamer --replace \"README.md\" dist/README-global.md && copyfiles -u 1 \"src/res/*\" dist && node build/post-build.js && pnpm pack dist --pack-destination ../../../.build", "bundle": "rimraf bundle && pnpm lint --max-warnings=0 && node build/bundle.js --minify", "watch": "tsc --watch", "lint": "eslint src tests --ext ts", diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 436a715a6..274039a58 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -6,7 +6,7 @@ "scripts": { "clean": "rimraf dist", "lint": "eslint src --ext ts", - "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && copyfiles ./package.json ./LICENSE ./README.md dist && pnpm pack dist --pack-destination '../../../.build'", + "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && copyfiles ./package.json ./LICENSE ./README.md dist && pnpm pack dist --pack-destination ../../../.build", "watch": "tsc --watch", "prepublishOnly": "pnpm build" }, diff --git a/packages/server/package.json b/packages/server/package.json index 1802f0771..7dab9fe75 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -6,7 +6,7 @@ "homepage": "https://zenstack.dev", "scripts": { "clean": "rimraf dist", - "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && copyfiles ./package.json ./README.md ./LICENSE dist && pnpm pack dist --pack-destination '../../../.build'", + "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && copyfiles ./package.json ./README.md ./LICENSE dist && pnpm pack dist --pack-destination ../../../.build", "watch": "tsc --watch", "lint": "eslint src --ext ts", "test": "jest", diff --git a/packages/testtools/package.json b/packages/testtools/package.json index 2c3bc1ae1..324296dda 100644 --- a/packages/testtools/package.json +++ b/packages/testtools/package.json @@ -11,7 +11,7 @@ "scripts": { "clean": "rimraf dist", "lint": "eslint src --ext ts", - "build": "pnpm lint && pnpm clean && tsc && copyfiles ./package.json ./LICENSE ./README.md dist && pnpm pack dist --pack-destination '../../../.build'", + "build": "pnpm lint && pnpm clean && tsc && copyfiles ./package.json ./LICENSE ./README.md dist && pnpm pack dist --pack-destination ../../../.build", "watch": "tsc --watch", "prepublishOnly": "pnpm build" }, diff --git a/packages/testtools/src/db.ts b/packages/testtools/src/db.ts index 8de49a7c1..16142d527 100644 --- a/packages/testtools/src/db.ts +++ b/packages/testtools/src/db.ts @@ -1,16 +1,31 @@ import { Pool } from 'pg'; -const USERNAME = 'postgres'; -const PASSWORD = 'abc123'; +const USERNAME = process.env.ZENSTACK_TEST_DB_USER || 'postgres'; +const PASSWORD = process.env.ZENSTACK_TEST_DB_PASS || 'abc123'; +const CONNECTION_DB = process.env.ZENSTACK_TEST_DB_NAME || 'postgres'; +const HOST = process.env.ZENSTACK_TEST_DB_HOST || 'localhost'; +const PORT = (process.env.ZENSTACK_TEST_DB_PORT ? parseInt(process.env.ZENSTACK_TEST_DB_PORT) : null) || 5432; + +function connect() { + return new Pool({ + user: USERNAME, + password: PASSWORD, + database: CONNECTION_DB, + host: HOST, + port: PORT + }); +} export async function createPostgresDb(db: string) { - const pool = new Pool({ user: USERNAME, password: PASSWORD }); + const pool = connect(); await pool.query(`DROP DATABASE IF EXISTS "${db}";`); await pool.query(`CREATE DATABASE "${db}";`); - return `postgresql://${USERNAME}:${PASSWORD}@localhost:5432/${db}`; + await pool.end(); + return `postgresql://${USERNAME}:${PASSWORD}@${HOST}:${PORT}/${db}`; } export async function dropPostgresDb(db: string) { - const pool = new Pool({ user: USERNAME, password: PASSWORD }); + const pool = connect(); await pool.query(`DROP DATABASE IF EXISTS "${db}";`); + await pool.end(); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a8e8c7318..8bb3f206a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,6 +65,9 @@ importers: '@zenstackhq/language': specifier: workspace:* version: link:../../language/dist + run-script-os: + specifier: ^1.1.6 + version: 1.1.6 zenstack: specifier: workspace:* version: link:../../schema/dist @@ -13062,6 +13065,11 @@ packages: dependencies: queue-microtask: 1.2.3 + /run-script-os@1.1.6: + resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} + hasBin: true + dev: true + /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: