feat(e2e): Enable parametrized execution of Playwright for Suite tests #2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "[Test] suite-web playwright e2e" | |
# this action runs basic test suite for suite-web and and builds/deploys the web app to dev.suite.sldev.cz/suite-web/<branch-name>/web | |
permissions: | |
id-token: write # for fetching the OIDC token | |
contents: read # for actions/checkout | |
# run only if there are changes in suite or related libs paths | |
on: | |
pull_request: | |
branches: | |
- develop | |
paths-ignore: | |
- "suite-native/**" | |
- "packages/connect*/**" | |
# - "packages/suite-desktop*/**" | |
- "packages/react-native-usb/**" | |
# ignore unrelated github workflows config files | |
- ".github/workflows/connect-analytics" | |
- ".github/workflows/connect-common" | |
- ".github/workflows/connect-examples" | |
- ".github/workflows/connect-explorer" | |
- ".github/workflows/connect-iframe" | |
- ".github/workflows/connect-mobile" | |
- ".github/workflows/connect-plugin-*" | |
- ".github/workflows/connect-popup" | |
- ".github/workflows/connect-theme" | |
- ".github/workflows/connect-ui" | |
- ".github/workflows/connect-webextension" | |
- ".github/workflows/suite-native*" | |
- ".github/workflows/build-desktop*" | |
- ".github/workflows/release*" | |
- ".github/workflows/template*" | |
- ".github/actions/release*/**" | |
workflow_dispatch: | |
env: | |
DEV_SERVER_URL: "https://dev.suite.sldev.cz" | |
STAGING_SUITE_SERVER_URL: "https://staging-suite.trezor.io" | |
jobs: | |
build-web: | |
if: github.repository == 'trezor/trezor-suite' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Configure aws credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: arn:aws:iam::538326561891:role/gh_actions_trezor_suite_dev_deploy | |
aws-region: eu-central-1 | |
- name: Extract branch name | |
id: extract_branch | |
run: | | |
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: ".nvmrc" | |
cache: yarn | |
- name: Install dependencies | |
run: | | |
echo -e "\nenableScripts: false" >> .yarnrc.yml | |
echo -e "\nenableHardenedMode: false" >> .yarnrc.yml | |
yarn workspaces focus @trezor/suite-web @trezor/connect-iframe @trezor/connect-web @trezor/suite-data @trezor/suite-build | |
- name: Build suite-web | |
env: | |
ASSET_PREFIX: /suite-web/${{ steps.extract_branch.outputs.branch }}/web | |
DESKTOP_APP_NAME: "Trezor-Suite" | |
run: | | |
yarn message-system-sign-config | |
yarn workspace @trezor/suite-data build:lib | |
yarn workspace @trezor/suite-web build | |
# this step should upload build result to s3 bucket dev.suite.sldev.cz using awscli | |
- name: Upload suite-web to dev.suite.sldev.cz | |
env: | |
DEPLOY_PATH: s3://dev.suite.sldev.cz/suite-web/${{ steps.extract_branch.outputs.branch }} | |
run: | | |
aws s3 sync --delete ./packages/suite-web/build ${DEPLOY_PATH}/web | |
e2e-test-suite-web: | |
if: github.repository == 'trezor/trezor-suite' | |
runs-on: ubuntu-latest | |
needs: | |
- build-web | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- TEST_GROUP: "@group_suite" | |
CONTAINERS: "trezor-user-env-unix" | |
CYPRESS_USE_TREZOR_USER_ENV_BRIDGE: "1" | |
- TEST_GROUP: "@group_device-management" | |
CONTAINERS: "trezor-user-env-unix" | |
CYPRESS_USE_TREZOR_USER_ENV_BRIDGE: "1" | |
- TEST_GROUP: "@group_settings" | |
CONTAINERS: "trezor-user-env-unix" | |
CYPRESS_USE_TREZOR_USER_ENV_BRIDGE: "1" | |
- TEST_GROUP: "@group_metadata" | |
CONTAINERS: "trezor-user-env-unix" | |
CYPRESS_USE_TREZOR_USER_ENV_BRIDGE: "1" | |
- TEST_GROUP: "@group_passphrase" | |
CONTAINERS: "trezor-user-env-unix" | |
CYPRESS_USE_TREZOR_USER_ENV_BRIDGE: "1" | |
- TEST_GROUP: "@group_other" | |
CONTAINERS: "trezor-user-env-unix" | |
CYPRESS_USE_TREZOR_USER_ENV_BRIDGE: "1" | |
- TEST_GROUP: "@group_wallet" | |
CONTAINERS: "trezor-user-env-unix bitcoin-regtest" | |
CYPRESS_USE_TREZOR_USER_ENV_BRIDGE: "1" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{github.event.after}} | |
fetch-depth: 2 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: ".nvmrc" | |
cache: yarn | |
- name: Extract branch name | |
id: extract_branch | |
run: | | |
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT | |
- name: Extract commit message | |
id: extract_commit_message | |
run: | | |
if [ "${{ github.event_name }}" == "pull_request" ]; then | |
git fetch origin +refs/pull/${{ github.event.pull_request.number }}/merge: --depth=1 | |
echo "message=$(git log --no-merges -1 --pretty=format:"%s")" >> $GITHUB_OUTPUT | |
else | |
echo "message=$(git log --no-merges -1 --pretty=format:"%s")" >> $GITHUB_OUTPUT | |
fi | |
- name: Install dependencies | |
run: | | |
echo -e "\nenableScripts: false" >> .yarnrc.yml | |
echo -e "\nenableHardenedMode: false" >> .yarnrc.yml | |
yarn workspaces focus @trezor/suite-desktop-core | |
- name: Run e2e tests | |
env: | |
COMPOSE_FILE: ./docker/docker-compose.suite-ci.yml | |
## Tells Cypress where is the index of application | |
BASE_URL: https://dev.suite.sldev.cz/suite-web/ | |
## reporter url | |
TRACK_SUITE_URL: https://track-suite-ff9ad9f5b4f6.herokuapp.com | |
## when debugging or developing tests it does not make sense to have retries, | |
## in other cases retries are useful to avoid occasional failures due to flaky tests | |
ALLOW_RETRY: true | |
TEST_GROUP: ${{ matrix.TEST_GROUP }} | |
CI_JOB_ID: ${{ github.run_id }} | |
CI_COMMIT_SHA: ${{ github.sha }} | |
CI_JOB_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
CI_COMMIT_BRANCH: ${{ steps.extract_branch.outputs.branch }} | |
CI_COMMIT_MESSAGE: ${{ steps.extract_commit_message.outputs.message }} | |
CURRENTS_PROJECT_ID: Og0NOQ | |
CURRENTS_RECORD_KEY: ${{ secrets.CURRENTS_RECORD_KEY }} | |
CURRENTS_CI_BUILD_ID: pr-run-${{github.run_id}} | |
run: | | |
docker compose pull | |
docker compose up -d ${{ matrix.CONTAINERS }} | |
yarn workspace @trezor/suite-desktop-core test:e2e:web --grep=${TEST_GROUP} | |
# - name: Upload logs | |
# run: | | |
# docker cp docker_trezor-user-env-unix_1:/trezor-user-env/logs/debugging.log trezor-user-env-debugging.log || true | |
# docker cp docker_trezor-user-env-unix_1:/trezor-user-env/logs/emulator_bridge.log tenv-emulator-bridge-debugging.log || true | |
# docker cp docker_trezor-user-env-unix_1:/trezor-user-env/docker/version.txt trezor-user-env-version.txt || true | |
# - name: Upload artifacts | |
# # this will run the upload artifacts even if the previous steps failed (e.g. tests failed). It wont run if the workflow was cancelled. | |
# if: ${{ ! cancelled() }} | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# name: test-artifacts-${{ matrix.TEST_GROUP }} | |
# path: | | |
# ./packages/suite-web/e2e/snapshots | |
# ./packages/suite-web/e2e/screenshots | |
# ./packages/suite-web/e2e/videos | |
# download-snapshots.sh | |
# trezor-user-env-debugging.log | |
# tenv-emulator-bridge-debugging.log | |
# trezor-user-env-version.txt |