Access repos by their ids (#1691)

closes #1295 
closes #648

# TODO
- [x] add new routes with `:repoID`
- [x] load repo in middleware using `:repoID` if present
- [x] update UI routes `:owner/:name` to `:repoID`
- [x] load repos using id in UI
- [x] add lookup endpoint `:owner/:name` to `:repoID`
- [x] redirect `:owner/:name` to `:repoID` in UI
- [x] use badge with `:repoID` route in UI
- [x] update `woodpecker-go`
- [x] check cli
- [x] add migrations / deprecation notes
- [x] check if #648 got solved directly
- [x] Test
  - [x] create repo
  - [x] repo pages
  - [x] ui redirects
  - [x] forge status links
This commit is contained in:
Anbraten
2023-06-12 16:07:52 -07:00
committed by GitHub
parent e3593cd9a4
commit ff01a9ff1d
98 changed files with 1402 additions and 1676 deletions

View File

@@ -250,7 +250,7 @@ const docTemplate = `{
}
}
},
"/badges/{owner}/{name}/cc.xml": {
"/badges/{repo_id}/cc.xml": {
"get": {
"description": "CCMenu displays the pipeline status of projects on a CI server as an item in the Mac's menu bar.\nMore details on how to install, you can find at http://ccmenu.org/\nThe response format adheres to CCTray v1 Specification, https://cctray.org/v1/",
"produces": [
@@ -283,7 +283,7 @@ const docTemplate = `{
}
}
},
"/badges/{owner}/{name}/status.svg": {
"/badges/{repo_id}/status.svg": {
"get": {
"produces": [
"image/svg+xml"
@@ -294,16 +294,9 @@ const docTemplate = `{
"summary": "Get status badge, SVG format",
"parameters": [
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
}
@@ -751,7 +744,7 @@ const docTemplate = `{
}
}
},
"/logs/{owner}/{name}/{pipeline}/{stepID}": {
"/logs/{repo_id}/{pipeline}/{stepID}": {
"get": {
"produces": [
"text/plain"
@@ -762,16 +755,9 @@ const docTemplate = `{
"summary": "Log stream",
"parameters": [
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1206,7 +1192,43 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}": {
"/repos/lookup/{repo_full_name}": {
"get": {
"produces": [
"application/json"
],
"tags": [
"Repositories"
],
"summary": "Get repository by full-name",
"parameters": [
{
"type": "string",
"default": "Bearer \u003cpersonal access token\u003e",
"description": "Insert your personal access token",
"name": "Authorization",
"in": "header",
"required": true
},
{
"type": "string",
"description": "the repository full-name / slug",
"name": "repo_full_name",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/Repo"
}
}
}
}
},
"/repos/{repo_id}": {
"get": {
"produces": [
"application/json"
@@ -1225,16 +1247,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
}
@@ -1266,16 +1281,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
}
@@ -1307,16 +1315,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
}
@@ -1348,16 +1349,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1381,7 +1375,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/branches": {
"/repos/{repo_id}/branches": {
"get": {
"produces": [
"application/json"
@@ -1400,16 +1394,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1441,7 +1428,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/chown": {
"/repos/{repo_id}/chown": {
"post": {
"produces": [
"application/json"
@@ -1460,16 +1447,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
}
@@ -1484,7 +1464,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/cron": {
"/repos/{repo_id}/cron": {
"get": {
"produces": [
"application/json"
@@ -1503,16 +1483,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1561,16 +1534,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1594,7 +1560,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/cron/{cron}": {
"/repos/{repo_id}/cron/{cron}": {
"get": {
"produces": [
"application/json"
@@ -1613,16 +1579,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1661,16 +1620,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1709,16 +1661,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1754,16 +1699,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1794,7 +1732,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/logs/{number}": {
"/repos/{repo_id}/logs/{number}": {
"post": {
"produces": [
"text/plain"
@@ -1813,16 +1751,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1841,7 +1772,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/logs/{number}/{stepID}": {
"/repos/{repo_id}/logs/{number}/{stepID}": {
"get": {
"produces": [
"application/json"
@@ -1860,16 +1791,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1901,7 +1825,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/move": {
"/repos/{repo_id}/move": {
"post": {
"produces": [
"text/plain"
@@ -1920,16 +1844,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -1948,7 +1865,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/permissions": {
"/repos/{repo_id}/permissions": {
"get": {
"description": "The repository permission, according to the used access token.",
"produces": [
@@ -1992,7 +1909,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/pipelines": {
"/repos/{repo_id}/pipelines": {
"get": {
"produces": [
"application/json"
@@ -2011,16 +1928,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2069,16 +1979,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2102,7 +2005,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/pipelines/{number}": {
"/repos/{repo_id}/pipelines/{number}": {
"get": {
"produces": [
"application/json"
@@ -2121,16 +2024,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2213,7 +2109,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/pipelines/{number}/approve": {
"/repos/{repo_id}/pipelines/{number}/approve": {
"post": {
"produces": [
"application/json"
@@ -2232,16 +2128,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2263,7 +2152,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/pipelines/{number}/cancel": {
"/repos/{repo_id}/pipelines/{number}/cancel": {
"post": {
"produces": [
"text/plain"
@@ -2282,16 +2171,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2310,7 +2192,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/pipelines/{number}/config": {
"/repos/{repo_id}/pipelines/{number}/config": {
"get": {
"produces": [
"application/json"
@@ -2329,16 +2211,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2363,7 +2238,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/pipelines/{number}/decline": {
"/repos/{repo_id}/pipelines/{number}/decline": {
"post": {
"produces": [
"application/json"
@@ -2382,16 +2257,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2413,7 +2281,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/pull_requests": {
"/repos/{repo_id}/pull_requests": {
"get": {
"produces": [
"application/json"
@@ -2432,16 +2300,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2473,7 +2334,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/registry": {
"/repos/{repo_id}/registry": {
"get": {
"produces": [
"application/json"
@@ -2492,16 +2353,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2550,16 +2404,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2583,7 +2430,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/registry/{registry}": {
"/repos/{repo_id}/registry/{registry}": {
"get": {
"produces": [
"application/json"
@@ -2602,16 +2449,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2650,16 +2490,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2695,16 +2528,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2735,7 +2561,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/repair": {
"/repos/{repo_id}/repair": {
"post": {
"produces": [
"text/plain"
@@ -2754,16 +2580,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
}
@@ -2775,7 +2594,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/secrets": {
"/repos/{repo_id}/secrets": {
"get": {
"produces": [
"application/json"
@@ -2794,16 +2613,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2852,16 +2664,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2885,7 +2690,7 @@ const docTemplate = `{
}
}
},
"/repos/{owner}/{name}/secrets/{secretName}": {
"/repos/{repo_id}/secrets/{secretName}": {
"get": {
"produces": [
"application/json"
@@ -2904,16 +2709,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2952,16 +2750,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -2997,16 +2788,9 @@ const docTemplate = `{
"required": true
},
{
"type": "string",
"description": "the repository owner's name",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "the repository name",
"name": "name",
"type": "integer",
"description": "the repository id",
"name": "repo_id",
"in": "path",
"required": true
},
@@ -3753,24 +3537,15 @@ const docTemplate = `{
"finished_at": {
"type": "integer"
},
"full_name": {
"type": "string"
},
"id": {
"type": "integer"
},
"message": {
"type": "string"
},
"name": {
"type": "string"
},
"number": {
"type": "integer"
},
"owner": {
"type": "string"
},
"ref": {
"type": "string"
},
@@ -3780,6 +3555,9 @@ const docTemplate = `{
"remote": {
"type": "string"
},
"repo_id": {
"type": "integer"
},
"started_at": {
"type": "integer"
},
@@ -4037,6 +3815,10 @@ const docTemplate = `{
"default_branch": {
"type": "string"
},
"forge_remote_id": {
"description": "ForgeRemoteID is the unique identifier for the repository on the forge.",
"type": "string"
},
"full_name": {
"type": "string"
},