diff --git a/src/cli/services/apt.service.spec.ts b/src/cli/services/apt.service.spec.ts index 5a71774c9e..deb5a3d649 100644 --- a/src/cli/services/apt.service.spec.ts +++ b/src/cli/services/apt.service.spec.ts @@ -37,6 +37,14 @@ describe('cli/services/apt.service', () => { mocks.execa.mockRejectedValueOnce(new Error('not installed')); await svc.install('some-pkg'); expect(mocks.execa).toHaveBeenCalledTimes(3); + expect(mocks.execa).toHaveBeenCalledWith('apt-get', ['-qq', 'update'], { + env: { DEBIAN_FRONTEND: 'noninteractive' }, + }); + expect(mocks.execa).toHaveBeenCalledWith( + 'apt-get', + ['-qq', 'install', '-y', 'some-pkg'], + { env: { DEBIAN_FRONTEND: 'noninteractive' } }, + ); expect(mocks.writeFile).not.toHaveBeenCalled(); expect(mocks.rm).not.toHaveBeenCalled(); }); diff --git a/src/cli/services/apt.service.ts b/src/cli/services/apt.service.ts index 5698e68f2f..eedd045083 100644 --- a/src/cli/services/apt.service.ts +++ b/src/cli/services/apt.service.ts @@ -11,7 +11,8 @@ export class AptService { private readonly envSvc!: EnvService; /** - * Installs the packages which are not installed yet, honouring the apt proxy. + * Installs the packages which are not installed yet, honouring the apt + * proxy, running `apt-get` non-interactively. */ async install(...packages: string[]): Promise { const todo: string[] = []; @@ -41,9 +42,11 @@ export class AptService { ); } + const execOptions = { env: { DEBIAN_FRONTEND: 'noninteractive' } }; + try { - await execa('apt-get', ['-qq', 'update']); - await execa('apt-get', ['-qq', 'install', '-y', ...todo]); + await execa('apt-get', ['-qq', 'update'], execOptions); + await execa('apt-get', ['-qq', 'install', '-y', ...todo], execOptions); } finally { if (this.envSvc.aptProxy) { await rm( diff --git a/src/cli/tools/dotnet/index.spec.ts b/src/cli/tools/dotnet/index.spec.ts index ba74b438c3..2d4592a4df 100644 --- a/src/cli/tools/dotnet/index.spec.ts +++ b/src/cli/tools/dotnet/index.spec.ts @@ -196,18 +196,22 @@ describe('cli/tools/dotnet/index', () => { await expect(svc.prepare()).resolves.toBeUndefined(); - expect(execaMock).toHaveBeenCalledWith('apt-get', [ - '-qq', - 'install', - '-y', - 'libc6', - 'libgcc1', - 'libgssapi-krb5-2', - icu, - 'libssl3', - 'libstdc++6', - 'zlib1g', - ]); + expect(execaMock).toHaveBeenCalledWith( + 'apt-get', + [ + '-qq', + 'install', + '-y', + 'libc6', + 'libgcc1', + 'libgssapi-krb5-2', + icu, + 'libssl3', + 'libstdc++6', + 'zlib1g', + ], + { env: { DEBIAN_FRONTEND: 'noninteractive' } }, + ); expect(await fs.readlink(join(envSvc.userHome, '.nuget'))).toBe( join(pathSvc.cachePath, '.nuget'), ); diff --git a/src/cli/tools/git/index.spec.ts b/src/cli/tools/git/index.spec.ts index ec55464580..e49a666236 100644 --- a/src/cli/tools/git/index.spec.ts +++ b/src/cli/tools/git/index.spec.ts @@ -69,12 +69,11 @@ describe('cli/tools/git/index', () => { await expect(svc.install('2.55.0')).resolves.toBeUndefined(); - expect(execaMock).toHaveBeenCalledWith('apt-get', [ - '-qq', - 'install', - '-y', - 'git', - ]); + expect(execaMock).toHaveBeenCalledWith( + 'apt-get', + ['-qq', 'install', '-y', 'git'], + { env: { DEBIAN_FRONTEND: 'noninteractive' } }, + ); }); test('install: coerces a vendor version suffix', async () => { diff --git a/src/cli/tools/php/index.spec.ts b/src/cli/tools/php/index.spec.ts index 7113771108..a624f5e614 100644 --- a/src/cli/tools/php/index.spec.ts +++ b/src/cli/tools/php/index.spec.ts @@ -147,6 +147,7 @@ describe('cli/tools/php/index', () => { expect(execaMock).toHaveBeenCalledWith( 'apt-get', expect.arrayContaining([zip]), + { env: { DEBIAN_FRONTEND: 'noninteractive' } }, ); }); diff --git a/src/cli/tools/python/conan.spec.ts b/src/cli/tools/python/conan.spec.ts index ff7d1576bb..630ff6cf8b 100644 --- a/src/cli/tools/python/conan.spec.ts +++ b/src/cli/tools/python/conan.spec.ts @@ -104,6 +104,7 @@ describe('cli/tools/python/conan', () => { expect(execaMock).toHaveBeenCalledWith( 'apt-get', expect.arrayContaining(['cmake', 'gcc']), + { env: { DEBIAN_FRONTEND: 'noninteractive' } }, ); expect(await fs.readlink(join(envSvc.userHome, '.conan2'))).toBe( join(pathSvc.cachePath, '.conan2'),