Skip to content

Commit

Permalink
fix(docker-compose): support docker-compose.yml version 1 (#6596)
Browse files Browse the repository at this point in the history
  • Loading branch information
wolfgang42 committed Jun 27, 2020
1 parent e1ea26e commit ec43556
Show file tree
Hide file tree
Showing 5 changed files with 277 additions and 105 deletions.
171 changes: 75 additions & 96 deletions lib/manager/docker-compose/__fixtures__/docker-compose.1.yml
@@ -1,104 +1,83 @@
version: "3"
services:
redis:
image: quay.io/something/redis:alpine
ports:
- "6379"
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure

redis:
image: quay.io/something/redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: "node:10.0.0"

worker:
image: "node:10.0.0"
db:
image: "postgres:9.4.0"
volumes:
- db-data:/var/lib/postgresql/data
deploy:
placement:
constraints: [node.role == manager]

db:
image: "postgres:9.4.0"
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure

vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: 'dockersamples/examplevotingapp_result:before'
ports:
- 5001:80
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure

result:
image: 'dockersamples/examplevotingapp_result:before'
ports:
- 5001:80
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
votingworker:
image: dockersamples/examplevotingapp_worker
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints: [node.role == manager]

votingworker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints: [node.role == manager]
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]

visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
edplugins:
image: ${IMAGE:-synkodevelopers/edplugins}:${TAG:-latest}

edplugins:
image: ${IMAGE:-synkodevelopers/edplugins}:${TAG:-latest}

debugapp:
image: app-local-debug
build:
context: .
dockerfile: Dockerfile.local

networks:
frontend:
backend:

volumes:
db-data:
debugapp:
image: app-local-debug
build:
context: .
dockerfile: Dockerfile.local
104 changes: 104 additions & 0 deletions lib/manager/docker-compose/__fixtures__/docker-compose.3.yml
@@ -0,0 +1,104 @@
version: "3"
services:

redis:
image: quay.io/something/redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure

worker:
image: "node:10.0.0"

db:
image: "postgres:9.4.0"
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]

vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure

result:
image: 'dockersamples/examplevotingapp_result:before'
ports:
- 5001:80
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure

votingworker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints: [node.role == manager]

visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]

edplugins:
image: ${IMAGE:-synkodevelopers/edplugins}:${TAG:-latest}

debugapp:
image: app-local-debug
build:
context: .
dockerfile: Dockerfile.local

networks:
frontend:
backend:

volumes:
db-data:
70 changes: 69 additions & 1 deletion lib/manager/docker-compose/__snapshots__/extract.spec.ts.snap
@@ -1,6 +1,74 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`lib/manager/docker-compose/extract extractPackageFile() extracts multiple image lines 1`] = `
exports[`lib/manager/docker-compose/extract extractPackageFile() extracts multiple image lines for version 1 1`] = `
Array [
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"currentDigest": undefined,
"currentValue": "alpine",
"datasource": "docker",
"depName": "quay.io/something/redis",
"replaceString": "quay.io/something/redis:alpine",
},
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"commitMessageTopic": "Node.js",
"currentDigest": undefined,
"currentValue": "10.0.0",
"datasource": "docker",
"depName": "node",
"replaceString": "node:10.0.0",
},
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"currentDigest": undefined,
"currentValue": "9.4.0",
"datasource": "docker",
"depName": "postgres",
"replaceString": "postgres:9.4.0",
},
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"currentDigest": undefined,
"currentValue": "before",
"datasource": "docker",
"depName": "dockersamples/examplevotingapp_vote",
"replaceString": "dockersamples/examplevotingapp_vote:before",
},
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"currentDigest": undefined,
"currentValue": "before",
"datasource": "docker",
"depName": "dockersamples/examplevotingapp_result",
"replaceString": "dockersamples/examplevotingapp_result:before",
},
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"currentDigest": undefined,
"currentValue": undefined,
"datasource": "docker",
"depName": "dockersamples/examplevotingapp_worker",
"replaceString": "dockersamples/examplevotingapp_worker",
},
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"currentDigest": undefined,
"currentValue": "stable",
"datasource": "docker",
"depName": "dockersamples/visualizer",
"replaceString": "dockersamples/visualizer:stable",
},
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"datasource": "docker",
"replaceString": "\${IMAGE:-synkodevelopers/edplugins}:\${TAG:-latest}",
"skipReason": "contains-variable",
},
]
`;

exports[`lib/manager/docker-compose/extract extractPackageFile() extracts multiple image lines for version 3 1`] = `
Array [
Object {
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
Expand Down
19 changes: 16 additions & 3 deletions lib/manager/docker-compose/extract.spec.ts
@@ -1,21 +1,34 @@
import { readFileSync } from 'fs';
import { extractPackageFile } from './extract';

const yamlFile = readFileSync(
const yamlFile1 = readFileSync(
'lib/manager/docker-compose/__fixtures__/docker-compose.1.yml',
'utf8'
);

const yamlFile3 = readFileSync(
'lib/manager/docker-compose/__fixtures__/docker-compose.3.yml',
'utf8'
);

describe('lib/manager/docker-compose/extract', () => {
describe('extractPackageFile()', () => {
it('returns null for empty', () => {
expect(extractPackageFile('')).toBeNull();
});
it('returns null for non-object YAML', () => {
expect(extractPackageFile('nothing here')).toBeNull();
});
it('returns null for malformed YAML', () => {
expect(extractPackageFile('nothing here\n:::::::')).toBeNull();
});
it('extracts multiple image lines', () => {
const res = extractPackageFile(yamlFile);
it('extracts multiple image lines for version 1', () => {
const res = extractPackageFile(yamlFile1);
expect(res.deps).toMatchSnapshot();
expect(res.deps).toHaveLength(8);
});
it('extracts multiple image lines for version 3', () => {
const res = extractPackageFile(yamlFile3);
expect(res.deps).toMatchSnapshot();
expect(res.deps).toHaveLength(8);
});
Expand Down

0 comments on commit ec43556

Please sign in to comment.