feat: several Git repositories per project
A project keeps a list of repositories (api, web, admin…), each with its own secret, instead of a single webhook secret. They all call the same URL; the secret that verifies the signature tells which one it was, and every commit, branch or pull request is linked with its repository's name (shown on the ticket and in the MCP). Rotating or removing one leaves the others alone, and what it linked stays. A project that had turned the single webhook on keeps its secret, as a repository named "principal". API: the enable/disable endpoints and mutations give way to adding a repository, rotating its secret and removing it (REST and GraphQL). The web settings card lists the repositories. Docs, Word and PDF updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -335,6 +335,9 @@ type DevLink {
|
||||
|
||||
"""Short SHA, branch or PR number"""
|
||||
ref: String!
|
||||
|
||||
"""The project's name for the repository it came from"""
|
||||
repository: String
|
||||
state: DevLinkState
|
||||
title: String!
|
||||
url: String!
|
||||
@@ -372,18 +375,29 @@ type FlowSeries {
|
||||
}
|
||||
|
||||
"""
|
||||
Webhook from GitHub, Gitea or GitLab: commits, branches and pull requests naming a ticket key are linked to it
|
||||
Webhooks from GitHub, Gitea or GitLab: commits, branches and pull requests naming a ticket key are linked to it
|
||||
"""
|
||||
type GitIntegration {
|
||||
"""On while there is at least one repository"""
|
||||
enabled: Boolean!
|
||||
repositories: [GitRepository!]!
|
||||
|
||||
"""Webhook secret; only owners and admins see it"""
|
||||
secret: String
|
||||
|
||||
"""Path of the webhook on this API"""
|
||||
"""Path of the webhook on this API, the same for every repository"""
|
||||
webhookPath: String!
|
||||
}
|
||||
|
||||
"""A repository whose webhooks the project accepts"""
|
||||
type GitRepository {
|
||||
createdAt: String!
|
||||
id: ID!
|
||||
|
||||
"""The project's name for it: api, web, admin…"""
|
||||
name: String!
|
||||
|
||||
"""Webhook secret of this repository; only owners and admins see it"""
|
||||
secret: String
|
||||
}
|
||||
|
||||
type Issue {
|
||||
"""Statuses this ticket can move to next (project's workflow)"""
|
||||
allowedTransitions: [String!]!
|
||||
@@ -590,6 +604,11 @@ type Mutation {
|
||||
addChecklistItem(input: AddChecklistItemInput!): CommandResult!
|
||||
addComment(body: String!, issueId: ID!): CommandResult!
|
||||
|
||||
"""
|
||||
Add a repository with its own secret (the first turns the integration on)
|
||||
"""
|
||||
addGitRepository(name: String!, projectId: ID!): GitRepository!
|
||||
|
||||
"""Add a Pireon user to the project"""
|
||||
addProjectMember(input: ProjectMemberInput!): CommandResult!
|
||||
archiveRelease(releaseId: ID!): CommandResult!
|
||||
@@ -638,12 +657,8 @@ type Mutation {
|
||||
"""Delete a sprint that never started; its tickets go back to the backlog"""
|
||||
deleteSprint(sprintId: ID!): CommandResult!
|
||||
deleteWebhook(webhookId: ID!): Boolean!
|
||||
disableGitIntegration(projectId: ID!): Boolean!
|
||||
editComment(body: String!, commentId: ID!): CommandResult!
|
||||
|
||||
"""Turn the Git webhook on, with a new secret (also to rotate it)"""
|
||||
enableGitIntegration(projectId: ID!): GitIntegration!
|
||||
|
||||
"""Relate tickets, e.g. FE DEPENDS_ON BE, QA TESTS FE"""
|
||||
linkIssues(input: LinkIssuesInput!): CommandResult!
|
||||
|
||||
@@ -663,11 +678,17 @@ type Mutation {
|
||||
"""
|
||||
removeAttachment(attachmentId: ID!, issueId: ID!): CommandResult!
|
||||
removeChecklistItem(issueId: ID!, itemId: ID!): CommandResult!
|
||||
|
||||
"""Remove a repository; what it linked stays on the tickets"""
|
||||
removeGitRepository(projectId: ID!, repositoryId: ID!): Boolean!
|
||||
removeProjectMember(projectId: ID!, userId: ID!): CommandResult!
|
||||
|
||||
"""Back from the trash"""
|
||||
restoreIssue(issueId: ID!): CommandResult!
|
||||
|
||||
"""A new secret for a repository; the old one stops working"""
|
||||
rotateGitRepositorySecret(projectId: ID!, repositoryId: ID!): GitRepository!
|
||||
|
||||
"""Save the current board filters under a name (members of the project)"""
|
||||
saveFilter(input: SaveFilterInput!): ID!
|
||||
|
||||
|
||||
Reference in New Issue
Block a user