diff --git a/lib/datasource/crate/index.ts b/lib/datasource/crate/index.ts index 5f1536f5987c55c54dbc31a38a20598262655db5..42d8a328b6a8e5a45f02bf2a508b346baf89166b 100644 --- a/lib/datasource/crate/index.ts +++ b/lib/datasource/crate/index.ts @@ -7,7 +7,7 @@ import * as memCache from '../../util/cache/memory'; import { cache } from '../../util/cache/package/decorator'; import { privateCacheDir, readFile } from '../../util/fs'; import { simpleGitConfig } from '../../util/git/config'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import * as cargoVersioning from '../../versioning/cargo'; import { Datasource } from '../datasource'; import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; @@ -65,7 +65,7 @@ export class CrateDatasource extends Datasource { lookupName ); const lines = payload - .split('\n') // break into lines + .split(newlineRegex) // break into lines .map((line) => line.trim()) // remove whitespace .filter((line) => line.length !== 0) // remove empty lines .map((line) => JSON.parse(line) as CrateRecord); // parse diff --git a/lib/datasource/git-refs/base.ts b/lib/datasource/git-refs/base.ts index 5cc5548a173fc453c2f25430160544a792cc7776..93c11ab29570168a9ff75d8f7534d6bd847cae91 100644 --- a/lib/datasource/git-refs/base.ts +++ b/lib/datasource/git-refs/base.ts @@ -3,7 +3,7 @@ import { logger } from '../../logger'; import { cache } from '../../util/cache/package/decorator'; import { simpleGitConfig } from '../../util/git/config'; import { getRemoteUrlWithToken } from '../../util/git/url'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { GetReleasesConfig } from '../types'; import type { RawRefs } from './types'; @@ -34,7 +34,7 @@ export class GitDatasource { const refs = lsRemote .trim() - .split('\n') + .split(newlineRegex) .map((line) => line.trim()) .map((line) => { let match = refMatch.exec(line); diff --git a/lib/datasource/github-releases/digest.ts b/lib/datasource/github-releases/digest.ts index 3401f8507c420c355ed13445234384360eb6bbc4..56861fe0b7fe231324732c464457438b0d6dab0a 100644 --- a/lib/datasource/github-releases/digest.ts +++ b/lib/datasource/github-releases/digest.ts @@ -1,6 +1,6 @@ import hasha from 'hasha'; import * as packageCache from '../../util/cache/package'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import { cacheNamespace, http } from './common'; import type { DigestAsset, GithubRelease, GithubReleaseAsset } from './types'; @@ -13,7 +13,7 @@ async function findDigestFile( ); for (const asset of smallAssets) { const res = await http.get(asset.browser_download_url); - for (const line of res.body.split('\n')) { + for (const line of res.body.split(newlineRegex)) { const [lineDigest, lineFn] = line.split(regEx(/\s+/), 2); if (lineDigest === digest) { return { @@ -127,7 +127,7 @@ export async function mapDigestAssetToRelease( if (digestAsset.digestedFileName) { const releaseFilename = digestAsset.digestedFileName.replace(current, next); const res = await http.get(releaseAsset.browser_download_url); - for (const line of res.body.split('\n')) { + for (const line of res.body.split(newlineRegex)) { const [lineDigest, lineFn] = line.split(regEx(/\s+/), 2); if (lineFn === releaseFilename) { return lineDigest; diff --git a/lib/datasource/maven/index.ts b/lib/datasource/maven/index.ts index 7ad19360fc2e787d473ff54dc7a3ded74c44a9f3..603e842395a2452d24f9eb72ba597fd8511c29fa 100644 --- a/lib/datasource/maven/index.ts +++ b/lib/datasource/maven/index.ts @@ -4,7 +4,7 @@ import pAll from 'p-all'; import { XmlDocument } from 'xmldoc'; import { logger } from '../../logger'; import * as packageCache from '../../util/cache/package'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import { ensureTrailingSlash } from '../../util/url'; import mavenVersion from '../../versioning/maven'; import * as mavenVersioning from '../../versioning/maven'; @@ -110,7 +110,7 @@ async function addReleasesFromIndexPage( const indexUrl = getMavenUrl(dependency, repoUrl, 'index.html'); const res = await downloadHttpProtocol(indexUrl); const { body = '' } = res; - for (const line of body.split('\n')) { + for (const line of body.split(newlineRegex)) { const match = line.trim().match(mavenCentralHtmlVersionRegex); if (match) { const { version, releaseTimestamp: timestamp } = diff --git a/lib/datasource/pod/index.ts b/lib/datasource/pod/index.ts index f79dac3c10d9a341aedbe2d5abd2f781a45b3699..61fcd4b5deada0ec50fee8efd2f184a20c8f8909 100644 --- a/lib/datasource/pod/index.ts +++ b/lib/datasource/pod/index.ts @@ -6,7 +6,7 @@ import * as packageCache from '../../util/cache/package'; import { Http } from '../../util/http'; import { GithubHttp } from '../../util/http/github'; import type { HttpError } from '../../util/http/types'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import { massageGithubUrl } from '../metadata'; import type { GetReleasesConfig, ReleaseResult } from '../types'; @@ -179,7 +179,7 @@ async function getReleasesFromCDN( const url = releasesCDNUrl(lookupName, registryUrl); const resp = await requestCDN(url, lookupName); if (resp) { - const lines = resp.split('\n'); + const lines = resp.split(newlineRegex); for (let idx = 0; idx < lines.length; idx += 1) { const line = lines[idx]; const [name, ...versions] = line.split('/'); diff --git a/lib/datasource/rubygems/get-rubygems-org.ts b/lib/datasource/rubygems/get-rubygems-org.ts index 3be067768bda5c8ce004bf3a2adafeb57243fc0b..ef61c47e1f9e69c0b32ac25de4b2eb7abcf4202c 100644 --- a/lib/datasource/rubygems/get-rubygems-org.ts +++ b/lib/datasource/rubygems/get-rubygems-org.ts @@ -1,6 +1,7 @@ import { logger } from '../../logger'; import { ExternalHostError } from '../../types/errors/external-host-error'; import { getElapsedMinutes } from '../../util/date'; +import { newlineRegex } from '../../util/regex'; import { Datasource } from '../datasource'; import type { GetReleasesConfig, ReleaseResult } from '../types'; @@ -71,7 +72,7 @@ export class RubyGemsOrgDatasource extends Datasource { return; } - for (const line of newLines.split('\n')) { + for (const line of newLines.split(newlineRegex)) { RubyGemsOrgDatasource.processLine(line); } lastSync = new Date(); diff --git a/lib/manager/ansible-galaxy/extract.ts b/lib/manager/ansible-galaxy/extract.ts index 8ce428608f72bae3fe67d11e230cbd50209641ae..ab15de0ab32f7a69da93216540984f5a212e203a 100644 --- a/lib/manager/ansible-galaxy/extract.ts +++ b/lib/manager/ansible-galaxy/extract.ts @@ -1,5 +1,5 @@ import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { PackageDependency, PackageFile } from '../types'; import { extractCollections } from './collections'; import { extractCollectionsMetaDataFile } from './collections-metadata'; @@ -29,7 +29,7 @@ export function extractPackageFile( logger.trace('ansible-galaxy.extractPackageFile()'); const galaxyFileNameRegEx = regEx(/galaxy\.ya?ml$/); const deps: PackageDependency[] = []; - const lines = content.split('\n'); + const lines = content.split(newlineRegex); try { // if this is a galaxy.yml file we have to interpret the dependencies differently diff --git a/lib/manager/ansible/extract.ts b/lib/manager/ansible/extract.ts index 740921fbc6bcf912d70e973bfa77c525071735ea..6b31713014ed72e9c89668d629c914be70ca6739 100644 --- a/lib/manager/ansible/extract.ts +++ b/lib/manager/ansible/extract.ts @@ -1,5 +1,5 @@ import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import * as dockerVersioning from '../../versioning/docker'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency, PackageFile } from '../types'; @@ -8,7 +8,7 @@ export function extractPackageFile(content: string): PackageFile | null { logger.trace('ansible.extractPackageFile()'); let deps: PackageDependency[] = []; const re = regEx(/^\s*image:\s*'?"?([^\s'"]+)'?"?\s*$/); - for (const line of content.split('\n')) { + for (const line of content.split(newlineRegex)) { const match = re.exec(line); if (match) { const currentFrom = match[1]; diff --git a/lib/manager/bitbucket-pipelines/extract.ts b/lib/manager/bitbucket-pipelines/extract.ts index cdefc542d7626cf0bddeb303e6bf338e870debac..54ab9df365408ec1b01a82e33ec98580d3593553 100644 --- a/lib/manager/bitbucket-pipelines/extract.ts +++ b/lib/manager/bitbucket-pipelines/extract.ts @@ -1,5 +1,5 @@ import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency, PackageFile } from '../types'; @@ -10,7 +10,7 @@ export function extractPackageFile(content: string): PackageFile | null { const deps: PackageDependency[] = []; try { - const lines = content.split('\n'); + const lines = content.split(newlineRegex); for (const line of lines) { const pipeMatch = pipeRegex.exec(line); if (pipeMatch) { diff --git a/lib/manager/buildkite/extract.ts b/lib/manager/buildkite/extract.ts index 818896b0fa2f6b3b5dd194409e7acff64cdd233c..aa7ac03974db3d176b5d14d65b381d1652217e7a 100644 --- a/lib/manager/buildkite/extract.ts +++ b/lib/manager/buildkite/extract.ts @@ -1,14 +1,14 @@ import * as datasourceGithubTags from '../../datasource/github-tags'; import { logger } from '../../logger'; import { SkipReason } from '../../types'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import { isVersion } from '../../versioning/semver'; import type { PackageDependency, PackageFile } from '../types'; export function extractPackageFile(content: string): PackageFile | null { const deps: PackageDependency[] = []; try { - const lines = content.split('\n'); + const lines = content.split(newlineRegex); let isPluginsSection = false; let pluginsIndent = ''; for (let lineNumber = 1; lineNumber <= lines.length; lineNumber += 1) { diff --git a/lib/manager/bundler/extract.ts b/lib/manager/bundler/extract.ts index 22a676d6b76f19b547af2f1d26e9b47a233d3b20..7ea1c07f9e9963ed6e8405aed45735087452362e 100644 --- a/lib/manager/bundler/extract.ts +++ b/lib/manager/bundler/extract.ts @@ -1,7 +1,7 @@ import { RubyGemsDatasource } from '../../datasource/rubygems'; import { logger } from '../../logger'; import { readLocalFile } from '../../util/fs'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { PackageDependency, PackageFile } from '../types'; import { extractLockFileEntries } from './locked-version'; @@ -17,7 +17,7 @@ export async function extractPackageFile( registryUrls: [], deps: [], }; - const lines = content.split('\n'); + const lines = content.split(newlineRegex); const delimiters = ['"', "'"]; for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) { const line = lines[lineNumber]; diff --git a/lib/manager/bundler/locked-version.ts b/lib/manager/bundler/locked-version.ts index e2d786c9e0b966b4ac75ef47a2d5045aa2a8078a..544e3f344a9f55851b5c89a17b8bcdb90f3f8d96 100644 --- a/lib/manager/bundler/locked-version.ts +++ b/lib/manager/bundler/locked-version.ts @@ -1,4 +1,5 @@ import { logger } from '../../logger'; +import { newlineRegex } from '../../util/regex'; import { isVersion } from '../../versioning/ruby'; const DEP_REGEX = new RegExp('(?<=\\().*(?=\\))'); // TODO #12872 (?<=re) after text matching @@ -8,7 +9,7 @@ export function extractLockFileEntries( const gemLock = new Map<string, string>(); try { let parsingGemSection = false; - lockFileContent.split('\n').forEach((eachLine) => { + lockFileContent.split(newlineRegex).forEach((eachLine) => { const whitespace = eachLine.indexOf(eachLine.trim()); const isGemLine = eachLine.trim().startsWith('GEM'); if (parsingGemSection === false && whitespace === 0 && isGemLine) { diff --git a/lib/manager/circleci/extract.ts b/lib/manager/circleci/extract.ts index 8f44a985015221a826d613bca591f6bcab5439dd..5e3ecd60ac14d4df9b63b49ddafd02f0789bdb69 100644 --- a/lib/manager/circleci/extract.ts +++ b/lib/manager/circleci/extract.ts @@ -1,6 +1,6 @@ import { OrbDatasource } from '../../datasource/orb'; import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import * as npmVersioning from '../../versioning/npm'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency, PackageFile } from '../types'; @@ -8,7 +8,7 @@ import type { PackageDependency, PackageFile } from '../types'; export function extractPackageFile(content: string): PackageFile | null { const deps: PackageDependency[] = []; try { - const lines = content.split('\n'); + const lines = content.split(newlineRegex); for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) { const line = lines[lineNumber]; const orbs = regEx(/^\s*orbs:\s*$/).exec(line); diff --git a/lib/manager/cocoapods/artifacts.ts b/lib/manager/cocoapods/artifacts.ts index 4c30ad6be5a9fc11dfbc01b6848499e19670f568..c32d50c9290f81b1d3ef6f1b21ff8840d887102d 100644 --- a/lib/manager/cocoapods/artifacts.ts +++ b/lib/manager/cocoapods/artifacts.ts @@ -11,14 +11,14 @@ import { writeLocalFile, } from '../../util/fs'; import { getRepoStatus } from '../../util/git'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { UpdateArtifact, UpdateArtifactsResult } from '../types'; const pluginRegex = regEx(`^\\s*plugin\\s*(['"])(?<plugin>[^'"]+)(['"])`); function getPluginCommands(content: string): string[] { const result = new Set<string>(); - const lines: string[] = content.split('\n'); + const lines: string[] = content.split(newlineRegex); lines.forEach((line) => { const match = pluginRegex.exec(line); if (match) { diff --git a/lib/manager/cocoapods/extract.ts b/lib/manager/cocoapods/extract.ts index 6f6fe1bcf136b43b55aaf36767093232816ec4ab..5c4ad4d668d8a9f0c1bea1600076e90d6583a8fd 100644 --- a/lib/manager/cocoapods/extract.ts +++ b/lib/manager/cocoapods/extract.ts @@ -4,7 +4,7 @@ import * as datasourceGitlabTags from '../../datasource/gitlab-tags'; import * as datasourcePod from '../../datasource/pod'; import { logger } from '../../logger'; import { getSiblingFileName, localPathExists } from '../../util/fs'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { PackageDependency, PackageFile } from '../types'; import type { ParsedLine } from './types'; @@ -86,7 +86,7 @@ export async function extractPackageFile( ): Promise<PackageFile | null> { logger.trace('cocoapods.extractPackageFile()'); const deps: PackageDependency[] = []; - const lines: string[] = content.split('\n'); + const lines: string[] = content.split(newlineRegex); const registryUrls: string[] = []; diff --git a/lib/manager/docker-compose/extract.ts b/lib/manager/docker-compose/extract.ts index ce5e937300b317a157ca90c4f1865fccd7634b0e..3c17196a9629f2b329d784b53c1e235bbf3e0273 100644 --- a/lib/manager/docker-compose/extract.ts +++ b/lib/manager/docker-compose/extract.ts @@ -1,7 +1,7 @@ import is from '@sindresorhus/is'; import { load } from 'js-yaml'; import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import { getDep } from '../dockerfile/extract'; import type { PackageFile } from '../types'; import type { DockerComposeConfig } from './types'; @@ -10,7 +10,7 @@ class LineMapper { private imageLines: { line: string; lineNumber: number; used: boolean }[]; constructor(content: string, filter: RegExp) { - this.imageLines = [...content.split('\n').entries()] + this.imageLines = [...content.split(newlineRegex).entries()] .filter((entry) => filter.test(entry[1])) .map(([lineNumber, line]) => ({ lineNumber, line, used: false })); } diff --git a/lib/manager/droneci/extract.ts b/lib/manager/droneci/extract.ts index 6dc15f47d47db6c81f4a2896d9394000c5272475..da8a1d26f2124b95b51514130a63125bb26d7577 100644 --- a/lib/manager/droneci/extract.ts +++ b/lib/manager/droneci/extract.ts @@ -1,12 +1,12 @@ import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency, PackageFile } from '../types'; export function extractPackageFile(content: string): PackageFile | null { const deps: PackageDependency[] = []; try { - const lines = content.split('\n'); + const lines = content.split(newlineRegex); for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) { const line = lines[lineNumber]; const match = regEx(/^\s* image:\s*'?"?([^\s'"]+)'?"?\s*$/).exec(line); diff --git a/lib/manager/github-actions/extract.ts b/lib/manager/github-actions/extract.ts index af05c0505e8872d54162acf14b7af15406f3b9a1..b22b96436d1cef860072c51cd0c7a8bbd310caad 100644 --- a/lib/manager/github-actions/extract.ts +++ b/lib/manager/github-actions/extract.ts @@ -1,6 +1,6 @@ import * as githubTagsDatasource from '../../datasource/github-tags'; import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import * as dockerVersioning from '../../versioning/docker'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency, PackageFile } from '../types'; @@ -16,7 +16,7 @@ const shaRe = regEx(/^[a-z0-9]{40}|[a-z0-9]{64}$/); export function extractPackageFile(content: string): PackageFile | null { logger.trace('github-actions.extractPackageFile()'); const deps: PackageDependency[] = []; - for (const line of content.split('\n')) { + for (const line of content.split(newlineRegex)) { if (line.trim().startsWith('#')) { continue; } diff --git a/lib/manager/gitlabci/extract.ts b/lib/manager/gitlabci/extract.ts index af6b4e2026cd2e2d42fea4bcbfade7c204730a83..b5baca0e3005eca4b8d8d9b254eb73ec9267bd75 100644 --- a/lib/manager/gitlabci/extract.ts +++ b/lib/manager/gitlabci/extract.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import { load } from 'js-yaml'; import { logger } from '../../logger'; import { readLocalFile } from '../../util/fs'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import { getDep } from '../dockerfile/extract'; import type { ExtractConfig, PackageDependency, PackageFile } from '../types'; import type { GitlabPipeline } from './types'; @@ -35,7 +35,7 @@ function skipCommentAndAliasLines( export function extractPackageFile(content: string): PackageFile | null { const deps: PackageDependency[] = []; try { - const lines = content.split('\n'); + const lines = content.split(newlineRegex); for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) { const line = lines[lineNumber]; const imageMatch = imageRe.exec(line); diff --git a/lib/manager/gomod/extract.ts b/lib/manager/gomod/extract.ts index db7733d1817ef7b6fd3dc1f5775b9ca33eed98a1..2bfa914d52ebee78702324741c630b4da2d609b6 100644 --- a/lib/manager/gomod/extract.ts +++ b/lib/manager/gomod/extract.ts @@ -1,7 +1,7 @@ import semver from 'semver'; import { GoDatasource } from '../../datasource/go'; import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import { isVersion } from '../../versioning/semver'; import type { PackageDependency, PackageFile } from '../types'; @@ -39,7 +39,7 @@ export function extractPackageFile(content: string): PackageFile | null { const constraints: Record<string, any> = {}; const deps: PackageDependency[] = []; try { - const lines = content.split('\n'); + const lines = content.split(newlineRegex); for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) { let line = lines[lineNumber]; if ( diff --git a/lib/manager/gomod/update.ts b/lib/manager/gomod/update.ts index 91b8f0dce6ba15558f8981069876f0301ee7c843..91a09d684aa8970ae11dbccdfc22d6746b2e3448 100644 --- a/lib/manager/gomod/update.ts +++ b/lib/manager/gomod/update.ts @@ -1,5 +1,5 @@ import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { UpdateDependencyConfig } from '../types'; function getDepNameWithNoVersion(depName: string): string { @@ -22,7 +22,7 @@ export function updateDependency({ return null; } const depNameNoVersion = getDepNameWithNoVersion(depName); - const lines = fileContent.split('\n'); + const lines = fileContent.split(newlineRegex); const lineToChange = lines[upgrade.managerData.lineNumber]; if ( !lineToChange.includes(depNameNoVersion) && diff --git a/lib/manager/gradle-wrapper/artifacts.ts b/lib/manager/gradle-wrapper/artifacts.ts index 10d0500c00b6816b17088441ff044cd7bc2eaf82..59c8bc56c8edf58a296070904aefbcfb1971dfcb 100644 --- a/lib/manager/gradle-wrapper/artifacts.ts +++ b/lib/manager/gradle-wrapper/artifacts.ts @@ -9,6 +9,7 @@ import { readLocalFile, stat, writeLocalFile } from '../../util/fs'; import { getRepoStatus } from '../../util/git'; import type { StatusResult } from '../../util/git/types'; import { Http } from '../../util/http'; +import { newlineRegex } from '../../util/regex'; import type { UpdateArtifact, UpdateArtifactsResult } from '../types'; import { extraEnv, @@ -38,7 +39,7 @@ async function addIfUpdated( function getDistributionUrl(newPackageFileContent: string): string { const distributionUrlLine = newPackageFileContent - .split('\n') + .split(newlineRegex) .find((line) => line.startsWith('distributionUrl=')); if (distributionUrlLine) { return distributionUrlLine diff --git a/lib/manager/gradle-wrapper/utils.ts b/lib/manager/gradle-wrapper/utils.ts index 99f389ed196f0a621e518aae774bc9f35d46d341..bb72b2b01542ac4e9abd2eee65b39509f51212ac 100644 --- a/lib/manager/gradle-wrapper/utils.ts +++ b/lib/manager/gradle-wrapper/utils.ts @@ -4,7 +4,7 @@ import upath from 'upath'; import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; import { chmod } from '../../util/fs'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import gradleVersioning from '../../versioning/gradle'; import { id as npmVersioning } from '../../versioning/npm'; import { GradleVersionExtract } from './types'; @@ -81,7 +81,7 @@ const DISTRIBUTION_URL_REGEX = regEx( export function extractGradleVersion( fileContent: string ): GradleVersionExtract | null { - const lines = fileContent?.split('\n') ?? []; + const lines = fileContent?.split(newlineRegex) ?? []; for (const line of lines) { const distributionUrlMatch = DISTRIBUTION_URL_REGEX.exec(line); diff --git a/lib/manager/gradle/shallow/parser.ts b/lib/manager/gradle/shallow/parser.ts index 6392a898c4ef450ba421aba8ecf025e59e19c0ed..922352b87c8575fea3450177171fc774045fd13b 100644 --- a/lib/manager/gradle/shallow/parser.ts +++ b/lib/manager/gradle/shallow/parser.ts @@ -1,7 +1,7 @@ import url from 'url'; import is from '@sindresorhus/is'; import { logger } from '../../../logger'; -import { regEx } from '../../../util/regex'; +import { newlineRegex, regEx } from '../../../util/regex'; import type { PackageDependency } from '../../types'; import type { GradleManagerData } from '../types'; import { @@ -694,7 +694,7 @@ export function parseProps( let offset = 0; const vars = {}; const deps = []; - for (const line of input.split('\n')) { + for (const line of input.split(newlineRegex)) { const lineMatch = propRegex.exec(line); if (lineMatch) { const { key, value, leftPart } = lineMatch.groups; diff --git a/lib/manager/jenkins/extract.ts b/lib/manager/jenkins/extract.ts index f19f42cfc61efd4ee85ab41f75913fae3777317c..86e94a74b4ef4288f3e17ad8131b9516cbebbe6a 100644 --- a/lib/manager/jenkins/extract.ts +++ b/lib/manager/jenkins/extract.ts @@ -3,7 +3,7 @@ import { load } from 'js-yaml'; import { JenkinsPluginsDatasource } from '../../datasource/jenkins-plugins'; import { logger } from '../../logger'; import { isSkipComment } from '../../util/ignore'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import * as dockerVersioning from '../../versioning/docker'; import type { PackageDependency, PackageFile } from '../types'; import type { JenkinsPlugin, JenkinsPlugins } from './types'; @@ -75,7 +75,7 @@ function extractText(content: string): PackageDependency[] { /^\s*(?<depName>[\d\w-]+):(?<currentValue>[^#\s]+)[#\s]*(?<comment>.*)$/ ); - for (const line of content.split('\n')) { + for (const line of content.split(newlineRegex)) { const match = regex.exec(line); if (match) { const { depName, currentValue, comment } = match.groups; diff --git a/lib/manager/kubernetes/extract.ts b/lib/manager/kubernetes/extract.ts index f537f5dadea5f7f8af654df3e075a616356c4b51..a3f18948fc17ca5a5b782df2de5c01777686c367 100644 --- a/lib/manager/kubernetes/extract.ts +++ b/lib/manager/kubernetes/extract.ts @@ -1,5 +1,5 @@ import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency, PackageFile } from '../types'; @@ -14,7 +14,7 @@ export function extractPackageFile(content: string): PackageFile | null { return null; } - for (const line of content.split('\n')) { + for (const line of content.split(newlineRegex)) { const match = regEx(/^\s*-?\s*image:\s*'?"?([^\s'"]+)'?"?\s*$/).exec(line); if (match) { const currentFrom = match[1]; diff --git a/lib/manager/leiningen/extract.ts b/lib/manager/leiningen/extract.ts index 9d83ff1022c7ee37571e4c1af23a3721fa1c119e..285b8f6b7e3fe7b4aa207245fb46c78db502c9fc 100644 --- a/lib/manager/leiningen/extract.ts +++ b/lib/manager/leiningen/extract.ts @@ -1,5 +1,5 @@ import { ClojureDatasource } from '../../datasource/clojure'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { PackageDependency, PackageFile } from '../types'; import type { ExtractContext, ExtractedVariables } from './types'; @@ -142,7 +142,7 @@ const defRegex = regEx( export function extractVariables(content: string): ExtractedVariables { const result: ExtractedVariables = {}; - const lines = content.split('\n'); + const lines = content.split(newlineRegex); for (let idx = 0; idx < lines.length; idx += 1) { const line = lines[idx]; const match = defRegex.exec(line); diff --git a/lib/manager/mix/extract.ts b/lib/manager/mix/extract.ts index bdbe0f1496868ce4d65cf6c002cee689e767a719..d363e864bf67c0c2bc3a7a76850698ba6942f148 100644 --- a/lib/manager/mix/extract.ts +++ b/lib/manager/mix/extract.ts @@ -1,7 +1,7 @@ import { HexDatasource } from '../../datasource/hex'; import { logger } from '../../logger'; import { findLocalSiblingOrParent, localPathExists } from '../../util/fs'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { PackageDependency, PackageFile } from '../types'; const depSectionRegExp = regEx(/defp\s+deps.*do/g); @@ -15,7 +15,7 @@ export async function extractPackageFile( ): Promise<PackageFile | null> { logger.trace('mix.extractPackageFile()'); const deps: PackageDependency[] = []; - const contentArr = content.split('\n'); + const contentArr = content.split(newlineRegex); for (let lineNumber = 0; lineNumber < contentArr.length; lineNumber += 1) { if (contentArr[lineNumber].match(depSectionRegExp)) { diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts index 4ed414e8277556b252efc2739ac07e4d67f0bf3c..6ee99165f10e23d0b10bace0e2cef24160d5754b 100644 --- a/lib/manager/npm/extract/index.ts +++ b/lib/manager/npm/extract/index.ts @@ -6,7 +6,7 @@ import * as datasourceGithubTags from '../../../datasource/github-tags'; import { id as npmId } from '../../../datasource/npm'; import { logger } from '../../../logger'; import { getSiblingFileName, readLocalFile } from '../../../util/fs'; -import { regEx } from '../../../util/regex'; +import { newlineRegex, regEx } from '../../../util/regex'; import * as nodeVersioning from '../../../versioning/node'; import { isValid, isVersion } from '../../../versioning/npm'; import type { @@ -124,7 +124,7 @@ export async function extractPackageFile( 'Stripping .npmrc file of lines with variables' ); repoNpmrc = repoNpmrc - .split('\n') + .split(newlineRegex) .filter((line) => !line.includes('=${')) .join('\n'); } diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts index ae6f8588da106a5e7ac725d4e7b69f29f895db3b..9f19c6e144f9092ab7be70d1502daf8aa1ac66d0 100644 --- a/lib/manager/npm/post-update/index.ts +++ b/lib/manager/npm/post-update/index.ts @@ -25,7 +25,7 @@ import { import { branchExists, getFile, getRepoStatus } from '../../../util/git'; import type { FileChange } from '../../../util/git/types'; import * as hostRules from '../../../util/host-rules'; -import { regEx } from '../../../util/regex'; +import { newlineRegex, regEx } from '../../../util/regex'; import { ensureTrailingSlash } from '../../../util/url'; import type { PackageFile, PostUpdateConfig, Upgrade } from '../../types'; import { getZeroInstallPaths } from '../extract/yarn'; @@ -377,7 +377,7 @@ async function updateYarnOffline( } else if (yarnrc) { // Yarn 1 (offline mirror) const mirrorLine = yarnrc - .split('\n') + .split(newlineRegex) .find((line) => line.startsWith('yarn-offline-mirror ')); if (mirrorLine) { const mirrorPath = ensureTrailingSlash( diff --git a/lib/manager/npm/post-update/node-version.ts b/lib/manager/npm/post-update/node-version.ts index 67e8227612843f0b7c35fd8542669a2a2d22ab20..2bd245e087d230c536b7aff313d7a390566dcfc6 100644 --- a/lib/manager/npm/post-update/node-version.ts +++ b/lib/manager/npm/post-update/node-version.ts @@ -1,13 +1,13 @@ import semver from 'semver'; import { logger } from '../../../logger'; import { getSiblingFileName, readLocalFile } from '../../../util/fs'; -import { regEx } from '../../../util/regex'; +import { newlineRegex, regEx } from '../../../util/regex'; import type { PostUpdateConfig } from '../../types'; async function getNodeFile(filename: string): Promise<string> | null { try { const constraint = (await readLocalFile(filename, 'utf8')) - .split('\n')[0] + .split(newlineRegex)[0] .replace(regEx(/^v/), ''); if (semver.validRange(constraint)) { logger.debug(`Using node constraint "${constraint}" from ${filename}`); diff --git a/lib/manager/npm/post-update/yarn.ts b/lib/manager/npm/post-update/yarn.ts index 99aadaea2966d91379ab0df99b87ea560388f8c5..576530236ab8c22b9dc56f79c363adbc1cf43b45 100644 --- a/lib/manager/npm/post-update/yarn.ts +++ b/lib/manager/npm/post-update/yarn.ts @@ -13,7 +13,7 @@ import { ExternalHostError } from '../../../types/errors/external-host-error'; import { exec } from '../../../util/exec'; import type { ExecOptions } from '../../../util/exec/types'; import { exists, readFile, remove, writeFile } from '../../../util/fs'; -import { regEx } from '../../../util/regex'; +import { newlineRegex, regEx } from '../../../util/regex'; import type { PostUpdateConfig, Upgrade } from '../../types'; import { getNodeConstraint } from './node-version'; import { GenerateLockFileResult } from './types'; @@ -27,11 +27,11 @@ export async function checkYarnrc( const yarnrc = await readFile(`${cwd}/.yarnrc`, 'utf8'); if (is.string(yarnrc)) { const mirrorLine = yarnrc - .split('\n') + .split(newlineRegex) .find((line) => line.startsWith('yarn-offline-mirror ')); offlineMirror = !!mirrorLine; const pathLine = yarnrc - .split('\n') + .split(newlineRegex) .find((line) => line.startsWith('yarn-path ')); if (pathLine) { yarnPath = pathLine.replace(regEx(/^yarn-path\s+"?(.+?)"?$/), '$1'); diff --git a/lib/manager/pip_requirements/artifacts.ts b/lib/manager/pip_requirements/artifacts.ts index e7f59f507ea0651e867c3da89a7c7efff98abbbb..3eb65900baf42df5607e2fa29f8c315bef77c324 100644 --- a/lib/manager/pip_requirements/artifacts.ts +++ b/lib/manager/pip_requirements/artifacts.ts @@ -4,7 +4,7 @@ import { logger } from '../../logger'; import { exec } from '../../util/exec'; import type { ExecOptions } from '../../util/exec/types'; import { readLocalFile } from '../../util/fs'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { UpdateArtifact, UpdateArtifactsResult } from '../types'; export async function updateArtifacts({ @@ -21,7 +21,9 @@ export async function updateArtifacts({ try { const cmd: string[] = []; const rewrittenContent = newPackageFileContent.replace(regEx(/\\\n/g), ''); - const lines = rewrittenContent.split('\n').map((line) => line.trim()); + const lines = rewrittenContent + .split(newlineRegex) + .map((line) => line.trim()); for (const dep of updatedDeps) { const hashLine = lines.find( (line) => diff --git a/lib/manager/pip_requirements/extract.ts b/lib/manager/pip_requirements/extract.ts index 25483967caea10ac890cdc55485e102ed588dfbb..9a7e701d3ed0874574f884856d29a41b7654d957 100644 --- a/lib/manager/pip_requirements/extract.ts +++ b/lib/manager/pip_requirements/extract.ts @@ -5,7 +5,7 @@ import { GitTagsDatasource } from '../../datasource/git-tags'; import { PypiDatasource } from '../../datasource/pypi'; import { logger } from '../../logger'; import { isSkipComment } from '../../util/ignore'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { ExtractConfig, PackageDependency, PackageFile } from '../types'; export const packagePattern = @@ -32,7 +32,7 @@ export function extractPackageFile( let indexUrl: string; const extraUrls = []; - content.split('\n').forEach((line) => { + content.split(newlineRegex).forEach((line) => { if (line.startsWith('--index-url ')) { indexUrl = line.substring('--index-url '.length).split(' ')[0]; } @@ -59,7 +59,7 @@ export function extractPackageFile( const pkgRegex = regEx(`^(${packagePattern})$`); const pkgValRegex = regEx(`^${dependencyPattern}$`); const deps = content - .split('\n') + .split(newlineRegex) .map((rawline) => { let dep: PackageDependency = {}; const [line, comment] = rawline.split('#').map((part) => part.trim()); diff --git a/lib/manager/setup-cfg/extract.ts b/lib/manager/setup-cfg/extract.ts index d4eec82780fe0522317c2eead85c37e13320e5b9..4c2c30e09f1499bbc6355912e3a3f7fc4ccdf690 100644 --- a/lib/manager/setup-cfg/extract.ts +++ b/lib/manager/setup-cfg/extract.ts @@ -1,5 +1,5 @@ import { PypiDatasource } from '../../datasource/pypi'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import pep440 from '../../versioning/pep440'; import type { PackageDependency, PackageFile, Result } from '../types'; @@ -64,7 +64,7 @@ export function extractPackageFile( const deps: PackageDependency[] = []; content - .split('\n') + .split(newlineRegex) .map((line) => line.replace(regEx(/[;#].*$/), '').trimRight()) .forEach((rawLine) => { let line = rawLine; diff --git a/lib/manager/terraform/extract.ts b/lib/manager/terraform/extract.ts index 3034ab895884b14507d063159fcd62819abf8601..66b3bfd66835b12cc356135f1dd9bd658f44d2f6 100644 --- a/lib/manager/terraform/extract.ts +++ b/lib/manager/terraform/extract.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { ExtractConfig, PackageDependency, PackageFile } from '../types'; import { TerraformDependencyTypes } from './common'; import { extractLocks, findLockFile, readLockFile } from './lockfile/util'; @@ -54,7 +54,7 @@ export async function extractPackageFile( } let deps: PackageDependency<TerraformManagerData>[] = []; try { - const lines = content.split('\n'); + const lines = content.split(newlineRegex); for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) { const line = lines[lineNumber]; const terraformDependency = dependencyBlockExtractionRegex.exec(line); diff --git a/lib/manager/terraform/lockfile/util.ts b/lib/manager/terraform/lockfile/util.ts index 1121c38a36fb99e48e8deb24981963438b1b9890..9ecd4abb435f3b39f7855a1ee3fba86ca9f7a201 100644 --- a/lib/manager/terraform/lockfile/util.ts +++ b/lib/manager/terraform/lockfile/util.ts @@ -1,5 +1,5 @@ import { getSiblingFileName, readLocalFile } from '../../../util/fs'; -import { regEx } from '../../../util/regex'; +import { newlineRegex, regEx } from '../../../util/regex'; import { get as getVersioning } from '../../../versioning'; import type { UpdateArtifactsResult } from '../../types'; import type { @@ -31,7 +31,7 @@ export function readLockFile(lockFilePath: string): Promise<string> { } export function extractLocks(lockFileContent: string): ProviderLock[] { - const lines = lockFileContent.split('\n'); + const lines = lockFileContent.split(newlineRegex); const blockStarts: number[] = []; // get first lines of blocks lines.forEach((line, index) => { @@ -134,7 +134,7 @@ export function writeLockUpdates( lockFilePath: string, oldLockFileContent: string ): UpdateArtifactsResult { - const lines = oldLockFileContent.split('\n'); + const lines = oldLockFileContent.split(newlineRegex); const sections: string[][] = []; diff --git a/lib/manager/terragrunt/extract.ts b/lib/manager/terragrunt/extract.ts index aefc1140683eacdb242cd16860f9490776098db4..6d9ed7ddb9ad367c0cee078f02a2675f1c1f05b6 100644 --- a/lib/manager/terragrunt/extract.ts +++ b/lib/manager/terragrunt/extract.ts @@ -1,5 +1,5 @@ import { logger } from '../../logger'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { PackageDependency, PackageFile } from '../types'; import { TerragruntDependencyTypes } from './common'; import { analyseTerragruntModule, extractTerragruntModule } from './modules'; @@ -19,7 +19,7 @@ export function extractPackageFile(content: string): PackageFile | null { } let deps: PackageDependency<TerraformManagerData>[] = []; try { - const lines = content.split('\n'); + const lines = content.split(newlineRegex); for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) { const line = lines[lineNumber]; const terragruntDependency = dependencyBlockExtractionRegex.exec(line); diff --git a/lib/manager/terragrunt/providers.ts b/lib/manager/terragrunt/providers.ts index 83fc1046cfe09416e93693808b15392616a3c04c..f614cf0c5d866a629b3a3c4ce1089428085ff05b 100644 --- a/lib/manager/terragrunt/providers.ts +++ b/lib/manager/terragrunt/providers.ts @@ -1,4 +1,4 @@ -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import type { PackageDependency } from '../types'; import { TerragruntDependencyTypes } from './common'; import type { ExtractionResult } from './types'; @@ -41,7 +41,7 @@ export function extractTerragruntProvider( .slice(lineNumber) .join('\n') .substring(0, extractBracesContent(lines.slice(lineNumber).join('\n'))) - .split('\n'); + .split(newlineRegex); for (let lineNo = 0; lineNo < teraformContent.length; lineNo += 1) { line = teraformContent[lineNo]; diff --git a/lib/platform/bitbucket-server/index.ts b/lib/platform/bitbucket-server/index.ts index 50755715aef477cdc0fc16d22eb92fd80cc5ffad..abb4d952ae3d648a2e1ded4fa7c4c6d73b7f55b5 100644 --- a/lib/platform/bitbucket-server/index.ts +++ b/lib/platform/bitbucket-server/index.ts @@ -21,7 +21,7 @@ import { BitbucketServerHttp, setBaseUrl, } from '../../util/http/bitbucket-server'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; import { sanitize } from '../../util/sanitize'; import { ensureTrailingSlash, getQueryString } from '../../util/url'; import type { @@ -983,7 +983,7 @@ export async function mergePr({ } export function massageMarkdown(input: string): string { - logger.debug(`massageMarkdown(${input.split('\n')[0]})`); + logger.debug(`massageMarkdown(${input.split(newlineRegex)[0]})`); // Remove any HTML we use return smartTruncate(input, 30000) .replace( diff --git a/lib/util/exec/docker/index.ts b/lib/util/exec/docker/index.ts index 0096cfa7c15f8ea939c191bdd3f7dbc00c607973..1d04653a280ba8fa41aeed5c298b0e1d34e5582c 100644 --- a/lib/util/exec/docker/index.ts +++ b/lib/util/exec/docker/index.ts @@ -4,7 +4,7 @@ import { SYSTEM_INSUFFICIENT_MEMORY } from '../../../constants/error-messages'; import { getPkgReleases } from '../../../datasource'; import { logger } from '../../../logger'; import * as versioning from '../../../versioning'; -import { regEx } from '../../regex'; +import { newlineRegex, regEx } from '../../regex'; import { ensureTrailingSlash } from '../../url'; import { rawExec } from '../common'; import type { DockerOptions, Opt, VolumeOption, VolumesPair } from '../types'; @@ -173,7 +173,7 @@ export async function removeDanglingContainers(): Promise<void> { if (res?.stdout?.trim().length) { const containerIds = res.stdout .trim() - .split('\n') + .split(newlineRegex) .map((container) => container.trim()) .filter(Boolean); logger.debug({ containerIds }, 'Removing dangling child containers'); diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts index 09ea3d52b8e746c56e9eed92be2fdf4058aebbc1..34e8f8eb8c22934aa6fc9973aa4b77390a43a1f5 100644 --- a/lib/util/git/index.ts +++ b/lib/util/git/index.ts @@ -24,7 +24,7 @@ import { ExternalHostError } from '../../types/errors/external-host-error'; import type { GitProtocol } from '../../types/git'; import { api as semverCoerced } from '../../versioning/semver-coerced'; import { Limit, incLimitedValue } from '../../workers/global/limits'; -import { regEx } from '../regex'; +import { newlineRegex, regEx } from '../regex'; import { parseGitAuthor } from './author'; import { getNoVerify, simpleGitConfig } from './config'; import { @@ -132,7 +132,7 @@ async function fetchBranchCommits(): Promise<void> { } try { (await git.raw(opts)) - .split('\n') + .split(newlineRegex) .filter(Boolean) .map((line) => line.trim().split(regEx(/\s+/))) .forEach(([sha, ref]) => { @@ -173,7 +173,7 @@ async function deleteLocalBranch(branchName: string): Promise<void> { async function cleanLocalBranches(): Promise<void> { const existingBranches = (await git.raw(['branch'])) - .split('\n') + .split(newlineRegex) .map((branch) => branch.trim()) .filter((branch) => branch.length) .filter((branch) => !branch.startsWith('* ')); @@ -428,7 +428,7 @@ export async function getFileList(): Promise<string[]> { return []; } return files - .split('\n') + .split(newlineRegex) .filter(Boolean) .filter((line) => line.startsWith('100')) .map((line) => line.split(regEx(/\t/)).pop()) diff --git a/lib/util/git/private-key.ts b/lib/util/git/private-key.ts index 1c3f6bfe66e3b7953ce0ed17dfcbfa86226416b2..834c0930a1c874f6e96520445246f27082e13016 100644 --- a/lib/util/git/private-key.ts +++ b/lib/util/git/private-key.ts @@ -4,6 +4,7 @@ import upath from 'upath'; import { PLATFORM_GPG_FAILED } from '../../constants/error-messages'; import { logger } from '../../logger'; import { exec } from '../exec'; +import { newlineRegex } from '../regex'; let gitPrivateKey: string; let keyId: string; @@ -21,7 +22,7 @@ async function importKey(): Promise<void> { const { stdout, stderr } = await exec(`gpg --import ${keyFileName}`); logger.debug({ stdout, stderr }, 'Private key import result'); keyId = (stdout + stderr) - .split('\n') + .split(newlineRegex) .find((line) => line.includes('secret key imported')) .replace('gpg: key ', '') .split(':') diff --git a/lib/util/regex.ts b/lib/util/regex.ts index d1da43bea11d1c7cbc51b4181061eef34c6a5f16..4b0e112384012bdcab40d29692b05be754f15c7b 100644 --- a/lib/util/regex.ts +++ b/lib/util/regex.ts @@ -49,6 +49,8 @@ export function escapeRegExp(input: string): string { return input.replace(regEx(/[.*+\-?^${}()|[\]\\]/g), '\\$&'); // $& means the whole matched string } +export const newlineRegex = regEx(/\r?\n/); + const configValStart = regEx(/^!?\//); const configValEnd = regEx(/\/$/); diff --git a/lib/workers/pr/changelog/release-notes.ts b/lib/workers/pr/changelog/release-notes.ts index 192785bb20fcb4b05026575d28e050ae54dfd6bd..aa5591149d612a76339e2d04def70423bac367dc 100644 --- a/lib/workers/pr/changelog/release-notes.ts +++ b/lib/workers/pr/changelog/release-notes.ts @@ -6,7 +6,7 @@ import { logger } from '../../../logger'; import * as memCache from '../../../util/cache/memory'; import * as packageCache from '../../../util/cache/package'; import { linkify } from '../../../util/markdown'; -import { regEx } from '../../../util/regex'; +import { newlineRegex, regEx } from '../../../util/regex'; import * as github from './github'; import * as gitlab from './gitlab'; import type { @@ -136,7 +136,7 @@ export async function getReleaseNotes( function sectionize(text: string, level: number): string[] { const sections: [number, number][] = []; - const lines = text.split('\n'); + const lines = text.split(newlineRegex); const tokens = markdown.parse(text, undefined); tokens.forEach((token) => { if (token.type === 'heading_open') { @@ -254,7 +254,7 @@ export async function getReleaseNotesMd( regEx(/[[\]()]/g), ' ' ); - const [heading] = deParenthesizedSection.split('\n'); + const [heading] = deParenthesizedSection.split(newlineRegex); const title = heading .replace(regEx(/^\s*#*\s*/), '') .split(' ') diff --git a/lib/workers/pr/code-owners.ts b/lib/workers/pr/code-owners.ts index 8fcdbfe7094885f41ef71d0c7c5f8184e41d1d47..52f4361546e04565e62a5188b49d982bd1f43610 100644 --- a/lib/workers/pr/code-owners.ts +++ b/lib/workers/pr/code-owners.ts @@ -3,7 +3,7 @@ import { logger } from '../../logger'; import { Pr } from '../../platform'; import { readLocalFile } from '../../util/fs'; import { getBranchFiles } from '../../util/git'; -import { regEx } from '../../util/regex'; +import { newlineRegex, regEx } from '../../util/regex'; export async function codeOwnersForPr(pr: Pr): Promise<string[]> { logger.debug('Searching for CODEOWNERS file'); @@ -23,7 +23,7 @@ export async function codeOwnersForPr(pr: Pr): Promise<string[]> { const prFiles = await getBranchFiles(pr.sourceBranch); const rules = codeOwnersFile - .split('\n') + .split(newlineRegex) .map((line) => line.trim()) .filter((line) => line && !line.startsWith('#')) .map((line) => { diff --git a/lib/workers/repository/updates/generate.ts b/lib/workers/repository/updates/generate.ts index 26dd516895d4f703fc34edffd923f6afac94a01a..655e7e067eeae7ad35f96fef7de45ccaa70fc2c9 100644 --- a/lib/workers/repository/updates/generate.ts +++ b/lib/workers/repository/updates/generate.ts @@ -4,7 +4,7 @@ import semver from 'semver'; import { mergeChildConfig } from '../../../config'; import { CONFIG_SECRETS_EXPOSED } from '../../../constants/error-messages'; import { logger } from '../../../logger'; -import { regEx } from '../../../util/regex'; +import { newlineRegex, regEx } from '../../../util/regex'; import { sanitize } from '../../../util/sanitize'; import * as template from '../../../util/template'; import type { BranchConfig, BranchUpgradeConfig } from '../../types'; @@ -198,7 +198,7 @@ export function generateBranchConfig( ); if (upgrade.toLowerCase) { // We only need to lowercase the first line - const splitMessage = upgrade.commitMessage.split('\n'); + const splitMessage = upgrade.commitMessage.split(newlineRegex); splitMessage[0] = splitMessage[0].toLowerCase(); upgrade.commitMessage = splitMessage.join('\n'); } @@ -228,7 +228,7 @@ export function generateBranchConfig( upgrade.prTitle = upgrade.prTitle.toLowerCase(); } } else { - [upgrade.prTitle] = upgrade.commitMessage.split('\n'); + [upgrade.prTitle] = upgrade.commitMessage.split(newlineRegex); } upgrade.prTitle += upgrade.hasBaseBranches ? ' ({{baseBranch}})' : ''; if (upgrade.isGroup) {