Skip to content

Commit

Permalink
refactor(utils/yaml): centralize YAML parsing to allow central templa…
Browse files Browse the repository at this point in the history
…ting handling (#26068)
  • Loading branch information
secustor committed Dec 1, 2023
1 parent f5b4da3 commit f42d058
Show file tree
Hide file tree
Showing 39 changed files with 199 additions and 47 deletions.
2 changes: 1 addition & 1 deletion lib/modules/datasource/conan/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { cache } from '../../../util/cache/package/decorator';
import { GithubHttp } from '../../../util/http/github';
import { ensureTrailingSlash, joinUrlParts } from '../../../util/url';
import { load } from '../../../util/yaml';
import * as allVersioning from '../../versioning';
import { Datasource } from '../datasource';
import type {
Expand Down
6 changes: 3 additions & 3 deletions lib/modules/datasource/custom/formats/yaml.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import yaml from 'js-yaml';
import { readLocalFile } from '../../../../util/fs';
import type { Http } from '../../../../util/http';
import { load } from '../../../../util/yaml';
import type { CustomDatasourceFetcher } from './types';

export class YamlFetcher implements CustomDatasourceFetcher {
async fetch(http: Http, registryURL: string): Promise<unknown> {
const response = await http.get(registryURL);

return yaml.load(response.body);
return load(response.body);
}

async readFile(registryURL: string): Promise<unknown> {
const fileContent = await readLocalFile(registryURL, 'utf8');

return yaml.load(fileContent!);
return load(fileContent!);
}
}
2 changes: 1 addition & 1 deletion lib/modules/datasource/helm/common.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { load } from 'js-yaml';
import { Fixtures } from '../../../../test/fixtures';
import { load } from '../../../util/yaml';
import { findSourceUrl } from './common';
import type { HelmRepository } from './types';

Expand Down
2 changes: 1 addition & 1 deletion lib/modules/datasource/helm/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { cache } from '../../../util/cache/package/decorator';
import type { HttpResponse } from '../../../util/http/types';
import { ensureTrailingSlash } from '../../../util/url';
import { load } from '../../../util/yaml';
import * as helmVersioning from '../../versioning/helm';
import { Datasource } from '../datasource';
import type { GetReleasesConfig, ReleaseResult } from '../types';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/argocd/extract.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import is from '@sindresorhus/is';
import { loadAll } from 'js-yaml';
import { logger } from '../../../logger';
import { coerceArray } from '../../../util/array';
import { trimTrailingSlash } from '../../../util/url';
import { loadAll } from '../../../util/yaml';
import { DockerDatasource } from '../../datasource/docker';
import { GitTagsDatasource } from '../../datasource/git-tags';
import { HelmDatasource } from '../../datasource/helm';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/azure-pipelines/extract.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { load } from 'js-yaml';
import { GlobalConfig } from '../../../config/global';
import { logger } from '../../../logger';
import { coerceArray } from '../../../util/array';
import { regEx } from '../../../util/regex';
import { joinUrlParts } from '../../../util/url';
import { load } from '../../../util/yaml';
import { AzurePipelinesTasksDatasource } from '../../datasource/azure-pipelines-tasks';
import { GitTagsDatasource } from '../../datasource/git-tags';
import { getDep } from '../dockerfile/extract';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/batect/extract.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import upath from 'upath';
import { logger } from '../../../logger';
import { readLocalFile } from '../../../util/fs';
import { load } from '../../../util/yaml';
import { GitTagsDatasource } from '../../datasource/git-tags';
import { id as dockerVersioning } from '../../versioning/docker';
import { id as semverVersioning } from '../../versioning/semver';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/cloudbuild/extract.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { load } from '../../../util/yaml';
import { getDep } from '../dockerfile/extract';
import type { PackageDependency, PackageFileContent } from '../types';

Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/crossplane/extract.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { loadAll } from 'js-yaml';
import { logger } from '../../../logger';
import { loadAll } from '../../../util/yaml';
import { getDep } from '../dockerfile/extract';
import type {
ExtractConfig,
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/docker-compose/extract.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { newlineRegex, regEx } from '../../../util/regex';
import { load } from '../../../util/yaml';
import { getDep } from '../dockerfile/extract';
import type { ExtractConfig, PackageFileContent } from '../types';
import type { DockerComposeConfig } from './types';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/fleet/extract.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import is from '@sindresorhus/is';
import { loadAll } from 'js-yaml';
import { logger } from '../../../logger';
import { regEx } from '../../../util/regex';
import { loadAll } from '../../../util/yaml';
import { GitTagsDatasource } from '../../datasource/git-tags';
import { HelmDatasource } from '../../datasource/helm';
import { checkIfStringIsPath } from '../terraform/util';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/flux/extract.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import is from '@sindresorhus/is';
import { loadAll } from 'js-yaml';
import { logger } from '../../../logger';
import { readLocalFile } from '../../../util/fs';
import { regEx } from '../../../util/regex';
import { loadAll } from '../../../util/yaml';
import { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags';
import { DockerDatasource } from '../../datasource/docker';
import { GitRefsDatasource } from '../../datasource/git-refs';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/github-actions/extract.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { GlobalConfig } from '../../../config/global';
import { logger } from '../../../logger';
import { isNotNullOrUndefined } from '../../../util/array';
import { newlineRegex, regEx } from '../../../util/regex';
import { load } from '../../../util/yaml';
import { GithubRunnersDatasource } from '../../datasource/github-runners';
import { GithubTagsDatasource } from '../../datasource/github-tags';
import * as dockerVersioning from '../../versioning/docker';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/gitlabci-include/common.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { load } from 'js-yaml';
import { Fixtures } from '../../../../test/fixtures';
import { load } from '../../../util/yaml';
import type { GitlabPipeline } from '../gitlabci/types';
import { replaceReferenceTags } from '../gitlabci/utils';
import {
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/gitlabci-include/extract.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { GlobalConfig } from '../../../config/global';
import { logger } from '../../../logger';
import { regEx } from '../../../util/regex';
import { load } from '../../../util/yaml';
import { GitlabTagsDatasource } from '../../datasource/gitlab-tags';
import type {
GitlabInclude,
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/gitlabci/extract.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { readLocalFile } from '../../../util/fs';
import { trimLeadingSlash } from '../../../util/url';
import { load } from '../../../util/yaml';
import type {
ExtractConfig,
PackageDependency,
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/helm-requirements/extract.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { load } from '../../../util/yaml';
import { HelmDatasource } from '../../datasource/helm';
import type {
ExtractConfig,
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/helm-values/extract.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { loadAll } from 'js-yaml';
import { logger } from '../../../logger';
import { loadAll } from '../../../util/yaml';
import { id as dockerVersioning } from '../../versioning/docker';
import { getDep } from '../dockerfile/extract';
import type { PackageDependency, PackageFileContent } from '../types';
Expand Down
14 changes: 5 additions & 9 deletions lib/modules/manager/helmfile/extract.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import is from '@sindresorhus/is';
import { loadAll } from 'js-yaml';
import { logger } from '../../../logger';
import { regEx } from '../../../util/regex';
import { loadAll } from '../../../util/yaml';
import { DockerDatasource } from '../../datasource/docker';
import { HelmDatasource } from '../../datasource/helm';
import type {
Expand All @@ -18,13 +18,6 @@ import {
const isValidChartName = (name: string | undefined): boolean =>
!!name && !regEx(/[!@#$%^&*(),.?":{}/|<>A-Z]/).test(name);

function extractYaml(content: string): string {
// regex remove go templated ({{ . }}) values
return content
.replace(regEx(/{{`.+?`}}/gs), '')
.replace(regEx(/{{.+?}}/g), '');
}

function isLocalPath(possiblePath: string): boolean {
return ['./', '../', '/'].some((localPrefix) =>
possiblePath.startsWith(localPrefix),
Expand All @@ -42,7 +35,10 @@ export async function extractPackageFile(
// Record kustomization usage for all deps, since updating artifacts is run on the helmfile.yaml as a whole.
let needKustomize = false;
try {
docs = loadAll(extractYaml(content), null, { json: true }) as Doc[];
docs = loadAll(content, null, {
removeTemplates: true,
json: true,
}) as Doc[];
} catch (err) {
logger.debug(
{ err, packageFile },
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/helmsman/extract.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { regEx } from '../../../util/regex';
import { load } from '../../../util/yaml';
import { DockerDatasource } from '../../datasource/docker';
import { HelmDatasource } from '../../datasource/helm';
import type {
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/helmv3/artifacts.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import is from '@sindresorhus/is';
import yaml from 'js-yaml';
import pMap from 'p-map';
import { quote } from 'shlex';
import { TEMPORARY_ERROR } from '../../../constants/error-messages';
Expand All @@ -14,6 +13,7 @@ import {
} from '../../../util/fs';
import { getRepoStatus } from '../../../util/git';
import * as hostRules from '../../../util/host-rules';
import * as yaml from '../../../util/yaml';
import { DockerDatasource } from '../../datasource/docker';
import { HelmDatasource } from '../../datasource/helm';
import type { UpdateArtifact, UpdateArtifactsResult } from '../types';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/helmv3/extract.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { getSiblingFileName, localPathExists } from '../../../util/fs';
import { load } from '../../../util/yaml';
import { HelmDatasource } from '../../datasource/helm';
import type {
ExtractConfig,
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/helmv3/update.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { dump } from 'js-yaml';
import { dump } from '../../../util/yaml';
import * as helmv3Updater from '.';

describe('modules/manager/helmv3/update', () => {
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/jenkins/extract.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { isSkipComment } from '../../../util/ignore';
import { newlineRegex, regEx } from '../../../util/regex';
import { load } from '../../../util/yaml';
import { JenkinsPluginsDatasource } from '../../datasource/jenkins-plugins';
import * as mavenVersioning from '../../versioning/maven';
import type { PackageDependency, PackageFileContent } from '../types';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/kubernetes/extract.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import is from '@sindresorhus/is';
import { loadAll } from 'js-yaml';
import { logger } from '../../../logger';
import { newlineRegex, regEx } from '../../../util/regex';
import { loadAll } from '../../../util/yaml';
import {
KubernetesApiDatasource,
supportedApis,
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/kustomize/extract.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { coerceArray } from '../../../util/array';
import { regEx } from '../../../util/regex';
import { load } from '../../../util/yaml';
import { DockerDatasource } from '../../datasource/docker';
import { GitTagsDatasource } from '../../datasource/git-tags';
import { GithubTagsDatasource } from '../../datasource/github-tags';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/npm/extract/pnpm.spec.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import yaml from 'js-yaml';
import { Fixtures } from '../../../../../test/fixtures';
import { getFixturePath, logger, partial } from '../../../../../test/util';
import { GlobalConfig } from '../../../../config/global';
import * as fs from '../../../../util/fs';
import * as yaml from '../../../../util/yaml';
import type { PackageFile } from '../../types';
import type { NpmManagerData } from '../types';
import {
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/npm/extract/pnpm.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import is from '@sindresorhus/is';
import { findPackages } from 'find-packages';
import { load } from 'js-yaml';
import upath from 'upath';
import { GlobalConfig } from '../../../../config/global';
import { logger } from '../../../../logger';
Expand All @@ -10,6 +9,7 @@ import {
localPathExists,
readLocalFile,
} from '../../../../util/fs';
import { load } from '../../../../util/yaml';
import type { PackageFile } from '../../types';
import type { PnpmDependencySchema, PnpmLockFile } from '../post-update/types';
import type { NpmManagerData } from '../types';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/npm/post-update/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// TODO: types (#22198)
import is from '@sindresorhus/is';
import deepmerge from 'deepmerge';
import { dump, load } from 'js-yaml';
import upath from 'upath';
import { logger } from '../../../../logger';
import { ExternalHostError } from '../../../../types/errors/external-host-error';
Expand All @@ -18,6 +17,7 @@ import type { FileChange } from '../../../../util/git/types';
import * as hostRules from '../../../../util/host-rules';
import { newlineRegex, regEx } from '../../../../util/regex';
import { ensureTrailingSlash } from '../../../../util/url';
import { dump, load } from '../../../../util/yaml';
import { NpmDatasource } from '../../../datasource/npm';
import { scm } from '../../../platform/scm';
import type { PackageFile, PostUpdateConfig, Upgrade } from '../../types';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/npm/post-update/pnpm.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import upath from 'upath';
import { GlobalConfig } from '../../../../config/global';
import { TEMPORARY_ERROR } from '../../../../constants/error-messages';
Expand All @@ -11,6 +10,7 @@ import type {
ToolConstraint,
} from '../../../../util/exec/types';
import { deleteLocalFile, readLocalFile } from '../../../../util/fs';
import { load } from '../../../../util/yaml';
import type { PostUpdateConfig, Upgrade } from '../../types';
import { getNodeToolConstraint } from './node-version';
import type { GenerateLockFileResult, PnpmLockFile } from './types';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/pre-commit/extract.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import type { SkipReason } from '../../../types';
import { detectPlatform } from '../../../util/common';
import { find } from '../../../util/host-rules';
import { regEx } from '../../../util/regex';
import { load } from '../../../util/yaml';
import { GithubTagsDatasource } from '../../datasource/github-tags';
import { GitlabTagsDatasource } from '../../datasource/gitlab-tags';
import type { PackageDependency, PackageFileContent } from '../types';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/tekton/extract.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import is from '@sindresorhus/is';
import { loadAll } from 'js-yaml';
import { logger } from '../../../logger';
import { coerceArray } from '../../../util/array';
import { loadAll } from '../../../util/yaml';
import { getDep } from '../dockerfile/extract';
import type { PackageDependency, PackageFileContent } from '../types';
import type {
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/travis/extract.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { load } from '../../../util/yaml';
import { GithubTagsDatasource } from '../../datasource/github-tags';
import type { PackageDependency, PackageFileContent } from '../types';
import type { TravisMatrixItem, TravisYaml } from './types';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/velaci/extract.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { coerceArray } from '../../../util/array';
import { load } from '../../../util/yaml';
import { getDep } from '../dockerfile/extract';
import type { PackageDependency, PackageFileContent } from '../types';
import type { VelaPipelineConfiguration } from './types';
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/woodpecker/extract.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { load } from '../../../util/yaml';
import { getDep } from '../dockerfile/extract';
import type { ExtractConfig, PackageFileContent } from '../types';
import type { WoodpeckerConfig } from './types';
Expand Down
2 changes: 1 addition & 1 deletion lib/util/schema-utils.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { load, loadAll } from 'js-yaml';
import JSON5 from 'json5';
import { DateTime } from 'luxon';
import type { JsonArray, JsonValue } from 'type-fest';
import { z } from 'zod';
import { parse as parseToml } from './toml';
import { load, loadAll } from './yaml';

interface ErrorContext<T> {
error: z.ZodError;
Expand Down

0 comments on commit f42d058

Please sign in to comment.