Skip to content
Snippets Groups Projects
Unverified Commit 7b21f347 authored by Michael Kriese's avatar Michael Kriese Committed by GitHub
Browse files

fix(terraform): return null for files without deps (#22731)

parent 45c2d13f
No related merge requests found
...@@ -40,6 +40,17 @@ describe('modules/manager/terraform/extract', () => { ...@@ -40,6 +40,17 @@ describe('modules/manager/terraform/extract', () => {
expect(await extractPackageFile('nothing here', '1.tf', {})).toBeNull(); expect(await extractPackageFile('nothing here', '1.tf', {})).toBeNull();
}); });
it('returns null for no deps', async () => {
// ModuleExtractor matches `module` at any position.
const src = codeBlock`
data "sops_file" "secrets" {
source_file = "\${path.module}/secrets.enc.json"
}
`;
expect(await extractPackageFile(src, '1.tf', {})).toBeNull();
});
it('extracts modules', async () => { it('extracts modules', async () => {
const res = await extractPackageFile(modules, 'modules.tf', {}); const res = await extractPackageFile(modules, 'modules.tf', {});
expect(res?.deps).toHaveLength(18); expect(res?.deps).toHaveLength(18);
......
import is from '@sindresorhus/is'; import is from '@sindresorhus/is';
import { logger } from '../../../logger'; import { logger } from '../../../logger';
import type { ExtractConfig, PackageFileContent } from '../types'; import type {
ExtractConfig,
PackageDependency,
PackageFileContent,
} from '../types';
import type { DependencyExtractor } from './base';
import { resourceExtractors } from './extractors'; import { resourceExtractors } from './extractors';
import * as hcl from './hcl'; import * as hcl from './hcl';
import { import {
...@@ -15,7 +20,7 @@ export async function extractPackageFile( ...@@ -15,7 +20,7 @@ export async function extractPackageFile(
): Promise<PackageFileContent | null> { ): Promise<PackageFileContent | null> {
logger.trace({ content }, `terraform.extractPackageFile(${packageFile})`); logger.trace({ content }, `terraform.extractPackageFile(${packageFile})`);
const passedExtractors = []; const passedExtractors: DependencyExtractor[] = [];
for (const extractor of resourceExtractors) { for (const extractor of resourceExtractors) {
if (checkFileContainsDependency(content, extractor.getCheckList())) { if (checkFileContainsDependency(content, extractor.getCheckList())) {
passedExtractors.push(extractor); passedExtractors.push(extractor);
...@@ -36,7 +41,7 @@ export async function extractPackageFile( ...@@ -36,7 +41,7 @@ export async function extractPackageFile(
.toString()}]` .toString()}]`
); );
const dependencies = []; const dependencies: PackageDependency[] = [];
const hclMap = await hcl.parseHCL(content, packageFile); const hclMap = await hcl.parseHCL(content, packageFile);
if (is.nullOrUndefined(hclMap)) { if (is.nullOrUndefined(hclMap)) {
logger.debug({ packageFile }, 'failed to parse HCL file'); logger.debug({ packageFile }, 'failed to parse HCL file');
...@@ -51,5 +56,5 @@ export async function extractPackageFile( ...@@ -51,5 +56,5 @@ export async function extractPackageFile(
} }
dependencies.forEach((value) => delete value.managerData); dependencies.forEach((value) => delete value.managerData);
return { deps: dependencies }; return dependencies.length ? { deps: dependencies } : null;
} }
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