From 81ee883e30a1dee86769f8b4cf08fecdb2b2a3bd Mon Sep 17 00:00:00 2001
From: Sergei Zharinov <zharinov@users.noreply.github.com>
Date: Thu, 8 Sep 2022 11:00:42 +0300
Subject: [PATCH] refactor(github): Extract `utils/github` from datasources
 (#17697)

---
 .../github-releases/cache/cache-base.spec.ts  |  5 ++-
 .../github-releases/cache/cache-base.ts       | 16 ++++----
 .../datasource/github-releases/cache/index.ts |  5 ++-
 .../datasource/github-releases/digest.spec.ts |  2 +-
 .../datasource/github-releases/index.ts       |  8 +++-
 .../datasource/github-releases/test/index.ts  |  2 +-
 .../datasource/github-releases/types.ts       | 26 -------------
 lib/modules/datasource/github-tags/cache.ts   |  5 +--
 lib/modules/datasource/github-tags/index.ts   |  4 +-
 lib/modules/datasource/github-tags/types.ts   | 11 ------
 lib/modules/datasource/go/common.ts           |  2 +-
 lib/modules/datasource/hermit/index.ts        |  4 +-
 .../cache => util/github}/types.ts            | 39 +++++++++++++++++++
 .../github/url.spec.ts}                       |  4 +-
 .../common.ts => util/github/url.ts}          |  2 +-
 .../update/pr/changelog/github/index.ts       |  6 ++-
 16 files changed, 76 insertions(+), 65 deletions(-)
 delete mode 100644 lib/modules/datasource/github-releases/types.ts
 delete mode 100644 lib/modules/datasource/github-tags/types.ts
 rename lib/{modules/datasource/github-releases/cache => util/github}/types.ts (83%)
 rename lib/{modules/datasource/github-releases/common.spec.ts => util/github/url.spec.ts} (88%)
 rename lib/{modules/datasource/github-releases/common.ts => util/github/url.ts} (93%)

diff --git a/lib/modules/datasource/github-releases/cache/cache-base.spec.ts b/lib/modules/datasource/github-releases/cache/cache-base.spec.ts
index b08d200263..20166e40a8 100644
--- a/lib/modules/datasource/github-releases/cache/cache-base.spec.ts
+++ b/lib/modules/datasource/github-releases/cache/cache-base.spec.ts
@@ -1,12 +1,15 @@
 import { DateTime } from 'luxon';
 import { mocked } from '../../../../../test/util';
 import * as _packageCache from '../../../../util/cache/package';
+import type {
+  QueryResponse,
+  StoredItemBase,
+} from '../../../../util/github/types';
 import {
   GithubGraphqlResponse,
   GithubHttp,
 } from '../../../../util/http/github';
 import { AbstractGithubDatasourceCache } from './cache-base';
-import type { QueryResponse, StoredItemBase } from './types';
 
 jest.mock('../../../../util/cache/package');
 const packageCache = mocked(_packageCache);
diff --git a/lib/modules/datasource/github-releases/cache/cache-base.ts b/lib/modules/datasource/github-releases/cache/cache-base.ts
index 447ec37156..ec2db09f54 100644
--- a/lib/modules/datasource/github-releases/cache/cache-base.ts
+++ b/lib/modules/datasource/github-releases/cache/cache-base.ts
@@ -3,13 +3,6 @@ import { DateTime, DurationLikeObject } from 'luxon';
 import { logger } from '../../../../logger';
 import * as memCache from '../../../../util/cache/memory';
 import * as packageCache from '../../../../util/cache/package';
-import type {
-  GithubGraphqlResponse,
-  GithubHttp,
-  GithubHttpOptions,
-} from '../../../../util/http/github';
-import type { GetReleasesConfig } from '../../types';
-import { getApiBaseUrl } from '../common';
 import type {
   CacheOptions,
   ChangelogRelease,
@@ -17,7 +10,14 @@ import type {
   GithubQueryParams,
   QueryResponse,
   StoredItemBase,
-} from './types';
+} from '../../../../util/github/types';
+import { getApiBaseUrl } from '../../../../util/github/url';
+import type {
+  GithubGraphqlResponse,
+  GithubHttp,
+  GithubHttpOptions,
+} from '../../../../util/http/github';
+import type { GetReleasesConfig } from '../../types';
 
 /**
  * The options that are meant to be used in production.
diff --git a/lib/modules/datasource/github-releases/cache/index.ts b/lib/modules/datasource/github-releases/cache/index.ts
index 5f7d35cfb6..01da1bc6bb 100644
--- a/lib/modules/datasource/github-releases/cache/index.ts
+++ b/lib/modules/datasource/github-releases/cache/index.ts
@@ -1,6 +1,9 @@
+import type {
+  CacheOptions,
+  StoredItemBase,
+} from '../../../../util/github/types';
 import type { GithubHttp } from '../../../../util/http/github';
 import { AbstractGithubDatasourceCache } from './cache-base';
-import type { CacheOptions, StoredItemBase } from './types';
 
 export const query = `
 query ($owner: String!, $name: String!, $cursor: String, $count: Int!) {
diff --git a/lib/modules/datasource/github-releases/digest.spec.ts b/lib/modules/datasource/github-releases/digest.spec.ts
index d370acc027..3a14f7a218 100644
--- a/lib/modules/datasource/github-releases/digest.spec.ts
+++ b/lib/modules/datasource/github-releases/digest.spec.ts
@@ -1,7 +1,7 @@
 import hasha from 'hasha';
 import * as httpMock from '../../../../test/http-mock';
+import type { DigestAsset } from '../../../util/github/types';
 import { GitHubReleaseMocker } from './test';
-import type { DigestAsset } from './types';
 
 import { GithubReleasesDatasource } from '.';
 
diff --git a/lib/modules/datasource/github-releases/index.ts b/lib/modules/datasource/github-releases/index.ts
index ded3879a9a..aff1caabd7 100644
--- a/lib/modules/datasource/github-releases/index.ts
+++ b/lib/modules/datasource/github-releases/index.ts
@@ -1,12 +1,16 @@
 // TODO: types (#7154)
 import hasha from 'hasha';
 import { logger } from '../../../logger';
+import type {
+  DigestAsset,
+  GithubRelease,
+  GithubReleaseAsset,
+} from '../../../util/github/types';
+import { getApiBaseUrl, getSourceUrl } from '../../../util/github/url';
 import { GithubHttp } from '../../../util/http/github';
 import { newlineRegex, regEx } from '../../../util/regex';
 import { Datasource } from '../datasource';
 import type { DigestConfig, GetReleasesConfig, ReleaseResult } from '../types';
-import { getApiBaseUrl, getSourceUrl } from './common';
-import type { DigestAsset, GithubRelease, GithubReleaseAsset } from './types';
 
 export const cacheNamespace = 'datasource-github-releases';
 
diff --git a/lib/modules/datasource/github-releases/test/index.ts b/lib/modules/datasource/github-releases/test/index.ts
index 5c9a8a988a..4343fff599 100644
--- a/lib/modules/datasource/github-releases/test/index.ts
+++ b/lib/modules/datasource/github-releases/test/index.ts
@@ -1,6 +1,6 @@
 import * as httpMock from '../../../../../test/http-mock';
 import { partial } from '../../../../../test/util';
-import type { GithubRelease } from '../types';
+import type { GithubRelease } from '../../../../util/github/types';
 
 export class GitHubReleaseMocker {
   constructor(
diff --git a/lib/modules/datasource/github-releases/types.ts b/lib/modules/datasource/github-releases/types.ts
deleted file mode 100644
index ebdd2f55b7..0000000000
--- a/lib/modules/datasource/github-releases/types.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-export interface GithubRelease {
-  id: number;
-  tag_name: string;
-  published_at: string;
-  prerelease: boolean;
-  draft?: boolean;
-  assets: GithubReleaseAsset[];
-
-  html_url: string;
-  name: string;
-  body: string;
-}
-
-export interface GithubReleaseAsset {
-  name: string;
-  url: string;
-  browser_download_url: string;
-  size: number;
-}
-
-export interface DigestAsset {
-  assetName: string;
-  currentVersion: string;
-  currentDigest: string;
-  digestedFileName?: string;
-}
diff --git a/lib/modules/datasource/github-tags/cache.ts b/lib/modules/datasource/github-tags/cache.ts
index c234cdc67b..00d2713547 100644
--- a/lib/modules/datasource/github-tags/cache.ts
+++ b/lib/modules/datasource/github-tags/cache.ts
@@ -1,9 +1,6 @@
+import type { CacheOptions, StoredItemBase } from '../../../util/github/types';
 import type { GithubHttp } from '../../../util/http/github';
 import { AbstractGithubDatasourceCache } from '../github-releases/cache/cache-base';
-import type {
-  CacheOptions,
-  StoredItemBase,
-} from '../github-releases/cache/types';
 
 const query = `
 query ($owner: String!, $name: String!, $cursor: String, $count: Int!) {
diff --git a/lib/modules/datasource/github-tags/index.ts b/lib/modules/datasource/github-tags/index.ts
index 41f43aa4df..65b057dc1e 100644
--- a/lib/modules/datasource/github-tags/index.ts
+++ b/lib/modules/datasource/github-tags/index.ts
@@ -1,9 +1,9 @@
 import { logger } from '../../../logger';
+import type { GitHubTag, TagResponse } from '../../../util/github/types';
+import { getApiBaseUrl, getSourceUrl } from '../../../util/github/url';
 import { GithubHttp } from '../../../util/http/github';
 import { Datasource } from '../datasource';
-import { getApiBaseUrl, getSourceUrl } from '../github-releases/common';
 import type { DigestConfig, GetReleasesConfig, ReleaseResult } from '../types';
-import type { GitHubTag, TagResponse } from './types';
 
 export class GithubTagsDatasource extends Datasource {
   static readonly id = 'github-tags';
diff --git a/lib/modules/datasource/github-tags/types.ts b/lib/modules/datasource/github-tags/types.ts
deleted file mode 100644
index e8b5888166..0000000000
--- a/lib/modules/datasource/github-tags/types.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-export interface TagResponse {
-  object: {
-    type: string;
-    url: string;
-    sha: string;
-  };
-}
-
-export interface GitHubTag {
-  name: string;
-}
diff --git a/lib/modules/datasource/go/common.ts b/lib/modules/datasource/go/common.ts
index ed876086eb..97f4bc3c38 100644
--- a/lib/modules/datasource/go/common.ts
+++ b/lib/modules/datasource/go/common.ts
@@ -1,5 +1,5 @@
+import { getSourceUrl as githubSourceUrl } from '../../../util/github/url';
 import { BitBucketTagsDatasource } from '../bitbucket-tags';
-import { getSourceUrl as githubSourceUrl } from '../github-releases/common';
 import { GithubTagsDatasource } from '../github-tags';
 import { GitlabTagsDatasource } from '../gitlab-tags';
 import { getSourceUrl as gitlabSourceUrl } from '../gitlab-tags/util';
diff --git a/lib/modules/datasource/hermit/index.ts b/lib/modules/datasource/hermit/index.ts
index 4a81651a42..3ea3f975b7 100644
--- a/lib/modules/datasource/hermit/index.ts
+++ b/lib/modules/datasource/hermit/index.ts
@@ -1,13 +1,13 @@
 import { logger } from '../../../logger';
 import { cache } from '../../../util/cache/package/decorator';
+import type { GithubRelease } from '../../../util/github/types';
+import { getApiBaseUrl } from '../../../util/github/url';
 import { GithubHttp } from '../../../util/http/github';
 import { regEx } from '../../../util/regex';
 import { streamToString } from '../../../util/streams';
 import { parseUrl } from '../../../util/url';
 import { id } from '../../versioning/hermit';
 import { Datasource } from '../datasource';
-import { getApiBaseUrl } from '../github-releases/common';
-import type { GithubRelease } from '../github-releases/types';
 import type { GetReleasesConfig, ReleaseResult } from '../types';
 import type { HermitSearchResult } from './types';
 
diff --git a/lib/modules/datasource/github-releases/cache/types.ts b/lib/util/github/types.ts
similarity index 83%
rename from lib/modules/datasource/github-releases/cache/types.ts
rename to lib/util/github/types.ts
index 0c6b2321ff..b58fe4572b 100644
--- a/lib/modules/datasource/github-releases/cache/types.ts
+++ b/lib/util/github/types.ts
@@ -1,3 +1,42 @@
+export interface GithubRelease {
+  id: number;
+  tag_name: string;
+  published_at: string;
+  prerelease: boolean;
+  draft?: boolean;
+  assets: GithubReleaseAsset[];
+
+  html_url: string;
+  name: string;
+  body: string;
+}
+
+export interface GithubReleaseAsset {
+  name: string;
+  url: string;
+  browser_download_url: string;
+  size: number;
+}
+
+export interface DigestAsset {
+  assetName: string;
+  currentVersion: string;
+  currentDigest: string;
+  digestedFileName?: string;
+}
+
+export interface TagResponse {
+  object: {
+    type: string;
+    url: string;
+    sha: string;
+  };
+}
+
+export interface GitHubTag {
+  name: string;
+}
+
 /**
  * Every `AbstractGithubDatasourceCache` implementation
  * should have `graphqlQuery` that uses parameters
diff --git a/lib/modules/datasource/github-releases/common.spec.ts b/lib/util/github/url.spec.ts
similarity index 88%
rename from lib/modules/datasource/github-releases/common.spec.ts
rename to lib/util/github/url.spec.ts
index a75e527a80..01059d664b 100644
--- a/lib/modules/datasource/github-releases/common.spec.ts
+++ b/lib/util/github/url.spec.ts
@@ -1,6 +1,6 @@
-import { getApiBaseUrl, getSourceUrlBase } from './common';
+import { getApiBaseUrl, getSourceUrlBase } from './url';
 
-describe('modules/datasource/github-releases/common', () => {
+describe('util/github/url', () => {
   describe('getSourceUrlBase', () => {
     it('ensures trailing slash', () => {
       const sourceUrl = getSourceUrlBase('https://gh.my-company.com');
diff --git a/lib/modules/datasource/github-releases/common.ts b/lib/util/github/url.ts
similarity index 93%
rename from lib/modules/datasource/github-releases/common.ts
rename to lib/util/github/url.ts
index 58969644bd..9b0062a251 100644
--- a/lib/modules/datasource/github-releases/common.ts
+++ b/lib/util/github/url.ts
@@ -1,4 +1,4 @@
-import { ensureTrailingSlash } from '../../../util/url';
+import { ensureTrailingSlash } from '../url';
 
 const defaultSourceUrlBase = 'https://github.com/';
 const defaultApiBaseUrl = 'https://api.github.com/';
diff --git a/lib/workers/repository/update/pr/changelog/github/index.ts b/lib/workers/repository/update/pr/changelog/github/index.ts
index 94230966ce..cd4706b6ed 100644
--- a/lib/workers/repository/update/pr/changelog/github/index.ts
+++ b/lib/workers/repository/update/pr/changelog/github/index.ts
@@ -1,12 +1,14 @@
 import changelogFilenameRegex from 'changelog-filename-regex';
 import { logger } from '../../../../../../logger';
-import type { GithubRelease } from '../../../../../../modules/datasource/github-releases/types';
-import type { GitHubTag } from '../../../../../../modules/datasource/github-tags/types';
 import type {
   GithubGitBlob,
   GithubGitTree,
   GithubGitTreeNode,
 } from '../../../../../../types/platform/github';
+import type {
+  GitHubTag,
+  GithubRelease,
+} from '../../../../../../util/github/types';
 import { GithubHttp } from '../../../../../../util/http/github';
 import { fromBase64 } from '../../../../../../util/string';
 import { ensureTrailingSlash } from '../../../../../../util/url';
-- 
GitLab