diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress-appbuilder.yml similarity index 63% rename from .github/workflows/cypress.yml rename to .github/workflows/cypress-appbuilder.yml index 7265d0f230..b7d1177183 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress-appbuilder.yml @@ -1,4 +1,4 @@ -name: Cypress E2E Test +name: Cypress App-Builder on: pull_request_target: @@ -117,94 +117,80 @@ jobs: name: screenshots path: cypress-tests/cypress/screenshots - Cypress-Platform: + Cypress-App-builder-Subpath: runs-on: ubuntu-22.04 - if: ${{ github.event.action == 'labeled' && github.event.label.name == 'run-cypress-workspace' }} + if: ${{ github.event.action == 'labeled' && github.event.label.name == 'run-cypress-app-builder-subpath' }} steps: - - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: 18.3.0 - - - name: Set up Docker - uses: docker-practice/actions-setup-docker@master - - - name: Run PosgtreSQL Database Docker Container - run: | - sudo docker network create tooljet - sudo docker run -d --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres -e POSTGRES_USER=postgres -e POSTGRES_PORT=5432 -d postgres:13 - - name: Checkout uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.ref }} - - name: Install and build dependencies + # Create Docker Buildx builder with platform configuration + - name: Set up Docker Buildx run: | - npm cache clean --force - npm install - npm install --prefix server - npm install --prefix frontend - npm run build:plugins + 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: Build docker image + run: docker buildx build --platform=linux/amd64 -f docker/production.Dockerfile . -t tooljet/tj-osv:cypress - name: Set up environment variables run: | - echo "TOOLJET_HOST=http://localhost:8082" >> .env + echo "TOOLJET_HOST=http://localhost:3000" >> .env echo "LOCKBOX_MASTER_KEY=cd97331a419c09387bef49787f7da8d2a81d30733f0de6bed23ad8356d2068b2" >> .env echo "SECRET_KEY_BASE=7073b9a35a15dd20914ae17e36a693093f25b74b96517a5fec461fc901c51e011cd142c731bee48c5081ec8bac321c1f259ef097ef2a16f25df17a3798c03426" >> .env echo "PG_DB=tooljet_development" >> .env echo "PG_USER=postgres" >> .env - echo "PG_HOST=localhost" >> .env + echo "PG_HOST=postgres" >> .env echo "PG_PASS=postgres" >> .env echo "PG_PORT=5432" >> .env echo "ENABLE_TOOLJET_DB=true" >> .env - echo "TOOLJET_DB=tooljet" >> .env + echo "TOOLJET_DB=tooljet_db" >> .env echo "TOOLJET_DB_USER=postgres" >> .env - echo "TOOLJET_DB_HOST=localhost" >> .env + echo "TOOLJET_DB_HOST=postgres" >> .env echo "TOOLJET_DB_PASS=postgres" >> .env echo "PGRST_JWT_SECRET=r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj" >> .env - echo "PGRST_HOST=localhost:3001" >> .env + echo "PGRST_HOST=postgrest" >> .env + echo "PGRST_DB_URI=postgres://postgres:postgres@postgres/tooljet_db" >> .env echo "SSO_GIT_OAUTH2_CLIENT_ID=dummy" >> .env echo "SSO_GIT_OAUTH2_CLIENT_SECRET=dummy" >> .env echo "SSO_GIT_OAUTH2_HOST=dummy" >> .env echo "SSO_GOOGLE_OAUTH2_CLIENT_ID=dummy" >> .env + echo "SUB_PATH=/apps/tooljet/" >> .env + echo "NODE_ENV=production" >> .env + echo "SERVE_CLIENT=true" >> .env - - name: Set up database - run: | - npm run --prefix server db:create - npm run --prefix server db:reset - npm run --prefix server db:seed + - name: Pulling the docker-compose file + run: curl -LO https://tooljet-test.s3.us-west-1.amazonaws.com/docker-compose.yaml && mkdir postgres_data - - name: sleep 5 - run: sleep 5 + - name: Run docker-compose file + run: docker-compose up -d - - name: Run PostgREST Docker Container - run: | - sudo docker run -d --name postgrest --network tooljet -p 3001:3000 \ - -e PGRST_DB_URI="postgres://postgres:postgres@postgres:5432/tooljet" -e PGRST_DB_ANON_ROLE="postgres" -e PGRST_JWT_SECRET="r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj" \ - postgrest/postgrest:v10.1.1.20221215 + - name: Checking containers + run: docker ps -a - - name: Run plugins compilation in watch mode - run: cd plugins && npm start & - - - name: Run the server - run: cd server && npm run start:dev & - - - name: Run the client - run: cd frontend && npm start & + - name: docker logs + run: sudo docker logs Tooljet-app - name: Wait for the server to be ready run: | timeout 1500 bash -c ' - until curl --silent --fail http://localhost:8082; do + until curl --silent --fail http://localhost:80/apps/tooljet/; do sleep 5 done' - - name: docker logs - run: sudo docker logs postgrest - - name: Create Cypress environment file id: create-json uses: jsdaniell/create-json@1.1.2 @@ -213,57 +199,12 @@ jobs: json: ${{ secrets.CYPRESS_SECRETS }} dir: "./cypress-tests" - - name: Platform + - name: App Builder subpath uses: cypress-io/github-action@v5 with: working-directory: ./cypress-tests - config: "baseUrl=http://localhost:8082" - config-file: cypress-workspace.config.js - - - name: Capture Screenshots - uses: actions/upload-artifact@v3 - if: always() - with: - name: screenshots - path: cypress-tests/cypress/screenshots - - Cypress-Marketplace: - runs-on: ubuntu-22.04 - - if: ${{ github.event.action == 'labeled' && github.event.label.name == 'run-cypress-marketplace' }} - - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - ref: ${{ github.event.pull_request.head.ref }} - - - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: 18.3.0 - - - name: Checking the PR URL - run: | - timeout 1500 bash -c ' - until curl --silent --fail https://tooljet-pr-cypress-${{ env.PR_NUMBER }}.onrender.com; do - sleep 100 - done' - - - name: Create Cypress environment file - id: create-json - uses: jsdaniell/create-json@1.1.2 - with: - name: "cypress.env.json" - json: ${{ secrets.CYPRESS_SECRETS }} - dir: "./cypress-tests" - - - name: Marketplace - uses: cypress-io/github-action@v5 - with: - working-directory: ./cypress-tests - config: "baseUrl=https://tooljet-pr-cypress-${{ env.PR_NUMBER }}.onrender.com" - config-file: cypress-marketplace.config.js + config: "baseUrl=http://localhost:80/apps/tooljet/" + config-file: cypress-app-builder.config.js - name: Capture Screenshots uses: actions/upload-artifact@v3 diff --git a/.github/workflows/cypress-marketplace.yml b/.github/workflows/cypress-marketplace.yml new file mode 100644 index 0000000000..79c3ad776b --- /dev/null +++ b/.github/workflows/cypress-marketplace.yml @@ -0,0 +1,201 @@ +name: Cypress Marketplace + +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: + Cypress-Marketplace: + runs-on: ubuntu-22.04 + + if: ${{ github.event.action == 'labeled' && github.event.label.name == 'run-cypress-marketplace' }} + + steps: + - 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: Build docker image + run: docker buildx build --platform=linux/amd64 -f docker/production.Dockerfile . -t tooljet/tj-osv:cypress + + - name: Set up environment variables + run: | + echo "TOOLJET_HOST=http://localhost:3000" >> .env + echo "LOCKBOX_MASTER_KEY=cd97331a419c09387bef49787f7da8d2a81d30733f0de6bed23ad8356d2068b2" >> .env + echo "SECRET_KEY_BASE=7073b9a35a15dd20914ae17e36a693093f25b74b96517a5fec461fc901c51e011cd142c731bee48c5081ec8bac321c1f259ef097ef2a16f25df17a3798c03426" >> .env + echo "PG_DB=tooljet_development" >> .env + echo "PG_USER=postgres" >> .env + echo "PG_HOST=postgres" >> .env + echo "PG_PASS=postgres" >> .env + echo "PG_PORT=5432" >> .env + echo "ENABLE_TOOLJET_DB=true" >> .env + echo "TOOLJET_DB=tooljet_db" >> .env + echo "TOOLJET_DB_USER=postgres" >> .env + echo "TOOLJET_DB_HOST=postgres" >> .env + echo "TOOLJET_DB_PASS=postgres" >> .env + echo "PGRST_JWT_SECRET=r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj" >> .env + echo "PGRST_HOST=postgrest" >> .env + echo "PGRST_DB_URI=postgres://postgres:postgres@postgres/tooljet_db" >> .env + echo "SSO_GIT_OAUTH2_CLIENT_ID=dummy" >> .env + echo "SSO_GIT_OAUTH2_CLIENT_SECRET=dummy" >> .env + echo "SSO_GIT_OAUTH2_HOST=dummy" >> .env + echo "SSO_GOOGLE_OAUTH2_CLIENT_ID=dummy" >> .env + + - name: Pulling the docker-compose file + run: curl -LO https://tooljet-test.s3.us-west-1.amazonaws.com/docker-compose.yaml && mkdir postgres_data + + - name: Run docker-compose file + run: docker-compose up -d + + - name: Checking containers + run: docker ps -a + + - name: docker logs + run: sudo docker logs Tooljet-app + + - name: Wait for the server to be ready + run: | + timeout 1500 bash -c ' + until curl --silent --fail http://localhost:80; do + sleep 5 + done' + + - name: Create Cypress environment file + id: create-json + uses: jsdaniell/create-json@1.1.2 + with: + name: "cypress.env.json" + json: ${{ secrets.CYPRESS_SECRETS }} + dir: "./cypress-tests" + + - name: Marketplace + uses: cypress-io/github-action@v5 + with: + working-directory: ./cypress-tests + config: "baseUrl=http://localhost:80" + config-file: cypress-marketplace.config.js + + - name: Capture Screenshots + uses: actions/upload-artifact@v3 + if: always() + with: + name: screenshots + path: cypress-tests/cypress/screenshots + + Cypress-Marketplace-Subpath: + runs-on: ubuntu-22.04 + + if: ${{ github.event.action == 'labeled' && github.event.label.name == 'run-cypress-marketplace-subpath' }} + + steps: + - 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: Build docker image + run: docker buildx build --platform=linux/amd64 -f docker/production.Dockerfile . -t tooljet/tj-osv:cypress + + - name: Set up environment variables + run: | + echo "TOOLJET_HOST=http://localhost:3000" >> .env + echo "LOCKBOX_MASTER_KEY=cd97331a419c09387bef49787f7da8d2a81d30733f0de6bed23ad8356d2068b2" >> .env + echo "SECRET_KEY_BASE=7073b9a35a15dd20914ae17e36a693093f25b74b96517a5fec461fc901c51e011cd142c731bee48c5081ec8bac321c1f259ef097ef2a16f25df17a3798c03426" >> .env + echo "PG_DB=tooljet_development" >> .env + echo "PG_USER=postgres" >> .env + echo "PG_HOST=postgres" >> .env + echo "PG_PASS=postgres" >> .env + echo "PG_PORT=5432" >> .env + echo "ENABLE_TOOLJET_DB=true" >> .env + echo "TOOLJET_DB=tooljet_db" >> .env + echo "TOOLJET_DB_USER=postgres" >> .env + echo "TOOLJET_DB_HOST=postgres" >> .env + echo "TOOLJET_DB_PASS=postgres" >> .env + echo "PGRST_JWT_SECRET=r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj" >> .env + echo "PGRST_HOST=postgrest" >> .env + echo "PGRST_DB_URI=postgres://postgres:postgres@postgres/tooljet_db" >> .env + echo "SSO_GIT_OAUTH2_CLIENT_ID=dummy" >> .env + echo "SSO_GIT_OAUTH2_CLIENT_SECRET=dummy" >> .env + echo "SSO_GIT_OAUTH2_HOST=dummy" >> .env + echo "SSO_GOOGLE_OAUTH2_CLIENT_ID=dummy" >> .env + echo "SUB_PATH=/apps/tooljet/" >> .env + echo "NODE_ENV=production" >> .env + echo "SERVE_CLIENT=true" >> .env + + - name: Pulling the docker-compose file + run: curl -LO https://tooljet-test.s3.us-west-1.amazonaws.com/docker-compose.yaml && mkdir postgres_data + + - name: Run docker-compose file + run: docker-compose up -d + + - name: Checking containers + run: docker ps -a + + - name: docker logs + run: sudo docker logs Tooljet-app + + - name: Wait for the server to be ready + run: | + timeout 1500 bash -c ' + until curl --silent --fail http://localhost:80/apps/tooljet/; do + sleep 5 + done' + + - name: Create Cypress environment file + id: create-json + uses: jsdaniell/create-json@1.1.2 + with: + name: "cypress.env.json" + json: ${{ secrets.CYPRESS_SECRETS }} + dir: "./cypress-tests" + + - name: Marketplace subpath + uses: cypress-io/github-action@v5 + with: + working-directory: ./cypress-tests + config: "baseUrl=http://localhost:80/apps/tooljet/" + config-file: cypress-marketplace.config.js + + - name: Capture Screenshots + uses: actions/upload-artifact@v3 + if: always() + with: + name: screenshots + path: cypress-tests/cypress/screenshots diff --git a/.github/workflows/cypress-platform.yml b/.github/workflows/cypress-platform.yml new file mode 100644 index 0000000000..df001669df --- /dev/null +++ b/.github/workflows/cypress-platform.yml @@ -0,0 +1,218 @@ +name: Cypress Platform + +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: + Cypress-Platform: + runs-on: ubuntu-22.04 + + if: ${{ github.event.action == 'labeled' && github.event.label.name == 'run-cypress-workspace' }} + + steps: + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 18.3.0 + + - name: Set up Docker + uses: docker-practice/actions-setup-docker@master + + - name: Run PosgtreSQL Database Docker Container + run: | + sudo docker network create tooljet + sudo docker run -d --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres -e POSTGRES_USER=postgres -e POSTGRES_PORT=5432 -d postgres:13 + + - name: Checkout + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.ref }} + + - name: Install and build dependencies + run: | + npm cache clean --force + npm install + npm install --prefix server + npm install --prefix frontend + npm run build:plugins + + - name: Set up environment variables + run: | + echo "TOOLJET_HOST=http://localhost:8082" >> .env + echo "LOCKBOX_MASTER_KEY=cd97331a419c09387bef49787f7da8d2a81d30733f0de6bed23ad8356d2068b2" >> .env + echo "SECRET_KEY_BASE=7073b9a35a15dd20914ae17e36a693093f25b74b96517a5fec461fc901c51e011cd142c731bee48c5081ec8bac321c1f259ef097ef2a16f25df17a3798c03426" >> .env + echo "PG_DB=tooljet_development" >> .env + echo "PG_USER=postgres" >> .env + echo "PG_HOST=localhost" >> .env + echo "PG_PASS=postgres" >> .env + echo "PG_PORT=5432" >> .env + echo "ENABLE_TOOLJET_DB=true" >> .env + echo "TOOLJET_DB=tooljet" >> .env + echo "TOOLJET_DB_USER=postgres" >> .env + echo "TOOLJET_DB_HOST=localhost" >> .env + echo "TOOLJET_DB_PASS=postgres" >> .env + echo "PGRST_JWT_SECRET=r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj" >> .env + echo "PGRST_HOST=localhost:3001" >> .env + echo "SSO_GIT_OAUTH2_CLIENT_ID=dummy" >> .env + echo "SSO_GIT_OAUTH2_CLIENT_SECRET=dummy" >> .env + echo "SSO_GIT_OAUTH2_HOST=dummy" >> .env + echo "SSO_GOOGLE_OAUTH2_CLIENT_ID=dummy" >> .env + + - name: Set up database + run: | + npm run --prefix server db:create + npm run --prefix server db:reset + npm run --prefix server db:seed + + - name: sleep 5 + run: sleep 5 + + - name: Run PostgREST Docker Container + run: | + sudo docker run -d --name postgrest --network tooljet -p 3001:3000 \ + -e PGRST_DB_URI="postgres://postgres:postgres@postgres:5432/tooljet" -e PGRST_DB_ANON_ROLE="postgres" -e PGRST_JWT_SECRET="r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj" \ + postgrest/postgrest:v10.1.1.20221215 + + - name: Run plugins compilation in watch mode + run: cd plugins && npm start & + + - name: Run the server + run: cd server && npm run start:dev & + + - name: Run the client + run: cd frontend && npm start & + + - name: Wait for the server to be ready + run: | + timeout 1500 bash -c ' + until curl --silent --fail http://localhost:8082; do + sleep 5 + done' + + - name: docker logs + run: sudo docker logs postgrest + + - name: Create Cypress environment file + id: create-json + uses: jsdaniell/create-json@1.1.2 + with: + name: "cypress.env.json" + json: ${{ secrets.CYPRESS_SECRETS }} + dir: "./cypress-tests" + + - name: Platform + uses: cypress-io/github-action@v5 + with: + working-directory: ./cypress-tests + config: "baseUrl=http://localhost:8082" + config-file: cypress-workspace.config.js + + - name: Capture Screenshots + uses: actions/upload-artifact@v3 + if: always() + with: + name: screenshots + path: cypress-tests/cypress/screenshots + + Cypress-Platform-subpath: + runs-on: ubuntu-22.04 + + if: ${{ github.event.action == 'labeled' && github.event.label.name == 'run-cypress-workspace-subpath' }} + + steps: + - 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: Build docker image + run: docker buildx build --platform=linux/amd64 -f docker/production.Dockerfile . -t tooljet/tj-osv:cypress + + - name: Set up environment variables + run: | + echo "TOOLJET_HOST=http://localhost:3000" >> .env + echo "LOCKBOX_MASTER_KEY=cd97331a419c09387bef49787f7da8d2a81d30733f0de6bed23ad8356d2068b2" >> .env + echo "SECRET_KEY_BASE=7073b9a35a15dd20914ae17e36a693093f25b74b96517a5fec461fc901c51e011cd142c731bee48c5081ec8bac321c1f259ef097ef2a16f25df17a3798c03426" >> .env + echo "PG_DB=tooljet_development" >> .env + echo "PG_USER=postgres" >> .env + echo "PG_HOST=postgres" >> .env + echo "PG_PASS=postgres" >> .env + echo "PG_PORT=5432" >> .env + echo "ENABLE_TOOLJET_DB=true" >> .env + echo "TOOLJET_DB=tooljet_db" >> .env + echo "TOOLJET_DB_USER=postgres" >> .env + echo "TOOLJET_DB_HOST=postgres" >> .env + echo "TOOLJET_DB_PASS=postgres" >> .env + echo "PGRST_JWT_SECRET=r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj" >> .env + echo "PGRST_HOST=postgrest" >> .env + echo "PGRST_DB_URI=postgres://postgres:postgres@postgres/tooljet_db" >> .env + echo "SSO_GIT_OAUTH2_CLIENT_ID=dummy" >> .env + echo "SSO_GIT_OAUTH2_CLIENT_SECRET=dummy" >> .env + echo "SSO_GIT_OAUTH2_HOST=dummy" >> .env + echo "SSO_GOOGLE_OAUTH2_CLIENT_ID=dummy" >> .env + echo "SUB_PATH=/apps/tooljet/" >> .env + echo "NODE_ENV=production" >> .env + echo "SERVE_CLIENT=true" >> .env + + - name: Pulling the docker-compose file + run: curl -LO https://tooljet-test.s3.us-west-1.amazonaws.com/docker-compose.yaml && mkdir postgres_data + + - name: Run docker-compose file + run: docker-compose up -d + + - name: Checking containers + run: docker ps -a + + - name: docker logs + run: sudo docker logs Tooljet-app + + - name: Wait for the server to be ready + run: | + timeout 1500 bash -c ' + until curl --silent --fail http://localhost:80/apps/tooljet/; do + sleep 5 + done' + + - name: Create Cypress environment file + id: create-json + uses: jsdaniell/create-json@1.1.2 + with: + name: "cypress.env.json" + json: ${{ secrets.CYPRESS_SECRETS }} + dir: "./cypress-tests" + + - name: Platform-subpath + uses: cypress-io/github-action@v5 + with: + working-directory: ./cypress-tests + config: "baseUrl=http://localhost:80/apps/tooljet/" + config-file: cypress-workspace.config.js + + - name: Capture Screenshots + uses: actions/upload-artifact@v3 + if: always() + with: + name: screenshots + path: cypress-tests/cypress/screenshots diff --git a/.github/workflows/render-preview-deploy-pro.yml b/.github/workflows/render-preview-deploy-pro.yml deleted file mode 100644 index 5ae9cf06b2..0000000000 --- a/.github/workflows/render-preview-deploy-pro.yml +++ /dev/null @@ -1,351 +0,0 @@ -name: Render cypress app deploy -on: - pull_request_target: - types: [labeled, unlabeled, closed] -env: - PR_NUMBER: ${{ github.event.number }} - BRANCH_NAME: ${{ github.head_ref || github.ref_name }} - -permissions: - pull-requests: write - issues: write - -jobs: - create-review-cypress-app: - if: ${{ github.event.action == 'labeled' && github.event.label.name == 'create-review-cypress-app' }} - runs-on: ubuntu-latest - - steps: - - name: Create deployment - id: create-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 PR CYPRESS #${{ env.PR_NUMBER }}", - "notifyOnFail": "default", - "ownerId": "tea-caeo4bj19n072h3dddc0", - "repo": "${{ github.event.pull_request.head.repo.git_url }}", - "slug": "tooljet-pr-cypress-${{ 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 }}_cypress" - }, - { - "key": "ENABLE_TOOLJET_DB", - "value": "true" - }, - { - "key": "TOOLJET_DB", - "value": "${{ env.PR_NUMBER }}_cypress" - }, - { - "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_URI", - "value": "postgres://${{ secrets.RENDER_PG_USER }}:${{ secrets.RENDER_PG_PASS }}@${{ secrets.RENDER_PG_HOST }}/${{ env.PR_NUMBER }}_cypress" - }, - { - "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-pr-cypress-${{ 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": "ENABLE_MARKETPLACE_FEATURE", - "value": "true" - }, - { - "key": "SSO_GIT_OAUTH2_CLIENT_ID", - "value": "dummy" - }, - { - "key": "SSO_GIT_OAUTH2_CLIENT_SECRET", - "value": "dummy" - }, - { - "key": "SSO_GIT_OAUTH2_HOST", - "value": "dummy" - }, - { - "key": "SSO_GOOGLE_OAUTH2_CLIENT_ID", - "value": "dummy" - } - ], - "serviceDetails": { - "disk": null, - "env": "docker", - "envSpecificDetails": { - "dockerCommand": "", - "dockerContext": "./", - "dockerfilePath": "./docker/preview.Dockerfile" - }, - "healthCheckPath": "/api/health", - "numInstances": 1, - "openPorts": [{ - "port": 80, - "protocol": "TCP" - }], - "plan": "pro", - "pullRequestPreviewsEnabled": "no", - "region": "oregon", - "url": "https://tooljet-pr-cypress-${{ 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: 'Deployment: https://tooljet-pr-cypress-${{ 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-review-cypress-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-review-cypress-app'] - }) - - destroy-review-cypress-app: - if: ${{ (github.event.action == 'labeled' && github.event.label.name == 'destroy-review-cypress-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%20CYPRESS%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-cypress-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-cypress-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-cypress-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 database - env: - PGHOST: ${{ secrets.RENDER_DS_PG_HOST }} - PGPORT: 5432 - PGUSER: ${{ secrets.RENDER_DS_PG_USER }} - PGDATABASE: ${{ env.PR_NUMBER }}_cypress - run: | - PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGDATABASE\" ;" - - suspend-review-cypress-app: - if: ${{ github.event.action == 'labeled' && github.event.label.name == 'suspend-review-cypress-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%20CYPRESS%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-review-cypress-app' - }) - } catch (e) { - console.log(e) - } - - resume-review-cypress-app: - if: ${{ github.event.action == 'unlabeled' && github.event.label.name == 'suspend-review-cypress-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%20CYPRESS%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-review-cypress-app'] - }) - - try { - await github.rest.issues.removeLabel({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - name: 'suspend-review-cypress-app' - }) - } catch (e) { - console.log(e) - } diff --git a/.github/workflows/render-suspend-labeler-pro.yml b/.github/workflows/render-suspend-labeler-pro.yml deleted file mode 100644 index b35323aa5d..0000000000 --- a/.github/workflows/render-suspend-labeler-pro.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Label for stale render cypress app deploy -on: - workflow_dispatch: - schedule: - - cron: '0 0 * * *' - -permissions: - issues: write - -jobs: - label-stale-deploys: - runs-on: ubuntu-latest - permissions: - pull-requests: write - steps: - - uses: akshaysasidrn/stale-label-fetch@v1.1 - id: stale-label - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - stale-label: 'active-review-cypress-app' - stale-time: '86400' - type: 'pull_request' - - name: Get stale numbers - run: echo "Matched PR numbers - ${{ steps.stale-label.outputs.stale-numbers }}" - - name: Add suspend label - uses: actions/github-script@v6 - env: - STALE_NUMBERS: ${{ steps.stale-label.outputs.stale-numbers }} - with: - github-token: ${{ secrets.TJ_BOT_PAT }} - script: | - if (!process.env.STALE_NUMBERS) return - - const prNumbers = process.env.STALE_NUMBERS.split(",") - - console.log(`Adding suspend labels for: ${prNumbers}`) - - for (const prNumber of prNumbers) { - github.rest.issues.addLabels({ - issue_number: prNumber, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ['suspend-review-cypress-app'] - }) - }