diff --git a/package.json b/package.json index 20ab2c90b06d65..1d4342fac2568d 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,7 @@ "@nrwl/js": "13.10.6", "@nrwl/node": "13.10.6", "@nrwl/workspace": "13.10.6", + "@octokit/rest": "18.12.0", "@storybook/addon-a11y": "6.5.5", "@storybook/addon-actions": "6.5.5", "@storybook/addon-docs": "6.5.5", diff --git a/scripts/github/pullRequests.ts b/scripts/github/pullRequests.ts index 5080cf4a40541a..1ea5838a31c2f1 100644 --- a/scripts/github/pullRequests.ts +++ b/scripts/github/pullRequests.ts @@ -1,5 +1,5 @@ -import type { Octokit } from '@octokit/rest'; -import type { IPullRequest, IRepoDetails } from './types'; +import type { Octokit, RestEndpointMethodTypes } from '@octokit/rest'; +import { IPullRequest, IRepoDetails } from './types'; export interface IGetPullRequestFromCommitParams { github: Octokit; @@ -54,17 +54,18 @@ export async function getPullRequestForCommit( */ export function processPullRequestApiResponse( pr: - | Octokit.ReposListPullRequestsAssociatedWithCommitResponseItem - | Octokit.SearchIssuesAndPullRequestsResponseItemsItem, + | RestEndpointMethodTypes['search']['issuesAndPullRequests']['response']['data']['items'][number] + | RestEndpointMethodTypes['repos']['listPullRequestsAssociatedWithCommit']['response']['data'][number], authorEmail?: string, ): IPullRequest { + const user = pr.user as NonNullable; return { number: pr.number, url: pr.html_url, author: { email: authorEmail, - username: pr.user.login, - url: pr.user.html_url, + username: user.login, + url: user.html_url, }, }; } diff --git a/scripts/package.json b/scripts/package.json index ceaf5899221780..e8890ba34e7595 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -14,7 +14,6 @@ "@mdx-js/loader": "^1.5.5", "@microsoft/load-themed-styles": "^1.10.26", "@microsoft/loader-load-themed-styles": "^1.7.205", - "@octokit/rest": "^16.28.2", "@types/babel__traverse": "^7.0.4", "@types/inquirer": "^6.5.0", "@types/lerna-alias": "^3.0.0", diff --git a/scripts/update-release-notes/index.ts b/scripts/update-release-notes/index.ts index 7760d5b74897dd..81353f3c62ba69 100644 --- a/scripts/update-release-notes/index.ts +++ b/scripts/update-release-notes/index.ts @@ -4,7 +4,7 @@ * given tag. */ -import { Octokit } from '@octokit/rest'; +import type { RestEndpointMethodTypes } from '@octokit/rest'; import { argv, repoDetails, github } from './init'; import { getTagToChangelogMap, getTags } from './changelogsAndTags'; import { getReleases } from './releases'; @@ -49,7 +49,9 @@ async function updateReleaseNotes() { console.log(`${hasBeenReleased ? 'Patching' : 'Creating'} release notes for ${entryInfo}...\n`); count++; - const releaseDetails: Partial = { + const releaseDetails: + | RestEndpointMethodTypes['repos']['updateRelease']['parameters'] + | RestEndpointMethodTypes['repos']['createRelease']['parameters'] = { ...repoDetails, tag_name: entry.tag, name: `${entry.name} v${entry.version}`, @@ -64,9 +66,13 @@ async function updateReleaseNotes() { if (argv.apply) { try { if (hasBeenReleased) { - await github.repos.updateRelease(releaseDetails as Octokit.ReposUpdateReleaseParams); + await github.repos.updateRelease( + releaseDetails as RestEndpointMethodTypes['repos']['updateRelease']['parameters'], + ); } else { - await github.repos.createRelease(releaseDetails as Octokit.ReposCreateReleaseParams); + await github.repos.createRelease( + releaseDetails as RestEndpointMethodTypes['repos']['createRelease']['parameters'], + ); } console.log(`Successfully ${hasBeenReleased ? 'updated' : 'created'} release notes for ${entryInfo}`); } catch (err) { diff --git a/scripts/update-release-notes/pullRequests.ts b/scripts/update-release-notes/pullRequests.ts index 0bf6e834559474..114daa04e8f8fe 100644 --- a/scripts/update-release-notes/pullRequests.ts +++ b/scripts/update-release-notes/pullRequests.ts @@ -1,4 +1,4 @@ -import { Octokit } from '@octokit/rest'; +import type { RestEndpointMethodTypes } from '@octokit/rest'; import { ChangelogEntry } from 'beachball'; import { IPullRequest, processPullRequestApiResponse, getPullRequestForCommit } from '../github'; import { repoDetails, github } from './init'; @@ -54,7 +54,7 @@ async function getMatchingRecentPullRequest(entry: ChangelogEntry): Promise - pr.commits!.some(commit => commit.message === message && commit.authorEmail === authorEmail), + (pr.commits ?? []).some(commit => commit.message === message && commit.authorEmail === authorEmail), ); } } catch (ex) { @@ -93,7 +93,7 @@ async function getRecentPrsByAuthor( // Get the author's 10 most recently updated merged PRs console.log(`Getting ${count} most recent PRs by ${authorUsername}...`); // (this is not quite the right type, since merge_commit_sha doesn't exist on the real response) - const result: Octokit.SearchIssuesAndPullRequestsResponseItemsItem[] = ( + const result = ( await github.search.issuesAndPullRequests({ q: [ 'type:pr', @@ -130,20 +130,25 @@ async function _addCommitInfo(prs: IPullRequest[]): Promise !!commit.author) - .map(commit => ({ - commit: commit.sha, - message: commit.commit.message, - author: commit.author.login, - authorEmail: commit.commit.author.email, - })), + commits: dataWithAuthor(commits.data).map(commit => ({ + commit: commit.sha, + message: commit.commit.message, + author: commit.author.login, + authorEmail: commit.commit.author?.email, + })), }); } catch (ex) { // ignore } } return results; + + function dataWithAuthor(value: RestEndpointMethodTypes['pulls']['listCommits']['response']['data']) { + type Commit = typeof value[number]; + type FilteredCommit = Omit & { author: NonNullable }; + return value.filter(commit => Boolean(commit.author)) as FilteredCommit[]; + } } diff --git a/scripts/update-release-notes/releases.ts b/scripts/update-release-notes/releases.ts index 2f8c190733ca38..63a98c30cb1e99 100644 --- a/scripts/update-release-notes/releases.ts +++ b/scripts/update-release-notes/releases.ts @@ -1,4 +1,3 @@ -import { Octokit } from '@octokit/rest'; import { repoDetails, github } from './init'; import { IRelease } from './types'; @@ -32,7 +31,7 @@ export async function getReleases(tags?: string[]): Promise( github.repos.listReleases.endpoint.merge(repoDetails), ); diff --git a/scripts/update-release-notes/types.ts b/scripts/update-release-notes/types.ts index 9f57da3aa5b6c2..0fa8e866ccfade 100644 --- a/scripts/update-release-notes/types.ts +++ b/scripts/update-release-notes/types.ts @@ -1,5 +1,5 @@ import { ChangelogJsonEntry } from 'beachball'; -import { IPullRequest } from '../github/index'; +import { IPullRequest } from '../github'; /** Entry in a CHANGELOG.json's `entries` array, plus the package name */ export interface IChangelogEntry extends ChangelogJsonEntry { @@ -15,7 +15,7 @@ export interface ICommit { /** Author GitHub username */ author: string; /** Author email */ - authorEmail: string; + authorEmail?: string; } export interface IExtendedPullRequest extends IPullRequest { diff --git a/yarn.lock b/yarn.lock index 5381618fb9e9f4..e60d2f9456055f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3519,27 +3519,15 @@ node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/rest@^16.28.2": - version "16.43.1" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.1.tgz#3b11e7d1b1ac2bbeeb23b08a17df0b20947eda6b" - integrity sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw== +"@octokit/rest@18.12.0", "@octokit/rest@^16.43.0 || ^17.11.0 || ^18.12.0", "@octokit/rest@^18.12.0": + version "18.12.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" + integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/plugin-paginate-rest" "^1.1.1" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "2.4.0" - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" + "@octokit/core" "^3.5.1" + "@octokit/plugin-paginate-rest" "^2.16.8" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^5.12.0" "@octokit/rest@^16.28.4": version "16.43.2" @@ -3563,16 +3551,6 @@ once "^1.4.0" universal-user-agent "^4.0.0" -"@octokit/rest@^16.43.0 || ^17.11.0 || ^18.12.0", "@octokit/rest@^18.12.0": - version "18.12.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" - integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== - dependencies: - "@octokit/core" "^3.5.1" - "@octokit/plugin-paginate-rest" "^2.16.8" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^5.12.0" - "@octokit/types@^2.0.0", "@octokit/types@^2.0.1": version "2.1.1" resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.1.1.tgz#77e80d1b663c5f1f829e5377b728fa3c4fe5a97d"