refactor: colocate error message element with tx input #7230
Workflow file for this run
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: Build, Test | |
on: | |
pull_request: | |
branches: ["master"] | |
types: | |
- opened | |
- edited | |
- synchronize | |
push: | |
branches: ["master"] | |
workflow_dispatch: | |
merge_group: | |
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency | |
concurrency: | |
# github.workflow: name of the workflow | |
# github.event.pull_request.number || github.ref: pull request number or branch name if not a pull request | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
env: | |
NEXT_PUBLIC_INFURA_KEY: ${{ secrets.NEXT_PUBLIC_INFURA_KEY }} | |
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID }} | |
THE_GRAPH_NETWORK_API_KEY: ${{ secrets.THE_GRAPH_NETWORK_API_KEY }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
IS_HOTFIX: ${{ contains(github.event.pull_request.title, 'hotfix') }} | |
jobs: | |
check-is-hotfix: | |
name: Check if PR is hotfix | |
runs-on: ubuntu-latest | |
outputs: | |
is_hotfix: ${{ steps.check-is-hotfix.outputs.is_hotfix }} | |
steps: | |
- name: Make IS_HOTFIX env var global | |
id: check-is-hotfix | |
run: | | |
echo "is_hotfix=${{ env.IS_HOTFIX }}" >> $GITHUB_OUTPUT | |
check-files: | |
name: Check files | |
outputs: | |
run_tests: ${{ steps.check-files.outputs.run_tests }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
# run tests only if specific files are changed | |
- name: Check modified files | |
id: check-files | |
run: | | |
echo "=============== list modified files ===============" | |
files=`git diff --name-only HEAD^ HEAD` | |
echo "$files" | |
for file in $files; do | |
if [[ $file != packages/* ]] && ! [[ $file =~ .*\.(lock|yml)$ ]]; then | |
# if not in packages/ and does not end with .lock or .yml | |
echo "run_tests=false" >> $GITHUB_OUTPUT | |
elif [[ $file == .github/ISSUE_TEMPLATE/* ]]; then | |
echo "run_tests=false" >> $GITHUB_OUTPUT | |
elif [[ $file =~ .*\.(md|svg|png|webp|gif|txt)$ ]]; then | |
echo "run_tests=false" >> $GITHUB_OUTPUT | |
else | |
echo "run_tests=true" >> $GITHUB_OUTPUT | |
break | |
fi | |
done | |
shell: bash | |
build: | |
name: "Build" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install node_modules | |
uses: OffchainLabs/actions/node-modules/install@main | |
- name: Build | |
run: yarn build | |
env: | |
NEXT_PUBLIC_IS_E2E_TEST: true | |
NEXT_PUBLIC_INFURA_KEY: ${{ secrets.NEXT_PUBLIC_INFURA_KEY }} | |
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID }} | |
THE_GRAPH_NETWORK_API_KEY: ${{ secrets.THE_GRAPH_NETWORK_API_KEY }} | |
- name: Cache build artifacts | |
uses: ./.github/actions/build-artifacts/cache | |
test-ui: | |
name: "Test UI" | |
runs-on: ubuntu-latest | |
needs: [build, check-files] | |
if: needs.check-files.outputs.run_tests == 'true' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install node_modules | |
uses: OffchainLabs/actions/node-modules/install@main | |
- name: Restore build artifacts | |
uses: ./.github/actions/build-artifacts/restore | |
- name: Start UI and Test | |
run: yarn start-server-and-test 'start' http://127.0.0.1:3000 'yarn test:ci' | |
audit: | |
name: "Audit" | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install node_modules | |
uses: OffchainLabs/actions/node-modules/install@main | |
- name: Run audit | |
run: yarn audit:ci | |
check-formatting: | |
name: "Check Formatting" | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install node_modules | |
uses: OffchainLabs/actions/node-modules/install@main | |
- name: Check formatting with Prettier | |
run: yarn prettier:check | |
- name: Check formatting with ESLint | |
run: yarn lint | |
load-e2e-files: | |
name: "Load e2e files" | |
runs-on: ubuntu-latest | |
needs: [check-is-hotfix] | |
if: needs.check-is-hotfix.outputs.is_hotfix == 'false' | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.e2eFiles }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- id: set-matrix | |
run: | | |
content=`cat packages/arb-token-bridge-ui/tests/e2e/specfiles.json | jq --compact-output .` | |
echo "e2eFiles=$content" >> $GITHUB_OUTPUT | |
# based on https://github.com/Synthetixio/synpress/blob/dev/.github/workflows/e2e_cypress-action.yml | |
test-e2e: | |
name: "Test E2E" | |
runs-on: ubuntu-latest | |
needs: [build, check-files, check-is-hotfix, load-e2e-files] | |
if: needs.check-files.outputs.run_tests == 'true' && needs.check-is-hotfix.outputs.is_hotfix == 'false' | |
strategy: | |
fail-fast: false # If one test fails, let the other tests run | |
matrix: | |
tests: | |
${{ fromJson(needs.load-e2e-files.outputs.matrix) }} | |
steps: | |
- name: Free Disk Space (Ubuntu) | |
uses: jlumbroso/free-disk-space@main | |
with: | |
# this might remove tools that are actually needed, | |
# if set to "true" but frees about 6 GB | |
tool-cache: false | |
# all of these default to true, but feel free to set to | |
# "false" if necessary for your workflow | |
android: true | |
dotnet: true | |
haskell: true | |
large-packages: true | |
docker-images: false | |
swap-storage: true | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install node_modules | |
uses: OffchainLabs/actions/node-modules/install@main | |
- name: Restore build artifacts | |
uses: ./.github/actions/build-artifacts/restore | |
- name: Install cypress | |
run: yarn cypress install | |
- name: Install linux dependencies | |
run: | | |
sudo apt-get install --no-install-recommends -y \ | |
fluxbox \ | |
xvfb | |
- name: Run xvfb and fluxbox | |
run: | | |
Xvfb :0 -screen 0 1366x768x24 -listen tcp -ac & | |
fluxbox & | |
env: | |
DISPLAY: :0.0 | |
- name: Run nitro testnode | |
uses: OffchainLabs/actions/run-nitro-test-node@a20a76172ce524832ac897bef2fa10a62ed81c29 | |
with: | |
nitro-testnode-ref: aab133aceadec2e622f15fa438f6327e3165392d | |
l3-node: false | |
no-l3-token-bridge: true | |
- name: Run e2e tests via cypress-io/github-action | |
uses: cypress-io/github-action@8d3918616d8ac34caa2b49afc8b408b6a872a6f5 # [email protected] | |
with: | |
start: yarn start | |
command: yarn test:e2e --browser chromium | |
wait-on: http://127.0.0.1:3000 | |
wait-on-timeout: 120 | |
spec: ./packages/arb-token-bridge-ui/tests/e2e/specs/* | |
env: | |
DISPLAY: :0.0 | |
TEST_FILE: ${{ matrix.tests.file }} | |
SKIP_METAMASK_SETUP: true | |
CYPRESS_RECORD_VIDEO: ${{ matrix.tests.recordVideo }} | |
PRIVATE_KEY_CUSTOM: ${{ secrets.E2E_PRIVATE_KEY }} | |
PRIVATE_KEY_USER: ${{ secrets.E2E_PRIVATE_KEY_USER }} | |
NEXT_PUBLIC_INFURA_KEY: ${{ secrets.NEXT_PUBLIC_INFURA_KEY }} | |
NEXT_PUBLIC_LOCAL_ETHEREUM_RPC_URL: http://127.0.0.1:8545 | |
NEXT_PUBLIC_LOCAL_ARBITRUM_RPC_URL: http://127.0.0.1:8547 | |
- name: Archive e2e artifacts | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: e2e-artifacts-pull-request-${{ github.event.pull_request.number }}-commit-${{ github.sha }} | |
path: | | |
./packages/arb-token-bridge-ui/cypress/videos | |
./packages/arb-token-bridge-ui/cypress/screenshots | |
continue-on-error: true | |
- name: Throw error if tests failed | |
if: steps.e2e-run.outputs.status == 'failed' | |
run: exit 1 | |
test-e2e-success: | |
name: "Test E2E Success" | |
runs-on: ubuntu-latest | |
needs: [test-e2e] | |
if: always() | |
steps: | |
- name: E2E Succeeded | |
if: needs.test-e2e.result == 'success' || needs.test-e2e.result == 'skipped' | |
run: echo "nice" | |
- name: E2E Failed | |
if: needs.test-e2e.result != 'success' && needs.test-e2e.result != 'skipped' | |
run: exit 1 | |
clean-up: | |
name: "Clean Up" | |
runs-on: ubuntu-latest | |
needs: [test-ui] | |
if: always() | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install gh-actions-cache | |
run: gh extension install actions/gh-actions-cache | |
- name: Delete build artifacts | |
run: | | |
if gh actions-cache list | grep build-artifacts-${{ github.run_id }}-${{ github.run_attempt }} | |
then | |
gh actions-cache delete build-artifacts-${{ github.run_id }}-${{ github.run_attempt }} --confirm | |
fi | |
shell: bash |