Build commands exit with code 0 but site doesn't finish deploying and times out

I have a react front-end and a node.js back-end which seem to build successfully, but then the build bot times out.

Site:
https://sharp-roentgen-464a66.netlify.app/

Build Settings:

Build Log:

3:20:45 PM: Build ready to start
3:20:47 PM: build-image version: 3031d4c9e432fd7016f6279fc9ad706f9205d845
3:20:47 PM: build-image tag: v3.3.17
3:20:47 PM: buildbot version: 1f35b3abd6e2bf5230d8edf68072840fdec1513f
3:20:47 PM: Fetching cached dependencies
3:20:47 PM: Failed to fetch cache, continuing with build
3:20:47 PM: Starting to prepare the repo for build
3:20:47 PM: No cached dependencies found. Cloning fresh repo
3:20:47 PM: git clone https://github.com/ryanxgraham/itg
3:20:48 PM: Preparing Git Reference refs/heads/master
3:20:52 PM: Starting build script
3:20:52 PM: Installing dependencies
3:20:52 PM: Python version set to 2.7
3:20:53 PM: Downloading and installing node v14.2.0...
3:20:53 PM: Downloading https://nodejs.org/dist/v14.2.0/node-v14.2.0-linux-x64.tar.xz...
3:20:54 PM: Computing checksum with sha256sum
3:20:54 PM: Checksums matched!
3:20:58 PM: Now using node v14.2.0 (npm v6.14.4)
3:20:58 PM: Started restoring cached build plugins
3:20:58 PM: Finished restoring cached build plugins
3:20:58 PM: Attempting ruby version 2.7.1, read from environment
3:21:00 PM: Using ruby version 2.7.1
3:21:00 PM: Using PHP version 5.6
3:21:00 PM: 5.2 is already installed.
3:21:00 PM: Using Swift version 5.2
3:21:00 PM: Started restoring cached node modules
3:21:00 PM: Finished restoring cached node modules
3:21:00 PM: Installing NPM modules using NPM version 6.14.4
3:21:06 PM: npm notice created a lockfile as package-lock.json. You should commit this file.
3:21:06 PM: added 54 packages from 44 contributors and audited 54 packages in 5.028s
3:21:06 PM: 3 packages are looking for funding
3:21:06 PM:   run `npm fund` for details
3:21:06 PM: found 0 vulnerabilities
3:21:06 PM: NPM modules installed
3:21:07 PM: Started restoring cached go cache
3:21:07 PM: Finished restoring cached go cache
3:21:07 PM: go version go1.14.4 linux/amd64
3:21:07 PM: go version go1.14.4 linux/amd64
3:21:07 PM: Installing missing commands
3:21:07 PM: Verify run directory
3:21:08 PM: ​
3:21:08 PM: ┌─────────────────────────────┐
3:21:08 PM: │        Netlify Build        │
3:21:08 PM: └─────────────────────────────┘
3:21:08 PM: ​
3:21:08 PM: ❯ Version
3:21:08 PM:   @netlify/build 2.0.10
3:21:08 PM: ​
3:21:08 PM: ❯ Flags
3:21:08 PM:   deployId: 5ef3afe9a9fa060007fbd4e6
3:21:08 PM:   mode: buildbot
3:21:08 PM: ​
3:21:08 PM: ❯ Current directory
3:21:08 PM:   /opt/build/repo
3:21:08 PM: ​
3:21:08 PM: ❯ Config file
3:21:08 PM:   No config file was defined: using default values.
3:21:08 PM: ​
3:21:08 PM: ❯ Context
3:21:08 PM:   production
3:21:08 PM: ​
3:21:08 PM: ┌────────────────────────────────┐
3:21:08 PM: │ 1. Build command from settings │
3:21:08 PM: └────────────────────────────────┘
3:21:08 PM: ​
3:21:08 PM: $ npm run prod
3:21:08 PM: > itg@0.1.0 prod /opt/build/repo
3:21:08 PM: > concurrently "npm install" "npm run backendBuild" "npm run frontendBuild"
3:21:09 PM: [1]
3:21:09 PM: [1] > itg@0.1.0 backendBuild /opt/build/repo
3:21:09 PM: [1] > cd backend && npm install && npm run build
3:21:09 PM: [1]
3:21:09 PM: [2]
3:21:09 PM: [2] > itg@0.1.0 frontendBuild /opt/build/repo
3:21:09 PM: [2] > cd frontend && npm install && npm run build
3:21:09 PM: [2]
3:21:11 PM: [0] audited 54 packages in 1.41s
3:21:11 PM: [0]
3:21:11 PM: [0] 3 packages are looking for funding
3:21:11 PM: [0]   run `npm fund` for details
3:21:11 PM: [0]
3:21:11 PM: [0] found 0 vulnerabilities
3:21:11 PM: [0]
3:21:11 PM: [0] npm install exited with code 0
3:21:17 PM: [2] npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
3:21:17 PM: [2] npm WARN deprecated @types/testing-library__dom@7.5.0: This is a stub types definition. testing-library__dom provides its own type definitions, so you do not need this installed.
3:21:18 PM: [2] npm WARN deprecated rollup-plugin-babel@4.4.0: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.
3:21:19 PM: [1] npm WARN deprecated chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
3:21:20 PM: [1] npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
3:21:20 PM: [1] npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
3:21:20 PM: [1] npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
3:21:23 PM: [2] npm WARN deprecated chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
3:21:24 PM: [2] npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
3:21:29 PM: [2] npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
3:21:30 PM: [2] npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
3:21:33 PM: [1]
3:21:33 PM: [1] > nodemon@2.0.4 postinstall /opt/build/repo/backend/node_modules/nodemon
3:21:33 PM: [1] > node bin/postinstall || exit 0
3:21:33 PM: [1]
3:21:33 PM: [1] Love nodemon? You can now support the project via the open collective:
3:21:33 PM: [1]  > https://opencollective.com/nodemon/donate
3:21:33 PM: [1]
3:21:34 PM: [1] npm notice created a lockfile as package-lock.json. You should commit this file.
3:21:34 PM: [1] npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.1.2 (node_modules/chokidar/node_modules/fsevents):
3:21:34 PM: [1] npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
3:21:34 PM: [1] npm WARN notsup Unsupported engine for watchpack-chokidar2@2.0.0: wanted: {"node":"<8.10.0"} (current: {"node":"14.2.0","npm":"6.14.4"})
3:21:34 PM: [1] npm WARN notsup Not compatible with your version of node/npm: watchpack-chokidar2@2.0.0
3:21:34 PM: [1] npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/watchpack-chokidar2/node_modules/chokidar/node_modules/fsevents):
3:21:34 PM: [1] npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
3:21:34 PM: [1] npm WARN The package webpack is included as both a dev and production dependency.
3:21:34 PM: [1]
3:21:34 PM: [1] added 517 packages from 261 contributors and audited 569 packages in 23.34s
3:21:34 PM: [1]
3:21:34 PM: [1] 13 packages are looking for funding
3:21:34 PM: [1]   run `npm fund` for details
3:21:34 PM: [1]
3:21:34 PM: [1] found 0 vulnerabilities
3:21:34 PM: [1]
3:21:35 PM: [1]
3:21:35 PM: [1] > nodetest1@0.0.0 build /opt/build/repo/backend
3:21:35 PM: [1] > webpack --config webpack.config.js
3:21:35 PM: [1]
3:21:35 PM: [1] One CLI for webpack must be installed. These are recommended choices, delivered as separate packages:
3:21:35 PM: [1]  - webpack-cli (https://github.com/webpack/webpack-cli)
3:21:35 PM: [1]    The original webpack full-featured CLI.
3:21:35 PM: [1] We will use "npm" to install the CLI via "npm install -D".
3:21:36 PM: [1] Do you want to install 'webpack-cli' (yes/no): npm WARN deprecated core-js@2.6.11: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.
3:21:38 PM: [2] npm WARN deprecated left-pad@1.3.0: use String.prototype.padStart()
3:22:14 PM: [2]
3:22:14 PM: [2] > core-js@2.6.11 postinstall /opt/build/repo/frontend/node_modules/babel-runtime/node_modules/core-js
3:22:14 PM: [2] > node -e "try{require('./postinstall')}catch(e){}"
3:22:14 PM: [2]
3:22:14 PM: [2] Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!
3:22:14 PM: [2]
3:22:14 PM: [2] The project needs your help! Please consider supporting of core-js on Open Collective or Patreon: 
3:22:14 PM: [2] > https://opencollective.com/core-js 
3:22:14 PM: [2] > https://www.patreon.com/zloirock 
3:22:14 PM: [2]
3:22:14 PM: [2] Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)
3:22:14 PM: [2]
3:22:14 PM: [2]
3:22:14 PM: [2] > core-js@3.6.5 postinstall /opt/build/repo/frontend/node_modules/core-js
3:22:14 PM: [2] > node -e "try{require('./postinstall')}catch(e){}"
3:22:14 PM: [2]
3:22:14 PM: [2]
3:22:14 PM: [2] > core-js-pure@3.6.5 postinstall /opt/build/repo/frontend/node_modules/core-js-pure
3:22:14 PM: [2] > node -e "try{require('./postinstall')}catch(e){}"
3:22:14 PM: [2]
3:22:14 PM: [2]
3:22:14 PM: [2] > ejs@2.7.4 postinstall /opt/build/repo/frontend/node_modules/ejs
3:22:14 PM: [2] > node ./postinstall.js
3:22:14 PM: [2]
3:22:14 PM: [2] Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)
3:22:14 PM: [2]
3:22:15 PM: [2]
3:22:15 PM: [2] > nodemon@2.0.4 postinstall /opt/build/repo/frontend/node_modules/nodemon
3:22:15 PM: [2] > node bin/postinstall || exit 0
3:22:15 PM: [2]
3:22:17 PM: [2] npm notice created a lockfile as package-lock.json. You should commit this file.
3:22:17 PM: [2] npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.1.2 (node_modules/chokidar/node_modules/fsevents):
3:22:17 PM: [2] npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
3:22:17 PM: [2] npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.2 (node_modules/react-scripts/node_modules/fsevents):
3:22:17 PM: [2] npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
3:22:17 PM: [2] npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/jest-haste-map/node_modules/fsevents):
3:22:17 PM: [2] npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
3:22:17 PM: [2] npm WARN notsup Unsupported engine for watchpack-chokidar2@2.0.0: wanted: {"node":"<8.10.0"} (current: {"node":"14.2.0","npm":"6.14.4"})
3:22:17 PM: [2] npm WARN notsup Not compatible with your version of node/npm: watchpack-chokidar2@2.0.0
3:22:17 PM: [2] npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/watchpack-chokidar2/node_modules/chokidar/node_modules/fsevents):
3:22:17 PM: [2] npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
3:22:17 PM: [2] npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/webpack-dev-server/node_modules/chokidar/node_modules/fsevents):
3:22:17 PM: [2] npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
3:22:17 PM: [2] npm WARN tsutils@3.17.1 requires a peer of typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta but none is installed. You must install peer dependencies yourself.
3:22:17 PM: [2]
3:22:17 PM: [2] added 1788 packages from 832 contributors and audited 1794 packages in 66.272s
3:22:18 PM: [2]
3:22:18 PM: [2] 70 packages are looking for funding
3:22:18 PM: [2]   run `npm fund` for details
3:22:18 PM: [2]
3:22:18 PM: [2] found 1 low severity vulnerability
3:22:18 PM: [2]   run `npm audit fix` to fix them, or `npm audit` for details
3:22:18 PM: [2]
3:22:18 PM: [2] > itg-frontend@0.1.0 build /opt/build/repo/frontend
3:22:18 PM: [2] > react-scripts build
3:22:18 PM: [2]
3:22:20 PM: [2] Creating an optimized production build...
3:22:49 PM: [2] Compiled with warnings.
3:22:49 PM: [2] 
3:22:49 PM: [2] ./src/components/SimfileResults.js
3:22:49 PM: [2]   Line 1:17:  'Component' is defined but never used                          no-unused-vars
3:22:49 PM: [2]   Line 10:8:  'List' is defined but never used                               no-unused-vars
3:22:49 PM: [2]   Line 29:5:  String prototype is read only, properties should not be added  no-extend-native
3:22:49 PM: [2]
3:22:49 PM: [2] ./src/reducers/simfileResults.js
3:22:49 PM: [2]   Line 3:10:  'DEFAULT_QUERY_FILTER' is defined but never used  no-unused-vars
3:22:49 PM: [2]   Line 4:8:   'state' is defined but never used                 no-unused-vars
3:22:49 PM: [2]
3:22:49 PM: [2] ./src/components/QueryFilters.js
3:22:49 PM: [2]   Line 6:10:  'queryFilterPropType' is defined but never used  no-unused-vars
3:22:49 PM: [2]   Line 8:10:  'Grid' is defined but never used                 no-unused-vars
3:22:49 PM: [2]
3:22:49 PM: [2] ./src/App.js
3:22:49 PM: [2]   Line 8:8:  'Divider' is defined but never used  no-unused-vars
3:22:49 PM: [2]
3:22:49 PM: [2] Search for the keywords to learn more about each warning.
3:22:49 PM: [2] To ignore, add // eslint-disable-next-line to the line before.
3:22:49 PM: [2]
3:22:49 PM: [2] File sizes after gzip:
3:22:49 PM: [2]
3:22:49 PM: [2]   105.02 KB  build/static/js/2.0bcbe328.chunk.js
3:22:49 PM: [2]   2.52 KB    build/static/js/main.542635e8.chunk.js
3:22:49 PM: [2]   962 B      build/static/css/main.6ad3e531.chunk.css
3:22:49 PM: [2]   778 B      build/static/js/runtime-main.241974cf.js
3:22:49 PM: [2]
3:22:49 PM: [2] The project was built assuming it is hosted at /.
3:22:49 PM: [2] You can control this with the homepage field in your package.json.
3:22:49 PM: [2]
3:22:49 PM: [2] The build folder is ready to be deployed.
3:22:49 PM: [2] You may serve it with a static server:
3:22:49 PM: [2]
3:22:49 PM: [2]   npm install -g serve
3:22:49 PM: [2]   serve -s build
3:22:49 PM: [2]
3:22:49 PM: [2] Find out more about deployment here:
3:22:49 PM: [2]
3:22:49 PM: [2]   bit.ly/CRA-deploy
3:22:49 PM: [2]
3:22:49 PM: [2] npm run frontendBuild exited with code 0
3:50:45 PM: Build exceeded maximum allowed runtime

Hiya @rgraham and sorry to hear about the trouble!

Is it possible that your build leaves lingering processes after it’s done? We require ALL processes to end before we consider the build complete.

If you think you aren’t, and don’t mind me triggering a build, I can while it is running see if there is anything like that blocking your build from finishing; unfortunately I cannot tell after the fact as the build container is immediately destroyed and we don’t have a log of “what was running when that happened”.

Let me know if that’s ok and I’ll take a closer look.