Merge pull request #12165 from ToolJet/modularisation/v3
Modularisation to main
|
|
@ -2,6 +2,8 @@
|
|||
# The application expects a separate .env.test for test environment configuration
|
||||
# Get detailed information about each variable here: https://docs.tooljet.com/docs/setup/env-vars
|
||||
|
||||
# TOOLJET_EDITION=ee
|
||||
|
||||
TOOLJET_HOST=http://localhost:8082
|
||||
LOCKBOX_MASTER_KEY=0000000000000000000000000000000000000000000000000000000000000000
|
||||
SECRET_KEY_BASE=replace_with_secret_key_base
|
||||
|
|
|
|||
148
.gitconfig
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
[alias]
|
||||
# This command does a checkout and pull the changes.
|
||||
checkout-all = "!f() { \
|
||||
git checkout \"$1\" && git pull; \
|
||||
git submodule foreach --recursive \" \
|
||||
if git show-ref --verify --quiet refs/heads/$1; then \
|
||||
git checkout $1 && git pull; \
|
||||
else \
|
||||
echo 'Skipping submodule $(basename $PWD), branch $1 not found.'; \
|
||||
fi\"; \
|
||||
}; f"
|
||||
|
||||
# This command helps to pull changes for the base and submodule repos.
|
||||
pull-all = "!f() { \
|
||||
git pull && \
|
||||
git submodule foreach 'git pull'; \
|
||||
}; f"
|
||||
|
||||
# This command helps to stage the changes for the base and submodule repos.
|
||||
add-all = "!f() { \
|
||||
git add -A && \
|
||||
git submodule foreach 'git add -A'; \
|
||||
}; f"
|
||||
|
||||
# This command creates custom and pushes a new branch in the base and submodule repos.
|
||||
create-branch-all = "!f() { \
|
||||
branch_name=$1; \
|
||||
if [ -z \"$branch_name\" ]; then \
|
||||
echo \"Branch name required! Usage: git create-branch-all <branch_name>\"; \
|
||||
return 1; \
|
||||
fi; \
|
||||
echo \"Creating new branch $branch_name in the base repo...\"; \
|
||||
git checkout -b $branch_name && git push -u origin $branch_name; \
|
||||
echo \"Creating new branch $branch_name in submodules...\"; \
|
||||
git submodule foreach --quiet --recursive \"git checkout -b $branch_name && git push -u origin $branch_name\"; \
|
||||
}; f"
|
||||
|
||||
# This command creates and pushes a new branch with the 'feature/' prefix in the base and submodule repos.
|
||||
create-feature-all = "!f() { \
|
||||
branch_name=$1; \
|
||||
if [ -z \"$branch_name\" ]; then \
|
||||
echo \"Feature name required! Usage: git create-feature-all <feature_name>\"; \
|
||||
return 1; \
|
||||
fi; \
|
||||
feature_branch=\"feature/$branch_name\"; \
|
||||
echo \"Creating new feature branch $feature_branch in the base repo...\"; \
|
||||
git checkout -b $feature_branch && git push -u origin $feature_branch; \
|
||||
echo \"Creating new feature branch $feature_branch in submodules...\"; \
|
||||
git submodule foreach --quiet --recursive \"git checkout -b $feature_branch && git push -u origin $feature_branch\"; \
|
||||
}; f"
|
||||
|
||||
# This command creates and pushes a new branch with the 'hot-fix/' prefix in the base and submodule repos.
|
||||
create-hotfix-all = "!f() { \
|
||||
branch_name=$1; \
|
||||
if [ -z \"$branch_name\" ]; then \
|
||||
echo \"Hotfix name required! Usage: git create-hotfix-all <hotfix_name>\"; \
|
||||
return 1; \
|
||||
fi; \
|
||||
hotfix_branch=\"hot-fix/$branch_name\"; \
|
||||
echo \"Creating new hotfix branch $hotfix_branch in the base repo...\"; \
|
||||
git checkout -b $hotfix_branch && git push -u origin $hotfix_branch; \
|
||||
echo \"Creating new hotfix branch $hotfix_branch in submodules...\"; \
|
||||
git submodule foreach --quiet --recursive \"git checkout -b $hotfix_branch && git push -u origin $hotfix_branch\"; \
|
||||
}; f"
|
||||
|
||||
# This command creates and pushes a new branch with the 'release/' prefix in the base and submodule repos.
|
||||
create-release-all = "!f() { \
|
||||
branch_name=$1; \
|
||||
if [ -z \"$branch_name\" ]; then \
|
||||
echo \"Release name required! Usage: git create-release-all <release_name>\"; \
|
||||
return 1; \
|
||||
fi; \
|
||||
release_branch=\"release/$branch_name\"; \
|
||||
echo \"Creating new release branch $release_branch in the base repo...\"; \
|
||||
git checkout -b $release_branch && git push -u origin $release_branch; \
|
||||
echo \"Creating new release branch $release_branch in submodules...\"; \
|
||||
git submodule foreach --quiet --recursive \"git checkout -b $release_branch && git push -u origin $release_branch\"; \
|
||||
}; f"
|
||||
|
||||
# This command creates and pushes a new branch with the 'revamp/' prefix in the base and submodule repos.
|
||||
create-revamp-all = "!f() { \
|
||||
branch_name=$1; \
|
||||
if [ -z \"$branch_name\" ]; then \
|
||||
echo \"Revamp name required! Usage: git create-revamp-all <revamp_name>\"; \
|
||||
return 1; \
|
||||
fi; \
|
||||
revamp_branch=\"revamp/$branch_name\"; \
|
||||
echo \"Creating new revamp branch $revamp_branch in the base repo...\"; \
|
||||
git checkout -b $revamp_branch && git push -u origin $revamp_branch; \
|
||||
echo \"Creating new revamp branch $revamp_branch in submodules...\"; \
|
||||
git submodule foreach --quiet --recursive \"git checkout -b $revamp_branch && git push -u origin $revamp_branch\"; \
|
||||
}; f"
|
||||
|
||||
# This command creates and pushes a new branch with the 'sprint/' prefix in the base and submodule repos.
|
||||
create-sprint-all = "!f() { \
|
||||
branch_name=$1; \
|
||||
if [ -z \"$branch_name\" ]; then \
|
||||
echo \"Sprint name required! Usage: git create-sprint-all <sprint_name>\"; \
|
||||
return 1; \
|
||||
fi; \
|
||||
sprint_branch=\"sprint/$branch_name\"; \
|
||||
echo \"Creating new sprint branch $sprint_branch in the base repo...\"; \
|
||||
git checkout -b $sprint_branch && git push -u origin $sprint_branch; \
|
||||
echo \"Creating new sprint branch $sprint_branch in submodules...\"; \
|
||||
git submodule foreach --quiet --recursive \"git checkout -b $sprint_branch && git push -u origin $sprint_branch\"; \
|
||||
}; f"
|
||||
|
||||
# This command creates and pushes a new tag in the base and submodule repos.
|
||||
create-tag-all = "!f() { \
|
||||
tag_name=$1; \
|
||||
if [ -z \"$tag_name\" ]; then \
|
||||
echo \"Tag name required! Usage: git create-tag-all <tag_name>\"; \
|
||||
return 1; \
|
||||
fi; \
|
||||
echo \"Creating and pushing tag $tag_name in the base repo...\"; \
|
||||
git tag $tag_name && git push origin $tag_name; \
|
||||
echo \"Creating and pushing tag $tag_name in submodules...\"; \
|
||||
git submodule foreach --quiet --recursive \"git tag $tag_name && git push origin $tag_name\"; \
|
||||
}; f"
|
||||
|
||||
# This command stages and commits changes for the base and submodule repos.
|
||||
commit-all = "!f() { \
|
||||
commit_message=\"$1\"; \
|
||||
if [ -z \"$commit_message\" ]; then \
|
||||
echo \"Commit message required! Usage: git commit-all <commit_message>\"; \
|
||||
return 1; \
|
||||
fi; \
|
||||
echo \"Committing changes in the base repo...\"; \
|
||||
git commit -m \"$commit_message\"; \
|
||||
echo \"Committing changes in submodules...\"; \
|
||||
git submodule foreach --quiet --recursive \"git commit -m '$commit_message'\"; \
|
||||
}; f"
|
||||
|
||||
|
||||
# This command pushes commits for the base and submodule repos.
|
||||
push-all = "!f() { \
|
||||
echo \"Pushing changes in the base repo...\"; \
|
||||
git push; \
|
||||
echo \"Pushing changes in submodules...\"; \
|
||||
git submodule foreach --quiet --recursive \"git push\"; \
|
||||
}; f"
|
||||
|
||||
status-all = "!f() { \
|
||||
echo \"Status of base repo...\"; \
|
||||
git status; \
|
||||
echo \"Status of submodules...\"; \
|
||||
git submodule foreach --quiet --recursive \"git status\"; \
|
||||
}; f"
|
||||
36
.github/workflows/cypress-appbuilder.yml
vendored
|
|
@ -14,7 +14,23 @@ jobs:
|
|||
Cypress-App-Builder:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
if: ${{ github.event.action == 'labeled' && (github.event.label.name == 'run-cypress-app-builder' || github.event.label.name == 'run-cypress') }}
|
||||
if: |
|
||||
github.event.action == 'labeled' &&
|
||||
(
|
||||
github.event.label.name == 'run-cypress' ||
|
||||
github.event.label.name == 'run-ce-app-builder' ||
|
||||
github.event.label.name == 'run-ee-app-builder'
|
||||
)
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
edition: >-
|
||||
${{
|
||||
contains(github.event.pull_request.labels.*.name, 'run-cypress') && fromJson('["ce", "ee"]') ||
|
||||
contains(github.event.pull_request.labels.*.name, 'run-ce-app-builder') && fromJson('["ce"]') ||
|
||||
contains(github.event.pull_request.labels.*.name, 'run-ee-app-builder') && fromJson('["ee"]') ||
|
||||
fromJson('[]')
|
||||
}}
|
||||
|
||||
steps:
|
||||
- name: Setup Node.js
|
||||
|
|
@ -22,6 +38,23 @@ jobs:
|
|||
with:
|
||||
node-version: 18.18.2
|
||||
|
||||
- name: Set up Git authentication for private submodules
|
||||
run: |
|
||||
git config --global url."https://x-access-token:${{ secrets.CUSTOM_GITHUB_TOKEN }}@github.com/".insteadOf "https://github.com/"
|
||||
|
||||
- name: Checkout with Submodules
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.ref }}
|
||||
|
||||
- name: Checking out the correct branch for submodules EE
|
||||
if: matrix.edition == 'ee'
|
||||
run: |
|
||||
git submodule update --init --recursive
|
||||
git submodule foreach --recursive '
|
||||
git checkout ${{ env.BRANCH_NAME }} 2>/dev/null || git checkout main'
|
||||
|
||||
|
||||
- name: Set up Docker
|
||||
uses: docker-practice/actions-setup-docker@master
|
||||
|
||||
|
|
@ -45,6 +78,7 @@ jobs:
|
|||
|
||||
- name: Set up environment variables
|
||||
run: |
|
||||
echo "TOOLJET_EDITION=${{ matrix.edition == 'ee' && 'EE' || 'CE' }}" >> .env
|
||||
echo "TOOLJET_HOST=http://localhost:8082" >> .env
|
||||
echo "LOCKBOX_MASTER_KEY=cd97331a419c09387bef49787f7da8d2a81d30733f0de6bed23ad8356d2068b2" >> .env
|
||||
echo "SECRET_KEY_BASE=7073b9a35a15dd20914ae17e36a693093f25b74b96517a5fec461fc901c51e011cd142c731bee48c5081ec8bac321c1f259ef097ef2a16f25df17a3798c03426" >> .env
|
||||
|
|
|
|||
38
.github/workflows/cypress-marketplace.yml
vendored
|
|
@ -14,7 +14,23 @@ jobs:
|
|||
Cypress-Marketplace:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
if: ${{ github.event.action == 'labeled' && (github.event.label.name == 'run-cypress-marketplace' || github.event.label.name == 'run-cypress') }}
|
||||
if: |
|
||||
github.event.action == 'labeled' &&
|
||||
(
|
||||
github.event.label.name == 'run-cypress' ||
|
||||
github.event.label.name == 'run-ce-cypress-marketplace' ||
|
||||
github.event.label.name == 'run-ee-cypress-marketplace'
|
||||
)
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
edition: >-
|
||||
${{
|
||||
contains(github.event.pull_request.labels.*.name, 'run-cypress') && fromJson('["ce", "ee"]') ||
|
||||
contains(github.event.pull_request.labels.*.name, 'run-ce-cypress-marketplace') && fromJson('["ce"]') ||
|
||||
contains(github.event.pull_request.labels.*.name, 'run-ee-cypress-marketplace') && fromJson('["ee"]') ||
|
||||
fromJson('[]')
|
||||
}}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
|
@ -46,12 +62,25 @@ jobs:
|
|||
- name: Set SAFE_BRANCH_NAME
|
||||
run: echo "SAFE_BRANCH_NAME=$(echo ${{ env.BRANCH_NAME }} | tr '/' '-')" >> $GITHUB_ENV
|
||||
|
||||
- name: Build and Push Docker image
|
||||
- name: Build CE Docker image
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
file: docker/production.Dockerfile
|
||||
push: true
|
||||
file: docker/ce-production.Dockerfile
|
||||
push: false
|
||||
tags: tooljet/tj-osv:${{ env.SAFE_BRANCH_NAME }}
|
||||
platforms: linux/amd64
|
||||
env:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build EE Docker image
|
||||
if: matrix.edition == 'ee'
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
file: docker/ee/ee-production.Dockerfile
|
||||
push: false
|
||||
tags: tooljet/tj-osv:${{ env.SAFE_BRANCH_NAME }}
|
||||
platforms: linux/amd64
|
||||
env:
|
||||
|
|
@ -60,6 +89,7 @@ jobs:
|
|||
|
||||
- name: Set up environment variables
|
||||
run: |
|
||||
echo "TOOLJET_EDITION=${{ matrix.edition == 'ee' && 'EE' || 'CE' }}" >> .env
|
||||
echo "TOOLJET_HOST=http://localhost:3000" >> .env
|
||||
echo "LOCKBOX_MASTER_KEY=cd97331a419c09387bef49787f7da8d2a81d30733f0de6bed23ad8356d2068b2" >> .env
|
||||
echo "SECRET_KEY_BASE=7073b9a35a15dd20914ae17e36a693093f25b74b96517a5fec461fc901c51e011cd142c731bee48c5081ec8bac321c1f259ef097ef2a16f25df17a3798c03426" >> .env
|
||||
|
|
|
|||
44
.github/workflows/cypress-platform.yml
vendored
|
|
@ -13,9 +13,22 @@ jobs:
|
|||
Cypress-Platform:
|
||||
runs-on: ubuntu-22.04
|
||||
if: |
|
||||
github.event.action == 'labeled' &&
|
||||
(github.event.label.name == 'run-cypress-platform' ||
|
||||
github.event.label.name == 'run-cypress')
|
||||
github.event.action == 'labeled' &&
|
||||
(
|
||||
github.event.label.name == 'run-cypress' ||
|
||||
github.event.label.name == 'run-ce-cypress-platform' ||
|
||||
github.event.label.name == 'run-ee-cypress-platform'
|
||||
)
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
edition: >-
|
||||
${{
|
||||
contains(github.event.pull_request.labels.*.name, 'run-cypress') && fromJson('["ce", "ee"]') ||
|
||||
contains(github.event.pull_request.labels.*.name, 'run-ce-cypress-platform') && fromJson('["ce"]') ||
|
||||
contains(github.event.pull_request.labels.*.name, 'run-ee-cypress-platform') && fromJson('["ee"]') ||
|
||||
fromJson('[]')
|
||||
}}
|
||||
|
||||
steps:
|
||||
- name: Setup Node.js
|
||||
|
|
@ -23,11 +36,22 @@ jobs:
|
|||
with:
|
||||
node-version: 18.18.2
|
||||
|
||||
- name: Checkout
|
||||
- name: Set up Git authentication for private submodules
|
||||
run: |
|
||||
git config --global url."https://x-access-token:${{ secrets.CUSTOM_GITHUB_TOKEN }}@github.com/".insteadOf "https://github.com/"
|
||||
|
||||
- name: Checkout with Submodules
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.ref }}
|
||||
|
||||
- name: Checking out the correct branch for submodules EE
|
||||
if: matrix.edition == 'ee'
|
||||
run: |
|
||||
git submodule update --init --recursive
|
||||
git submodule foreach --recursive '
|
||||
git checkout ${{ env.BRANCH_NAME }} 2>/dev/null || git checkout main'
|
||||
|
||||
- name: Set up Docker
|
||||
uses: docker-practice/actions-setup-docker@master
|
||||
|
||||
|
|
@ -55,9 +79,10 @@ jobs:
|
|||
|
||||
- name: Set up environment variables
|
||||
run: |
|
||||
echo "TOOLJET_EDITION=${{ matrix.edition == 'ee' && 'EE' || 'CE' }}" >> .env
|
||||
echo "TOOLJET_HOST=http://localhost:8082" >> .env
|
||||
echo "LOCKBOX_MASTER_KEY=cd97331a419c09387bef49787f7da8d2a81d30733f0de6bed23ad8356d2068b2" >> .env
|
||||
echo "SECRET_KEY_BASE=7073b9a35a15dd20914ae17e36a693093f25b74b96517a5fec461fc901c51e011cd142c731bee48c5081ec8bac321c1f259ef097ef2a16f25df17a3798c03426" >> .env
|
||||
echo "SECRET_KEY_BASE=7073b9a35a15dd20914ae17e36a693093f25b74b96517a5fec461fc901c51e011cd142c731bee48c5081ec8bac321c1f259ef097ef2a16f25df17a3798c03426" >> .env
|
||||
echo "PG_DB=tooljet_development" >> .env
|
||||
echo "PG_USER=postgres" >> .env
|
||||
echo "PG_HOST=localhost" >> .env
|
||||
|
|
@ -69,7 +94,7 @@ jobs:
|
|||
echo "TOOLJET_DB_HOST=localhost" >> .env
|
||||
echo "TOOLJET_DB_PASS=postgres" >> .env
|
||||
echo "TOOLJET_DB_STATEMENT_TIMEOUT=60000" >> .env
|
||||
echo "TOOLJET_DB_RECONFIG=true" >> .env
|
||||
echo "TOOLJET_DB_RECONFIG=true" >> .env
|
||||
echo "PGRST_JWT_SECRET=r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj" >> .env
|
||||
echo "PGRST_HOST=localhost:3001" >> .env
|
||||
echo "PGRST_DB_PRE_CONFIG=postgrest.pre_config" >> .env
|
||||
|
|
@ -77,10 +102,6 @@ jobs:
|
|||
echo "ENABLE_MARKETPLACE_FEATURE=true" >> .env
|
||||
echo "ENABLE_MARKETPLACE_DEV_MODE=true" >> .env
|
||||
echo "ENABLE_PRIVATE_APP_EMBED=true" >> .env
|
||||
echo "SSO_GOOGLE_OAUTH2_CLIENT_ID=123456789.apps.googleusercontent.com" >> .env
|
||||
echo "SSO_GOOGLE_OAUTH2_CLIENT_SECRET=ABCGFDNF-FHSDVFY-bskfh6234" >> .env
|
||||
echo "SSO_GIT_OAUTH2_CLIENT_ID=1234567890" >> .env
|
||||
echo "SSO_GIT_OAUTH2_CLIENT_SECRET=3346shfvkdjjsfkvxce32854e026a4531ed" >> .env
|
||||
|
||||
- name: Set up database
|
||||
run: |
|
||||
|
|
@ -123,9 +144,10 @@ jobs:
|
|||
uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
name: screenshots
|
||||
name: screenshots-${{ matrix.edition }}
|
||||
path: cypress-tests/cypress/screenshots
|
||||
|
||||
|
||||
Cypress-Platform-Subpath:
|
||||
runs-on: ubuntu-22.04
|
||||
if: |
|
||||
|
|
|
|||
39
.github/workflows/doc-release.yml
vendored
|
|
@ -1,39 +0,0 @@
|
|||
name: Documentation version release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
create-branch:
|
||||
description: "Branch name"
|
||||
version:
|
||||
description: "RELEASE_VERSION"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup node 16.14
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16.14
|
||||
- run: cd docs && yarn install && npm run docusaurus docs:version ${{ github.event.inputs.version }}
|
||||
|
||||
- name: Create Pull Request
|
||||
id: doc
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
with:
|
||||
title: "Creating a new version folder ${{ github.event.version }}"
|
||||
body: "Created a new version folder for version: ${{ github.event.inputs.version }}"
|
||||
branch: ${{ github.event.inputs.create-branch }}
|
||||
base: "develop"
|
||||
token: ${{ secrets.GITHUB }}
|
||||
delete-branch : true
|
||||
labels: versioned-docs, automated pr
|
||||
commit-message: added new version folder
|
||||
|
||||
|
||||
|
||||
232
.github/workflows/docker-release.yml
vendored
Normal file
|
|
@ -0,0 +1,232 @@
|
|||
name: ToolJet Edition docker images builds
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build-tooljet-image-for-ce-edtion:
|
||||
runs-on: ubuntu-latest
|
||||
if: "${{ github.event.release }}"
|
||||
|
||||
steps:
|
||||
|
||||
- name: Checkout code to main for Beta CE edition
|
||||
if: "!contains(github.event.release.tag_name, 'ce-lts')"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
ref: refs/heads/main
|
||||
|
||||
- name: Checkout code to LTS for CE LTS edition
|
||||
if: "contains(github.event.release.tag_name, '-ce-lts')"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
ref: refs/heads/lts-4.0
|
||||
|
||||
# Create Docker Buildx builder with platform configuration
|
||||
- name: Set up Docker Buildx
|
||||
run: |
|
||||
mkdir -p ~/.docker/cli-plugins
|
||||
curl -SL https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx
|
||||
chmod a+x ~/.docker/cli-plugins/docker-buildx
|
||||
docker buildx create --name mybuilder --platform linux/arm64,linux/amd64,linux/amd64/v2,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||
docker buildx use mybuilder
|
||||
|
||||
- name: Set DOCKER_CLI_EXPERIMENTAL
|
||||
run: echo "DOCKER_CLI_EXPERIMENTAL=enabled" >> $GITHUB_ENV
|
||||
|
||||
- name: use mybuilder buildx
|
||||
run: docker buildx use mybuilder
|
||||
|
||||
- name: Docker Login
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build and Push Docker image for Beta tag
|
||||
if: "!contains(github.event.release.tag_name, '-ce-lts')"
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
file: docker/ce-production.Dockerfile
|
||||
push: true
|
||||
tags: tooljet/tooljet-ce:${{ github.event.release.tag_name }},tooljet/tooljet-ce:ce-latest
|
||||
platforms: linux/amd64
|
||||
env:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build and Push Docker image for LTS tag
|
||||
if: "contains(github.event.release.tag_name, '-ce-lts')"
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
file: docker/ce-production.Dockerfile
|
||||
push: true
|
||||
tags: tooljet/tooljet-ce:${{ github.event.release.tag_name }},tooljet/tooljet-ce:ce-lts-latest
|
||||
platforms: linux/amd64
|
||||
env:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Send Slack Notification
|
||||
run: |
|
||||
if [[ "${{ job.status }}" == "success" ]]; then
|
||||
message="ToolJet community image published:\n\`tooljet/tooljet-ce:${{ github.event.release.tag_name }}\`"
|
||||
else
|
||||
message="Job '${{ env.JOB_NAME }}' failed! tooljet/tooljet-ce:${{ github.event.release.tag_name }}"
|
||||
fi
|
||||
|
||||
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
|
||||
|
||||
- name: Send Slack Notification
|
||||
run: |
|
||||
if [[ "${{ job.status }}" == "success" ]]; then
|
||||
message="ToolJet community image published:\n\`tooljet/tooljet-ce:${{ github.event.release.tag_name }}\`"
|
||||
else
|
||||
message="Job '${{ env.JOB_NAME }}' failed! tooljet/tooljet-ce:${{ github.event.release.tag_name }}"
|
||||
fi
|
||||
|
||||
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
|
||||
|
||||
build-tooljet-image-for-ee-edtion:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
if: "${{ github.event.release }}"
|
||||
|
||||
steps:
|
||||
- name: Checkout code to main for Beta EE edition
|
||||
if: "!contains(github.event.release.tag_name, 'ee-lts')"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
ref: refs/heads/main
|
||||
|
||||
- name: Checkout code to LTS for EE LTS edition
|
||||
if: "contains(github.event.release.tag_name, '-ee-lts')"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
ref: refs/heads/lts-4.0
|
||||
|
||||
# Create Docker Buildx builder with platform configuration
|
||||
- name: Set up Docker Buildx
|
||||
run: |
|
||||
mkdir -p ~/.docker/cli-plugins
|
||||
curl -SL https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx
|
||||
chmod a+x ~/.docker/cli-plugins/docker-buildx
|
||||
docker buildx create --name mybuilder --platform linux/arm64,linux/amd64,linux/amd64/v2,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||
docker buildx use mybuilder
|
||||
|
||||
- name: Set DOCKER_CLI_EXPERIMENTAL
|
||||
run: echo "DOCKER_CLI_EXPERIMENTAL=enabled" >> $GITHUB_ENV
|
||||
|
||||
- name: use mybuilder buildx
|
||||
run: docker buildx use mybuilder
|
||||
|
||||
- name: Docker Login
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
|
||||
- name: Build and Push Docker image for Beta tag
|
||||
if: "!contains(github.event.release.tag_name, '-ee-lts')"
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
args: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
|
||||
file: docker/ee-production.Dockerfile
|
||||
push: true
|
||||
tags: tooljet/tooljet-ee:${{ github.event.release.tag_name }},tooljet/tooljet-ee:ee-lts-latest,tooljet/tooljet:ee-lts-latest,tooljet/tooljet:${{ github.event.release.tag_name }}
|
||||
platforms: linux/amd64
|
||||
env:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
|
||||
- name: Build and Push Docker image for LTS tag
|
||||
if: "contains(github.event.release.tag_name, '-ee-lts')"
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
args: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
|
||||
file: docker/ee-production.Dockerfile
|
||||
push: true
|
||||
tags: tooljet/tooljet-ee:${{ github.event.release.tag_name }},tooljet/tooljet-ee:ee-lts-latest,tooljet/tooljet:ee-lts-latest,tooljet/tooljet:${{ github.event.release.tag_name }}
|
||||
platforms: linux/amd64
|
||||
env:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Send Slack Notification
|
||||
run: |
|
||||
if [[ "${{ job.status }}" == "success" ]]; then
|
||||
message="ToolJet enterprise image published:\n\`tooljet/tooljet-ee:${{ github.event.release.tag_name }}\`\n\`tooljet/tooljet:${{ github.event.release.tag_name }}\`"
|
||||
else
|
||||
message="Job '${{ env.JOB_NAME }}' failed! Image built:\n\`tooljet/tooljet-ee:${{ github.event.release.tag_name }}\`\n\`tooljet/tooljet:${{ github.event.release.tag_name }}\`"
|
||||
fi
|
||||
|
||||
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
|
||||
|
||||
build-tooljet-image-for-cloud-edtion:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
if: "${{ github.event.release }}"
|
||||
|
||||
steps:
|
||||
- name: Checkout code to LTS for Cloud LTS edition
|
||||
if: "contains(github.event.release.tag_name, '-cloud-lts')"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
ref: refs/heads/lts-4.0
|
||||
|
||||
# Create Docker Buildx builder with platform configuration
|
||||
- name: Set up Docker Buildx
|
||||
run: |
|
||||
mkdir -p ~/.docker/cli-plugins
|
||||
curl -SL https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx
|
||||
chmod a+x ~/.docker/cli-plugins/docker-buildx
|
||||
docker buildx create --name mybuilder --platform linux/arm64,linux/amd64,linux/amd64/v2,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||
docker buildx use mybuilder
|
||||
|
||||
- name: Set DOCKER_CLI_EXPERIMENTAL
|
||||
run: echo "DOCKER_CLI_EXPERIMENTAL=enabled" >> $GITHUB_ENV
|
||||
|
||||
- name: use mybuilder buildx
|
||||
run: docker buildx use mybuilder
|
||||
|
||||
- name: Docker Login
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build and Push Docker image for LTS tag
|
||||
if: "contains(github.event.release.tag_name, '-cloud-lts')"
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
args: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
|
||||
file: docker/cloud/cloud-server.Dockerfile
|
||||
push: true
|
||||
tags: tooljet/saas:${{ github.event.release.tag_name }}
|
||||
platforms: linux/amd64
|
||||
env:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Send Slack Notification
|
||||
run: |
|
||||
if [[ "${{ job.status }}" == "success" ]]; then
|
||||
message="ToolJet cloud image published:\n\`tooljet/saas:${{ github.event.release.tag_name }}\`"
|
||||
else
|
||||
message="Job '${{ env.JOB_NAME }}' failed! Image built:\n\`tooljet/saas:${{ github.event.release.tag_name }}\`"
|
||||
fi
|
||||
|
||||
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
|
||||
|
||||
35
.github/workflows/packer-build.yml
vendored
|
|
@ -11,13 +11,16 @@ on:
|
|||
description: "RELEASE_VERSION"
|
||||
|
||||
jobs:
|
||||
packer:
|
||||
packer-ee:
|
||||
runs-on: ubuntu-latest
|
||||
name: packer
|
||||
name: packer-ee
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Checkout code to lts-4.0
|
||||
if: contains(github.event.release.tag_name, '-ee-lts')
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
ref: refs/heads/lts-4.0
|
||||
|
||||
- name: Setting tag
|
||||
if: "${{ github.event.inputs.version != '' }}"
|
||||
|
|
@ -28,7 +31,7 @@ jobs:
|
|||
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
|
||||
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v2
|
||||
uses: aws-actions/configure-aws-credentials@v1-node16
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
|
|
@ -40,7 +43,7 @@ jobs:
|
|||
with:
|
||||
command: init
|
||||
target: .
|
||||
working_directory: deploy/ec2
|
||||
working_directory: deploy/ec2/ee
|
||||
|
||||
# validate templates
|
||||
- name: Validate Template
|
||||
|
|
@ -49,25 +52,35 @@ jobs:
|
|||
command: validate
|
||||
arguments: -syntax-only
|
||||
target: .
|
||||
working_directory: deploy/ec2
|
||||
working_directory: deploy/ec2/ee
|
||||
|
||||
# Echo RENDER_GITHUB_PAT
|
||||
- name: Set PACKER_GITHUB_PAT
|
||||
run: echo "PACKER_GITHUB_PAT=${{ secrets.PACKER_GITHUB_PAT}}" >> $GITHUB_ENV
|
||||
|
||||
# Dynamically update setup_machine.sh with PAT
|
||||
- name: Validate PAT
|
||||
run: |
|
||||
sed -i "s|git config --global url."https://x-access-token:CUSTOM_GITHUB_TOKEN@github.com/".insteadOf "https://github.com/"|git config --global url."https://x-access-token:${ secrets.CUSTOM_GITHUB_TOKEN }@github.com/".insteadOf "https://github.com/"|g" ./deploy/ec2/ee/setup_machine.sh
|
||||
|
||||
# build artifact
|
||||
- name: Build Artifact
|
||||
uses: hashicorp/packer-github-actions@master
|
||||
with:
|
||||
command: build
|
||||
#The the below argument is specific for building EE AMI image
|
||||
arguments: -color=false -on-error=abort -var ami_name=tooljet_${{ env.RELEASE_VERSION }}.ubuntu_focal
|
||||
target: .
|
||||
working_directory: deploy/ec2
|
||||
working_directory: deploy/ec2/ee
|
||||
env:
|
||||
PACKER_LOG: 1
|
||||
|
||||
- name: Send Slack Notification
|
||||
run: |
|
||||
if [[ "${{ job.status }}" == "success" ]]; then
|
||||
message="Job '${{ env.JOB_NAME }}' succeeded! AMI = tooljet_${{ env.RELEASE_VERSION }}.ubuntu_focal"
|
||||
message="ToolJet enterprise AWS AMI published:\\n\`tooljet_${{ env.RELEASE_VERSION }}.ubuntu_focal\`"
|
||||
else
|
||||
message="Job '${{ env.JOB_NAME }}' failed! AMI = tooljet_${{ env.RELEASE_VERSION }}.ubuntu_focal"
|
||||
message="ToolJet enterprise AWS AMI release failed! \\n\`tooljet_${{ env.RELEASE_VERSION }}.ubuntu_focal\`"
|
||||
fi
|
||||
|
||||
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
735
.github/workflows/render-preview-deploy.yml
vendored
|
|
@ -11,13 +11,16 @@ permissions:
|
|||
issues: write
|
||||
|
||||
jobs:
|
||||
create-review-app:
|
||||
if: ${{ github.event.action == 'labeled' && github.event.label.name == 'create-review-app' }}
|
||||
|
||||
# Community Edition
|
||||
|
||||
create-ce-review-app:
|
||||
if: ${{ github.event.action == 'labeled' && (github.event.label.name == 'create-ce-review-app' || github.event.label.name == 'review-app') }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Create deployment
|
||||
id: create-deployment
|
||||
- name: Creating deployment for CE
|
||||
id: create-ce-deployment
|
||||
run: |
|
||||
export RESPONSE=$(curl --request POST \
|
||||
--url https://api.render.com/v1/services \
|
||||
|
|
@ -28,11 +31,11 @@ jobs:
|
|||
{
|
||||
"autoDeploy": "yes",
|
||||
"branch": "${{ env.BRANCH_NAME }}",
|
||||
"name": "ToolJet PR #${{ env.PR_NUMBER }}",
|
||||
"name": "ToolJet CE PR #${{ env.PR_NUMBER }}",
|
||||
"notifyOnFail": "default",
|
||||
"ownerId": "tea-caeo4bj19n072h3dddc0",
|
||||
"repo": "${{ github.event.pull_request.head.repo.git_url }}",
|
||||
"slug": "tooljet-pr-${{ env.PR_NUMBER }}",
|
||||
"repo": "https://github.com/ToolJet/ToolJet",
|
||||
"slug": "tooljet-ce-pr-${{ env.PR_NUMBER }}",
|
||||
"suspended": "not_suspended",
|
||||
"suspenders": [],
|
||||
"type": "web_service",
|
||||
|
|
@ -55,11 +58,11 @@ jobs:
|
|||
},
|
||||
{
|
||||
"key": "PG_DB",
|
||||
"value": "${{ env.PR_NUMBER }}"
|
||||
"value": "${{ env.PR_NUMBER }}-ce"
|
||||
},
|
||||
{
|
||||
"key": "TOOLJET_DB",
|
||||
"value": "${{ env.PR_NUMBER }}-tjdb"
|
||||
"value": "${{ env.PR_NUMBER }}-ce-tjdb"
|
||||
},
|
||||
{
|
||||
"key": "TOOLJET_DB_HOST",
|
||||
|
|
@ -68,7 +71,7 @@ jobs:
|
|||
{
|
||||
"key": "TOOLJET_DB_USER",
|
||||
"value": "${{ secrets.RENDER_PG_USER }}"
|
||||
},
|
||||
},
|
||||
{
|
||||
"key": "TOOLJET_DB_PASS",
|
||||
"value": "${{ secrets.RENDER_PG_PASS }}"
|
||||
|
|
@ -83,7 +86,7 @@ jobs:
|
|||
},
|
||||
{
|
||||
"key": "PGRST_DB_URI",
|
||||
"value": "postgres://${{ secrets.RENDER_PG_USER }}:${{ secrets.RENDER_PG_PASS }}@${{ secrets.RENDER_PG_HOST }}/${{ env.PR_NUMBER }}-tjdb"
|
||||
"value": "postgres://${{ secrets.RENDER_PG_USER }}:${{ secrets.RENDER_PG_PASS }}@${{ secrets.RENDER_PG_HOST }}/${{ env.PR_NUMBER }}-ce-tjdb"
|
||||
},
|
||||
{
|
||||
"key": "PGRST_HOST",
|
||||
|
|
@ -103,7 +106,7 @@ jobs:
|
|||
},
|
||||
{
|
||||
"key": "TOOLJET_HOST",
|
||||
"value": "https://tooljet-pr-${{ env.PR_NUMBER }}.onrender.com"
|
||||
"value": "https://tooljet-ce-pr-${{ env.PR_NUMBER }}.onrender.com"
|
||||
},
|
||||
{
|
||||
"key": "DISABLE_TOOLJET_TELEMETRY",
|
||||
|
|
@ -129,6 +132,18 @@ jobs:
|
|||
"key": "SMTP_PASSWORD",
|
||||
"value": "${{ secrets.RENDER_SMTP_PASSWORD }}"
|
||||
},
|
||||
{
|
||||
"key": "TEMPORAL_SERVER_ADDRESS",
|
||||
"value": "https://auto-setup-1-25-1.onrender.com"
|
||||
},
|
||||
{
|
||||
"key": "TEMPORAL_TASK_QUEUE_NAME_FOR_WORKFLOWS",
|
||||
"value": "tooljet-ce-pr-${{ env.PR_NUMBER }}"
|
||||
},
|
||||
{
|
||||
"key": "TOOLJET_WORKFLOWS_TEMPORAL_NAMESPACE",
|
||||
"value": "default"
|
||||
},
|
||||
{
|
||||
"key": "TOOLJET_MARKETPLACE_URL",
|
||||
"value": "${{ secrets.MARKETPLACE_BUCKET }}"
|
||||
|
|
@ -140,7 +155,7 @@ jobs:
|
|||
"envSpecificDetails": {
|
||||
"dockerCommand": "",
|
||||
"dockerContext": "./",
|
||||
"dockerfilePath": "./docker/preview.Dockerfile"
|
||||
"dockerfilePath": "./docker/ce-preview.Dockerfile"
|
||||
},
|
||||
"healthCheckPath": "/api/health",
|
||||
"numInstances": 1,
|
||||
|
|
@ -151,7 +166,7 @@ jobs:
|
|||
"plan": "starter",
|
||||
"pullRequestPreviewsEnabled": "no",
|
||||
"region": "oregon",
|
||||
"url": "https://tooljet-pr-${{ env.PR_NUMBER }}.onrender.com"
|
||||
"url": "https://tooljet-ce-pr-${{ env.PR_NUMBER }}.onrender.com"
|
||||
}
|
||||
}')
|
||||
|
||||
|
|
@ -168,7 +183,7 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: 'Deployment: https://tooljet-pr-${{ env.PR_NUMBER }}.onrender.com \n Dashboard: https://dashboard.render.com/web/${{ env.SERVICE_ID }}'
|
||||
body: 'Community Edition:- \n Deployment: https://tooljet-ce-pr-${{ env.PR_NUMBER }}.onrender.com \n Dashboard: https://dashboard.render.com/web/${{ env.SERVICE_ID }}'
|
||||
})
|
||||
|
||||
- uses: actions/github-script@v6
|
||||
|
|
@ -179,7 +194,7 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'create-review-app'
|
||||
name: 'create-ce-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
|
|
@ -189,18 +204,18 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
labels: ['active-review-app']
|
||||
labels: ['active-ce-review-app']
|
||||
})
|
||||
|
||||
destroy-review-app:
|
||||
if: ${{ (github.event.action == 'labeled' && github.event.label.name == 'destroy-review-app') || github.event.action == 'closed' }}
|
||||
destroy-ce-review-app:
|
||||
if: ${{ (github.event.action == 'labeled' && github.event.label.name == 'destroy-ce-review-app') || github.event.action == 'closed' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Delete service
|
||||
run: |
|
||||
export SERVICE_ID=$(curl --request GET \
|
||||
--url 'https://api.render.com/v1/services?name=ToolJet%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
|
||||
--url 'https://api.render.com/v1/services?name=ToolJet%20CE%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
|
||||
--header 'accept: application/json' \
|
||||
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
|
||||
jq -r '.[0].service.id')
|
||||
|
|
@ -218,7 +233,7 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'destroy-review-app'
|
||||
name: 'destroy-ce-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
|
|
@ -229,7 +244,7 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'suspend-review-app'
|
||||
name: 'suspend-ce-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
|
|
@ -240,7 +255,7 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'active-review-app'
|
||||
name: 'active-ce-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
|
|
@ -259,8 +274,8 @@ jobs:
|
|||
PGHOST: ${{ secrets.RENDER_DS_PG_HOST }}
|
||||
PGPORT: 5432
|
||||
PGUSER: ${{ secrets.RENDER_DS_PG_USER }}
|
||||
PGDATABASE: ${{ env.PR_NUMBER }}
|
||||
PGTJBDATABASE: ${{ env.PR_NUMBER }}-tjdb
|
||||
PGDATABASE: ${{ env.PR_NUMBER }}-ce
|
||||
PGTJBDATABASE: ${{ env.PR_NUMBER }}-ce-tjdb
|
||||
run: |
|
||||
if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGDATABASE; then
|
||||
echo "Database $PGDATABASE exists, deleting..."
|
||||
|
|
@ -276,8 +291,8 @@ jobs:
|
|||
echo "Database $PGTJBDATABASE does not exist."
|
||||
fi
|
||||
|
||||
suspend-review-app:
|
||||
if: ${{ github.event.action == 'labeled' && github.event.label.name == 'suspend-review-app' }}
|
||||
suspend-ce-review-app:
|
||||
if: ${{ github.event.action == 'labeled' && github.event.label.name == 'suspend-ce-review-app' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
|
@ -302,14 +317,14 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'active-review-app'
|
||||
name: 'active-ce-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
resume-review-app:
|
||||
if: ${{ github.event.action == 'unlabeled' && github.event.label.name == 'suspend-review-app' }}
|
||||
resume-ce-review-app:
|
||||
if: ${{ github.event.action == 'unlabeled' && github.event.label.name == 'suspend-ce-review-app' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
|
@ -333,7 +348,7 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
labels: ['active-review-app']
|
||||
labels: ['active-ce-review-app']
|
||||
})
|
||||
|
||||
try {
|
||||
|
|
@ -341,98 +356,23 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'suspend-review-app'
|
||||
name: 'suspend-ce-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
recreate-review-app:
|
||||
if: ${{ github.event.action == 'labeled' && github.event.label.name == 'recreate-review-app' }}
|
||||
|
||||
|
||||
# Enterprise Edition
|
||||
|
||||
create-ee-review-app:
|
||||
if: ${{ github.event.action == 'labeled' && (github.event.label.name == 'create-ee-review-app' || github.event.label.name == 'review-app') }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Delete service
|
||||
run: |
|
||||
export SERVICE_ID=$(curl --request GET \
|
||||
--url 'https://api.render.com/v1/services?name=ToolJet%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
|
||||
--header 'accept: application/json' \
|
||||
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
|
||||
jq -r '.[0].service.id')
|
||||
|
||||
curl --request DELETE \
|
||||
--url https://api.render.com/v1/services/$SERVICE_ID \
|
||||
--header 'accept: application/json' \
|
||||
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}'
|
||||
|
||||
- uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
try {
|
||||
await github.rest.issues.removeLabel({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'destroy-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
try {
|
||||
await github.rest.issues.removeLabel({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'suspend-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
try {
|
||||
await github.rest.issues.removeLabel({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'active-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
- name: Install PostgreSQL client
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install postgresql-client -y
|
||||
|
||||
- name: Wait after installing PostgreSQL
|
||||
run: sleep 25
|
||||
|
||||
- name: Drop PostgreSQL PR databases
|
||||
env:
|
||||
PGHOST: ${{ secrets.RENDER_DS_PG_HOST }}
|
||||
PGPORT: 5432
|
||||
PGUSER: ${{ secrets.RENDER_DS_PG_USER }}
|
||||
PGDATABASE: ${{ env.PR_NUMBER }}
|
||||
PGTJBDATABASE: ${{ env.PR_NUMBER }}-tjdb
|
||||
run: |
|
||||
if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGDATABASE; then
|
||||
echo "Database $PGDATABASE exists, deleting..."
|
||||
PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGDATABASE\" ;"
|
||||
else
|
||||
echo "Database $PGDATABASE does not exist."
|
||||
fi
|
||||
|
||||
if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGTJBDATABASE; then
|
||||
echo "Database $PGTJBDATABASE exists, deleting..."
|
||||
PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGTJBDATABASE\" ;"
|
||||
else
|
||||
echo "Database $PGTJBDATABASE does not exist."
|
||||
fi
|
||||
|
||||
- name: Create deployment
|
||||
id: create-deployment
|
||||
- name: Creating deployment for Enterprise Edition
|
||||
id: create-ee-deployment
|
||||
run: |
|
||||
export RESPONSE=$(curl --request POST \
|
||||
--url https://api.render.com/v1/services \
|
||||
|
|
@ -443,11 +383,11 @@ jobs:
|
|||
{
|
||||
"autoDeploy": "yes",
|
||||
"branch": "${{ env.BRANCH_NAME }}",
|
||||
"name": "ToolJet PR #${{ env.PR_NUMBER }}",
|
||||
"name": "ToolJet EE PR #${{ env.PR_NUMBER }}",
|
||||
"notifyOnFail": "default",
|
||||
"ownerId": "tea-caeo4bj19n072h3dddc0",
|
||||
"repo": "https://${{ secrets.RENDER_GITHUB_PAT }}@github.com/ToolJet/tj-ee",
|
||||
"slug": "tooljet-pr-${{ env.PR_NUMBER }}",
|
||||
"repo": "https://github.com/ToolJet/ToolJet",
|
||||
"slug": "tooljet-ee-pr-${{ env.PR_NUMBER }}",
|
||||
"suspended": "not_suspended",
|
||||
"suspenders": [],
|
||||
"type": "web_service",
|
||||
|
|
@ -470,11 +410,11 @@ jobs:
|
|||
},
|
||||
{
|
||||
"key": "PG_DB",
|
||||
"value": "${{ env.PR_NUMBER }}"
|
||||
"value": "${{ env.PR_NUMBER }}-ee"
|
||||
},
|
||||
{
|
||||
"key": "TOOLJET_DB",
|
||||
"value": "${{ env.PR_NUMBER }}-tjdb"
|
||||
"value": "${{ env.PR_NUMBER }}-ee-tjdb"
|
||||
},
|
||||
{
|
||||
"key": "TOOLJET_DB_HOST",
|
||||
|
|
@ -498,7 +438,7 @@ jobs:
|
|||
},
|
||||
{
|
||||
"key": "PGRST_DB_URI",
|
||||
"value": "postgres://${{ secrets.RENDER_PG_USER }}:${{ secrets.RENDER_PG_PASS }}@${{ secrets.RENDER_PG_HOST }}/${{ env.PR_NUMBER }}-tjdb"
|
||||
"value": "postgres://${{ secrets.RENDER_PG_USER }}:${{ secrets.RENDER_PG_PASS }}@${{ secrets.RENDER_PG_HOST }}/${{ env.PR_NUMBER }}-ee-tjdb"
|
||||
},
|
||||
{
|
||||
"key": "PGRST_HOST",
|
||||
|
|
@ -518,7 +458,7 @@ jobs:
|
|||
},
|
||||
{
|
||||
"key": "TOOLJET_HOST",
|
||||
"value": "https://tooljet-pr-${{ env.PR_NUMBER }}.onrender.com"
|
||||
"value": "https://tooljet-ee-pr-${{ env.PR_NUMBER }}.onrender.com"
|
||||
},
|
||||
{
|
||||
"key": "DISABLE_TOOLJET_TELEMETRY",
|
||||
|
|
@ -553,12 +493,28 @@ jobs:
|
|||
"value": "${{ secrets.RENDER_REDIS_PORT }}"
|
||||
},
|
||||
{
|
||||
"key": "LICENSE_KEY",
|
||||
"value": "${{ secrets.RENDER_LICENSE_KEY }}"
|
||||
"key": "TEMPORAL_SERVER_ADDRESS",
|
||||
"value": "https://auto-setup-1-25-1.onrender.com"
|
||||
},
|
||||
{
|
||||
"key": "TEMPORAL_TASK_QUEUE_NAME_FOR_WORKFLOWS",
|
||||
"value": "tooljet-ee-pr-${{ env.PR_NUMBER }}"
|
||||
},
|
||||
{
|
||||
"key": "TOOLJET_WORKFLOWS_TEMPORAL_NAMESPACE",
|
||||
"value": "default"
|
||||
},
|
||||
{
|
||||
"key": "TOOLJET_MARKETPLACE_URL",
|
||||
"value": "${{ secrets.MARKETPLACE_BUCKET }}"
|
||||
},
|
||||
{
|
||||
"key": "BRANCH_NAME",
|
||||
"value": "${{ env.BRANCH_NAME }}"
|
||||
},
|
||||
{
|
||||
"key": "CUSTOM_GITHUB_TOKEN",
|
||||
"value": "${{ secrets.CUSTOM_GITHUB_TOKEN }}"
|
||||
}
|
||||
],
|
||||
"serviceDetails": {
|
||||
|
|
@ -567,7 +523,7 @@ jobs:
|
|||
"envSpecificDetails": {
|
||||
"dockerCommand": "",
|
||||
"dockerContext": "./",
|
||||
"dockerfilePath": "./docker/preview.Dockerfile"
|
||||
"dockerfilePath": "./docker/ee/ee-preview.Dockerfile"
|
||||
},
|
||||
"healthCheckPath": "/api/health",
|
||||
"numInstances": 1,
|
||||
|
|
@ -578,7 +534,7 @@ jobs:
|
|||
"plan": "starter",
|
||||
"pullRequestPreviewsEnabled": "no",
|
||||
"region": "oregon",
|
||||
"url": "https://tooljet-pr-${{ env.PR_NUMBER }}.onrender.com"
|
||||
"url": "https://tooljet-ee-pr-${{ env.PR_NUMBER }}.onrender.com"
|
||||
}
|
||||
}')
|
||||
|
||||
|
|
@ -595,7 +551,7 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: 'Deployment: https://tooljet-pr-${{ env.PR_NUMBER }}.onrender.com \n Dashboard: https://dashboard.render.com/web/${{ env.SERVICE_ID }}'
|
||||
body: 'Enterpise Edition: \n Deployment: https://tooljet-ee-pr-${{ env.PR_NUMBER }}.onrender.com \n Dashboard: https://dashboard.render.com/web/${{ env.SERVICE_ID }}'
|
||||
})
|
||||
|
||||
- uses: actions/github-script@v6
|
||||
|
|
@ -606,7 +562,7 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'create-review-app'
|
||||
name: 'create-ee-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
|
|
@ -616,5 +572,526 @@ jobs:
|
|||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
labels: ['active-review-app']
|
||||
labels: ['active-ee-review-app']
|
||||
})
|
||||
|
||||
destroy-ee-review-app:
|
||||
if: ${{ (github.event.action == 'labeled' && github.event.label.name == 'destroy-ee-review-app') || github.event.action == 'closed' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Delete service
|
||||
run: |
|
||||
export SERVICE_ID=$(curl --request GET \
|
||||
--url 'https://api.render.com/v1/services?name=ToolJet%20EE%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
|
||||
--header 'accept: application/json' \
|
||||
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
|
||||
jq -r '.[0].service.id')
|
||||
|
||||
curl --request DELETE \
|
||||
--url https://api.render.com/v1/services/$SERVICE_ID \
|
||||
--header 'accept: application/json' \
|
||||
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}'
|
||||
|
||||
- uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
try {
|
||||
await github.rest.issues.removeLabel({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'destroy-ee-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
try {
|
||||
await github.rest.issues.removeLabel({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'suspend-ee-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
try {
|
||||
await github.rest.issues.removeLabel({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'active-ee-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
- name: Install PostgreSQL client
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install postgresql-client -y
|
||||
|
||||
- name: Wait after installing PostgreSQL
|
||||
run: sleep 25
|
||||
|
||||
- name: Drop PostgreSQL PR databases
|
||||
env:
|
||||
PGHOST: ${{ secrets.RENDER_DS_PG_HOST }}
|
||||
PGPORT: 5432
|
||||
PGUSER: ${{ secrets.RENDER_DS_PG_USER }}
|
||||
PGDATABASE: ${{ env.PR_NUMBER }}-ee
|
||||
PGTJBDATABASE: ${{ env.PR_NUMBER }}-ee-tjdb
|
||||
run: |
|
||||
if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGDATABASE; then
|
||||
echo "Database $PGDATABASE exists, deleting..."
|
||||
PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGDATABASE\" ;"
|
||||
else
|
||||
echo "Database $PGDATABASE does not exist."
|
||||
fi
|
||||
|
||||
if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGTJBDATABASE; then
|
||||
echo "Database $PGTJBDATABASE exists, deleting..."
|
||||
PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGTJBDATABASE\" ;"
|
||||
else
|
||||
echo "Database $PGTJBDATABASE does not exist."
|
||||
fi
|
||||
|
||||
suspend-ee-review-app:
|
||||
if: ${{ github.event.action == 'labeled' && github.event.label.name == 'suspend-ee-review-app' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Suspend service
|
||||
run: |
|
||||
export SERVICE_ID=$(curl --request GET \
|
||||
--url 'https://api.render.com/v1/services?name=ToolJet%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
|
||||
--header 'accept: application/json' \
|
||||
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
|
||||
jq -r '.[0].service.id')
|
||||
|
||||
curl --request POST \
|
||||
--url https://api.render.com/v1/services/$SERVICE_ID/suspend \
|
||||
--header 'accept: application/json' \
|
||||
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}'
|
||||
|
||||
- uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
try {
|
||||
await github.rest.issues.removeLabel({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'active-ee-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
resume-ee-review-app:
|
||||
if: ${{ github.event.action == 'unlabeled' && github.event.label.name == 'suspend-ee-review-app' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Resume service
|
||||
run: |
|
||||
export SERVICE_ID=$(curl --request GET \
|
||||
--url 'https://api.render.com/v1/services?name=ToolJet%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
|
||||
--header 'accept: application/json' \
|
||||
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
|
||||
jq -r '.[0].service.id')
|
||||
|
||||
curl --request POST \
|
||||
--url https://api.render.com/v1/services/$SERVICE_ID/resume \
|
||||
--header 'accept: application/json' \
|
||||
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}'
|
||||
|
||||
- uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
await github.rest.issues.addLabels({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
labels: ['active-ee-review-app']
|
||||
})
|
||||
|
||||
try {
|
||||
await github.rest.issues.removeLabel({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'suspend-ee-review-app'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
# Cloud Edition
|
||||
|
||||
# create-cloud-review-app:
|
||||
# if: ${{ github.event.action == 'labeled' && (github.event.label.name == 'create-cloud-review-app' || github.event.label.name == 'review-app') }}
|
||||
# runs-on: ubuntu-latest
|
||||
|
||||
# steps:
|
||||
# - name: Creating deployment for Cloud Edition
|
||||
# id: create-cloud-deployment
|
||||
# run: |
|
||||
# export RESPONSE=$(curl --request POST \
|
||||
# --url https://api.render.com/v1/services \
|
||||
# --header 'accept: application/json' \
|
||||
# --header 'content-type: application/json' \
|
||||
# --header 'Authorization: Bearer ${{ secrets.RENDER_API_KEY }}' \
|
||||
# --data '
|
||||
# {
|
||||
# "autoDeploy": "yes",
|
||||
# "branch": "${{ env.BRANCH_NAME }}",
|
||||
# "name": "ToolJet Cloud PR #${{ env.PR_NUMBER }}",
|
||||
# "notifyOnFail": "default",
|
||||
# "ownerId": "tea-caeo4bj19n072h3dddc0",
|
||||
# "repo": "https://github.com/ToolJet/ToolJet",
|
||||
# "slug": "tooljet-cloud-pr-${{ env.PR_NUMBER }}",
|
||||
# "suspended": "not_suspended",
|
||||
# "suspenders": [],
|
||||
# "type": "web_service",
|
||||
# "envVars": [
|
||||
# {
|
||||
# "key": "PG_HOST",
|
||||
# "value": "${{ secrets.RENDER_PG_HOST }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "PG_PORT",
|
||||
# "value": "5432"
|
||||
# },
|
||||
# {
|
||||
# "key": "PG_USER",
|
||||
# "value": "${{ secrets.RENDER_PG_USER }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "PG_PASS",
|
||||
# "value": "${{ secrets.RENDER_PG_PASS }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "PG_DB",
|
||||
# "value": "${{ env.PR_NUMBER }}-cloud"
|
||||
# },
|
||||
# {
|
||||
# "key": "TOOLJET_DB",
|
||||
# "value": "${{ env.PR_NUMBER }}-cloud-tjdb"
|
||||
# },
|
||||
# {
|
||||
# "key": "TOOLJET_DB_HOST",
|
||||
# "value": "${{ secrets.RENDER_PG_HOST }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "TOOLJET_DB_USER",
|
||||
# "value": "${{ secrets.RENDER_PG_USER }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "TOOLJET_DB_PASS",
|
||||
# "value": "${{ secrets.RENDER_PG_PASS }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "TOOLJET_DB_PORT",
|
||||
# "value": "5432"
|
||||
# },
|
||||
# {
|
||||
# "key": "PGRST_DB_PRE_CONFIG",
|
||||
# "value": "postgrest.pre_config"
|
||||
# },
|
||||
# {
|
||||
# "key": "PGRST_DB_URI",
|
||||
# "value": "postgres://${{ secrets.RENDER_PG_USER }}:${{ secrets.RENDER_PG_PASS }}@${{ secrets.RENDER_PG_HOST }}/${{ env.PR_NUMBER }}-cloud-tjdb"
|
||||
# },
|
||||
# {
|
||||
# "key": "PGRST_HOST",
|
||||
# "value": "127.0.0.1:3000"
|
||||
# },
|
||||
# {
|
||||
# "key": "PGRST_JWT_SECRET",
|
||||
# "value": "r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj"
|
||||
# },
|
||||
# {
|
||||
# "key": "PGRST_LOG_LEVEL",
|
||||
# "value": "info"
|
||||
# },
|
||||
# {
|
||||
# "key": "PORT",
|
||||
# "value": "80"
|
||||
# },
|
||||
# {
|
||||
# "key": "TOOLJET_HOST",
|
||||
# "value": "https://tooljet-cloud-pr-${{ env.PR_NUMBER }}.onrender.com"
|
||||
# },
|
||||
# {
|
||||
# "key": "DISABLE_TOOLJET_TELEMETRY",
|
||||
# "value": "true"
|
||||
# },
|
||||
# {
|
||||
# "key": "SMTP_ADDRESS",
|
||||
# "value": "smtp.mailtrap.io"
|
||||
# },
|
||||
# {
|
||||
# "key": "SMTP_DOMAIN",
|
||||
# "value": "smtp.mailtrap.io"
|
||||
# },
|
||||
# {
|
||||
# "key": "SMTP_PORT",
|
||||
# "value": "2525"
|
||||
# },
|
||||
# {
|
||||
# "key": "SMTP_USERNAME",
|
||||
# "value": "${{ secrets.RENDER_SMTP_USERNAME }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "SMTP_PASSWORD",
|
||||
# "value": "${{ secrets.RENDER_SMTP_PASSWORD }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "REDIS_HOST",
|
||||
# "value": "${{ secrets.RENDER_REDIS_HOST }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "REDIS_PORT",
|
||||
# "value": "${{ secrets.RENDER_REDIS_PORT }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "TEMPORAL_SERVER_ADDRESS",
|
||||
# "value": "https://auto-setup-1-25-1.onrender.com"
|
||||
# },
|
||||
# {
|
||||
# "key": "TEMPORAL_TASK_QUEUE_NAME_FOR_WORKFLOWS",
|
||||
# "value": "tooljet-cloud-pr-${{ env.PR_NUMBER }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "TOOLJET_WORKFLOWS_TEMPORAL_NAMESPACE",
|
||||
# "value": "default"
|
||||
# },
|
||||
# {
|
||||
# "key": "TOOLJET_MARKETPLACE_URL",
|
||||
# "value": "${{ secrets.MARKETPLACE_BUCKET }}"
|
||||
# },
|
||||
# {
|
||||
# "key": "CUSTOM_GITHUB_TOKEN",
|
||||
# "value": "${{ secrets.CUSTOM_GITHUB_TOKEN }}"
|
||||
# }
|
||||
# ],
|
||||
# "serviceDetails": {
|
||||
# "disk": null,
|
||||
# "env": "docker",
|
||||
# "envSpecificDetails": {
|
||||
# "dockerCommand": "",
|
||||
# "dockerContext": "./",
|
||||
# "dockerfilePath": "./docker/cloud/cloud-preview.Dockerfile"
|
||||
# },
|
||||
# "healthCheckPath": "/api/health",
|
||||
# "numInstances": 1,
|
||||
# "openPorts": [{
|
||||
# "port": 80,
|
||||
# "protocol": "TCP"
|
||||
# }],
|
||||
# "plan": "starter",
|
||||
# "pullRequestPreviewsEnabled": "no",
|
||||
# "region": "oregon",
|
||||
# "url": "https://tooljet-cloud-pr-${{ env.PR_NUMBER }}.onrender.com"
|
||||
# }
|
||||
# }')
|
||||
|
||||
# echo "response: $RESPONSE"
|
||||
# export SERVICE_ID=$(echo $RESPONSE | jq -r '.service.id')
|
||||
# echo "SERVICE_ID=$SERVICE_ID" >> $GITHUB_ENV
|
||||
|
||||
# - name: Comment deployment URL
|
||||
# uses: actions/github-script@v5
|
||||
# with:
|
||||
# github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
# script: |
|
||||
# github.rest.issues.createComment({
|
||||
# issue_number: context.issue.number,
|
||||
# owner: context.repo.owner,
|
||||
# repo: context.repo.repo,
|
||||
# body: 'Cloud Edition: \n Deployment: https://tooljet-cloud-pr-${{ env.PR_NUMBER }}.onrender.com \n Dashboard: https://dashboard.render.com/web/${{ env.SERVICE_ID }}'
|
||||
# })
|
||||
|
||||
# - uses: actions/github-script@v6
|
||||
# with:
|
||||
# script: |
|
||||
# try {
|
||||
# await github.rest.issues.removeLabel({
|
||||
# issue_number: context.issue.number,
|
||||
# owner: context.repo.owner,
|
||||
# repo: context.repo.repo,
|
||||
# name: 'create-cloud-review-app'
|
||||
# })
|
||||
# } catch (e) {
|
||||
# console.log(e)
|
||||
# }
|
||||
|
||||
# await github.rest.issues.addLabels({
|
||||
# issue_number: context.issue.number,
|
||||
# owner: context.repo.owner,
|
||||
# repo: context.repo.repo,
|
||||
# labels: ['active-cloud-review-app']
|
||||
# })
|
||||
|
||||
# destroy-cloud-review-app:
|
||||
# if: ${{ (github.event.action == 'labeled' && github.event.label.name == 'destroy-cloud-review-app') || github.event.action == 'closed' }}
|
||||
# runs-on: ubuntu-latest
|
||||
|
||||
# steps:
|
||||
# - name: Delete service
|
||||
# run: |
|
||||
# export SERVICE_ID=$(curl --request GET \
|
||||
# --url 'https://api.render.com/v1/services?name=ToolJet%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
|
||||
# --header 'accept: application/json' \
|
||||
# --header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
|
||||
# jq -r '.[0].service.id')
|
||||
|
||||
# curl --request DELETE \
|
||||
# --url https://api.render.com/v1/services/$SERVICE_ID \
|
||||
# --header 'accept: application/json' \
|
||||
# --header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}'
|
||||
|
||||
# - uses: actions/github-script@v6
|
||||
# with:
|
||||
# script: |
|
||||
# try {
|
||||
# await github.rest.issues.removeLabel({
|
||||
# issue_number: context.issue.number,
|
||||
# owner: context.repo.owner,
|
||||
# repo: context.repo.repo,
|
||||
# name: 'destroy-cloud-review-app'
|
||||
# })
|
||||
# } catch (e) {
|
||||
# console.log(e)
|
||||
# }
|
||||
|
||||
# try {
|
||||
# await github.rest.issues.removeLabel({
|
||||
# issue_number: context.issue.number,
|
||||
# owner: context.repo.owner,
|
||||
# repo: context.repo.repo,
|
||||
# name: 'suspend-cloud-review-app'
|
||||
# })
|
||||
# } catch (e) {
|
||||
# console.log(e)
|
||||
# }
|
||||
|
||||
# try {
|
||||
# await github.rest.issues.removeLabel({
|
||||
# issue_number: context.issue.number,
|
||||
# owner: context.repo.owner,
|
||||
# repo: context.repo.repo,
|
||||
# name: 'active-cloud-review-app'
|
||||
# })
|
||||
# } catch (e) {
|
||||
# console.log(e)
|
||||
# }
|
||||
|
||||
# - name: Install PostgreSQL client
|
||||
# run: |
|
||||
# sudo apt update
|
||||
# sudo apt install postgresql-client -y
|
||||
|
||||
# - name: Wait after installing PostgreSQL
|
||||
# run: sleep 25
|
||||
|
||||
# - name: Drop PostgreSQL PR databases
|
||||
# env:
|
||||
# PGHOST: ${{ secrets.RENDER_DS_PG_HOST }}
|
||||
# PGPORT: 5432
|
||||
# PGUSER: ${{ secrets.RENDER_DS_PG_USER }}
|
||||
# PGDATABASE: ${{ env.PR_NUMBER }}-cloud
|
||||
# PGTJBDATABASE: ${{ env.PR_NUMBER }}-cloud-tjdb
|
||||
# run: |
|
||||
# if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGDATABASE; then
|
||||
# echo "Database $PGDATABASE exists, deleting..."
|
||||
# PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGDATABASE\" ;"
|
||||
# else
|
||||
# echo "Database $PGDATABASE does not exist."
|
||||
# fi
|
||||
|
||||
# if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGTJBDATABASE; then
|
||||
# echo "Database $PGTJBDATABASE exists, deleting..."
|
||||
# PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGTJBDATABASE\" ;"
|
||||
# else
|
||||
# echo "Database $PGTJBDATABASE does not exist."
|
||||
# fi
|
||||
|
||||
# suspend-cloud-review-app:
|
||||
# if: ${{ github.event.action == 'labeled' && github.event.label.name == 'suspend-cloud-review-app' }}
|
||||
# runs-on: ubuntu-latest
|
||||
|
||||
# steps:
|
||||
# - name: Suspend service
|
||||
# run: |
|
||||
# export SERVICE_ID=$(curl --request GET \
|
||||
# --url 'https://api.render.com/v1/services?name=ToolJet%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
|
||||
# --header 'accept: application/json' \
|
||||
# --header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
|
||||
# jq -r '.[0].service.id')
|
||||
|
||||
# curl --request POST \
|
||||
# --url https://api.render.com/v1/services/$SERVICE_ID/suspend \
|
||||
# --header 'accept: application/json' \
|
||||
# --header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}'
|
||||
|
||||
# - uses: actions/github-script@v6
|
||||
# with:
|
||||
# script: |
|
||||
# try {
|
||||
# await github.rest.issues.removeLabel({
|
||||
# issue_number: context.issue.number,
|
||||
# owner: context.repo.owner,
|
||||
# repo: context.repo.repo,
|
||||
# name: 'active-cloud-review-app'
|
||||
# })
|
||||
# } catch (e) {
|
||||
# console.log(e)
|
||||
# }
|
||||
|
||||
# resume-cloud-review-app:
|
||||
# if: ${{ github.event.action == 'unlabeled' && github.event.label.name == 'suspend-cloud-review-app' }}
|
||||
# runs-on: ubuntu-latest
|
||||
|
||||
# steps:
|
||||
# - name: Resume service
|
||||
# run: |
|
||||
# export SERVICE_ID=$(curl --request GET \
|
||||
# --url 'https://api.render.com/v1/services?name=ToolJet%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
|
||||
# --header 'accept: application/json' \
|
||||
# --header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
|
||||
# jq -r '.[0].service.id')
|
||||
|
||||
# curl --request POST \
|
||||
# --url https://api.render.com/v1/services/$SERVICE_ID/resume \
|
||||
# --header 'accept: application/json' \
|
||||
# --header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}'
|
||||
|
||||
# - uses: actions/github-script@v6
|
||||
# with:
|
||||
# script: |
|
||||
# await github.rest.issues.addLabels({
|
||||
# issue_number: context.issue.number,
|
||||
# owner: context.repo.owner,
|
||||
# repo: context.repo.repo,
|
||||
# labels: ['active-cloud-review-app']
|
||||
# })
|
||||
|
||||
# try {
|
||||
# await github.rest.issues.removeLabel({
|
||||
# issue_number: context.issue.number,
|
||||
# owner: context.repo.owner,
|
||||
# repo: context.repo.repo,
|
||||
# name: 'suspend-cloud-review-app'
|
||||
# })
|
||||
# } catch (e) {
|
||||
# console.log(e)
|
||||
# }
|
||||
|
||||
|
|
|
|||
|
|
@ -1,65 +0,0 @@
|
|||
name: Tooljet develop docker image build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
job-to-run:
|
||||
description: Enter the job name (tooljet-develop-image)
|
||||
options: ["tooljet-develop-image"]
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
tooljet-develop-image:
|
||||
runs-on: ubuntu-latest
|
||||
if: |
|
||||
${{ github.ref == 'refs/heads/develop' }} &&
|
||||
${{ github.event_name == 'workflow_dispatch' && github.event.inputs.job-to-run == 'tooljet-develop-image' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
ref: refs/heads/develop
|
||||
|
||||
# Create Docker Buildx builder with platform configuration
|
||||
- name: Set up Docker Buildx
|
||||
run: |
|
||||
mkdir -p ~/.docker/cli-plugins
|
||||
curl -SL https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx
|
||||
chmod a+x ~/.docker/cli-plugins/docker-buildx
|
||||
docker buildx create --name mybuilder --platform linux/arm64,linux/amd64,linux/amd64/v2,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||
docker buildx use mybuilder
|
||||
|
||||
- name: Set DOCKER_CLI_EXPERIMENTAL
|
||||
run: echo "DOCKER_CLI_EXPERIMENTAL=enabled" >> $GITHUB_ENV
|
||||
|
||||
- name: use mybuilder buildx
|
||||
run: docker buildx use mybuilder
|
||||
|
||||
- name: Docker Login
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build and Push Docker image
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
file: docker/production.Dockerfile
|
||||
push: true
|
||||
tags: tooljet/tooljet-ce:develop
|
||||
platforms: linux/amd64
|
||||
env:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Send Slack Notification on Failure
|
||||
if: failure()
|
||||
run: |
|
||||
message="Job '${{ env.JOB_NAME }}' failed! tooljet/tooljet-ce:develop"
|
||||
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" ${{ secrets.SLACK_WEBHOOK_URL_OPS_CHANNEL }}
|
||||
40
.github/workflows/update-lts-test-system.yml
vendored
|
|
@ -1,40 +0,0 @@
|
|||
name: LTS Test system deploy
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Tooljet release docker images build"]
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
Build-and-update-image:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- name: SSH into GCP VM instance
|
||||
uses: appleboy/ssh-action@master
|
||||
with:
|
||||
host: ${{ secrets.EC2_INSTANCE_IP }}
|
||||
username: ${{ secrets.GCP_USERNAME }}
|
||||
key: ${{ secrets.EC2_INSTANCE_SSH_KEY }}
|
||||
script: |
|
||||
ls -lah
|
||||
|
||||
# Stop the Docker containers
|
||||
sudo docker-compose down
|
||||
|
||||
# Remove the existing tooljet/* images
|
||||
sudo docker images -a | grep 'tooljet/' | awk '{print $3}' | xargs sudo docker rmi -f
|
||||
|
||||
# Check remaining images
|
||||
sudo docker images
|
||||
|
||||
# Update docker-compose.yml with the new image for tooljet service
|
||||
sed -i '/^[[:space:]]*tooljet:/,/^[[:space:]]*[^:]*$/ { /^[[:space:]]*image:[[:space:]]*tooljet\/tj-osv/s|\(image:[[:space:]]*\).*|\1tooljet/tj-osv:'"${{ env.SAFE_BRANCH_NAME }}"'| }' docker-compose.yaml
|
||||
|
||||
# Start the Docker containers
|
||||
cat docker-compose.yaml
|
||||
sudo docker-compose up -d
|
||||
|
||||
#View containers
|
||||
sudo docker ps
|
||||
132
.github/workflows/update-test-system.yml
vendored
|
|
@ -1,132 +0,0 @@
|
|||
name: Test system deploy
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [labeled, unlabeled, closed]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
|
||||
env:
|
||||
PR_NUMBER: ${{ github.event.number }}
|
||||
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
|
||||
|
||||
jobs:
|
||||
Build-and-update-image:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
if: ${{ github.event.action == 'labeled' && github.event.label.name == 'test-system-deploy' }}
|
||||
|
||||
steps:
|
||||
|
||||
- name: Check authorization
|
||||
run: |
|
||||
allowed_user1=${{ secrets.ALLOWED_USER1_USERNAME }}
|
||||
allowed_user2=${{ secrets.ALLOWED_USER2_USERNAME }}
|
||||
allowed_user3=${{ secrets.ALLOWED_USER3_USERNAME }}
|
||||
allowed_user4=${{ secrets.ALLOWED_USER4_USERNAME }}
|
||||
allowed_user5=${{ secrets.ALLOWED_USER5_USERNAME }}
|
||||
allowed_user6=${{ secrets.ALLOWED_USER6_USERNAME }}
|
||||
allowed_user6=${{ secrets.ALLOWED_USER7_USERNAME }}
|
||||
|
||||
if [[ "${{ github.actor }}" != "$allowed_user1" && \
|
||||
"${{ github.actor }}" != "$allowed_user2" && \
|
||||
"${{ github.actor }}" != "$allowed_user3" && \
|
||||
"${{ github.actor }}" != "$allowed_user4" && \
|
||||
"${{ github.actor }}" != "$allowed_user5" && \
|
||||
"${{ github.actor }}" != "$allowed_user6" && \
|
||||
"${{ github.actor }}" != "$allowed_user7" ]]; then
|
||||
echo "User not authorized to trigger this workflow"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.ref }}
|
||||
|
||||
# Create Docker Buildx builder with platform configuration
|
||||
- name: Set up Docker Buildx
|
||||
run: |
|
||||
mkdir -p ~/.docker/cli-plugins
|
||||
curl -SL https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx
|
||||
chmod a+x ~/.docker/cli-plugins/docker-buildx
|
||||
docker buildx create --name mybuilder --platform linux/arm64,linux/amd64,linux/amd64/v2,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||
docker buildx use mybuilder
|
||||
|
||||
- name: Set DOCKER_CLI_EXPERIMENTAL
|
||||
run: echo "DOCKER_CLI_EXPERIMENTAL=enabled" >> $GITHUB_ENV
|
||||
|
||||
- name: use mybuilder buildx
|
||||
run: docker buildx use mybuilder
|
||||
|
||||
- name: Docker Login
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Set SAFE_BRANCH_NAME
|
||||
run: echo "SAFE_BRANCH_NAME=$(echo ${{ env.BRANCH_NAME }} | tr '/' '-')" >> $GITHUB_ENV
|
||||
|
||||
- name: Build and Push Docker image
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
file: docker/production.Dockerfile
|
||||
push: true
|
||||
tags: tooljet/tj-osv:${{ env.SAFE_BRANCH_NAME }}
|
||||
platforms: linux/amd64
|
||||
env:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: SSH into GCP VM instance
|
||||
uses: appleboy/ssh-action@master
|
||||
with:
|
||||
host: ${{ secrets.EC2_INSTANCE_IP }}
|
||||
username: ${{ secrets.GCP_USERNAME }}
|
||||
key: ${{ secrets.EC2_INSTANCE_SSH_KEY }}
|
||||
script: |
|
||||
ls -lah
|
||||
|
||||
# Stop the Docker containers
|
||||
sudo docker-compose down
|
||||
|
||||
# Remove the existing tooljet/* images
|
||||
sudo docker images -a | grep 'tooljet/' | awk '{print $3}' | xargs sudo docker rmi -f
|
||||
|
||||
# Check remaining images
|
||||
sudo docker images
|
||||
|
||||
# Update docker-compose.yml with the new image for tooljet service
|
||||
sed -i '/^[[:space:]]*tooljet:/,/^[[:space:]]*[^:]*$/ { /^[[:space:]]*image:[[:space:]]*tooljet\/tj-osv/s|\(image:[[:space:]]*\).*|\1tooljet/tj-osv:'"${{ env.SAFE_BRANCH_NAME }}"'| }' docker-compose.yaml
|
||||
|
||||
# Start the Docker containers
|
||||
cat docker-compose.yaml
|
||||
sudo docker-compose up -d
|
||||
|
||||
#View containers
|
||||
sudo docker ps
|
||||
|
||||
- uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
try {
|
||||
await github.rest.issues.removeLabel({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'test-system-deploy'
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
await github.rest.issues.addLabels({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
labels: ['test-system-deployed']
|
||||
})
|
||||
8
.gitmodules
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
[submodule "frontend/ee"]
|
||||
path = frontend/ee
|
||||
url = https://github.com/ToolJet/ee-frontend.git
|
||||
branch = main
|
||||
[submodule "server/ee"]
|
||||
path = server/ee
|
||||
url = https://github.com/ToolJet/ee-server.git
|
||||
branch = main
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
npx lint-staged
|
||||
#npx lint-staged
|
||||
|
|
|
|||
2
.version
|
|
@ -1 +1 @@
|
|||
3.2.2-ce
|
||||
3.7.0
|
||||
|
|
|
|||
18
.vscode/launch.json
vendored
|
|
@ -11,7 +11,21 @@
|
|||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Server",
|
||||
"name": "Server (Dev Mode)",
|
||||
"runtimeExecutable": "npm",
|
||||
"runtimeArgs": [
|
||||
"run",
|
||||
"start:dev"
|
||||
],
|
||||
"sourceMaps": true,
|
||||
"cwd": "${workspaceRoot}/server",
|
||||
"console": "integratedTerminal",
|
||||
"skipFiles": ["<node_internals>/**"]
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Server (Original)",
|
||||
"args": [
|
||||
"${workspaceFolder}/server/src/main.ts"
|
||||
],
|
||||
|
|
@ -49,7 +63,7 @@
|
|||
"remoteRoot": "/app/server",
|
||||
"sourceMaps": true,
|
||||
"skipFiles": ["<node_internals>/**"]
|
||||
},
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
6
Aptfile
|
|
@ -1,6 +0,0 @@
|
|||
# you can list packages
|
||||
libaio1
|
||||
|
||||
# or include links to specific .deb files
|
||||
|
||||
# or add custom apt repos (only required if using packages outside of the standard Ubuntu APT repositories)
|
||||
1
Procfile
|
|
@ -1 +0,0 @@
|
|||
web: npm run db:migrate && npm run start:prod --prefix server
|
||||
82
app.json
|
|
@ -1,82 +0,0 @@
|
|||
{
|
||||
"name": "ToolJet",
|
||||
"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://tooljet.com/blue-logo.png",
|
||||
"success_url": "/",
|
||||
"scripts": {
|
||||
"postdeploy": "export NODE_OPTIONS=\"--max_old_space_size=1024\"; npm run db:migrate"
|
||||
},
|
||||
"env": {
|
||||
"NODE_ENV": {
|
||||
"description": "Environment [production/development]",
|
||||
"value": "production"
|
||||
},
|
||||
"TOOLJET_HOST": {
|
||||
"description": "Public URL of ToolJet installation. This is usually https://<app-name-in-first-step>.herokuapp.com",
|
||||
"value": "https://<app-name-in-first-step>.herokuapp.com"
|
||||
},
|
||||
"TOOLJET_SERVER_URL": {
|
||||
"description": "URL of ToolJet server installation. (This is same as the TOOLJET_HOST for Heroku deployments)",
|
||||
"value": "https://<app-name-in-first-step>.herokuapp.com"
|
||||
},
|
||||
"LOCKBOX_MASTER_KEY": {
|
||||
"description": "Master key for encrypting datasource credentials.",
|
||||
"value": ""
|
||||
},
|
||||
"SECRET_KEY_BASE": {
|
||||
"description": "Used by ToolJet server as the input secret to the application's key generator.",
|
||||
"value": ""
|
||||
},
|
||||
"NODE_OPTIONS": {
|
||||
"description": "Node options configured to increase node memory to support app build",
|
||||
"value": "--max-old-space-size=4096"
|
||||
},
|
||||
"DISABLE_SIGNUPS": {
|
||||
"description": "Disable sign up in login page only applicable if Multi-Workspace feature is turned on",
|
||||
"value": "false"
|
||||
},
|
||||
"ENABLE_TOOLJET_DB": {
|
||||
"description": "To enable Tooljet Database feature",
|
||||
"value": "false"
|
||||
},
|
||||
"DEPLOYMENT_PLATFORM": {
|
||||
"description": "Platform ToolJet is deployed on",
|
||||
"value": "heroku"
|
||||
}
|
||||
},
|
||||
"formation": {
|
||||
"web": {
|
||||
"quantity": 1,
|
||||
"size": "standard-2x"
|
||||
}
|
||||
},
|
||||
"image": "heroku/nodejs",
|
||||
"addons": [
|
||||
{
|
||||
"plan": "heroku-postgresql",
|
||||
"options": {
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"buildpacks": [
|
||||
{
|
||||
"url": "heroku/nodejs"
|
||||
},
|
||||
{
|
||||
"url": "heroku-community/apt"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/featurist/oracle-client-buildpack.git"
|
||||
}
|
||||
],
|
||||
"environments": {
|
||||
"test": {
|
||||
"scripts": {
|
||||
"test": "npm run test --prefix server && npm run test:e2e --prefix server"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -35,7 +35,7 @@ then
|
|||
fi
|
||||
fi
|
||||
|
||||
npm --prefix server run db:setup:prod
|
||||
TOOLJET_EDTION=ce npm --prefix server run db:setup:prod
|
||||
|
||||
if sudo systemctl start nest
|
||||
then
|
||||
|
|
@ -78,4 +78,4 @@ npm install -g npm@9.8.1
|
|||
|
||||
# Building ToolJet app
|
||||
npm install -g @nestjs/cli
|
||||
npm run build
|
||||
TOOLJET_EDTION=ce npm run build
|
||||
68
deploy/ec2/ee/.env
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
# https://docs.tooljet.io/docs/setup/env-vars
|
||||
TOOLJET_HOST=http://localhost
|
||||
LOCKBOX_MASTER_KEY=
|
||||
SECRET_KEY_BASE=
|
||||
PG_USER=
|
||||
PG_HOST=
|
||||
PG_PASS=
|
||||
PG_DB=tooljet_prod
|
||||
ORM_LOGGING=true
|
||||
NODE_ENV=production
|
||||
DEPLOYMENT_PLATFORM=ec2
|
||||
|
||||
# ToolJet Database
|
||||
TOOLJET_DB=tooljet_db
|
||||
TOOLJET_DB_USER=
|
||||
TOOLJET_DB_HOST=
|
||||
TOOLJET_DB_PASS=
|
||||
PGRST_HOST=localhost:3001
|
||||
PGRST_SERVER_PORT=3001
|
||||
PGRST_JWT_SECRET=
|
||||
PGRST_DB_URI=
|
||||
PGRST_DB_PRE_CONFIG=postgrest.pre_config
|
||||
|
||||
|
||||
#Redis
|
||||
REDIS_HOST=localhost
|
||||
REDIS_PORT=6379
|
||||
REDIS_USER=default
|
||||
REDIS_PASSWORD=
|
||||
|
||||
# Checks every 24 hours to see if a new version of ToolJet is available
|
||||
# (Enabled by default. Set 0 to disable)
|
||||
CHECK_FOR_UPDATES=
|
||||
|
||||
# Checks every 24 hours to update app telemetry data to ToolJet hub.
|
||||
# (Telemetry is enabled by default. Set value to true to disable.)
|
||||
# DISABLE_APP_TELEMETRY=false
|
||||
|
||||
GOOGLE_CLIENT_ID=
|
||||
GOOGLE_CLIENT_SECRET=
|
||||
|
||||
# EMAIL CONFIGURATION
|
||||
DEFAULT_FROM_EMAIL=hello@tooljet.io
|
||||
SMTP_USERNAME=
|
||||
SMTP_PASSWORD=
|
||||
SMTP_DOMAIN=
|
||||
SMTP_PORT=
|
||||
|
||||
# DISABLE USER SIGNUPS (true or false). Default: true
|
||||
DISABLE_SIGNUPS=
|
||||
|
||||
# OBSERVABILITY
|
||||
APM_VENDOR=
|
||||
SENTRY_DNS=
|
||||
SENTRY_DEBUG=
|
||||
|
||||
# FEATURE TOGGLE
|
||||
COMMENT_FEATURE_ENABLE=true
|
||||
ENABLE_MULTIPLAYER_EDITING=true
|
||||
ENABLE_MARKETPLACE_FEATURE=true
|
||||
|
||||
#SSO
|
||||
SSO_DISABLE_SIGNUP=
|
||||
SSO_RESTRICTED_DOMAIN=
|
||||
SSO_GOOGLE_OAUTH2_CLIENT_ID=
|
||||
SSO_GIT_OAUTH2_CLIENT_ID=
|
||||
SSO_GIT_OAUTH2_CLIENT_SECRET=
|
||||
SSO_GIT_OAUTH2_HOST=
|
||||
17
deploy/ec2/ee/nest.service
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
[Unit]
|
||||
Description=Nest Server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=ubuntu
|
||||
|
||||
WorkingDirectory=/home/ubuntu/app
|
||||
Environment="NODE_ENV=production"
|
||||
EnvironmentFile=/home/ubuntu/app/.env
|
||||
RestartSec=1
|
||||
ExecStart=/usr/bin/npm --prefix /home/ubuntu/app run start:prod
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
16
deploy/ec2/ee/postgrest.service
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
[Unit]
|
||||
Description=PostgREST Server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=ubuntu
|
||||
|
||||
WorkingDirectory=/bin
|
||||
EnvironmentFile=/home/ubuntu/app/.env
|
||||
RestartSec=1
|
||||
ExecStart=/bin/postgrest
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
45
deploy/ec2/ee/redis-server.service
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[Unit]
|
||||
Description=Advanced key-value store
|
||||
After=network.target
|
||||
Documentation=http://redis.io/documentation, man:redis-server(1)
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
|
||||
PIDFile=/run/redis/redis-server.pid
|
||||
TimeoutStopSec=0
|
||||
Restart=always
|
||||
User=redis
|
||||
Group=redis
|
||||
RuntimeDirectory=redis
|
||||
RuntimeDirectoryMode=2755
|
||||
|
||||
UMask=007
|
||||
PrivateTmp=yes
|
||||
LimitNOFILE=65535
|
||||
PrivateDevices=yes
|
||||
ProtectHome=yes
|
||||
ReadOnlyDirectories=/
|
||||
ReadWritePaths=-/var/lib/redis
|
||||
ReadWritePaths=-/var/log/redis
|
||||
ReadWritePaths=-/var/run/redis
|
||||
|
||||
NoNewPrivileges=true
|
||||
CapabilityBoundingSet=CAP_SETGID CAP_SETUID CAP_SYS_RESOURCE
|
||||
MemoryDenyWriteExecute=true
|
||||
ProtectKernelModules=true
|
||||
ProtectKernelTunables=true
|
||||
ProtectControlGroups=true
|
||||
RestrictRealtime=true
|
||||
RestrictNamespaces=true
|
||||
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
|
||||
|
||||
# redis-server can write to its own config file when in cluster mode so we
|
||||
# permit writing there by default. If you are not using this feature, it is
|
||||
# recommended that you replace the following lines with "ProtectSystem=full".
|
||||
ProtectSystem=true
|
||||
ReadWriteDirectories=-/etc/redis
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Alias=redis-server.service
|
||||
175
deploy/ec2/ee/setup_app
Executable file
|
|
@ -0,0 +1,175 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Load the .env file
|
||||
source .env
|
||||
|
||||
# Check if LOCKBOX_MASTER_KEY is present or empty
|
||||
if [[ -z "$LOCKBOX_MASTER_KEY" ]]; then
|
||||
# Generate LOCKBOX_MASTER_KEY
|
||||
LOCKBOX_MASTER_KEY=$(openssl rand -hex 32)
|
||||
|
||||
# Update .env file
|
||||
awk -v key="$LOCKBOX_MASTER_KEY" '
|
||||
BEGIN { FS=OFS="=" }
|
||||
/^LOCKBOX_MASTER_KEY=/ { $2=key; found=1 }
|
||||
1
|
||||
END { if (!found) print "LOCKBOX_MASTER_KEY="key }
|
||||
' .env > temp.env && mv temp.env .env
|
||||
|
||||
echo "Generated a secure master key for the lockbox"
|
||||
else
|
||||
echo "The lockbox master key already exists."
|
||||
fi
|
||||
|
||||
# Check if SECRET_KEY_BASE is present or empty
|
||||
if [[ -z "$SECRET_KEY_BASE" ]]; then
|
||||
# Generate SECRET_KEY_BASE
|
||||
SECRET_KEY_BASE=$(openssl rand -hex 64)
|
||||
|
||||
# Update .env file
|
||||
awk -v key="$SECRET_KEY_BASE" '
|
||||
BEGIN { FS=OFS="=" }
|
||||
/^SECRET_KEY_BASE=/ { $2=key; found=1 }
|
||||
1
|
||||
END { if (!found) print "SECRET_KEY_BASE="key }
|
||||
' .env > temp.env && mv temp.env .env
|
||||
|
||||
echo "Created a secret key for secure operations."
|
||||
else
|
||||
echo "The secret key base is already in place."
|
||||
fi
|
||||
|
||||
# Check if PGRST_JWT_SECRET is present or empty
|
||||
if [[ -z "$PGRST_JWT_SECRET" ]]; then
|
||||
# Generate PGRST_JWT_SECRET
|
||||
PGRST_JWT_SECRET=$(openssl rand -hex 32)
|
||||
|
||||
# Update .env file
|
||||
awk -v key="$PGRST_JWT_SECRET" '
|
||||
BEGIN { FS=OFS="=" }
|
||||
/^PGRST_JWT_SECRET=/ { $2=key; found=1 }
|
||||
1
|
||||
END { if (!found) print "PGRST_JWT_SECRET="key }
|
||||
' .env > temp.env && mv temp.env .env
|
||||
|
||||
echo "Generated a unique secret for PGRST authentication."
|
||||
else
|
||||
echo "The PGRST JWT secret is already generated and in place."
|
||||
fi
|
||||
|
||||
# Function to generate a random password
|
||||
generate_password() {
|
||||
openssl rand -base64 12 | tr -d '/+' | cut -c1-16
|
||||
}
|
||||
|
||||
# Check if PG_USER, PG_HOST, PG_PASS, PG_DB are present or empty
|
||||
if [[ -z "$PG_USER" ]] || [[ -z "$PG_HOST" ]] || [[ -z "$PG_PASS" ]] || [[ -z "$PG_DB" ]]; then
|
||||
# Prompt user for values
|
||||
read -p "Enter PostgreSQL database username: " PG_USER
|
||||
read -p "Enter PostgreSQL database hostname: " PG_HOST
|
||||
read -p "Enter PostgreSQL database password: " PG_PASS
|
||||
read -p "Enter PostgreSQL database name: " PG_DB
|
||||
|
||||
# Update .env file
|
||||
awk -v pg_user="$PG_USER" -v pg_host="$PG_HOST" -v pg_pass="$PG_PASS" -v pg_db="$PG_DB" '
|
||||
BEGIN { FS=OFS="=" }
|
||||
/^PG_USER=/ { $2=pg_user; found=1 }
|
||||
/^PG_HOST=/ { $2=pg_host; found=1 }
|
||||
/^PG_PASS=/ { $2=pg_pass; found=1 }
|
||||
/^PG_DB=/ { $2=pg_db; found=1 }
|
||||
1
|
||||
END {
|
||||
if (!found) {
|
||||
print "PG_USER="pg_user
|
||||
print "PG_HOST="pg_host
|
||||
print "PG_PASS="pg_pass
|
||||
print "PG_DB="pg_db
|
||||
}
|
||||
}
|
||||
' .env > temp.env && mv temp.env .env
|
||||
|
||||
echo "Successfully updated postgresql database values .env file"
|
||||
fi
|
||||
|
||||
# Copy values from PG to TOOLJET_DB
|
||||
TOOLJET_DB_USER=$PG_USER
|
||||
TOOLJET_DB_HOST=$PG_HOST
|
||||
TOOLJET_DB_PASS=$PG_PASS
|
||||
|
||||
# Update .env file for TOOLJET_DB
|
||||
awk -v tj_user="$TOOLJET_DB_USER" -v tj_host="$TOOLJET_DB_HOST" -v tj_pass="$TOOLJET_DB_PASS" '
|
||||
BEGIN { FS=OFS="=" }
|
||||
/^TOOLJET_DB_USER=/ { $2=tj_user; found=1 }
|
||||
/^TOOLJET_DB_HOST=/ { $2=tj_host; found=1 }
|
||||
/^TOOLJET_DB_PASS=/ { $2=tj_pass; found=1 }
|
||||
1
|
||||
END { if (!found) print "TOOLJET_DB_USER="tj_user ORS "TOOLJET_DB_HOST="tj_host ORS "TOOLJET_DB_PASS="tj_pass }
|
||||
' .env > temp.env && mv temp.env .env
|
||||
|
||||
echo "Successfully updated tooljet database values in the .env file"
|
||||
|
||||
# Construct PGRST_DB_URI with user-provided values
|
||||
PGRST_DB_URI="postgres://$PG_USER:$PG_PASS@$PG_HOST/tooljet_db"
|
||||
|
||||
# Update .env file for PGRST_DB_URI
|
||||
awk -v uri="$PGRST_DB_URI" '
|
||||
BEGIN { FS=OFS="=" }
|
||||
/^PGRST_DB_URI=/ { $2=uri; found=1 }
|
||||
1
|
||||
END { if (!found) print "PGRST_DB_URI="uri }
|
||||
' .env > temp.env && mv temp.env .env
|
||||
|
||||
echo "Successfully updated PGRST database URI"
|
||||
|
||||
|
||||
if [[ -z $PG_USER || -z $PG_PASS || -z $PG_HOST ]]
|
||||
then
|
||||
echo "Please set the required PG_USER, PG_PASS, and PG_HOST values within the .env file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
|
||||
if psql -d postgresql://$PG_USER:$PG_PASS@$PG_HOST/postgres -c 'select now()' > /dev/null 2>&1
|
||||
then
|
||||
echo "Successfully pinged the database!";
|
||||
else
|
||||
echo "Can't connect to the database. Kindly check the credenials provided in the .env file!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if sudo systemctl start redis-server && sudo systemctl enable redis-server
|
||||
then
|
||||
echo "Successfully started Redis!"
|
||||
else
|
||||
echo "Failed to start and enable Redis"
|
||||
fi
|
||||
|
||||
if sudo -E systemctl start openresty
|
||||
then
|
||||
echo "Successfully started reverse proxy!"
|
||||
else
|
||||
echo "Failed to start reverse proxy"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if sudo -E systemctl start postgrest
|
||||
then
|
||||
echo "Successfully started PostgREST server!"
|
||||
else
|
||||
echo "Failed to start PostgREST server"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TOOLJET_EDTION=ee npm --prefix server run db:setup:prod
|
||||
|
||||
if sudo -E systemctl start nest
|
||||
then
|
||||
echo "The app will be served at ${TOOLJET_HOST}"
|
||||
else
|
||||
echo "Failed to start the server!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo systemctl restart nest
|
||||
sudo -E systemctl restart postgrest
|
||||
99
deploy/ec2/ee/setup_machine.sh
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
# Setup prerequisite dependencies
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates apt-utils git curl postgresql-client
|
||||
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
|
||||
export NVM_DIR="$HOME/.nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
||||
nvm install 18.18.2
|
||||
sudo ln -s "$(which node)" /usr/bin/node
|
||||
sudo ln -s "$(which npm)" /usr/bin/npm
|
||||
|
||||
sudo npm i -g npm@9.8.1
|
||||
|
||||
# Setup openresty
|
||||
wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -
|
||||
echo "deb http://openresty.org/package/ubuntu bionic main" > openresty.list
|
||||
sudo mv openresty.list /etc/apt/sources.list.d/
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install --no-install-recommends openresty
|
||||
sudo apt-get install -y curl g++ gcc autoconf automake bison libc6-dev \
|
||||
libffi-dev libgdbm-dev libncurses5-dev libsqlite3-dev libtool \
|
||||
libyaml-dev make pkg-config sqlite3 zlib1g-dev libgmp-dev \
|
||||
libreadline-dev libssl-dev libmysqlclient-dev build-essential \
|
||||
freetds-dev libpq-dev
|
||||
sudo apt-get install -y luarocks
|
||||
sudo luarocks install lua-resty-auto-ssl
|
||||
sudo mkdir /etc/resty-auto-ssl /var/log/openresty /etc/fallback-certs
|
||||
sudo chown -R www-data:www-data /etc/resty-auto-ssl
|
||||
|
||||
# Oracle db client library setup
|
||||
sudo apt install -y libaio1
|
||||
curl -o instantclient-basiclite.zip https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip -SL && \
|
||||
curl -o instantclient-basiclite-11.zip https://tooljet-plugins-production.s3.us-east-2.amazonaws.com/marketplace-assets/oracledb/instantclients/instantclient-basiclite-linux.x64-11.2.0.4.0.zip -SL && \
|
||||
unzip instantclient-basiclite.zip && \
|
||||
unzip instantclient-basiclite-11.zip && \
|
||||
sudo mkdir -p /usr/lib/instantclient && sudo mv instantclient*/ /usr/lib/instantclient && \
|
||||
rm instantclient-basiclite.zip && \
|
||||
rm instantclient-basiclite-11.zip && \
|
||||
echo /usr/lib/instantclient/* | sudo tee /etc/ld.so.conf.d/oracle-instantclient.conf > /dev/null && sudo ldconfig
|
||||
# Set the Instant Client library paths
|
||||
export LD_LIBRARY_PATH="/usr/lib/instantclient/instantclient_11_2:/usr/lib/instantclient/instantclient_21_10${LD_LIBRARY_PATH}"
|
||||
|
||||
# Gen fallback certs
|
||||
sudo openssl rand -out /home/ubuntu/.rnd -hex 256
|
||||
sudo chown www-data:www-data /home/ubuntu/.rnd
|
||||
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
|
||||
-subj '/CN=sni-support-required-for-valid-ssl' \
|
||||
-keyout /etc/fallback-certs/resty-auto-ssl-fallback.key \
|
||||
-out /etc/fallback-certs/resty-auto-ssl-fallback.crt
|
||||
|
||||
# Setup nginx config
|
||||
export SERVER_HOST="${SERVER_HOST:=localhost}"
|
||||
export SERVER_USER="${SERVER_USER:=www-data}"
|
||||
VARS_TO_SUBSTITUTE='$SERVER_HOST:$SERVER_USER'
|
||||
envsubst "${VARS_TO_SUBSTITUTE}" < /tmp/nginx.conf > /tmp/nginx-substituted.conf
|
||||
sudo cp /tmp/nginx-substituted.conf /usr/local/openresty/nginx/conf/nginx.conf
|
||||
|
||||
# Download and setup postgrest binary
|
||||
curl -OL https://github.com/PostgREST/postgrest/releases/download/v12.0.2/postgrest-v12.0.2-linux-static-x64.tar.xz
|
||||
tar xJf postgrest-v12.0.2-linux-static-x64.tar.xz
|
||||
sudo mv ./postgrest /bin/postgrest
|
||||
sudo rm postgrest-v12.0.2-linux-static-x64.tar.xz
|
||||
|
||||
# Add the Redis APT repository
|
||||
sudo add-apt-repository ppa:redislabs/redis -y
|
||||
|
||||
# Install redis
|
||||
sudo apt-get update
|
||||
sudo apt-get install redis-server -y
|
||||
|
||||
# Setup app, postgrest and redis as systemd service
|
||||
sudo cp /tmp/nest.service /lib/systemd/system/nest.service
|
||||
sudo cp /tmp/postgrest.service /lib/systemd/system/postgrest.service
|
||||
sudo cp /tmp/redis-server.service /lib/systemd/system/redis-server.service
|
||||
|
||||
# Start and enable Redis service
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
# Setup app directory
|
||||
mkdir -p ~/app
|
||||
|
||||
git config --global url."https://x-access-token:CUSTOM_GITHUB_TOKEN@github.com/".insteadOf "https://github.com/"
|
||||
|
||||
#The below url will be edited dynamically when actions is triggered
|
||||
git clone -b main https://github.com/ToolJet/ToolJet.git ~/app && cd ~/app
|
||||
git submodule update --init --recursive
|
||||
git submodule foreach 'git checkout main || true'
|
||||
|
||||
mv /tmp/.env ~/app/.env
|
||||
mv /tmp/setup_app ~/app/setup_app
|
||||
sudo chmod +x ~/app/setup_app
|
||||
|
||||
npm install -g npm@9.8.1
|
||||
|
||||
# Building ToolJet app
|
||||
npm install -g @nestjs/cli
|
||||
TOOLJET_EDTION=ee npm run build
|
||||
77
deploy/ec2/ee/tooljet_ubuntu_focal.pkr.hcl
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
packer {
|
||||
required_plugins {
|
||||
amazon = {
|
||||
version = ">= 0.0.1"
|
||||
source = "github.com/hashicorp/amazon"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
source "amazon-ebs" "ubuntu" {
|
||||
ami_name = "${var.ami_name}"
|
||||
instance_type = "${var.instance_type}"
|
||||
region = "${var.ami_region}"
|
||||
ami_regions = "${var.ami_regions}"
|
||||
ami_groups = "${var.ami_groups}"
|
||||
|
||||
source_ami_filter {
|
||||
filters = {
|
||||
name = "ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"
|
||||
root-device-type = "ebs"
|
||||
virtualization-type = "hvm"
|
||||
}
|
||||
most_recent = true
|
||||
owners = ["099720109477"]
|
||||
}
|
||||
ssh_username = "ubuntu"
|
||||
ssh_clear_authorized_keys = "true"
|
||||
shutdown_behavior = "terminate"
|
||||
force_delete_snapshot = "true"
|
||||
|
||||
launch_block_device_mappings {
|
||||
device_name = "/dev/sda1"
|
||||
volume_size = 10
|
||||
delete_on_termination = true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
build {
|
||||
sources = [
|
||||
"source.amazon-ebs.ubuntu"
|
||||
]
|
||||
|
||||
provisioner "file" {
|
||||
source = "nest.service"
|
||||
destination = "/tmp/nest.service"
|
||||
}
|
||||
|
||||
provisioner "file" {
|
||||
source = "../../frontend/config/nginx.conf.template"
|
||||
destination = "/tmp/nginx.conf"
|
||||
}
|
||||
|
||||
provisioner "file" {
|
||||
source = ".env"
|
||||
destination = "/tmp/.env"
|
||||
}
|
||||
|
||||
provisioner "file" {
|
||||
source = "setup_app"
|
||||
destination = "/tmp/setup_app"
|
||||
}
|
||||
|
||||
provisioner "file" {
|
||||
source = "postgrest.service"
|
||||
destination = "/tmp/postgrest.service"
|
||||
}
|
||||
|
||||
provisioner "file" {
|
||||
source = "redis-server.service"
|
||||
destination = "/tmp/redis-server.service"
|
||||
}
|
||||
|
||||
provisioner "shell" {
|
||||
script = "setup_machine.sh"
|
||||
}
|
||||
}
|
||||
33
deploy/ec2/ee/variables.pkr.hcl
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
variable "ami_name" {
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "instance_type" {
|
||||
type = string
|
||||
default = "t2.medium"
|
||||
}
|
||||
|
||||
variable "ami_region" {
|
||||
type = string
|
||||
default = "us-west-2"
|
||||
}
|
||||
|
||||
variable "ami_groups" {
|
||||
type = list(string)
|
||||
default = ["all"]
|
||||
}
|
||||
|
||||
variable "ami_regions" {
|
||||
type = list(string)
|
||||
default = ["us-west-1","us-east-1", "us-east-2", "eu-central-1", "ap-northeast-1", "ca-central-1"]
|
||||
}
|
||||
|
||||
variable "PACKER_BUILDER_TYPE" {
|
||||
type = string
|
||||
default = "amazon-ebs"
|
||||
}
|
||||
|
||||
variable "PACKER_BUILD_NAME" {
|
||||
type = string
|
||||
default = "ubuntu"
|
||||
}
|
||||
117
docker/cloud/cloud-server.Dockerfile
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
FROM node:18.18.2-buster as builder
|
||||
|
||||
# Fix for JS heap limit allocation issue
|
||||
ENV NODE_OPTIONS="--max-old-space-size=4096"
|
||||
|
||||
RUN npm i -g npm@9.8.1
|
||||
RUN npm install -g @nestjs/cli
|
||||
|
||||
RUN mkdir -p /app
|
||||
WORKDIR /app
|
||||
|
||||
ARG CUSTOM_GITHUB_TOKEN
|
||||
ARG BRANCH_NAME=main
|
||||
|
||||
# Clone and checkout the frontend repository
|
||||
RUN git config --global url."https://x-access-token:${CUSTOM_GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
|
||||
|
||||
RUN git config --global http.version HTTP/1.1
|
||||
RUN git config --global http.postBuffer 524288000
|
||||
RUN git clone https://github.com/ToolJet/ToolJet.git .
|
||||
|
||||
# The branch name needs to be changed the branch with modularisation in CE repo
|
||||
RUN git checkout ${BRANCH_NAME}
|
||||
|
||||
RUN git submodule update --init --recursive
|
||||
|
||||
# Checkout the same branch in submodules if it exists, otherwise stay on default branch
|
||||
RUN git submodule foreach 'git checkout ${BRANCH_NAME} || true'
|
||||
|
||||
COPY ./package.json ./package.json
|
||||
|
||||
# Building ToolJet plugins
|
||||
COPY ./plugins/package.json ./plugins/package-lock.json ./plugins/
|
||||
RUN npm --prefix plugins install
|
||||
COPY ./plugins/ ./plugins/
|
||||
ENV NODE_ENV=production
|
||||
RUN npm --prefix plugins run build
|
||||
RUN npm --prefix plugins prune --production
|
||||
|
||||
# Building ToolJet server
|
||||
COPY ./server/package.json ./server/package-lock.json ./server/
|
||||
RUN npm --prefix server install --only=production
|
||||
COPY ./server/ ./server/
|
||||
RUN npm --prefix server run build
|
||||
|
||||
FROM debian:11
|
||||
|
||||
RUN apt-get update -yq \
|
||||
&& apt-get install curl gnupg zip -yq \
|
||||
&& apt-get install -yq build-essential \
|
||||
&& apt-get clean -y
|
||||
|
||||
RUN curl -O https://nodejs.org/dist/v18.18.2/node-v18.18.2-linux-x64.tar.xz \
|
||||
&& tar -xf node-v18.18.2-linux-x64.tar.xz \
|
||||
&& mv node-v18.18.2-linux-x64 /usr/local/lib/nodejs \
|
||||
&& echo 'export PATH="/usr/local/lib/nodejs/bin:$PATH"' >> /etc/profile.d/nodejs.sh \
|
||||
&& /bin/bash -c "source /etc/profile.d/nodejs.sh" \
|
||||
&& rm node-v18.18.2-linux-x64.tar.xz
|
||||
ENV PATH=/usr/local/lib/nodejs/bin:$PATH
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV NODE_OPTIONS="--max-old-space-size=4096"
|
||||
RUN apt-get update && apt-get install -y postgresql-client freetds-dev libaio1 wget
|
||||
|
||||
# Install Instantclient Basic Light Oracle and Dependencies
|
||||
WORKDIR /opt/oracle
|
||||
RUN wget https://tooljet-plugins-production.s3.us-east-2.amazonaws.com/marketplace-assets/oracledb/instantclients/instantclient-basiclite-linuxx64.zip && \
|
||||
wget https://tooljet-plugins-production.s3.us-east-2.amazonaws.com/marketplace-assets/oracledb/instantclients/instantclient-basiclite-linux.x64-11.2.0.4.0.zip && \
|
||||
unzip instantclient-basiclite-linuxx64.zip && rm -f instantclient-basiclite-linuxx64.zip && \
|
||||
unzip instantclient-basiclite-linux.x64-11.2.0.4.0.zip && rm -f instantclient-basiclite-linux.x64-11.2.0.4.0.zip && \
|
||||
cd /opt/oracle/instantclient_21_10 && rm -f *jdbc* *occi* *mysql* *mql1* *ipc1* *jar uidrvci genezi adrci && \
|
||||
cd /opt/oracle/instantclient_11_2 && rm -f *jdbc* *occi* *mysql* *mql1* *ipc1* *jar uidrvci genezi adrci && \
|
||||
echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig
|
||||
# Set the Instant Client library paths
|
||||
ENV LD_LIBRARY_PATH="/opt/oracle/instantclient_11_2:/opt/oracle/instantclient_21_10:${LD_LIBRARY_PATH}"
|
||||
|
||||
WORKDIR /
|
||||
|
||||
RUN mkdir -p /app
|
||||
|
||||
# copy npm scripts
|
||||
COPY --from=builder /app/package.json ./app/package.json
|
||||
|
||||
# copy plugins dependencies
|
||||
COPY --from=builder /app/plugins/dist ./app/plugins/dist
|
||||
COPY --from=builder /app/plugins/client.js ./app/plugins/client.js
|
||||
COPY --from=builder /app/plugins/node_modules ./app/plugins/node_modules
|
||||
COPY --from=builder /app/plugins/packages/common ./app/plugins/packages/common
|
||||
COPY --from=builder /app/plugins/package.json ./app/plugins/package.json
|
||||
|
||||
# copy server build
|
||||
COPY --from=builder /app/server/package.json ./app/server/package.json
|
||||
COPY --from=builder /app/server/.version ./app/server/.version
|
||||
COPY --from=builder /app/server/entrypoint.sh ./app/server/entrypoint.sh
|
||||
COPY --from=builder /app/server/node_modules ./app/server/node_modules
|
||||
COPY --from=builder /app/server/templates ./app/server/templates
|
||||
COPY --from=builder /app/server/scripts ./app/server/scripts
|
||||
COPY --from=builder /app/server/dist ./app/server/dist
|
||||
|
||||
# Define non-sudo user
|
||||
RUN useradd --create-home --home-dir /home/appuser appuser \
|
||||
&& chown -R appuser:0 /app \
|
||||
&& chown -R appuser:0 /home/appuser \
|
||||
&& chmod u+x /app \
|
||||
&& chmod -R g=u /app
|
||||
|
||||
# Set npm cache directory
|
||||
ENV npm_config_cache /home/appuser/.npm
|
||||
|
||||
ENV HOME=/home/appuser
|
||||
USER appuser
|
||||
|
||||
WORKDIR /app
|
||||
# Dependencies for scripts outside nestjs
|
||||
RUN npm install dotenv@10.0.0 joi@17.4.1
|
||||
|
||||
ENTRYPOINT ["./server/entrypoint.sh"]
|
||||
122
docker/ee/ee-preview.Dockerfile
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
FROM node:18.18.2-buster AS builder
|
||||
# Fix for JS heap limit allocation issue
|
||||
ENV NODE_OPTIONS="--max-old-space-size=4096"
|
||||
|
||||
RUN mkdir -p /app
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ARG CUSTOM_GITHUB_TOKEN
|
||||
ARG BRANCH_NAME
|
||||
|
||||
# Clone and checkout the frontend repository
|
||||
RUN git config --global url."https://x-access-token:${CUSTOM_GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
|
||||
|
||||
RUN git config --global http.version HTTP/1.1
|
||||
RUN git config --global http.postBuffer 524288000
|
||||
RUN git clone https://github.com/ToolJet/ToolJet.git .
|
||||
|
||||
# The branch name needs to be changed the branch with modularisation in CE repo
|
||||
RUN git checkout ${BRANCH_NAME}
|
||||
|
||||
RUN git submodule update --init --recursive
|
||||
|
||||
# Checkout the same branch in submodules if it exists, otherwise stay on default branch
|
||||
RUN git submodule foreach 'git checkout ${BRANCH_NAME} || true'
|
||||
|
||||
# Scripts for building
|
||||
COPY ./package.json ./package.json
|
||||
|
||||
# Build plugins
|
||||
COPY ./plugins/package.json ./plugins/package-lock.json ./plugins/
|
||||
RUN npm --prefix plugins install
|
||||
COPY ./plugins/ ./plugins/
|
||||
RUN NODE_ENV=production npm --prefix plugins run build
|
||||
RUN npm --prefix plugins prune --production
|
||||
|
||||
ENV TOOLJET_EDITION=ee
|
||||
|
||||
# Build frontend
|
||||
COPY ./frontend/package.json ./frontend/package-lock.json ./frontend/
|
||||
RUN npm --prefix frontend install
|
||||
COPY ./frontend/ ./frontend/
|
||||
RUN npm --prefix frontend run build --production
|
||||
RUN npm --prefix frontend prune --production
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV TOOLJET_EDITION=ee
|
||||
|
||||
# Build server
|
||||
COPY ./server/package.json ./server/package-lock.json ./server/
|
||||
RUN npm --prefix server install
|
||||
COPY ./server/ ./server/
|
||||
RUN npm install -g @nestjs/cli
|
||||
RUN npm --prefix server run build
|
||||
|
||||
FROM node:18.18.2-bullseye
|
||||
|
||||
RUN apt-get update -yq \
|
||||
&& apt-get install curl gnupg zip -yq \
|
||||
&& apt-get install -yq build-essential \
|
||||
&& apt-get clean -y
|
||||
|
||||
# copy postgrest executable
|
||||
COPY --from=postgrest/postgrest:v12.2.0 /bin/postgrest /bin
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV TOOLJET_EDITION=ee
|
||||
ENV NODE_OPTIONS="--max-old-space-size=4096"
|
||||
RUN apt-get update && apt-get install -y postgresql-client freetds-dev libaio1 wget supervisor
|
||||
|
||||
# Install Instantclient Basic Light Oracle and Dependencies
|
||||
WORKDIR /opt/oracle
|
||||
RUN wget https://tooljet-plugins-production.s3.us-east-2.amazonaws.com/marketplace-assets/oracledb/instantclients/instantclient-basiclite-linuxx64.zip && \
|
||||
wget https://tooljet-plugins-production.s3.us-east-2.amazonaws.com/marketplace-assets/oracledb/instantclients/instantclient-basiclite-linux.x64-11.2.0.4.0.zip && \
|
||||
unzip instantclient-basiclite-linuxx64.zip && rm -f instantclient-basiclite-linuxx64.zip && \
|
||||
unzip instantclient-basiclite-linux.x64-11.2.0.4.0.zip && rm -f instantclient-basiclite-linux.x64-11.2.0.4.0.zip && \
|
||||
cd /opt/oracle/instantclient_21_10 && rm -f *jdbc* *occi* *mysql* *mql1* *ipc1* *jar uidrvci genezi adrci && \
|
||||
cd /opt/oracle/instantclient_11_2 && rm -f *jdbc* *occi* *mysql* *mql1* *ipc1* *jar uidrvci genezi adrci && \
|
||||
echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig
|
||||
# Set the Instant Client library paths
|
||||
ENV LD_LIBRARY_PATH="/opt/oracle/instantclient_11_2:/opt/oracle/instantclient_21_10:${LD_LIBRARY_PATH}"
|
||||
|
||||
WORKDIR /
|
||||
|
||||
RUN mkdir -p /app /var/log/supervisor
|
||||
COPY /deploy/docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
|
||||
# copy npm scripts
|
||||
COPY --from=builder /app/package.json ./app/package.json
|
||||
# copy plugins dependencies
|
||||
COPY --from=builder /app/plugins/dist ./app/plugins/dist
|
||||
COPY --from=builder /app/plugins/client.js ./app/plugins/client.js
|
||||
COPY --from=builder /app/plugins/node_modules ./app/plugins/node_modules
|
||||
COPY --from=builder /app/plugins/packages/common ./app/plugins/packages/common
|
||||
COPY --from=builder /app/plugins/package.json ./app/plugins/package.json
|
||||
# copy frontend build
|
||||
COPY --from=builder /app/frontend/build ./app/frontend/build
|
||||
# copy server build
|
||||
COPY --from=builder /app/server/package.json ./app/server/package.json
|
||||
COPY --from=builder /app/server/.version ./app/server/.version
|
||||
COPY --from=builder /app/server/ee/keys ./app/server/ee/keys
|
||||
COPY --from=builder /app/server/entrypoint.sh ./app/server/entrypoint.sh
|
||||
COPY --from=builder /app/server/node_modules ./app/server/node_modules
|
||||
COPY --from=builder /app/server/templates ./app/server/templates
|
||||
COPY --from=builder /app/server/scripts ./app/server/scripts
|
||||
COPY --from=builder /app/server/dist ./app/server/dist
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# ENV defaults
|
||||
ENV TOOLJET_HOST=http://localhost:80 \
|
||||
PGRST_HOST=http://localhost:3000 \
|
||||
PGRST_JWT_SECRET=r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj \
|
||||
TOOLJET_DB=tooljet_db \
|
||||
ENABLE_TOOLJET_DB=true \
|
||||
PORT=80 \
|
||||
LOCKBOX_MASTER_KEY=replace_with_lockbox_master_key \
|
||||
SECRET_KEY_BASE=replace_with_secret_key_base \
|
||||
ORM_LOGGING=all \
|
||||
TERM=xterm
|
||||
|
||||
CMD ["/usr/bin/supervisord"]
|
||||
166
docker/ee/ee-production.Dockerfile
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
FROM node:18.18.2-buster AS builder
|
||||
|
||||
# Fix for JS heap limit allocation issue
|
||||
ENV NODE_OPTIONS="--max-old-space-size=4096"
|
||||
|
||||
RUN npm i -g npm@9.8.1
|
||||
RUN mkdir -p /app
|
||||
# RUN npm cache clean --force
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Set GitHub token and branch as build arguments
|
||||
ARG CUSTOM_GITHUB_TOKEN
|
||||
ARG BRANCH_NAME=main
|
||||
|
||||
# Clone and checkout the frontend repository
|
||||
RUN git config --global url."https://x-access-token:${CUSTOM_GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
|
||||
|
||||
RUN git config --global http.version HTTP/1.1
|
||||
RUN git config --global http.postBuffer 524288000
|
||||
RUN git clone https://github.com/ToolJet/ToolJet.git .
|
||||
|
||||
# The branch name needs to be changed the branch with modularisation in CE repo
|
||||
RUN git checkout main
|
||||
|
||||
RUN git submodule update --init --recursive
|
||||
|
||||
# Checkout the same branch in submodules if it exists, otherwise stay on default branch
|
||||
RUN git submodule foreach 'git checkout ${BRANCH_NAME} || true'
|
||||
|
||||
# Scripts for building
|
||||
COPY ./package.json ./package.json
|
||||
|
||||
# Build plugins
|
||||
COPY ./plugins/package.json ./plugins/package-lock.json ./plugins/
|
||||
RUN npm --prefix plugins install
|
||||
COPY ./plugins/ ./plugins/
|
||||
RUN NODE_ENV=production npm --prefix plugins run build
|
||||
RUN npm --prefix plugins prune --production
|
||||
|
||||
ENV TOOLJET_EDITION=ee
|
||||
|
||||
# Build frontend
|
||||
COPY ./frontend/package.json ./frontend/package-lock.json ./frontend/
|
||||
RUN npm --prefix frontend install
|
||||
COPY ./frontend/ ./frontend/
|
||||
RUN npm --prefix frontend run build --production
|
||||
RUN npm --prefix frontend prune --production
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV TOOLJET_EDITION=ee
|
||||
|
||||
# Build server
|
||||
COPY ./server/package.json ./server/package-lock.json ./server/
|
||||
RUN npm --prefix server install
|
||||
COPY ./server/ ./server/
|
||||
RUN npm install -g @nestjs/cli
|
||||
RUN npm --prefix server run build
|
||||
|
||||
FROM debian:11
|
||||
|
||||
RUN apt-get update -yq \
|
||||
&& apt-get install curl gnupg zip -yq \
|
||||
&& apt-get install -yq build-essential \
|
||||
&& apt-get clean -y
|
||||
|
||||
|
||||
RUN curl -O https://nodejs.org/dist/v18.18.2/node-v18.18.2-linux-x64.tar.xz \
|
||||
&& tar -xf node-v18.18.2-linux-x64.tar.xz \
|
||||
&& mv node-v18.18.2-linux-x64 /usr/local/lib/nodejs \
|
||||
&& echo 'export PATH="/usr/local/lib/nodejs/bin:$PATH"' >> /etc/profile.d/nodejs.sh \
|
||||
&& /bin/bash -c "source /etc/profile.d/nodejs.sh" \
|
||||
&& rm node-v18.18.2-linux-x64.tar.xz
|
||||
ENV PATH=/usr/local/lib/nodejs/bin:$PATH
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV TOOLJET_EDITION=ee
|
||||
ENV NODE_OPTIONS="--max-old-space-size=4096"
|
||||
RUN apt-get update && \
|
||||
apt-get install -y postgresql-client freetds-dev libaio1 wget && \
|
||||
apt-get -o Dpkg::Options::="--force-confold" upgrade -q -y --force-yes && \
|
||||
apt-get -y autoremove && \
|
||||
apt-get -y autoclean
|
||||
|
||||
# Install Instantclient Basic Light Oracle and Dependencies
|
||||
WORKDIR /opt/oracle
|
||||
|
||||
RUN wget https://tooljet-plugins-production.s3.us-east-2.amazonaws.com/marketplace-assets/oracledb/instantclients/instantclient-basiclite-linuxx64.zip && \
|
||||
wget https://tooljet-plugins-production.s3.us-east-2.amazonaws.com/marketplace-assets/oracledb/instantclients/instantclient-basiclite-linux.x64-11.2.0.4.0.zip && \
|
||||
unzip instantclient-basiclite-linuxx64.zip && rm -f instantclient-basiclite-linuxx64.zip && \
|
||||
unzip instantclient-basiclite-linux.x64-11.2.0.4.0.zip && rm -f instantclient-basiclite-linux.x64-11.2.0.4.0.zip && \
|
||||
cd /opt/oracle/instantclient_21_10 && rm -f *jdbc* *occi* *mysql* *mql1* *ipc1* *jar uidrvci genezi adrci && \
|
||||
cd /opt/oracle/instantclient_11_2 && rm -f *jdbc* *occi* *mysql* *mql1* *ipc1* *jar uidrvci genezi adrci && \
|
||||
echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig
|
||||
# Set the Instant Client library paths
|
||||
ENV LD_LIBRARY_PATH="/opt/oracle/instantclient_11_2:/opt/oracle/instantclient_21_10:${LD_LIBRARY_PATH}"
|
||||
|
||||
|
||||
WORKDIR /
|
||||
|
||||
RUN mkdir -p /app
|
||||
# copy npm scripts
|
||||
COPY --from=builder /app/package.json ./app/package.json
|
||||
# copy plugins dependencies
|
||||
COPY --from=builder /app/plugins/dist ./app/plugins/dist
|
||||
COPY --from=builder /app/plugins/client.js ./app/plugins/client.js
|
||||
COPY --from=builder /app/plugins/node_modules ./app/plugins/node_modules
|
||||
COPY --from=builder /app/plugins/packages/common ./app/plugins/packages/common
|
||||
COPY --from=builder /app/plugins/package.json ./app/plugins/package.json
|
||||
# copy frontend build
|
||||
COPY --from=builder /app/frontend/build ./app/frontend/build
|
||||
# copy server build
|
||||
COPY --from=builder /app/server/package.json ./app/server/package.json
|
||||
COPY --from=builder /app/server/.version ./app/server/.version
|
||||
COPY --from=builder /app/server/ee/keys ./app/server/ee/keys
|
||||
COPY --from=builder /app/server/entrypoint.sh ./app/server/entrypoint.sh
|
||||
COPY --from=builder /app/server/node_modules ./app/server/node_modules
|
||||
COPY --from=builder /app/server/templates ./app/server/templates
|
||||
COPY --from=builder /app/server/scripts ./app/server/scripts
|
||||
COPY --from=builder /app/server/dist ./app/server/dist
|
||||
|
||||
# Define non-sudo user
|
||||
RUN useradd --create-home --home-dir /home/appuser appuser \
|
||||
&& chown -R appuser:0 /app \
|
||||
&& chown -R appuser:0 /home \
|
||||
&& chmod u+x /app \
|
||||
&& chmod u+x /home \
|
||||
&& chmod -R g=u /app \
|
||||
&& chmod -R g=u /home
|
||||
|
||||
# Create directory /home/appuser and set ownership to appuser (Refer doc for understanding the changes https://app.clickup.com/37484951/v/dc/13qycq-4081)
|
||||
RUN mkdir -p /home/appuser \
|
||||
&& chown -R appuser:0 /home/appuser \
|
||||
&& chmod g+s /home/appuser \
|
||||
&& chmod -R g=u /home/appuser \
|
||||
&& npm cache clean --force
|
||||
|
||||
# Create directory /tmp/.npm/npm-cache/ and set ownership to appuser (Refer doc for understanding the changes https://app.clickup.com/37484951/v/dc/13qycq-4081)
|
||||
RUN mkdir -p /tmp/.npm/npm-cache/ \
|
||||
&& chown -R appuser:0 /tmp/.npm/npm-cache/ \
|
||||
&& chmod g+s /tmp/.npm/npm-cache/ \
|
||||
&& chmod -R g=u /tmp/.npm/npm-cache \
|
||||
&& npm cache clean --force
|
||||
|
||||
# Set npm cache directory globally
|
||||
RUN npm config set cache /tmp/.npm/npm-cache/ --global
|
||||
ENV npm_config_cache /tmp/.npm/npm-cache/
|
||||
|
||||
# Create directory /tmp/.npm/npm-cache/_logs and set ownership to appuser
|
||||
RUN mkdir -p /tmp/.npm/npm-cache/_logs \
|
||||
&& chown -R appuser:0 /tmp/.npm/npm-cache/_logs \
|
||||
&& chmod g+s /tmp/.npm/npm-cache/_logs \
|
||||
&& chmod -R g=u /tmp/.npm/npm-cache/_logs
|
||||
|
||||
ENV HOME=/home/appuser
|
||||
|
||||
# Switch back to appuser
|
||||
USER appuser
|
||||
|
||||
WORKDIR /app
|
||||
# Dependencies for scripts outside nestjs
|
||||
RUN npm install dotenv@10.0.0 joi@17.4.1
|
||||
|
||||
RUN npm cache clean --force
|
||||
|
||||
ENTRYPOINT ["./server/entrypoint.sh"]
|
||||
|
|
@ -1 +1 @@
|
|||
3.2.2-ce
|
||||
3.7.0
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
First Name,Last Name,Email,User Role,Group
|
||||
test,user,test@gmail.com,"Assign each user a role: Admin, Builder or End User. User role value should be exact same","For multiple groups separate using pipe (|) operator e.g. Groups1|Group2 or leave blank if no group assign"
|
||||
First Name,Last Name,Email,User Role,Group,Metadata
|
||||
test,user,test@gmail.com,"Assign each user a role: Admin, Builder or End User. User role value should be exact same","For multiple groups separate using pipe (|) operator e.g. Groups1|Group2 or leave blank if no group assign","Metadata is optional and should be uploaded in the form of "{""key"": ""value""...}" separated via commas Eg. "{""apiKey"": ""abc123"", ""apiKey2"": ""xyz123""}"
|
||||
|
|
|
|||
|
Can't render this file because it contains an unexpected character in line 2 and column 287.
|
BIN
frontend/assets/images/Hourglass.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
frontend/assets/images/Ldap.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
frontend/assets/images/OpenId.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
frontend/assets/images/Saml.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
4
frontend/assets/images/consultation-banner-icon.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="25" viewBox="0 0 28 25" fill="none">
|
||||
<path d="M13.6044 24.5421C13.1788 24.5421 12.8196 24.3957 12.5268 24.1029C12.2341 23.8102 12.0877 23.451 12.0877 23.0254C12.0877 22.5998 12.2341 22.2406 12.5268 21.9478C12.8196 21.6551 13.1788 21.5087 13.6044 21.5087L22.8819 21.5167V12.0341C22.8819 9.48189 21.9777 7.32549 20.1692 5.56487C18.3608 3.80424 16.1725 2.92393 13.6044 2.92393C11.0363 2.92393 8.84797 3.80424 7.0395 5.56487C5.23105 7.32549 4.32683 9.48189 4.32683 12.0341L4.3667 18.9218C4.37201 19.3474 4.22696 19.7079 3.93153 20.0033C3.63613 20.2987 3.27563 20.4464 2.85003 20.4464H2.81017C2.03432 20.4464 1.372 20.1733 0.8232 19.6272C0.2744 19.0811 0 18.4201 0 17.6442V14.842C0 14.3701 0.114011 13.9272 0.342033 13.5134C0.570055 13.0997 0.889867 12.7626 1.30147 12.5022L1.36957 11.0863C1.50483 9.51138 1.9238 8.05026 2.62647 6.70293C3.32911 5.35558 4.22681 4.18287 5.31957 3.1848C6.41232 2.18673 7.67127 1.40642 9.0964 0.843866C10.5215 0.281288 12.0242 0 13.6044 0C15.1846 0 16.683 0.281288 18.0997 0.843866C19.5163 1.40642 20.7753 2.18251 21.8765 3.17213C22.9777 4.16173 23.8754 5.33153 24.5696 6.68153C25.2638 8.03153 25.687 9.49398 25.8392 11.0689L25.9073 12.4515C26.3242 12.6727 26.6453 12.9887 26.8707 13.3993C27.096 13.8099 27.2087 14.2428 27.2087 14.6978V17.7884C27.2087 18.2648 27.1 18.7202 26.8826 19.1547C26.6652 19.5893 26.3401 19.9198 25.9073 20.1464V21.5167C25.9073 22.351 25.6116 23.0638 25.0203 23.6551C24.429 24.2464 23.7162 24.5421 22.8819 24.5421H13.6044ZM9.70003 15.145C9.31161 15.145 8.98565 15.0132 8.72213 14.7497C8.4586 14.4861 8.32683 14.1628 8.32683 13.7797C8.32683 13.3966 8.4586 13.0733 8.72213 12.8098C8.98565 12.5463 9.31161 12.4145 9.70003 12.4145C10.0884 12.4145 10.4144 12.5463 10.6779 12.8098C10.9414 13.0733 11.0732 13.3966 11.0732 13.7797C11.0732 14.1628 10.9414 14.4861 10.6779 14.7497C10.4144 15.0132 10.0884 15.145 9.70003 15.145ZM17.5087 15.145C17.1203 15.145 16.7943 15.0132 16.5308 14.7497C16.2673 14.4861 16.1355 14.1628 16.1355 13.7797C16.1355 13.3966 16.2673 13.0733 16.5308 12.8098C16.7943 12.5463 17.1203 12.4145 17.5087 12.4145C17.8971 12.4145 18.2231 12.5463 18.4866 12.8098C18.7501 13.0733 18.8819 13.3966 18.8819 13.7797C18.8819 14.1628 18.7501 14.4861 18.4866 14.7497C18.2231 15.0132 17.8971 15.145 17.5087 15.145Z" fill="#3E63DD"/>
|
||||
<path opacity="0.4" d="M5.62167 12.6559C5.47673 10.3482 6.1998 8.38048 7.79087 6.7527C9.38193 5.12492 11.342 4.31104 13.6709 4.31104C15.6593 4.31104 17.4089 4.92818 18.9195 6.16247C20.4301 7.39678 21.3171 8.98639 21.5804 10.9313C19.606 10.9091 17.7741 10.4032 16.0847 9.41357C14.3953 8.42395 13.0898 7.05257 12.168 5.29944C11.7859 7.01877 11.0107 8.52505 9.8423 9.81827C8.67394 11.1115 7.26707 12.0574 5.62167 12.6559Z" fill="#3E63DD"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
3
frontend/assets/images/icons/add-gray.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.21745 0.333496H11.2174C12.6902 0.333496 13.8841 1.5274 13.8841 3.00016V11.0002C13.8841 12.4729 12.6902 13.6668 11.2174 13.6668H3.21745C1.74469 13.6668 0.550781 12.4729 0.550781 11.0002V3.00016C0.550781 1.5274 1.74469 0.333496 3.21745 0.333496ZM7.21745 3.8335C7.49359 3.8335 7.71745 4.05735 7.71745 4.3335V6.50016H9.88412C10.1603 6.50016 10.3841 6.72402 10.3841 7.00016C10.3841 7.27631 10.1603 7.50016 9.88412 7.50016H7.71745V9.66683C7.71745 9.94297 7.49359 10.1668 7.21745 10.1668C6.94131 10.1668 6.71745 9.94297 6.71745 9.66683V7.50016H4.55078C4.27464 7.50016 4.05078 7.27631 4.05078 7.00016C4.05078 6.72402 4.27464 6.50016 4.55078 6.50016H6.71745V4.3335C6.71745 4.05735 6.94131 3.8335 7.21745 3.8335Z" fill="#C1C8CD"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 875 B |
4
frontend/assets/images/icons/add-thunder.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<svg width="29" height="28" viewBox="0 0 29 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="0.217773" width="28" height="28" rx="6" fill="#EBF9EB"/>
|
||||
<path d="M9.71892 13.9045L14.3841 7.65085C14.8437 7.03481 15.7862 7.37573 15.7862 8.15799V11.943C15.7862 12.3974 16.1374 12.7658 16.5706 12.7658H18.0983C18.7521 12.7658 19.1189 13.5557 18.716 14.0959L14.0508 20.3495C13.5912 20.9655 12.6487 20.6246 12.6487 19.8423V16.0574C12.6487 15.6029 12.2975 15.2345 11.8643 15.2345H10.3366C9.68281 15.2345 9.31596 14.4446 9.71892 13.9045Z" fill="#46A758"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 563 B |
6
frontend/assets/images/icons/alert.svg
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="22" height="22" rx="2" fill="#F1F3F5"/>
|
||||
<path opacity="0.4" d="M9.81465 6.43012C10.3313 5.52329 11.6687 5.52329 12.1853 6.43012L16.6607 14.2856C17.1628 15.1669 16.5093 16.25 15.4754 16.25H6.52459C5.49067 16.25 4.83713 15.1669 5.33925 14.2856L9.81465 6.43012Z" fill="#889096"/>
|
||||
<path d="M11.5833 13.9154C11.5833 14.2375 11.3222 14.4987 11 14.4987C10.6778 14.4987 10.4167 14.2375 10.4167 13.9154C10.4167 13.5932 10.6778 13.332 11 13.332C11.3222 13.332 11.5833 13.5932 11.5833 13.9154Z" fill="#889096"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 8.8125C11.2416 8.8125 11.4375 9.00838 11.4375 9.25V12.1667C11.4375 12.4083 11.2416 12.6042 11 12.6042C10.7584 12.6042 10.5625 12.4083 10.5625 12.1667V9.25C10.5625 9.00838 10.7584 8.8125 11 8.8125Z" fill="#889096"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 885 B |
3
frontend/assets/images/icons/check.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.1535 2.89948C15.593 3.25909 15.6577 3.90693 15.2982 4.34645L8.29337 12.9992C7.23579 14.4161 6.22231 14.0102 5.34746 13.2447L2.54843 10.7955C2.12104 10.4216 2.07773 9.77193 2.4517 9.34455C2.82566 8.91716 3.47528 8.87385 3.90267 9.24782L6.7017 11.697L13.7065 3.04418C14.0661 2.60465 14.7139 2.53987 15.1535 2.89948Z" fill="#4368E3"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 488 B |
3
frontend/assets/images/icons/inspect.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.35615 21.1403C8.54711 21.657 9.03969 22 9.59058 22C10.1637 22 10.6709 21.6291 10.8447 21.083L13.214 13.6366C13.2835 13.4181 13.4463 13.2417 13.6585 13.1549L21.1582 10.0868C21.6574 9.88267 21.9834 9.39697 21.9834 8.85775C21.9834 8.28298 21.6136 7.77343 21.0672 7.59524L4.15734 2.08118C3.568 1.88901 2.92069 2.04405 2.48237 2.48237C2.02776 2.93698 1.87929 3.6146 2.10216 4.21765L8.35615 21.1403Z" fill="#ffffff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 567 B |
3
frontend/assets/images/icons/loop.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.8922 6.726C10.8922 6.88386 10.8295 7.03527 10.7179 7.14689L7.44405 10.4207C7.27381 10.5909 7.01779 10.6419 6.79537 10.5497C6.57294 10.4576 6.42792 10.2406 6.42792 9.99981V7.91647H5.23744C4.57997 7.91647 4.04697 8.44947 4.04697 9.10696V13.5712C4.04697 14.2287 4.57997 14.7617 5.23744 14.7617H14.7613C15.4188 14.7617 15.9517 14.2287 15.9517 13.5712V9.10695C15.9517 8.44947 15.4188 7.91647 14.7613 7.91647H13.8684C13.2109 7.91647 12.6779 7.38348 12.6779 6.726C12.6779 6.06852 13.2109 5.53552 13.8684 5.53552H14.7613C16.7338 5.53552 18.3327 7.13451 18.3327 9.10695V13.5712C18.3327 15.5437 16.7338 17.1426 14.7613 17.1426H5.23744C3.265 17.1426 1.66602 15.5437 1.66602 13.5712V9.10696C1.66602 7.13451 3.265 5.53553 5.23744 5.53553H6.42792V3.45219C6.42792 3.21144 6.57294 2.9944 6.79536 2.90226C7.01779 2.81013 7.27381 2.86106 7.44405 3.03129L10.7179 6.3051C10.8295 6.41673 10.8922 6.56813 10.8922 6.726Z" fill="#F58534"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1 KiB |
5
frontend/assets/images/icons/pin.svg
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect y="0.0429688" width="24" height="24" rx="6" fill="#E8F3EB"/>
|
||||
<path d="M10.875 14.0902C8.93412 14.2567 7.5 14.844 7.5 15.543C7.5 16.3714 9.51472 17.043 12 17.043C14.4853 17.043 16.5 16.3714 16.5 15.543C16.5 14.844 15.0659 14.2567 13.125 14.0902V15.043C13.125 15.6643 12.6213 16.168 12 16.168C11.3787 16.168 10.875 15.6643 10.875 15.043V14.0902Z" fill="#1E823B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.375 9.99571C13.022 9.8292 13.5 9.24191 13.5 8.54297C13.5 7.71454 12.8284 7.04297 12 7.04297C11.1716 7.04297 10.5 7.71454 10.5 8.54297C10.5 9.24191 10.978 9.8292 11.625 9.99571V15.043C11.625 15.2501 11.7929 15.418 12 15.418C12.2071 15.418 12.375 15.2501 12.375 15.043V9.99571Z" fill="#1E823B"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 818 B |
3
frontend/assets/images/icons/promote.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="6" height="6" viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.207188 5.26573C0.0778095 5.42745 0.10403 5.66343 0.265753 5.79281C0.427476 5.92219 0.663461 5.89597 0.79284 5.73425L2.79284 3.23425C2.90241 3.09729 2.90241 2.90268 2.79284 2.76573L0.79284 0.265726C0.663461 0.104003 0.427476 0.0777821 0.265753 0.207161C0.10403 0.336539 0.0778093 0.572524 0.207188 0.734247L2.01978 2.99999L0.207188 5.26573ZM3.20719 5.26573C3.07781 5.42745 3.10403 5.66343 3.26575 5.79281C3.42748 5.92219 3.66346 5.89597 3.79284 5.73425L5.79284 3.23425C5.9024 3.09729 5.9024 2.90268 5.79284 2.76573L3.79284 0.265726C3.66346 0.104003 3.42748 0.077782 3.26575 0.207161C3.10403 0.336539 3.07781 0.572524 3.20719 0.734247L5.01978 2.99999L3.20719 5.26573Z" fill="#3E63DD"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 835 B |
5
frontend/assets/images/icons/response.svg
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="0.535156" y="0.958008" width="24" height="24" rx="6" fill="#E8F3EB"/>
|
||||
<path d="M11.4102 15.0052C9.46928 15.1718 8.03516 15.7591 8.03516 16.458C8.03516 17.2864 10.0499 17.958 12.5352 17.958C15.0204 17.958 17.0352 17.2864 17.0352 16.458C17.0352 15.7591 15.601 15.1718 13.6602 15.0052V15.958C13.6602 16.5793 13.1565 17.083 12.5352 17.083C11.9138 17.083 11.4102 16.5793 11.4102 15.958V15.0052Z" fill="#1E823B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.9102 10.9108C13.5571 10.7442 14.0352 10.1569 14.0352 9.45801C14.0352 8.62958 13.3636 7.95801 12.5352 7.95801C11.7067 7.95801 11.0352 8.62958 11.0352 9.45801C11.0352 10.1569 11.5132 10.7442 12.1602 10.9108V15.958C12.1602 16.1651 12.328 16.333 12.5352 16.333C12.7423 16.333 12.9102 16.1651 12.9102 15.958V10.9108Z" fill="#1E823B"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 903 B |
3
frontend/assets/images/icons/select.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2C2.89543 2 2 2.89543 2 4V6C2 7.10457 2.89543 8 4 8H4.25V16H4C2.89543 16 2 16.8954 2 18V20C2 21.1046 2.89543 22 4 22H6C7.10457 22 8 21.1046 8 20V19.75H16V20C16 21.1046 16.8954 22 18 22H20C21.1046 22 22 21.1046 22 20V18C22 16.8954 21.1046 16 20 16H19.75V8H20C21.1046 8 22 7.10457 22 6V4C22 2.89543 21.1046 2 20 2H18C16.8954 2 16 2.89543 16 4V4.25L8 4.25V4C8 2.89543 7.10457 2 6 2H4ZM8 5.75V6C8 7.10457 7.10457 8 6 8H5.75V16H6C7.10457 16 8 16.8954 8 18V18.25H16V18C16 16.8954 16.8954 16 18 16H18.25V8H18C16.8954 8 16 7.10457 16 6V5.75L8 5.75Z" fill="#6A727C"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 714 B |
5
frontend/assets/images/icons/split-color.svg
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="split">
|
||||
<path id="vector" fill-rule="evenodd" clip-rule="evenodd" d="M10.843 9.23593C11.0522 9.02671 11.0522 8.6875 10.843 8.47829L9.2359 6.87119C9.08268 6.71797 8.85225 6.67214 8.65211 6.75506C8.4519 6.83797 8.3214 7.03331 8.3214 7.24999V8.14285H7.78569C6.60223 8.14285 5.64284 7.18346 5.64284 6C5.64284 4.81653 6.60223 3.85715 7.78569 3.85715H8.3214V4.75C8.3214 4.96667 8.4519 5.16201 8.65211 5.24494C8.85225 5.32785 9.08268 5.28202 9.2359 5.12881L10.843 3.52167C11.0522 3.31246 11.0522 2.97327 10.843 2.76406L9.2359 1.15692C9.08268 1.00371 8.85225 0.957876 8.65211 1.04079C8.4519 1.12371 8.3214 1.31905 8.3214 1.53573V2.42858H7.78569C6.05787 2.42858 4.61662 3.65555 4.28572 5.28571H1.71428C1.3198 5.28571 1 5.60551 1 6C1 6.39448 1.3198 6.71428 1.71428 6.71428H4.28572C4.61662 8.34443 6.05787 9.57143 7.78569 9.57143H8.3214V10.4643C8.3214 10.6809 8.4519 10.8763 8.65211 10.9592C8.85225 11.0421 9.08268 10.9963 9.2359 10.8431L10.843 9.23593Z" fill="#4368E3"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
3
frontend/assets/images/icons/split.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.843 9.23593C11.0522 9.02671 11.0522 8.6875 10.843 8.47829L9.2359 6.87119C9.08268 6.71797 8.85225 6.67214 8.65211 6.75506C8.4519 6.83797 8.3214 7.03331 8.3214 7.24999V8.14285H7.78569C6.60223 8.14285 5.64284 7.18346 5.64284 6C5.64284 4.81653 6.60223 3.85715 7.78569 3.85715H8.3214V4.75C8.3214 4.96667 8.4519 5.16201 8.65211 5.24494C8.85225 5.32785 9.08268 5.28202 9.2359 5.12881L10.843 3.52167C11.0522 3.31246 11.0522 2.97327 10.843 2.76406L9.2359 1.15692C9.08268 1.00371 8.85225 0.957876 8.65211 1.04079C8.4519 1.12371 8.3214 1.31905 8.3214 1.53573V2.42858H7.78569C6.05787 2.42858 4.61662 3.65555 4.28572 5.28571H1.71428C1.3198 5.28571 1 5.60551 1 6C1 6.39448 1.3198 6.71428 1.71428 6.71428H4.28572C4.61662 8.34443 6.05787 9.57143 7.78569 9.57143H8.3214V10.4643C8.3214 10.6809 8.4519 10.8763 8.65211 10.9592C8.85225 11.0421 9.08268 10.9963 9.2359 10.8431L10.843 9.23593Z" fill="#6A727C"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1 KiB |
5
frontend/assets/images/icons/tj-info-green.svg
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle opacity="0.4" cx="12" cy="12" r="10" fill="#46A758"/>
|
||||
<path d="M13 7C13 7.55228 12.5523 8 12 8C11.4477 8 11 7.55228 11 7C11 6.44772 11.4477 6 12 6C12.5523 6 13 6.44772 13 7Z" fill="#46A758"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.25 10C10.25 9.58579 10.5858 9.25 11 9.25H12C12.4142 9.25 12.75 9.58579 12.75 10V17C12.75 17.4142 12.4142 17.75 12 17.75C11.5858 17.75 11.25 17.4142 11.25 17V10.75H11C10.5858 10.75 10.25 10.4142 10.25 10Z" fill="#46A758"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 578 B |
4
frontend/assets/images/icons/trash-dark.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<svg width="13" height="13" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M5.25001 1.58299C5.43547 1.3048 5.74771 1.1377 6.08206 1.1377H7.01169C7.34604 1.1377 7.65828 1.3048 7.84374 1.583L8.29688 2.2627H10.1719C10.379 2.2627 10.5469 2.43059 10.5469 2.6377C10.5469 2.8448 10.379 3.0127 10.1719 3.0127H2.92188C2.71477 3.0127 2.54688 2.8448 2.54688 2.6377C2.54688 2.43059 2.71477 2.2627 2.92188 2.2627H4.79688L5.25001 1.58299Z" fill="#6A727C"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.04688 11.1377H5.04688C3.94231 11.1377 3.04688 10.2423 3.04688 9.1377V3.6377H10.0469V9.1377C10.0469 10.2423 9.15144 11.1377 8.04688 11.1377ZM5.54688 5.2627C5.75398 5.2627 5.92188 5.43059 5.92188 5.6377V9.1377C5.92188 9.3448 5.75398 9.5127 5.54688 9.5127C5.33977 9.5127 5.17188 9.3448 5.17188 9.1377L5.17188 5.6377C5.17188 5.43059 5.33977 5.2627 5.54688 5.2627ZM7.54688 5.2627C7.75398 5.2627 7.92188 5.43059 7.92188 5.6377V9.1377C7.92188 9.3448 7.75398 9.5127 7.54688 9.5127C7.33977 9.5127 7.17188 9.3448 7.17188 9.1377V5.6377C7.17188 5.43059 7.33977 5.2627 7.54688 5.2627Z" fill="#6A727C"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
29
frontend/assets/images/icons/widgets/datepickerv2.jsx
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import React from 'react';
|
||||
|
||||
const DatepickerV2 = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => (
|
||||
<svg
|
||||
width={width}
|
||||
height={width}
|
||||
viewBox={viewBox}
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fill={fill}
|
||||
d="M4.722 16.476V40.5c0 3.038 2.257 5.5 5.041 5.5h30.25c2.785 0 5.042-2.462 5.042-5.5V16.476H4.722z"
|
||||
></path>
|
||||
<path
|
||||
fill="#3E63DD"
|
||||
fillRule="evenodd"
|
||||
d="M14.805 2c1.591 0 2.881 1.407 2.881 3.143v1.571h14.405V5.143c0-1.736 1.29-3.143 2.881-3.143 1.591 0 2.88 1.407 2.88 3.143v1.571h2.161c2.556 0 5.042 2.08 5.042 5.174v4.604H4.722v-4.604c0-3.093 2.485-5.174 5.041-5.174h2.161V5.143c0-1.736 1.29-3.143 2.881-3.143z"
|
||||
clipRule="evenodd"
|
||||
></path>
|
||||
<path
|
||||
fill="#3E63DD"
|
||||
d="M13.365 28.148c1.59 0 2.88-1.407 2.88-3.142 0-1.736-1.29-3.143-2.88-3.143-1.591 0-2.881 1.407-2.881 3.143 0 1.735 1.29 3.142 2.88 3.142zM24.888 28.148c1.591 0 2.881-1.407 2.881-3.142 0-1.736-1.29-3.143-2.88-3.143-1.592 0-2.882 1.407-2.882 3.143 0 1.735 1.29 3.142 2.881 3.142zM13.365 40.717c1.59 0 2.88-1.407 2.88-3.143 0-1.736-1.29-3.143-2.88-3.143-1.591 0-2.881 1.407-2.881 3.143 0 1.736 1.29 3.143 2.88 3.143zM24.888 40.717c1.591 0 2.881-1.407 2.881-3.143 0-1.736-1.29-3.143-2.88-3.143-1.592 0-2.882 1.407-2.882 3.143 0 1.736 1.29 3.143 2.881 3.143zM36.413 28.148c1.59 0 2.88-1.407 2.88-3.142 0-1.736-1.29-3.143-2.88-3.143-1.591 0-2.881 1.407-2.881 3.143 0 1.735 1.29 3.142 2.88 3.142z"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
|
||||
export default DatepickerV2;
|
||||
31
frontend/assets/images/icons/widgets/datetimepickerV2.jsx
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import React from 'react';
|
||||
|
||||
const DateTimePickerV2 = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => (
|
||||
<svg
|
||||
width={width}
|
||||
height={width}
|
||||
viewBox={viewBox}
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
d="M4.72192 16.4763V40.5001C4.72192 43.5376 6.97916 46.0001 9.76359 46.0001H40.0136C42.798 46.0001 45.0552 43.5376 45.0552 40.5001V16.4763H4.72192Z"
|
||||
fill={fill}
|
||||
/>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M14.7228 29.9034C14.7228 24.289 19.2742 19.7375 24.8887 19.7375C30.5032 19.7375 35.0546 24.289 35.0546 29.9034C35.0546 35.5178 30.5032 40.0693 24.8887 40.0693C19.2742 40.0693 14.7228 35.5178 14.7228 29.9034ZM26.8437 26.7755C26.8437 25.6958 25.9684 24.8205 24.8887 24.8205C23.809 24.8205 22.9337 25.6958 22.9337 26.7755V30.6854C22.9337 31.5825 23.5442 32.3645 24.4145 32.582L27.5425 33.364C28.59 33.6259 29.6514 32.9891 29.9133 31.9416C30.1751 30.8941 29.5383 29.8327 28.4908 29.5708L26.8437 29.159V26.7755Z"
|
||||
fill="#4368E3"
|
||||
/>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M14.8053 2C16.3963 2 17.6862 3.4071 17.6862 5.14286V6.71428H32.0912V5.14286C32.0912 3.4071 33.3811 2 34.9722 2C36.5633 2 37.8531 3.4071 37.8531 5.14286V6.71428H40.0136C42.5696 6.71428 45.0552 8.79479 45.0552 11.8884V14.1352V16.4923H42.8945H6.88264H4.72192V14.1352V11.8884C4.72192 8.79479 7.20766 6.71428 9.76359 6.71428H11.9243V5.14286C11.9243 3.4071 13.2142 2 14.8053 2Z"
|
||||
fill="#4368E3"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
|
||||
export default DateTimePickerV2;
|
||||
|
|
@ -11,12 +11,12 @@ import Colorpicker from './colorpicker.jsx';
|
|||
import Container from './container.jsx';
|
||||
import Customcomponent from './customcomponent.jsx';
|
||||
import Datepicker from './datepicker.jsx';
|
||||
import DateTimePickerV2 from './datetimepickerV2.jsx';
|
||||
import Daterangepicker from './daterangepicker.jsx';
|
||||
import Divider from './divider.jsx';
|
||||
import DividerHorizondal from './dividerhorizontal.jsx';
|
||||
import Downstatistics from './downstatistics.jsx';
|
||||
import Dropdown from './dropdown.jsx';
|
||||
import DropdownV2 from './dropdownV2.jsx';
|
||||
import Filepicker from './filepicker.jsx';
|
||||
import Form from './form.jsx';
|
||||
import Frame from './frame.jsx';
|
||||
|
|
@ -32,14 +32,12 @@ import Listview from './listview.jsx';
|
|||
import Map from './map.jsx';
|
||||
import Modal from './modal.jsx';
|
||||
import Multiselect from './multiselect.jsx';
|
||||
import MultiselectV2 from './multiselectV2.jsx';
|
||||
import Numberinput from './numberinput.jsx';
|
||||
import Pagination from './pagination.jsx';
|
||||
import Passwordinput from './passwordinput.jsx';
|
||||
import Pdf from './pdf.jsx';
|
||||
import Qrscanner from './qrscanner.jsx';
|
||||
import RadioButton from './radio-button.jsx';
|
||||
import RadioButtonV2 from './radiobuttonV2.jsx';
|
||||
import Rangeslider from './rangeslider.jsx';
|
||||
import Rating from './rating.jsx';
|
||||
import Spinner from './spinner.jsx';
|
||||
|
|
@ -56,10 +54,11 @@ import Textinput from './textinput.jsx';
|
|||
import Timeline from './timeline.jsx';
|
||||
import Timer from './timer.jsx';
|
||||
import Toggleswitch from './toggleswitch.jsx';
|
||||
import ToggleSwitchV2 from './toggleswitchV2.jsx';
|
||||
import Treeselect from './treeselect.jsx';
|
||||
import Upstatistics from './upstatistics.jsx';
|
||||
import Verticaldivider from './verticaldivider.jsx';
|
||||
import TimePicker from './timepicker.jsx';
|
||||
import DatepickerV2 from './datepickerv2.jsx';
|
||||
|
||||
const WidgetIcon = (props) => {
|
||||
switch (props.name) {
|
||||
|
|
@ -85,8 +84,21 @@ const WidgetIcon = (props) => {
|
|||
return <Container {...props} />;
|
||||
case 'customcomponent':
|
||||
return <Customcomponent {...props} />;
|
||||
case 'datetimepickerlegacy':
|
||||
return <Datepicker {...props} />;
|
||||
case 'datepicker':
|
||||
return <Datepicker {...props} />;
|
||||
case 'datepickerv2':
|
||||
return <DatepickerV2 {...props} />;
|
||||
case 'timepicker':
|
||||
return <TimePicker {...props} />;
|
||||
case 'datetimepicker':
|
||||
if (props?.version === 'v2') {
|
||||
return <DateTimePickerV2 {...props} />;
|
||||
}
|
||||
return <Datepicker {...props} />;
|
||||
case 'datetimepickerv2':
|
||||
return <DateTimePickerV2 {...props} />;
|
||||
case 'daterangepicker':
|
||||
return <Daterangepicker {...props} />;
|
||||
case 'divider':
|
||||
|
|
@ -95,10 +107,9 @@ const WidgetIcon = (props) => {
|
|||
return <DividerHorizondal {...props} />;
|
||||
case 'downstatistics':
|
||||
return <Downstatistics {...props} />;
|
||||
case 'dropdownlegacy':
|
||||
case 'dropdown':
|
||||
case 'dropdownv2':
|
||||
return <Dropdown {...props} />;
|
||||
case 'dropdownV2':
|
||||
return <DropdownV2 {...props} />;
|
||||
case 'filepicker':
|
||||
return <Filepicker {...props} />;
|
||||
case 'form':
|
||||
|
|
@ -126,11 +137,11 @@ const WidgetIcon = (props) => {
|
|||
case 'map':
|
||||
return <Map {...props} />;
|
||||
case 'modal':
|
||||
case 'modallegacy':
|
||||
return <Modal {...props} />;
|
||||
case 'multiselectlegacy':
|
||||
case 'multiselect':
|
||||
case 'multiselectv2':
|
||||
return <Multiselect {...props} />;
|
||||
case 'multiselectV2':
|
||||
return <MultiselectV2 {...props} />;
|
||||
case 'numberinput':
|
||||
return <Numberinput {...props} />;
|
||||
case 'pagination':
|
||||
|
|
@ -141,10 +152,9 @@ const WidgetIcon = (props) => {
|
|||
return <Pdf {...props} />;
|
||||
case 'qrscanner':
|
||||
return <Qrscanner {...props} />;
|
||||
case 'radiobuttonlegacy':
|
||||
return <RadioButton {...props} />;
|
||||
case 'radiobutton':
|
||||
return <RadioButtonV2 {...props} />;
|
||||
case 'radiobuttonv2':
|
||||
return <RadioButton {...props} />;
|
||||
case 'rangeslider':
|
||||
return <Rangeslider {...props} />;
|
||||
case 'rating':
|
||||
|
|
@ -177,10 +187,10 @@ const WidgetIcon = (props) => {
|
|||
return <Timeline {...props} />;
|
||||
case 'timer':
|
||||
return <Timer {...props} />;
|
||||
case 'toggleswitchlegacy':
|
||||
return <Toggleswitch {...props} />;
|
||||
case 'toggleswitch':
|
||||
case 'toggleswitchv2':
|
||||
return <ToggleSwitchV2 {...props} />;
|
||||
return <Toggleswitch {...props} />;
|
||||
|
||||
case 'treeselect':
|
||||
return <Treeselect {...props} />;
|
||||
case 'upstatistics':
|
||||
|
|
|
|||
27
frontend/assets/images/icons/widgets/timepicker.jsx
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import React from 'react';
|
||||
|
||||
const TimePicker = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => (
|
||||
<svg
|
||||
width={width}
|
||||
height={width}
|
||||
viewBox={viewBox}
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M16.8409 3.38078C17.725 2.49668 18.9241 2 20.1744 2H29.6029C30.8532 2 32.0524 2.49668 32.9364 3.38078C33.8205 4.26488 34.3172 5.46396 34.3172 6.71429V8.28571H15.4601V6.71429C15.4601 5.46396 15.9568 4.26488 16.8409 3.38078ZM15.4601 39.7143V41.2857C15.4601 42.5359 15.9568 43.7353 16.8409 44.6193C17.725 45.5034 18.924 46 20.1744 46H29.6029C30.8533 46 32.0524 45.5034 32.9364 44.6193C33.8205 43.7353 34.3172 42.5359 34.3172 41.2857V39.7143H15.4601Z"
|
||||
fill={fill}
|
||||
/>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M9.17438 12.9999C9.17438 10.3963 11.285 8.28564 13.8887 8.28564H35.8887C38.4922 8.28564 40.6029 10.3963 40.6029 12.9999V34.9999C40.6029 37.6035 38.4922 39.7142 35.8887 39.7142H13.8887C11.285 39.7142 9.17438 37.6035 9.17438 34.9999V12.9999ZM27.2458 16.7321C27.2458 15.6473 26.3664 14.7678 25.2815 14.7678C24.1967 14.7678 23.3172 15.6473 23.3172 16.7321V23.8035C23.3172 24.3245 23.5242 24.8241 23.8926 25.1925L28.6068 29.9068C29.374 30.6739 30.6176 30.6739 31.3848 29.9068C32.1519 29.1397 32.1519 27.896 31.3848 27.1289L27.2458 22.9899V16.7321Z"
|
||||
fill="#4368E3"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
|
||||
export default TimePicker;
|
||||
4
frontend/assets/images/icons/x-env.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none">
|
||||
<path d="M1.16797 3.49935C1.16797 2.21068 2.21264 1.16602 3.5013 1.16602H10.5013C11.79 1.16602 12.8346 2.21068 12.8346 3.49935V3.64518H1.16797V3.49935Z" fill="#8E4EC6"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.16797 4.52018H12.8346V10.4993C12.8346 11.788 11.79 12.8327 10.5013 12.8327H3.5013C2.21264 12.8327 1.16797 11.788 1.16797 10.4993V4.52018ZM4.3316 6.74246C4.42958 6.52159 4.32996 6.26312 4.10909 6.16514C3.88822 6.06716 3.62974 6.16678 3.53176 6.38765L3.51393 6.42786C2.98975 7.60948 2.96823 8.95337 3.4543 10.1512L3.52629 10.3286C3.61714 10.5525 3.8723 10.6603 4.09619 10.5695C4.32008 10.4786 4.42793 10.2234 4.33707 9.99956L4.26508 9.82215C3.86829 8.84434 3.88586 7.74727 4.31376 6.78267L4.3316 6.74246ZM10.4708 6.38765C10.3729 6.16678 10.1144 6.06716 9.89352 6.16514C9.67265 6.26311 9.57303 6.52159 9.67101 6.74246L9.68884 6.78267C10.1167 7.74727 10.1343 8.84434 9.73752 9.82215L9.66553 9.99956C9.57468 10.2234 9.68252 10.4786 9.90641 10.5695C10.1303 10.6603 10.3855 10.5525 10.4763 10.3286L10.5483 10.1512C11.0344 8.95337 11.0129 7.60948 10.4887 6.42786L10.4708 6.38765ZM6.07314 6.81767C5.90229 6.64681 5.62528 6.64681 5.45442 6.81767C5.28357 6.98852 5.28357 7.26553 5.45442 7.43638L6.38258 8.36454L5.45442 9.2927C5.28357 9.46356 5.28357 9.74057 5.45442 9.91142C5.62528 10.0823 5.90229 10.0823 6.07314 9.91142L7.0013 8.98326L7.92946 9.91142C8.10032 10.0823 8.37733 10.0823 8.54818 9.91142C8.71903 9.74057 8.71903 9.46356 8.54818 9.2927L7.62002 8.36454L8.54818 7.43638C8.71903 7.26553 8.71903 6.98852 8.54818 6.81767C8.37733 6.64681 8.10032 6.64681 7.92946 6.81767L7.0013 7.74582L6.07314 6.81767Z" fill="#8E4EC6"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
5
frontend/assets/images/info-red.svg
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle opacity="0.4" cx="10.5208" cy="10.5257" r="8.33333" fill="#E54D2E"/>
|
||||
<path d="M11.3542 6.35872C11.3542 6.81896 10.9811 7.19206 10.5208 7.19206C10.0606 7.19206 9.6875 6.81896 9.6875 6.35872C9.6875 5.89849 10.0606 5.52539 10.5208 5.52539C10.9811 5.52539 11.3542 5.89849 11.3542 6.35872Z" fill="#E54D2E"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.0625 8.85938C9.0625 8.5142 9.34232 8.23438 9.6875 8.23438H10.5208C10.866 8.23438 11.1458 8.5142 11.1458 8.85938V14.6927C11.1458 15.0379 10.866 15.3177 10.5208 15.3177C10.1757 15.3177 9.89583 15.0379 9.89583 14.6927V9.48438H9.6875C9.34232 9.48438 9.0625 9.20455 9.0625 8.85938Z" fill="#E54D2E"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 761 B |
|
|
@ -0,0 +1,6 @@
|
|||
<svg width="30" height="30" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M21.6653 6.00002H19.6655C19.6218 5.99949 19.5785 6.00811 19.5383 6.02533C19.4981 6.04256 19.462 6.068 19.4322 6.10002L13.0795 12.4533C12.0134 11.9656 10.8099 11.868 9.67927 12.1776C8.5486 12.4872 7.56267 13.1843 6.89377 14.1471C6.22487 15.1099 5.91554 16.2771 6.01983 17.4449C6.12412 18.6126 6.63541 19.7065 7.46434 20.5355C8.29327 21.3645 9.38712 21.8759 10.5548 21.9802C11.7224 22.0845 12.8895 21.7751 13.8523 21.1062C14.815 20.4372 15.512 19.4512 15.8216 18.3204C16.1312 17.1897 16.0336 15.9861 15.5459 14.9199L17.0924 13.38L18.379 13.8133C18.4912 13.8538 18.6123 13.8634 18.7296 13.8411C18.8468 13.8188 18.956 13.7655 19.0456 13.6866C19.1318 13.6131 19.1978 13.5188 19.2375 13.4127C19.2772 13.3065 19.2891 13.192 19.2722 13.08L19.0056 11.4666L19.4855 10.98L20.4588 11.4266C20.572 11.477 20.6971 11.4947 20.8199 11.4779C20.9427 11.461 21.0583 11.4103 21.1539 11.3313C21.2494 11.2524 21.3211 11.1484 21.3608 11.031C21.4005 10.9136 21.4067 10.7874 21.3787 10.6666L21.0387 9.45999L21.8986 8.59333C21.9342 8.56064 21.9618 8.52016 21.9791 8.47506C21.9965 8.42996 22.0031 8.38145 21.9986 8.33334V6.33335C21.9986 6.24495 21.9635 6.16017 21.901 6.09765C21.8385 6.03514 21.7537 6.00002 21.6653 6.00002ZM10.6663 18.3333C10.6663 18.531 10.6077 18.7244 10.4978 18.8888C10.388 19.0533 10.2318 19.1814 10.0491 19.2571C9.86638 19.3328 9.66533 19.3526 9.47137 19.314C9.27741 19.2754 9.09924 19.1802 8.9594 19.0404C8.81956 18.9005 8.72433 18.7223 8.68575 18.5283C8.64717 18.3344 8.66697 18.1333 8.74265 17.9506C8.81833 17.7678 8.94649 17.6117 9.11092 17.5018C9.27536 17.3919 9.46868 17.3333 9.66644 17.3333C9.93163 17.3333 10.186 17.4386 10.3735 17.6262C10.561 17.8137 10.6663 18.068 10.6663 18.3333Z"
|
||||
fill="#D9D9D9"
|
||||
/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
|
|
@ -0,0 +1,6 @@
|
|||
<svg width="30" height="30" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M21.6653 6.00002H19.6655C19.6218 5.99949 19.5785 6.00811 19.5383 6.02533C19.4981 6.04256 19.462 6.068 19.4322 6.10002L13.0795 12.4533C12.0134 11.9656 10.8099 11.868 9.67927 12.1776C8.5486 12.4872 7.56267 13.1843 6.89377 14.1471C6.22487 15.1099 5.91554 16.2771 6.01983 17.4449C6.12412 18.6126 6.63541 19.7065 7.46434 20.5355C8.29327 21.3645 9.38712 21.8759 10.5548 21.9802C11.7224 22.0845 12.8895 21.7751 13.8523 21.1062C14.815 20.4372 15.512 19.4512 15.8216 18.3204C16.1312 17.1897 16.0336 15.9861 15.5459 14.9199L17.0924 13.38L18.379 13.8133C18.4912 13.8538 18.6123 13.8634 18.7296 13.8411C18.8468 13.8188 18.956 13.7655 19.0456 13.6866C19.1318 13.6131 19.1978 13.5188 19.2375 13.4127C19.2772 13.3065 19.2891 13.192 19.2722 13.08L19.0056 11.4666L19.4855 10.98L20.4588 11.4266C20.572 11.477 20.6971 11.4947 20.8199 11.4779C20.9427 11.461 21.0583 11.4103 21.1539 11.3313C21.2494 11.2524 21.3211 11.1484 21.3608 11.031C21.4005 10.9136 21.4067 10.7874 21.3787 10.6666L21.0387 9.45999L21.8986 8.59333C21.9342 8.56064 21.9618 8.52016 21.9791 8.47506C21.9965 8.42996 22.0031 8.38145 21.9986 8.33334V6.33335C21.9986 6.24495 21.9635 6.16017 21.901 6.09765C21.8385 6.03514 21.7537 6.00002 21.6653 6.00002ZM10.6663 18.3333C10.6663 18.531 10.6077 18.7244 10.4978 18.8888C10.388 19.0533 10.2318 19.1814 10.0491 19.2571C9.86638 19.3328 9.66533 19.3526 9.47137 19.314C9.27741 19.2754 9.09924 19.1802 8.9594 19.0404C8.81956 18.9005 8.72433 18.7223 8.68575 18.5283C8.64717 18.3344 8.66697 18.1333 8.74265 17.9506C8.81833 17.7678 8.94649 17.6117 9.11092 17.5018C9.27536 17.3919 9.46868 17.3333 9.66644 17.3333C9.93163 17.3333 10.186 17.4386 10.3735 17.6262C10.561 17.8137 10.6663 18.068 10.6663 18.3333Z"
|
||||
fill="#889096"
|
||||
/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
6
frontend/assets/images/read.svg
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<svg width="14" height="18" viewBox="0 0 14 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.4167 8.52279V3.93945H13.6667V8.52279C13.6667 8.86796 13.3868 9.14779 13.0417 9.14779C12.6965 9.14779 12.4167 8.86796 12.4167 8.52279Z" fill="#3E63DD"/>
|
||||
<path d="M10.3333 7.27246V4.77246H3.66666V7.27246C3.66666 9.11341 5.15904 10.6058 6.99999 10.6058C8.84094 10.6058 10.3333 9.11341 10.3333 7.27246Z" fill="#3E63DD"/>
|
||||
<path d="M0.356695 3.55858L5.98465 1.05727C6.63106 0.769973 7.36893 0.769973 8.01534 1.05727L13.6433 3.55858C13.9732 3.70521 13.9732 4.17346 13.6433 4.32009L8.01534 6.8214C7.36893 7.1087 6.63106 7.1087 5.98465 6.8214L0.356695 4.32009C0.0267722 4.17346 0.0267722 3.70521 0.356695 3.55858Z" fill="#3E63DD"/>
|
||||
<path d="M8.91629 11.7726L7.59252 13.1112C7.26635 13.441 6.73364 13.441 6.40747 13.1112L5.0837 11.7726C4.8792 11.5658 4.58067 11.4777 4.30166 11.5597C1.96405 12.2471 0.333328 13.8003 0.333328 15.6063C0.333328 16.5268 1.07952 17.273 1.99999 17.273H12C12.9205 17.273 13.6667 16.5268 13.6667 15.6063C13.6667 13.8003 12.0359 12.2471 9.69833 11.5597C9.41932 11.4777 9.12078 11.5658 8.91629 11.7726Z" fill="#3E63DD"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
9
frontend/assets/images/sso-buttons/openid.svg
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
3
frontend/assets/images/sso-buttons/sso-general.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M21.6653 6.00002H19.6655C19.6218 5.99949 19.5785 6.00811 19.5383 6.02533C19.4981 6.04256 19.462 6.068 19.4322 6.10002L13.0795 12.4533C12.0134 11.9656 10.8099 11.868 9.67927 12.1776C8.5486 12.4872 7.56267 13.1843 6.89377 14.1471C6.22487 15.1099 5.91554 16.2771 6.01983 17.4449C6.12412 18.6126 6.63541 19.7065 7.46434 20.5355C8.29327 21.3645 9.38712 21.8759 10.5548 21.9802C11.7224 22.0845 12.8895 21.7751 13.8523 21.1062C14.815 20.4372 15.512 19.4512 15.8216 18.3204C16.1312 17.1897 16.0336 15.9861 15.5459 14.9199L17.0924 13.38L18.379 13.8133C18.4912 13.8538 18.6123 13.8634 18.7296 13.8411C18.8468 13.8188 18.956 13.7655 19.0456 13.6866C19.1318 13.6131 19.1978 13.5188 19.2375 13.4127C19.2772 13.3065 19.2891 13.192 19.2722 13.08L19.0056 11.4666L19.4855 10.98L20.4588 11.4266C20.572 11.477 20.6971 11.4947 20.8199 11.4779C20.9427 11.461 21.0583 11.4103 21.1539 11.3313C21.2494 11.2524 21.3211 11.1484 21.3608 11.031C21.4005 10.9136 21.4067 10.7874 21.3787 10.6666L21.0387 9.45999L21.8986 8.59333C21.9342 8.56064 21.9618 8.52016 21.9791 8.47506C21.9965 8.42996 22.0031 8.38145 21.9986 8.33334V6.33335C21.9986 6.24495 21.9635 6.16017 21.901 6.09765C21.8385 6.03514 21.7537 6.00002 21.6653 6.00002ZM10.6663 18.3333C10.6663 18.531 10.6077 18.7244 10.4978 18.8888C10.388 19.0533 10.2318 19.1814 10.0491 19.2571C9.86638 19.3328 9.66533 19.3526 9.47137 19.314C9.27741 19.2754 9.09924 19.1802 8.9594 19.0404C8.81956 18.9005 8.72433 18.7223 8.68575 18.5283C8.64717 18.3344 8.66697 18.1333 8.74265 17.9506C8.81833 17.7678 8.94649 17.6117 9.11092 17.5018C9.27536 17.3919 9.46868 17.3333 9.66644 17.3333C9.93163 17.3333 10.186 17.4386 10.3735 17.6262C10.561 17.8137 10.6663 18.068 10.6663 18.3333Z" fill="#889096"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 48 KiB |
BIN
frontend/assets/images/templates/admin-panel-tooljet-db-dark.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
frontend/assets/images/templates/admin-panel-tooljet-db.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 513 KiB |
BIN
frontend/assets/images/templates/advanced-data-visualization.png
Normal file
|
After Width: | Height: | Size: 503 KiB |
BIN
frontend/assets/images/templates/bill-of-materials-dark.png
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
frontend/assets/images/templates/bill-of-materials.png
Normal file
|
After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 138 KiB |
BIN
frontend/assets/images/templates/bug-tracker-dark.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
frontend/assets/images/templates/bug-tracker.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 321 KiB |
|
Before Width: | Height: | Size: 320 KiB |
|
After Width: | Height: | Size: 98 KiB |
BIN
frontend/assets/images/templates/course-management-system.png
Normal file
|
After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 25 KiB |
BIN
frontend/assets/images/templates/customer-ticketing-form.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 99 KiB |