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