Builds started failing after build image update

Hello.

Yesterday (oct 18), my builds started failing with
YN0018: │ ethereumjs-abi@https://github.com/ethereumjs/ethereumjs-abi.git#commit=ee3994657fa7a427238e6ba92a84d0b529bbcde0: The remote archive doesn't match the expected checksum being the cause for terminating the build.

The build failures seem to coincide with an update of netlify’s build image, which went from:

build-image version: 9289b698a503f132b265bd089ab40ce1d6f9e65e (focal)
build-image tag: v4.12.0
buildbot version: 2510ae842d7cc96532da2c05a74ba836f3e7f056

to

build-image version: d05976bd3309b73a86eaa327bf80e105ff13f5e4 (focal)
build-image tag: v4.13.0
buildbot version: 3a000de5d3727998f3297394596d287d7e49aecd

This is not related to any changes to my codebase which i proved by creating a new deploy preview from a new branch based off one whose deploy preview was working before, in other words, the same code in 2 branches, one has a passing deploy preview, the other one doesn’t, only the time when they were deployed differentiate them.
It’s not just with deploy previews though, production deploys fail identically.

Site name: sandclock.netlify.app
Deploy URL: Netlify App
Deploy ID: 63510e0594c76900928be2cb

Context: PR#386: replace-fixed-number@HEAD
Deployment Type: Deployment with Git
Last Broken Deploy URL: Netlify App
Last Successful Deploy URL: Netlify App

I have also tried setting a specific YARN_VERSION env var to use the version I’m using locally, but the build still fails the same way.

Additionally, I’ve googled the aforementioned error, and found this issue ethereumjs-abi fails to install (also seems deprecated), but I’m not sure what I can do on my side. I did try re-installing my dependencies locally, but I don’t get this error, and yarn.lock doesn’t get updated either.

Here’s the build log with the env var NETLIFY_BUILD_DEBUG set to true, which I believe includes the build settings.

10:54:24 AM: Build ready to start
10:54:26 AM: build-image version: d05976bd3309b73a86eaa327bf80e105ff13f5e4 (focal)
10:54:26 AM: build-image tag: v4.13.0
10:54:26 AM: buildbot version: 3a000de5d3727998f3297394596d287d7e49aecd
10:54:26 AM: Fetching cached dependencies
10:54:26 AM: Starting to download cache of 260.8MB
10:54:29 AM: Finished downloading cache in 2.412234569s
10:54:29 AM: Starting to extract cache
10:54:37 AM: Finished extracting cache in 8.060555899s
10:54:37 AM: Finished fetching cache in 10.545243001s
10:54:37 AM: Starting to prepare the repo for build
10:54:37 AM: Preparing Git Reference pull/394/head
10:54:38 AM: Parsing package.json dependencies
10:54:39 AM:

​❯ Initial build environment
baseRelDir: true
branch: replace-fixed-number-deploy-test
context: deploy-preview
cwd: /opt/build/repo
featureFlags: []
mode: buildbot
repositoryRoot: /opt/build/repo
siteId: 1179c02d-537a-412a-91ec-5cd6c50a795c

❯ UI build settings
baseRelDir: true
build:
  command: yarn build
  environment:
    - CI
    - NETLIFY_BUILD_DEBUG
    - NETLIFY_GRAPH_TOKEN
    - ONEGRAPH_AUTHLIFY_TOKEN
    - REACT_APP_ALCHEMY_MAINNET_KEY
    - REACT_APP_BACKEND_URL
    - REACT_APP_ENV
    - REACT_APP_SENTRY_DSN
    - REVIEW_ID
    - SENTRY_DSN_NETLIFY
  publish: build

❯ Resolved build environment
branch: replace-fixed-number-deploy-test
buildDir: /opt/build/repo
context: deploy-preview
env: []
​
❯ Resolved config
build:
  command: yarn build
  commandOrigin: ui
  environment:
    - CI
    - NETLIFY_BUILD_DEBUG
    - NETLIFY_GRAPH_TOKEN
    - ONEGRAPH_AUTHLIFY_TOKEN
    - REACT_APP_ALCHEMY_MAINNET_KEY
    - REACT_APP_BACKEND_URL
    - REACT_APP_ENV
    - REACT_APP_SENTRY_DSN
    - REVIEW_ID
    - SENTRY_DSN_NETLIFY
  publish: /opt/build/repo/build
  publishOrigin: ui
functionsDirectory: /opt/build/repo/netlify/functions

10:54:39 AM: Different functions path detected, going to use the one specified in the Netlify configuration file: 'netlify/functions' versus '' in the Netlify UI
10:54:39 AM: Starting build script
10:54:39 AM: Installing dependencies
10:54:39 AM: Python version set to 2.7
10:54:40 AM: Started restoring cached node version
10:54:41 AM: Finished restoring cached node version
10:54:41 AM: Attempting node version 'v16.13.1' from .nvmrc
10:54:41 AM: v16.13.1 is already installed.
10:54:41 AM: Now using node v16.13.1 (npm v8.1.2)
10:54:41 AM: Enabling node corepack
10:54:41 AM: Started restoring cached build plugins
10:54:41 AM: Finished restoring cached build plugins
10:54:41 AM: Attempting ruby version 2.7.2, read from environment
10:54:42 AM: Using ruby version 2.7.2
10:54:42 AM: Using PHP version 8.0
10:54:42 AM: Started restoring cached yarn cache
10:54:42 AM: Finished restoring cached yarn cache
10:54:43 AM: Installing yarn at version 1.22.10
10:54:44 AM: Preparing yarn@1.22.10 for immediate activation...
10:54:44 AM: No yarn workspaces detected
10:54:44 AM: Started restoring cached node modules
10:54:44 AM: Finished restoring cached node modules
10:54:45 AM: Installing NPM modules using Yarn version 3.0.2
10:54:45 AM: ➤ YN0050: The cache-folder option has been deprecated; use rc settings instead
10:54:45 AM: ➤ YN0000: ┌ Resolution step
10:54:46 AM: 
➤ YN0002: │ @endemolshinegroup/cosmiconfig-typescript-loader@npm:3.0.2 [d81cd] doesn't provide typescript (pdeb33), requested by ts-node
➤ YN0002: │ dashboard-frontend@workspace:. doesn't provide @babel/core (pf9602), requested by @babel/eslint-parser
➤ YN0002: │ dashboard-frontend@workspace:. doesn't provide @babel/core (pdac81), requested by @babel/preset-react
➤ YN0002: │ dashboard-frontend@workspace:. doesn't provide @testing-library/dom (p3e796), requested by @testing-library/user-event
➤ YN0060: │ dashboard-frontend@workspace:. provides graphql (pdbc8c) with version 16.3.0, which doesn't satisfy what @graphql-codegen/typed-document-node and some of its descendants request
➤ YN0002: │ eslint-config-airbnb-typescript@npm:14.0.2 [ea834] doesn't provide eslint (p3002e), requested by eslint-config-airbnb-base
➤ YN0002: │ eslint-config-airbnb-typescript@npm:14.0.2 [ea834] doesn't provide eslint-plugin-import (p4e97a), requested by eslint-config-airbnb-base
➤ YN0002: │ eth-block-tracker@npm:4.4.3 doesn't provide @babel/core (p2eb50), requested by @babel/plugin-transform-runtime
➤ YN0002: │ react-dev-utils@npm:11.0.4 doesn't provide typescript (p79ddf), requested by fork-ts-checker-webpack-plugin
➤ YN0002: │ react-dev-utils@npm:11.0.4 doesn't provide webpack (p2af19), requested by fork-ts-checker-webpack-plugin
➤ YN0002: │ react-resizable@npm:3.0.4 [ea834] doesn't provide react-dom (p00777), requested by react-draggable
➤ YN0000: │ Some peer dependencies are incorrectly met; run yarn explain peer-requirements <hash> for details, where <hash> is the six-letter p-prefixed code
10:54:46 AM: ➤ YN0000: └ Completed in 0s 323ms
10:54:46 AM: ➤ YN0000: ┌ Fetch step
10:54:53 AM: ➤ YN0000: │ /tmp/xfs-c90744c0 STDOUT Packing ethereumjs-abi@https://github.com/ethereumjs/ethereumjs-abi.git#commit=ee3994657fa7a427238e6ba92a84d0b529bbcde0 from sources
10:54:53 AM: ➤ YN0000: │ /tmp/xfs-c90744c0 STDOUT No package manager configuration detected; defaulting to Yarn
10:54:53 AM: ➤ YN0000: │ /tmp/xfs-c90744c0 STDOUT
10:54:53 AM: ➤ YN0000: │ /tmp/xfs-c90744c0 STDOUT yarn pack v1.22.10
10:54:53 AM: ➤ YN0000: │ /tmp/xfs-c90744c0 STDOUT success Wrote tarball to "/tmp/xfs-c90744c0/package.tgz".
10:54:53 AM: ➤ YN0000: │ /tmp/xfs-c90744c0 STDOUT Done in 0.18s.
10:54:54 AM: ➤ YN0000: │ /tmp/xfs-4023538c STDOUT Packing ethereumjs-abi@https://github.com/ethereumjs/ethereumjs-abi.git#commit=ee3994657fa7a427238e6ba92a84d0b529bbcde0 from sources
10:54:54 AM: ➤ YN0000: │ /tmp/xfs-4023538c STDOUT No package manager configuration detected; defaulting to Yarn
10:54:54 AM: ➤ YN0000: │ /tmp/xfs-4023538c STDOUT
10:54:55 AM: ➤ YN0000: │ /tmp/xfs-4023538c STDOUT yarn pack v1.22.10
10:54:55 AM: ➤ YN0000: │ /tmp/xfs-4023538c STDOUT success Wrote tarball to "/tmp/xfs-4023538c/package.tgz".
10:54:55 AM: ➤ YN0000: │ /tmp/xfs-4023538c STDOUT Done in 0.16s.
10:54:55 AM: ➤ YN0018: │ ethereumjs-abi@https://github.com/ethereumjs/ethereumjs-abi.git#commit=ee3994657fa7a427238e6ba92a84d0b529bbcde0: The remote archive doesn't match the expected checksum
10:55:36 AM: ➤ YN0013: │ 6 packages were already cached, 2430 had to be fetched
10:55:36 AM: ➤ YN0000: └ Completed in 50s 418ms
10:55:36 AM: ➤ YN0000: Failed with errors in 50s 837ms
10:55:37 AM: Error during Yarn install
10:55:37 AM: Build was terminated: Build script returned non-zero exit code: 1
10:55:37 AM: Creating deploy upload records
10:55:37 AM: Failing build: Failed to build site
10:55:37 AM: Failed during stage 'building site': Build script returned non-zero exit code: 1 (https://ntl.fyi/exit-code-1)
10:55:37 AM: Finished processing build request in 1m11.249932485s

Hey @azevedo , we are looking into this but we need a bit of additional info. Can you confirm if npm works or not? That will help us narrow down what might be going on here.

hello.

I’m not using npm, so I’m not sure what and how you want me to confirm. Can you please expand on that?

In the meantime I worked around the issue by updating some dependencies and ended up removing that particular ethereumjs-abi dependency which was causing the issue.

Anyway, it would be nice to understand what was causing this issue and how to fix it.

I’m getting this too, for example in this deploy

Is there a way to use a previous build-image tag? It would be great if I could temporarily switch to v4.12.0

The help section Build image selection seems to imply it’s possible, but I can’t figure it out.

Although all new Netlify sites use a default build image, you can select from multiple images with different operating system and software versions. You might choose a different build image to meet a software requirement for your build tool, to try out experimental pre-release build features, or to keep up-to-date with the included operating system environment. Build image selection also enables Netlify to release breaking changes into the build image while allowing you to accommodate those changes with time to upgrade.

Emphasis mine. I like the justification, but is it currently possible?

To change the build image for a site, go to Site settings > Build & deploy > Continuous Deployment > Build image selection, and select the build image you would like to use. Our buildbot will use this image for all production deploys, branch deploys, and Deploy Previews.

I only have a choice between Xenial and Focal, and it does not allow me to select Xenial. Ideally I could set a parameter in netlify.toml to select the build version in case the latest one is failing.

This could be related to a bug in Yarn: [Bug] YN0018 in github actions when using TypeScript · Issue #1142 · yarnpkg/berry · GitHub

Regarding not being able to select Xenial, it has been disabled so people migrate to the new build image before it’s deprecated.

This could be related to a bug in Yarn: [Bug] YN0018 in github actions when using TypeScript · Issue #1142 · yarnpkg/berry · GitHub

Hmm I successfully deployed a week prior with the same version of Yarn. I’m not so clear on what is going on in the issue you linked, but I did try upgrading to a few newer Yarn versions, all to no avail.

The solution for me was similar to @azevedo 's. I copied the source of the repo whose checksum was failing into my project, so it doesn’t need to include that external resource anymore.

Regarding not being able to select Xenial, it has been disabled so people migrate to the new build image before it’s deprecated.

Right, I understand that Xenial will be deprecated. But now there is now only one option. That seems to rub up against what’s written in Netlify’s documentation. It would have been helpful in this situation to be able to choose another version of Focal because while the bug may reside with Yarn, something about build image v4.13.0 caused that bug to start presenting itself.

I’m having the exact same issue. I’m using wagmi and that has the dependency ethereumjs-abi. Could you explain how you got it to work? I would prefer to keep using wagmi if possible. How did you remove ethereumjs-abi as a dependency?

And I found a solution.

If I added this to my package.json

,
“resolutions”: {
“eth-sig-util”: “3.0.1”
},

I forced the package that was using the deprecated dependency to update, and all was good.