Skip to content
Snippets Groups Projects
Unverified Commit 62569836 authored by Florian Greinacher's avatar Florian Greinacher Committed by GitHub
Browse files

refactor(manager): move some logic from gitlabci-include to gitlabci manager (#26722)

parent fdb4be83
No related branches found
No related tags found
No related merge requests found
import { Fixtures } from '../../../../test/fixtures';
import { parseSingleYaml } from '../../../util/yaml';
import type { GitlabPipeline } from '../gitlabci/types';
import { replaceReferenceTags } from '../gitlabci/utils';
import {
filterIncludeFromGitlabPipeline,
isGitlabIncludeLocal,
isGitlabIncludeProject,
isNonEmptyObject,
} from './common';
const yamlFileMultiConfig = Fixtures.get('gitlab-ci.1.yaml');
// TODO: use schema (#9610)
const pipeline = parseSingleYaml<GitlabPipeline>(
replaceReferenceTags(yamlFileMultiConfig),
);
const includeLocal = { local: 'something' };
const includeProject = { project: 'something' };
describe('modules/manager/gitlabci-include/common', () => {
describe('filterIncludeFromGitlabPipeline()', () => {
it('returns GitlabPipeline without top level include key', () => {
expect(pipeline).toHaveProperty('include');
const filtered_pipeline = filterIncludeFromGitlabPipeline(pipeline);
expect(filtered_pipeline).not.toHaveProperty('include');
expect(filtered_pipeline).toEqual({
script: [null, null],
});
});
});
describe('isGitlabIncludeLocal()', () => {
it('returns true if GitlabInclude is GitlabIncludeLocal', () => {
expect(isGitlabIncludeLocal(includeLocal)).toBe(true);
});
it('returns false if GitlabInclude is not GitlabIncludeLocal', () => {
expect(isGitlabIncludeLocal(includeProject)).toBe(false);
});
});
describe('isGitlabIncludeProject()', () => {
it('returns true if GitlabInclude is GitlabIncludeProject', () => {
expect(isGitlabIncludeProject(includeProject)).toBe(true);
});
it('returns false if GitlabInclude is not GitlabIncludeProject', () => {
expect(isGitlabIncludeProject(includeLocal)).toBe(false);
});
});
describe('isNonEmptyObject()', () => {
it('returns true if not empty', () => {
expect(isNonEmptyObject({ attribute1: 1 })).toBe(true);
});
it('returns false if empty', () => {
expect(isNonEmptyObject({})).toBe(false);
});
});
});
import is from '@sindresorhus/is';
import type {
GitlabInclude,
GitlabIncludeLocal,
GitlabIncludeProject,
GitlabPipeline,
} from '../gitlabci/types';
export function isNonEmptyObject(obj: any): boolean {
return is.object(obj) && Object.keys(obj).length !== 0;
}
export function filterIncludeFromGitlabPipeline(
pipeline: GitlabPipeline,
): GitlabPipeline {
const pipeline_without_include: GitlabPipeline = {};
for (const key of Object.keys(pipeline).filter((key) => key !== 'include')) {
const pipeline_key = key as keyof typeof pipeline;
pipeline_without_include[pipeline_key] = pipeline[pipeline_key];
}
return pipeline_without_include;
}
export function isGitlabIncludeProject(
include: GitlabInclude,
): include is GitlabIncludeProject {
return !is.undefined((include as GitlabIncludeProject).project);
}
export function isGitlabIncludeLocal(
include: GitlabInclude,
): include is GitlabIncludeLocal {
return !is.undefined((include as GitlabIncludeLocal).local);
}
......@@ -4,6 +4,11 @@ import { logger } from '../../../logger';
import { regEx } from '../../../util/regex';
import { parseSingleYaml } from '../../../util/yaml';
import { GitlabTagsDatasource } from '../../datasource/gitlab-tags';
import {
filterIncludeFromGitlabPipeline,
isGitlabIncludeProject,
isNonEmptyObject,
} from '../gitlabci/common';
import type {
GitlabInclude,
GitlabIncludeProject,
......@@ -11,11 +16,6 @@ import type {
} from '../gitlabci/types';
import { replaceReferenceTags } from '../gitlabci/utils';
import type { PackageDependency, PackageFileContent } from '../types';
import {
filterIncludeFromGitlabPipeline,
isGitlabIncludeProject,
isNonEmptyObject,
} from './common';
function extractDepFromIncludeFile(
includeObj: GitlabIncludeProject,
......
import { isGitlabIncludeLocal } from './common';
import { codeBlock } from 'common-tags';
import { parseSingleYaml } from '../../../util/yaml';
import type { GitlabPipeline } from '../gitlabci/types';
import { replaceReferenceTags } from '../gitlabci/utils';
import {
filterIncludeFromGitlabPipeline,
isGitlabIncludeLocal,
isGitlabIncludeProject,
isNonEmptyObject,
} from './common';
// TODO: use schema (#9610)
const pipeline = parseSingleYaml<GitlabPipeline>(
replaceReferenceTags(codeBlock`
include:
- project: mikebryant/include-source-example
file: /template.yaml
ref: 1.0.0
- project: mikebryant/include-source-example2
file: /template.yaml
ref: master
- {"project":"mikebryant/include-source-example3", "file": "/template.yaml",}
- {}
script:
- !reference [.setup, script]
- !reference [arbitrary job name with space and no starting dot, nested1, nested2, nested3]`),
);
const includeLocal = { local: 'something' };
const includeProject = { project: 'something' };
describe('modules/manager/gitlabci/common', () => {
describe('filterIncludeFromGitlabPipeline()', () => {
it('returns GitlabPipeline without top level include key', () => {
expect(pipeline).toHaveProperty('include');
const filtered_pipeline = filterIncludeFromGitlabPipeline(pipeline);
expect(filtered_pipeline).not.toHaveProperty('include');
expect(filtered_pipeline).toEqual({
script: [null, null],
});
});
});
describe('isGitlabIncludeLocal()', () => {
it('returns true if GitlabInclude is GitlabIncludeLocal', () => {
expect(isGitlabIncludeLocal(includeLocal)).toBe(true);
......@@ -13,4 +50,24 @@ describe('modules/manager/gitlabci/common', () => {
expect(isGitlabIncludeLocal(includeProject)).toBe(false);
});
});
describe('isGitlabIncludeProject()', () => {
it('returns true if GitlabInclude is GitlabIncludeProject', () => {
expect(isGitlabIncludeProject(includeProject)).toBe(true);
});
it('returns false if GitlabInclude is not GitlabIncludeProject', () => {
expect(isGitlabIncludeProject(includeLocal)).toBe(false);
});
});
describe('isNonEmptyObject()', () => {
it('returns true if not empty', () => {
expect(isNonEmptyObject({ attribute1: 1 })).toBe(true);
});
it('returns false if empty', () => {
expect(isNonEmptyObject({})).toBe(false);
});
});
});
import is from '@sindresorhus/is';
import type { GitlabInclude, GitlabIncludeLocal } from '../gitlabci/types';
import type {
GitlabInclude,
GitlabIncludeLocal,
GitlabIncludeProject,
GitlabPipeline,
} from '../gitlabci/types';
export function isNonEmptyObject(obj: any): boolean {
return is.object(obj) && Object.keys(obj).length !== 0;
}
export function filterIncludeFromGitlabPipeline(
pipeline: GitlabPipeline,
): GitlabPipeline {
const pipeline_without_include: GitlabPipeline = {};
for (const key of Object.keys(pipeline).filter((key) => key !== 'include')) {
const pipeline_key = key as keyof typeof pipeline;
pipeline_without_include[pipeline_key] = pipeline[pipeline_key];
}
return pipeline_without_include;
}
export function isGitlabIncludeProject(
include: GitlabInclude,
): include is GitlabIncludeProject {
return !is.undefined((include as GitlabIncludeProject).project);
}
export function isGitlabIncludeLocal(
include: GitlabInclude,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment