Skip to content

Appsmith CI run limited Tests Workflow #86

Appsmith CI run limited Tests Workflow

Appsmith CI run limited Tests Workflow #86

Workflow file for this run

# name: Appsmith CI run limited Tests Workflow
# on:
# # This line enables manual triggering of this workflow.
# workflow_dispatch:
# inputs:
# pr:
# description: "PR number"
# required: false
# type: number
# default: 0
# previous-workflow-run-id:
# description: "Workflow ID (To Download cicontainer)"
# required: false
# type: number
# default: 0
# matrix:
# description: "Matrix jobs"
# required: false
# type: string
# default: "[0, 1, 2]"
# workflow_call:
# inputs:
# pr:
# description: "This is the PR number in case the workflow is being called in a pull request"
# required: false
# type: number
# previous-workflow-run-id:
# description: "This is the PR number in case the workflow is being called in a pull request"
# required: false
# type: number
# default: 0
# matrix:
# description: "This is the matrix job number"
# required: false
# type: string
# default: "[0, 1, 2]"
# jobs:
# ci-test-limited:
# runs-on: ubuntu-latest
# #timeout-minutes: 50
# if: |
# github.event.pull_request.head.repo.full_name == github.repository ||
# github.event_name == 'push' ||
# github.event_name == 'workflow_dispatch' ||
# github.event_name == 'repository_dispatch'
# defaults:
# run:
# shell: bash
# strategy:
# fail-fast: false
# matrix:
# job: ${{ fromJson(inputs.matrix) }}
# # Service containers to run with this job. Required for running tests
# services:
# # Label used to access the service container
# redis:
# # Docker Hub image for Redis
# image: redis
# ports:
# # Opens tcp port 6379 on the host and service container
# - 6379:6379
# mongo:
# image: mongo
# ports:
# - 27017:27017
# steps:
# - name: Set up Depot CLI
# uses: depot/setup-action@v1
# - name: Login to DockerHub
# uses: docker/login-action@v2
# with:
# username: ${{ secrets.DOCKER_HUB_USERNAME }}
# password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
# # Check out merge commit
# - name: Fork based /ok-to-test checkout
# if: inputs.pr != 0
# uses: actions/checkout@v3
# with:
# fetch-depth: 0
# ref: "refs/pull/${{ inputs.pr }}/merge"
# # Checkout the code in the current branch in case the workflow is called because of a branch push event
# - name: Checkout the head commit of the branch
# if: inputs.pr == 0
# uses: actions/checkout@v3
# with:
# fetch-depth: 0
# # Timestamp will be used to create cache key
# - id: timestamp
# run: echo "timestamp=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_OUTPUT
# # In case this is second attempt try restoring status of the prior attempt from cache
# - name: Restore the previous run result
# id: cache-appsmith
# uses: martijnhols/[email protected]
# with:
# path: |
# ~/run_result
# key: ${{ github.run_id }}-${{ github.job }}-${{ matrix.job }}
# restore-keys: |
# ${{ github.run_id }}-${{ github.job }}-${{ matrix.job }}
# - name: Get the previous run result
# if: steps.cache-appsmith.outputs.cache-hit == 'true'
# id: run_result
# run: |
# run_result_env=$(cat ~/run_result)
# echo "::set-output name=run_result::$run_result_env"
# # In case this is second attempt try restoring failed tests
# - if: steps.run_result.outputs.run_result == 'failedtest'
# run: echo "failed_spec_artifact=failed-spec-ci-$((${{github.run_attempt}}-1))" >> $GITHUB_ENV
# - name: Restore the previous failed combine result
# if: steps.run_result.outputs.run_result == 'failedtest'
# uses: actions/download-artifact@v3
# with:
# name: ${{ env.failed_spec_artifact }}
# path: ~/failed_spec_ci
# # failed_spec_env will contain list of all failed specs
# # We are using environment variable instead of regular to support multiline
# - name: Get failed_spec
# id: failed_spec
# if: steps.run_result.outputs.run_result == 'failedtest'
# working-directory: app/client
# run: |
# failed_spec_env=""
# while IFS= read -r line || [ -n "$line" ]; do
# file_path=$(echo "$line" | awk -F'/' '{print $(NF-1)"/"$NF}')
# spec_name=$(echo "$file_path" | awk -F'/' '{print $NF}')
# failed_spec=$(find . -name "$spec_name" | sed 's|./||')
# if [ "$(echo "$failed_spec" | wc -l)" -eq 1 ]; then
# failed_spec_env="$failed_spec_env,$failed_spec"
# else
# for file in $failed_spec; do
# new_file_path=$(echo "$file" | awk -F'/' '{print $(NF-1)"/"$NF}')
# if [ "$new_file_path" == "$file_path" ]; then
# failed_spec_env="$failed_spec_env,$file"
# fi
# done
# fi
# done < ~/failed_spec_ci/failed_spec_ci-${{ matrix.job }}
# failed_spec_env=${failed_spec_env#,}
# echo "failed_spec_env=$failed_spec_env" >> $GITHUB_ENV
# # Get specs to run
# - name: Get specs to run
# if: steps.run_result.outputs.run_result != 'success'
# run: |
# specs_to_run=""
# while IFS= read -r line
# do
# if [[ $line =~ ^#|^\/\/ ]]; then
# continue
# else
# specs_to_run="$specs_to_run,$line"
# fi
# done < app/client/cypress/limited-tests.txt
# specs_to_run=${specs_to_run#,}
# echo "specs_to_run=$specs_to_run" >> $GITHUB_ENV
# # In case of run-id provided download the artifact from the previous run
# - name: Download Docker image artifact
# if: inputs.previous-workflow-run-id != 0
# uses: dawidd6/action-download-artifact@v2
# with:
# name: cicontainer
# run_id: ${{ inputs.previous-workflow-run-id }}
# # In case of run-id is 0 download the artifact from the current run
# - name: Download Docker image artifact
# if: inputs.previous-workflow-run-id == 0
# uses: actions/download-artifact@v3
# with:
# name: cicontainer
# - name: Load Docker image from tar file
# run: |
# gunzip cicontainer.tar.gz
# docker load -i cicontainer.tar
# - name: Create folder
# if: steps.run_result.outputs.run_result != 'success'
# working-directory: "."
# run: |
# mkdir -p cicontainerlocal/stacks/configuration/
# - name: Run Appsmith & TED docker image
# if: steps.run_result.outputs.run_result != 'success'
# working-directory: "."
# run: |
# sudo /etc/init.d/ssh stop ;
# mkdir -p ~/git-server/keys
# mkdir -p ~/git-server/repos
# docker run --name test-event-driver -d -p 22:22 -p 5001:5001 -p 3306:3306 \
# -p 5432:5432 -p 28017:27017 -p 25:25 -p 5000:5000 -p 3001:3000 -p 6001:6001 --privileged --pid=host --ipc=host --volume /:/host -v ~/git-server/keys:/git-server/keys \
# -v ~/git-server/repos:/git-server/repos appsmith/test-event-driver:latest
# docker run --name cloud-services -d -p 8000:80 -p 8090:8090 \
# --privileged --pid=host --ipc=host --add-host=host.docker.internal:host-gateway\
# -e APPSMITH_CLOUD_SERVICES_MONGODB_URI=mongodb://host.docker.internal:27017 \
# -e APPSMITH_CLOUD_SERVICES_MONGODB_DATABASE=cs \
# -e APPSMITH_CLOUD_SERVICES_MONGODB_AUTH_DATABASE=admin \
# -e APPSMITH_REDIS_URL=redis://host.docker.internal:6379/ \
# -e APPSMITH_APPS_API_KEY=dummy-api-key \
# -e APPSMITH_REMOTE_API_KEY=dummy-api-key \
# -e APPSMITH_GITHUB_API_KEY=dummy-appsmith-gh-api-key \
# -e APPSMITH_JWT_SECRET=appsmith-cloud-services-jwt-secret-dummy-key \
# -e APPSMITH_ENCRYPTION_SALT=encryption-salt \
# -e APPSMITH_ENCRYPTION_PASSWORD=encryption-password \
# -e APPSMITH_CLOUD_SERVICES_URL=https://cs-dev.appsmith.com \
# -e APPSMITH_CUSTOMER_PORTAL_URL=https://dev.appsmith.com \
# -e APPSMITH_CLOUD_SERVICES_BASE_URL=https://cs-dev.appsmith.com \
# -e APPSMITH_CLOUD_SERVER_BASE_URL=https://release.app.appsmith.com \
# -e AUTH0_ISSUER_URL=https://login.release-customer.appsmith.com/ \
# -e AUTH0_CLIENT_ID=dummy-client-id \
# -e AUTH0_CLIENT_SECRET=dummy-secret-id \
# -e AUTH0_AUDIENCE_URL=https://login.local-customer.appsmith.com/ \
# -e CLOUDSERVICES_URL=cs-dev.appsmith.com \
# -e CUSTOMER_URL=dev.appsmith.com \
# -e [email protected] \
# -e ENTERPRISE_USER_PASSWORD=ent_user_password \
# -e [email protected] \
# -e ENTERPRISE_ADMIN_PASSWORD=ent_admin_password \
# -e FLAGSMITH_URL=http://host.docker.internal:5001/flagsmith \
# -e FLAGSMITH_SERVER_KEY=dummykey \
# -e FLAGSMITH_SERVER_KEY_BUSINESS_FEATURES=dummykeybusinessfeatures \
# appsmith/cloud-services:release
# cd cicontainerlocal
# docker run -d --name appsmith -p 80:80 -p 9001:9001 \
# -v "$PWD/stacks:/appsmith-stacks" \
# -e APPSMITH_DISABLE_TELEMETRY=true \
# -e APPSMITH_INTERCOM_APP_ID=DUMMY_VALUE \
# -e APPSMITH_CLOUD_SERVICES_BASE_URL=http://host.docker.internal:5001 \
# --add-host=host.docker.internal:host-gateway --add-host=api.segment.io:host-gateway --add-host=t.appsmith.com:host-gateway \
# cicontainer
# - name: Use Node.js
# uses: actions/setup-node@v3
# with:
# node-version-file: app/client/package.json
# # actions/setup-node@v3 doesn’t work properly with Yarn 3
# # when the project lives in a subdirectory: https://github.com/actions/setup-node/issues/488
# # Restoring the cache manually instead
# - name: Restore Yarn cache
# if: steps.run_result.outputs.run_result != 'success'
# uses: actions/cache@v3
# with:
# path: app/client/.yarn/cache
# key: v1-yarn3-${{ hashFiles('app/client/yarn.lock') }}
# restore-keys: |
# v1-yarn3-
# # Install all the dependencies
# - name: Install dependencies
# working-directory: app/client
# run: |
# yarn install --immutable
# - name: Setting up the cypress tests
# if: steps.run_result.outputs.run_result != 'success'
# shell: bash
# env:
# APPSMITH_SSL_CERTIFICATE: ${{ secrets.APPSMITH_SSL_CERTIFICATE }}
# APPSMITH_SSL_KEY: ${{ secrets.APPSMITH_SSL_KEY }}
# CYPRESS_URL: ${{ secrets.CYPRESS_URL }}
# CYPRESS_USERNAME: ${{ secrets.CYPRESS_USERNAME }}
# CYPRESS_PASSWORD: ${{ secrets.CYPRESS_PASSWORD }}
# CYPRESS_TESTUSERNAME1: ${{ secrets.CYPRESS_TESTUSERNAME1 }}
# CYPRESS_TESTPASSWORD1: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
# CYPRESS_TESTUSERNAME2: ${{ secrets.CYPRESS_TESTUSERNAME2 }}
# CYPRESS_TESTPASSWORD2: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
# CYPRESS_TESTUSERNAME3: ${{ secrets.CYPRESS_TESTUSERNAME3 }}
# CYPRESS_TESTPASSWORD3: ${{ secrets.CYPRESS_TESTPASSWORD3 }}
# CYPRESS_TESTUSERNAME4: ${{ secrets.CYPRESS_TESTUSERNAME4 }}
# CYPRESS_TESTPASSWORD4: ${{ secrets.CYPRESS_TESTPASSWORD4 }}
# CYPRESS_S3_ACCESS_KEY: ${{ secrets.CYPRESS_S3_ACCESS_KEY }}
# CYPRESS_S3_SECRET_KEY: ${{ secrets.CYPRESS_S3_SECRET_KEY }}
# CYPRESS_GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
# CYPRESS_AIRTABLE_BEARER: ${{ secrets.AIRTABLE_BEARER }}
# CYPRESS_ORACLE_HOST: ${{ secrets.ORACLE_HOST }}
# CYPRESS_ORACLE_SERVICE: ${{ secrets.ORACLE_SERVICE }}
# CYPRESS_ORACLE_USERNAME: ${{ secrets.ORACLE_USERNAME }}
# CYPRESS_ORACLE_PASSWORD: ${{ secrets.ORACLE_PASSWORD }}
# CYPRESS_FIRESTORE_PRIVATE_KEY: ${{ secrets.FIRESTORE_PRIVATE_KEY }}
# CYPRESS_GITHUB_PERSONAL_ACCESS_TOKEN: ${{ secrets.CYPRESS_GITHUB_PERSONAL_ACCESS_TOKEN }}
# CYPRESS_TEST_GITHUB_USER_NAME: ${{ secrets.CYPRESS_TEST_GITHUB_USER_NAME }}
# CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_ID: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_ID }}
# CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET }}
# CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_ID: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_ID }}
# CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET }}
# CYPRESS_OAUTH_SAML_EMAIL: ${{ secrets.CYPRESS_OAUTH_SAML_EMAIL }}
# CYPRESS_OAUTH_SAML_ENTITY_ID: ${{ secrets.CYPRESS_OAUTH_SAML_ENTITY_ID }}
# CYPRESS_OAUTH_SAML_METADATA_URL: ${{ secrets.CYPRESS_OAUTH_SAML_METADATA_URL }}
# CYPRESS_OAUTH_SAML_METADATA_XML: ${{ secrets.CYPRESS_OAUTH_SAML_METADATA_XML }}
# CYPRESS_OAUTH_SAML_PUB_CERT: ${{ secrets.CYPRESS_OAUTH_SAML_PUB_CERT }}
# CYPRESS_OAUTH_SAML_SSO_URL: ${{ secrets.CYPRESS_OAUTH_SAML_SSO_URL }}
# CYPRESS_OAUTH_SAML_REDIRECT_URL: ${{ secrets.CYPRESS_OAUTH_SAML_REDIRECT_URL }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_ID: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_ID }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_SECRET: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_SECRET }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_AUTH_URL: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_AUTH_URL }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_TOKEN_URL: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_TOKEN_URL }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_USER_INFO: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_USER_INFO }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_JWKS_URL: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_JWKS_URL }}
# CYPRESS_EXCLUDE_TAGS: "airgap"
# CYPRESS_AIRGAPPED: false
# APPSMITH_DISABLE_TELEMETRY: true
# APPSMITH_GOOGLE_MAPS_API_KEY: ${{ secrets.APPSMITH_GOOGLE_MAPS_API_KEY }}
# POSTGRES_PASSWORD: postgres
# CYPRESS_VERIFY_TIMEOUT: 100000
# run: |
# cd app/client
# chmod a+x ./cypress/setup-test-ci.sh
# ./cypress/setup-test-ci.sh
# - uses: browser-actions/setup-chrome@latest
# with:
# chrome-version: stable
# - run: |
# echo "BROWSER_PATH=$(which chrome)" >> $GITHUB_ENV
# # - name: Set Pull Request Title
# # env:
# # EVENT_COMMITS: ${{ toJson(github.event.commits[0].message) }}
# # run: |
# # echo "test: Cypress (#24586)\n\n## Description\r\n- This PR adds the No Error toast to NavigateBacktoEditor() which\r\nsometimes results in Edit page not being load in CI runs" | awk -F '\\\\n' '{sub(/.*#/, "#", $1); sub(/).*/, "", $1); print $1}'
# - name: Save Git values
# # pass env variables from this step to other steps
# # using GitHub Actions environment file
# # https://docs.github.com/en/actions/learn-github-actions/workflow-commands-for-github-actions#environment-files
# run: |
# echo COMMIT_INFO_BRANCH=$(git rev-parse --abbrev-ref HEAD) >> $GITHUB_ENV
# echo COMMIT_INFO_MESSAGE=LimitedTests run on PR# ${{ inputs.pr }} >> $GITHUB_ENV
# echo COMMIT_INFO_EMAIL=$(git show -s --pretty=%ae) >> $GITHUB_ENV
# echo COMMIT_INFO_AUTHOR=$(git show -s --pretty=%an) >> $GITHUB_ENV
# echo COMMIT_INFO_SHA=$(git show -s --pretty=%H) >> $GITHUB_ENV
# echo COMMIT_INFO_TIMESTAMP=$(git show -s --pretty=%ct) >> $GITHUB_ENV
# echo COMMIT_INFO_REMOTE=$(git config --get remote.origin.url) >> $GITHUB_ENV
# # delete the .git folder afterwords to use the environment values
# rm -rf .git
# - name: Show Git values
# run: |
# echo Branch $COMMIT_INFO_BRANCH
# echo Message $COMMIT_INFO_MESSAGE
# echo Email $COMMIT_INFO_EMAIL
# echo Author $COMMIT_INFO_AUTHOR
# echo SHA $COMMIT_INFO_SHA
# echo Timestamp $COMMIT_INFO_TIMESTAMP
# echo Remote $COMMIT_INFO_REMOTE
# - name: Set Commit Message
# env:
# EVENT_COMMITS: ${{ toJson(github.event.commits[0].message) }}
# run: |
# if [[ ${{ inputs.pr }} -ne 0 && ${{github.event_name}} == 'repository_dispatch' ]]; then
# echo "COMMIT_INFO_MESSAGE=${{ env.COMMIT_INFO_MESSAGE }}" >> $GITHUB_ENV
# elif [[ ${{ inputs.pr }} -ne 0 && ${{github.event_name}} == 'workflow_dispatch' ]]; then
# echo "COMMIT_INFO_MESSAGE=Workflow run on PR# ${{ inputs.pr }}" >> $GITHUB_ENV
# else
# if [[ '${{env.EVENT_COMMITS}}' == 'null' ]]; then
# echo "COMMIT_INFO_MESSAGE=${{ github.event_name }} by ${{ env.COMMIT_INFO_AUTHOR }}" >> $GITHUB_ENV
# else
# echo "COMMIT_INFO_MESSAGE=$(echo \"${{ env.EVENT_COMMITS }}\" | awk -F '\\\\n' '{print $1}' | sed 's/^\"//')" >> $GITHUB_ENV
# fi
# fi
# - name: Run the cypress test
# id: cypress_test
# if: steps.run_result.outputs.run_result != 'success' && steps.run_result.outputs.run_result != 'failedtest'
# uses: cypress-io/github-action@v5
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
# CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
# CYPRESS_USERNAME: ${{ secrets.CYPRESS_USERNAME }}
# CYPRESS_PASSWORD: ${{ secrets.CYPRESS_PASSWORD }}
# CYPRESS_TESTUSERNAME1: ${{ secrets.CYPRESS_TESTUSERNAME1 }}
# CYPRESS_TESTPASSWORD1: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
# CYPRESS_TESTUSERNAME2: ${{ secrets.CYPRESS_TESTUSERNAME2 }}
# CYPRESS_TESTPASSWORD2: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
# CYPRESS_TESTUSERNAME3: ${{ secrets.CYPRESS_TESTUSERNAME3 }}
# CYPRESS_TESTPASSWORD3: ${{ secrets.CYPRESS_TESTPASSWORD3 }}
# CYPRESS_TESTUSERNAME4: ${{ secrets.CYPRESS_TESTUSERNAME4 }}
# CYPRESS_TESTPASSWORD4: ${{ secrets.CYPRESS_TESTPASSWORD4 }}
# CYPRESS_S3_ACCESS_KEY: ${{ secrets.CYPRESS_S3_ACCESS_KEY }}
# CYPRESS_S3_SECRET_KEY: ${{ secrets.CYPRESS_S3_SECRET_KEY }}
# CYPRESS_GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
# CYPRESS_AIRTABLE_BEARER: ${{ secrets.AIRTABLE_BEARER }}
# CYPRESS_ORACLE_HOST: ${{ secrets.ORACLE_HOST }}
# CYPRESS_ORACLE_SERVICE: ${{ secrets.ORACLE_SERVICE }}
# CYPRESS_ORACLE_USERNAME: ${{ secrets.ORACLE_USERNAME }}
# CYPRESS_ORACLE_PASSWORD: ${{ secrets.ORACLE_PASSWORD }}
# CYPRESS_FIRESTORE_PRIVATE_KEY: ${{ secrets.FIRESTORE_PRIVATE_KEY }}
# CYPRESS_GITHUB_PERSONAL_ACCESS_TOKEN: ${{ secrets.CYPRESS_GITHUB_PERSONAL_ACCESS_TOKEN }}
# CYPRESS_TEST_GITHUB_USER_NAME: ${{ secrets.CYPRESS_TEST_GITHUB_USER_NAME }}
# CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_ID: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_ID }}
# CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET }}
# CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_ID: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_ID }}
# CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET }}
# CYPRESS_OAUTH_SAML_EMAIL: ${{ secrets.CYPRESS_OAUTH_SAML_EMAIL }}
# CYPRESS_OAUTH_SAML_ENTITY_ID: ${{ secrets.CYPRESS_OAUTH_SAML_ENTITY_ID }}
# CYPRESS_OAUTH_SAML_METADATA_URL: ${{ secrets.CYPRESS_OAUTH_SAML_METADATA_URL }}
# CYPRESS_OAUTH_SAML_METADATA_XML: ${{ secrets.CYPRESS_OAUTH_SAML_METADATA_XML }}
# CYPRESS_OAUTH_SAML_PUB_CERT: ${{ secrets.CYPRESS_OAUTH_SAML_PUB_CERT }}
# CYPRESS_OAUTH_SAML_SSO_URL: ${{ secrets.CYPRESS_OAUTH_SAML_SSO_URL }}
# CYPRESS_OAUTH_SAML_REDIRECT_URL: ${{ secrets.CYPRESS_OAUTH_SAML_REDIRECT_URL }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_ID: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_ID }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_SECRET: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_SECRET }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_AUTH_URL: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_AUTH_URL }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_TOKEN_URL: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_TOKEN_URL }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_USER_INFO: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_USER_INFO }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_JWKS_URL: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_JWKS_URL }}
# CYPRESS_EXCLUDE_TAGS: "airgap"
# CYPRESS_AIRGAPPED: false
# APPSMITH_DISABLE_TELEMETRY: true
# APPSMITH_GOOGLE_MAPS_API_KEY: ${{ secrets.APPSMITH_GOOGLE_MAPS_API_KEY }}
# COMMIT_INFO_MESSAGE: ${{ env.COMMIT_INFO_MESSAGE }}
# CYPRESS_VERIFY_TIMEOUT: 100000
# RUNID: ${{ github.run_id }}
# ATTEMPT_NUMBER: ${{ github.run_attempt }}
# REPOSITORY: ${{ github.repository }}
# COMMITTER: ${{ env.COMMIT_INFO_AUTHOR }}
# TAG: ${{ github.event_name }}
# BRANCH: ${{ env.COMMIT_INFO_BRANCH }}
# TOTAL_RUNNERS: ${{ strategy.job-total }}
# THIS_RUNNER: ${{ strategy.job-index }}
# CYPRESS_SPECS: ${{ env.specs_to_run }}
# CYPRESS_DB_USER: ${{ secrets.CYPRESS_DB_USER }}
# CYPRESS_DB_HOST: ${{ secrets.CYPRESS_DB_HOST }}
# CYPRESS_DB_NAME: ${{ secrets.CYPRESS_DB_NAME }}
# CYPRESS_DB_PWD: ${{ secrets.CYPRESS_DB_PWD }}
# CYPRESS_S3_ACCESS: ${{ secrets.CYPRESS_S3_ACCESS }}
# CYPRESS_S3_SECRET: ${{ secrets.CYPRESS_S3_SECRET }}
# with:
# browser: ${{ env.BROWSER_PATH }}
# install: false
# config-file: cypress_ci_custom.config.ts
# spec: ${{ env.specs_to_run }}
# working-directory: app/client
# env: "NODE_ENV=development"
# # In case of second attempt only run failed specs
# - name: Run the cypress test with failed tests
# id: cypress_test_failedtest
# if: steps.run_result.outputs.run_result == 'failedtest' && env.failed_spec_env != ''
# uses: cypress-io/github-action@v5
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
# CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
# CYPRESS_USERNAME: ${{ secrets.CYPRESS_USERNAME }}
# CYPRESS_PASSWORD: ${{ secrets.CYPRESS_PASSWORD }}
# CYPRESS_TESTUSERNAME1: ${{ secrets.CYPRESS_TESTUSERNAME1 }}
# CYPRESS_TESTPASSWORD1: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
# CYPRESS_TESTUSERNAME2: ${{ secrets.CYPRESS_TESTUSERNAME2 }}
# CYPRESS_TESTPASSWORD2: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
# CYPRESS_TESTUSERNAME3: ${{ secrets.CYPRESS_TESTUSERNAME3 }}
# CYPRESS_TESTPASSWORD3: ${{ secrets.CYPRESS_TESTPASSWORD3 }}
# CYPRESS_TESTUSERNAME4: ${{ secrets.CYPRESS_TESTUSERNAME4 }}
# CYPRESS_TESTPASSWORD4: ${{ secrets.CYPRESS_TESTPASSWORD4 }}
# CYPRESS_S3_ACCESS_KEY: ${{ secrets.CYPRESS_S3_ACCESS_KEY }}
# CYPRESS_S3_SECRET_KEY: ${{ secrets.CYPRESS_S3_SECRET_KEY }}
# CYPRESS_GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
# CYPRESS_AIRTABLE_BEARER: ${{ secrets.AIRTABLE_BEARER }}
# CYPRESS_ORACLE_HOST: ${{ secrets.ORACLE_HOST }}
# CYPRESS_ORACLE_SERVICE: ${{ secrets.ORACLE_SERVICE }}
# CYPRESS_ORACLE_USERNAME: ${{ secrets.ORACLE_USERNAME }}
# CYPRESS_ORACLE_PASSWORD: ${{ secrets.ORACLE_PASSWORD }}
# CYPRESS_FIRESTORE_PRIVATE_KEY: ${{ secrets.FIRESTORE_PRIVATE_KEY }}
# CYPRESS_GITHUB_PERSONAL_ACCESS_TOKEN: ${{ secrets.CYPRESS_GITHUB_PERSONAL_ACCESS_TOKEN }}
# CYPRESS_TEST_GITHUB_USER_NAME: ${{ secrets.CYPRESS_TEST_GITHUB_USER_NAME }}
# CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_ID: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_ID }}
# CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET }}
# CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_ID: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_ID }}
# CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET }}
# CYPRESS_OAUTH_SAML_EMAIL: ${{ secrets.CYPRESS_OAUTH_SAML_EMAIL }}
# CYPRESS_OAUTH_SAML_ENTITY_ID: ${{ secrets.CYPRESS_OAUTH_SAML_ENTITY_ID }}
# CYPRESS_OAUTH_SAML_METADATA_URL: ${{ secrets.CYPRESS_OAUTH_SAML_METADATA_URL }}
# CYPRESS_OAUTH_SAML_METADATA_XML: ${{ secrets.CYPRESS_OAUTH_SAML_METADATA_XML }}
# CYPRESS_OAUTH_SAML_PUB_CERT: ${{ secrets.CYPRESS_OAUTH_SAML_PUB_CERT }}
# CYPRESS_OAUTH_SAML_SSO_URL: ${{ secrets.CYPRESS_OAUTH_SAML_SSO_URL }}
# CYPRESS_OAUTH_SAML_REDIRECT_URL: ${{ secrets.CYPRESS_OAUTH_SAML_REDIRECT_URL }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_ID: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_ID }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_SECRET: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_CLIENT_SECRET }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_AUTH_URL: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_AUTH_URL }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_TOKEN_URL: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_TOKEN_URL }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_USER_INFO: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_USER_INFO }}
# CYPRESS_APPSMITH_OAUTH2_OIDC_JWKS_URL: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_OIDC_JWKS_URL }}
# CYPRESS_EXCLUDE_TAGS: "airgap"
# CYPRESS_AIRGAPPED: false
# APPSMITH_DISABLE_TELEMETRY: true
# APPSMITH_GOOGLE_MAPS_API_KEY: ${{ secrets.APPSMITH_GOOGLE_MAPS_API_KEY }}
# COMMIT_INFO_MESSAGE: ${{ env.COMMIT_INFO_MESSAGE }}
# CYPRESS_VERIFY_TIMEOUT: 100000
# RUNID: ${{ github.run_id }}
# ATTEMPT_NUMBER: ${{ github.run_attempt }}
# REPOSITORY: ${{ github.repository }}
# COMMITTER: ${{ env.COMMIT_INFO_AUTHOR }}
# TAG: ${{ github.event_name }}
# BRANCH: ${{ env.COMMIT_INFO_BRANCH }}
# TOTAL_RUNNERS: ${{ strategy.job-total }}
# THIS_RUNNER: ${{ strategy.job-index }}
# CYPRESS_SPECS: ${{ env.failed_spec_env }}
# CYPRESS_DB_USER: ${{ secrets.CYPRESS_DB_USER }}
# CYPRESS_DB_HOST: ${{ secrets.CYPRESS_DB_HOST }}
# CYPRESS_DB_NAME: ${{ secrets.CYPRESS_DB_NAME }}
# CYPRESS_DB_PWD: ${{ secrets.CYPRESS_DB_PWD }}
# CYPRESS_S3_ACCESS: ${{ secrets.CYPRESS_S3_ACCESS }}
# CYPRESS_S3_SECRET: ${{ secrets.CYPRESS_S3_SECRET }}
# with:
# browser: ${{ env.BROWSER_PATH }}
# install: false
# config-file: cypress_ci_custom.config.ts
# working-directory: app/client
# env: "NODE_ENV=development"
# - name: Collect CI container logs
# if: failure()
# working-directory: "."
# run: |
# mkdir -p ~/dockerlogs
# docker logs appsmith 2>&1 > ~/dockerlogs/dockerlogs-${{ matrix.job }}.txt
# # Upload docker logs
# - name: Upload failed test list artifact
# if: failure()
# uses: actions/upload-artifact@v3
# with:
# name: dockerlogs
# path: ~/dockerlogs
# - name: Rename reports
# if: failure() && env.failed_spec_env != ''
# run: |
# mkdir -p ~/results
# mv ${{ github.workspace }}/app/client/results ~/results/${{ matrix.job }}
# - name: Upload cypress report
# if: failure() && env.failed_spec_env != ''
# uses: actions/upload-artifact@v3
# with:
# name: results-${{github.run_attempt}}
# path: ~/results
# # Set status = failedtest
# - name: Set fail if there are test failures
# if: failure()
# run: |
# echo "::set-output name=run_result::failedtest"
# echo "failedtest" > ~/run_result
# # Create a directory ~/failed_spec_ci and add a dummy file
# # This will ensure upload and download steps are successful
# - name: Create directory for failed tests
# if: always()
# run: |
# mkdir -p ~/failed_spec_ci-${{github.run_attempt}}
# # add list failed tests to a file
# - name: In case of test failures copy them to a file
# if: failure()
# run: |
# cd ${{ github.workspace }}/app/client/cypress/
# find screenshots -type f \( -iname "*\(attempt 2\).png" -o -iname "*before all hook*" -o -iname "*after all hook*" \) | sed 's/screenshots/cypress\/e2e/g'| sed 's:/[^/]*$::' | sort -u > ~/failed_spec_ci-${{github.run_attempt}}/failed_spec_ci-${{ matrix.job }}
# # Upload failed test list using common path for all matrix job
# - name: Upload failed test list artifact
# if: failure()
# uses: actions/upload-artifact@v3
# with:
# name: failed-spec-ci-${{github.run_attempt}}
# path: ~/failed_spec_ci-${{github.run_attempt}}
# # Force store previous run result to cache
# - name: Store the previous run result
# if: failure()
# uses: martijnhols/actions-cache/save@v3
# with:
# path: |
# ~/run_result
# key: ${{ github.run_id }}-${{ github.job }}-${{ matrix.job }}
# restore-keys: |
# ${{ github.run_id }}-${{ github.job }}-${{ matrix.job }}
# # Upload the log artifact so that it can be used by the test & deploy job in the workflow
# - name: Upload server logs bundle on failure
# uses: actions/upload-artifact@v3
# if: failure()
# with:
# name: server-logs-${{ matrix.job }}
# path: app/server/server-logs.log
# # - name: get cypress url dashboard url
# # id: dashboard_url
# # if: always()
# # run: |
# # if [[ "${{steps.run_result.outputs.run_result }}" != "success" && "${{steps.run_result.outputs.run_result }}" != "failedtest" ]]; then
# # echo "" >> ~/cypress_url
# # elif [[ "${{steps.run_result.outputs.run_result }}" == "failedtest" ]]; then
# # echo "" >> ~/cypress_url
# # fi
# # Force store previous run result to cache
# - name: Store the previous run result
# if: success()
# uses: actions/cache/save@v3
# with:
# path: |
# ~/cypress_url
# key: ${{ github.run_id }}-dashboard-url-${{ github.run_attempt }}
# # Set status = success
# - name: Save the status of the run
# run: |
# echo "::set-output name=run_result::success"
# echo "success" > ~/run_result
name: Appsmith CI run limited Tests Workflow
on:
# This line enables manual triggering of this workflow.
workflow_dispatch:
jobs:
test-script:
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- name: initialize node js
uses: actions/setup-node@v3
with:
node-version: 18
- name: install pg
run: npm install pg
- name: run a script
id: test
env:
DB_HOST: ${{ secrets.CYPRESS_DB_HOST }}
DB_NAME: ${{ secrets.CYPRESS_DB_NAME }}
DB_USER: ${{ secrets.CYPRESS_DB_USER }}
DB_PWD: ${{ secrets.CYPRESS_DB_PWD }}
RUN_ID: 6206149439
ATTEMPT_NUMBER: 1
uses: actions/github-script@v6
with:
script: |
const { Pool } = require("pg");
const { ATTEMPT_NUMBER, DB_HOST, DB_NAME, DB_PWD, DB_USER, RUN_ID } =
process.env;
const client = await new Pool({
user: DB_USER,
host: DB_HOST,
database: DB_NAME,
password: DB_PWD,
port: 5432,
connectionTimeoutMillis: 60000,
}).connect();
const result = await client.query(
`SELECT DISTINCT name FROM public."specs"
WHERE "matrixId" IN
(SELECT id FROM public."matrix"
WHERE "attemptId" = (
SELECT id FROM public."attempt" WHERE "workflowId" = $1 and "attempt" = $2
)
) AND status = 'fail'`,
[RUN_ID, ATTEMPT_NUMBER],
);
client.release();
const specs = result.rows.map((spec) => spec.name);
console.log(specs);
return specs;
- name: Set the output
id: failed_specs
run : |
failed_specs=$(echo ${{steps.test.outputs.result}} | sed 's/\[\|\]//g' | tr -d ' ' | tr ',' '\n')
while read -r line; do
echo "$line" >> ~/combined_failed_spec_ci
done <<< "$failed_specs"
- name: print the values
run : |
cat ~/combined_failed_spec_ci