diff --git a/src/generated/graphql.ts b/src/generated/graphql.ts index 68efa685..37a05831 100644 --- a/src/generated/graphql.ts +++ b/src/generated/graphql.ts @@ -1,18 +1,18 @@ import * as Types from './graphql-types'; -export type ClosedPullRequestQueryVariables = Types.Exact<{ - owner: Types.Scalars['String']['input']; - name: Types.Scalars['String']['input']; - number: Types.Scalars['Int']['input']; +export type GetCheckSuiteQueryVariables = Types.Exact<{ + node_id: Types.Scalars['ID']['input']; + workflow_path: Types.Scalars['String']['input']; }>; -export type ClosedPullRequestQuery = { __typename?: 'Query', repository?: { __typename?: 'Repository', pullRequest?: { __typename?: 'PullRequest', commits: { __typename?: 'PullRequestCommitConnection', nodes?: Array<{ __typename?: 'PullRequestCommit', commit: { __typename?: 'Commit', authoredDate: string, committedDate: string } } | null> | null } } | null } | null }; +export type GetCheckSuiteQuery = { __typename?: 'Query', node?: { __typename: 'AddedToMergeQueueEvent' } | { __typename: 'AddedToProjectEvent' } | { __typename: 'App' } | { __typename: 'AssignedEvent' } | { __typename: 'AutoMergeDisabledEvent' } | { __typename: 'AutoMergeEnabledEvent' } | { __typename: 'AutoRebaseEnabledEvent' } | { __typename: 'AutoSquashEnabledEvent' } | { __typename: 'AutomaticBaseChangeFailedEvent' } | { __typename: 'AutomaticBaseChangeSucceededEvent' } | { __typename: 'BaseRefChangedEvent' } | { __typename: 'BaseRefDeletedEvent' } | { __typename: 'BaseRefForcePushedEvent' } | { __typename: 'Blob' } | { __typename: 'Bot' } | { __typename: 'BranchProtectionRule' } | { __typename: 'BypassForcePushAllowance' } | { __typename: 'BypassPullRequestAllowance' } | { __typename: 'CWE' } | { __typename: 'CheckRun' } | { __typename: 'CheckSuite', checkRuns?: { __typename?: 'CheckRunConnection', nodes?: Array<{ __typename?: 'CheckRun', databaseId?: number | null, name: string, startedAt?: string | null, completedAt?: string | null, conclusion?: Types.CheckConclusionState | null, status: Types.CheckStatusState, annotations?: { __typename?: 'CheckAnnotationConnection', nodes?: Array<{ __typename?: 'CheckAnnotation', message: string } | null> | null } | null, steps?: { __typename?: 'CheckStepConnection', nodes?: Array<{ __typename?: 'CheckStep', number: number, name: string, conclusion?: Types.CheckConclusionState | null, status: Types.CheckStatusState, startedAt?: string | null, completedAt?: string | null } | null> | null } | null } | null> | null } | null, commit: { __typename?: 'Commit', file?: { __typename?: 'TreeEntry', object?: { __typename: 'Blob', text?: string | null } | { __typename: 'Commit' } | { __typename: 'Tag' } | { __typename: 'Tree' } | null } | null } } | { __typename: 'ClosedEvent' } | { __typename: 'CodeOfConduct' } | { __typename: 'CommentDeletedEvent' } | { __typename: 'Commit' } | { __typename: 'CommitComment' } | { __typename: 'CommitCommentThread' } | { __typename: 'Comparison' } | { __typename: 'ConnectedEvent' } | { __typename: 'ConvertToDraftEvent' } | { __typename: 'ConvertedNoteToIssueEvent' } | { __typename: 'ConvertedToDiscussionEvent' } | { __typename: 'CrossReferencedEvent' } | { __typename: 'DemilestonedEvent' } | { __typename: 'DeployKey' } | { __typename: 'DeployedEvent' } | { __typename: 'Deployment' } | { __typename: 'DeploymentEnvironmentChangedEvent' } | { __typename: 'DeploymentReview' } | { __typename: 'DeploymentStatus' } | { __typename: 'DisconnectedEvent' } | { __typename: 'Discussion' } | { __typename: 'DiscussionCategory' } | { __typename: 'DiscussionComment' } | { __typename: 'DiscussionPoll' } | { __typename: 'DiscussionPollOption' } | { __typename: 'DraftIssue' } | { __typename: 'Enterprise' } | { __typename: 'EnterpriseAdministratorInvitation' } | { __typename: 'EnterpriseIdentityProvider' } | { __typename: 'EnterpriseRepositoryInfo' } | { __typename: 'EnterpriseServerInstallation' } | { __typename: 'EnterpriseServerUserAccount' } | { __typename: 'EnterpriseServerUserAccountEmail' } | { __typename: 'EnterpriseServerUserAccountsUpload' } | { __typename: 'EnterpriseUserAccount' } | { __typename: 'Environment' } | { __typename: 'ExternalIdentity' } | { __typename: 'Gist' } | { __typename: 'GistComment' } | { __typename: 'HeadRefDeletedEvent' } | { __typename: 'HeadRefForcePushedEvent' } | { __typename: 'HeadRefRestoredEvent' } | { __typename: 'IpAllowListEntry' } | { __typename: 'Issue' } | { __typename: 'IssueComment' } | { __typename: 'Label' } | { __typename: 'LabeledEvent' } | { __typename: 'Language' } | { __typename: 'License' } | { __typename: 'LinkedBranch' } | { __typename: 'LockedEvent' } | { __typename: 'Mannequin' } | { __typename: 'MarkedAsDuplicateEvent' } | { __typename: 'MarketplaceCategory' } | { __typename: 'MarketplaceListing' } | { __typename: 'MembersCanDeleteReposClearAuditEntry' } | { __typename: 'MembersCanDeleteReposDisableAuditEntry' } | { __typename: 'MembersCanDeleteReposEnableAuditEntry' } | { __typename: 'MentionedEvent' } | { __typename: 'MergeQueue' } | { __typename: 'MergeQueueEntry' } | { __typename: 'MergedEvent' } | { __typename: 'MigrationSource' } | { __typename: 'Milestone' } | { __typename: 'MilestonedEvent' } | { __typename: 'MovedColumnsInProjectEvent' } | { __typename: 'OIDCProvider' } | { __typename: 'OauthApplicationCreateAuditEntry' } | { __typename: 'OrgAddBillingManagerAuditEntry' } | { __typename: 'OrgAddMemberAuditEntry' } | { __typename: 'OrgBlockUserAuditEntry' } | { __typename: 'OrgConfigDisableCollaboratorsOnlyAuditEntry' } | { __typename: 'OrgConfigEnableCollaboratorsOnlyAuditEntry' } | { __typename: 'OrgCreateAuditEntry' } | { __typename: 'OrgDisableOauthAppRestrictionsAuditEntry' } | { __typename: 'OrgDisableSamlAuditEntry' } | { __typename: 'OrgDisableTwoFactorRequirementAuditEntry' } | { __typename: 'OrgEnableOauthAppRestrictionsAuditEntry' } | { __typename: 'OrgEnableSamlAuditEntry' } | { __typename: 'OrgEnableTwoFactorRequirementAuditEntry' } | { __typename: 'OrgInviteMemberAuditEntry' } | { __typename: 'OrgInviteToBusinessAuditEntry' } | { __typename: 'OrgOauthAppAccessApprovedAuditEntry' } | { __typename: 'OrgOauthAppAccessBlockedAuditEntry' } | { __typename: 'OrgOauthAppAccessDeniedAuditEntry' } | { __typename: 'OrgOauthAppAccessRequestedAuditEntry' } | { __typename: 'OrgOauthAppAccessUnblockedAuditEntry' } | { __typename: 'OrgRemoveBillingManagerAuditEntry' } | { __typename: 'OrgRemoveMemberAuditEntry' } | { __typename: 'OrgRemoveOutsideCollaboratorAuditEntry' } | { __typename: 'OrgRestoreMemberAuditEntry' } | { __typename: 'OrgUnblockUserAuditEntry' } | { __typename: 'OrgUpdateDefaultRepositoryPermissionAuditEntry' } | { __typename: 'OrgUpdateMemberAuditEntry' } | { __typename: 'OrgUpdateMemberRepositoryCreationPermissionAuditEntry' } | { __typename: 'OrgUpdateMemberRepositoryInvitationPermissionAuditEntry' } | { __typename: 'Organization' } | { __typename: 'OrganizationIdentityProvider' } | { __typename: 'OrganizationInvitation' } | { __typename: 'OrganizationMigration' } | { __typename: 'Package' } | { __typename: 'PackageFile' } | { __typename: 'PackageTag' } | { __typename: 'PackageVersion' } | { __typename: 'PinnedDiscussion' } | { __typename: 'PinnedEvent' } | { __typename: 'PinnedIssue' } | { __typename: 'PrivateRepositoryForkingDisableAuditEntry' } | { __typename: 'PrivateRepositoryForkingEnableAuditEntry' } | { __typename: 'Project' } | { __typename: 'ProjectCard' } | { __typename: 'ProjectColumn' } | { __typename: 'ProjectV2' } | { __typename: 'ProjectV2Field' } | { __typename: 'ProjectV2Item' } | { __typename: 'ProjectV2ItemFieldDateValue' } | { __typename: 'ProjectV2ItemFieldIterationValue' } | { __typename: 'ProjectV2ItemFieldNumberValue' } | { __typename: 'ProjectV2ItemFieldSingleSelectValue' } | { __typename: 'ProjectV2ItemFieldTextValue' } | { __typename: 'ProjectV2IterationField' } | { __typename: 'ProjectV2SingleSelectField' } | { __typename: 'ProjectV2View' } | { __typename: 'ProjectV2Workflow' } | { __typename: 'PublicKey' } | { __typename: 'PullRequest' } | { __typename: 'PullRequestCommit' } | { __typename: 'PullRequestCommitCommentThread' } | { __typename: 'PullRequestReview' } | { __typename: 'PullRequestReviewComment' } | { __typename: 'PullRequestReviewThread' } | { __typename: 'PullRequestThread' } | { __typename: 'Push' } | { __typename: 'PushAllowance' } | { __typename: 'Reaction' } | { __typename: 'ReadyForReviewEvent' } | { __typename: 'Ref' } | { __typename: 'ReferencedEvent' } | { __typename: 'Release' } | { __typename: 'ReleaseAsset' } | { __typename: 'RemovedFromMergeQueueEvent' } | { __typename: 'RemovedFromProjectEvent' } | { __typename: 'RenamedTitleEvent' } | { __typename: 'ReopenedEvent' } | { __typename: 'RepoAccessAuditEntry' } | { __typename: 'RepoAddMemberAuditEntry' } | { __typename: 'RepoAddTopicAuditEntry' } | { __typename: 'RepoArchivedAuditEntry' } | { __typename: 'RepoChangeMergeSettingAuditEntry' } | { __typename: 'RepoConfigDisableAnonymousGitAccessAuditEntry' } | { __typename: 'RepoConfigDisableCollaboratorsOnlyAuditEntry' } | { __typename: 'RepoConfigDisableContributorsOnlyAuditEntry' } | { __typename: 'RepoConfigDisableSockpuppetDisallowedAuditEntry' } | { __typename: 'RepoConfigEnableAnonymousGitAccessAuditEntry' } | { __typename: 'RepoConfigEnableCollaboratorsOnlyAuditEntry' } | { __typename: 'RepoConfigEnableContributorsOnlyAuditEntry' } | { __typename: 'RepoConfigEnableSockpuppetDisallowedAuditEntry' } | { __typename: 'RepoConfigLockAnonymousGitAccessAuditEntry' } | { __typename: 'RepoConfigUnlockAnonymousGitAccessAuditEntry' } | { __typename: 'RepoCreateAuditEntry' } | { __typename: 'RepoDestroyAuditEntry' } | { __typename: 'RepoRemoveMemberAuditEntry' } | { __typename: 'RepoRemoveTopicAuditEntry' } | { __typename: 'Repository' } | { __typename: 'RepositoryInvitation' } | { __typename: 'RepositoryMigration' } | { __typename: 'RepositoryRule' } | { __typename: 'RepositoryRuleset' } | { __typename: 'RepositoryRulesetBypassActor' } | { __typename: 'RepositoryTopic' } | { __typename: 'RepositoryVisibilityChangeDisableAuditEntry' } | { __typename: 'RepositoryVisibilityChangeEnableAuditEntry' } | { __typename: 'RepositoryVulnerabilityAlert' } | { __typename: 'ReviewDismissalAllowance' } | { __typename: 'ReviewDismissedEvent' } | { __typename: 'ReviewRequest' } | { __typename: 'ReviewRequestRemovedEvent' } | { __typename: 'ReviewRequestedEvent' } | { __typename: 'SavedReply' } | { __typename: 'SecurityAdvisory' } | { __typename: 'SponsorsActivity' } | { __typename: 'SponsorsListing' } | { __typename: 'SponsorsListingFeaturedItem' } | { __typename: 'SponsorsTier' } | { __typename: 'Sponsorship' } | { __typename: 'SponsorshipNewsletter' } | { __typename: 'Status' } | { __typename: 'StatusCheckRollup' } | { __typename: 'StatusContext' } | { __typename: 'SubscribedEvent' } | { __typename: 'Tag' } | { __typename: 'Team' } | { __typename: 'TeamAddMemberAuditEntry' } | { __typename: 'TeamAddRepositoryAuditEntry' } | { __typename: 'TeamChangeParentTeamAuditEntry' } | { __typename: 'TeamDiscussion' } | { __typename: 'TeamDiscussionComment' } | { __typename: 'TeamRemoveMemberAuditEntry' } | { __typename: 'TeamRemoveRepositoryAuditEntry' } | { __typename: 'Topic' } | { __typename: 'TransferredEvent' } | { __typename: 'Tree' } | { __typename: 'UnassignedEvent' } | { __typename: 'UnlabeledEvent' } | { __typename: 'UnlockedEvent' } | { __typename: 'UnmarkedAsDuplicateEvent' } | { __typename: 'UnpinnedEvent' } | { __typename: 'UnsubscribedEvent' } | { __typename: 'User' } | { __typename: 'UserBlockedEvent' } | { __typename: 'UserContentEdit' } | { __typename: 'UserStatus' } | { __typename: 'VerifiableDomain' } | { __typename: 'Workflow' } | { __typename: 'WorkflowRun' } | { __typename: 'WorkflowRunFile' } | null }; -export type CompletedCheckSuiteQueryVariables = Types.Exact<{ - node_id: Types.Scalars['ID']['input']; - workflow_path: Types.Scalars['String']['input']; +export type GetPullRequestQueryVariables = Types.Exact<{ + owner: Types.Scalars['String']['input']; + name: Types.Scalars['String']['input']; + number: Types.Scalars['Int']['input']; }>; -export type CompletedCheckSuiteQuery = { __typename?: 'Query', node?: { __typename: 'AddedToMergeQueueEvent' } | { __typename: 'AddedToProjectEvent' } | { __typename: 'App' } | { __typename: 'AssignedEvent' } | { __typename: 'AutoMergeDisabledEvent' } | { __typename: 'AutoMergeEnabledEvent' } | { __typename: 'AutoRebaseEnabledEvent' } | { __typename: 'AutoSquashEnabledEvent' } | { __typename: 'AutomaticBaseChangeFailedEvent' } | { __typename: 'AutomaticBaseChangeSucceededEvent' } | { __typename: 'BaseRefChangedEvent' } | { __typename: 'BaseRefDeletedEvent' } | { __typename: 'BaseRefForcePushedEvent' } | { __typename: 'Blob' } | { __typename: 'Bot' } | { __typename: 'BranchProtectionRule' } | { __typename: 'BypassForcePushAllowance' } | { __typename: 'BypassPullRequestAllowance' } | { __typename: 'CWE' } | { __typename: 'CheckRun' } | { __typename: 'CheckSuite', checkRuns?: { __typename?: 'CheckRunConnection', nodes?: Array<{ __typename?: 'CheckRun', databaseId?: number | null, name: string, startedAt?: string | null, completedAt?: string | null, conclusion?: Types.CheckConclusionState | null, status: Types.CheckStatusState, annotations?: { __typename?: 'CheckAnnotationConnection', nodes?: Array<{ __typename?: 'CheckAnnotation', message: string } | null> | null } | null, steps?: { __typename?: 'CheckStepConnection', nodes?: Array<{ __typename?: 'CheckStep', number: number, name: string, conclusion?: Types.CheckConclusionState | null, status: Types.CheckStatusState, startedAt?: string | null, completedAt?: string | null } | null> | null } | null } | null> | null } | null, commit: { __typename?: 'Commit', file?: { __typename?: 'TreeEntry', object?: { __typename: 'Blob', text?: string | null } | { __typename: 'Commit' } | { __typename: 'Tag' } | { __typename: 'Tree' } | null } | null } } | { __typename: 'ClosedEvent' } | { __typename: 'CodeOfConduct' } | { __typename: 'CommentDeletedEvent' } | { __typename: 'Commit' } | { __typename: 'CommitComment' } | { __typename: 'CommitCommentThread' } | { __typename: 'Comparison' } | { __typename: 'ConnectedEvent' } | { __typename: 'ConvertToDraftEvent' } | { __typename: 'ConvertedNoteToIssueEvent' } | { __typename: 'ConvertedToDiscussionEvent' } | { __typename: 'CrossReferencedEvent' } | { __typename: 'DemilestonedEvent' } | { __typename: 'DeployKey' } | { __typename: 'DeployedEvent' } | { __typename: 'Deployment' } | { __typename: 'DeploymentEnvironmentChangedEvent' } | { __typename: 'DeploymentReview' } | { __typename: 'DeploymentStatus' } | { __typename: 'DisconnectedEvent' } | { __typename: 'Discussion' } | { __typename: 'DiscussionCategory' } | { __typename: 'DiscussionComment' } | { __typename: 'DiscussionPoll' } | { __typename: 'DiscussionPollOption' } | { __typename: 'DraftIssue' } | { __typename: 'Enterprise' } | { __typename: 'EnterpriseAdministratorInvitation' } | { __typename: 'EnterpriseIdentityProvider' } | { __typename: 'EnterpriseRepositoryInfo' } | { __typename: 'EnterpriseServerInstallation' } | { __typename: 'EnterpriseServerUserAccount' } | { __typename: 'EnterpriseServerUserAccountEmail' } | { __typename: 'EnterpriseServerUserAccountsUpload' } | { __typename: 'EnterpriseUserAccount' } | { __typename: 'Environment' } | { __typename: 'ExternalIdentity' } | { __typename: 'Gist' } | { __typename: 'GistComment' } | { __typename: 'HeadRefDeletedEvent' } | { __typename: 'HeadRefForcePushedEvent' } | { __typename: 'HeadRefRestoredEvent' } | { __typename: 'IpAllowListEntry' } | { __typename: 'Issue' } | { __typename: 'IssueComment' } | { __typename: 'Label' } | { __typename: 'LabeledEvent' } | { __typename: 'Language' } | { __typename: 'License' } | { __typename: 'LinkedBranch' } | { __typename: 'LockedEvent' } | { __typename: 'Mannequin' } | { __typename: 'MarkedAsDuplicateEvent' } | { __typename: 'MarketplaceCategory' } | { __typename: 'MarketplaceListing' } | { __typename: 'MembersCanDeleteReposClearAuditEntry' } | { __typename: 'MembersCanDeleteReposDisableAuditEntry' } | { __typename: 'MembersCanDeleteReposEnableAuditEntry' } | { __typename: 'MentionedEvent' } | { __typename: 'MergeQueue' } | { __typename: 'MergeQueueEntry' } | { __typename: 'MergedEvent' } | { __typename: 'MigrationSource' } | { __typename: 'Milestone' } | { __typename: 'MilestonedEvent' } | { __typename: 'MovedColumnsInProjectEvent' } | { __typename: 'OIDCProvider' } | { __typename: 'OauthApplicationCreateAuditEntry' } | { __typename: 'OrgAddBillingManagerAuditEntry' } | { __typename: 'OrgAddMemberAuditEntry' } | { __typename: 'OrgBlockUserAuditEntry' } | { __typename: 'OrgConfigDisableCollaboratorsOnlyAuditEntry' } | { __typename: 'OrgConfigEnableCollaboratorsOnlyAuditEntry' } | { __typename: 'OrgCreateAuditEntry' } | { __typename: 'OrgDisableOauthAppRestrictionsAuditEntry' } | { __typename: 'OrgDisableSamlAuditEntry' } | { __typename: 'OrgDisableTwoFactorRequirementAuditEntry' } | { __typename: 'OrgEnableOauthAppRestrictionsAuditEntry' } | { __typename: 'OrgEnableSamlAuditEntry' } | { __typename: 'OrgEnableTwoFactorRequirementAuditEntry' } | { __typename: 'OrgInviteMemberAuditEntry' } | { __typename: 'OrgInviteToBusinessAuditEntry' } | { __typename: 'OrgOauthAppAccessApprovedAuditEntry' } | { __typename: 'OrgOauthAppAccessBlockedAuditEntry' } | { __typename: 'OrgOauthAppAccessDeniedAuditEntry' } | { __typename: 'OrgOauthAppAccessRequestedAuditEntry' } | { __typename: 'OrgOauthAppAccessUnblockedAuditEntry' } | { __typename: 'OrgRemoveBillingManagerAuditEntry' } | { __typename: 'OrgRemoveMemberAuditEntry' } | { __typename: 'OrgRemoveOutsideCollaboratorAuditEntry' } | { __typename: 'OrgRestoreMemberAuditEntry' } | { __typename: 'OrgUnblockUserAuditEntry' } | { __typename: 'OrgUpdateDefaultRepositoryPermissionAuditEntry' } | { __typename: 'OrgUpdateMemberAuditEntry' } | { __typename: 'OrgUpdateMemberRepositoryCreationPermissionAuditEntry' } | { __typename: 'OrgUpdateMemberRepositoryInvitationPermissionAuditEntry' } | { __typename: 'Organization' } | { __typename: 'OrganizationIdentityProvider' } | { __typename: 'OrganizationInvitation' } | { __typename: 'OrganizationMigration' } | { __typename: 'Package' } | { __typename: 'PackageFile' } | { __typename: 'PackageTag' } | { __typename: 'PackageVersion' } | { __typename: 'PinnedDiscussion' } | { __typename: 'PinnedEvent' } | { __typename: 'PinnedIssue' } | { __typename: 'PrivateRepositoryForkingDisableAuditEntry' } | { __typename: 'PrivateRepositoryForkingEnableAuditEntry' } | { __typename: 'Project' } | { __typename: 'ProjectCard' } | { __typename: 'ProjectColumn' } | { __typename: 'ProjectV2' } | { __typename: 'ProjectV2Field' } | { __typename: 'ProjectV2Item' } | { __typename: 'ProjectV2ItemFieldDateValue' } | { __typename: 'ProjectV2ItemFieldIterationValue' } | { __typename: 'ProjectV2ItemFieldNumberValue' } | { __typename: 'ProjectV2ItemFieldSingleSelectValue' } | { __typename: 'ProjectV2ItemFieldTextValue' } | { __typename: 'ProjectV2IterationField' } | { __typename: 'ProjectV2SingleSelectField' } | { __typename: 'ProjectV2View' } | { __typename: 'ProjectV2Workflow' } | { __typename: 'PublicKey' } | { __typename: 'PullRequest' } | { __typename: 'PullRequestCommit' } | { __typename: 'PullRequestCommitCommentThread' } | { __typename: 'PullRequestReview' } | { __typename: 'PullRequestReviewComment' } | { __typename: 'PullRequestReviewThread' } | { __typename: 'PullRequestThread' } | { __typename: 'Push' } | { __typename: 'PushAllowance' } | { __typename: 'Reaction' } | { __typename: 'ReadyForReviewEvent' } | { __typename: 'Ref' } | { __typename: 'ReferencedEvent' } | { __typename: 'Release' } | { __typename: 'ReleaseAsset' } | { __typename: 'RemovedFromMergeQueueEvent' } | { __typename: 'RemovedFromProjectEvent' } | { __typename: 'RenamedTitleEvent' } | { __typename: 'ReopenedEvent' } | { __typename: 'RepoAccessAuditEntry' } | { __typename: 'RepoAddMemberAuditEntry' } | { __typename: 'RepoAddTopicAuditEntry' } | { __typename: 'RepoArchivedAuditEntry' } | { __typename: 'RepoChangeMergeSettingAuditEntry' } | { __typename: 'RepoConfigDisableAnonymousGitAccessAuditEntry' } | { __typename: 'RepoConfigDisableCollaboratorsOnlyAuditEntry' } | { __typename: 'RepoConfigDisableContributorsOnlyAuditEntry' } | { __typename: 'RepoConfigDisableSockpuppetDisallowedAuditEntry' } | { __typename: 'RepoConfigEnableAnonymousGitAccessAuditEntry' } | { __typename: 'RepoConfigEnableCollaboratorsOnlyAuditEntry' } | { __typename: 'RepoConfigEnableContributorsOnlyAuditEntry' } | { __typename: 'RepoConfigEnableSockpuppetDisallowedAuditEntry' } | { __typename: 'RepoConfigLockAnonymousGitAccessAuditEntry' } | { __typename: 'RepoConfigUnlockAnonymousGitAccessAuditEntry' } | { __typename: 'RepoCreateAuditEntry' } | { __typename: 'RepoDestroyAuditEntry' } | { __typename: 'RepoRemoveMemberAuditEntry' } | { __typename: 'RepoRemoveTopicAuditEntry' } | { __typename: 'Repository' } | { __typename: 'RepositoryInvitation' } | { __typename: 'RepositoryMigration' } | { __typename: 'RepositoryRule' } | { __typename: 'RepositoryRuleset' } | { __typename: 'RepositoryRulesetBypassActor' } | { __typename: 'RepositoryTopic' } | { __typename: 'RepositoryVisibilityChangeDisableAuditEntry' } | { __typename: 'RepositoryVisibilityChangeEnableAuditEntry' } | { __typename: 'RepositoryVulnerabilityAlert' } | { __typename: 'ReviewDismissalAllowance' } | { __typename: 'ReviewDismissedEvent' } | { __typename: 'ReviewRequest' } | { __typename: 'ReviewRequestRemovedEvent' } | { __typename: 'ReviewRequestedEvent' } | { __typename: 'SavedReply' } | { __typename: 'SecurityAdvisory' } | { __typename: 'SponsorsActivity' } | { __typename: 'SponsorsListing' } | { __typename: 'SponsorsListingFeaturedItem' } | { __typename: 'SponsorsTier' } | { __typename: 'Sponsorship' } | { __typename: 'SponsorshipNewsletter' } | { __typename: 'Status' } | { __typename: 'StatusCheckRollup' } | { __typename: 'StatusContext' } | { __typename: 'SubscribedEvent' } | { __typename: 'Tag' } | { __typename: 'Team' } | { __typename: 'TeamAddMemberAuditEntry' } | { __typename: 'TeamAddRepositoryAuditEntry' } | { __typename: 'TeamChangeParentTeamAuditEntry' } | { __typename: 'TeamDiscussion' } | { __typename: 'TeamDiscussionComment' } | { __typename: 'TeamRemoveMemberAuditEntry' } | { __typename: 'TeamRemoveRepositoryAuditEntry' } | { __typename: 'Topic' } | { __typename: 'TransferredEvent' } | { __typename: 'Tree' } | { __typename: 'UnassignedEvent' } | { __typename: 'UnlabeledEvent' } | { __typename: 'UnlockedEvent' } | { __typename: 'UnmarkedAsDuplicateEvent' } | { __typename: 'UnpinnedEvent' } | { __typename: 'UnsubscribedEvent' } | { __typename: 'User' } | { __typename: 'UserBlockedEvent' } | { __typename: 'UserContentEdit' } | { __typename: 'UserStatus' } | { __typename: 'VerifiableDomain' } | { __typename: 'Workflow' } | { __typename: 'WorkflowRun' } | { __typename: 'WorkflowRunFile' } | null }; +export type GetPullRequestQuery = { __typename?: 'Query', repository?: { __typename?: 'Repository', pullRequest?: { __typename?: 'PullRequest', commits: { __typename?: 'PullRequestCommitConnection', nodes?: Array<{ __typename?: 'PullRequestCommit', commit: { __typename?: 'Commit', authoredDate: string, committedDate: string } } | null> | null } } | null } | null }; diff --git a/src/pullRequest/metrics.ts b/src/pullRequest/metrics.ts index 6e948d53..c2f85ff2 100644 --- a/src/pullRequest/metrics.ts +++ b/src/pullRequest/metrics.ts @@ -1,6 +1,6 @@ import { v1 } from '@datadog/datadog-api-client' import { PullRequestClosedEvent, PullRequestEvent, PullRequestOpenedEvent } from '@octokit/webhooks-types' -import { ClosedPullRequest } from '../queries/closedPullRequest' +import { PullRequestFirstCommit } from '../queries/getPullRequest' const computeCommonTags = (e: PullRequestEvent): string[] => { const tags = [ @@ -65,8 +65,8 @@ type ClosedMetricsOptions = { export const computePullRequestClosedMetrics = ( e: PullRequestClosedEvent, - pr: ClosedPullRequest | undefined, - options: ClosedMetricsOptions + pullRequestFirstCommit: PullRequestFirstCommit | undefined, + options: ClosedMetricsOptions, ): v1.Series[] => { const tags = computeCommonTags(e) tags.push(`merged:${String(e.pull_request.merged)}`) @@ -116,22 +116,22 @@ export const computePullRequestClosedMetrics = ( }, ] - if (pr !== undefined) { + if (pullRequestFirstCommit !== undefined) { series.push( { host: 'github.com', tags, metric: 'github.actions.pull_request_closed.since_first_authored_seconds', type: 'gauge', - points: [[t, t - unixTime(pr.firstCommit.authoredDate)]], + points: [[t, t - unixTime(pullRequestFirstCommit.authoredDate)]], }, { host: 'github.com', tags, metric: 'github.actions.pull_request_closed.since_first_committed_seconds', type: 'gauge', - points: [[t, t - unixTime(pr.firstCommit.committedDate)]], - } + points: [[t, t - unixTime(pullRequestFirstCommit.committedDate)]], + }, ) } diff --git a/src/queries/closedPullRequest.ts b/src/queries/closedPullRequest.ts deleted file mode 100644 index 733dae04..00000000 --- a/src/queries/closedPullRequest.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { ClosedPullRequestQuery, ClosedPullRequestQueryVariables } from '../generated/graphql' -import { Octokit } from '../types' - -const query = /* GraphQL */ ` - query closedPullRequest($owner: String!, $name: String!, $number: Int!) { - repository(owner: $owner, name: $name) { - pullRequest(number: $number) { - commits(first: 1) { - nodes { - commit { - authoredDate - committedDate - } - } - } - } - } - } -` - -export type ClosedPullRequest = { - firstCommit: { - authoredDate: string - committedDate: string - } -} - -export const queryClosedPullRequest = async ( - o: Octokit, - v: ClosedPullRequestQueryVariables -): Promise => { - const r = await o.graphql(query, v) - if (!r.repository?.pullRequest?.commits.nodes?.length) { - throw new Error(`pull request contains no commit: ${JSON.stringify(r)}`) - } - if (r.repository.pullRequest.commits.nodes[0] == null) { - throw new Error(`commit is null: ${JSON.stringify(r)}`) - } - const firstCommit = r.repository.pullRequest.commits.nodes[0].commit - return { - firstCommit, - } -} diff --git a/src/queries/completedCheckSuite.ts b/src/queries/getCheckSuite.ts similarity index 86% rename from src/queries/completedCheckSuite.ts rename to src/queries/getCheckSuite.ts index 248d4d29..b45dab16 100644 --- a/src/queries/completedCheckSuite.ts +++ b/src/queries/getCheckSuite.ts @@ -1,10 +1,10 @@ import assert from 'assert' -import { CompletedCheckSuiteQuery, CompletedCheckSuiteQueryVariables } from '../generated/graphql' +import { GetCheckSuiteQuery, GetCheckSuiteQueryVariables } from '../generated/graphql' import { CheckAnnotation, CheckRun, CheckStep } from '../generated/graphql-types' import { Octokit } from '../types' const query = /* GraphQL */ ` - query completedCheckSuite($node_id: ID!, $workflow_path: String!) { + query getCheckSuite($node_id: ID!, $workflow_path: String!) { node(id: $node_id) { __typename ... on CheckSuite { @@ -81,11 +81,11 @@ type CompletedCheckRun = Pick & type CompletedStep = Pick & NonNullablePick -export const queryCompletedCheckSuite = async ( +export const getCompletedCheckSuite = async ( o: Octokit, - v: CompletedCheckSuiteQueryVariables -): Promise => { - const r = await o.graphql(query, v) + v: GetCheckSuiteQueryVariables, +): Promise => { + const r = await o.graphql(query, v) return { node: { __typename: 'CheckSuite', @@ -95,7 +95,7 @@ export const queryCompletedCheckSuite = async ( } } -const extractCheckRuns = (r: CompletedCheckSuiteQuery): CompletedCheckSuite['node']['checkRuns'] => { +const extractCheckRuns = (r: GetCheckSuiteQuery): CompletedCheckSuite['node']['checkRuns'] => { assert(r.node != null) assert.strictEqual(r.node.__typename, 'CheckSuite') @@ -146,7 +146,7 @@ const extractCheckRuns = (r: CompletedCheckSuiteQuery): CompletedCheckSuite['nod return { nodes: checkRuns } } -const extractCommit = (r: CompletedCheckSuiteQuery): CompletedCheckSuite['node']['commit'] => { +const extractCommit = (r: GetCheckSuiteQuery): CompletedCheckSuite['node']['commit'] => { assert(r.node != null) assert.strictEqual(r.node.__typename, 'CheckSuite') assert(r.node.commit.file != null) diff --git a/src/queries/getPullRequest.ts b/src/queries/getPullRequest.ts new file mode 100644 index 00000000..d37cade8 --- /dev/null +++ b/src/queries/getPullRequest.ts @@ -0,0 +1,41 @@ +import assert from 'assert' +import { GetPullRequestQuery, GetPullRequestQueryVariables } from '../generated/graphql' +import { Octokit } from '../types' + +const query = /* GraphQL */ ` + query getPullRequest($owner: String!, $name: String!, $number: Int!) { + repository(owner: $owner, name: $name) { + pullRequest(number: $number) { + commits(first: 1) { + nodes { + commit { + authoredDate + committedDate + } + } + } + } + } + } +` + +export type PullRequestFirstCommit = { + authoredDate: string + committedDate: string +} + +export const getPullRequestFirstCommit = async ( + o: Octokit, + v: GetPullRequestQueryVariables, +): Promise => { + const r = await o.graphql(query, v) + assert(r.repository != null) + assert(r.repository.pullRequest != null) + assert(r.repository.pullRequest.commits != null) + assert(r.repository.pullRequest.commits.nodes != null) + if (r.repository.pullRequest.commits.nodes.length === 0) { + return // pull request has no commit + } + assert(r.repository.pullRequest.commits.nodes[0] != null) + return r.repository.pullRequest.commits.nodes[0].commit +} diff --git a/src/run.ts b/src/run.ts index 4f2b3ed6..6e175a0e 100644 --- a/src/run.ts +++ b/src/run.ts @@ -3,8 +3,8 @@ import * as github from '@actions/github' import { PullRequestEvent, PushEvent, WorkflowRunEvent } from '@octokit/webhooks-types' import { computePullRequestClosedMetrics, computePullRequestOpenedMetrics } from './pullRequest/metrics' import { computePushMetrics } from './push/metrics' -import { queryCompletedCheckSuite } from './queries/completedCheckSuite' -import { queryClosedPullRequest } from './queries/closedPullRequest' +import { getCompletedCheckSuite } from './queries/getCheckSuite' +import { getPullRequestFirstCommit } from './queries/getPullRequest' import { computeRateLimitMetrics } from './rateLimit/metrics' import { GitHubContext } from './types' import { computeWorkflowRunJobStepMetrics } from './workflowRun/metrics' @@ -52,7 +52,7 @@ const handleWorkflowRun = async (submitMetrics: SubmitMetrics, e: WorkflowRunEve if (inputs.collectJobMetrics || inputs.collectStepMetrics) { const octokit = github.getOctokit(inputs.githubToken) try { - checkSuite = await queryCompletedCheckSuite(octokit, { + checkSuite = await getCompletedCheckSuite(octokit, { node_id: e.workflow_run.check_suite_node_id, workflow_path: e.workflow.path, }) @@ -92,9 +92,9 @@ const handlePullRequest = async ( if (e.action === 'closed') { const octokit = github.getOctokit(inputs.githubToken) - let closedPullRequest + let pullRequestFirstCommit try { - closedPullRequest = await queryClosedPullRequest(octokit, { + pullRequestFirstCommit = await getPullRequestFirstCommit(octokit, { owner: context.repo.owner, name: context.repo.repo, number: e.pull_request.number, @@ -102,7 +102,7 @@ const handlePullRequest = async ( } catch (error) { core.warning(`Could not get the pull request: ${String(error)}`) } - return await submitMetrics(computePullRequestClosedMetrics(e, closedPullRequest, inputs), 'pull request') + return await submitMetrics(computePullRequestClosedMetrics(e, pullRequestFirstCommit, inputs), 'pull request') } core.warning(`Not supported action ${e.action}`) diff --git a/src/workflowRun/metrics.ts b/src/workflowRun/metrics.ts index 16b3d89c..9cc91b3f 100644 --- a/src/workflowRun/metrics.ts +++ b/src/workflowRun/metrics.ts @@ -2,7 +2,7 @@ import * as core from '@actions/core' import { v1 } from '@datadog/datadog-api-client' import { WorkflowRunCompletedEvent } from '@octokit/webhooks-types' import { inferRunner, parseWorkflowFile, WorkflowDefinition } from './parse' -import { CompletedCheckSuite } from '../queries/completedCheckSuite' +import { CompletedCheckSuite } from '../queries/getCheckSuite' const computeCommonTags = (e: WorkflowRunCompletedEvent): string[] => [ `repository_owner:${e.workflow_run.repository.owner.login}`, diff --git a/tests/pullRequest/fixtures/closedPullRequest.ts b/tests/pullRequest/fixtures/closedPullRequest.ts deleted file mode 100644 index 5e649efa..00000000 --- a/tests/pullRequest/fixtures/closedPullRequest.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { ClosedPullRequest } from '../../../src/queries/closedPullRequest' -import { ClosedPullRequestQuery } from '../../../src/generated/graphql' - -export const exampleClosedPullRequestQuery: ClosedPullRequestQuery = { - repository: { - pullRequest: { - commits: { - nodes: [ - { - commit: { - authoredDate: '2019-05-15T15:00:11Z', - committedDate: '2019-05-15T15:11:22Z', - }, - }, - ], - }, - }, - }, -} - -export const exampleClosedPullRequest: ClosedPullRequest = { - firstCommit: { - authoredDate: '2019-05-15T15:00:11Z', - committedDate: '2019-05-15T15:11:22Z', - }, -} diff --git a/tests/pullRequest/fixtures/getPullRequest.ts b/tests/pullRequest/fixtures/getPullRequest.ts new file mode 100644 index 00000000..58dd8695 --- /dev/null +++ b/tests/pullRequest/fixtures/getPullRequest.ts @@ -0,0 +1,24 @@ +import { PullRequestFirstCommit } from '../../../src/queries/getPullRequest' +import { GetPullRequestQuery } from '../../../src/generated/graphql' + +export const exampleGetPullRequestQuery: GetPullRequestQuery = { + repository: { + pullRequest: { + commits: { + nodes: [ + { + commit: { + authoredDate: '2019-05-15T15:00:11Z', + committedDate: '2019-05-15T15:11:22Z', + }, + }, + ], + }, + }, + }, +} + +export const examplePullRequestFirstCommit: PullRequestFirstCommit = { + authoredDate: '2019-05-15T15:00:11Z', + committedDate: '2019-05-15T15:11:22Z', +} diff --git a/tests/pullRequest/metrics.test.ts b/tests/pullRequest/metrics.test.ts index 36eb64a7..c2419c4c 100644 --- a/tests/pullRequest/metrics.test.ts +++ b/tests/pullRequest/metrics.test.ts @@ -1,7 +1,7 @@ import { computePullRequestClosedMetrics, computePullRequestOpenedMetrics } from '../../src/pullRequest/metrics' import { examplePullRequestClosedEvent } from '../fixtures' import { examplePullRequestOpenedEvent } from '../fixtures' -import { exampleClosedPullRequest } from './fixtures/closedPullRequest' +import { examplePullRequestFirstCommit } from './fixtures/getPullRequest' test('computePullRequestOpenedMetrics', () => { const series = computePullRequestOpenedMetrics(examplePullRequestOpenedEvent) @@ -16,7 +16,7 @@ test('computePullRequestClosedMetrics', () => { }) test('computePullRequestClosedMetricsWithQuery', () => { - const series = computePullRequestClosedMetrics(examplePullRequestClosedEvent, exampleClosedPullRequest, { + const series = computePullRequestClosedMetrics(examplePullRequestClosedEvent, examplePullRequestFirstCommit, { sendPullRequestLabels: true, }) expect(series).toMatchSnapshot() diff --git a/tests/run.test.ts b/tests/run.test.ts index 616d6c71..674effef 100644 --- a/tests/run.test.ts +++ b/tests/run.test.ts @@ -7,7 +7,7 @@ import { exampleCompletedCheckSuite } from './workflowRun/fixtures/completedChec import { examplePullRequestClosedEvent } from './fixtures' import { WebhookPayload } from '@actions/github/lib/interfaces' import { examplePullRequestOpenedEvent } from './fixtures' -import { exampleClosedPullRequestQuery } from './pullRequest/fixtures/closedPullRequest' +import { exampleGetPullRequestQuery } from './pullRequest/fixtures/getPullRequest' jest.mock('@actions/core') @@ -100,7 +100,7 @@ test('pull_request_opened', async () => { }) test('pull_request_closed', async () => { - octokitMock.graphql.mockResolvedValue(exampleClosedPullRequestQuery) + octokitMock.graphql.mockResolvedValue(exampleGetPullRequestQuery) octokitMock.rest.rateLimit.get.mockResolvedValue(exampleRateLimitResponse) submitMetrics.mockResolvedValue({ status: 'ok' }) diff --git a/tests/workflowRun/fixtures/completedCheckSuite.ts b/tests/workflowRun/fixtures/completedCheckSuite.ts index 5dc370f4..30d82aba 100644 --- a/tests/workflowRun/fixtures/completedCheckSuite.ts +++ b/tests/workflowRun/fixtures/completedCheckSuite.ts @@ -1,6 +1,6 @@ -import { CompletedCheckSuite } from '../../../src/queries/completedCheckSuite' +import { CompletedCheckSuite } from '../../../src/queries/getCheckSuite' import { CheckConclusionState, CheckStatusState } from '../../../src/generated/graphql-types' -import { CompletedCheckSuiteQuery } from '../../../src/generated/graphql' +import { GetCheckSuiteQuery } from '../../../src/generated/graphql' const exampleWorkflowText = ` on: @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v2 ` -export const exampleCompletedCheckSuite: CompletedCheckSuiteQuery & CompletedCheckSuite = { +export const exampleCompletedCheckSuite: GetCheckSuiteQuery & CompletedCheckSuite = { // https://docs.github.com/en/rest/reference/actions#list-jobs-for-a-workflow-run node: { __typename: 'CheckSuite',