Allow multiple projects per issue and pull requests (#36784)

Add ability to add and remove multiple projects per issue
and pull request.

Resolve #12974

---------

Signed-off-by: Icy Avocado <avocado@ovacoda.com>
Co-authored-by: Tyrone Yeh <siryeh@gmail.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: OpenCode (gpt-5.2-codex) <opencode@openai.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
This commit is contained in:
Icy Avocado
2026-04-30 08:38:05 -06:00
committed by GitHub
parent 52d6baf5a8
commit 81692ceafa
58 changed files with 1597 additions and 430 deletions
+86
View File
@@ -23841,6 +23841,15 @@
"format": "int64",
"x-go-name": "Milestone"
},
"projects": {
"description": "list of project ids",
"type": "array",
"items": {
"type": "integer",
"format": "int64"
},
"x-go-name": "Projects"
},
"ref": {
"type": "string",
"x-go-name": "Ref"
@@ -25098,6 +25107,15 @@
"format": "int64",
"x-go-name": "Milestone"
},
"projects": {
"description": "list of project ids to set (replaces existing projects)",
"type": "array",
"items": {
"type": "integer",
"format": "int64"
},
"x-go-name": "Projects"
},
"ref": {
"type": "string",
"x-go-name": "Ref"
@@ -26622,6 +26640,13 @@
"format": "int64",
"x-go-name": "PinOrder"
},
"projects": {
"type": "array",
"items": {
"$ref": "#/definitions/Project"
},
"x-go-name": "Projects"
},
"pull_request": {
"$ref": "#/definitions/PullRequestMeta"
},
@@ -27974,6 +27999,67 @@
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
"Project": {
"description": "Project represents a project",
"type": "object",
"properties": {
"closed_at": {
"type": "string",
"format": "date-time",
"x-go-name": "Closed"
},
"created_at": {
"type": "string",
"format": "date-time",
"x-go-name": "Created"
},
"creator_id": {
"description": "CreatorID is the user who created the project",
"type": "integer",
"format": "int64",
"x-go-name": "CreatorID"
},
"description": {
"description": "Description provides details about the project",
"type": "string",
"x-go-name": "Description"
},
"id": {
"description": "ID is the unique identifier for the project",
"type": "integer",
"format": "int64",
"x-go-name": "ID"
},
"is_closed": {
"description": "IsClosed indicates if the project is closed",
"type": "boolean",
"x-go-name": "IsClosed"
},
"owner_id": {
"description": "OwnerID is the owner of the project (for org-level projects)",
"type": "integer",
"format": "int64",
"x-go-name": "OwnerID"
},
"repo_id": {
"description": "RepoID is the repository this project belongs to (for repo-level projects)",
"type": "integer",
"format": "int64",
"x-go-name": "RepoID"
},
"title": {
"description": "Title is the title of the project",
"type": "string",
"x-go-name": "Title"
},
"updated_at": {
"type": "string",
"format": "date-time",
"x-go-name": "Updated"
}
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
"PublicKey": {
"description": "PublicKey publickey is a user key to push code to repository",
"type": "object",
+86
View File
@@ -4102,6 +4102,15 @@
"type": "integer",
"x-go-name": "Milestone"
},
"projects": {
"description": "list of project ids",
"items": {
"format": "int64",
"type": "integer"
},
"type": "array",
"x-go-name": "Projects"
},
"ref": {
"type": "string",
"x-go-name": "Ref"
@@ -5330,6 +5339,15 @@
"type": "integer",
"x-go-name": "Milestone"
},
"projects": {
"description": "list of project ids to set (replaces existing projects)",
"items": {
"format": "int64",
"type": "integer"
},
"type": "array",
"x-go-name": "Projects"
},
"ref": {
"type": "string",
"x-go-name": "Ref"
@@ -6849,6 +6867,13 @@
"type": "integer",
"x-go-name": "PinOrder"
},
"projects": {
"items": {
"$ref": "#/components/schemas/Project"
},
"type": "array",
"x-go-name": "Projects"
},
"pull_request": {
"$ref": "#/components/schemas/PullRequestMeta"
},
@@ -8215,6 +8240,67 @@
"type": "object",
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
"Project": {
"description": "Project represents a project",
"properties": {
"closed_at": {
"format": "date-time",
"type": "string",
"x-go-name": "Closed"
},
"created_at": {
"format": "date-time",
"type": "string",
"x-go-name": "Created"
},
"creator_id": {
"description": "CreatorID is the user who created the project",
"format": "int64",
"type": "integer",
"x-go-name": "CreatorID"
},
"description": {
"description": "Description provides details about the project",
"type": "string",
"x-go-name": "Description"
},
"id": {
"description": "ID is the unique identifier for the project",
"format": "int64",
"type": "integer",
"x-go-name": "ID"
},
"is_closed": {
"description": "IsClosed indicates if the project is closed",
"type": "boolean",
"x-go-name": "IsClosed"
},
"owner_id": {
"description": "OwnerID is the owner of the project (for org-level projects)",
"format": "int64",
"type": "integer",
"x-go-name": "OwnerID"
},
"repo_id": {
"description": "RepoID is the repository this project belongs to (for repo-level projects)",
"format": "int64",
"type": "integer",
"x-go-name": "RepoID"
},
"title": {
"description": "Title is the title of the project",
"type": "string",
"x-go-name": "Title"
},
"updated_at": {
"format": "date-time",
"type": "string",
"x-go-name": "Updated"
}
},
"type": "object",
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
"PublicKey": {
"description": "PublicKey publickey is a user key to push code to repository",
"properties": {