diff --git a/lib/modules/manager/gitlabci-include/common.spec.ts b/lib/modules/manager/gitlabci-include/common.spec.ts deleted file mode 100644 index da66940cf4ad2a1e02ef9c405a06c683288867cb..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gitlabci-include/common.spec.ts +++ /dev/null @@ -1,61 +0,0 @@ -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); - }); - }); -}); diff --git a/lib/modules/manager/gitlabci-include/common.ts b/lib/modules/manager/gitlabci-include/common.ts deleted file mode 100644 index 7aefb628e62d00320ab6a13382cb764e292ed396..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gitlabci-include/common.ts +++ /dev/null @@ -1,34 +0,0 @@ -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); -} diff --git a/lib/modules/manager/gitlabci-include/extract.ts b/lib/modules/manager/gitlabci-include/extract.ts index 78c84dd0e9dabd1fd07d13f5d882235b72192eaa..2cc369e78c513ff00c227f80306c29e4e974b0d6 100644 --- a/lib/modules/manager/gitlabci-include/extract.ts +++ b/lib/modules/manager/gitlabci-include/extract.ts @@ -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, diff --git a/lib/modules/manager/gitlabci/common.spec.ts b/lib/modules/manager/gitlabci/common.spec.ts index d40f202d265f111ad034d1fc95c72bf0255d6479..5000b3ccb8458764dc034df27419e76f0db7e5bf 100644 --- a/lib/modules/manager/gitlabci/common.spec.ts +++ b/lib/modules/manager/gitlabci/common.spec.ts @@ -1,9 +1,46 @@ -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); + }); + }); }); diff --git a/lib/modules/manager/gitlabci/common.ts b/lib/modules/manager/gitlabci/common.ts index 4c7b4c4b92368d4fd637684be7df19cb6a11e91a..7aefb628e62d00320ab6a13382cb764e292ed396 100644 --- a/lib/modules/manager/gitlabci/common.ts +++ b/lib/modules/manager/gitlabci/common.ts @@ -1,5 +1,31 @@ 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,