Skip to content

Commit 33a2e60

Browse files
stefanbuckjosephfrazier
authored andcommitted
Link image name in a Dockerfile (OctoLinker#142)
1 parent c767c53 commit 33a2e60

File tree

6 files changed

+83
-0
lines changed

6 files changed

+83
-0
lines changed

lib/plugins/docker/index.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { DOCKER_FROM } from '../../../packages/helper-grammar-regex-collection/index.js';
2+
import insertLink from '../../insert-link';
3+
4+
export default class Docker {
5+
6+
getPattern() {
7+
return ['Dockerfile'];
8+
}
9+
10+
parseBlob(blob) {
11+
insertLink(blob.el, DOCKER_FROM, {
12+
resolver: 'dockerImage',
13+
image: '$1',
14+
});
15+
}
16+
}

lib/resolver/docker-image.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export default function ({ image }) {
2+
let isOffical = true;
3+
const imageName = image.split(':')[0];
4+
5+
if (image.includes('/')) {
6+
isOffical = false;
7+
}
8+
9+
return [
10+
`https://hub.docker.com/${isOffical ? '_' : 'r'}/${imageName}`,
11+
];
12+
}

lib/resolver/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import gitUrl from './git-url.js';
55
import githubShorthand from './github-shorthand.js';
66
import javascriptUniversal from './javascript-universal.js';
77
import rubyUniversal from './ruby-universal.js';
8+
import dockerImage from './docker-image.js';
89

910
export {
1011
liveResolverQuery,
@@ -14,4 +15,5 @@ export {
1415
gitUrl,
1516
githubShorthand,
1617
rubyUniversal,
18+
dockerImage,
1719
};

packages/helper-grammar-regex-collection/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const GEM = /gem (['"][^'"\s]+['"])/g;
99
// we could just use https://github.com/Homebrew/homebrew-core/
1010
const HOMEBREW = /(?:depends_on|conflicts_with)(?: cask:)? (['"][^'"\s]+['"])/g;
1111
const TYPESCRIPT_REFERENCE = /\/{3}\s?<reference path=(['"][^'"\s]+['"])/g;
12+
const DOCKER_FROM = /FROM\s([^\n]*)/g;
1213

1314
export {
1415
REQUIRE,
@@ -18,4 +19,5 @@ export {
1819
GEM,
1920
HOMEBREW,
2021
TYPESCRIPT_REFERENCE,
22+
DOCKER_FROM,
2123
};

packages/helper-grammar-regex-collection/test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,18 @@ const fixtures = {
126126
'// <reference path="foo" />',
127127
],
128128
},
129+
DOCKER_FROM: {
130+
valid: [
131+
['FROM foo', ['foo']],
132+
['FROM foo:1.2.3', ['foo:1.2.3']],
133+
['FROM foo:1.2.3-alpha', ['foo:1.2.3-alpha']],
134+
['FROM foo/bar', ['foo/bar']],
135+
],
136+
invalid: [
137+
'FROMfoo',
138+
// 'FROM\nfoo',
139+
],
140+
},
129141
};
130142

131143
describe('helper-grammar-regex-collection', () => {

test/resolver/docker-image.test.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import assert from 'assert';
2+
import dockerImage from '../../lib/resolver/docker-image.js';
3+
4+
describe('docker-image', () => {
5+
it('resolves foo to https://hub.docker.com/_/foo', () => {
6+
assert.deepEqual(
7+
dockerImage({ image: 'foo' }),
8+
['https://hub.docker.com/_/foo']
9+
);
10+
});
11+
12+
it('resolves foo:1.2.3 to https://hub.docker.com/_/foo', () => {
13+
assert.deepEqual(
14+
dockerImage({ image: 'foo:1.2.3' }),
15+
['https://hub.docker.com/_/foo']
16+
);
17+
});
18+
19+
it('resolves foo:1.2.3-alpha to https://hub.docker.com/_/foo', () => {
20+
assert.deepEqual(
21+
dockerImage({ image: 'foo:1.2.3-alpha' }),
22+
['https://hub.docker.com/_/foo']
23+
);
24+
});
25+
26+
it('resolves foo/bar to https://hub.docker.com/r/foo/bar', () => {
27+
assert.deepEqual(
28+
dockerImage({ image: 'foo/bar' }),
29+
['https://hub.docker.com/r/foo/bar']
30+
);
31+
});
32+
33+
it('resolves foo/bar:1.2.3 to https://hub.docker.com/r/foo/bar', () => {
34+
assert.deepEqual(
35+
dockerImage({ image: 'foo/bar:1.2.3' }),
36+
['https://hub.docker.com/r/foo/bar']
37+
);
38+
});
39+
});

0 commit comments

Comments
 (0)