From 3e00291428e5155dfd450a7cd8046d1bb50d399c Mon Sep 17 00:00:00 2001 From: Chetan Bothra Date: Tue, 14 Oct 2025 17:42:50 +0530 Subject: [PATCH 1/6] Update config.yml --- .circleci/config.yml | 136 ++++++++++++++++++++----------------------- 1 file changed, 62 insertions(+), 74 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1b20603..8170fca 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -97,63 +97,69 @@ jobs: path: /home/circleci/e2e-sdk-modular/reports destination: test-report - run: - name: Parse and send E2E test results to Slack - when: always - command: | - MOCHAWESOME_JSON_FILE=/home/circleci/e2e-sdk-modular/reports/aggregated-report.json - FAILED_TESTS_FILE=failed-tests.txt - # same parsing + slack notification script as before... + name: Parse and send test results to Slack + when: always + command: | + wget https://output.circle-artifacts.com/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/${CIRCLE_NODE_INDEX}/tmp/mochawesome-report/mochawesome.json - publish-npm-package: - working_directory: ~/etherspot-modular-sdk - docker: - - image: cimg/node:20.11.1 - auth: - username: $DOCKERHUB_USER - password: $DOCKERHUB_PASSWORD - steps: - - checkout - - run: - name: Install Bun - command: | - curl -fsSL https://bun.sh/install | bash - echo 'export BUN_INSTALL="$HOME/.bun"' >> $BASH_ENV - echo 'export PATH="$BUN_INSTALL/bin:$PATH"' >> $BASH_ENV - source $BASH_ENV - - restore_cache: - key: dependency-cache-{{ checksum "bun.lockb" }} - - run: - name: Authenticate with registry - command: echo "//registry.npmjs.org/:_authToken=$ETHERSPOT_NPM_TOKEN" > ~/etherspot-modular-sdk/.npmrc - - run: - name: Install dependencies - command: bun install - - run: - name: Build Etherpot Prime SDK - command: bun run build - - run: - name: Publish package to npm - command: | - cd ~/etherspot-modular-sdk - bun publish --access public - - run: - name: Announce Publish - command: | - chmod +x .circleci/announcePublish.sh - .circleci/announcePublish.sh "Etherspot Modular SDK" "$(node -e "console.log(require('./package.json').version)")" + MOCHAWESOME_JSON_FILE=./mochawesome.json + FAILED_TESTS_FILE=failed-tests.txt + TOTAL_SUITES=$(jq '.stats.suites' $MOCHAWESOME_JSON_FILE) + TOTAL_PASSES=$(jq '.stats.passes' $MOCHAWESOME_JSON_FILE) + TOTAL_PENDING=$(jq '.stats.pending' $MOCHAWESOME_JSON_FILE) + TOTAL_FAILURES=$(jq '.stats.failures' $MOCHAWESOME_JSON_FILE) + START_TIME=$(jq -r '.stats.start' $MOCHAWESOME_JSON_FILE) + END_TIME=$(jq -r '.stats.end' $MOCHAWESOME_JSON_FILE) + DURATION_MS=$(jq -r '.stats.duration' $MOCHAWESOME_JSON_FILE) - publish-github-release: - docker: - - image: ardd97/ghr - steps: - - checkout - - run: - name: "Publish Release on GitHub" - command: | - PACKAGE_VERSION="$(jq .version package.json -r)" - echo $PACKAGE_VERSION - ghr -t "${GITHUB_TOKEN}" -u "${CIRCLE_PROJECT_USERNAME}" -r "${CIRCLE_PROJECT_REPONAME}" -c "${CIRCLE_SHA1}" "$PACKAGE_VERSION" + START_TIME_FORMATTED=$(date -d "$START_TIME" "+%Y-%m-%d %H:%M:%S") + END_TIME_FORMATTED=$(date -d "$END_TIME" "+%Y-%m-%d %H:%M:%S") + DURATION_MIN=$(awk "BEGIN {printf \"%.2f\",${DURATION_MS}/60000}") + + + jq -r '.results[] | .suites[] | select(.failures > 0) | {suite: .title, tests: [.tests[] | select(.fail) | .title]} | select(.tests | length > 0) | + "*Suite:* \(.suite)\n*Failing Tests:* \n\(.tests | map("- " + .) | join("\n"))\n"' $MOCHAWESOME_JSON_FILE > $FAILED_TESTS_FILE + if [ -s $FAILED_TESTS_FILE ]; then + MESSAGE=$(cat $FAILED_TESTS_FILE) + SLACK_MESSAGE=":x: *E2E Tests Failed :x: *\n\ + *Project:* ${CIRCLE_PROJECT_REPONAME}\n\ + *Triggered by:* ${CIRCLE_USERNAME}\n\ + *Branch:* ${CIRCLE_BRANCH}\n\ + *Commit:* \n\n\ + *Test Summary:*\n\ + *Total Suites:* ${TOTAL_SUITES}\n\ + *Passes:* ${TOTAL_PASSES}\n\ + *Pending:* ${TOTAL_PENDING}\n\ + *Failures:* ${TOTAL_FAILURES}\n\ + *Start Time:* ${START_TIME_FORMATTED}\n\ + *End Time:* ${END_TIME_FORMATTED}\n\ + *Duration:* ${DURATION_MIN} minutes\n\n\ + *Failed Tests:*\n${MESSAGE}\n\ + *Report:* \n\ + *Job:* \n\ + cc: ${TAG_RESPONSIBLE_PEOPLE}" + else + SLACK_MESSAGE=":white_check_mark: All E2E tests passed\n\ + *Project:* ${CIRCLE_PROJECT_REPONAME}\n\ + *Triggered by:* ${CIRCLE_USERNAME}\n\ + *Branch:* ${CIRCLE_BRANCH}\n\ + *Commit:* \n\ + *Job:* \n\ + *Report:* \n\ + \n*Test Summary:*\n\ + *Total Suites:* ${TOTAL_SUITES}\n\ + *Passes:* ${TOTAL_PASSES}\n\ + *Pending:* ${TOTAL_PENDING}\n\ + *Failures:* ${TOTAL_FAILURES}\n\ + *Start Time:* ${START_TIME_FORMATTED}\n\ + *End Time:* ${END_TIME_FORMATTED}\n\ + *Duration:* ${DURATION_MIN} minutes" + fi + + curl -X POST -H 'Content-type: application/json' --data '{"text":"'"$SLACK_MESSAGE"'"}' $E2E_SLACK_WEBHOOK_URL + + workflows: install-and-publish: jobs: @@ -162,7 +168,7 @@ workflows: filters: branches: only: - - master + - e2e-modular - e2e-tests: name: testnet-e2e-tests @@ -170,22 +176,4 @@ workflows: filters: branches: only: - - master - - - publish-npm-package: - context: general-vars - requires: - - testnet-e2e-tests - filters: - branches: - only: - - master - - - publish-github-release: - context: general-vars - requires: - - publish-npm-package - filters: - branches: - only: - - master + - e2e-modular From 07b28a2dfe99ee6000f13937cdd28f8158d3da68 Mon Sep 17 00:00:00 2001 From: Chetan Bothra Date: Tue, 14 Oct 2025 18:29:23 +0530 Subject: [PATCH 2/6] Update config.yml --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8170fca..e59c550 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -100,7 +100,8 @@ jobs: name: Parse and send test results to Slack when: always command: | - wget https://output.circle-artifacts.com/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/${CIRCLE_NODE_INDEX}/tmp/mochawesome-report/mochawesome.json + MOCHAWESOME_JSON_FILE=/home/circleci/e2e-sdk-modular/reports/aggregated-report.json + FAILED_TESTS_FILE=failed-tests.txt MOCHAWESOME_JSON_FILE=./mochawesome.json FAILED_TESTS_FILE=failed-tests.txt From 54de4c4328137c4e6be68d7edaf23a4aa87e3037 Mon Sep 17 00:00:00 2001 From: Chetan Bothra Date: Wed, 15 Oct 2025 09:48:59 +0530 Subject: [PATCH 3/6] Update config.yml --- .circleci/config.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e59c550..9e14986 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -103,8 +103,10 @@ jobs: MOCHAWESOME_JSON_FILE=/home/circleci/e2e-sdk-modular/reports/aggregated-report.json FAILED_TESTS_FILE=failed-tests.txt - MOCHAWESOME_JSON_FILE=./mochawesome.json - FAILED_TESTS_FILE=failed-tests.txt + if [ ! -f "$MOCHAWESOME_JSON_FILE" ]; then + echo "❌ Aggregated mochawesome report not found at $MOCHAWESOME_JSON_FILE" + exit 0 + fi TOTAL_SUITES=$(jq '.stats.suites' $MOCHAWESOME_JSON_FILE) TOTAL_PASSES=$(jq '.stats.passes' $MOCHAWESOME_JSON_FILE) TOTAL_PENDING=$(jq '.stats.pending' $MOCHAWESOME_JSON_FILE) From 6d99d2525290becd2bd05b7c70ac2606594964af Mon Sep 17 00:00:00 2001 From: Chetan Bothra Date: Wed, 15 Oct 2025 14:15:39 +0530 Subject: [PATCH 4/6] Update config.yml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9e14986..2da6f5e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -141,7 +141,7 @@ jobs: *Failed Tests:*\n${MESSAGE}\n\ *Report:* \n\ *Job:* \n\ - cc: ${TAG_RESPONSIBLE_PEOPLE}" + cc: ${TAG_QA_PEOPLE}" else SLACK_MESSAGE=":white_check_mark: All E2E tests passed\n\ *Project:* ${CIRCLE_PROJECT_REPONAME}\n\ From 1d8febfa3ae26a35bf283457ee1ec9e7e4b7d0e9 Mon Sep 17 00:00:00 2001 From: Chetan Bothra Date: Thu, 16 Oct 2025 14:29:23 +0530 Subject: [PATCH 5/6] Update config.yml --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2da6f5e..28ae240 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -180,3 +180,4 @@ workflows: branches: only: - e2e-modular + From bcc4979a381d51c5ca26c175eea519ad20c3fdc1 Mon Sep 17 00:00:00 2001 From: chetan Date: Sat, 18 Oct 2025 19:13:26 +0530 Subject: [PATCH 6/6] fixed formatting --- .circleci/config.yml | 115 +++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 58 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 28ae240..02489c4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -97,70 +97,69 @@ jobs: path: /home/circleci/e2e-sdk-modular/reports destination: test-report - run: - name: Parse and send test results to Slack - when: always - command: | - MOCHAWESOME_JSON_FILE=/home/circleci/e2e-sdk-modular/reports/aggregated-report.json - FAILED_TESTS_FILE=failed-tests.txt + name: Parse and send test results to Slack + when: always + command: | + MOCHAWESOME_JSON_FILE=/home/circleci/e2e-sdk-modular/reports/aggregated-report.json + FAILED_TESTS_FILE=failed-tests.txt - if [ ! -f "$MOCHAWESOME_JSON_FILE" ]; then - echo "❌ Aggregated mochawesome report not found at $MOCHAWESOME_JSON_FILE" - exit 0 - fi - TOTAL_SUITES=$(jq '.stats.suites' $MOCHAWESOME_JSON_FILE) - TOTAL_PASSES=$(jq '.stats.passes' $MOCHAWESOME_JSON_FILE) - TOTAL_PENDING=$(jq '.stats.pending' $MOCHAWESOME_JSON_FILE) - TOTAL_FAILURES=$(jq '.stats.failures' $MOCHAWESOME_JSON_FILE) - START_TIME=$(jq -r '.stats.start' $MOCHAWESOME_JSON_FILE) - END_TIME=$(jq -r '.stats.end' $MOCHAWESOME_JSON_FILE) - DURATION_MS=$(jq -r '.stats.duration' $MOCHAWESOME_JSON_FILE) + if [ ! -f "$MOCHAWESOME_JSON_FILE" ]; then + echo "❌ Aggregated mochawesome report not found at $MOCHAWESOME_JSON_FILE" + exit 0 + fi + TOTAL_SUITES=$(jq '.stats.suites' $MOCHAWESOME_JSON_FILE) + TOTAL_PASSES=$(jq '.stats.passes' $MOCHAWESOME_JSON_FILE) + TOTAL_PENDING=$(jq '.stats.pending' $MOCHAWESOME_JSON_FILE) + TOTAL_FAILURES=$(jq '.stats.failures' $MOCHAWESOME_JSON_FILE) + START_TIME=$(jq -r '.stats.start' $MOCHAWESOME_JSON_FILE) + END_TIME=$(jq -r '.stats.end' $MOCHAWESOME_JSON_FILE) + DURATION_MS=$(jq -r '.stats.duration' $MOCHAWESOME_JSON_FILE) - START_TIME_FORMATTED=$(date -d "$START_TIME" "+%Y-%m-%d %H:%M:%S") - END_TIME_FORMATTED=$(date -d "$END_TIME" "+%Y-%m-%d %H:%M:%S") - DURATION_MIN=$(awk "BEGIN {printf \"%.2f\",${DURATION_MS}/60000}") + START_TIME_FORMATTED=$(date -d "$START_TIME" "+%Y-%m-%d %H:%M:%S") + END_TIME_FORMATTED=$(date -d "$END_TIME" "+%Y-%m-%d %H:%M:%S") + DURATION_MIN=$(awk "BEGIN {printf \"%.2f\",${DURATION_MS}/60000}") - jq -r '.results[] | .suites[] | select(.failures > 0) | {suite: .title, tests: [.tests[] | select(.fail) | .title]} | select(.tests | length > 0) | - "*Suite:* \(.suite)\n*Failing Tests:* \n\(.tests | map("- " + .) | join("\n"))\n"' $MOCHAWESOME_JSON_FILE > $FAILED_TESTS_FILE + jq -r '.results[] | .suites[] | select(.failures > 0) | {suite: .title, tests: [.tests[] | select(.fail) | .title]} | select(.tests | length > 0) | + "*Suite:* \(.suite)\n*Failing Tests:* \n\(.tests | map("- " + .) | join("\n"))\n"' $MOCHAWESOME_JSON_FILE > $FAILED_TESTS_FILE - if [ -s $FAILED_TESTS_FILE ]; then - MESSAGE=$(cat $FAILED_TESTS_FILE) - SLACK_MESSAGE=":x: *E2E Tests Failed :x: *\n\ - *Project:* ${CIRCLE_PROJECT_REPONAME}\n\ - *Triggered by:* ${CIRCLE_USERNAME}\n\ - *Branch:* ${CIRCLE_BRANCH}\n\ - *Commit:* \n\n\ - *Test Summary:*\n\ - *Total Suites:* ${TOTAL_SUITES}\n\ - *Passes:* ${TOTAL_PASSES}\n\ - *Pending:* ${TOTAL_PENDING}\n\ - *Failures:* ${TOTAL_FAILURES}\n\ - *Start Time:* ${START_TIME_FORMATTED}\n\ - *End Time:* ${END_TIME_FORMATTED}\n\ - *Duration:* ${DURATION_MIN} minutes\n\n\ - *Failed Tests:*\n${MESSAGE}\n\ - *Report:* \n\ - *Job:* \n\ - cc: ${TAG_QA_PEOPLE}" - else - SLACK_MESSAGE=":white_check_mark: All E2E tests passed\n\ - *Project:* ${CIRCLE_PROJECT_REPONAME}\n\ - *Triggered by:* ${CIRCLE_USERNAME}\n\ - *Branch:* ${CIRCLE_BRANCH}\n\ - *Commit:* \n\ - *Job:* \n\ - *Report:* \n\ - \n*Test Summary:*\n\ - *Total Suites:* ${TOTAL_SUITES}\n\ - *Passes:* ${TOTAL_PASSES}\n\ - *Pending:* ${TOTAL_PENDING}\n\ - *Failures:* ${TOTAL_FAILURES}\n\ - *Start Time:* ${START_TIME_FORMATTED}\n\ - *End Time:* ${END_TIME_FORMATTED}\n\ - *Duration:* ${DURATION_MIN} minutes" - fi + if [ -s $FAILED_TESTS_FILE ]; then + MESSAGE=$(cat $FAILED_TESTS_FILE) + SLACK_MESSAGE=":x: *E2E Tests Failed :x: *\n\ + *Project:* ${CIRCLE_PROJECT_REPONAME}\n\ + *Triggered by:* ${CIRCLE_USERNAME}\n\ + *Branch:* ${CIRCLE_BRANCH}\n\ + *Commit:* \n\n\ + *Test Summary:*\n\ + *Total Suites:* ${TOTAL_SUITES}\n\ + *Passes:* ${TOTAL_PASSES}\n\ + *Pending:* ${TOTAL_PENDING}\n\ + *Failures:* ${TOTAL_FAILURES}\n\ + *Start Time:* ${START_TIME_FORMATTED}\n\ + *End Time:* ${END_TIME_FORMATTED}\n\ + *Duration:* ${DURATION_MIN} minutes\n\n\ + *Failed Tests:*\n${MESSAGE}\n\ + *Report:* \n\ + *Job:* " + else + SLACK_MESSAGE=":white_check_mark: All E2E tests passed\n\ + *Project:* ${CIRCLE_PROJECT_REPONAME}\n\ + *Triggered by:* ${CIRCLE_USERNAME}\n\ + *Branch:* ${CIRCLE_BRANCH}\n\ + *Commit:* \n\ + *Job:* \n\ + *Report:* \n\ + \n*Test Summary:*\n\ + *Total Suites:* ${TOTAL_SUITES}\n\ + *Passes:* ${TOTAL_PASSES}\n\ + *Pending:* ${TOTAL_PENDING}\n\ + *Failures:* ${TOTAL_FAILURES}\n\ + *Start Time:* ${START_TIME_FORMATTED}\n\ + *End Time:* ${END_TIME_FORMATTED}\n\ + *Duration:* ${DURATION_MIN} minutes" + fi - curl -X POST -H 'Content-type: application/json' --data '{"text":"'"$SLACK_MESSAGE"'"}' $E2E_SLACK_WEBHOOK_URL + curl -X POST -H 'Content-type: application/json' --data '{"text":"'"$SLACK_MESSAGE"'"}' $E2E_SLACK_WEBHOOK_URL workflows: