feat(buildkite): support git-hosted plugins (#13042)

This commit is contained in:
Jack Pierce 2021-12-14 02:14:13 -05:00 committed by GitHub
parent 91a3a971bb
commit c2f713d769
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 17 deletions

View file

@ -8,14 +8,6 @@ steps:
- wait - wait
# Use the app image built above to run concurrent tests
- name: "Docker Test %n"
command: test.sh
parallelism: 25
plugins:
https://github.com/buildkite/plugin-docker-compose#v1.3.2:
run: app
- name: "wrong" - name: "wrong"
command: test.sh command: test.sh
parallelism: 25 parallelism: 25

View file

@ -0,0 +1,6 @@
steps:
- plugins:
- ssh://git@github.company.com/some-org/some-plugin#v3.2.7:
username: abc
- https://github.company.com/some-third-org/some-third-plugin#v0.0.1:
build: app

View file

@ -7,11 +7,6 @@ Array [
"depName": "namespace/docker-compose", "depName": "namespace/docker-compose",
"skipReason": "invalid-version", "skipReason": "invalid-version",
}, },
Object {
"currentValue": "v1.3.2",
"depName": "https://github.com/buildkite/plugin-docker-compose",
"skipReason": "git-plugin",
},
Object { Object {
"currentValue": "v1.3.2", "currentValue": "v1.3.2",
"depName": "github.com/buildkite/plugin-docker-compose", "depName": "github.com/buildkite/plugin-docker-compose",
@ -53,6 +48,27 @@ Array [
] ]
`; `;
exports[`manager/buildkite/extract extractPackageFile() extracts git-based plugins 1`] = `
Array [
Object {
"currentValue": "v3.2.7",
"datasource": "github-tags",
"depName": "some-org/some-plugin",
"registryUrls": Array [
"https://github.company.com",
],
},
Object {
"currentValue": "v0.0.1",
"datasource": "github-tags",
"depName": "some-third-org/some-third-plugin",
"registryUrls": Array [
"https://github.company.com",
],
},
]
`;
exports[`manager/buildkite/extract extractPackageFile() extracts multiple plugins in same file 1`] = ` exports[`manager/buildkite/extract extractPackageFile() extracts multiple plugins in same file 1`] = `
Array [ Array [
Object { Object {

View file

@ -5,6 +5,7 @@ const pipeline1 = loadFixture('pipeline1.yml');
const pipeline2 = loadFixture('pipeline2.yml'); const pipeline2 = loadFixture('pipeline2.yml');
const pipeline3 = loadFixture('pipeline3.yml'); const pipeline3 = loadFixture('pipeline3.yml');
const pipeline4 = loadFixture('pipeline4.yml'); const pipeline4 = loadFixture('pipeline4.yml');
const pipeline5 = loadFixture('pipeline5.yml');
describe('manager/buildkite/extract', () => { describe('manager/buildkite/extract', () => {
describe('extractPackageFile()', () => { describe('extractPackageFile()', () => {
@ -24,12 +25,17 @@ describe('manager/buildkite/extract', () => {
it('adds skipReason', () => { it('adds skipReason', () => {
const res = extractPackageFile(pipeline3).deps; const res = extractPackageFile(pipeline3).deps;
expect(res).toMatchSnapshot(); expect(res).toMatchSnapshot();
expect(res).toHaveLength(3); expect(res).toHaveLength(2);
}); });
it('extracts arrays of plugins', () => { it('extracts arrays of plugins', () => {
const res = extractPackageFile(pipeline4).deps; const res = extractPackageFile(pipeline4).deps;
expect(res).toMatchSnapshot(); expect(res).toMatchSnapshot();
expect(res).toHaveLength(4); expect(res).toHaveLength(4);
}); });
it('extracts git-based plugins', () => {
const res = extractPackageFile(pipeline5).deps;
expect(res).toMatchSnapshot();
expect(res).toHaveLength(2);
});
}); });
}); });

View file

@ -37,9 +37,20 @@ export function extractPackageFile(content: string): PackageFile | null {
logger.trace('depLineMatch'); logger.trace('depLineMatch');
let skipReason: SkipReason; let skipReason: SkipReason;
let repo: string; let repo: string;
if (depName.startsWith('https://') || depName.startsWith('git@')) { const gitPluginMatch = regEx(
logger.debug({ dependency: depName }, 'Skipping git plugin'); /(ssh:\/\/git@|https:\/\/)(?<registry>[^/]+)\/(?<gitPluginName>.*)/
skipReason = SkipReason.GitPlugin; ).exec(depName);
if (gitPluginMatch) {
logger.debug('Examining git plugin');
const { registry, gitPluginName } = gitPluginMatch.groups;
const dep: PackageDependency = {
depName: gitPluginName,
currentValue: currentValue,
registryUrls: ['https://' + registry],
datasource: datasourceGithubTags.id,
};
deps.push(dep);
continue;
} else if (isVersion(currentValue)) { } else if (isVersion(currentValue)) {
const splitName = depName.split('/'); const splitName = depName.split('/');
if (splitName.length === 1) { if (splitName.length === 1) {
@ -76,8 +87,10 @@ export function extractPackageFile(content: string): PackageFile | null {
} catch (err) /* istanbul ignore next */ { } catch (err) /* istanbul ignore next */ {
logger.warn({ err }, 'Error extracting buildkite plugins'); logger.warn({ err }, 'Error extracting buildkite plugins');
} }
if (!deps.length) { if (!deps.length) {
return null; return null;
} }
return { deps }; return { deps };
} }