From 0915cf4e426feb06618d6e264239bf8f67b3c278 Mon Sep 17 00:00:00 2001 From: Kris <605420+krzysu@users.noreply.github.com> Date: Wed, 13 Nov 2024 21:39:04 +0100 Subject: [PATCH] fix: CI workflow cache issues (#7384) --- .github/workflows/build.yml | 435 +++++++++--------- .../test/integration/resolver.test.ts | 2 +- 2 files changed, 208 insertions(+), 229 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b8c0f6647fd..81ce725b842 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,136 +28,107 @@ jobs: - run: yarn build:cjs - uses: actions/cache/save@v4 with: - path: ./ - key: web3-${{ matrix.node }}-${{github.sha}} + path: ./ + key: web3-${{ matrix.node }}-${{ github.sha }} build-esm: name: Build ESM needs: build runs-on: ubuntu-latest steps: - - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: actions/cache/restore@v4 - with: - path: ./ - key: web3-18-${{github.sha}} - - run: yarn build:esm + - uses: actions/setup-node@v4 + with: + node-version: 18 + - uses: actions/cache/restore@v4 + with: + path: ./ + key: web3-18-${{ github.sha }} + - run: yarn build:esm + build-types: name: Build Types needs: build runs-on: ubuntu-latest steps: - - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: actions/cache/restore@v4 - with: - path: ./ - key: web3-18-${{github.sha}} - - run: yarn build:types + - uses: actions/setup-node@v4 + with: + node-version: 18 + - uses: actions/cache/restore@v4 + with: + path: ./ + key: web3-18-${{ github.sha }} + - run: yarn build:types + lint: name: Lint needs: build runs-on: ubuntu-latest steps: - - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: actions/cache/restore@v4 - with: - path: ./ - key: web3-18-${{github.sha}} - - run: npx ts-node scripts/init.ts - - name: Restore eslint caches - uses: actions/cache/restore@v4 - with: - path: | - packages/web3/.eslintcache - packages/web3-core/.eslintcache - packages/web3-eth/.eslintcache - packages/web3-eth-abi/.eslintcache - packages/web3-eth-accounts/.eslintcache - packages/web3-eth-contract/.eslintcache - packages/web3-eth-ens/.eslintcache - packages/web3-eth-iban/.eslintcache - packages/web3-eth-personal/.eslintcache - packages/web3-net/.eslintcache - packages/web3-providers-http/.eslintcache - packages/web3-providers-ws/.eslintcache - packages/web3-rpc-methods/.eslintcache - packages/web3-types/.eslintcache - packages/web3-utils/.eslintcache - packages/web3-validator/.eslintcache - tools/web3-plugin-example/.eslintcache - key: ${{ runner.os }}-eslintcache - - - run: yarn lint - - run: gh cache delete "${{ runner.os }}-eslintcache" - if: github.event_name == 'push' && github.ref == 'refs/heads/4.x' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Save eslint caches - if: github.event_name == 'push' && github.ref == 'refs/heads/4.x' - uses: actions/cache/save@v4 - with: - path: | - packages/web3/.eslintcache - packages/web3-core/.eslintcache - packages/web3-eth/.eslintcache - packages/web3-eth-abi/.eslintcache - packages/web3-eth-accounts/.eslintcache - packages/web3-eth-contract/.eslintcache - packages/web3-eth-ens/.eslintcache - packages/web3-eth-iban/.eslintcache - packages/web3-eth-personal/.eslintcache - packages/web3-net/.eslintcache - packages/web3-providers-http/.eslintcache - packages/web3-providers-ws/.eslintcache - packages/web3-rpc-methods/.eslintcache - packages/web3-types/.eslintcache - packages/web3-utils/.eslintcache - packages/web3-validator/.eslintcache - tools/web3-plugin-example/.eslintcache - key: ${{ runner.os }}-eslintcache + - uses: actions/setup-node@v4 + with: + node-version: 18 + - uses: actions/cache/restore@v4 + with: + path: ./ + key: web3-18-${{ github.sha }} + - run: npx ts-node scripts/init.ts + - uses: actions/cache@v4 + with: + path: | + packages/web3/.eslintcache + packages/web3-core/.eslintcache + packages/web3-eth/.eslintcache + packages/web3-eth-abi/.eslintcache + packages/web3-eth-accounts/.eslintcache + packages/web3-eth-contract/.eslintcache + packages/web3-eth-ens/.eslintcache + packages/web3-eth-iban/.eslintcache + packages/web3-eth-personal/.eslintcache + packages/web3-net/.eslintcache + packages/web3-providers-http/.eslintcache + packages/web3-providers-ws/.eslintcache + packages/web3-rpc-methods/.eslintcache + packages/web3-types/.eslintcache + packages/web3-utils/.eslintcache + packages/web3-validator/.eslintcache + tools/web3-plugin-example/.eslintcache + key: ${{ runner.os }}-eslintcache-${{ github.ref_name }} + - run: yarn lint build-web: name: Build Web needs: build runs-on: ubuntu-latest steps: - - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: actions/cache/restore@v4 - with: - path: ./ - key: web3-18-${{github.sha}} - - name: Restore default branch stats - if: github.event_name != 'push' - uses: actions/cache/restore@v4 - with: - path: packages/web3/dist/4.x.json - key: web3-bundle-stats-4x-${{github.event.pull_request.base.sha}} - - run: yarn build:web:analyze - env: - STATS_FILE: ${{ github.ref_name }}.json - - name: Compare bundle stats - uses: github/webpack-bundlesize-compare-action@v1.8.2 - continue-on-error: true - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - current-stats-json-path: "packages/web3/dist/${{ github.ref_name }}.json" - base-stats-json-path: "packages/web3/dist/4.x.json" - - name: Cache default branch stats - uses: actions/cache/save@v4 - if: github.event_name == 'push' && github.ref == 'refs/heads/4.x' - with: - path: packages/web3/dist/${{ github.ref_name }}.json - key: web3-bundle-stats-4x-${{github.sha}} - + - uses: actions/setup-node@v4 + with: + node-version: 18 + - uses: actions/cache/restore@v4 + with: + path: ./ + key: web3-18-${{ github.sha }} + - name: Restore default branch stats + if: github.event_name != 'push' + uses: actions/cache/restore@v4 + with: + path: packages/web3/dist/4.x.json + key: web3-bundle-stats-4x-${{ github.event.pull_request.base.sha }} + - run: yarn build:web:analyze + env: + STATS_FILE: ${{ github.ref_name }}.json + - name: Compare bundle stats + uses: github/webpack-bundlesize-compare-action@v1.8.2 + continue-on-error: true + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + current-stats-json-path: 'packages/web3/dist/${{ github.ref_name }}.json' + base-stats-json-path: 'packages/web3/dist/4.x.json' + - name: Cache default branch stats + uses: actions/cache/save@v4 + if: github.event_name == 'push' && github.ref == 'refs/heads/4.x' + with: + path: packages/web3/dist/${{ github.ref_name }}.json + key: web3-bundle-stats-4x-${{ github.sha }} unit: name: Unit Tests @@ -173,8 +144,8 @@ jobs: node-version: ${{ matrix.node }} - uses: actions/cache/restore@v4 with: - path: ./ - key: web3-${{ matrix.node }}-${{github.sha}} + path: ./ + key: web3-${{ matrix.node }}-${{ github.sha }} - run: yarn test:unit continue-on-error: ${{ matrix.node == '20.17.0' }} - name: Upload coverage to Codecov @@ -189,18 +160,18 @@ jobs: needs: build runs-on: ubuntu-latest strategy: - fail-fast: false + fail-fast: false steps: - - uses: actions/setup-node@v3 - with: - node-version: 18 - - uses: actions/cache/restore@v4 - with: - path: ./ - key: web3-18-${{github.sha}} - - run: npx hardhat node & - - run: yarn test:e2e:hardhat:http - shell: bash + - uses: actions/setup-node@v3 + with: + node-version: 18 + - uses: actions/cache/restore@v4 + with: + path: ./ + key: web3-18-${{ github.sha }} + - run: npx hardhat node & + - run: yarn test:e2e:hardhat:http + shell: bash e2e-geth: name: Integration # (geth with HTTP, IPC & WS) @@ -212,44 +183,44 @@ jobs: strategy: fail-fast: false matrix: - mode: [ 'ipc', 'ws', 'http' ] + mode: ['ipc', 'ws', 'http'] steps: - - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: actions/cache/restore@v4 - with: - path: ./ - key: web3-18-${{github.sha}} - - run: yarn test:e2e:geth:${{ matrix.mode }} - shell: bash + - uses: actions/setup-node@v4 + with: + node-version: 18 + - uses: actions/cache/restore@v4 + with: + path: ./ + key: web3-18-${{ github.sha }} + - run: yarn test:e2e:geth:${{ matrix.mode }} + shell: bash e2e-browsers: name: End-to-End hardhat:ws needs: build runs-on: ubuntu-latest strategy: - fail-fast: false - matrix: - browser: ['electron', 'chrome', 'firefox'] + fail-fast: false + matrix: + browser: ['electron', 'chrome', 'firefox'] steps: - - uses: actions/setup-node@v3 - with: - node-version: 18 - - uses: browser-actions/setup-firefox@latest - if: matrix.browser == 'firefox' - - uses: actions/cache/restore@v4 - with: - path: ./ - key: web3-18-${{github.sha}} - - run: npx hardhat node & - - run: npm install --no-package-lock --no-save --force cypress - - name: Cypress run - uses: cypress-io/github-action@v4 - with: - install: false - command: yarn test:e2e:hardhat:ws:${{ matrix.browser }} - cache-key: node-v18-on-${{ matrix.browser }}-hash-${{ hashFiles('yarn.lock') }} + - uses: actions/setup-node@v3 + with: + node-version: 18 + - uses: browser-actions/setup-firefox@latest + if: matrix.browser == 'firefox' + - uses: actions/cache/restore@v4 + with: + path: ./ + key: web3-18-${{ github.sha }} + - run: npx hardhat node & + - run: npm install --no-package-lock --no-save --force cypress + - name: Cypress run + uses: cypress-io/github-action@v4 + with: + install: false + command: yarn test:e2e:hardhat:ws:${{ matrix.browser }} + cache-key: node-v18-on-${{ matrix.browser }}-hash-${{ hashFiles('yarn.lock') }} deploy-docs: name: Docs CloudFlare Deploy @@ -259,85 +230,93 @@ jobs: contents: read deployments: write steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - cache: yarn - node-version: '18' - - uses: actions/cache/restore@v4 - with: - path: ./ - key: web3-18-${{github.sha}} - - run: yarn install --ignore-scripts - - run: yarn build:cjs - - run: yarn run build:docs - - name: Publish to Cloudflare Pages - uses: cloudflare/pages-action@v1 - with: - apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} - accountId: 2238a825c5aca59233eab1f221f7aefb - projectName: web3-js-docs - directory: ./docs/build - gitHubToken: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + cache: yarn + node-version: '18' + - uses: actions/cache/restore@v4 + with: + path: ./ + key: web3-18-${{ github.sha }} + - run: yarn install --ignore-scripts + - run: yarn build:cjs + - run: yarn run build:docs + - name: Publish to Cloudflare Pages + uses: cloudflare/pages-action@v1 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: 2238a825c5aca59233eab1f221f7aefb + projectName: web3-js-docs + directory: ./docs/build + gitHubToken: ${{ secrets.GITHUB_TOKEN }} + benchmark: name: Benchmark Tests needs: build runs-on: ubuntu-latest steps: - - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: actions/cache/restore@v4 - with: - path: ./ - key: web3-18-${{github.sha}} - # @octokit/core not supported on node 16, so I can't add it to the package.json - - run: npm install --no-package-lock --no-save --force @octokit/core@5.1.0 - - name: Restore main branch benchmark data - uses: actions/cache/restore@v4 - with: - path: web3-benchmark-main.json - key: ${{ runner.os }}-web3-benchmark-main.json - - run: yarn test:benchmark - - name: Compare benchmark result and make comment - uses: benchmark-action/github-action-benchmark@v1 - with: - # What benchmark tool the output.txt came from - tool: 'benchmarkjs' - # Where the output from the benchmark tool is stored - output-file-path: benchmark-data.txt - # Where the previous data file is stored - external-data-json-path: web3-benchmark-main.json - # Workflow will fail when an alert happens - fail-on-alert: false - # GitHub API token to make a commit comment - github-token: ${{ secrets.GITHUB_TOKEN }} - # Enable alert commit comment - comment-always: true - save-data-file: false - # copy comment from commit to Pull Request - - run: node scripts/copyCommitCommentToPrComment.js ${{ secrets.GITHUB_TOKEN }} ${{github.event.pull_request.head.sha}} ${{github.event.number}} - - name: Compare benchmark result and fail if threshold is reached - uses: benchmark-action/github-action-benchmark@v1 - with: - # What benchmark tool the output.txt came from - tool: 'benchmarkjs' - # Where the output from the benchmark tool is stored - output-file-path: benchmark-data.txt - # Where the previous data file is stored - external-data-json-path: web3-benchmark-main.json - # Workflow will fail when an alert happens - fail-on-alert: true - # Enable alert commit comment - alert-threshold: '200%' - comment-always: false - - run: gh cache delete "${{ runner.os }}-web3-benchmark-main.json" - if: github.event_name == 'push' && github.ref == 'refs/heads/4.x' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Save main branch benchmark data - uses: actions/cache/save@v4 - if: github.event_name == 'push' && github.ref == 'refs/heads/4.x' - with: - path: web3-benchmark-main.json - key: ${{ runner.os }}-web3-benchmark-main.json + - uses: actions/setup-node@v4 + with: + node-version: 18 + - uses: actions/cache/restore@v4 + with: + path: ./ + key: web3-18-${{ github.sha }} + # @octokit/core not supported on node 16, so I can't add it to the package.json + - run: npm install --no-package-lock --no-save --force @octokit/core@5.1.0 + - name: Restore main branch benchmark data + uses: actions/cache/restore@v4 + with: + path: web3-benchmark-main.json + key: ${{ runner.os }}-web3-benchmark-main + - run: yarn test:benchmark + - name: Compare benchmark result and make comment + uses: benchmark-action/github-action-benchmark@v1 + with: + # What benchmark tool the output.txt came from + tool: 'benchmarkjs' + # Where the output from the benchmark tool is stored + output-file-path: benchmark-data.txt + # Where the previous data file is stored + external-data-json-path: web3-benchmark-main.json + # Workflow will fail when an alert happens + fail-on-alert: false + # GitHub API token to make a commit comment + github-token: ${{ secrets.GITHUB_TOKEN }} + # Enable alert commit comment + comment-always: true + save-data-file: false + # copy comment from commit to Pull Request + - run: node scripts/copyCommitCommentToPrComment.js ${{ secrets.GITHUB_TOKEN }} ${{ github.event.pull_request.head.sha }} ${{ github.event.number }} + - name: Compare benchmark result and fail if threshold is reached + uses: benchmark-action/github-action-benchmark@v1 + with: + # What benchmark tool the output.txt came from + tool: 'benchmarkjs' + # Where the output from the benchmark tool is stored + output-file-path: benchmark-data.txt + # Where the previous data file is stored + external-data-json-path: web3-benchmark-main.json + # Workflow will fail when an alert happens + fail-on-alert: true + # Enable alert commit comment + alert-threshold: '200%' + comment-always: false + - name: Check and delete cache if it exists + run: | + if gh cache list | grep -q "${{ runner.os }}-web3-benchmark-main"; then + echo "Cache found. Deleting..." + gh cache delete "${{ runner.os }}-web3-benchmark-main" + else + echo "No matching cache found. Skipping delete." + fi + if: github.event_name == 'push' && github.ref == 'refs/heads/4.x' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Save main branch benchmark data + uses: actions/cache/save@v4 + if: github.event_name == 'push' && github.ref == 'refs/heads/4.x' + with: + path: web3-benchmark-main.json + key: ${{ runner.os }}-web3-benchmark-main diff --git a/packages/web3-eth-ens/test/integration/resolver.test.ts b/packages/web3-eth-ens/test/integration/resolver.test.ts index f6b2e648991..a79003d009c 100644 --- a/packages/web3-eth-ens/test/integration/resolver.test.ts +++ b/packages/web3-eth-ens/test/integration/resolver.test.ts @@ -42,7 +42,7 @@ import { ENSRegistryBytecode } from '../fixtures/ens/bytecode/ENSRegistryBytecod import { NameWrapperBytecode } from '../fixtures/ens/bytecode/NameWrapperBytecode'; import { PublicResolverBytecode } from '../fixtures/ens/bytecode/PublicResolverBytecode'; -jest.setTimeout(25000); +jest.setTimeout(35000); describe('ens', () => { let registry: Contract; let resolver: Contract;