@@ -97,63 +97,71 @@ jobs:
9797 path : /home/circleci/e2e-sdk-modular/reports
9898 destination : test-report
9999 - run :
100- name : Parse and send E2E test results to Slack
100+ name : Parse and send test results to Slack
101101 when : always
102102 command : |
103103 MOCHAWESOME_JSON_FILE=/home/circleci/e2e-sdk-modular/reports/aggregated-report.json
104104 FAILED_TESTS_FILE=failed-tests.txt
105- # same parsing + slack notification script as before...
106105
107- publish-npm-package :
108- working_directory : ~/etherspot-modular-sdk
109- docker :
110- - image : cimg/node:20.11.1
111- auth :
112- username : $DOCKERHUB_USER
113- password : $DOCKERHUB_PASSWORD
114- steps :
115- - checkout
116- - run :
117- name : Install Bun
118- command : |
119- curl -fsSL https://bun.sh/install | bash
120- echo 'export BUN_INSTALL="$HOME/.bun"' >> $BASH_ENV
121- echo 'export PATH="$BUN_INSTALL/bin:$PATH"' >> $BASH_ENV
122- source $BASH_ENV
123- - restore_cache :
124- key : dependency-cache-{{ checksum "bun.lockb" }}
125- - run :
126- name : Authenticate with registry
127- command : echo "//registry.npmjs.org/:_authToken=$ETHERSPOT_NPM_TOKEN" > ~/etherspot-modular-sdk/.npmrc
128- - run :
129- name : Install dependencies
130- command : bun install
131- - run :
132- name : Build Etherpot Prime SDK
133- command : bun run build
134- - run :
135- name : Publish package to npm
136- command : |
137- cd ~/etherspot-modular-sdk
138- bun publish --access public
139- - run :
140- name : Announce Publish
141- command : |
142- chmod +x .circleci/announcePublish.sh
143- .circleci/announcePublish.sh "Etherspot Modular SDK" "$(node -e "console.log(require('./package.json').version)")"
106+ if [ ! -f "$MOCHAWESOME_JSON_FILE" ]; then
107+ echo "❌ Aggregated mochawesome report not found at $MOCHAWESOME_JSON_FILE"
108+ exit 0
109+ fi
110+ TOTAL_SUITES=$(jq '.stats.suites' $MOCHAWESOME_JSON_FILE)
111+ TOTAL_PASSES=$(jq '.stats.passes' $MOCHAWESOME_JSON_FILE)
112+ TOTAL_PENDING=$(jq '.stats.pending' $MOCHAWESOME_JSON_FILE)
113+ TOTAL_FAILURES=$(jq '.stats.failures' $MOCHAWESOME_JSON_FILE)
114+ START_TIME=$(jq -r '.stats.start' $MOCHAWESOME_JSON_FILE)
115+ END_TIME=$(jq -r '.stats.end' $MOCHAWESOME_JSON_FILE)
116+ DURATION_MS=$(jq -r '.stats.duration' $MOCHAWESOME_JSON_FILE)
144117
145- publish-github-release :
146- docker :
147- - image : ardd97/ghr
148- steps :
149- - checkout
150- - run :
151- name : " Publish Release on GitHub"
152- command : |
153- PACKAGE_VERSION="$(jq .version package.json -r)"
154- echo $PACKAGE_VERSION
155- ghr -t "${GITHUB_TOKEN}" -u "${CIRCLE_PROJECT_USERNAME}" -r "${CIRCLE_PROJECT_REPONAME}" -c "${CIRCLE_SHA1}" "$PACKAGE_VERSION"
118+ START_TIME_FORMATTED=$(date -d "$START_TIME" "+%Y-%m-%d %H:%M:%S")
119+ END_TIME_FORMATTED=$(date -d "$END_TIME" "+%Y-%m-%d %H:%M:%S")
120+ DURATION_MIN=$(awk "BEGIN {printf \"%.2f\",${DURATION_MS}/60000}")
121+
122+
123+ jq -r '.results[] | .suites[] | select(.failures > 0) | {suite: .title, tests: [.tests[] | select(.fail) | .title]} | select(.tests | length > 0) |
124+ "*Suite:* \(.suite)\n*Failing Tests:* \n\(.tests | map("- " + .) | join("\n"))\n"' $MOCHAWESOME_JSON_FILE > $FAILED_TESTS_FILE
156125
126+ if [ -s $FAILED_TESTS_FILE ]; then
127+ MESSAGE=$(cat $FAILED_TESTS_FILE)
128+ SLACK_MESSAGE=":x: *E2E Tests Failed :x: *\n\
129+ *Project:* ${CIRCLE_PROJECT_REPONAME}\n\
130+ *Triggered by:* ${CIRCLE_USERNAME}\n\
131+ *Branch:* ${CIRCLE_BRANCH}\n\
132+ *Commit:* <https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/commit/${CIRCLE_SHA1}|${CIRCLE_SHA1}>\n\n\
133+ *Test Summary:*\n\
134+ *Total Suites:* ${TOTAL_SUITES}\n\
135+ *Passes:* ${TOTAL_PASSES}\n\
136+ *Pending:* ${TOTAL_PENDING}\n\
137+ *Failures:* ${TOTAL_FAILURES}\n\
138+ *Start Time:* ${START_TIME_FORMATTED}\n\
139+ *End Time:* ${END_TIME_FORMATTED}\n\
140+ *Duration:* ${DURATION_MIN} minutes\n\n\
141+ *Failed Tests:*\n${MESSAGE}\n\
142+ *Report:* <https://output.circle-artifacts.com/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/${CIRCLE_NODE_INDEX}/tmp/mochawesome-report/mochawesome.html|View HTML Report>\n\
143+ *Job:* <https://circleci.com/gh/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BUILD_NUM}|View Job>"
144+ else
145+ SLACK_MESSAGE=":white_check_mark: All E2E tests passed\n\
146+ *Project:* ${CIRCLE_PROJECT_REPONAME}\n\
147+ *Triggered by:* ${CIRCLE_USERNAME}\n\
148+ *Branch:* ${CIRCLE_BRANCH}\n\
149+ *Commit:* <https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/commit/${CIRCLE_SHA1}|${CIRCLE_SHA1}>\n\
150+ *Job:* <https://circleci.com/gh/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BUILD_NUM}|View Job>\n\
151+ *Report:* <https://output.circle-artifacts.com/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/${CIRCLE_NODE_INDEX}/tmp/mochawesome-report/mochawesome.html|View HTML Report>\n\
152+ \n*Test Summary:*\n\
153+ *Total Suites:* ${TOTAL_SUITES}\n\
154+ *Passes:* ${TOTAL_PASSES}\n\
155+ *Pending:* ${TOTAL_PENDING}\n\
156+ *Failures:* ${TOTAL_FAILURES}\n\
157+ *Start Time:* ${START_TIME_FORMATTED}\n\
158+ *End Time:* ${END_TIME_FORMATTED}\n\
159+ *Duration:* ${DURATION_MIN} minutes"
160+ fi
161+
162+ curl -X POST -H 'Content-type: application/json' --data '{"text":"'"$SLACK_MESSAGE"'"}' $E2E_SLACK_WEBHOOK_URL
163+
164+
157165workflows :
158166 install-and-publish :
159167 jobs :
@@ -162,30 +170,13 @@ workflows:
162170 filters :
163171 branches :
164172 only :
165- - master
173+ - e2e-modular
166174
167175 - e2e-tests :
168176 name : testnet-e2e-tests
169177 context : general-vars
170178 filters :
171179 branches :
172180 only :
173- - master
174-
175- - publish-npm-package :
176- context : general-vars
177- requires :
178- - testnet-e2e-tests
179- filters :
180- branches :
181- only :
182- - master
183-
184- - publish-github-release :
185- context : general-vars
186- requires :
187- - publish-npm-package
188- filters :
189- branches :
190- only :
191- - master
181+ - e2e-modular
182+
0 commit comments