diff --git a/lib/manager/common.ts b/lib/manager/common.ts index 2a81ecd28675c084fe96a43e57cd5f645a8b45e8..749bc366244d5c62a74e4ff068af0383f3527258 100644 --- a/lib/manager/common.ts +++ b/lib/manager/common.ts @@ -1,6 +1,7 @@ import { ReleaseType } from 'semver'; import { RangeStrategy, SkipReason } from '../types'; import { ValidationMessage, GlobalConfig, UpdateType } from '../config/common'; +import { FileData } from '../platform/common'; export type Result<T> = T | Promise<T>; @@ -189,7 +190,7 @@ export interface ArtifactError { export interface UpdateArtifactsResult { artifactError?: ArtifactError; - file?: { name: string; contents: string }; + file?: FileData; } export interface UpdateArtifact { diff --git a/lib/manager/gomod/artifacts.ts b/lib/manager/gomod/artifacts.ts index 24cf7fa0aee2e9ff89770892e8d165472471ea34..b5db48bfb6ff06e21d46be70e4e128ef0e4ca2be 100644 --- a/lib/manager/gomod/artifacts.ts +++ b/lib/manager/gomod/artifacts.ts @@ -129,10 +129,9 @@ export async function updateArtifacts({ }); } } - const finalGoModContent = (await readLocalFile(goModFileName)).replace( - /\/\/ renovate-replace /g, - '' - ); + const finalGoModContent = ( + await readLocalFile(goModFileName, 'utf8') + ).replace(/\/\/ renovate-replace /g, ''); if (finalGoModContent !== newGoModContent) { logger.debug('Found updated go.mod after go.sum update'); res.push({ diff --git a/lib/manager/gradle-wrapper/artifacts.spec.ts b/lib/manager/gradle-wrapper/artifacts.spec.ts index 93a89b905ce3a84790b1890799892d787dd1edcc..93d3be3094af0302c368230e9b050646d6879cd0 100644 --- a/lib/manager/gradle-wrapper/artifacts.spec.ts +++ b/lib/manager/gradle-wrapper/artifacts.spec.ts @@ -71,8 +71,7 @@ describe('manager/gradle-wrapper/update', () => { resolve( __dirname, `./__fixtures__/testFiles/${fileProjectPath}` - ), - 'utf8' + ) ), }, }; @@ -86,14 +85,10 @@ describe('manager/gradle-wrapper/update', () => { 'gradlew.bat', ].forEach(file => { expect( - readFileSync( - resolve(__dirname, `./__fixtures__/testFiles/${file}`), - 'utf8' - ) + readFileSync(resolve(__dirname, `./__fixtures__/testFiles/${file}`)) ).toEqual( readFileSync( - resolve(__dirname, `./__fixtures__/expectedFiles/${file}`), - 'utf8' + resolve(__dirname, `./__fixtures__/expectedFiles/${file}`) ) ); }); diff --git a/lib/util/fs.spec.ts b/lib/util/fs.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..10199a460d821cdbf4e222260322576eef6d60b4 --- /dev/null +++ b/lib/util/fs.spec.ts @@ -0,0 +1,18 @@ +import { getName } from '../../test/util'; +import { readLocalFile } from './fs'; + +describe(getName(__filename), () => { + describe('readLocalFile', () => { + it('reads buffer', async () => { + expect(await readLocalFile(__filename)).toBeInstanceOf(Buffer); + }); + it('reads string', async () => { + expect(typeof (await readLocalFile(__filename, 'utf8'))).toBe('string'); + }); + + it('does not throw', async () => { + // Does not work on FreeBSD: https://nodejs.org/docs/latest-v10.x/api/fs.html#fs_fs_readfile_path_options_callback + expect(await readLocalFile(__dirname)).toBeNull(); + }); + }); +}); diff --git a/lib/util/fs.ts b/lib/util/fs.ts index c2975955053f900ce7d3d071ee6a296c1d28f970..3532ac9be75996bcf6a0f6a0402d4624baabe924 100644 --- a/lib/util/fs.ts +++ b/lib/util/fs.ts @@ -1,10 +1,11 @@ import { parse, join } from 'upath'; import { outputFile, readFile } from 'fs-extra'; import { logger } from '../logger'; +import { RenovateConfig } from '../config/common'; let localDir = ''; -export function setFsConfig(config: any): void { +export function setFsConfig(config: Partial<RenovateConfig>): void { localDir = config.localDir; } @@ -20,12 +21,20 @@ export function getSiblingFileName( return join(subDirectory, otherFileName); } -export async function readLocalFile(fileName: string): Promise<string> { +export async function readLocalFile(fileName: string): Promise<Buffer>; +export async function readLocalFile( + fileName: string, + encoding: 'utf8' +): Promise<string>; +export async function readLocalFile( + fileName: string, + encoding?: string +): Promise<string | Buffer> { const localFileName = join(localDir, fileName); try { - const fileContent = await readFile(localFileName, 'utf8'); + const fileContent = await readFile(localFileName, encoding); return fileContent; - } catch (err) /* istanbul ignore next */ { + } catch (err) { logger.trace({ err }, 'Error reading local file'); return null; } diff --git a/lib/util/index.ts b/lib/util/index.ts index ca1081ab0e9fd628a4615e4bb017521c3f888fab..5f261f443ce05525a6c29c52a9a7086121d7f6b2 100644 --- a/lib/util/index.ts +++ b/lib/util/index.ts @@ -1,7 +1,10 @@ import { setExecConfig } from './exec'; import { setFsConfig } from './fs'; +import { RenovateConfig } from '../config/common'; -export async function setUtilConfig(config: any): Promise<void> { +export async function setUtilConfig( + config: Partial<RenovateConfig> +): Promise<void> { await setExecConfig(config); setFsConfig(config); }