From 0c5c8e8825eb9ef2e25a6683e51ef3fe4a3a317f Mon Sep 17 00:00:00 2001 From: Joshua Kuestersteffen Date: Thu, 18 Apr 2024 09:41:22 -0500 Subject: [PATCH] fix(#38): switch from `docker-compose` to `docker compose` (#37) --- Dockerfile | 2 +- src/docker-compose-cli.js | 6 ++-- test/e2e/install.spec.js | 7 ++--- test/e2e/startup.spec.js | 4 +-- test/e2e/upgrade.spec.js | 14 +++------ test/unit/docker-compose-cli.spec.js | 43 ++++++++++++++-------------- 6 files changed, 35 insertions(+), 41 deletions(-) diff --git a/Dockerfile b/Dockerfile index def443f..4bf5dff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM node:16-alpine3.15 -RUN apk --no-cache add docker docker-compose +RUN apk --no-cache add docker docker-cli-compose COPY . /app RUN cd app && npm ci --omit=dev ENTRYPOINT ["node", "/app/src/index.js"] diff --git a/src/docker-compose-cli.js b/src/docker-compose-cli.js index 92cafc0..366ce53 100644 --- a/src/docker-compose-cli.js +++ b/src/docker-compose-cli.js @@ -1,6 +1,7 @@ const childProcess = require('child_process'); -const DOCKER_COMPOSE_CLI = 'docker-compose'; +const DOCKER_CLI = 'docker'; +const COMPOSE_ARG = 'compose'; const RATE_EXCEEDED = 'Rate exceeded'; const isRateExceededError = (err) => err && err.message && err.message.includes(RATE_EXCEEDED); @@ -10,13 +11,14 @@ const composeCommand = (filePaths, ...params) => { filePaths = Array.isArray(filePaths) ? filePaths : [filePaths]; const args = [ + COMPOSE_ARG, ...['-p', CHT_COMPOSE_PROJECT_NAME], ...filePaths.map(filePath => (['-f', filePath])), ...params.filter(param => param).map(param => param.split(' ')), ].flat(); return new Promise((resolve, reject) => { - const proc = childProcess.spawn(DOCKER_COMPOSE_CLI, args, { stdio: ['ignore', 'pipe', 'pipe'] }); + const proc = childProcess.spawn(DOCKER_CLI, args, { stdio: ['ignore', 'pipe', 'pipe'] }); proc.on('error', (err) => reject(err)); let err = ''; diff --git a/test/e2e/install.spec.js b/test/e2e/install.spec.js index ec91738..c369ced 100644 --- a/test/e2e/install.spec.js +++ b/test/e2e/install.spec.js @@ -106,11 +106,8 @@ describe('install', () => { 'one-two.yml': await utils.setVersion('one-two.yml', '13.0.0', false), })).to.be.rejected; expect(response.error).to.equal(true); - expect(response.reason).to.include( - 'manifest for localhost:5000/upgrade/one:13.0.0 not found: manifest unknown: manifest unknown' - ); - expect(response.reason).to.include( - 'manifest for localhost:5000/upgrade/two:13.0.0 not found: manifest unknown: manifest unknown' + expect(response.reason).to.match( + /manifest for localhost:5000\/upgrade\/(one|two):13.0.0 not found: manifest unknown: manifest unknown/ ); await expect(utils.getServiceVersion('one-two.yml', 'one')).to.be.rejected; diff --git a/test/e2e/startup.spec.js b/test/e2e/startup.spec.js index f319543..66234b1 100644 --- a/test/e2e/startup.spec.js +++ b/test/e2e/startup.spec.js @@ -65,8 +65,8 @@ describe('start up', () => { const result = await expect(utils.startContainers()).to.be.rejected; expect(result.error).to.equal(true); - expect(result.reason).to.include( - 'manifest for localhost:5000/upgrade/one:10.0.0 not found: manifest unknown: manifest unknown' + expect(result.reason).to.match( + /manifest for localhost:5000\/upgrade\/(one|two):10.0.0 not found: manifest unknown: manifest unknown/ ); await utils.setVersion('one-two.yml', '2.0.0'); diff --git a/test/e2e/upgrade.spec.js b/test/e2e/upgrade.spec.js index 0e1c4ca..2547001 100644 --- a/test/e2e/upgrade.spec.js +++ b/test/e2e/upgrade.spec.js @@ -153,11 +153,8 @@ describe('upgrade', () => { 'one-two.yml': await utils.setVersion('one-two.yml', '13.0.0', false), })).to.be.rejected; expect(response.error).to.equal(true); - expect(response.reason).to.include( - 'manifest for localhost:5000/upgrade/one:13.0.0 not found: manifest unknown: manifest unknown' - ); - expect(response.reason).to.include( - 'manifest for localhost:5000/upgrade/two:13.0.0 not found: manifest unknown: manifest unknown' + expect(response.reason).to.match( + /manifest for localhost:5000\/upgrade\/(one|two):13.0.0 not found: manifest unknown: manifest unknown/ ); expect(await utils.getServiceVersion('one-two.yml', 'one')).to.equal('1.0.0'); @@ -173,11 +170,8 @@ describe('upgrade', () => { 'one-two.yml': await utils.setVersion('one-two.yml', '13.0.0', false), })).to.be.rejected; expect(response.error).to.equal(true); - expect(response.reason).to.include( - 'manifest for localhost:5000/upgrade/one:13.0.0 not found: manifest unknown: manifest unknown' - ); - expect(response.reason).to.include( - 'manifest for localhost:5000/upgrade/two:13.0.0 not found: manifest unknown: manifest unknown' + expect(response.reason).to.match( + /manifest for localhost:5000\/upgrade\/(one|two):13.0.0 not found: manifest unknown: manifest unknown/ ); expect(await utils.getServiceVersion('one-two.yml', 'one')).to.equal('2.0.0'); diff --git a/test/unit/docker-compose-cli.spec.js b/test/unit/docker-compose-cli.spec.js index 3c4c495..03f16a8 100644 --- a/test/unit/docker-compose-cli.spec.js +++ b/test/unit/docker-compose-cli.spec.js @@ -33,8 +33,8 @@ describe('docker-compose cli', () => { expect(childProcess.spawn.callCount).to.equal(1); expect(childProcess.spawn.args[0]).to.deep.equal([ - 'docker-compose', - [ '-p', 'cht', '-f', filename, 'config' ], + 'docker', + [ 'compose', '-p', 'cht', '-f', filename, 'config' ], { stdio: ['ignore', 'pipe', 'pipe'] }, ]); expect(spawnedProcess.events).to.have.keys(['error', 'exit']); @@ -50,8 +50,8 @@ describe('docker-compose cli', () => { expect(childProcess.spawn.callCount).to.equal(1); expect(childProcess.spawn.args[0]).to.deep.equal([ - 'docker-compose', - [ '-p', 'cht','-f', filename, 'config' ], + 'docker', + [ 'compose', '-p', 'cht','-f', filename, 'config' ], { stdio: ['ignore', 'pipe', 'pipe'] }, ]); expect(spawnedProcess.events).to.have.keys(['error', 'exit']); @@ -67,8 +67,8 @@ describe('docker-compose cli', () => { expect(childProcess.spawn.callCount).to.equal(1); expect(childProcess.spawn.args[0]).to.deep.equal([ - 'docker-compose', - [ '-p', 'cht','-f', filename, 'config' ], + 'docker', + [ 'compose', '-p', 'cht','-f', filename, 'config' ], { stdio: ['ignore', 'pipe', 'pipe'] }, ]); expect(spawnedProcess.events).to.have.keys(['error', 'exit']); @@ -79,7 +79,7 @@ describe('docker-compose cli', () => { }); describe('up', () => { - it('should call docker-compose cli with correct params', async () => { + it('should call docker compose cli with correct params', async () => { const filename = 'path/to/filename.yml'; sinon.spy(console, 'log'); @@ -87,8 +87,8 @@ describe('docker-compose cli', () => { expect(childProcess.spawn.callCount).to.equal(1); expect(childProcess.spawn.args[0]).to.deep.equal([ - 'docker-compose', - [ '-p', 'cht', '-f', filename, 'up', '-d', '--remove-orphans' ], + 'docker', + [ 'compose', '-p', 'cht', '-f', filename, 'up', '-d', '--remove-orphans' ], { stdio: ['ignore', 'pipe', 'pipe'] }, ]); expect(spawnedProcess.events).to.have.keys(['error', 'exit']); @@ -110,8 +110,9 @@ describe('docker-compose cli', () => { expect(childProcess.spawn.callCount).to.equal(1); expect(childProcess.spawn.args[0]).to.deep.equal([ - 'docker-compose', + 'docker', [ + 'compose', '-p', 'somerandomname', '-f', 'path/to/file1.yml', '-f', 'path/to/file2.yml', @@ -137,8 +138,8 @@ describe('docker-compose cli', () => { expect(childProcess.spawn.callCount).to.equal(1); expect(childProcess.spawn.args[0]).to.deep.equal([ - 'docker-compose', - [ '-p', 'cht', '-f', filename, 'up', '-d', '--remove-orphans' ], + 'docker', + [ 'compose', '-p', 'cht', '-f', filename, 'up', '-d', '--remove-orphans' ], { stdio: ['ignore', 'pipe', 'pipe'] }, ]); expect(spawnedProcess.events).to.have.keys(['error', 'exit']); @@ -152,8 +153,8 @@ describe('docker-compose cli', () => { expect(childProcess.spawn.callCount).to.equal(1); expect(childProcess.spawn.args[0]).to.deep.equal([ - 'docker-compose', - [ '-p', 'cht', '-f', filename, 'up', '-d', '--remove-orphans' ], + 'docker', + [ 'compose', '-p', 'cht', '-f', filename, 'up', '-d', '--remove-orphans' ], { stdio: ['ignore', 'pipe', 'pipe'] }, ]); expect(spawnedProcess.events).to.have.keys(['error', 'exit']); @@ -166,7 +167,7 @@ describe('docker-compose cli', () => { }); describe('pull', () => { - it('should call docker-compose cli with correct params', async () => { + it('should call docker compose cli with correct params', async () => { const filename = 'path/to/file.yml'; sinon.spy(console, 'log'); @@ -174,8 +175,8 @@ describe('docker-compose cli', () => { expect(childProcess.spawn.callCount).to.equal(1); expect(childProcess.spawn.args[0]).to.deep.equal([ - 'docker-compose', - [ '-p', 'cht', '-f', filename, 'pull' ], + 'docker', + [ 'compose', '-p', 'cht', '-f', filename, 'pull' ], { stdio: ['ignore', 'pipe', 'pipe'] }, ]); expect(spawnedProcess.events).to.have.keys(['error', 'exit']); @@ -245,8 +246,8 @@ describe('docker-compose cli', () => { expect(childProcess.spawn.callCount).to.equal(1); expect(childProcess.spawn.args[0]).to.deep.equal([ - 'docker-compose', - [ '-p', 'cht', '-f', filename, 'pull' ], + 'docker', + [ 'compose', '-p', 'cht', '-f', filename, 'pull' ], { stdio: ['ignore', 'pipe', 'pipe'] }, ]); expect(spawnedProcess.events).to.have.keys(['error', 'exit']); @@ -260,8 +261,8 @@ describe('docker-compose cli', () => { expect(childProcess.spawn.callCount).to.equal(1); expect(childProcess.spawn.args[0]).to.deep.equal([ - 'docker-compose', - [ '-p', 'cht', '-f', filename, 'up', '-d', '--remove-orphans' ], + 'docker', + [ 'compose', '-p', 'cht', '-f', filename, 'up', '-d', '--remove-orphans' ], { stdio: ['ignore', 'pipe', 'pipe'] }, ]); expect(spawnedProcess.events).to.have.keys(['error', 'exit']);