Skip to content

Commit

Permalink
refactor(datasource/terraform): Enable strict null checks (#14050)
Browse files Browse the repository at this point in the history
* refactor(datasource/terraform): Enable strict null checks

* Fix coverage

Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
  • Loading branch information
zharinov and viceice committed Feb 8, 2022
1 parent 805be7f commit abc1197
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 30 deletions.
14 changes: 9 additions & 5 deletions lib/datasource/terraform-module/index.ts
Expand Up @@ -31,6 +31,11 @@ export class TerraformModuleDatasource extends TerraformDatasource {
lookupName,
registryUrl,
}: GetReleasesConfig): Promise<ReleaseResult | null> {
// istanbul ignore if
if (!registryUrl) {
return null;
}

const { registry, repository } =
TerraformModuleDatasource.getRegistryRepository(lookupName, registryUrl);
logger.trace(
Expand Down Expand Up @@ -58,14 +63,13 @@ export class TerraformModuleDatasource extends TerraformDatasource {

// Simplify response before caching and returning
const dep: ReleaseResult = {
releases: null,
releases: res.versions.map((version) => ({
version,
})),
};
if (res.source) {
dep.sourceUrl = res.source;
}
dep.releases = res.versions.map((version) => ({
version,
}));
if (pkgUrl.startsWith('https://registry.terraform.io/')) {
dep.homepage = `https://registry.terraform.io/modules/${repository}`;
}
Expand All @@ -83,7 +87,7 @@ export class TerraformModuleDatasource extends TerraformDatasource {

private static getRegistryRepository(
lookupName: string,
registryUrl: string
registryUrl = ''
): RegistryRepository {
let registry: string;
const split = lookupName.split('/');
Expand Down
41 changes: 19 additions & 22 deletions lib/datasource/terraform-provider/index.ts
@@ -1,3 +1,4 @@
import is from '@sindresorhus/is';
import pMap from 'p-map';
import { logger } from '../../logger';
import { ExternalHostError } from '../../types/errors/external-host-error';
Expand Down Expand Up @@ -48,9 +49,13 @@ export class TerraformProviderDatasource extends TerraformDatasource {
lookupName,
registryUrl,
}: GetReleasesConfig): Promise<ReleaseResult | null> {
// istanbul ignore if
if (!registryUrl) {
return null;
}
logger.debug({ lookupName }, 'terraform-provider.getDependencies()');
let dep: ReleaseResult = null;
const registryHost = parseUrl(registryUrl).host;
let dep: ReleaseResult | null = null;
const registryHost = parseUrl(registryUrl)?.host;
if (registryHost === 'releases.hashicorp.com') {
dep = await this.queryReleaseBackend(lookupName, registryUrl);
} else {
Expand All @@ -77,14 +82,13 @@ export class TerraformProviderDatasource extends TerraformDatasource {
const backendURL = `${registryURL}${serviceDiscovery['providers.v1']}${repository}`;
const res = (await this.http.getJson<TerraformProvider>(backendURL)).body;
const dep: ReleaseResult = {
releases: null,
releases: res.versions.map((version) => ({
version,
})),
};
if (res.source) {
dep.sourceUrl = res.source;
}
dep.releases = res.versions.map((version) => ({
version,
}));
// set published date for latest release
const latestVersion = dep.releases.find(
(release) => res.version === release.version
Expand All @@ -102,7 +106,7 @@ export class TerraformProviderDatasource extends TerraformDatasource {
private async queryReleaseBackend(
lookupName: string,
registryURL: string
): Promise<ReleaseResult> {
): Promise<ReleaseResult | null> {
const backendLookUpName = `terraform-provider-${lookupName}`;
const backendURL = registryURL + `/index.json`;
const res = (
Expand All @@ -114,14 +118,11 @@ export class TerraformProviderDatasource extends TerraformDatasource {
}

const dep: ReleaseResult = {
releases: null,
releases: Object.keys(res[backendLookUpName].versions).map((version) => ({
version,
})),
sourceUrl: `https://github.com/terraform-providers/${backendLookUpName}`,
};
dep.releases = Object.keys(res[backendLookUpName].versions).map(
(version) => ({
version,
})
);
logger.trace({ dep }, 'dep');
return dep;
}
Expand All @@ -135,16 +136,16 @@ export class TerraformProviderDatasource extends TerraformDatasource {
registryURL: string,
repository: string,
version: string
): Promise<TerraformBuild[]> {
): Promise<TerraformBuild[] | null> {
if (registryURL === TerraformProviderDatasource.defaultRegistryUrls[1]) {
// check if registryURL === secondary backend
const repositoryRegexResult =
TerraformProviderDatasource.repositoryRegex.exec(repository);
TerraformProviderDatasource.repositoryRegex.exec(repository)?.groups;
if (!repositoryRegexResult) {
// non hashicorp builds are not supported with releases.hashicorp.com
return null;
}
const lookupName = repositoryRegexResult.groups.lookupName;
const lookupName = repositoryRegexResult.lookupName;
const backendLookUpName = `terraform-provider-${lookupName}`;
let versionReleaseBackend: VersionDetailResponse;
try {
Expand Down Expand Up @@ -220,12 +221,8 @@ export class TerraformProviderDatasource extends TerraformDatasource {
{ concurrency: 4 }
);

// if any of the requests to build details have failed, return null
if (result.some((value) => Boolean(value) === false)) {
return null;
}

return result;
const filteredResult = result.filter(is.truthy);
return filteredResult.length === result.length ? filteredResult : null;
}

@cache({
Expand Down
3 changes: 0 additions & 3 deletions tsconfig.strict.json
Expand Up @@ -123,9 +123,6 @@
"lib/datasource/rubygems/get-rubygems-org.ts",
"lib/datasource/rubygems/get.ts",
"lib/datasource/rubygems/index.ts",
"lib/datasource/terraform-module/base.ts",
"lib/datasource/terraform-module/index.ts",
"lib/datasource/terraform-provider/index.ts",
"lib/manager/ansible-galaxy/collections-metadata.ts",
"lib/manager/ansible-galaxy/collections.ts",
"lib/manager/ansible-galaxy/extract.ts",
Expand Down

0 comments on commit abc1197

Please sign in to comment.