diff --git a/.github/workflows/ci-test-custom-script.yml b/.github/workflows/ci-test-custom-script.yml index fe782a48e5c..baf8389f231 100644 --- a/.github/workflows/ci-test-custom-script.yml +++ b/.github/workflows/ci-test-custom-script.yml @@ -86,48 +86,17 @@ jobs: run: | run_result_env=$(cat ~/run_result) echo "run_result=$run_result_env" >> $GITHUB_OUTPUT + if [[ "$run_result_env" == "failedtest" ]]; then + echo "rerun=true" >> $GITHUB_OUTPUT + else + echo "rerun=false" >> $GITHUB_OUTPUT + fi - name: Dump steps context env: STEPS_CONTEXT: ${{ toJson(steps) }} run: echo "$STEPS_CONTEXT" - # 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 - - if: steps.run_result.outputs.run_result != 'success' && steps.run_result.outputs.run_result != 'failedtest' run: echo "Starting full run" && exit 0 @@ -331,8 +300,6 @@ jobs: fi - name: Run the cypress test - if: steps.run_result.outputs.run_result != 'success' && steps.run_result.outputs.run_result != 'failedtest' - id: cypress_test uses: cypress-io/github-action@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -378,9 +345,9 @@ jobs: 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 COMMIT_INFO_MESSAGE: ${{ env.COMMIT_INFO_MESSAGE }} - TOTAL_RUNNERS: ${{ strategy.job-total }} THIS_RUNNER: ${{ strategy.job-index }} RUNID: ${{ github.run_id }} ATTEMPT_NUMBER: ${{ github.run_attempt }} @@ -388,77 +355,7 @@ jobs: COMMITTER: ${{ env.COMMIT_INFO_AUTHOR }} TAG: ${{ github.event_name }} BRANCH: ${{ env.COMMIT_INFO_BRANCH }} - 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" - - # In case of second attempt only run failed specs - - name: Run the cypress test with failed tests - if: steps.run_result.outputs.run_result == 'failedtest' && env.failed_spec_env != '' - id: cypress_test_failedtest - uses: cypress-io/github-action@v5 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - 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_SPECS: ${{ env.failed_spec_env }} - 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 }} - THIS_RUNNER: ${{ strategy.job-index }} + CYPRESS_RERUN: ${{steps.run_result.outputs.rerun}} CYPRESS_DB_USER: ${{ secrets.CYPRESS_DB_USER }} CYPRESS_DB_HOST: ${{ secrets.CYPRESS_DB_HOST }} CYPRESS_DB_NAME: ${{ secrets.CYPRESS_DB_NAME }} @@ -488,13 +385,13 @@ jobs: path: ~/dockerlogs - name: Rename reports - if: failure() && env.failed_spec_env != '' + if: failure() run: | mkdir -p ~/results mv ${{ github.workspace }}/app/client/results ~/results/${{ matrix.job }} - name: Upload cypress report - if: failure() && env.failed_spec_env != '' + if: failure() uses: actions/upload-artifact@v3 with: name: results-${{github.run_attempt}} @@ -507,28 +404,6 @@ jobs: echo "run_result=failedtest" >> $GITHUB_OUTPUT 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() @@ -538,16 +413,6 @@ jobs: ~/run_result key: ${{ github.run_id }}-${{ github.job }}-${{ matrix.job }} - # - 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() diff --git a/.github/workflows/ci-test-hosted.yml b/.github/workflows/ci-test-hosted.yml index d25e7cdf15e..10e48a2fe42 100644 --- a/.github/workflows/ci-test-hosted.yml +++ b/.github/workflows/ci-test-hosted.yml @@ -86,46 +86,17 @@ jobs: run: | run_result_env=$(cat ~/run_result) echo "run_result=$run_result_env" >> $GITHUB_OUTPUT + if [[ "$run_result_env" == "failedtest" ]]; then + echo "rerun=true" >> $GITHUB_OUTPUT + else + echo "rerun=false" >> $GITHUB_OUTPUT + fi - name: Dump steps context env: STEPS_CONTEXT: ${{ toJson(steps) }} run: echo "$STEPS_CONTEXT" - # In case this is second attempt try restoring failed tests - - name: Restore the previous failed combine result - if: steps.run_result.outputs.run_result == 'failedtest' - uses: actions/download-artifact@v3 - with: - name: failed_spec_ci - path: ~/failed_specs - - # 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_specs/failed_spec_ci - failed_spec_env=${failed_spec_env#,} - echo "failed_spec_env=$failed_spec_env" >> $GITHUB_ENV - - if: steps.run_result.outputs.run_result != 'success' && steps.run_result.outputs.run_result != 'failedtest' run: echo "Starting full run" && exit 0 @@ -221,13 +192,6 @@ jobs: chrome-version: stable - run: | echo "BROWSER_PATH=$(which chrome)" >> $GITHUB_ENV - echo "${{env.BROWSER_PATH}}" - - # - name: Set Pull Request Title - # env: - # EVENT_COMMITS: ${{ toJson(github.event.commits[0].message) }} - # run: | - # echo "${{ env.EVENT_COMMITS }}" | awk -F '\\\\n' '{print $1}' - name: Save Git values # pass env variables from this step to other steps @@ -266,8 +230,6 @@ jobs: fi - name: Run the cypress test - if: steps.run_result.outputs.run_result != 'success' && steps.run_result.outputs.run_result != 'failedtest' - id: cypress_test uses: cypress-io/github-action@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -323,76 +285,7 @@ jobs: BRANCH: ${{ env.COMMIT_INFO_BRANCH }} THIS_RUNNER: ${{ strategy.job-index }} TOTAL_RUNNERS: ${{ strategy.job-total }} - 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: - install: false - config-file: cypress_ci_hosted.config.ts - 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 - if: steps.run_result.outputs.run_result == 'failedtest' && env.failed_spec_env != '' - id: cypress_test_failedtest - uses: cypress-io/github-action@v5 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - 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 }} - 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 }} - THIS_RUNNER: ${{ strategy.job-index }} - CYPRESS_SPECS: ${{ env.failed_spec_env }} + CYPRESS_RERUN: ${{steps.run_result.outputs.rerun}} CYPRESS_DB_USER: ${{ secrets.CYPRESS_DB_USER }} CYPRESS_DB_HOST: ${{ secrets.CYPRESS_DB_HOST }} CYPRESS_DB_NAME: ${{ secrets.CYPRESS_DB_NAME }} @@ -406,13 +299,13 @@ jobs: env: "NODE_ENV=development" - name: Rename reports - if: failure() && env.failed_spec_env != '' + if: failure() run: | mkdir -p ~/results mv ${{ github.workspace }}/app/client/results ~/results/${{ matrix.job }} - name: Upload cypress report - if: failure() && env.failed_spec_env != '' + if: failure() uses: actions/upload-artifact@v3 with: name: results-${{github.run_attempt}} @@ -426,27 +319,6 @@ jobs: echo "run_result=failedtest" >> $GITHUB_OUTPUT echo "failedtest" > ~/run_result - # 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 - - # reset the failed_spec_ci file in case of success - - name: In case of test success reset the failed_spec_ci file - if: success() - run: | - touch ~/failed_spec_ci - - # Upload failed test list using common path for all matrix job - - name: Upload failed test list artifact - if: always() - uses: actions/upload-artifact@v3 - with: - name: failed_spec_ci - path: ~/failed_spec_ci - # Force store previous run result to cache - name: Store the previous run result if: failure() @@ -486,14 +358,6 @@ jobs: MSG_MINIMAL: Ref,Event,Commit SLACK_FOOTER: "Hosted run" - # 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 - # Set status = success - name: Save the status of the run run: | diff --git a/.github/workflows/ci-test-limited.yml b/.github/workflows/ci-test-limited.yml index 870b88b4cc3..1222bd503b4 100644 --- a/.github/workflows/ci-test-limited.yml +++ b/.github/workflows/ci-test-limited.yml @@ -112,47 +112,16 @@ jobs: 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 + echo "run_result=$run_result_env" >> $GITHUB_OUTPUT + if [[ "$run_result_env" == "failedtest" ]]; then + echo "rerun=true" >> $GITHUB_OUTPUT + else + echo "rerun=false" >> $GITHUB_OUTPUT + fi # Get specs to run - name: Get specs to run - if: steps.run_result.outputs.run_result != 'success' + if: steps.run_result.outputs.run_result != 'success' && steps.run_result.outputs.run_result != 'failedtest' run: | specs_to_run="" while IFS= read -r line @@ -270,7 +239,6 @@ jobs: 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 }} @@ -326,12 +294,6 @@ jobs: - 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 @@ -374,13 +336,9 @@ jobs: 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 }} @@ -423,17 +381,18 @@ jobs: 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 }} + POSTGRES_PASSWORD: postgres CYPRESS_VERIFY_TIMEOUT: 100000 + COMMIT_INFO_MESSAGE: ${{ env.COMMIT_INFO_MESSAGE }} 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_RERUN: ${{steps.run_result.outputs.rerun}} CYPRESS_DB_USER: ${{ secrets.CYPRESS_DB_USER }} CYPRESS_DB_HOST: ${{ secrets.CYPRESS_DB_HOST }} CYPRESS_DB_NAME: ${{ secrets.CYPRESS_DB_NAME }} @@ -448,80 +407,6 @@ jobs: 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 }} - 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: "." @@ -538,13 +423,13 @@ jobs: path: ~/dockerlogs - name: Rename reports - if: failure() && env.failed_spec_env != '' + if: failure() run: | mkdir -p ~/results mv ${{ github.workspace }}/app/client/results ~/results/${{ matrix.job }} - name: Upload cypress report - if: failure() && env.failed_spec_env != '' + if: failure() uses: actions/upload-artifact@v3 with: name: results-${{github.run_attempt}} @@ -554,31 +439,8 @@ jobs: - 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() @@ -598,25 +460,6 @@ jobs: 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: |