diff --git a/.env.example b/.env.example index 04f5a45891..6a26d31932 100644 --- a/.env.example +++ b/.env.example @@ -34,4 +34,11 @@ SENTRY_DNS= SENTRY_DEBUG= # FEATURE TOGGLE -COMMENT_FEATURE_ENABLE= \ No newline at end of file +COMMENT_FEATURE_ENABLE= + +#SSO +SSO_DISABLE_SIGNUP= +SSO_RESTRICTED_DOMAIN= +SSO_GOOGLE_OAUTH2_CLIENT_ID= +SSO_GIT_OAUTH2_CLIENT_ID= +SSO_GIT_OAUTH2_CLIENT_SECRET= \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 535bb98225..cdd0be3fc0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,10 +1,11 @@ name: CI # Controls when the workflow will run on: - # Triggers the workflow on push or pull request events but only for the develop branch push: branches: [develop, main] pull_request: + types: [labeled, opened, synchronize, reopened] + # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -28,6 +29,10 @@ env: jobs: build: runs-on: ubuntu-latest + if: | + contains(github.event.pull_request.labels.*.name, 'run-ci') || + github.ref == 'refs/heads/main' || + github.ref == 'refs/heads/develop' steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it @@ -56,7 +61,10 @@ jobs: lint: runs-on: ubuntu-latest - + if: | + contains(github.event.pull_request.labels.*.name, 'run-ci') || + github.ref == 'refs/heads/main' || + github.ref == 'refs/heads/develop' steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 @@ -80,6 +88,7 @@ jobs: ${{ runner.os }}- - run: npm i -g npm@7.20.0 + - run: npm run build:plugins - run: npm --prefix frontend ci && npm --prefix server ci - run: npm --prefix server run lint && npm --prefix frontend run lint @@ -114,6 +123,9 @@ jobs: ${{ runner.os }}- - run: apt update && apt install -y postgresql - run: npm i -g npm@7.20.0 + - run: npm --prefix plugins ci + - run: npm --prefix plugins run create:client && npm --prefix plugins run create:server + - run: npm --prefix plugins run build:packages && npm --prefix plugins run build:server - run: npm --prefix server ci - run: npm --prefix server run db:create - run: npm --prefix server run db:migrate @@ -150,6 +162,9 @@ jobs: ${{ runner.os }}- - run: apt update && apt install -y postgresql - run: npm i -g npm@7.20.0 + - run: npm --prefix plugins ci + - run: npm --prefix plugins run create:client && npm --prefix plugins run create:server + - run: npm --prefix plugins run build:packages && npm --prefix plugins run build:server - run: npm --prefix server ci - run: npm --prefix server run db:create - run: npm --prefix server run db:migrate diff --git a/.version b/.version index 047fab311f..afaf360d37 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -0.13.6 \ No newline at end of file +1.0.0 \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 8e9ce74d63..24a4397851 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,5 +10,18 @@ ], "eslint.format.enable": true, "editor.formatOnSave": true, - + "json.schemas": [ + { + "fileMatch": [ + "/*.operations.json" + ], + "url": "https://raw.githubusercontent.com/ToolJet/ToolJet/develop/plugins/schemas/operations.schema.json" + }, + { + "fileMatch": [ + "/*.manifest.json" + ], + "url": "https://raw.githubusercontent.com/ToolJet/ToolJet/develop/plugins/schemas/manifest.schema.json" + } + ] } \ No newline at end of file diff --git a/Procfile b/Procfile index 6c630148df..4443fd3831 100644 --- a/Procfile +++ b/Procfile @@ -1,2 +1,2 @@ web: npm run start:prod --prefix server -release: npm run db:migrate --prefix server && npm run db:seed --prefix server +release: (export NODE_OPTIONS="--max_old_space_size=1024"; cd server && npm run db:migrate && node dist/scripts/seeds.js) diff --git a/README.md b/README.md index e4f3b18a5b..3e30e8d8e4 100644 --- a/README.md +++ b/README.md @@ -19,26 +19,49 @@ ToolJet is an **open-source low-code framework** to build and deploy internal to

- +

-## Features +--- -- Visual app builder with widgets, such as tables, charts, modals, buttons, dropdowns, and more. -- All widgets are responsive -- Mobile 📱 & desktop layouts 🖥 -- Dark mode -- Connect to databases, cloud storages and APIs. -- Deploy on-premise (supports Docker, Kubernetes, Heroku, AWS EC2, Google Cloud Run, and more). -- Granular access control on organization-level and app-level. -- Write JS code almost anywhere in the builder. -- Query editors for all supported data sources. -- Transform query results using JS code. -- All the credentials are securely encrypted using `aes-256-gcm`. -- ToolJet acts only as a proxy and doesn't store any data. -- Support for OAuth. +### Visual application builder +

+ + + +

+ + +![2_alt](https://user-images.githubusercontent.com/7828962/152912302-625f7f3e-3659-46cc-9be6-b52c4a3c370c.png) + + + +![3](https://user-images.githubusercontent.com/7828962/152912291-f5019ed6-e319-4b00-910f-ee7bdb1c05d7.png) +![Final_comment_final](https://user-images.githubusercontent.com/7828962/152912265-a9d4a25f-0853-43af-b92a-322af6b0a4eb.gif) +![5](https://user-images.githubusercontent.com/7828962/152912276-e85c16a4-438f-4b88-9072-18e60017f74b.png) +![6](https://user-images.githubusercontent.com/7828962/152912278-422458b9-eec0-477c-9554-672091734901.png) + + + +## All features + +- *Visual app builder:* 35+ built-in responsive widgets such as Tables, Charts, Lists, Forms, Progressbars, and more. +- *20+ data sources:* connect to databases, cloud storages and APIs. +- *Desktop & mobile*: ;layout widths can be customised to support different screens. +- *Self-host:* (supports Docker, Kubernetes, Heroku, AWS EC2, Google Cloud Run, and more). +- *Collaborate:* add comments anywhere on the canvas and tag your team members. +- *Extend with plugins:*: use our [commandline tool](https://www.npmjs.com/package/tooljet) to easily boostrap new connectors. +- *Version control:* every application have different versions with proper release cycle. +- *Run JS code:* ability custom JavaScript snippets +- *Granular access control* on organization-level and app-level. +- *low-code:* write JS code almost anywhere in the builder. For example, the color property of text can be set to `status === 'success' ? 'green' : 'red'` +- *no-code query editors* for all supported data sources. +- *Join and transform data:* transform query results using just JavaScript code. +- *Secure:* All the credentials are securely encrypted using `aes-256-gcm`. +- *Doesn't store data:* ToolJet acts only as a proxy and doesn't store any data. +- *SSO:* Supports multiple SSO providers
@@ -99,4 +122,4 @@ Kindly read our [Contributing Guide](CONTRIBUTING.md) to learn and understand ab ## Licence -ToolJet © 2021, ToolJet Solutions Inc - Released under the GNU Affero General Public License v3.0. +ToolJet © 2022, ToolJet Solutions Inc - Released under the GNU Affero General Public License v3.0. diff --git a/app.json b/app.json index 9fcc5e6d93..ede0a34322 100644 --- a/app.json +++ b/app.json @@ -3,7 +3,7 @@ "description": "ToolJet is an open-source low-code framework to build and deploy internal tools.", "website": "https://tooljet.io/", "repository": "https://github.com/tooljet/tooljet", - "logo": "https://app.tooljet.io/assets/images/logo.svg", + "logo": "https://tooljet.com/blue-logo.png", "success_url": "/", "scripts": { "predeploy": "npm install --prefix server && npm run build --prefix server" diff --git a/cli/.eslintrc.js b/cli/.eslintrc.js new file mode 100644 index 0000000000..140975e0d4 --- /dev/null +++ b/cli/.eslintrc.js @@ -0,0 +1,55 @@ +module.exports = { + env: { + node: true, + }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + ], + ignorePatterns: ['.eslintrc.js'], + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 12, + sourceType: 'module', + project: ['./tsconfig.json'], + }, + overrides: [ + { + files: ['*.ts'], + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, + }, + }, + ], + plugins: ['@typescript-eslint', 'prettier'], + rules: { + 'prettier/prettier': [ + 'error', + { + semi: true, + trailingComma: 'es5', + printWidth: 120, + singleQuote: true, + }, + ], + '@typescript-eslint/no-floating-promises': ['error'], + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': ['error', { vars: 'all', args: 'none' }], + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-empty-function': 0, + '@typescript-eslint/ban-types': [ + 'error', + { + types: { + object: false, + }, + extendDefaults: true, + }, + ], + }, +}; diff --git a/cli/.gitignore b/cli/.gitignore new file mode 100644 index 0000000000..0f9d9cc1e8 --- /dev/null +++ b/cli/.gitignore @@ -0,0 +1,17 @@ +node_modules +lerna-debug.log +npm-debug.log +packages/*/dist +packages/*/coverage +.vscode/ +pip-wheel-metadata/ +tsconfig.tsbuildinfo +.DS_Store +.idea +.vs +dist +.vscode +*.tsbuildinfo +*.tabl.json +*.swp +*.snk \ No newline at end of file diff --git a/cli/README.md b/cli/README.md new file mode 100644 index 0000000000..6c610a37d2 --- /dev/null +++ b/cli/README.md @@ -0,0 +1,93 @@ +tooljet cli +================= + +* [Usage](#usage) +* [Commands](#commands) + +# Usage + +```sh-session +$ npm install -g @tooljet/cli +$ tooljet COMMAND +running command... +$ tooljet (--version) +@tooljet/cli/0.0.6 darwin-arm64 node-v16.13.1 +$ tooljet --help [COMMAND] +USAGE + $ tooljet COMMAND +... +``` + + +Command should be executed inside `Tooljet` directory + +# Commands + +* [`tooljet plugin create PLUGIN_NAME`](#tooljet-plugin-create-plugin_name) +* [`tooljet plugin delete PLUGIN_NAME`](#tooljet-plugin-delete-plugin_name) +* [`tooljet plugin install NPM_MODULE`](#tooljet-plugin-install-npm_module) + +## `tooljet plugin create PLUGIN_NAME` + +Create a new tooljet plugin + +``` +USAGE + $ tooljet plugin create [PLUGIN_NAME] [--type database|api|cloud-storage] [-b] + +ARGUMENTS + PLUGIN_NAME Name of the plugin + +FLAGS + -b, --build + --type=