From e1ac4fe85d88f360dc2e19febfd71120485e8b62 Mon Sep 17 00:00:00 2001 From: krassowski Date: Thu, 12 Aug 2021 23:56:31 +0100 Subject: [PATCH] Wait for confirmation of getting logged in as suggested in https://github.com/npm/npm/issues/11320#issuecomment-301383026 --- buildutils/src/local-repository.ts | 33 ++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/buildutils/src/local-repository.ts b/buildutils/src/local-repository.ts index 14b9094756ef..f832e4d6fe0b 100644 --- a/buildutils/src/local-repository.ts +++ b/buildutils/src/local-repository.ts @@ -132,10 +132,39 @@ packages: const pass = 'bar'; const email = 'foo@bar.com'; console.log('Logging in'); - child_process.execSync(`npm login -e ${email} -r ${local_registry}`, { - input: `${user}\n${pass}\n${email}\n` + const loginPs = child_process.spawn( + 'npm', + `login -e ${email} -r ${local_registry}`.split(' ') + ); + + const loggedIn = new Promise((accept, reject) => { + loginPs.stdout.on('data', (chunk: string) => { + const data = Buffer.from(chunk, 'utf-8').toString(); + console.log('debug:', data); + switch (data) { + case 'Username:': + loginPs.stdin.write(user + '\n'); + break; + case 'Password:': + loginPs.stdin.write(pass + '\n'); + break; + case 'Email': + loginPs.stdin.write(email + '\n'); + break; + } + if (data.indexOf('Logged in as') !== -1) { + console.log('debug: matched'); + loginPs.stdin.end(); + accept(); + } + }); + loginPs.on('error', error => reject(error)); + loginPs.on('close', () => accept()); }); + await loggedIn; + loginPs.kill(); + console.log('Running in', out_dir); ps.exit(0); }