Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(docker-compose): support docker-compose.yml version 1 #6596

Merged
merged 5 commits into from Jun 27, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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