diff --git a/.circleci/config.yml b/.circleci/config.yml index 7bcbf4e..148b144 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,8 +1,4 @@ version: 2.1 -parameters: - run_e2e_tests: - type: boolean - default: false orbs: slack: circleci/slack@3.4.2 @@ -39,9 +35,6 @@ jobs: - run: name: Dry run build command: bun run build - # - slack/status: - # failure_message: "Triggered by: *${CIRCLE_USERNAME}* \n\n Ooops! The *$CIRCLE_JOB* job has failed! :circleci-fail:" - # webhook: "${SLACK_WEBHOOK_URL}" e2e-tests: working_directory: ~/etherspot-modular-sdk @@ -52,120 +45,64 @@ jobs: password: $DOCKERHUB_PASSWORD steps: - checkout - - when: - condition: <> - steps: - - 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 Modular SDK - command: bun run build - - run: - name: Checkout e2e repo and run tests - no_output_timeout: 60m - command: | - cd ~ - git clone https://github.com/etherspot/e2e-sdk-modular.git - cd e2e-sdk-modular - sed -i.bak "s/private_key/$PRIVATE_KEY/g" .env - sed -i.bak "s/project_key/$PROJECT_KEY/g" .env - sed -i.bak "s/project_key_testnet/$PROJECT_KEY_TESTNET/g" .env - sed -i.bak "s/api_key/$API_KEY/g" .env - sed -i.bak "s/incorrect_api_key_arka/$INCORRECT_API_KEY_ARKA/g" .env - sed -i.bak "s/invalid_api_key_arka/$INVALID_API_KEY_ARKA/g" .env - sed -i.bak "s/bundler_api_key/$BUNDLER_API_KEY/g" .env - sed -i.bak "s/data_api_key/$DATA_API_KEY/g" .env - sed -i.bak "s/api_key_arka/$API_KEY_ARKA/g" .env - #sed -i.bak "s/api_key_sessionkey/$API_KEY_SESSIONKEY/g" .env - mv package.json temp.json - jq -r '.dependencies."@etherspot/modular-sdk" |= "file:../etherspot-modular-sdk"' temp.json > package.json - rm temp.json - npm i - npm run test-testnet-viem-combined - - run: - name: Move test report - command: | - mv /home/circleci/e2e-sdk-modular/mochawesome-report /tmp/ - chmod 777 -R /tmp/mochawesome-report - when: always - - store_artifacts: - path: /tmp/mochawesome-report - when: always - - run: - 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=./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) - - 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 + - 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 Modular SDK + command: bun run build + - run: + name: Checkout e2e repo and run tests + no_output_timeout: 60m + command: | + cd ~ + git clone https://github.com/etherspot/e2e-sdk-modular.git + cd e2e-sdk-modular + git checkout master + sed -i.bak "s/private_key/$PRIVATE_KEY/g" .env + sed -i.bak "s/project_key/$PROJECT_KEY/g" .env + sed -i.bak "s/project_key_testnet/$PROJECT_KEY_TESTNET/g" .env + sed -i.bak "s/api_key/$API_KEY/g" .env + sed -i.bak "s/incorrect_api_key_arka/$INCORRECT_API_KEY_ARKA/g" .env + sed -i.bak "s/invalid_api_key_arka/$INVALID_API_KEY_ARKA/g" .env + sed -i.bak "s/bundler_api_key/$BUNDLER_API_KEY/g" .env + sed -i.bak "s/data_api_key/$DATA_API_KEY/g" .env + sed -i.bak "s/api_key_arka/$API_KEY_ARKA/g" .env + sed -i.bak "s/api_key_sessionkey/$API_KEY_SESSIONKEY/g" .env + sed -i.bak "s/primary_private_key/$PRIMARY_PRIVATE_KEY/g" .env + sed -i.bak "s/secondary_private_key/$SECONDARY_PRIVATE_KEY/g" .env + sed -i.bak "s/primary_wallet_address/$PRIMARY_WALLET_ADDRESS/g" .env + sed -i.bak "s/secondary_wallet_address/$SECONDARY_WALLET_ADDRESS/g" .env + sed -i.bak "s/paymaster_address/$PAYMASTER_ADDRESS/g" .env + sed -i.bak "s/sponsor_address/$SPONSOR_ADDRESS/g" .env + mv package.json temp.json + jq -r '.dependencies."@etherspot/modular-sdk" |= "file:../etherspot-modular-sdk"' temp.json > package.json + rm temp.json + npm i + npm run test-all-chains + - store_artifacts: + 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... - curl -X POST -H 'Content-type: application/json' --data '{"text":"'"$SLACK_MESSAGE"'"}' $E2E_SLACK_WEBHOOK_URL publish-npm-package: working_directory: ~/etherspot-modular-sdk docker: @@ -203,6 +140,7 @@ jobs: command: | chmod +x .circleci/announcePublish.sh .circleci/announcePublish.sh "Etherspot Modular SDK" "$(node -e "console.log(require('./package.json').version)")" + publish-github-release: docker: - image: ardd97/ghr @@ -216,27 +154,34 @@ jobs: ghr -t "${GITHUB_TOKEN}" -u "${CIRCLE_PROJECT_USERNAME}" -r "${CIRCLE_PROJECT_REPONAME}" -c "${CIRCLE_SHA1}" "$PACKAGE_VERSION" workflows: - version: 2.1 - install_and_publish: + install-and-publish: jobs: - install: context: general-vars + filters: + branches: + only: + - master + - PRO-3351-E2e + - e2e-tests: + name: testnet-e2e-tests context: general-vars - requires: - - install - # filters: - # branches: - # only: - # - master + filters: + branches: + only: + - master + - PRO-3351-E2e + - publish-npm-package: context: general-vars requires: - - e2e-tests + - testnet-e2e-tests filters: branches: only: - - master + - master + - publish-github-release: context: general-vars requires: @@ -244,4 +189,5 @@ workflows: filters: branches: only: - - master + - master +