mirror of
https://github.com/ToolJet/ToolJet
synced 2026-04-21 21:47:17 +00:00
376 lines
No EOL
11 KiB
YAML
376 lines
No EOL
11 KiB
YAML
name: CI
|
|
# Controls when the workflow will run
|
|
on:
|
|
push:
|
|
branches: [develop, main]
|
|
pull_request:
|
|
types: [labeled, unlabeled, closed]
|
|
|
|
# Allows you to run this workflow manually from the Actions tab
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
FORCE_COLOR: true
|
|
NODE_OPTIONS: "--max-old-space-size=4096"
|
|
LOCKBOX_MASTER_KEY: lockbox-master-key
|
|
SECRET_KEY_BASE: secrret-key-base
|
|
NODE_ENV: test
|
|
PG_HOST: postgres
|
|
PG_PORT: 5432
|
|
PG_USER: postgres
|
|
PG_PASS: postgres
|
|
PG_DB: tooljet_test
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
if: ${{ github.event.action == 'labeled' && github.event.label.name == 'run-ci' }}
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Use Node.js 18.18.2
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 18.18.2
|
|
|
|
# Cache server node modules to speed up subsequent builds
|
|
- name: Cache server node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: server/node_modules
|
|
key: ${{ runner.os }}-node-server-${{ hashFiles('server/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-server-
|
|
|
|
# Cache frontend node modules to speed up subsequent builds
|
|
- name: Cache frontend node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: frontend/node_modules
|
|
key: ${{ runner.os }}-node-frontend-${{ hashFiles('frontend/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-frontend-
|
|
|
|
# Cache plugins node modules to speed up subsequent builds
|
|
- name: Cache plugins node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: plugins/node_modules
|
|
key: ${{ runner.os }}-node-plugins-${{ hashFiles('plugins/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-plugins-
|
|
|
|
- name: Setup Python 3
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: 3.x
|
|
|
|
- name: Install Python dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install setuptools
|
|
|
|
- name: Install Node.js dependencies
|
|
run: npm ci
|
|
|
|
- name: Build
|
|
run: npm run build
|
|
|
|
- name: Frontend ci
|
|
run: |
|
|
npm --prefix frontend ci
|
|
|
|
- name: Server ci
|
|
run: npm --prefix server ci
|
|
|
|
- name: plugins ci
|
|
run: npm --prefix plugins ci
|
|
|
|
# Upload plugins build artifacts
|
|
- name: Archive specific plugins files and folders
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: plugins-files
|
|
path: |
|
|
plugins/dist
|
|
plugins/client.js
|
|
plugins/node_modules
|
|
plugins/packages/common
|
|
plugins/package.json
|
|
|
|
# Upload server build artifacts
|
|
- name: Archive specific server files and folders
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: server-files
|
|
path: |
|
|
server/dist
|
|
|
|
# Upload frontend build artifacts
|
|
- name: Archive specific frontend files and folders
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frontend-files
|
|
path: |
|
|
frontend/build
|
|
|
|
lint-for-plugins:
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Use Node.js 18.18.2
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 18.18.2
|
|
|
|
# Cache server node modules to speed up subsequent builds
|
|
- name: Cache server node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: server/node_modules
|
|
key: ${{ runner.os }}-node-server-${{ hashFiles('server/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-server-
|
|
|
|
# Cache frontend node modules to speed up subsequent builds
|
|
- name: Cache frontend node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: frontend/node_modules
|
|
key: ${{ runner.os }}-node-frontend-${{ hashFiles('frontend/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-frontend-
|
|
|
|
# Cache plugins node modules to speed up subsequent builds
|
|
- name: Cache plugins node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: plugins/node_modules
|
|
key: ${{ runner.os }}-node-plugins-${{ hashFiles('plugins/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-plugins-
|
|
|
|
- name: Setup Python 3
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: 3.x
|
|
|
|
- name: Install Python dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install setuptools
|
|
|
|
# Download plugins build artifacts
|
|
- name: Download plugins files and folders
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: plugins-files
|
|
|
|
- name: Running for plugins
|
|
run: |
|
|
npm --prefix plugins run lint
|
|
|
|
|
|
lint-for-frontend:
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Use Node.js 18.18.2
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 18.18.2
|
|
|
|
# Cache server node modules to speed up subsequent builds
|
|
- name: Cache server node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: server/node_modules
|
|
key: ${{ runner.os }}-node-server-${{ hashFiles('server/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-server-
|
|
|
|
# Cache frontend node modules to speed up subsequent builds
|
|
- name: Cache frontend node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: frontend/node_modules
|
|
key: ${{ runner.os }}-node-frontend-${{ hashFiles('frontend/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-frontend-
|
|
|
|
# Cache plugins node modules to speed up subsequent builds
|
|
- name: Cache plugins node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: plugins/node_modules
|
|
key: ${{ runner.os }}-node-plugins-${{ hashFiles('plugins/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-plugins-
|
|
|
|
- name: Setup Python 3
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: 3.x
|
|
|
|
- name: Install Python dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install setuptools
|
|
|
|
# Download frontend build artifacts
|
|
- name: Download frontend files and folders
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frontend-files
|
|
|
|
- name: Running for frontend
|
|
run: |
|
|
npm --prefix frontend run lint
|
|
|
|
lint-for-server:
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Use Node.js 18.18.2
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 18.18.2
|
|
|
|
# Cache server node modules to speed up subsequent builds
|
|
- name: Cache server node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: server/node_modules
|
|
key: ${{ runner.os }}-node-server-${{ hashFiles('server/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-server-
|
|
|
|
# Cache frontend node modules to speed up subsequent builds
|
|
- name: Cache frontend node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: frontend/node_modules
|
|
key: ${{ runner.os }}-node-frontend-${{ hashFiles('frontend/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-frontend-
|
|
|
|
# Cache plugins node modules to speed up subsequent builds
|
|
- name: Cache plugins node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: plugins/node_modules
|
|
key: ${{ runner.os }}-node-plugins-${{ hashFiles('plugins/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-node-plugins-
|
|
|
|
- name: Setup Python 3
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: 3.x
|
|
|
|
- name: Install Python dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install setuptools
|
|
|
|
# Download server build artifacts
|
|
- name: Download server files and folders
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: server-files
|
|
|
|
- name: Running for server
|
|
run: |
|
|
npm --prefix server run lint
|
|
|
|
unit-test:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30 # Set a timeout of 30 minutes
|
|
needs: build
|
|
container: node:18.18.2-bullseye
|
|
services:
|
|
postgres:
|
|
image: postgres
|
|
env:
|
|
POSTGRES_PASSWORD: postgres
|
|
# Set health checks to wait until postgres has started
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Cache node modules
|
|
uses: actions/cache@v3
|
|
env:
|
|
cache-name: cache-node-modules
|
|
with:
|
|
# npm cache files are stored in `~/.npm` on Linux/macOS
|
|
path: ~/.npm
|
|
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-build-${{ env.cache-name }}-
|
|
${{ runner.os }}-build-
|
|
${{ runner.os }}-
|
|
- run: apt update && apt install -y postgresql-client
|
|
- run: npm --prefix plugins ci
|
|
- run: npm --prefix plugins run create:client && npm --prefix plugins run create:server
|
|
- run: npm --prefix plugins run build:packages && npm --prefix plugins run build:server
|
|
- run: npm --prefix server ci
|
|
- run: npm --prefix server run db:create
|
|
- run: npm --prefix server run db:migrate
|
|
- run: npm --prefix server run test
|
|
|
|
e2e-test:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30 # Set a timeout of 30 minutes
|
|
needs: build
|
|
container: node:18.18.2-bullseye
|
|
services:
|
|
postgres:
|
|
image: postgres
|
|
env:
|
|
POSTGRES_PASSWORD: postgres
|
|
# Set health checks to wait until postgres has started
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Cache node modules
|
|
uses: actions/cache@v3
|
|
env:
|
|
cache-name: cache-node-modules
|
|
with:
|
|
# npm cache files are stored in `~/.npm` on Linux/macOS
|
|
path: ~/.npm
|
|
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-build-${{ env.cache-name }}-
|
|
${{ runner.os }}-build-
|
|
${{ runner.os }}-
|
|
- run: apt update && apt install -y postgresql-client
|
|
- run: npm --prefix plugins ci
|
|
- run: npm --prefix plugins run create:client && npm --prefix plugins run create:server
|
|
- run: npm --prefix plugins run build:packages && npm --prefix plugins run build:server
|
|
- run: npm --prefix server ci
|
|
- run: npm --prefix server run db:create
|
|
- run: npm --prefix server run db:migrate
|
|
- run: NODE_OPTIONS=--max_old_space_size=8096 npm --prefix server run test:e2e -- --silent --testTimeout=20000 |