From 6f5433a856f87984ab18087c974a2558e5706493 Mon Sep 17 00:00:00 2001 From: Arpit Mohan Date: Fri, 17 Jan 2025 11:35:23 +0530 Subject: [PATCH] ci: Pinning the server build runs to Ubuntu 22.04 because of Flapdoodle errors --- .github/workflows/server-build.yml | 199 +++++++++--------- .../workflows/server-integration-tests.yml | 24 +-- 2 files changed, 110 insertions(+), 113 deletions(-) diff --git a/.github/workflows/server-build.yml b/.github/workflows/server-build.yml index 55691d6a049e..2a6507d70e9e 100644 --- a/.github/workflows/server-build.yml +++ b/.github/workflows/server-build.yml @@ -51,7 +51,7 @@ defaults: jobs: server-unit-tests: - runs-on: ubuntu-latest-8-cores + runs-on: ubuntu-22.04-8core # Service containers to run with this job. Required for running tests services: @@ -93,7 +93,7 @@ jobs: - name: Figure out the PR number run: echo ${{ inputs.pr }} - + - name: Default database URL run: echo "Is this a PG build? ${{ inputs.is-pg-build }}" @@ -203,105 +203,104 @@ jobs: APPSMITH_ENVFILE_PATH: /tmp/dummy.env APPSMITH_VERBOSE_LOGGING_ENABLED: false run: | - if [[ "${{ inputs.is-pg-build }}" == "true" ]]; then - export APPSMITH_DB_URL="postgresql://postgres:password@localhost:5432/postgres" - else - export APPSMITH_DB_URL="mongodb://localhost:27017/mobtools" - fi - - args=() - - if [[ "${{ steps.run_result.outputs.run_result }}" == "failedtest" ]]; then - failed_tests="${{ steps.failed_tests.outputs.tests }}" - args+=("-DfailIfNoTests=false" "-Dsurefire.failIfNoSpecifiedTests=false" "-Dtest=${failed_tests}") - fi - - # Run tests and capture logs - mvn test "${args[@]}" | tee mvn_test.log - - # Check for "BUILD FAILURE" in the mvn_test.log - if grep -q "BUILD FAILURE" mvn_test.log; then - test_result="failed" - else - test_result="passed" - fi - - echo "test_result variable value: ${test_result}" - - # Prepare output file for failed tests and ensure a fresh file is created - OUTPUT_FILE="failed-server-tests.txt" - rm -f "$OUTPUT_FILE" - touch "$OUTPUT_FILE" - - failed_modules=() - skipped_modules=() - - # Process mvn_test.log for FAILURE and SKIPPED statuses - while IFS= read -r line; do - if [[ $line == *"FAILURE"* ]]; then - module_name=$(echo "$line" | awk '{print $2}') - failed_modules+=("$module_name") - elif [[ $line == *"SKIPPED"* ]]; then - module_name=$(echo "$line" | awk '{print $2}') - skipped_modules+=("$module_name") - fi - done < mvn_test.log - - echo "Failed Modules: ${failed_modules[*]}" - echo "Skipped Modules: ${skipped_modules[*]}" - - # Handle older approach for reading failed tests from XML files - failed_tests_from_xml="$PWD/failed-tests-from-xml.txt" - gawk -F\" '/ temp_file && mv temp_file "$failed_tests_from_xml" - done - - # Include all skipped module test files in the final list - for module in "${skipped_modules[@]}"; do - module_directories=$(find . -path "*/${module}*/src/test/java/*" -type f -name "*Test.java" -exec dirname {} \; | sort -u) - for module_directory in $module_directories; do - test_classes=$(find "$module_directory" -type f -name "*Test.java" | sed 's|.*/src/test/java/||; s|\.java$||; s|/|.|g') - for class_name in $test_classes; do - if [[ ${#class_name} -le 240 ]] && ! grep -Fxq "$class_name#" "$OUTPUT_FILE"; then - echo "${class_name}#" >> "$OUTPUT_FILE" - fi - done - done - done - - # Combine the XML file test cases and skipped module test files into the final output file - cat "$failed_tests_from_xml" >> "$OUTPUT_FILE" - - # Print the final output - cat "$OUTPUT_FILE" - - if [[ -s $OUTPUT_FILE ]]; then - content="$( - echo "## Failed server tests" - echo - sed 's/^/- /' "$OUTPUT_FILE" - )" - echo "$content" >> "$GITHUB_STEP_SUMMARY" - - # Post a comment to the PR - curl --silent --show-error \ - --header "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ - --data "$(jq -n --arg body "$content" '$ARGS.named')" \ - "https://api.github.com/repos/$GITHUB_REPOSITORY/issues/${{ inputs.pr }}/comments" \ - > /dev/null - fi - - # Fail the script if tests did not pass - if [[ "$test_result" == "failed" ]]; then - echo "Tests failed, exiting with status 1." - exit 1 - fi + if [[ "${{ inputs.is-pg-build }}" == "true" ]]; then + export APPSMITH_DB_URL="postgresql://postgres:password@localhost:5432/postgres" + else + export APPSMITH_DB_URL="mongodb://localhost:27017/mobtools" + fi + + args=() + + if [[ "${{ steps.run_result.outputs.run_result }}" == "failedtest" ]]; then + failed_tests="${{ steps.failed_tests.outputs.tests }}" + args+=("-DfailIfNoTests=false" "-Dsurefire.failIfNoSpecifiedTests=false" "-Dtest=${failed_tests}") + fi + + # Run tests and capture logs + mvn test "${args[@]}" | tee mvn_test.log + # Check for "BUILD FAILURE" in the mvn_test.log + if grep -q "BUILD FAILURE" mvn_test.log; then + test_result="failed" + else + test_result="passed" + fi + + echo "test_result variable value: ${test_result}" + + # Prepare output file for failed tests and ensure a fresh file is created + OUTPUT_FILE="failed-server-tests.txt" + rm -f "$OUTPUT_FILE" + touch "$OUTPUT_FILE" + + failed_modules=() + skipped_modules=() + + # Process mvn_test.log for FAILURE and SKIPPED statuses + while IFS= read -r line; do + if [[ $line == *"FAILURE"* ]]; then + module_name=$(echo "$line" | awk '{print $2}') + failed_modules+=("$module_name") + elif [[ $line == *"SKIPPED"* ]]; then + module_name=$(echo "$line" | awk '{print $2}') + skipped_modules+=("$module_name") + fi + done < mvn_test.log + + echo "Failed Modules: ${failed_modules[*]}" + echo "Skipped Modules: ${skipped_modules[*]}" + + # Handle older approach for reading failed tests from XML files + failed_tests_from_xml="$PWD/failed-tests-from-xml.txt" + gawk -F\" '/ temp_file && mv temp_file "$failed_tests_from_xml" + done + + # Include all skipped module test files in the final list + for module in "${skipped_modules[@]}"; do + module_directories=$(find . -path "*/${module}*/src/test/java/*" -type f -name "*Test.java" -exec dirname {} \; | sort -u) + for module_directory in $module_directories; do + test_classes=$(find "$module_directory" -type f -name "*Test.java" | sed 's|.*/src/test/java/||; s|\.java$||; s|/|.|g') + for class_name in $test_classes; do + if [[ ${#class_name} -le 240 ]] && ! grep -Fxq "$class_name#" "$OUTPUT_FILE"; then + echo "${class_name}#" >> "$OUTPUT_FILE" + fi + done + done + done + + # Combine the XML file test cases and skipped module test files into the final output file + cat "$failed_tests_from_xml" >> "$OUTPUT_FILE" + + # Print the final output + cat "$OUTPUT_FILE" + + if [[ -s $OUTPUT_FILE ]]; then + content="$( + echo "## Failed server tests" + echo + sed 's/^/- /' "$OUTPUT_FILE" + )" + echo "$content" >> "$GITHUB_STEP_SUMMARY" + + # Post a comment to the PR + curl --silent --show-error \ + --header "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + --data "$(jq -n --arg body "$content" '$ARGS.named')" \ + "https://api.github.com/repos/$GITHUB_REPOSITORY/issues/${{ inputs.pr }}/comments" \ + > /dev/null + fi + + # Fail the script if tests did not pass + if [[ "$test_result" == "failed" ]]; then + echo "Tests failed, exiting with status 1." + exit 1 + fi # Set status = failedtest - name: Set fail if there are test failures diff --git a/.github/workflows/server-integration-tests.yml b/.github/workflows/server-integration-tests.yml index a4c4836ba238..aa069142738b 100644 --- a/.github/workflows/server-integration-tests.yml +++ b/.github/workflows/server-integration-tests.yml @@ -17,7 +17,7 @@ on: jobs: run-tests: - runs-on: ubuntu-latest-8-cores + runs-on: ubuntu-22.04-8core if: | github.event.pull_request.head.repo.full_name == github.repository || github.event_name == 'workflow_dispatch' @@ -65,7 +65,7 @@ jobs: with: name: server-build path: app/server/dist/ - + - name: Download the rts build artifact uses: actions/download-artifact@v4 with: @@ -93,16 +93,14 @@ jobs: APPSMITH_ENVFILE_PATH: /tmp/dummy.env APPSMITH_VERBOSE_LOGGING_ENABLED: false run: | - if [[ "${{ inputs.is-pg-build }}" == "true" ]]; then - export APPSMITH_DB_URL="postgresql://postgres:password@localhost:5432/postgres" - else - export APPSMITH_DB_URL="mongodb://localhost:27017/mobtools" - fi - - args=() - - # Run tests and capture logs - cd app/server - mvn verify -DskipUTs=true "${args[@]}" | tee mvn_integration_test.log + if [[ "${{ inputs.is-pg-build }}" == "true" ]]; then + export APPSMITH_DB_URL="postgresql://postgres:password@localhost:5432/postgres" + else + export APPSMITH_DB_URL="mongodb://localhost:27017/mobtools" + fi + args=() + # Run tests and capture logs + cd app/server + mvn verify -DskipUTs=true "${args[@]}" | tee mvn_integration_test.log