From 3756f2aec32f8cfa56ac12c91c5c23570a41cb11 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Fri, 5 Feb 2021 10:49:34 +0100
Subject: [PATCH] refactor: GlobalConfig type

---
 lib/config/cli.ts                  |  3 ++-
 lib/config/common.ts               | 25 ++++++++++++++++---------
 lib/config/defaults.ts             |  6 +++---
 lib/config/env.ts                  |  6 +++---
 lib/config/file.ts                 |  6 +++---
 lib/config/index.ts                |  8 ++++----
 lib/config/presets/index.ts        |  8 ++++----
 lib/util/cache/package/index.ts    |  6 +++---
 lib/workers/global/autodiscover.ts |  6 +++---
 lib/workers/global/index.ts        |  3 ++-
 10 files changed, 43 insertions(+), 34 deletions(-)

diff --git a/lib/config/cli.ts b/lib/config/cli.ts
index ed499ba809..e7e64a036a 100644
--- a/lib/config/cli.ts
+++ b/lib/config/cli.ts
@@ -1,5 +1,6 @@
 import { Command } from 'commander';
 import { version } from '../../package.json';
+import { GlobalConfig } from './common';
 import { RenovateOptions, getOptions } from './definitions';
 
 export function getCliName(option: Partial<RenovateOptions>): string {
@@ -14,7 +15,7 @@ export interface RenovateCliConfig extends Record<string, any> {
   repositories?: string[];
 }
 
-export function getConfig(input: string[]): RenovateCliConfig {
+export function getConfig(input: string[]): GlobalConfig {
   // massage migrated configuration keys
   const argv = input
     .map((a) =>
diff --git a/lib/config/common.ts b/lib/config/common.ts
index c6f03095dd..b23a0f3342 100644
--- a/lib/config/common.ts
+++ b/lib/config/common.ts
@@ -63,6 +63,19 @@ export interface RenovateSharedConfig {
   unicodeEmoji?: boolean;
 }
 
+// Config options used only within the global worker
+export interface GlobalAdminConfig {
+  autodiscover?: boolean;
+  autodiscoverFilter?: string;
+  logFile?: string;
+  logFileLevel?: LogLevel;
+  logLevel?: LogLevel;
+  redisUrl?: string;
+  repositories?: RenovateRepository[];
+  trustLevel?: 'low' | 'high';
+}
+
+// Config options used within the repository worker, but non-user configurable
 export interface RepoAdminConfig {
   allowPostUpgradeCommandTemplating?: boolean;
   allowedPostUpgradeCommands?: string[];
@@ -71,9 +84,6 @@ export interface RepoAdminConfig {
 }
 
 export interface RenovateAdminConfig {
-  autodiscover?: boolean;
-  autodiscoverFilter?: string;
-
   baseDir?: string;
   cacheDir?: string;
   configWarningReuseIssue?: boolean;
@@ -85,9 +95,7 @@ export interface RenovateAdminConfig {
   endpoint?: string;
 
   localDir?: string;
-  logFile?: string;
-  logFileLevel?: LogLevel;
-  logLevel?: LogLevel;
+
   logContext?: string;
 
   onboarding?: boolean;
@@ -101,10 +109,7 @@ export interface RenovateAdminConfig {
   postUpdateOptions?: string[];
   privateKey?: string | Buffer;
   privateKeyPath?: string;
-  repositories?: RenovateRepository[];
   requireConfig?: boolean;
-  trustLevel?: 'low' | 'high';
-  redisUrl?: string;
   gitPrivateKey?: string;
 }
 
@@ -184,6 +189,8 @@ export interface RenovateConfig
   fetchReleaseNotes?: boolean;
 }
 
+export interface GlobalConfig extends RenovateConfig, GlobalAdminConfig {}
+
 export interface AssigneesAndReviewersConfig {
   assigneesFromCodeOwners?: boolean;
   assignees?: string[];
diff --git a/lib/config/defaults.ts b/lib/config/defaults.ts
index aa10fefbef..5b84b28767 100644
--- a/lib/config/defaults.ts
+++ b/lib/config/defaults.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig } from './common';
+import { GlobalConfig } from './common';
 import { RenovateOptions, getOptions } from './definitions';
 
 const defaultValues = {
@@ -14,9 +14,9 @@ export function getDefault(option: RenovateOptions): any {
     : option.default;
 }
 
-export function getConfig(): RenovateConfig {
+export function getConfig(): GlobalConfig {
   const options = getOptions();
-  const config: RenovateConfig = {};
+  const config: GlobalConfig = {};
   options.forEach((option) => {
     if (!option.parent) {
       config[option.name] = getDefault(option);
diff --git a/lib/config/env.ts b/lib/config/env.ts
index 1c0073ca4b..ddaec11ef7 100644
--- a/lib/config/env.ts
+++ b/lib/config/env.ts
@@ -3,7 +3,7 @@ import is from '@sindresorhus/is';
 import { PLATFORM_TYPE_GITHUB } from '../constants/platforms';
 import * as datasourceDocker from '../datasource/docker';
 import { logger } from '../logger';
-import { RenovateConfig } from './common';
+import { GlobalConfig } from './common';
 import { RenovateOptions, getOptions } from './definitions';
 
 export function getEnvName(option: Partial<RenovateOptions>): string {
@@ -17,10 +17,10 @@ export function getEnvName(option: Partial<RenovateOptions>): string {
   return `RENOVATE_${nameWithUnderscores.toUpperCase()}`;
 }
 
-export function getConfig(env: NodeJS.ProcessEnv): RenovateConfig {
+export function getConfig(env: NodeJS.ProcessEnv): GlobalConfig {
   const options = getOptions();
 
-  const config: RenovateConfig = { hostRules: [] };
+  const config: GlobalConfig = { hostRules: [] };
 
   const coersions = {
     boolean: (val: string): boolean => val === 'true',
diff --git a/lib/config/file.ts b/lib/config/file.ts
index 4e245a9882..32d55d247c 100644
--- a/lib/config/file.ts
+++ b/lib/config/file.ts
@@ -1,15 +1,15 @@
 import upath from 'upath';
 import { logger } from '../logger';
-import { RenovateConfig } from './common';
+import { GlobalConfig } from './common';
 import { migrateConfig } from './migration';
 
-export function getConfig(env: NodeJS.ProcessEnv): RenovateConfig {
+export function getConfig(env: NodeJS.ProcessEnv): GlobalConfig {
   let configFile = env.RENOVATE_CONFIG_FILE || 'config';
   if (!upath.isAbsolute(configFile)) {
     configFile = `${process.cwd()}/${configFile}`;
     logger.debug('Checking for config file in ' + configFile);
   }
-  let config: RenovateConfig = {};
+  let config: GlobalConfig = {};
   try {
     // eslint-disable-next-line global-require,import/no-dynamic-require
     config = require(configFile);
diff --git a/lib/config/index.ts b/lib/config/index.ts
index 8c8eae307a..f94f23c5bb 100644
--- a/lib/config/index.ts
+++ b/lib/config/index.ts
@@ -3,7 +3,7 @@ import { get, getLanguageList, getManagerList } from '../manager';
 import { readFile } from '../util/fs';
 import { ensureTrailingSlash } from '../util/url';
 import * as cliParser from './cli';
-import { RenovateConfig, RenovateConfigStage } from './common';
+import { GlobalConfig, RenovateConfig, RenovateConfigStage } from './common';
 import * as defaultsParser from './defaults';
 import * as definitions from './definitions';
 import * as envParser from './env';
@@ -44,7 +44,7 @@ export function getManagerConfig(
 export async function parseConfigs(
   env: NodeJS.ProcessEnv,
   argv: string[]
-): Promise<RenovateConfig> {
+): Promise<GlobalConfig> {
   logger.debug('Parsing configs');
 
   // Get configs
@@ -138,9 +138,9 @@ export async function parseConfigs(
 }
 
 export function filterConfig(
-  inputConfig: RenovateConfig,
+  inputConfig: GlobalConfig,
   targetStage: RenovateConfigStage
-): RenovateConfig {
+): GlobalConfig {
   logger.trace({ config: inputConfig }, `filterConfig('${targetStage}')`);
   const outputConfig: RenovateConfig = { ...inputConfig };
   const stages = ['global', 'repository', 'package', 'branch', 'pr'];
diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts
index fb07aa8d9e..92d4c04550 100644
--- a/lib/config/presets/index.ts
+++ b/lib/config/presets/index.ts
@@ -6,7 +6,7 @@ import {
 import { logger } from '../../logger';
 import { ExternalHostError } from '../../types/errors/external-host-error';
 import { regEx } from '../../util/regex';
-import { RenovateConfig } from '../common';
+import { GlobalConfig, RenovateConfig } from '../common';
 import * as massage from '../massage';
 import * as migration from '../migration';
 import { mergeChildConfig } from '../utils';
@@ -185,11 +185,11 @@ export async function getPreset(
 }
 
 export async function resolveConfigPresets(
-  inputConfig: RenovateConfig,
+  inputConfig: GlobalConfig,
   baseConfig?: RenovateConfig,
   ignorePresets?: string[],
   existingPresets: string[] = []
-): Promise<RenovateConfig> {
+): Promise<GlobalConfig> {
   if (!ignorePresets || ignorePresets.length === 0) {
     ignorePresets = inputConfig.ignorePresets || []; // eslint-disable-line
   }
@@ -197,7 +197,7 @@ export async function resolveConfigPresets(
     { config: inputConfig, existingPresets },
     'resolveConfigPresets'
   );
-  let config: RenovateConfig = {};
+  let config: GlobalConfig = {};
   // First, merge all the preset configs from left to right
   if (inputConfig.extends?.length) {
     for (const preset of inputConfig.extends) {
diff --git a/lib/util/cache/package/index.ts b/lib/util/cache/package/index.ts
index 4735f5e977..1300325c3e 100644
--- a/lib/util/cache/package/index.ts
+++ b/lib/util/cache/package/index.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig } from '../../../config/common';
+import { GlobalConfig } from '../../../config/common';
 import * as memCache from '../memory';
 import { PackageCache } from './common';
 import * as fileCache from './file';
@@ -35,7 +35,7 @@ export function set(
   return cacheProxy.set(namespace, key, value, minutes);
 }
 
-export function init(config: RenovateConfig): void {
+export function init(config: GlobalConfig): void {
   if (config.redisUrl) {
     redisCache.init(config.redisUrl);
     cacheProxy = {
@@ -51,7 +51,7 @@ export function init(config: RenovateConfig): void {
   }
 }
 
-export function cleanup(config: RenovateConfig): void {
+export function cleanup(config: GlobalConfig): void {
   if (config.redisUrl) {
     redisCache.end();
   }
diff --git a/lib/workers/global/autodiscover.ts b/lib/workers/global/autodiscover.ts
index 019a3a85c5..396f32b9e2 100644
--- a/lib/workers/global/autodiscover.ts
+++ b/lib/workers/global/autodiscover.ts
@@ -1,6 +1,6 @@
 import is from '@sindresorhus/is';
 import minimatch from 'minimatch';
-import { RenovateConfig } from '../../config';
+import { GlobalConfig } from '../../config';
 import { logger } from '../../logger';
 import { platform } from '../../platform';
 
@@ -10,8 +10,8 @@ function repoName(value: string | { repository: string }): string {
 }
 
 export async function autodiscoverRepositories(
-  config: RenovateConfig
-): Promise<RenovateConfig> {
+  config: GlobalConfig
+): Promise<GlobalConfig> {
   if (!config.autodiscover) {
     if (!config.repositories?.length) {
       logger.warn(
diff --git a/lib/workers/global/index.ts b/lib/workers/global/index.ts
index 2bbea30c1e..e9075469fd 100644
--- a/lib/workers/global/index.ts
+++ b/lib/workers/global/index.ts
@@ -3,6 +3,7 @@ import { ERROR } from 'bunyan';
 import fs from 'fs-extra';
 import upath from 'upath';
 import * as configParser from '../../config';
+import { GlobalConfig } from '../../config';
 import { setAdminConfig } from '../../config/admin';
 import { getAdminOptionNames } from '../../config/definitions';
 import { getProblems, logger, setMeta } from '../../logger';
@@ -46,7 +47,7 @@ function haveReachedLimits(): boolean {
 }
 
 export async function start(): Promise<number> {
-  let config: RenovateConfig;
+  let config: GlobalConfig;
   try {
     // read global config from file, env and cli args
     config = await getGlobalConfig();
-- 
GitLab