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