Skip to content
This repository has been archived by the owner on Jul 8, 2024. It is now read-only.

Build script: unhandled errors when attempting to stop previous processes (Windows WSL) #244

Closed
muttoni opened this issue May 11, 2022 · 1 comment
Labels
bug Something isn't working feedback

Comments

@muttoni
Copy link

muttoni commented May 11, 2022

Describe the bug

(summarizing a DM discussion with a community member on Discord)

The npm run dev script has a preliminary step that stops previous running processes. Certain environments like Windows WSL can use different ports (or may not be in use yet), which is causing the script to fail. The startup script should either try/catch or check for port usage first.

See here: https://github.com/onflow/kitty-items/blob/master/.ki-scripts/startup.js#L187

await stopProcess("api", [3000]);
  await stopProcess("web", [3001]);
  await stopProcess("dev-wallet", [8701]);
  await stopProcess("emulator", [8080, 3569]);

it is not finding the ports running and throws and error when it runs the following command. killPortProcess(port)

When those lines are commented out, the user on Windows WSL is able to run the startup script successfully.

To Reproduce
Steps to reproduce the behavior:

On Windows WSL, install and run Kitty Items with npm run dev:testnet

Expected behavior

Startup script should handle and catch errors without failing

Screenshots/Logs/Output

> [email protected] dev:testnet
> npx cross-env CHAIN_ENV=testnet node .ki-scripts/startup.js

:information_source: Stopping previously launched processes...

xargs - 
Usage:
 kill [options] <pid> [...]

Options:
 <pid> [...]            send signal to every <pid> listed
 -<signal>, -s, --signal <signal>
                        specify the <signal> to be sent
 -l, --list=[<signal>]  list all signal names, or convert one to a name
 -L, --table            list all signal names in a nice table

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see kill(1).

node:internal/process/promises:279
            triggerUncaughtException(err, true /* fromPromise */);
            ^

[UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "undefined".] {
  code: 'ERR_UNHANDLED_REJECTION'
}

Environment (Optional - Version, OS, Browser, etc.)

System:
OS: Linux 5.10 Ubuntu 20.04.4 LTS (Focal Fossa)
CPU: (8) x64 Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
Memory: 4.74 GB / 6.08 GB
Container: Yes
Shell: 5.0.17 - /bin/bash
Binaries:
Node: 16.15.0 - ~/.nvm/versions/node/v16.15.0/bin/node
Yarn: 1.22.5 - /mnt/c/Program Files (x86)/Yarn/bin/yarn
npm: 8.5.5 - ~/jacob-build-nft-marketplace/kitty-items/node_modules/.bin/npm
Managers:
Apt: 2.0.6 - /usr/bin/apt
Utilities:
Make: 4.2.1 - /usr/bin/make
GCC: 9.3.0 - /usr/bin/gcc
Git: 2.25.1 - /usr/bin/git
IDEs:
Nano: 4.8 - /usr/bin/nano
VSCode: 1.67.0 - /home/canedy/.vscode-server/bin/57fd6d0195bb9b9d1b49f6da5db789060795de47/bin/remote-cli/code
Vim: 8.1 - /usr/bin/vim
Languages:
Bash: 5.0.17 - /usr/bin/bash
Perl: 5.30.0 - /usr/bin/perl
Python3: 3.8.10 - /usr/bin/python3
Monorepos:
Lerna: 4.0.0

@muttoni muttoni added bug Something isn't working feedback labels May 11, 2022
@janvanessen
Copy link

The error no longer occurs when you add these two try-catch-blocks:

1) Inside stopProcess
https://github.com/onflow/kitty-items/blob/master/.ki-scripts/startup.js#L130-L139

function stopProcess(name, port) {
  return new Promise((resolve, reject) => {
    pm2.stop(name, function (err, result) {
      pm2.delete(name, async function () {

        try {
          await killPortProcess(port);
          resolve();
        } catch (error) {
          reject(error);
        }

      });
    });
  });
}

2) Around stopProcess calls
https://github.com/onflow/kitty-items/blob/master/.ki-scripts/startup.js#L187-L190

  try {
    await stopProcess("api", [3000]);
    await stopProcess("web", [3001]);
    await stopProcess("dev-wallet", [8701]);
    await stopProcess("emulator", [8080, 3569]);
  } catch (error) {
    console.log('There were no previous processes or the processes could not be stopped');
  }

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working feedback
Projects
None yet
Development

No branches or pull requests

3 participants