From b1493bd0819eb3cc7b16392f9de7ec46a4d63dff Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Sun, 26 Apr 2020 09:55:00 +0800 Subject: [PATCH 001/384] Update 'README.md' --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5bd15f3d0..12283ae9a 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ https://testgitea.trustie.net/ 响应状态说明: |字段|类型|说明| --|-|- +|-|-|-| |status |int |响应状态码,0:请求成功,-1: 请求失败| |message |string |响应说明 | From 3be16db2a8d0d312e8ffa94a4c1f66d5e9a37689 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sun, 26 Apr 2020 10:10:40 +0800 Subject: [PATCH 002/384] FIX merge --- README.md | 165 ++++++++++++++++++++++++++---------------------------- 1 file changed, 79 insertions(+), 86 deletions(-) diff --git a/README.md b/README.md index 5bd15f3d0..1bc71ba54 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ http://localhost:3000/api/accounts/remote_register | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |email |是|string |邮箱 | |username |是|string |登录名 | |password |是|string |秘密 | @@ -94,7 +94,7 @@ http://localhost:3000/api/accounts/remote_register | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |user|json object |返回数据| |-- id |int |用户id | |-- token |string|用户token| @@ -125,7 +125,7 @@ curl -X GET http://localhost:3000/api/users/me | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |user_id |int |用户id | |username |string|用户名称| |admin |boolean|是否为管理用户| @@ -159,7 +159,7 @@ http://localhost:3000/api/users/list | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |page |否|int |页数,第几页 | |limit |否|int |每页多少条数据,默认15条 | |search |否|string |用户名、登录名匹配搜索 | @@ -168,7 +168,7 @@ http://localhost:3000/api/users/list | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |total_count |int |总用户条数 | |users |array| | |-- username |string|用户全名| @@ -205,14 +205,14 @@ http://localhost:3000/api/project_categories/ | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |name |否|string |类别名称 | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |project_categories|array |返回数据| |-- id |int |类别id | |-- name |string|类别名称| @@ -244,14 +244,14 @@ http://localhost:3000/api/project_languages/ | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |name |否|string |类别名称 | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |project_languages|array |返回数据| |-- id |int |语言id | |-- name |string|语言名称| @@ -283,14 +283,14 @@ http://localhost:3000/api/ignores/ | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |name |否|string |gitignore名称 | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |ignores|array |返回数据| |-- id |int |id | |-- name |string|gitignore名称| @@ -322,14 +322,14 @@ http://localhost:3000/api/licenses/ | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |name |否|string |开源许可证名称 | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |licenses|array |返回数据| |-- id |int |id | |-- name |string|开源许可证名称| @@ -384,7 +384,7 @@ http://localhost:3000/api/projects/ | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |user_id |是|int |用户id或者组织id | |name |是|string |项目名称 | |description |是|string |项目描述 | @@ -399,7 +399,7 @@ http://localhost:3000/api/projects/ | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |id |int |id | |name |string|项目名称| @@ -432,7 +432,7 @@ http://localhost:3000/api/projects/migrate | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |user_id |是|int |用户id或者组织id | |name |是|string |项目名称 | |clone_addr |是|string |镜像项目clone地址 | @@ -446,7 +446,7 @@ http://localhost:3000/api/projects/migrate | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |id |int |id | |name |string|项目名称| @@ -471,14 +471,14 @@ curl -X GET http://localhost:3000/api/projects/3263 | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是|int |项目id | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |id |int |id | |name |string|项目名称| |identifier |string|项目标识| @@ -513,7 +513,7 @@ curl -X GET http://localhost:3000/api/18816895620/mirror_demo/edit.json | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |identifier |string |仓库标识 | |project_id |int|项目id| |project_name |string|项目名称| @@ -556,7 +556,7 @@ http://localhost:3000/api/projects/3263.json | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是|int |项目id | |name |否|string |项目名称 | |description |否|string |项目描述 | @@ -568,7 +568,7 @@ http://localhost:3000/api/projects/3263.json | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |id |int|id | |identifier |string|项目标识| |name |string|项目名称| @@ -606,13 +606,13 @@ curl -X DELETE http://localhost:3000/api/projects/3263.json | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是|int |项目id | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |status |int|返回状态, 0: 表示操作成功 | |message |string|返回信息说明| @@ -639,7 +639,7 @@ http://localhost:3000/api/projects/3297/members | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是|int |项目id | |user_id |是|int |用户id | @@ -647,7 +647,7 @@ http://localhost:3000/api/projects/3297/members | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |status |int |0:添加成功, -1: 添加失败, 1: 表示已经是项目成员 | |message |string|返回信息说明| @@ -674,7 +674,7 @@ http://localhost:3000/api/projects/3263/members/remove | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是|int |项目id | |user_id |是|int |用户id | @@ -682,7 +682,7 @@ http://localhost:3000/api/projects/3263/members/remove | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |status |int |0:移除成功, -1: 移除失败, 1: 表示还不是项目成员 | |message |string|返回信息说明| @@ -710,7 +710,7 @@ http://localhost:3000/api/projects/3263/members/change_role | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是|int |项目id | |user_id |是|int |用户id | |role |是|string |取值范围:"Manager", "Developer", "Reporter";分别为项目管理人员(拥有所有操作权限)、项目开发人员(只拥有读写权限)、项目报告人员(只拥有读权限) | @@ -719,7 +719,7 @@ http://localhost:3000/api/projects/3263/members/change_role | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |status |int |0:角色更改成功, -1: 更改失败失败, 1: 表示还不是项目成员 | |message |string|返回信息说明| @@ -748,7 +748,7 @@ http://localhost:3000/api/projects/3263/members | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是|int |项目id | |page |否|string |页数,第几页 | |limit |否|string |每页多少条数据,默认15条 | @@ -757,7 +757,7 @@ http://localhost:3000/api/projects/3263/members | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |total_count |int |返回记录总条数 | |members |array|项目成员信息| |-- id |int|用户id| @@ -805,14 +805,14 @@ curl -X POST http://localhost:3000/api/projects/3297/forks | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |project_id |是|int |项目id | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |id |int |项目id | |identifier |string|项目标识| @@ -839,16 +839,15 @@ http://localhost:3000/api/18816895620/mirror_demo/entries | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- -|login |是|string |用户标识(login) | -|repo_identifier |是|string |仓库标识(identifier) | +|-|-|-|-| +|id |是|int |项目id | |ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |id |int |id | |name |string|文件夹或文件名称| |path |string|文件夹或文件相对路径| @@ -908,9 +907,8 @@ http://localhost:3000/api/18816895620/mirror_demo/sub_entries | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- -|login |是|string |用户标识(login) | -|repo_identifier |是|string |仓库标识(identifier) | +|-|-|-|-| +|id |是|int |项目id | |filepath |是|string |文件夹、文件的相对路径 | |ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | @@ -918,7 +916,7 @@ http://localhost:3000/api/18816895620/mirror_demo/sub_entries | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |id |int |id | |name |string|文件夹或文件名称| |path |string|文件夹或文件相对路径| @@ -986,7 +984,7 @@ curl -X GET http://localhost:3000/api/project_categories/group_list | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |id |int |项目分类id | |name |string|项目分类名称| |projects_count |int |项目数量| @@ -1026,7 +1024,7 @@ curl -X GET http://localhost:3000/api/projects/group_type_list | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |project_type |string|项目类型 | |name |string|项目类型名称| |projects_count |int |项目数量| @@ -1063,7 +1061,7 @@ http://localhost:3000/api/projects | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |page |否|string |页数,第几页 | |limit |否|string |每页多少条数据,默认15条 | |sort_by |否|string |排序类型, 取值:updated_on \| created_on \| forked_count \| praises_count, updated_on: 更新时间排序,created_on: 创建时间排序,forked_count: fork数据排序,praises_count: 点赞数量排序,默认为updated_on更新时间排序 | @@ -1077,7 +1075,7 @@ http://localhost:3000/api/projects | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |total_count |int |项目总条数 | |id |string |项目id | |name |string|项目名称| @@ -1234,14 +1232,14 @@ curl -X GET http://localhost:3000/api/projects/mirror_demo/branches | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |identifier |是|string |项目标识 | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |name |string|分支名称| |user_can_push |boolean|用户是否可push| |user_can_merge |boolean|用户是否客merge| @@ -1315,8 +1313,8 @@ curl -X GET http://localhost:3000/api/18816895620/mirror_demo/tags | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- -|identifier |是|string |项目标识 | +|-|-|-|-| +|id |是|int |项目id | *返回参数说明:* @@ -1397,15 +1395,14 @@ http://localhost:3000/api/18816895620/mirror_demo | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- -|login |是|string |用户标识 | -|repo_identifier |是|string |仓库标识 | +|-|-|-|-| +|id |是|string |项目id | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |identifier |string|仓库标识| |project_id |int|项目id| |project_identifier|string|项目标识| @@ -1481,9 +1478,8 @@ http://localhost:3000/api/18816895620/mirror_demo/commits | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- -|login |是|string |用户标识 | -|repo_identifier |是|string |仓库标识 | +|-|-|-|-| +|id |是|int |项目id | |sha |否|string |分支名称、提交记录的sha标识,默认为master分支 | |page |否|int |页数, 默认为1 | @@ -1491,7 +1487,7 @@ http://localhost:3000/api/18816895620/mirror_demo/commits | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |total_count|int|总记录条数| |commits |array|提交记录的数组| |-- sha |string|提交记录sha标识| @@ -1544,13 +1540,13 @@ curl -X POST http://localhost:3000/api/projects/3263/praise_tread/like | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是 |int |项目id | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |status |int|0:点赞成功,-1:操作失败,2:表示已经点过赞了| @@ -1574,14 +1570,14 @@ curl -X DELETE http://localhost:3000/api/projects/3263/praise_tread/unlike | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是 |int |项目id | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |status |int|0:点赞成功,-1:操作失败,2:表示还未点赞| @@ -1605,14 +1601,14 @@ curl -X GET http://localhost:3000/api/projects/3263/praise_tread/check_like | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是 |int |项目id | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |status |int|1:已点过赞,0:未点过赞, -1:请求操作失败| @@ -1639,7 +1635,7 @@ http://localhost:3000/api/projects/3263/praise_tread | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是|int |项目id | |page |否|string |页数,第几页 | |limit |否|string |每页多少条数据,默认15条 | @@ -1648,7 +1644,7 @@ http://localhost:3000/api/projects/3263/praise_tread | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |total_count |int|总条数| |praises |array|点赞数据| |-- name |string|用户名称| @@ -1683,14 +1679,14 @@ curl -X POST http://localhost:3000/api/projects/3263/watchers/follow | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是|int |项目id | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |status |int|0:点赞成功,-1:操作失败,2:表示已经点过赞了| @@ -1714,14 +1710,14 @@ curl -X DELETE http://localhost:3000//api/projects/3263/watchers/unfollow | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是|int |项目id | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |status |int|0:点赞成功,-1:操作失败,2:表示还未点赞| @@ -1745,14 +1741,14 @@ curl -X GET http://localhost:3000/api/projects/3263/watchers/check_watch | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是 |int |项目id | *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |status |int|1:已关注,0:未关注, -1:请求操作失败| @@ -1779,7 +1775,7 @@ http://localhost:3000//api/projects/3263/watchers | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- +|-|-|-|-| |id |是|int |项目id | |page |否|string |页数,第几页 | |limit |否|string |每页多少条数据,默认15条 | @@ -1788,7 +1784,7 @@ http://localhost:3000//api/projects/3263/watchers | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |total_count |int|总条数| |watchers |array|关注数据| |-- name |string|用户名称| @@ -1827,9 +1823,8 @@ http://localhost:3000/api/18816895620/mirror_demo/contents.json | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- -|login |是|string |用户标识 | -|repo_identifier|是|string |仓库标识 | +|-|-|-|-| +|id |是|string |项目id | |filepath |是|string |文件相对于仓库的路径 | |content |否|string |内容 | |message |否|string |提交说明 | @@ -1840,7 +1835,7 @@ http://localhost:3000/api/18816895620/mirror_demo/contents.json | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |name |string|文件名| |sha |string|提交文件的sha值| |size |int|文件大小, 单位:B| @@ -1898,9 +1893,8 @@ http://localhost:3000/api/18816895620/mirror_demo/contents/files/update.json | j *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- -|login |是|string |用户标识 | -|repo_identifier|是|string |仓库标识 | +|-|-|-|-| +|id |是|int |项目id | |filepath |是|string |文件相对于仓库的路径(或修改后的文件路径) | |from_path |是|string |原文件相对于仓库的路径, 只有当需要修改原文件名称时,才需要该参数 | |sha |是|string |文件的sha标识值 | @@ -1913,7 +1907,7 @@ http://localhost:3000/api/18816895620/mirror_demo/contents/files/update.json | j *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |name |string|文件名| |sha |string|提交文件的sha值| |size |int|文件大小, 单位:B| @@ -1967,9 +1961,8 @@ http://localhost:3000/api/18816895620/mirror_demo/contents/files/delete | jq *请求参数说明:* |参数名|必选|类型|说明| --|-|-|- -|login |是|string |用户标识 | -|repo_identifier|是|string |仓库标识 | +|-|-|-|-| +|id |是|int |项目id | |filepath |是|string |文件相对于仓库的路径 | |message |否|string |提交说明 | |branch |否|string |分支名称, 默认为master分支| @@ -1979,7 +1972,7 @@ http://localhost:3000/api/18816895620/mirror_demo/contents/files/delete | jq *返回参数说明:* |参数名|类型|说明| --|-|- +|-|-|-| |sha |string|提交文件的sha值| |commit |object|| |-- message |string|提交备注说明信息| From 79641e859cdc58873b552ea2b49efae5d922db7a Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Tue, 9 Jun 2020 18:55:09 +0800 Subject: [PATCH 004/384] change chain --- app/controllers/issues_controller.rb | 172 +++++++++--------- app/helpers/members_helper.rb | 16 ++ app/jobs/post_chain_job.rb | 3 +- app/services/gitea/chain/chain_get_service.rb | 4 +- .../gitea/chain/chain_post_service.rb | 4 +- app/services/gitea/chain_service.rb | 6 +- app/services/repositories/create_service.rb | 2 +- app/views/members/_member.json.jbuilder | 1 + config/routes.rb | 2 +- .../20200609100407_change_issue_token.rb | 5 + dump.rdb | Bin 771119 -> 589 bytes 11 files changed, 114 insertions(+), 101 deletions(-) create mode 100644 db/migrate/20200609100407_change_issue_token.rb diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 117bc7e66..174c6b17b 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -104,66 +104,66 @@ class IssuesController < ApplicationController normal_status(-1, "标题不能为空") elsif params[:subject].to_s.size > 255 normal_status(-1, "标题不能超过255个字符") - elsif (params[:issue_type].to_s == "2") - return normal_status(-1, "悬赏的奖金必须大于0") if params[:token].to_i == 0 - #查看当前用户的积分 - query_params = { - type: "query", - chain_params: { - reponame: @project.try(:identifer), - username: current_user.try(:login) - } - } - - response = Gitea::Chain::ChainGetService.new(query_params).call - return normal_status(-1, "获取token失败,请稍后重试") if response.status != 200 - return normal_status(-1, "您的token值不足") if response.body["balance"].to_i < params[:token].to_i else + if params[:issue_type].to_s == "2" + return normal_status(-1, "悬赏的奖金必须大于0") if params[:token].to_i == 0 + query_params = { + type: "query", + chain_params: { + reponame: @project.try(:identifier), + username: current_user.try(:login) + } + } + response = Gitea::Chain::ChainGetService.new(query_params).call + return normal_status(-1, "获取token失败,请稍后重试") if response.status != 200 + return normal_status(-1, "您的token值不足") if JSON.parse(response.body)["balance"].to_i < params[:token].to_i + end + issue_params = issue_send_params(params) @issue = Issue.new(issue_params) - if @issue.save! - if params[:attachment_ids].present? - params[:attachment_ids].each do |id| - attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) - unless attachment.blank? - attachment.container = @issue - attachment.author_id = current_user.id - attachment.description = "" - attachment.save + begin + if @issue.save! + if params[:attachment_ids].present? + params[:attachment_ids].each do |id| + attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) + unless attachment.blank? + attachment.container = @issue + attachment.author_id = current_user.id + attachment.description = "" + attachment.save + end end end - end - if params[:issue_tag_ids].present? - params[:issue_tag_ids].each do |tag| - IssueTagsRelate.create!(issue_id: @issue.id, issue_tag_id: tag) + if params[:issue_tag_ids].present? + params[:issue_tag_ids].each do |tag| + IssueTagsRelate.create!(issue_id: @issue.id, issue_tag_id: tag) + end end + if params[:assigned_to_id].present? + Tiding.create!(user_id: params[:assigned_to_id], trigger_user_id: current_user.id, + container_id: @issue.id, container_type: 'Issue', + parent_container_id: @project.id, parent_container_type: "Project", + tiding_type: 'issue', status: 0) + end + + #为悬赏任务时, 扣除当前用户的积分 + if params[:issue_type].to_s == "2" + post_to_chain("minus", params[:token].to_i, current_user.try(:login)) + end + + @issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") + normal_status(0, "创建成功") + else + normal_status(-1, "创建失败") end - if params[:assigned_to_id].present? - Tiding.create!(user_id: params[:assigned_to_id], trigger_user_id: current_user.id, - container_id: @issue.id, container_type: 'Issue', - parent_container_id: @project.id, parent_container_type: "Project", - tiding_type: 'issue', status: 0) - end - - #为悬赏任务时, 扣除当前用户的积分 - if params[:issue_type].to_s == "2" - change_params = { - type: "minus", - chain_params: { - amount: params[:token], - reponame: @project.try(:identifer), - username: current_user.try(:login) - } - } - PostChainJob.perform_later(change_params) - end - - @issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") - normal_status(0, "创建成功") + rescue => e + Rails.looger.info("##################________exception_________________######################{e.message}") + normal_status(-1, e.message) else - normal_status(-1, "创建失败") + end + end end @@ -202,42 +202,24 @@ class IssuesController < ApplicationController end end - # if params[:issue_tag_ids].present? - # issue_current_tags = @issue&.issue_tags&.select(:id)&.pluck(:id) - # new_tag_ids = params[:issue_tag_ids] - issue_current_tags - # old_tag_ids = issue_current_tags - params[:issue_tag_ids] - # if old_tag_ids.size > 0 - # @issue.issue_tags_relates.where(issue_tag_id: old_tag_ids).delete_all - # end - # if new_tag_ids.size > 0 - # new_tag_ids.each do |tag| - # IssueTagsRelate.create(issue_id: @issue.id, issue_tag_id: tag) - # end - # end - # end - if params[:status_id].to_i == 5 @issue.issue_times.update_all(end_time: Time.now) @issue.update_closed_issues_count_in_project! + if @issue.issue_type.to_s == "2" && @issue.saved_change_to_attribute("status_id") + if @issue.status_id_was == 3 + post_to_chain("add", @issue.token, @issue.get_assign_user.try(:login)) + else + post_to_chain("add", @issue.token, @issue.user.try(:login)) + end + end end - if @issue.issue_type.to_s == "2" + if @issue.issue_type.to_s == "2" && ![3,5].include?(@issue.status_id) && @issue.saved_change_to_attribute("token") #表示修改token值 - if @issue.saved_change_to_attribute("token") - last_token = @issue.token_was - change_token = last_token - @issue.token - change_type = change_token > 0 ? "add" : "minus" - change_params = { - type: change_type, - chain_params: { - amount: change_token.abs, - reponame: @project.try(:identifer), - username: current_user.try(:login) - } - } - PostChainJob.perform_later(change_params) - end - + last_token = @issue.token_was + change_token = last_token - @issue.token + change_type = change_token > 0 ? "add" : "minus" + post_to_chain(change_type, change_token.abs, current_user.try(:login)) end @issue.create_journal_detail(change_files, issue_files, issue_file_ids, current_user&.id) @@ -266,6 +248,10 @@ class IssuesController < ApplicationController def destroy if @issue.destroy + if @issue.issue_type == "2" && @issue.status_id != 5 + post_to_chain("add", @issue.token, current_user.try(:login)) + end + normal_status(0, "删除成功") else normal_status(-1, "删除失败") @@ -273,9 +259,10 @@ class IssuesController < ApplicationController end def clean + #批量删除,暂时只能删除未悬赏的 issue_ids = params[:ids] if issue_ids.present? - if Issue.where(id: issue_ids).destroy_all + if Issue.where(id: issue_ids, issue_type: "1").destroy_all normal_status(0, "删除成功") else normal_status(-1, "删除失败") @@ -338,16 +325,7 @@ class IssuesController < ApplicationController @issue&.project_trends&.update_all(action_type: "close") @issue.issue_times.update_all(end_time: Time.now) if @issue.issue_type.to_s == "2" - tokens = @issue.token - change_params = { - type: "add", - chain_params: { - amount: tokens, - reponame: @project.try(:identifer), - username: @issue.get_assign_user.try(:login) - } - } - PostChainJob.perform_later(change_params) + post_to_chain("add", @issue.token, @issue.get_assign_user.try(:login)) end if @issue.issue_classify.to_s == "pull_request" @issue&.pull_request&.update_attribute(:status, 2) @@ -480,4 +458,16 @@ class IssuesController < ApplicationController project_id: @project.id } end + + def post_to_chain(type, amount,login) + change_params = { + type: type, + chain_params: { + amount: amount, + reponame: @project.try(:identifier), + username: login + } + } + PostChainJob.perform_later(change_params) + end end diff --git a/app/helpers/members_helper.rb b/app/helpers/members_helper.rb index e3fa623c7..c09602714 100644 --- a/app/helpers/members_helper.rb +++ b/app/helpers/members_helper.rb @@ -1,2 +1,18 @@ module MembersHelper + def get_user_token(user_login,reponame) + query_params = { + type: "query", + chain_params: { + reponame: reponame, + username: user_login + } + } + response = Gitea::Chain::ChainGetService.new(query_params).call + + if response.status == 200 + return JSON.parse(response.body)["balance"].to_i + else + return 0 + end + end end diff --git a/app/jobs/post_chain_job.rb b/app/jobs/post_chain_job.rb index 15a0fadfa..68aefbae6 100644 --- a/app/jobs/post_chain_job.rb +++ b/app/jobs/post_chain_job.rb @@ -1,7 +1,6 @@ class PostChainJob < ApplicationJob queue_as :default - #注 pull_request的 api文档有问题,字段未明确,所以暂时关于pr的参数应该有问题。6-8,hs def perform(chain_params) status = false chain_type = chain_params[:type].to_s @@ -10,7 +9,7 @@ class PostChainJob < ApplicationJob if status break else - response = Gitea::Chain::ChainPostService(chain_params) + response = Gitea::Chain::ChainPostService.new(chain_params).call if response.status == 200 reponse_body = response&.body messages = reponse_body.present? ? JSON.parse(reponse_body) : "success" diff --git a/app/services/gitea/chain/chain_get_service.rb b/app/services/gitea/chain/chain_get_service.rb index a752fdaf1..3ac1bff7c 100644 --- a/app/services/gitea/chain/chain_get_service.rb +++ b/app/services/gitea/chain/chain_get_service.rb @@ -13,11 +13,11 @@ class Gitea::Chain::ChainGetService < Gitea::ChainService private def request_params - Hash.new.merge(data: params["chain_params"]) + params[:chain_params] end def url - chain_type = params["type"].to_s + chain_type = params[:type].to_s case chain_type when "query" "/repos/amount/query".freeze diff --git a/app/services/gitea/chain/chain_post_service.rb b/app/services/gitea/chain/chain_post_service.rb index 220f6db3c..3ce1a2cb0 100644 --- a/app/services/gitea/chain/chain_post_service.rb +++ b/app/services/gitea/chain/chain_post_service.rb @@ -13,11 +13,11 @@ class Gitea::Chain::ChainPostService < Gitea::ChainService private def request_params - Hash.new.merge(data: params["chain_params"]) + Hash.new.merge(data: params[:chain_params]) end def url - chain_type = params["type"].to_s + chain_type = params[:type].to_s case chain_type when "create" "/repos/create".freeze diff --git a/app/services/gitea/chain_service.rb b/app/services/gitea/chain_service.rb index edfb6a3a2..9e1612264 100644 --- a/app/services/gitea/chain_service.rb +++ b/app/services/gitea/chain_service.rb @@ -18,8 +18,10 @@ class Gitea::ChainService < ApplicationService def get(url, params={}) conn.get do |req| - req.url = "#{request_url}" - req.body = params[:data].to_json + req.url "#{request_url}" + params.each_pair do |key, value| + req.params["#{key}"] = value + end end end diff --git a/app/services/repositories/create_service.rb b/app/services/repositories/create_service.rb index 925dc6adc..bd017df4c 100644 --- a/app/services/repositories/create_service.rb +++ b/app/services/repositories/create_service.rb @@ -21,7 +21,7 @@ class Repositories::CreateService < ApplicationService username: user.try(:login), reponame: @repository.try(:identifier), token_name: @repository.try(:identifier), - total_supply: 0 + total_supply: 1000000 } } PostChainJob.perform_later(chain_params) #创建上链操作 diff --git a/app/views/members/_member.json.jbuilder b/app/views/members/_member.json.jbuilder index 5a3d3dc00..c2a2bb269 100644 --- a/app/views/members/_member.json.jbuilder +++ b/app/views/members/_member.json.jbuilder @@ -3,3 +3,4 @@ json.name user.real_name json.login user.login json.image_url url_to_avatar(user) json.email user.try(:mail) +json.token get_user_token(user.try(:login),@project.try(:identifier)) diff --git a/config/routes.rb b/config/routes.rb index 3ff0d0dd7..6059733a9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,7 +4,7 @@ Rails.application.routes.draw do require 'admin_constraint' # mount Sidekiq::Web => '/sidekiq' - mount Sidekiq::Web => '/sidekiq', :constraints => AdminConstraint.new + mount Sidekiq::Web => '/sidekiq' get 'attachments/download/:id', to: 'attachments#show' get 'attachments/download/:id/:filename', to: 'attachments#show' diff --git a/db/migrate/20200609100407_change_issue_token.rb b/db/migrate/20200609100407_change_issue_token.rb new file mode 100644 index 000000000..09608dc27 --- /dev/null +++ b/db/migrate/20200609100407_change_issue_token.rb @@ -0,0 +1,5 @@ +class ChangeIssueToken < ActiveRecord::Migration[5.2] + def change + change_column :issues, :token, :integer, default: 0 + end +end diff --git a/dump.rdb b/dump.rdb index c4c30776b558dd32bcef53fdf842dc5a6b4a2f88..c96e57e865b64c9f889a66aa66b0bd1657c0f7f2 100644 GIT binary patch delta 335 zcmZ4Ap?{WTf}wTR{kUHorNyZ!y1A*jhaOB3W%$LDn4hLwP?VaOo0OA!fZ-p*Z+2z| z?&6Zf605Yt%$(Ge0}Ov0ckB31mSvQ#w>-eW#8z0ETAEtS$exm#mROoo@@LV>?K6rP z85meJGKy1DeG`+N^7FHG1B&wXa`KZCbF3^3Ow7!!(u@p~4bx0hlFW^gSy&58GgC`g z(-L!vQ(2Ny6H5dQO)U-04Gav74D}35EetG7SdvPMD-STRWag#iA9lFn@KU~7Y4R;b z6J0Y4OA}KQJxdcyb0HH89i@WI6eWlqI!Yyp=?WekY57IzsRcQu#R@i)Etp~@Ha2wg yq1dlf3-;2)^K#6V2UsWXW>VJ0bR+{GI1mbo@{?1GfkAeF^*?Xd{q2pseJcT?hjFC< literal 771119 zcmd432Y3@_*1!GCj3hTOH9!c2Gb6d;BFWvf5jG_dN`OFULDeO=#g-`{BqR3*IAD6Q zY)r?6ZfuGnq_HWx>1C50*&10+BW06pNJ73N8xq*fe((Fe`~LsecU{J|a8r3^=K0;{ zK4;#P~)#`+sKDicidS3V{ORhX7LLCuv)3@(GjOo_A4*sUxWKGYsTunIo!Q(f* z^Ybj`@JvhQ)oNWhx!KQ)nHA`$;~!d z^65<0b227z9rw1$N1)147sMXmFcFH zimYsFddgZavn9olpJDwue2%Ul7oQeca9W<(GRt6^oSnTgd~R-bL`JsBkdYV{AE${+ zG(|_p#Kou+G%2x0nf%H8bc5@Kb>{Jgat zM3$bFlKnjY7v42y9ha7!XU#HXTDU~+5B}5`Lk1Vd;r-9GTFfg9RxZ)=OV#nQQ85V- zadA;$1Gt=YGuL;2!Z@oT6{dKnWap+@ax(JsAYqItJIj=xn`_B3t>y4F4dePAJD0eW z>wTm^Bs@f{mgMx5lzA3YcCHx$VGMbap9!NCx0eSDq7AvJkgZs{j(Z~8xT0gd*nd3F zl5~FQm;^&iTwF?gRJcWxU5TVk|M?CUv~g9G?)ys5M$MEMf3TSp~A6T7?+f0$jGo{rCMOQ z+-k^MxgtjwJ|>KFH=mRC9CkG}xG!yyiVsLlRj#sX>Eafte1o&SeT-C5=e)GneP&zt zuA=VR1McRM?t=5KvTbgmSSmg%HH|6k-rXt{pK@NVbJ?1g?5%fS-s!TR3*qZ{hE0@94cnyM7a`WW=hzOHz0TR%2ulPT z3}qko?`}WRQ+Uy}qq#@e<-S}B{<C z{74u^JKGPyVi-lDL}nBZwneseFh-=lqPFhjolr})Y+_ZkRJMz!6_>V4Wi8G&m@`=e z`|*i6>~6jUfi`dWg3FORFWRM&oiLishlzgOhbyJFP117}?&flcXN@9>5e~zb-crLZ zspYvYp@84QGn|$v3!X06&JXGI!9UL8`vO*Q6ilbOYq$lZ1)78f>|ywduck_?;6y4kA@KI@K3y+e*edNj ztZMdlwpBXY&r17SxTEl+%-LEa6{|v+R#&+oOq59_#Zr^*bLEdoH)O4iJ*6AiZ=gHb zU-gPeTa;e~gict_qa=LTX;yQi7*td2}{}M z@z2|pp+b$I6twn7@ov-3)(zY)UuWw^z2~};Zqjqpy!8fSo;BBCvg-Qax@&d!2Pq9i$;@;UG{ zlb)3d)4ubDb&zMVj)PQQM%Ht)X^4!hUnMeTK2)bM&J#?sMQQ0)i#?4biat*YZ+ARF zW(VtyTR;y62lI$+W``ag>}b5=*OA0?BK0Ou;51y`PxM9tdOQCB-u^(8t9jBtJq3bS z88Y%Mz)pbq1|NCEl*}CK+AeCI$Pj)Z4HH1G5y_PfBFZv(GQ}qPSI zzL_FNQ3iE@OW zv$a8LD3Z=KNf!$0r|7z92nW&2OdUU1|DyRM)3bM{EAWKnKKjOm-S#Mc<+UDI59O4r zGO#t-AcU&4WzC(GB+L=&3%t0m@g&9s90O8cMN3Wlls^2hvd4r0a;a&T^L+XA(WyVG zCQNt8Pqgckv*(O0RA&2SXX%|6_c&YIq}nzZ0XtMrcJ-U3&?gx(O!*ngaymFfU-&kJ zOC(P2zFZ^i-Y29IeLyiDj^k{9mVB^%XnL8RwX!6ERd zX(&IHC!(*C-OtbG6=W?$ip(0G$gOGVc@b-rACNVoEQ2Tdk@zM2C(1^OemV7f^_EV0 zlIWAw&>;GLB9euA?~a4^Kig(=(*ukSnuzih_OW>Nk^fzuXf)(mf_00aT6moQgeO#F zq^(n=PZh;=Jd2BH(bX!^%jxi*C;XL-qu0P#hhiL09AjvHtoKJ=zx2d173Iy8&WtMPmSweRsws*d2hedA4+|!eWZEN*s|2+;B!cAG zBkInOHA1-PrSVS6&dSTqutY4BK@HFfQi2*dYcLEzRVpa`&co=EZh{mQ}E99PZ3GD=#wTgf9WJ2dk(uJ zA%S^;@0Qxb)GNi5>;CN0<-w7Lob*V8)oL)M%^TvC7paMli;s;pgz=C2xyqh%wjXz$ zI_xUi6nQx)u2hryb~pJ;(Cgjw<)HXTE8Qd5i)YZ?yGlx5_m;}`N{1??s%>S3q9V{< zV?SO0ODCOHD8Be|&@A@z(l13OgFgi$OWKnZUDPp`;`NzMKAdOlnOux0x47s8vW|~b zwWLLgUQgO5O&%o5dDSJ!XRSTl_P&6NEtsecPuF>c{MbW&Dl0vDnYvu6`77W4sbasN z3Mm$jlzc)-)pK?W3Bqt8kal0*5#D9nC=8;zYfjh$vtEsIg)R+Q8fxXnIr{A{y5^vd zIH{N1@()UfJIUxe#mk9ihb%8Gd-c4un{Kc1PQO7KqMeB6vYAhiZ4VvAlULEBoL3j^ zuM4y12`AYv*;=uG>&9Rgc~JD;9dZ?&~&?WP+cwSvdA{9>eQA0$`AKIoL4CPjr_g=xt@P{n1!p#2dd9R{Q6?xM3wGbG!-6cwYp zA|@0RIq2|C)#^;Q$dq;Q!?^jPs@z10q2*nRDdR(WS*K<;i8szp8WC_*BFBRUzxi?O zb=rNYkcR`uQX@M?;}z*rSq#vw9a|DscsbkJT<6ZY&c)BFk5=!AaaM!+*~e~Bd&+H( z6wQ~r50-TA-gd~xe2X7PT`Y+TiZ}ydG39cps!b|8cHkmk_La{^0&Zn57x&b)s~1q+ z8z;XbQVoJ2sGehBaYs<~O@2|QpF83^4Wr-5bM^1M@coRM9=gFrjr+`Jp5c%zGSXFX zF(##KDO7k#RmD>EF{wEIC$dGT#*N7pb8$yh(7b0Fj?{h4hdUU5%|6;)f6T!c*f|c$ z+s29tmW*5Yy?T9mL)qsdrKwA#YO8Hb^?C@EOVt~k=WA6ZVt+N{({7=vUK9N()w%&f z69xoT@h5R7(mzv}UAKY{tb4NL?_}Zj@1695kQscyl+)eHW{0ActP2_Ckagqrg*bd( z;_oy3NiP%q_Lh$f+9Uclb{q?-j9bUvw`P`u`cc1tS6%VB%CK{7`O00k3fA^1+0zkV zYvd={cXW)Xn?!VHPdXSLkB_$<58x`C?NCfgxutKnueLRHWI4#7j)9`zv+Q8gW!qqp zY%Q7UCVvtYYczv9LU2_jnSLqxL1gZ)dzq;9NBB^Eqh8jfn9pwQ6F)nUVwBw%wvFARJVv=rn2!D8J3*w`U&w?>L-QAr%Dr(gY0ppW z;5|LyUDORDVF^2llFpCsBs<4_vP|yPR^x2n-)*-+pv+ZQ;@Y=BiVeUmVTBO6XB;in z9UHeElq*KbS_NtEb{DxUtcH=ozHy^y428jO`MK*3NX3VxO{bif4%v-Nd8w-@ajbu% zezGMsJxlK{J*A(LWmX+v8hf^%2AvSd*I9Phg{iNz-)F6-!huyz+$(oCw`1s>cziq$ zn=aYO;U(WDelg+eNy)S%T&VZPAd;hiTX;-tfm^ZrR`i3pRP%Y(3j~Ot@NhgOQsZ>{ zs8Fz1dtr**RNy{j3pwN0-QMUrQ|WHriV2R}W>4qCZ3Ai7*>W}s<_mAru5G2`zxLH9 zV?@u)$&W(7&u*#qpDV0GGWnb}gxiCJ6_l+G-uQa4CeuuK;teUJJT6nDR zCsAQ=QYnHeV+%2N6lYCi@-XWELJ#&_GjZ2S2pEnL5Xk@%$v??6_*?MoGnRc#RD|%X z=?lFKUf~llPJK<3HlDk}zTgQ|-*^HQ`G$q~SoXAibk5P>#dLT1`QVn4uP{|DR-T>w zI<@C;{E~zgVK}Gd=Ch|%f9EU^$hB~*3y0wb&feW#BrLOi+(~_I_@>BJznO1M=9+I8j}XQZXWHhvB*T@bX7KpeZQs1dJI<0_b{?gM)3ihn3{IaR(vFw6T$2;@=SwW?L5 zBstahcMwuIrNZkD2I2F)f1@C(rQ8j+n4Q7j13>Bmcwgl_q7*V@z3?Ngy31!iE`lyH zzc5BOf${(j<*cjJiQcgPmC`feIQBaP791tV%-Z4&Vn(d$0`l8lDw zR8P&sS4l5_sGM;(dhoh~9s>VDZ*#VVh>Qn41k8pXXI~)*9!RS?LYPP+cTjI?XX^K zP}7SIf~vS(j0YNQTfO$XSq^5|vXtD=oB9DBvbqY{uAW;&^slG&q5^IsJXRk;UAzqb zBGDI2DA?60pHT4&GZ)Esc*UpQ-__6CtB`>Q(MMciJdEIxPpEOQ_+WS~ZbTUmAc!_T zDwwE6Y2zQiix138G;Zso0}E`kJ#^qt`|qLy+AT;27`?I5d>0!SelHua<|3Qur2~lv zc?Zvl9zGCx-)%Zz@bBn{c%bOt;(>+-J$Rr2@jylJqukjof91}HjzBKZpgCK3U-1_K z<;n+Q9t`u9^)i9T0p>yjg_n@qOyCvsnLZ|P+A`wpjz_=BN|H`LB>dz{kbO$LX7`~<*G?IX^LrL5AHxUC^5d#qY zcl1L{tIqg7^6?!RLl7 zQ{0o_^H2Yl;JfJao&YcFWj4at(4+sKL;S&`w?ll?%C3~_-}ql=?j-gogZJ-&{p!C2 z_SJoX{U`DuUiqdfM-KePMl~x<2NM>Oghz zWB>5v^+iRC@8tCX7Fl0j507ZayuO)|s>V6VvHD`ZQr&3Z_|}ZyBl{9hWdBH%9TEzK zpy&F*vW`%)TmL98>-76N;+CeLeh-HBPhR+S#@-&f(M2VH=Cjn$(ihq%gq4}00$G43 zwAb$H4eSp3iQ-qIqUKdJoT>YTS38)YnxlP*J(YdbA@jF|iV77Ox5!&vm42$_x=0IG zl01pMU-c#kzmwQ^hy$bG8Bbz&P^UeCJv<>OsE%*<1opMUBXuh=u&*!mAq%$-bkgY| zD=@IX(yhGaP+Y^nu5rk|?F;O0VPJnx-y7H?gHH4Xc6;0w4D6OpO5PXP9rQ+azHOcI zq^+7Q{gj**>EME!{1p2>k$#|VI;AsyPu_Ac5A#vH=y+g;$SiOuW~Xxc>vq9*QKYR7 zq7>;NqF)&sWa_d7iDX|%j+=ZZDxT4d@5}9Gwv_ec_Kz{QH)C!;<;m@7BK`UP`-0Z6 z8`!Jy>N~;R!o9^F=#>4KZ^PjJjS$i`Oy21e=LzoXW`FJp?wR~~aAI(GIQlQVK}9+G z-O|rUZt4y0D;>0qUl17G7u?@azTye)ul(Yh*BjjPCe6sNAeFnng-Lrg?1;T%z`J-* zZ*ZRy^8?-8zH|K0W#j%Ow?8@}_OaW!{Yg)5pKuU!`@B23{hQmleV!+`hbaCqw;TQ? zw?BVZZl{aSIXhaul(qE6c5f^e-p=iv<5yvBf0rCy8Zu5fF=#?!Z*Ir^P)tt3Z@K+1 zl)IUa3G2C?+Y4wcHvCa?ci)@b_xw?EpAd9Ua{u<8{|u;a`KhY-@{aL({#8{AbBbctn|;%O3zBSrW-QSpR$<21cxcBA@P32Z8HP74y}1QsArBQ zQ}|@KpYd2wBE3@Pv36qFqw<6(b%IuF|4_EVl%1c&HVU8GUko$G zsN+mg2^y0oK^q^hR!5m*V@(zd?|1-L28P1lSB7UR7>mx9XZ1iP$ug|!c(DInt0F!s z1|Ib7T@#ro%NbJnqJLQv4Kk|%%lRVtL5RF^h|Fdu;cC#agKn>e6u;ippo!3+9~KL# z`ZsT{h68t2L!^G2Ph5m1Au2jnt6BfH;Z?qGIgtO~EC+l9u_kSlIy@>~8yg;Nvc!eQ zt7Ej`(dJlnoW^WsQq&14|Iu=Y_Z+zYCzgZo#W1thoMMTKGsPOT33xolS~SrHLxKq^ zM*YEZNYF+_#A#x+F)@&Z>tS`r7~kL4Lv*w*h-d)rSrDcFvLFuKSr9jIK^(;eG1;>q zp#1iNNMq}~qGGiX@tWuuNYTH2dpR7svm7Gy+r45V60|Xzg!QXp+xr&7f`QL|@xOC! z_z$JGxM)*cyvcJuh&HB#M@Ji@@XTP254V`mjEpx#GpIqv{*R=$D2+DykEJ)?Fs@fb z^T=xaJt~?X8gIBqx}&4+$DqQ7njB(rwB!1UCMd+Al+ay=N?FB?3-?u_ z^5d#G-&1!6xhvX4sG)f(DgNHQI?s8JMYRBJ7T4A?^j^@5LoE&-;|KH1KNo`a?|MaQ z)v=oR_z(mG3>?Ls;_g=1F7MOt_#r&wjY5R8tpr^?s1@bs{Hu_V-?Oi zWhY*#wRiQVjRT!gFO$FHHv1$Y}v);sN5V=8i| zTH!K#Qy4CiTDeql80`~?=e1PZZo!}5Zdfb4L-&-H>f5+tc#iIFyDZAvbgy9C@z=|- zFyg8?3lG5+HW$Nwxo(KhrUKmSN@d&Kb-H@FtEv=57q;Veir}GRyYOe^>l5Lxwl|G4|N?xH6t^tren$b+i`6o7KBH8)%3OXY${kMo7J z>`V)!Su%3;{Kr^ZI->ku$YBo&*W@Th_LNq1c{kAEfYq%U%F2vshXqRV#}RlN}wisUJI zpOv}ax1n57*4s+p$<;wvc(oaqKU^p`m#Q3j>p1HWuQ&x+oQ&Q#E*dJkOGy(#3kE3k=** z&LzYAB$Zm8W?Ea_ho%lAAj}lTi;5^=v&amku}%g{RL5v%+s1&S-mXp6SSi7}5j#!A z$kBPjdSalO?%r6cnyqu;-ur1ly5QP+TBxMqX%Lx5D0o`n0y{;l0CFPn1Jc3m*CO}L zT{ZbNks1hoLb9D@8))=Q0!$(`2>e7D_xx%Y-VsAmJvWrJ*^;N+OxD7%4vv_6zfP>c z!H|wIyq|rHw=qA5+Jm}o9!-{2D2`3RR4F0m^c zXxGMa7#+wKKF&`|{RLK0Zo%m{j)^9+m8iej?^pJhvf{2gB3?0+$^H0eqB!9jlrsq76mGe$L-dq(#NX$38*E11GX zhMYusbF-`BjO%O})JXJWXk(_7P%3Z*UYIm#b)RcS zZ>L}j6&lL-P=_jEK3ICZz2(jeyHJVa9y{vwpRAI*wBGyEuvYnkiI-=D5qDV-LK>CUkjZFTM%X!pIoGfn%-Ot>K)@y13PAyjLrkSRNaXYi5+n{B6~gOB(UvST zuk5533g6)BIv6q;!|f2=t75<9lpYG6620FJ83$T;P*!&s9dA&vF}Be{C@pQ-U>mMn z<^$8FEC5vCT_=oINEE$a?3f;u!FCJN*#$zh%(cTVwXi5R_jonGTn-^eb`Y?&1Qhb$ z;z{-?;RY>LH^ZnGM^Jk0K2@T2l^=*A~pBp(XFVa#L)sbce9n<DJ?U{4EA!J%S9&`Mm;r@3Z8jY*h4H;g*f4o~6vrjl*$lwTJ((7>atk1$FR zk!H=zh_KAuC@ivljwW_2o> z*}?rSfCdW~g<#Oo)Y_Oy6Iy9`($UT&@>slk(rloTpQNm zJtfmdS$^iW>van_2=@FrVB_9b^biVj8D@{ z{DQtglv5^B<0E0Hev~3-;#3U85b+e1o@IJK9KMhqADN?1uvhZQx`ePdQgXXUt%I=# zzR1mEO>$|2-Fb0C@at?YOQ8Z=7`o7Kh#UnuZY2(Fu4hrbO4I0}AKl$}iH+cIPHc6m-I!g_h1V5sWm7KLnJ>Ed~X1*pZI zE!-apj*c7tIec&>yN-m_DH?jGG zjjPvYu-73{j=sCpuz}xTO@ci3!GoqkEgbigS}yjKZtAgJmWnrsl$x9i{WBK#1R5JG zL|L|PS&P)RRod7tZ8@4ei98pWPHJ_ipV%fvtS!`TYBe4X94On}BwgI9bhGnj&A&Rw zOWJe{^cjY=!TEeZSfxIg8_CAd*zyuRmv(R2`;~m5MMkwA6+(oU(9Yk|vz>c~90pWf z8h5yAE;$$x76KMBORL~%k*qB|3(wA7;U*vHu9Jx5NuY**u*r3i_N7mB*aB_Yh;6ro z2Fv^E(E%SpAY_Wn(=c6zT{hiCytlk(*CsS-X3POMbMd+EWAGBa!L>~rMRurTAOuF% z|3dae%pg1Aq#W6U;fd8xcJ~Cb;J`_N~ zTHR#=SXteom~XY@XvRkt*hTWd;D8BW%F9hzk!i6SR$%K_9t7w|i40&5*4hk9UYf;X zU6GNVh4da4QVuY(B~>FWh6+uMC1Q zid;)Zw!s`^M?GF&W{W;WRG38e(SX#X_56#Na0W8QZ1YH_F5nDT%QJ@n5bf6Th z`|IABZH^;?a)!hlg~F{fMP?T5+S3-70BIThaVvM6r%9>y8S|~rBD?69Br1&G zNdtrjE+8c#=an-5p2Piz&xG1Vm>USMSP68Zi+eIls)c}UPpyP=_@cf z&J5uzM+A0mIM&HDbmZuse|aNZ5PjzJTgx)->+Gt4Wm7)tcy{Vqn8`g;8BW4<{pT51 zj^k!DmJAzjfV5mo%7kTHn$?<OR-qHhby4gJhF+?1A{Wr)Cz#z<&R7O3zfeh_~` zoN|+IihcIys223YDr2t&za0{*pB=88Fems&&1vewwz&D6vEbK=0fM@d{zw?;Q4f{* zFpP3-R}Cb)`5AY_wGpILIcxol1J{T$V4FM(!ES0IAH*{x0toNr6AQWdS$Sa)3loP^ zmfS}ML4R5eDe*L&pKH zi$x3_a_iR)d<*>tsR&)5oFe%w>!z;;4Edh1e??Aldv*kG`yRi%_orRsm38U@{Pdw? zs_WSgeo8(24#&+*?g+_9{gF*P6e13ZDjO|e1Pt-pMXNI&{q^n2ol~_-dh_4fFYxC` z?l~!B_CrlGKg1jOHhu)YqiSlGzkIE2qK|43-a7R+?YsCP@+Ewy3F3xFn!3pN(&v?v zViNFwQa6V9;D;{n+8nYEKcmx4 zhDA3fp1d`@gGN>7)~x5n!H-R>828jO6_a0sf%uyyzHsZ;7x9f)Z&91@V_{6+?aBA? z41T8b!w(rRdfllSOe?wX4~ho8HG=`YJ)`#&4Tf6`DV8Yg;f>XpV>KF$Av(qo6R(Xk zOd8(r9u~+C^+V(tr-@J}L?^^WL)M*|!5ES-X_g<>45A|vVx!}t;}Hk0_*{V}=3YAd z2QbjDmk!@mFn~kE;J#~Zry`WCmo$Mn2S2SPo(80G$~!b}&XO*1o215Fc|3FQ~w+qtgell`5~|v&p0q1 zWdNJ&M1e5Kug_a{H+%X~`9TPgcJT(;@#D@`fiI$V6$v}#o_5x4rEpAGFtWS7*2A{W zo$PMkbepI3Ht!-Cgpe`V%Y|L3eXLGu#U9w*nC*~=xi_LIz0I|I#AyU3*nH<~KZmY$ zU;FNj3uOpBpb1uZxlWYgw(Z6RpqVN}i_qlRT*4*{%?DsN?P_m;H%5D!MtkEc!p**B zU-!n1(*9%E?dfdW1xMvQyGvYWj=*qvcVR8+xcsL6+e)!v7lCQ_W}$oYVfYZfrMoxT zar+*KEvZ`(y1+gfyDUYf9Ag3kCqAB>hY&@r%fmJ6z||i)owIE>@=gSG&I|nOA|vq2 z$ToH=Q-jf0w-BY{U+Qkz=6NoC7^lF&R?9*|k>1)K6PXz>4gRDX!+5%h!JCw`4`B)y zSf2e%KHr+16TV1^H9L60&kzQNtT4z<34?Ur3mDp(X5nR2dLA$LF<8Sog@Ym35-jN8 zb036?uH$t``Bs90eOU(#QsE8UP_lvTf)OkrKo%tAWy7(yjjgSFTvg@W#fJdc7WP9n z5=mf-^WsL^j$Xrkk$_C%)M5R5D1hNt5E>pvFp0Q!@+4W!iEd0z-}&`1MC`Rg+a2=A zN{orZVMz0EDM(`wU9E&tSjPpjKl3U0R4gOPF0Xie9=iI)deXf5pJB7R(J|wvTnCojbE%fTVg^HCIX44`7~OA7w}Ijh;R1 zRX*V7zH|xMH^NJI$q9j;o49ikSXsz(&n;XfMneh>{9rv z?9$Qhjm@e++O@A*Sc$LL(ZWALpbC^1lFxSxg|9uPkgM`IKhE%&Y9;Qf%h(6`NbJsq z5)YuqVk)vdU5a@aoTrh;@jwX|U^v}*s*lXR(wpQL{l6^SHxm&V!z`vBd2VGE1MKg=IH z^OMuDbvNCZkLA`R<*US^n&DAIVLCDK{oysy3+M=gSqSMj6(>&wW8>dkgEcKU=(XW_ zOUI5)Umg-+&3-gDJvb!HgU(YB3GqkqCELIrX5SROXL+SstPgv}bLgMu=TUjV5XV?8 zYpnc8EH_N{PfyLy#TMf1tl*Fk^j@Z>8M1{JCf86+=Xn!*Kd%TJ%2q1%sTT_=c7N%P zfWu||;C(K|LEP*?2hnmrDZRXU`*yoeH?ur(2g#_t2iU>_x&D6LEnKh4E3~V&nj0eI z@{GzO{lb7osLa5!qeFePoHDQ9@(@?R8TaAoML1RBR ze5@PKGrAC}tqQ7K3YvdFdC*%E@=zAGMdw-I!O)tZwfqRbG=n)iJIB)!+j@{2kLbFX zhdLTF7VLx^kv>ZI)U^e)(LMEcwwa#}21*;E8com7&Sih0Gjj~=Pjq%}(#%*<_5?c) zrZW#^Sr>&aU<^1>hWisOVSD&GR&ggIAA#?YGnay%|BNczj^_hEJm@xvWKhxZ_D?sj`+Sm+1KxE32fg+WA;~ zC(5a@Zn7$Dm;9=|x0ltQG2pX1{Tf*mvNB1eg6FGpsH{}}e#V-Hz5C-uzo{LR42P89 zkB$iFpgNY4)sP{(YM*e`{_qxpZT#X86Mo0!{FD?68%fWz7{cDezY}iKd-2mK%WBbU zO!Ck8AN-p_Bnj64nS_XtNv%$sq9ef~IVxn52wuT>JXzJ3^i?~{KNY^vaet8LMUlMF zzv*(>qf<`mQ$%(*jtiLW7@`I6HyNy^w5#^uhvrOKW3uE-smGtQz-b3GQkDoVjLx#o z51lGoxd1r;eCrr70oHU-qF=54LD6pnPw~S!$rEtEx0Cv+bQW<3pO>B3iq)bd=h!wp z42okrCh%S&LoqmoCK#@GUA3oAP>)L=KTSa*W?#Wp=W*#{$FhEcwfDOmBUnXx3U=v+ zr*eMk`@ENN5f*IV&d4iG2{L!G{))`>tQA@Lna1Y>!YNBCXE1Gse!}e3Gma6fIw-~b zwRu)cW<=ndwstBbOPB&R;)o=}Zm~b5+bDY7uaD@x&muFNj*OH7WDdG<$|7c&$x!V63Y8t0=#zJ;ZU;;JtLgK1aY{_91g zEYO5ZbNWxz=BlZ5b~Y1XU1N=`gu#VN=$;*AY%_$Bm2e*{pLUAcR8c;D!?z+cn_B~O zAmm`HIM_~OkBRya?A6u=j}4Y!dB~g~%KlAcBX#aTNIy?SO=>$Rl6S{4@UDpM_Admj zB5qqbwz(ZzE5oMM+S<~`Y^PXP@HDW5{M}RKv4ae|{3@jaQO= zfLbmqK7f2gvyXj;MyMUOg#Ajl6uYQ+xuR~r)skn`=pIt<24AA(efdXu>@;K9Q@lI; z0%;0;GLknY@WK56tOhKvVVcU$Fyq1DnTI8eU;srR{rz4zxyWS50%ON;InHRxx31NU zCFVzP*Ms(x?;8CkamX5C37ss1C-U>G`Y9wYI?TRWKLVbkjFx~U9Ye(-Rz5EH(3ThB zX1Icz+3A(Z2Ous;*B{q>!1oj0hU*ZGui&Y5J8W0ZDH;;?WMyFG0S}Z?2F-pX>vEPZ;$!tA+yK>5+ip*l zE%IkdIuTO?Ps~~8?LJfFYOD5C${rv4-XrByYYn7^p9FupXX|Ci;TZg_RgtH||2p)&YPX`JsAv{q?>z-YS|6N zB4zM269!I&N$_CF1>74QVzKf205%iikQX&?Ljt!;69D&9?nCf5vi->jcGV)kqGtk% z@hUb!-X}c3L+oG}6fiIFt==BJX4-vbpF{`z@axZazfGkBzblu=@`<8Ey-33GOEG?d zr~AGm#u;3$o*aH=>x}HL@PEkV#|o1Tal7!-ups5c&_no12Nm-Meh}}Y@cp@;J$&Sc zUw_r(tzUnTb>n$svzK$NaO8Ir=^;xc`TzejR!TkK7|w zj`Q-lEmijN5yZZDxx(>aF|ylE<#40f5Fa0#l46W8n-WawI77U}oPY*k{MD z6a8)j5-pBmQ^(ogyUj6pn||9AMve=Js-jnPGWSPrdW*{z8+{wh>1=y z7^0$$2?)v1_2wt`c{M{LaR-PNzmHgxxFF| z|F$CRJG|mCEhofk*T42seBXL_m>8=5ch3rz&NBh$`yy4Wky9T_Wcz1ii8{IqM4Ni|%DgiMJ(l+E;u2c1> zt+_8A$KZ^)A9)z=0(mvh496`C`aZ6GHXLl$v->ROY%Jw^LhnX-AAYk##~j!w_<3XN zKF<8|D1TEtF3fH_swVn4tn+^FjS?SfbBO3fMK$n4oEPjp!sfmKOe)p%;Jgr(ijTX$ zD$5 zWS7p1XS`IZJXp5OnhmlcDY&m+w`>`jW~qi1ruFOc*5h5}5HjI-m?V+>LZipRg^4sy zXsbK`F+wt>Qo%~1hI(|8b_x^Z9&CdstXlXK9`we<)qUightLF~?IU`KdT zM2>QX#{e9sUqYd5^file{SpUZ8AL#8aX=iFVcy0aoOiQGa-murd``d4I87YIVWs_G63zU)U zKxGjUn<`Ys3a?MD!oGjyLf9ZjmMI-9P!14g6!~Bw_XxyuuhTfgPbZiMu=oEL1ME15 z5c=ByJLMC09AAeMFB;KNyti#!)o}0px`t}S?fG?FmwB6E7F_=40d}MziHFh9JHoDb zINFzYM%bZm(hM&JAf>){j2(^4&eJ_!oYt#C{SqKIf3ACt6`ej`c~r=xzjx7Z@u56Z z94j*O*ljfOXmEQJyrM7U2<;Gab}4?w?ap(eVjjH4t%acl2jMebFHGj&M()SIEoIK74tO_3kq9FO7y-27s1WK4~Pd9amT9^edIfX^xpeA%IDge2;5t%{iN zK3v+4#j*fu}{MQ zQMQ~+=!m7X;T=BuLn3_+SGtnPdotH55(Ck6gb;1OXY3x)YrZ!g2RI6+`%nw(&sMRc zd75gv2#*FF=fmw6SqSLzD48nu5x~fFxzIKfwcxXOShaA$ex6zaLiXMySpQPcdaAV| zxPyDfR^F#3!PHJKFIb8%Qz_`6aGD;qxdt8jX4+X;;xcTj!7gMy_({~nd9A5x*G9b%SZFiFSLhrax%I>y5uni$Rl14_Nf*n-&9t4SR;lj$-}9*6xAI!5@KA);k6eG3M&Jx>wRw z`AVL>iC73CAtq?6Zf*x7U|siYIdlOCR^g|>HTuOkQG-V2$j1_8puhf<@)WXz;|Gm!6ts$cR94 z8RqC0932L$O<@p}k-a(yOAYsXWv5P9;Au25yr+0d6PBY1TPf0U3Tuk?shpL;!fd@V zY{t+mD{_vfEV|;m)FDy!57X26)iMQDjkn@D+>JDKR9xU&xIVndfi#+E?^dHzRGLyZ9Y-Dpr2ZjR@TmvPc-Nd;nW!YLSd@P)>qCr4Rd6VfJtH zXvRJ_HqJ1DuM>tAjp(GGWkNwZ&xIy$^fUw}grH}EGijDSakbzwB0x`}{Vo1syyk>L z?{vMUf?6mO9>hw>?eQ|ZejhIbC;1qjDIB9LK;5iS`7mtJzeA38F&p7~S+rU`{V7-^ zcO9;CRn~SgB?YI#9)N$)t_wBOMdRyy7`@LHUf>97@KEM}!3Dn-N~pZ|4)Mzh55_BB zS-~4gLrw4EXXP-tcqTN5ti)AN#-2+5jM;hYu^=N{5Z-{5a;f=(yY#ehmA6pmi}{!JmjxwEg!suEwW&GO z3$%#2`4IM@j47ZL$#7N)t5xZU<`Fc(rm+hssp|*zs*OnV4!W zcmAK*#aNQu?|zrN*Z*EGLqJVXn4S4P@8?tCxP8yHn=2Di@XeaD(FN)$Y)*M1uhR45OuEnORvu(uwqLth=N=prT3J#4Dl;5ENSJjb7XNka`MTXb zuiadiBwOt+{PsJT)Vl|FaJ~QGqG2-VY)&1 z5&mc+a_x~eWzY2F;K#wYN$ak4+ZuV#oH%TPJYc@du2u%kRcO7FNn_%$3Q}r(WZ3n` zuSMW|=d$3jKRMTEANJQ!ODZnW(aMsV^yx3ph}Ogu3r1L5@0bx`R7B8rmx7)ra|#R$ zyX~+V_D<(C_FmiF-k_uArtCYxKsgJtZz$7#+Mcgyx7GYK9O@1F6szI(a0pAdR>^cH z4Tn}~w~po;>#`4Td^R{>vl?+M>#zS6!+;~jVRYa)m5?e;g(gRiBf;u&S}>L!&3G;x z2GFXO`>zcH#?)VllfK(ogYkzw@HWHAx~NnrDlT8?-+UzKVZlvg4@_vjpjPLq)p)8? zs~2V`tJQ6rD_SqEMa`mb_l~xwy4K^#77y0=%E6^~FiIIB@szp;mtDAqf)qSU?ZH#H zVD9fbwgIUOT66s91X-~T#gw>_#d!grgLt0hie&f%C}8%Hg4QL zr%x}LKR0_x{<4{cc+3r)aC2uaiOJV3i-8St-LfV541|#cE`pkw&kcrAoH7*G;8#xz z(i;59a6B1GW*%v~4&A$Ag7z6)tz&96Zq9N4hLa7aqAmzPD}v@6KweaL99P}`Qz#|y zz({HHhLXpt=Qp=CoPi`fZBNQBj9D1Z%@0?raeVMeMg=##C9n!yfk{h}1-Ig~>yRC) zY_q$yY&nd(_SPe4x~Q4pvKJOfcddBA+SF-@bex9iv|3%rR56cIN6s-r5iHijey$OB zdE5;6zKPgG>Pb01rHW!M0ad7DGUSgSMbGgl2{73-p8MfN59*RS#d{F zxiGF;QMUj~sW^QTZGo-$iY#pEtoMABo(F^2*+{w;vX2NIo2eqQ1p1L>9{jd3tJ$wb zvV_eELko`YTp8Y&VOJ&r*uiGOe!dHAg4Ip3Y;L3|+eAj#<`PhKk!9<33D0(*h9s*Z zMS3@E<>3m|k?5}|I%aH=*VU@kBe`+*{Q&$0$Aw6|+xvGMK~XE7bWu=&e>t3opdQ}x zoZ^Ro8NatU|KQoCY^m@vPDZu?XjVFZ5s$rMh}W|>a{6>EXPAeI)PMwY3A_hoc-<-4 zL1dX2G642*18|KnfPGGk96_`VTf{I7-RSLE!zsg2t{W8b`fAvhxTUmSH-yUprMd}c zL!4LP2i$J$gqIa4KxjSO*c|$#J%+7UWZ36B^AWR@b>H2vK~+KP6BhCn?31b}aKm2iWV5W(73vZ9izHd2^N}8G9UEp_#fFnY$9}#8 z8z0>bMo3GK%o>csQvXTWZm6qx)Ti7goPjp9+U(Z+L7G%V+5f1IOY?`jBSd)P$#U+4 z+)&kb3Y^)mo;%8YFF$ewQ-+xPSlp>+3TD*eVye6*hOG2|c&Uj#%XVqbYr^~+aC&*-N~{?7iKQk|Jwr#Z7n0pRCf_Z;x2 zy(LDD_LDPWh|_=d?S_8Mp{M;%z1Q=e=h!Wi@VM{pd5$G~9dHRJItsIUrsV2fR#%G2 zX>{hA^p+H34)Pb1W&C8~EPOBGPLFV6L5MXm*^K7VRLK-t*yJ5}3v-$iQ;ezBWb0ke zu*A$?e};W7n`lfeo|M?8_W0e8FGFG~qD`~;_T%d(lErTcMH7399v_;^zPx@V z`1Hyx6bKn!_h0buCYtRWj8q!Ot}tc0>aGH1f$Dpc32I1S&jq0fd5J#f+5BD z+pVDkC6Uk2QM!ZU`U9I0kbFqdg{zK26ta&! zzKfgi@r2^g;Dm?w`a6xGQeOhPf9@6Q@UNm+C)I>-FX#;2(Lr*CA}hP?48^$ac4sI) z47sPN%HzTdc#vHQPYch;10pJ%u(s$Exg{azHw596C~Jg7V(|2XkECf`xClLIV_$RK1Pr^~dRl60@6waFsDRv`v zARwed@q%EWQQXC(pp$ajej!PS28akkv!L5l=q`BO^YMv@`YsfI3*!`+?~iu@u8Km> zX&`{h=N|sq0&=yMAL5@|3Lg@KGNmc@KJ2%)880`Ra8T zM&Cq-F!aM9xg`{TMy~Fd!<;hUqD>!ST-U+E) z5>gM}w#Js)lYYUC3!gXHF}Nvy6Q6eJgm#M24Y|ZRd8-|Zc zVw+;LyKv#^=V-{u&veM~bODQ;Q^El-Gj0(K83M^1i_bx#M0Y95J#4$jcN{LApK(Y< z#UdV~RI_ME)(X0S(<;=XgjrliJbd_=r%{mkMcK!~yPhu`FEB}+fXA(*bG{2bzK7QM z>h>_POumrX5tU+6Yrr!r@Tu5xHvK*P;vMuI6KqO(fN3(r#cm%{DtwBnkUAZHreXo| zCMgb{+15az{{H0<#AN}aHB2M5+$nV7NXUQ>CE$rs#2}Z3WP6-&xJl6)4>Ci+#aSZ( zP&iWpuEd~@mhaXSCW%CzP}7vZo;5U44NWu>#SHdhlibuCswwLUZR?U!5%$G+!7G^=ibOoCBP>%#Q;eKHP+^9%H3Vr+_LJfpLHX3M*2W`!mlmN2%=%!gS37)tBjivu|L% zl2%cgbNfnjIWk~WkTP;nW{|GL(`U8QsFtn6@tbqzB$h954U*C*Nm}3{d>QF!=(x7N z^++w|zy=XL8zX#wYuovO4FjB+-vbHd9cU4ed?L(h_dc#KCv$fxF95eJHr7|ijOM;a ziQSk3bG58!cv*5*-=0~c%z-@mED8g&wWl`15G&f#*FLviSSCPgT&xK85;0NG_G zh0jyv_tbFrQ`l@_g+5Z~COA;AhK?l)jnl*9G8Ld~U)oKVGy^bj;Uh-4UJl%cqG<-TH(oYp)` z`;I*cOGAU^dUU7TCg5#mkVwtrhlt9rRIhPYd5dZimJFbx6$b+j^;W=%^e*l(QOR*j zqPKBNa-Nf~StTLDSpj_h)JTHGA$UsF(J}MOG4XTHd66W6j`GzoXGtT>qA?5K_NsJa z7V^qEyXQ$s>ze%|y25h4P(2f&Ng!c*0(YP0Gd^S zi`mVgpTjX>fjUi;&E>x2WGdB5r=iaFFj@04d5C$MJ)85RY-7uYm8cVWT>Dy#0yE-< zN1`!+S*-B6PhwO$WPnOFQX$O*!agAq{#H4NZgW>_kE;gLE&EXIWm8?IeZpoiBPw}& zbO$sZ)}B$-YFv05+=mNvl!jh7qqc)8CKJ@^9Pb^wW%2i$Y?F5vd;<`DjcSN@GMSB{F!j_tkB>dU3nIb~iIpNQP92 zABl?7!ZYqHriOhcgYd7QX#9|WOBoDN_%~FxZP^A@C^gv7`phZl0*!%^oKis-(t5J8 z^~8?WRUBTz+g2qgDc|PNN8nKG0LoW2<_74P_h68!gL)bJa9I+3;aR3xCEvCjTLNl| zU~lDT>^WGMV9`7)M>BTokrTr%(NQ2&YR-*A#mRRhCn2ddV?OTtCDzgEDx zciqSGZP6q&i0n{W!E`KJ1u8Zgt%=mOqfB^nhko$a^anUunOhqh<7U!_ze^o{Qg;b< zq_1J0rz%fsK8$Mt1chwAk6s-+{gvl*f27WBNZ1?++M;=`!i4$7`C33hD(6Ir0am3I zyF|J-hyD!(3PN2aaPW#_HrInf;u|H48v=Tv6Qu%f%I+2@V~&o0g+dGeM~as7Ykk`V zLCb0SB1@GFMz{P$3+;2~VetcofhSF8Kb9quEZ7@5b<*gxv{6&0Ot5eHxVv%A8WJPa z(}TgpkB(apTcq1mI6j^0nLS`FZwQ)$YduQl ze$?UM4KPk2$vtxVHf*c-)ZN&m6q!@(3`ujv^u#;cwp|a)-8<3x$b4fZCQ4uTkx@S@6a&wrJL@QPW~Sg1V|OjbHa8T=$GvyJF4r zd9&3c(U9eaQr&9Gzdq&<#2x>)^d^2KNK3(e$l9nBo}74CR1Siz%%tcSG@V(V@iTJI$d0vpFg+Sk5K?R0QAEGYJ|;wpR3<+MZy>9f zX)vem1z2v2!rQ^57+Qntm%Y8KR?%3DrOiPZkmh4p#AWfL89WMzveBB&kf|CSeM}f6 z{IO!6BCs+zBZeJe|2pX#jIjn_M>45gD0Or#m#6PdUEBn_*4oSEFfJaS|3ZI}_%6Mu zNJ|?%enggPGF7utq`Jx;uuU32db2#>xo3~!ooIDT3WUmW<&4IK+01kyt4V$zRa3=G z(0t^h2gi;tOH!t#We!iDI`RtnN~C-7f^9NxLg^^JQt~_CJM!U^CS^@R@uGZ$ZHjHI zNP21BVSgtoRtV(;gtP7lrVone4zRT=-&JRX`nQ(_dzFMoncY=;T8M*cIh(MLoGw3v zmy@s>|C4c0sQrEH2=_8}vu?}?J5_aDy{YCKX0S?;{=jv`U)1tYjB!VENz37eSb0Jo z^QmVsb-3KKvh2<113Ar-uvXoh*(*E**D95qBL_1G5&7UL;=}=eV>#2T9-GLO&1FAi zk+%sip$u?{=S6NVKGa?-d(~}bFSpC^nJBeGbENz!SOW9+ABrt$9- zvd^;whL*oT9X=q+b=1x$_1W$yI6P``4lT-5;1c?vQy7U8TTl76#@#fkGHsBJ4bW=Z8ea6`TP@@nQjmjHE6261_{h=Spj)t8?Nw@9jUd$7xs0-RI-?)) z(HO1Ny^}o`gIMws0hx^92;YG&Sfrh$;IIxPOL6sVEgJbU7f@$bsMk`4Way}xD9U&^ z;SP1@ahxbCvJR7B+JSw7*E4TYv<&UE`J%G8Nm*$h=+-L$%iqSOt3n#$g=KDo*t^iM z9)?j63ku3$@+kR_nTNO`_$L;$Z&hDVm$!v2`Zm1RrIsemQ(w~$CC!q#P_jP7sKn02 zB2>b19e8xl0<$&xl&+>pHfH_0h7nDQQ(nCyF~{YYKTG!r8SkAT!&*b6ceBYdQ9cKH zi}WJ0?7%Ag@7n0^Mt376sc+&@mf#^1H~vR$!+4F!L*P1jx{bz#?H1yi3N)^ymVc0( z&AmCsOBik!alzxl7=E0mgvu`vx*e!ShlSKfraQnfTwhObTtH=+s&QR^ofzyRo9O1% z-I5l?RFrY$pGy~@*)}y{l=-2tS8mAWLMF9vE?-4dwp9}oC~z*3Q8@suWD0!Sb)3Bz z^j5%P&E(WH)DOj>XsKBGns+nClO%4dEHfUaah;V3$;Je|b&5Auo`_UG8RC>GsjYMd zxUOTZRf4{@iS}}DHPQPiFmMxKqXe-gyiV1ueP{$#wMw^hU9|UodnA>ti+?k}O_cqW z`0~GLQOMwaam8m%VM9ap#x!$sVzSBP9!jiD%uteSGm_y=p><-!gjtF1y5@*y%F;-V z?J7To8O%-NWGM&Z`X;Z`^lKrnR4;Is;k|C-@HG9bMORn1YD1!bw*o5;Dz3CBpAm-Y zQn_4C7T1}mbRTMSNNZvxIfjcO!zn0ZuTT4U#i!AaEi78@XS<9$L00`Jf7}?6=!K=R z{a~uPMe_wr8@!gADGvk!l&iQ%a?CG#D(|t_?b`gf0V(UaRO;*#F+6m~=g_{?uel?5 z$lXw}Csi(a+gdH3;i}YnIUM->LY%9z(ad1I#wBnAgzM!;llxo001VcyRPkz9wD4rY z7cmZrbJy%Pe*+pZ@*x7SMUHw;U*qBKz@gAv_W*@y5QE)o@jHA&{znyOPvZv8Q8P0k zJDi_VR0Narii%4aemQ?1wR<0TAC2EfF5doUksT`=TU0np7{f#@j27Ny`!+o9t#%7S zcd-kuCRd(`Uo>(^YM+``vfTFdrRimhgtxuj;`*avV7)Z~nz$ErRvP#OhNkLHrR-<3 zn4#a2F`NkvpectWGjQTEeR&Gcjpt;ZZdh-WF8D&~VXr*Up<%|bhT8q?Q<4~#QLo%> z5+l%0Z%E3sONl($xl2%95J9q8vy@>pDO0eNfsi-;IrPPF8N;5U>NaK%8*($*#y&|` zH(n_(_Aby2;Wnsx^8JS%LS3)11KA-&vU`omV1ScOA`@^`m@-z#tI1*U`L|}TNV*TP zP^~Af%fjb=LRM&Y2qt{8o{Am7tflx8$7~yjvSR4XVVannpMq*<_8l=s$v@Z}@;1dM zh~b3SadV(A;^ZkIEuIr?^=Dglj`=<1Ukxqh3i^O$PB8#&`axC%7tqbL{)JvSZm?<3&z^`w+;I! zbJY{;x$>O%$}PUWU16xZjd`Ov1^(Y^;4}!#s9U$>4+jvqJq*d$$ z>(krbb!V5K4U#I&3C;NOPoXDeOx%4oeuv6Iu9UrK>#Odn*}`svX3de9zeD2wF<9@A z@C{eb7gfB#UTsKut~~iw^}~We^ByyvGpO@(zLhZ4Dz5BXi9U&>v1FVF$&>l<@sl8k zom64M@{Dz4eR8c#ave(4NyFkGj?hUaL8s|`tA`4O-2VtF4ITZROae|Xt)*Dybiq2cXhJE0Z&r08xS$IWxv|X;GH!?nU`dCFNW`SNL6W4)dgI5>Xsb-3M>*XWP&A^WlZWH2 z1eV~S-XcGp5UX3M`2Y{YkX&RY@LJZ>gAo)Ja3Y6$@%UWVRigcWQxYJ=M~1iv)c} zpQ_zVVzN+WW{*oq9_MM2_x_CDtt$z?4S!tRSfoEy??>Z)=NGZhjvq5E?Z^jT-tHJh zkod$X-MldLD*b}05y;R8{=CsJTgg4o$<}{)3;DP=#O>fJ`NZXO@K$yg>mmH-#1}gP zJ2R2;?D#;~83a7?KuK-@^2A+}5KkM)xW#rDMOs0c5sg|%c2Lt-Y3+6k?5MOgQ`v_J zEcl_F>p*v)Q^pvcozZ|;=ZT5Gf^_6)c--B{dd*l8ceX}t3{stx@H?1J?5Y6M(G43^ z{xhIMt*u{wZoPsN1tHw zk<V76o_jkyh7>|9ww_`b3%qLH0G0XGzjbo!kW00;cwCWT>G#{ zrnH^ZbaT%e+N?Q@^rnQ9NKMY2q~PP zX6n2re&%gNQ&Rp|JECcdKSfJ~M!sL9P6&(C8KP_+_cbD#_?Ir>ur@H&g8WF`cN%y8z>TSUf1G2iBX z+d}WDAI9~fk>Gf5BN;!xcXg(OV@9TW)7jJQJmxI(taevBkI9x?UMp$vtxJ5&n_@{F ze2MbaS?XlJ24qfW$oN;}0U$GR!uHEhHS8n251oQ6XiS{VKKe5bqkm1}FsI=V4*oSJ zw7a!~m`-XTqmybCh09)v#cWK?q$}#K<}E}P^DTQ3Sq!InZH*Pa#|JZFn3926_bY=C zCV#^R-X3K6W<_+=uhAE>d}t`bm%p^b7Zt*n7}X{TzF@-L;1?zKvL{;k&#@O{Of9mP z_a*l7io{;907zXC@vh(NcZ%WQNaTfS5sMf9@e4)hY4`pQ25FO+-dkOw60vi`g1ZWLmd zYC|{ow=xO37`u-^kbMtxx$jdXE^_InkHiJz$yPAo0phY`!{OYT_y=wimyMb`iOZ6^ zh|6~|E0MVT$jmkmXeTc9cMzA9BY5KcUx178g`{lrQ&?czj$1qd+_JeHxBO*}oeFZ6 zp`yfD=I0-MBX90coMo-VS>7e?1Z9x3n3pEM_6wBdeG{JkSH(6UWI6QR$sZi$1y+s`%)a zAYCXwU4I8u`SY(rm7@|=xuNt0aLVXk#3?kcFXN)WB2QR#A-9-{_ML=B{_jjB>uJYb zOr`PDpP0&*|Cp%^4KkJg`8iX`lb8y+c7Kto#M8$3|Bb3xXAV34%T#5yL{&Q7OI2pB zLa1{3{|Z&Y?ej1t0BCzf*l9+qN5Ib6!|pIFMi=W;RcEyz+9KmSj<ziA3>za%BEIOy zW_g1&g_0y2!c@(N#>m@51yA79W>&zj5|yoY6P3ROiOQ;5L}looC8F}`okT_7DL_=V z1&GRx+e8IPbn=KGRFMai&|0MZ{~K2MUjEXZSmo~_FaDgR$R(D-c-}34<=0S(%CXpe z4@gNe+zV2k3WAjJL6CCt7D!3m@GBrieh)~w^3Q`5Rh$G;Mp0-D`j}JQNm58-%pR`) z(38K)QnK!5DcrBKlmY)gSxV?n^(FUB_|+h?81=p7C4G`jc8k;LLIs*0ld=rghjKc) z4{_oN?Wg#$)Y-toB;F9rAG?h9+SJE#XFzX~8y6+gv%}iGwdl6twjD?IQ^gU#Q^S4Ln23ZqFepw&sJIjoA~E_NZI!6kYFBfq5*2JrZ%+Gj`J4R-N&cocr z#%eVC;BF6Nv|th*u6M)h?O`t>m8Im{lZFf(laf&UgQ~P(1{c?brN{#IxB>!6EYLw- zSUSm7!tNn4_BE(DI@`5)Q9O*6T5f{HHqDM=hJpn~JW1#r>;qd9D zQ;Ozg7CB3x)DuF6h>A2Sv4o#UVmvuAeX?$lU?G!LgK-&>N==*LNuzDj^W8H7f0Jhb zDe)$T1=C0{@F$VKBrhn$74^-ZUhq8C0&O2g5Vic~Y1F1#xABoN&b`om(8EEIYPXcOHk zc6g{nSoPygak?8H`?9ZrGcEg@GG!KWVRO6)R8(TpE z>n9~S9l8D$7YHwg_9gtTBG(BydM|zF)o#}*`Epc5EYI9eHSF3m01BR4Bg&t?s^|}I zG>3KNk6l_M6sz9T4CS`+yDNSNgKZIFD58B^d$)pM;|8%$TqQs3uCu>?$t5g;Gh96C z20)=wO>q^^<>zx<@UxPRgpbawLaj{08Nmr%M0y}z`K#QcRO1vF=Y`&7CK^>Nd)V<< z8hseoBDf<574Fe7g^+zGj2|K8>+&e07srg8g{M01uC_``a^P67S;a5(@ zZ)2Mq;}TJ@Fo@&*J?Hr87W|^CYI99~LbEN+^1UN+{K`kT+5Qflyx09*Ml^-fqS7Rr zhk;*BWLwT?+e5PBZJQ498!MJ^Za(tavD_oh8X0Q=r|ZDSwf^fd=;)0mZ< z>^VmZdGpdzV&;=*-ab#Kqg+s?4`kiol`~xPhj1yxWaH-P)8`f2DZ|IXgJBb=j-E7p-0<;JCX1Sx zVt39Rs>pWY+GrNLzDd;y{|CwkTm>jTaj~tsukmvWf0D!GqJrYsG^%K}c8;jY71^wG z!pStHv`RHzC6^WFJ14>W#FaCJ!?jJ_5seMU{xk8>Y@bk6ShlV#_ia5_)5ly6! zM2vhAZr~tE=uDXsx#W;Fdr^ji8OtIWEA%5~F|?mZQteSbQqUBt$MpUIf&H94LsPo^ zW?Tg+02zh#*@}QhUQkqI_`(*q#2Bx1{=+Asdx)|8>?ccK1=Pd)Z6qfv78FKB!dT%r_hvJ_oam#Ea3e;x@jY8) z-(B*gSK*Xaxz10f@d-jLF^JtVTjf|Ol7X$eO<_|wPyRI-=F;UXztI8xpjl4m{NluM zQzuU;`>UvA@VAFCS5o@pi<){Qc5tUHXpCuVI2(*@$HV~lnAr3Q*Fw)@TEJ=^7ma1_ z30B4AQCU;RX7XwBK#7Bp26{=SsU8+PM(835hRbF`ACVeM6%~uJG2FLw_V_H3uE9M4 zTP9Lws<5cqZcD$y{E--h*_S?rPu+W3LQn0gq%8)MpjTyH2_G)XM)_G(0~ngb?lZX$ z5gYGSs!-aFO7$^Ta?JHK7q#-5VK>T@rQp%>FbQ`vGgsH>t0+Dxc{?>PNta5J#*ZOM z`Qgk#*-C6zs5*>a>sn(BMth!*9*NS36)k61LH~6xiGv7JMqZ;2;e$#we%AoLXZ2N@_nk2;A?xj(l|1Uwc|9N3h2}9U_QMf- zq?`fCL%d8_juJeq5y}H>on}kmj22DG7(j5Qtb<6E$8Yt_l;nHFtw8lA@@;sH8}F4d zt`4d@Q&_!Go^FP-q>?=&-@>Ds#nJs%0(8{J9dvNwV-o+!k3`R#MY0+0^J~HzhJwW( z&MD#1{L(y_oQtMgY~bMMaF^KAoD%hZ0dlU1Pnn zZ*JxWe|+BSYkX%+a#8-9i@yq=obYOMr-x$Rm41zw*k$)!Zjw*M4-C)D+5ai&gYS)6 zF*yqVmAEKYKg$1gxD(&E$fxRCk-;9|*@K>xexB3^yQ!JW5Z)F87i?y3;%pm|!sAI@w~@L(#)dg5eNAQlVFPpn1`#x0);l7#RAK1$6KaFgx_8 zIYwKFs*#jUbV;e5>7dBSvlkS&hV_JEp?!||g&gIdoS-JN$zV$Lyx$%Q^Au^XUqmNp zs3j5Ylo(yJjM{fFILxFg(l`BkhMC`-5@dGR@rzYl6ux<-%BVQxcrXhE#*g zY?m3$F8gok+f(S14N~FWm^=Cx_4oEKTK-}GV%0tUi$bt}@k`?zB|0xprx3#J62w<_6WNilogYrh~4+`b^{719M^N`}j1*$Cm* z6+xvx@!xSpbaFV&b|+>=B{*`esR>vd7}nWpHQ5uKMvUh&xtz%kz4NzR5OTc)AN~^s zjQnR&sTQ*xJzxgBQ%EsaXt=Xu4P&YqYPh;U^ZQR~| zf1uLW|94ys15*$l8B-kQ1PiuuBJOaR6Rh?eQ$jL&@h#Y1NxPg*uJm7SXFVx5TmEBL zL(d#c5J)jw9cZU?S{){fGd0zTO|4whujU7&nDN??oR@a2+J|JR1^D2pscr^vLpgF_FDAI z;uBT{uZGbNKXmBdb2a?N3^AiV2VegBlmv^zm7HKQI#Ls?2D~&3xh5yxh>bGoLGmx5 zFMMd}*MRNmM{O#m3(0a71JjHBfTS32w>mUR1CMT?+G1hdUR& z7C6M9yxzBF;MySB2s$f+VOdDM@UV~2O0qO|#I*grWxk8gAOS-!5tu^}O`rx|iqldl zB&*r6vwRXNI=VPA6@0j|(T)+njv&5B^;7xz#|AnXer zm%<^mAYpP6m?P0V()!FsJjJ8B(!cy7=(suOMv4&A*|!Kv_{xPYan{1TL09dskEYZlf6jbx`A2D7h&Ixs4y6zAhOTfnU(R~Vpn z91wc4UyxF76sEuJk=PtsDbbRkmu2J^JNYDTap%M3SI<7}TT_7sqhK6wi0ZEu>>T)m zG}2*SsGfU*I=eArFgcfz!t5~K=}%0-R1r^9Wz%R zsHb8(q#uXR8WhT!;LHSv&~9{8^3F}-`r9Me1z4?sA=hvb>X}IU77`1g?EJtt^-<`h zTCX|)RnW+7Y>*3EU?}?M+}N~;Zr3K+Wnr;eMYXL{Z4X_Jl09tGY^lk}VkRqNT-!NP3fFEKWdbsq9bMP0N!uv?SMBJz&(21U&`f&L3tY}7MbC!IWfSZq z9Y`E#xsYZufXw!EX{M7sUBr+QOkH_8JkjpJ$b7rAbgoN%l;m(LZGTC>kIK%5-k#N> zV)>{^G@wuGQ($n}2*Tiqc*wH{_)1|Bs3NHX*Ql*DuF=aumB7uoLM<7^Qpd{5m-tB^ z4MU^n9r{#V7e0kFm0Qj2{gyhtJLl3U({t|vtH5-1hYOvNddX zP-9mm)liJUhKB8+5c)DVL^^`cg2ff@X`=Ro^5>eAy~V!g@TDAnQI-#Bz=o?Ipr;qk z_C(-!GlI7rAJv|2X2Fb70RC8%KnrwMI$5;i=A zy~lx2@VGI$ESa>75h~d$?B5$!e{$0k{4u=c;Fh00kluOQBaQfDX06B_sbRkPgx%#C z`pM0`ANOzjINXo#d_tf2#J~5as-yAmgx^th^uXTR(H2SjNwH;DVE(dpSr{3GBZ4`_ zXic^oTqcX%oQr9=7}w-Tj{A-{&0lrLMuxjKj475xT#hkRD$eJmaN$}nj^`GCSYSNY zTg@rf2fhps)L#W#jx68Eq=cqPGw%rT-EaPwDuwT5y#zzC2a?Hn>nuEFWx}fVQ`Ve_ zz>ym#FdSg5*6IAus*RHPtr*>#YQ_1?oVx52^W(u|R)#K9^Y1xkg^$a}bedAvB-h*` zP7yM%s3gA>9g~m%(c}?s5~$I7lWUh`9$jdA@hn)NoVJ9WUF692Rv>WUV(=!C-#y2k zV|7?8Rt&bVOJkTBd(d+sEW&9u8(ns*BgL7T0`}m+yOAo+_F83y^9u?*wX$p!yo!pt zka@-VMaB80i@edWLq1;=3#d{%xAS{ zp-Z|C6*FpiprsA6`_9TQb=d>{$+-)y$*IYhp}sI_7DlMM3KO9(G?QW`*ZYdlDm8(2vaL4iW?ZN3wva4`tJGF}B|o&kBr4B117+JuiDc)+W2Vy48GlGLP*|KZ-39 z#X@(RJgj8VTt`tsHdc_>dWo`AqHLA0RHSgVQ|fsL#q6F=BFXPKW7(Y)3N^&R02jEy zMBPmpm;)#?oeyu4*<4E$YjHaCF7yMXAbhe|jL8mHs>_~gw}sL;R>IAmw=VNky>#_i zEr|v^;G^3JCke-Pks8>+D8-Or7_kKh2@4FgP57zEt14;)q61eBV4{+=(t;@&6Qm}R zLYIo8iVC@&GAW~;*}4wLO4CdxBgEiy$#zwlUzl5z28HZkTPcK6#lQ$; z0pDTgNjeApg+0Owi%MZmVbPMUp0DznPJE>I&X3Ns7j}=`}e$RelyB4n(WS8V~Po1 zC*~X+Ph3Xa%%@rsj7F<7#h#NQ!+df5Zz30#l>b=Zb(Gy?a9B(^&g5KIZjLF%o}6mN zG-;eVYkzrIO+|=gNj2$j4Xd}&h0$P1!8z<-n^vLb*0dVDkLvM8nQF0m-fjn3dv9G2 ziTuV;EQr%vOeX8HQ>PwozZ?|*HTmbMsSbzHVmBsOa_zZDE=-ODyVLGSkb>v!smUoa zgXuTspCelMkAbXQr^{h7xN?)t$#$dD;LLSd^bQAd?O(kdu&B?B#HyWL+{!;UCmIcU zlR>Y)hiv{rec&yW^#jt2gGevZ11M{G`}NRHHt~AE;J}pB+wkJn1(C$p<73r`p;8u$ zVOihN4+XD?``)py{rB7;ej~lWz^zo&6j>82sS>@&H6rOYU!3tH6D&bf&YSN*xiW}kFitP`%P~9#6-5J4Q6op0t&&Ep z1ZN>bP+@A)Aq=!(PvR!^ps+U-18op^A=ME+A@L&7isYqG4B^74sJ1O@U?ta`T3MaG zS9ZD)cu!5ptx=Gl$INJ=v)$eB|FYWMz^xT{lx6jWEnE+I0$?9CGZO8zM5RCwgx((J zedyCf972EYm7uf*?h{^N(j-eNvq4Bw1Q*usser9^&2S&+gi?qopRM3=OfPU{#!)4_ zidSGq7^(|I*-9`308Wy30yzXOv4fe$GHpQz^@0==wi@Xj*tk;snqED9L3L9iCS^Uj zuFR23e`%uLSJ(>k=h_S0@8aatP$&;bw=`eVF}gvVRa8VVH8>a-c=|X(J!aQ++_~E4 z!UU;h42P?0VwB7KScmDQ?X6Fe&PwyVvamFuv=Sz9Yv_{ctaly1NbI;->_1+3QS3ZX zhAYBS6>Se!V#88l%;Zv7L(PKdv2@9_86xe(Y|k&0b72UeIH`%E8`RwU)ZD}-Sr*qx zcw8hb|0XYI_SxoRKi_TT+0M&^7v|W*c$K%aFh=Oc4Z`T-{^i|0Lvh``Yh!MQ;ijB- zkj?DH$^o`iUBgzjFSF5gucA~>N@?`ib*A|nef8YAorNS}HwH`Sc3x9pSskWlH`AYT z4^fBK2+M@UbW6=iPvjNa&UrambC1hAOIcOLUr<|u{DcKFy~>j zLaLHGb*#dry&u2d%YEd1=1m!LN8Y{Alj!~*K8EZTWignLwOOK~`id{b5EpZkeWZG; zfa!CM$PU;um>1A56Y5`& zF;Q-0)`C?QkJ%R$AuvW#?ZgZbdI4iwo@3%}pvX%gs@gnoQvPH1E+2=hXV(hM$3)$( zlxUOH+b)pG`#Ruj6*?Ui8piaoYh^J?512%poJ*f||CVAn*HiI9=11cXIH z4sPjpPo>@!sdG{(TPuvrS zWsAArx!+;V3&R8er@XD9(buSornc}6EEUgRx*)w-F1<-&96P_^-V-}k!dR{!bH8Vj zP#{z%ycOD7yS=UPEXp&O8SL}$Cr_exp{Ptk&HdrFU9p`ytZ3W1-@pE3Yr`(gWMbyS zAdl6%PgGjn&k8pZeh{f7@9X&6J@v6;_`@15J3(ME+w(D5`)uy(aV*mB)nco=kot--Vldh1XM%1`G!wQm8wa}2Y>H{JPT(R;y8PJT z26Bfm{ni23ga=%s#f-By+?nnDM;ggdTASrXxxFBNvCEhV`>0a8W!6pEkAh+GSxA=O z>cn1o3mk>qlBHv8ajHfCi=EgqJmIE58f92Epx*=kbt8|zQ!3nzr^e|cMbza-``;LP(M5OeUKcTL6WBqIih8|_AeJyjx3xzIvk zb<>Jp8i50H4kS~_!F}yQ?;T0GIPxS*Y488+!uIZw=cf@kxUfZ(s5hBX^moiWcPwmi z2u3%BCB?FA^~00euL$bDhKZzF&8bG0Q=eeZbz)6=E^ccbdP(Sm+&0JVN|8COPSbC> zA}FI7rvHb;99F%{X|+gWZL$$#|B+1PAoVoICCP3!N-!H z6~z6M3;f$ib3dQ(!Y=G$rxsONknko&(WBqb4B0a8hI*#6}}T?`h&<>Vw-(HMjSaBi+S*=&#*tf-FqSDY*OYWqJpSES|rJ@sD$r2t{6 zxqB6E<8c(l;trf?q-nHfEiQ!pTf1JsiL`a!Ud$lBoqXCq0!LO{_y&*BxI`Mrk8%|h z6u~&#l(DvShR0#mzg&=Z&Aa#c4xjWLAs9xbi$qDhq-wrU)3$jfF0i=?6s}ae;Qppu z(YCn~)u<35jD|X#R*&Ne5f46aunPv)NxOH9R7TD1>7%|Qm~9#n9LllU2#a7q6@l^p z7~+YuEV^2tKiDu~R9fFRR^iMJlQG?_L0V7;{NixP7KwX)sqp@c2S)<;0N|t$V{9$J zxgiVxh>{{9IDq2J&I}jH)12;7tVmvmMS>w9DL7nksKN6gr~^rz<4jTKyar-$*+rEK}Wh6x4WnliIS&`YQ0NjYI)4 zwAHZ)21yD896EzIp^2E`JqG`xHg23eP+TB9N3Jwc+u3J{%JyBzt(a=tG3c89N11>z z3QQgjHW+g$S$_IOO8ex1%ow%lhzS@kw#wA5ppZ-vs%?0l zKLvx@OVim6L=SyYekjA6k&M{zpLF~u17sZ@LwWDzQ>tqh_h_00I0SUq`dB=a<8i#@ z5Jz(-F8`jvlOj$#kGf4E2p|I50rv0dZTt<4@jbR2$|Z$291^-fB-G*5g%T2GgDC5+ z@U8OTh@tKdlOwR{9o5f4^@!~d&Xw?}5^R$*Mvn&DQOe^MWx4KQ@G#s21@P_hdgb5k z+~M9+_CS08wmX%df})ovL@Hl7G96I2X7FHWV$DYALdJMHin2w5D2A2b-|eBK ze)-fXBND8l{sME^og~WVQ)T<%Q=v_6L}!*s?7WE5r-*$Q!zW^Rj(a>NN(!??>La#a zr>TYc&Y~QbfB6Ba!DD43bDrZc-rKvUiCQjFTiJWR3lDq7d-3;8^o+ORo;tX@cvnslg4S8=|J1F)dGH+^wSL8zFgY6i z_3&5JpTpKxYHgFEo-6VkhqrO#E#JdEz}8@f8*_~5j;5e4K*K~P9=dbQ?qN(=I>pJT zp}^>)7neV(9U6)f8Q-}^RLOuvR0{63Lc04SA%Z;*@j_0;b-ZY?v}HqdcWw^>+W_`W zxumVyopGLhfm`gAX>AgtBclP^wgX|t+yIFSu~XB(Lc{@%kspvs?HgoI^jG-z*rl1Q z9-s*N3PGWLQ1y+f50^?KX2Tw5XMuB&5JJ1`#e5joQC^}SqRqR{K(u_E8YmLlwHp+pd1EXNjZ(YlKB&q^5Il`qR38cPzTb5PwM`_;KO6b z9tnY-+QYt9<_UeEsCZ7vJS2zEU+U|?a+x@R5t^vQZK21@s+*{l+_w?TH2sX2BztM8 z-I-T#U(ci*T>BLi*>jTgxYt8r<8)S!wmmM6lZE@%p2r4{mV=vob+KQ`4*BaZlnoZj zbkmy@t+Em4=MylHBK1Z)y8oE^|(p#kL1^U!ni1 zT5yG4C=bZ5GPlDNM2BZM%;Gt{y7GIWuh2^~jmDh#3Oihi`^ zViz{CUDJ1ZpHwvRB{2pamx^DW6qsCrYevVpt1=B;GDOSG+})8&QHR<{!{PWZq`WPL zZ;o6VGIS_Ni(P~L@0^8{G*jI$yFQ2Ex_a*8!kPJ4%5(a3^m#z5V~b>sQ73ZHLRQDm zX_8In5_omYoKfSb-CMZ#l!3}pUrp>y*#%#vlAiJ|gKMs^|7 zy|Ent%M@@Sfc8T4HL37*_Oc667?{Ww zW%iNn*yCRwtrg`_z=`s7+BtU~eD3bW&&KmhOzhb4OJ|wm|3-9R5JOCOoDMZ<4~h{M z?_mWt;<<{KHp?z5g59g^TJ2VFfkUJc$oxrhVq}8kMN5FE<4ZvA;cZK<^~#tQ`>|V9^k?l??BK*FxmncVldH!kC867B2$`41%W{gG zd}8?UO7;e|e!uD)&}&~}=3y%xyhVh}Tt}Tq0A{HlgJ}x?>iw;&)(F#Vr(Lf{yDAz1 zs$b=D2yl4JRA>u(N}esEtBTTS<;GHaDjntipWZ3FN2g#j^Q@z{ej%pjgT8g038g zpV9`dj7P4}TXl6!WCc9s9;?019Jo$YvFHIiy?(R>8#1{*$s<5VU09LaSJxRI6E`TI zkX1SM0JVPw^BgW>wn8)}Gp=cS>QFh=wmtEATQKK+LLfl!u+c=;FpJasp+IjYQF&~S zJj!)j>y7_(a>W?umwatZj8L_21fWnSR5FyGFVpcb>MV}y7#TLj3VO2fLWSQgW`XjviQ#x@j&*orX z(7t_7G3;EbZcR5n&btqZQPGibZwT3D4YzEdKpj1-#C9^^A#P{|?XzD+Ug1Gg{4cE1L#Jp_lL!GfGxc>`aO|EH5c4)F)k<40F7iQ6pRAtC@PNM|HH$m{gZqsH3cdMdo&zn7N?q++Qi2^ zUA)_%SlYHju^c2mPJL$|#J|R=ja5y&^tSkb$VE4c`t;s|dY4W!9*(*P{@Rrw z8K$on#5f#HRyVd+JYsw^DwQH}*FVzw_{z991(&UlV8J%JH~mwCn7jC4+7)TBDxn|1 z4+I}+RL$6DD=|D2qnQ1JzUFs{y{7hXC+K&#A2`;wMJ`KV8pREm7V#6TA9c@VYzeuH z^&?I0S69~IZHitft-7PK|0TAM)0jP>g&Fxt*ahRrR(3NbRtRMFC+w;S^+i( z>+$FL2fpgGPE|>3&ln@Wy0Q^(<1f|v@r&_}A>BpJ)6-xJe)#$$Q!;WS-r*yxk0!2( z-IQ4USTx=>@8x@#jf-3fCPu=$V<)ZcklecFuY8KZY(BvFesB@{VM4J<}>~2>k zXLW=2`#V%xEle1Hm@&oewxT5xp+HxfJKYMA)&n z9*ZM0(`rlq{l=7Qu^MxR#hj99{rAkBS=yk6FcIysrk5}Lv@p0L?BD-sRN536ecT1e z*ts*Duqx$erX^_YNj5@=EfGRY5jT=-txixLVZ%IrgGwcPlFE)*oy+b=2Ru zLG3w1U}d-52bwK9YmiTYU<;v6jj`9S#O5@(KW<$cb|`pYP!S^GI^>toAti^);}L&? zK8nf-sH|#<$P*{Y9@=_xMcboi+IBt+tdP1HT~Da=K#R_b_M_WXJvRV2LQE>7!=}^F zQc-WG`eGp7=-PIiflNf3;0jX3)3(i9p(IO@%trF5C96<6DG$~o6=AgXB;|Bb%UDmH zZLfVasOPnu+(ilD?VdGlo3=t1gnB2VPH5{2Kmx*B)jFGlI1%~l56NzlF|t)Q^O4lg z@wmcm!q-JW3HqlJA~F{g7XPs7qXJ2{Df(L2e9&Q}6$Zb$h`a-Q%EB&nT>K1X+PQw@G6sEt}=K|JkPm6d(&!Kr2)5n!n?;W1ghGQ4VylGn z8YoXyc{q$gpRSz6PwKj(3U0EvI1r-HEETNM70)_iC=RiceTI`lx{n*CXnQj!js36@ zW?)wO3jQwnL!(`-U86jC8jd(`fs9NI{Mr1^J(J;?dVuwx5MI-*L8Wf%nyefZV`co8 zU=@2ARl6uN0MHPW1 zS&0xSRdCAb-lw#xa#W>+p3^TR?DuFPSdXPdA>vUDU|ouaVMqyylm!UY33`(H&&a>e zJ*A#abQ<K_Sjefhpv*wWpyBqKkWwk23!e08cd?7tfxJj!vhfafX|-x6 z+p&=_zKFV@%U})E%${)mOR~5T_%J-{gF1I ze~H^=`hq2iMubZfEJAn`xDDHHZv|xomo>gnAdNc!zvke8N*DEEU4D=-gr9 zuB>f5+%Z0l#cPUwIyRDo7VdP-!=l;8j8n8p_Qi+r+E*Tke2UAh? z%etTslZ>XBS`4jPjw|dIy6vgILfyJsjOtLcwe3`;|70WN{n+P>pQ<7%lCzL@^9+f& zMpP^(t2|4ml7)`e#qJMPO+=V9L5k@@#r$UW(+P5cm?;Z_&_~t8{QrI zf(Fd9O0*@Ynt~&V*;Df{trGdV+}dP~-?LG^Ltdb0?lrs+e_Ly4jyPN76#Y%~m%>g% z!sF)GG_-Kh?VQm&%e9tiD>z`ECPj*N7Gsm)ZTOjt5kjLrVNdQ*n3()7;(I|EH_BP} zK6<#;4O`5gR62DR{a{t=DrveVT&yb77eTA0&v?^exgt=(TYikj(jijDTF26p!Ty=rES_9m`#fIwuW0gH}j7&Co3q9 zYhm|0C${RpWLppN^Y_l-KLFvseaT@#gn$Y``B?0yY5~{AHMGDuLWBA_g-fKnaqwT; zx?~^4Xj{%6xVUr5adz2bgZ1)#LTlpcHdZmq#BL%_UA#@wxFOG1@=0fNisDXH z8{N~qF9`pVo}_vqR(L^&5pDa~LzFD!2%nKnPG$>TJc}zYF#h<~hEbIHChXO;%@MAK@+rKG>$ujE2OB7$(_udX(X4fU_B z3aC)Kcp#p#N$$o^z(tTo zv8a4cGoBUWS~Pon`Y1Un++SaTn0L_7$G>fy!9Q&88G_!Oz{s{mvusG-KO*liVZs^X zk}1)p2(KoD`k1GD`X2HL8d$S2>ifi3mtN$j#!Wy-wfaT)B)2cvIa1+1kq0Uvg(LZr%;EY^`e74vnk$c zxCcJVP4*m3%?7FH0e6wSLL8YtT>P5ZJZmj`wAQ>3=Ir&K>Iw%^{C(Qs)@8OD^ck zHBzBewO&kjW!G%$BrPbjB$Qbbl9Ce2Y~@md`~oW#+q-(B+0)z19hS`Hq}vN6aVm$| zSWz0s%oW4C-#)o;Kwe&vyP%Bn@)l6ZWJ^NHWN{3pC?QNSbxRCqriwQ+Dx^;uu1ma|(Ld`xVm zrYeMO-(|AcLhn3P=d2piu$ygPVk>TDH>QbuC#7s-kIM=(mjA$0;(1`3S9`mJuByaI z^bKCDGj~_MU^vO77>>#D>ZD0w2GgFzPAuBHwhwuwi2?#M)r-5(I9q9e-ny6)C{khi zDNKcr`Ba?4rX^XMR0ZPUeQ>4TJDE7^`N7L3I$4!Wxh?RWc;-W=yg8_~lGX?O|vZ<0>2n5>7wiBLA zQ}$O(9r^*Dzep2oZ^%s4!EoU1j zSI8DR$UTG`1xWDi%s%;kIY&0AK9pHr*Q%AhZ<9HCYC}HpN zqE?V+kc-5>$_~UQ&$bQaKg(rB6?%K{J81nFJ^*@bsGMq!>@pJ;s zFT*c|DR>ZW6*)^Io}6m1F3lN{@*SS`orZ@e)!)UNF|}qgetF`qZ}|Dg$A2@eT#3Pl zW$cGm8Z}?BnddI29J_b=H>2c+1K(V!#M{Qo|6cudBHNXc0oAquVJMfwW^rb^T=0DM zedAZv-*jwq(=(y9{=}I3V-OK?TZ#=~*Pm%RHUI9q3%?GI{+alDUMF1h=-$Ky@mlu< zwZ4?3bg0S*wf(#LYnC=a;Yooaosm(#?d3bKs=t~)O)Sxo0(ITya3p4A=EH{xU|C{D zzB@h9T#%kp0Ktz-ccuLoz_k!z+-w}xoMm)3m!AHIiG3-Kd~2%Pl~G`}TAZ+!nq5FD zWjfNR_Se=&x-}C*e3}h_t*e&IpWwv7%FdL2j$8Z9!GOYkBb(3dMJO?w86;*=-PQF_ zcn!B^%Scbfa`+Y8+6E4`PzxooDdjOoa<4CkKM8HEPXT-dFq0M}I#r`~s>|#KU(4xC z%m;4G=Cl=P3LKfgPx{SF`NLKN;>X}WxvT}Y6qhR%6ew3Fe57v2Z%MzpB;+j9Qt97l zYlsnB;OqVQmEu2Ef2Raj15VwLchfBYo>@+o)*+&*#;Vg(t>tacXIxzl+@A%$*C)m4 zOiy#9r6ig$-BLrUsfn4$04D-FU^6@2R<6MM-&`H^!nmo0b732}OAFN2AGRLyky+1o zXQY{34y!A(AT2$^m1Zq)nty#Zq#F3s;Hx*MU%NUmnRMbRt25nVPW$D8_?277waoI* zh-<$zY+IAkL77X-_|dST^t9bw%+ty#72mAuKmYA3*>KVhoIktPLLO%dw z0jV8|9E5zhP*rdC#wt;FFnSYyi>%q6HU5=M7;{;+X}Y5*(}wR!L9GZBZ+=$vSh;IxKF1xM}0H5=Lw z9>kPEayp8OHDG@TS^B~$#VTDys$=ojjuzj-xB1;jP^5zyU1)DWcqz==o-EbaOG3Q9{{A?51#)`whVV_CwJ7g@M_*O;4c2 z**$$`**t|y#`pA2oYNJ3ng;G?MVl!O;8Yby+Q5Nqw?OPnD+s@}<}sR%!f?YGg`FPi zKLJ?W8c@vmQB8574y?WennQiXSs_qqi)N_!`i0E>CY?8oD|F4CP0NgCLI)@PgH0Mk zuXAd2*xO&aOuZOtGB8eYROp0>`SZ%$F^*X3sX^g{Gh1QK@CPez;vW~{O2eedosMFx6`T*?2%wIP!f``&@LkpL zYRO@)nm5lUcV-f z-VT{vR*;y1NV@SYu}_E;@O+a*-y5^=?L6E1*d`d|jed$(Wj8}y0Az!N?4gx0K=Y#^GpZpWbRZimk=Km_V#fBK+LQI*`B4UDh=(yVj2bEr4~W~# zyik{u4e!*9m2AwisBLtDmYQzgVLi_d>f1R0)x)?61G->dLmm=B7HVJg7={qm>^?M( z%E&J7sUEKi$ds>xA>6;CiXNkBNU2o&7hwPc!%|Jw8CamB?7FsweQlf88#ZZRrI+() zDdOo%Ve})JY~oS2vOd3>sgx(H{(I92Z#{^Ao=HA^Hw|WERLI)UCsUIEpYm0=<{*F_{cl}%ulV@@ZA6G3ABSJvMR^9i>!g(x%8(ei_x<9l>ue`G4 zWUz^5BRUTS8Xz~CQ9x=~!r{CxPE1Ao-taVI$$n9N#dZ8rcH;w7Q?1h%ptaq7VMUBHdrGt%o2hZc=eKq2y=cso88PpZy{&^_ zI>;w`Iz{Pq7)D~2YC`B^?TNS){y`lyLGU2szro;gIe(X$&5_Aetd29O3v)4Q28&1& zSJ|$=jY)`qd5JM3NU8MiFxkAf`IwC+qxdj49P?cMurAmJRQWe9Yj$B#QgqDwu-|@K z(Va^`ZHws~J)uX8$X~rXHYz;IgmBMe^kh`C4g+EcOf-(g{WUjgZOkPSRn$P1hD8wO zL9E1z?X;1eV6yUOFfmHV9dz42qT|IU{oHweziEQAua7tUPmz&DHtFuBJ%%S{{jnxseB_U$ooLuN&f<_q|pyS{OJg(y6xN8T>n zp_UPUyJ+F{%6=HR>#ahMr*JC&>4)AV&1VY&)@Iurws-ZazlsAD8g6;j)d4f z(a%T!;E58)CBMv`s1-C>uip1%@)v5@#263%=*2Z2(GVJ#b|$pe%1MLNaeqIdd$Ycy zI-rlI3j0DBXZJCNp$)Lx#<~#ZM_w)F3{9kX`4*aCcA@cjr?8We{7fmAG-ZZF50UAW zAVYDEhd_RlOZEHKb&=3KR36;C~1^ge+X^_Em@= z$(jr7sF*fPCXPjQNM7ohD!1BqiuafnvitTK4CfcLP);g(i;M!uqBqrB%hcA=j7W_ zpVC?B7Um((8$yat_jWTgPBsntN8Hzr3$2>VptyLPS``LSXPB>F+kS8*;(AGw-~rIO z=enhS;zGvSlsIdI!t#tH3TmZ;Xb4G3!uSG-HiQwxTQ~{nK;cDkP5d15F;&s*qJ>&} zahquavsI2XJj1~S(U*2vj@wUa7af6RK|a4SQ_NylG%5_TQ#%f~AKBTg`AT7Pkr4Vr8h(U82{C7Mnp$d?BjOX4jII(}Vg|xsm@L)g#yz!Jp*N7Qu^WMDEDH z^iu1gvnvL2YHPVjuiSf)KJgC2-gSr^Mj(9QVp;%`BX{J5+arLow zyy}>}yf#l^8!o>vS?TnC+3d9Cm+#A0I<2~&zuecYbeb%Ee)-DO_=lH``d&MDXbGNA zorQ-l*q26U#_eVZ&o6JE>Su1c{NOZ2yJGBY=G3G&t<9IO6yLe?^8R9<_T6!(?|*vD zfy)WA6n4zzu4M{iyxa+UPm%_G!Fn%WnSc54d<}SiLeHC>v(-kfpHMBYw@wHso%mHF zY?>J?%XDj+#R+C#s@t8WlJPTAY=8YVsViWFO-D=_>0@p2tl4gKPh1bAr$Ujiro;92 zlkN$tLWP;%hl5C47$6k5$VrX=ff9O6`N~v{t`_gxSNUvvXp`8^1hU8*HGma}JK2o# zq2JwjUFmq}|K?=-due?)rn^!z-5@E#>6i{$UpgeP45&#I7Upt5BZcgh|6j&4r@G0&0x_Rw2~^gNNHonhn88LY zz<2ofn4%egxTIk}DIrPzWeJI`i4VPw2PHGuo75{LhzE5PiB&(xgVF=R5|U4)k9t@g zDqX{tk0J@kUj^luv zfPn+7u((h-Y-#!6nV=iN?Q(EVhsFJS)&rNR>Y#tjf^fhB?apvH@#=PD7C0Ra8|=G~ zMSpuiV1|}rzP=!?jnGnok;Odjmo+5+A071PH6+(TCf9AzfI+7JsEgA&u|>UCBzf0{ zq}m{gn=R#cb=Z;~OicWFN=PhDiwkK1XQBhIE08O!7EnygC@FGSQuAFYHqM=z;rcy` zK?~92kGfg(u!4JxIvShR=0-~q9Ncb~)8VpZ{MM8tB*~0IBMUAAU}QVyHc|N1>jRd9 zEt8^uF(&!#p&9dYtj)En!}T$VO}!cX7vUi;xOCcpKv%KcehTv)#e0=ng z|C^n|@5FclgX(r#t=KnYW;npbE&$QSZOu-D=(!XqeXLJykd#qM&aZcyX`%^#|F2YyK$a$26CNd0Nm7rteu9NDAY zvk}(fwgc-BL=M>H7emWcCGSDdVkc@11kIZ!T{SI>-NPYc1BL>FHH_@k^Jb_GD&sK# zLkTiNAV`f!obGm%7AxFjGRi4eW51M%!{`Aj>jRw}Vr~!~3LzeVN_g*D_wDj8@#(Il#A`V&lUEHqdfD0$6eiENSA;{U+f=h4W^Tf~*m9boo2$}VmhndKi_|r89zh1P z^dB&<|9}xt!bH+mAH|WIe-IMwFfBC1_Jj5mc^`F`U+1G~CH?^$Rr5`a{DsHJ&BbAm zPnXw1aa^l#qo^bVZY*f`^P;_TnP_<){he;$-}Hs)sI(%L`pebKMZS`4^ms1Fi}~|Z zg81ybXnwh{7Ix)oAH(8ry@_66<`K&KjveqnQ9;G_!T5=)G0J7~NPZj;d>%3>VbuXu zaZ5e*Vq2HmyQ}C4K0$+^gYYj}rwuSxg?-FP5z;CLHN40er@F5?+f}2t!#OV|FE8Iw zvS400Ump%TR_W~NlM5#m(=ccVp)hF8n_L*1JW8~YUDWgSbe0)KMT-7qPm%ovSRO@B z{^O#BG8AUM5<0<4q8{wP?HD?Ezj8iCgG1Yw?1cFpc@4u#ojP?`yutG#15ODHH8=!! zg4sx8H#8Z}X#)V3mQZ4sHP|1~9(+fO0H$5u;7z5Yg`njhTx+%(>Rs zzG62nPgVTc$_<|VGE7VL6?}S=u|wHh3ni)oBrLEu7!ze9^?(Q%-s5Ty1f~<-ZDOo8 z;M%4HUF+iqfS{#8^nt?76l;hzjc$t93?Q={sW%W|Sai%#s>L{@^_VHYA>Pv&Q!3P7 zc;lEjg<-ChGvGVn<(07LfSkda6ee12DnuhNNk_#LzCb}fg0~)_(r8bZj z$=PQtWAS}D;Q33|txR=RN`5VKgua4kyizs4{~+9p7f%$wfvjSJp^-hcI!Xh3>+;t9 z+oLk%Na|g=F&Hy8{+0C~5Z>UsLT75NRnzR4VM)`NC5FdLLxqagE4%nR{agh<63^7P zTX(6)@761O_B>}iVO)hLQFVA|jo$NHz`oo=KLY!r*TT}gKd{41y1BTg-kk1oW)x&5 zUg?-_PBXhLu1tp$F}0MaZy9HCeT3_$B@Y(&^caB6e%bPjeLD z6p-)wuWn)%D^4ugf$qv;OwxY5iD{7YBBoRD)`h_zEW~QgOYYRC<@hNGyXrL-;H_hi z8z`^}$1U@Gm_rbtC zQyr~h`q>ZUVedtGm3ps(8~^H!4P#lgk$sgqFr|BRxPD`PtT265bg|0EsXj)_X|T#+ zRR@w$eK7l!Ea?*NPm>aUL4Kesn)?fx z#3$@w^7r%sZgu0uP%2g;$JiwnB~iH=42Ee8CD0gqI4%HIJ_9dbH84jDLy?3C-hX}A zGjt~lZAac>9rgtBNZhQti?67|n}aB}-*ggp06rR@sRq~ZUk71=#~uA}g@1DmUxHb{ zLENDEP5eN%bbviWOC^&QSnZkOaHg7ui_xVM-{1R`AV%8yJdk)?O_iBVG;7AuLBP^MeJsnHwY8 zw8sx1tp~jun;QNt4R$m>riV5#Ko2ddp4@hf^6e+t9cyW@JYD#bN@)^p zqVD{i!ry$IZsNO~mz7n6j4DJQ-&X5C@!SM*4lDi9v9BWvkK`4+8 z@~;SSG$r(U>ze%^hSx#@5lP(M?Bjzs?wKx&7}0V1yqSdqQj#pG78}|p#V*>C0hT1I z7@D(LTQ+roHBL0>F>2Y+Q?}ym6-7sF7wC zHh2sMVK^P-&B6v+55zE#K4p?%)Sx^~eu0tTrj~59n33cU&{`Ip+wP`pE1ukEfj=wqya#=$eG0) z9F&Hy{DafOF5ckv)BCDcT>~73Ff{vRC8CD6DdFWvS+M2y++WJb1vbdYX&^Rc#EN}H zE<_DkV83$n#6 zPtpMKbvQU4Yd>>>BArRh;_CILS7bMZUSOUD7aoBO!$=kXOS$fMnOgoX;YO^mPdq-m zkv-NZj-xL5@598fiO=&ft-{E_?krM>lb^r{^gLPZN7+qYV;>3yd-yZzWk@!R!wzw$ z5x8A(DJVO5*++%8t=Wi~F=p)4Tb?CWvIi>Vd_KfJ2D8EUorkf}t1>+-`zclY=9$gv zEE^FvzAJqo&r#uTaL7cV)467Y;UFe=%ftr(%2Jp}VB(#t)kyO_ zi5kR+gx6?1E8XtAy&#_C$_kZXIL@vSIqwAS?3T8NqSw(rMvjJ=CC0elxJT~I+XKgj zM#Nf3%DHf%9OOQmbyW@o08abR;sshvW>}Wk{z@!gG{U6_vHZJG`~y%Lqwiz2J@H=3yf& zMml6&O!QnD5KUd&qr6>ltm(?kle#v(C7R=x>|Ki8yxNl|b_;1awFW_(i|a>hj!A2J zPJ%YmJ+M*uj(?%>0JEH)6T44&4BiXSE6G~V@RSALo2P$3@W8{Rzw4(zKm6(Vja@^VwcZ-i%$)|$pHf0q; zBOqqs^`rVV=ypDlo(*qZS=D-|zV-McI9kIvgXACL7Tsw=ts*`ZyB#TKekd+qEvJ_u zK|qg~CeXg<2Hf6ovWH=o06ai;s|ybP}JwSgOMwXOp)s#Q$&w#*Y3KagAJEYuzScR@4zq+lorN zgFSFY4o6wV7EBG*M21oLpZM1_b0(YPUnRq^c~Y_wYr1atCrr2ox`3PuJkU^ye-<5$ zPztDr{2C1rdWx$#qj4S(rA(Pmo5xNmvyYOGI}d60OH*?5OcOAa-pSM@-y$v(JuEJ- zBRDBDDMPGhB*Vm*7QCDix+P5E4Zfb!JbA(h%tSW`f2WV+3A{{`vSt8KPq|2r5xd16!S!ud?A-V-4RMO5$Jg5zH zQtnt#6=R54oXGg6n-Jrs9Mi|l$|!5>YYCxOC$>vkjZwziSpONr0!|&*uGHW^Qg8l@ zUr2|H@5L#&)12nlg~LP?nAh%UU5j}w2EaSF&|8ToO*xoTd+Y#dU3$a4qtB%)Q-g1& z$MNf|&!@Q<%k_`#{%7!M{oc6B`fSUvcTm{7ZkE͓ne%)7f5)Gh-6MX90ZPqG$;f~k-Ii~4!^?|7 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

?{bdF6LZ`67uKx^W+~ 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

-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

8p}5yH$Q(oEs@?wM%wG-rdkJ$I>3q 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

DevOps::Builds#index

+

Find me in app/views/dev_ops/builds/index.html.erb

diff --git a/app/views/dev_ops/builds/show.json.jbuilder b/app/views/dev_ops/builds/show.json.jbuilder new file mode 100644 index 000000000..f25a17b7b --- /dev/null +++ b/app/views/dev_ops/builds/show.json.jbuilder @@ -0,0 +1,2 @@ +

DevOps::Builds#show

+

Find me in app/views/dev_ops/builds/show.html.erb

diff --git a/config/routes.rb b/config/routes.rb index f3a74e4e5..47bf63261 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -17,11 +17,12 @@ Rails.application.routes.draw do scope '/api' do namespace :dev_ops do resources :cloud_accounts, only: [:create] - resources :languages, only: [:index, :create, :show] do + resources :languages, only: [:index, :show] do collection do get :common end end + resources :builds end resources :sync_forge, only: [:create] do diff --git a/db/migrate/20200714112206_add_drone_token_to_dev_ops_cloud_accounts.rb b/db/migrate/20200714112206_add_drone_token_to_dev_ops_cloud_accounts.rb new file mode 100644 index 000000000..f777fde2e --- /dev/null +++ b/db/migrate/20200714112206_add_drone_token_to_dev_ops_cloud_accounts.rb @@ -0,0 +1,5 @@ +class AddDroneTokenToDevOpsCloudAccounts < ActiveRecord::Migration[5.2] + def change + add_column :dev_ops_cloud_accounts, :drone_token, :string + end +end From f358361b89221c67a7f48d82035cfd48af55bb39 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 15 Jul 2020 09:59:12 +0800 Subject: [PATCH 026/384] FIX bug --- app/controllers/projects_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 20752bb1e..f54e10705 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -100,7 +100,7 @@ class ProjectsController < ApplicationController end def simple - project = Project.includes(:owner, :repository).select(:id, :name, :identifier, :user_id, :project_type).find params[:id] + project = Project.includes(:owner, :repository).select(:id, :name, :identifier, :user_id, :project_type, :open_devops).find params[:id] json_response(project) end From 123e8d765903f4f57d5ebcf44157fe82e9a83b44 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 15 Jul 2020 10:22:41 +0800 Subject: [PATCH 027/384] FIX ucloud account bug --- app/controllers/dev_ops/cloud_accounts_controller.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index 83e374486..5acc6934f 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -13,7 +13,16 @@ class DevOps::CloudAccountsController < ApplicationController create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret])) logger.info "######### create_params: #{create_params}" - return if @project.dev_ops_cloud_account + + if cloud_account = @project.dev_ops_cloud_account + cloud_account + else + cloud_account = DevOps::CloudAccount.new(create_params) + cloud_account.user = current_user + cloud_account.project_id = @project.id + cloud_account.save! + end + # 2. 生成oauth2应用程序的client_id和client_secrete gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline", redirect_uris: ["#{cloud_account.drone_url}/login"]}) From f71e65f60008db2d7b9e6d0e47836ce39aa89603 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Wed, 15 Jul 2020 16:06:06 +0800 Subject: [PATCH 028/384] change bugs --- app/controllers/sync_forge_controller.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/sync_forge_controller.rb b/app/controllers/sync_forge_controller.rb index db3639891..6f178565b 100644 --- a/app/controllers/sync_forge_controller.rb +++ b/app/controllers/sync_forge_controller.rb @@ -9,12 +9,12 @@ class SyncForgeController < ApplicationController #以前已同步的项目,那么肯定存在仓库 user_projects = Project.where(user_id: project_user.id) - if user_projects.where(id: sync_params[:id]), identifier: sync_params[:identifier]).present? + if user_projects.where(id: sync_params[:id], identifier: sync_params[:identifier]).present? has_project = true - project = user_projects.where(id: sync_params[:id]), identifier: sync_params[:identifier])&.first + project = user_projects.where(id: sync_params[:id], identifier: sync_params[:identifier])&.first elsif user_projects.where(id: sync_params[:id]).present? has_project = true - project = user_projects.where(id: sync_params[:id]))&.first + project = user_projects.where(id: sync_params[:id])&.first elsif user_projects.where(identifier: sync_params[:identifier]).present? has_project = true project = user_projects.where(identifier: sync_params[:identifier])&.first From c181abce81481c950632afb000311022e61d32d4 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 15 Jul 2020 16:53:38 +0800 Subject: [PATCH 029/384] =?UTF-8?q?FIX=20=E5=AE=8C=E5=96=84devops=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/dev_ops/builds_controller.rb | 30 +++- app/libs/dev_ops/drone/api.rb | 41 +++-- app/libs/dev_ops/drone/ci.rb | 2 +- app/libs/dev_ops/drone/request.rb | 147 ++++++------------ app/models/dev_ops/cloud_account.rb | 1 + app/models/repository.rb | 1 + config/routes.rb | 10 +- ...repository_ref_to_dev_ops_cloud_account.rb | 7 + 8 files changed, 127 insertions(+), 112 deletions(-) create mode 100644 db/migrate/20200715075831_add_repository_ref_to_dev_ops_cloud_account.rb diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb index 24d8b99d7..0cf160a10 100644 --- a/app/controllers/dev_ops/builds_controller.rb +++ b/app/controllers/dev_ops/builds_controller.rb @@ -3,9 +3,37 @@ class DevOps::BuildsController < ApplicationController before_action :find_project def index + cloud_account = @repo.dev_ops_cloud_account + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier).builds + + render json: result end - def show + def detail + cloud_account = @repo.dev_ops_cloud_account + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: params[:number]).build + + render json: result + end + + def restart + cloud_account = @repo.dev_ops_cloud_account + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: params[:number]).restart + + render json: result + end + + def delete + cloud_account = @repo.dev_ops_cloud_account + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: params[:number]).stop + render json: result + end + + def logs + cloud_account = @repo.dev_ops_cloud_account + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: params[:build], stage: params[:stage], step: sync_params[:step]).logs + + render json: result end private diff --git a/app/libs/dev_ops/drone/api.rb b/app/libs/dev_ops/drone/api.rb index 08dafcb42..860e54557 100644 --- a/app/libs/dev_ops/drone/api.rb +++ b/app/libs/dev_ops/drone/api.rb @@ -1,12 +1,12 @@ class DevOps::Drone::API < DevOps::Drone::Request - attr_reader :drone_token, :drone_url, :owner, :repo, :options + attr_reader :drone_token, :endpoint, :owner, :repo, :options # drone_token: # owner: repo's owner name or login # repo: repo's identifier - def initialize(drone_token, drone_url, owner, repo, options={}) + def initialize(drone_token, endpoint, owner, repo, options={}) @drone_token = drone_token - @drone_url = drone_url + @endpoint = endpoint @owner = owner @repo = repo @options = options @@ -15,40 +15,59 @@ class DevOps::Drone::API < DevOps::Drone::Request # Build List # GET api/repos/{owner}/{name}/builds # eq: - # DevOps::Drone::API + # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier) def builds - request(:get, drone_url, "api/repos/#{owner}/#{repo}/builds", drone_token: drone_token) + get(endpoint, "api/repos/#{owner}/#{repo}/builds", drone_token: drone_token) end # Build Info # GET api/repos/{owner}/{name}/builds/{number} + # eq: + # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier, number: number).build def build - request(:get, "api/repos/#{owner}/#{repo}/builds/#{number}", drone_token: drone_token) + get(endpoint, "api/repos/#{owner}/#{repo}/builds/#{options[:number]}", drone_token: drone_token) end # Update .trustie-pipeline.yml file - # PATCH api/repos/{owner}/{name} + # PATCH api/repos/{owner}/{name}\ + # eq: + # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier, config_path: config_path).config_yml def config_yml - request(:patch, "/api/repos/#{owner}/#{repo}", drone_token: drone_token, config_path: config_path) + patch(endpoint, "/api/repos/#{owner}/#{repo}", drone_token: drone_token, config_path: options[:config_path]) end # Activate user's project with Drone CI # POST api/repos/{owner}/{name} + # eq: + # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier).avtivate def activate - request(:post, "/api/repos/#{owner}/#{repo}", drone_token: drone_token) + post(endpoint, "/api/repos/#{owner}/#{repo}", drone_token: drone_token) end # Build Restart # POST api/repos/{owner}/{name}/builds/{number} # Restart the specified build. Please note this api requires read and write access to the repository and the request parameter {build} is not the build id but the build number. + # eq: + # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: number).restart def restart - request(:post, "/api/repos/#{owner}/#{repo}/builds/#{number}", drone_token: drone_token) + post(endpoint, "/api/repos/#{owner}/#{repo}/builds/#{options[:number]}", drone_token: drone_token) end # Build Stop # DELETE api/repos/{owner}/{name}/builds/{number} # Stop the specified build. Please note this api requires administrative privileges and the request parameter {build} is not the build id but the build number. + # eq: + # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: number).stop def stop - request(:delete, "/api/repos/#{owner}/#{repo}/builds/#{number}", drone_token: drone_token) + delete(endpoint, "/api/repos/#{owner}/#{repo}/builds/#{options[:number]}", drone_token: drone_token) + end + + # Build Logs + # GET /api/repos/{owner}/{repo}/builds/{build}/logs/{stage}/{step} + # Please note this api requires read access to the repository. + # eq: + # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: build, stage: stage, step: step).logs + def logs + get(endpoint, "/api/repos/#{owner}/#{repo}/builds/#{options[:build]}/logs/#{options[:stage]}/#{options[:step]}", drone_token: drone_token) end end diff --git a/app/libs/dev_ops/drone/ci.rb b/app/libs/dev_ops/drone/ci.rb index 13eed9ba5..cfa67cdc2 100644 --- a/app/libs/dev_ops/drone/ci.rb +++ b/app/libs/dev_ops/drone/ci.rb @@ -5,7 +5,7 @@ class DevOps::Drone::Ci # username: drone server's account # password: drone server's password # eq: - # DevOps::Drone::Ci.new(@cloud_account.drone_ip, @cloud_account.account, @cloud_account.visible_secret).get_token + # DevOps::Drone::Ci.new(@cloud_account.drone_ip, @cloud_account.account, @cloud_account.visible_secret, current_user.login).get_token def initialize(host, username, password, gitea_username) @host = host @username = username diff --git a/app/libs/dev_ops/drone/request.rb b/app/libs/dev_ops/drone/request.rb index 7e059dc41..615e53b6e 100644 --- a/app/libs/dev_ops/drone/request.rb +++ b/app/libs/dev_ops/drone/request.rb @@ -1,10 +1,4 @@ - # @private class DevOps::Drone::Request - # format :json - # headers 'Accept' => 'application/json' - # parser Proc.new { |body, _| parse(body) } - - # Converts the response body to an ObjectifiedHash. def self.parse(body) body = decode(body) @@ -29,113 +23,70 @@ end end - def get(path, options={}) - set_httparty_config(options) - set_private_token_header(options) - validate self.class.get(path, options) + def get(endpoint, path, options={}) + set_request_defaults(endpoint) + request(:get, endpoint, path, options) end - def post(path, options={}) - set_httparty_config(options) - set_private_token_header(options, path) - validate self.class.post(path, options) + def post(endpoint, path, options={}) + set_request_defaults(endpoint) + request(:post, endpoint, path, options) end - def put(path, options={}) - set_httparty_config(options) - set_private_token_header(options) - validate self.class.put(path, options) + def put(endpoint, path, options={}) + set_request_defaults(endpoint) + request(:put, endpoint, path, options) end - def delete(path, options={}) - set_httparty_config(options) - set_private_token_header(options) - validate self.class.delete(path, options) - end - - # Checks the response code for common errors. - # Returns parsed response for successful requests. - def validate(response) - # case response.code - # when 400; raise Error::BadRequest.new error_message(response) - # when 401; raise Error::Unauthorized.new error_message(response) - # when 403; raise Error::Forbidden.new error_message(response) - # when 404; raise Error::NotFound.new error_message(response) - # when 405; raise Error::MethodNotAllowed.new error_message(response) - # when 406; raise Error::DataNotAccepted.new error_message(response) - # when 409; raise Error::Conflict.new error_message(response) - # when 500; raise Error::InternalServerError.new error_message(response) - # when 502; raise Error::BadGateway.new error_message(response) - # when 503; raise Error::ServiceUnavailable.new error_message(response) - # end - - response.parsed_response - end - - # Sets a base_uri and default_params for requests. - # @raise [Error::MissingCredentials] if endpoint not set. - def set_request_defaults(endpoint, private_token, sudo=nil) - raise Error::MissingCredentials.new("Please set an endpoint to API") unless endpoint - @private_token = private_token - - self.class.base_uri endpoint - self.class.default_params :sudo => sudo - self.class.default_params.delete(:sudo) if sudo.nil? - end - - def request(method, domain, url, **params) - Rails.logger.info("[drone] request: #{method} #{url} #{params.except(:secret).inspect}") - - client = Faraday.new(url: domain) - response = client.public_send(method, url, params) - result = JSON.parse(response.body) - - Rails.logger.info("[drone] response:#{response.status} #{result.inspect}") - - if response.status != 200 - raise DevOps::Drone::Error.parse(result) - end - - if result['errcode'].present? && result['errcode'].to_i.nonzero? - raise DevOps::Drone::Error.parse(result) - end - - result + def delete(endpoint, path, options={}) + set_request_defaults(endpoint) + request(:delete, endpoint, path, options) end private - def conn(auth={}) - token = auth[:token] - puts "[gitea] token: #{token}" + def request(method, endpoint, path, **params) + Rails.logger.info("[drone] request: #{method} #{path} #{params.except(:secret).inspect}") - @client ||= begin - Faraday.new(url: domain) do |req| - req.request :url_encoded - req.headers['Content-Type'] = 'application/json' - req.response :logger # 显示日志 - req.adapter Faraday.default_adapter - req.authorization :Bearer, token - req.headers['Authorization'] - end + client = Faraday.new(path: domain) + response = client.public_send(method, path, params) + result = JSON.parse(response.body) + + Rails.logger.info("[drone] response:#{response.status} #{result.inspect}") + + if response.status != 200 + raise DevOps::Drone::Error.parse(result) end - @client + + if result['errcode'].present? && result['errcode'].to_i.nonzero? + raise DevOps::Drone::Error.parse(result) + end + + result end - # Sets a PRIVATE-TOKEN header for requests. - # @raise [Error::MissingCredentials] if private_token not set. - def set_private_token_header(options, path=nil) - unless path == '/session' - raise Error::MissingCredentials.new("Please set a private_token for user") unless @private_token - options[:headers] = {'PRIVATE-TOKEN' => @private_token} - end + # Sets a base_uri and default_params for requests. + # @raise [Error::MissingCredentials] if endpoint not set. + def set_request_defaults(endpoint, private_token, sudo=nil) + raise "Please set an endpoint to API" unless endpoint end - # Set HTTParty configuration - # @see https://github.com/jnunemaker/httparty - def set_httparty_config(options) - if self.httparty - options.merge!(self.httparty) - end + # Checks the response code for common errors. + # Returns parsed response for successful requests. + def validate(response) + # case response.code + # when 400; raise Error::BadRequest.new error_message(response) + # when 401; raise Error::Unauthorized.new error_message(response) + # when 403; raise Error::Forbidden.new error_message(response) + # when 404; raise Error::NotFound.new error_message(response) + # when 405; raise Error::MethodNotAllowed.new error_message(response) + # when 406; raise Error::DataNotAccepted.new error_message(response) + # when 409; raise Error::Conflict.new error_message(response) + # when 500; raise Error::InternalServerError.new error_message(response) + # when 502; raise Error::BadGateway.new error_message(response) + # when 503; raise Error::ServiceUnavailable.new error_message(response) + # end + + response.parsed_response end def error_message(response) diff --git a/app/models/dev_ops/cloud_account.rb b/app/models/dev_ops/cloud_account.rb index 255396493..778335fb6 100644 --- a/app/models/dev_ops/cloud_account.rb +++ b/app/models/dev_ops/cloud_account.rb @@ -1,6 +1,7 @@ class DevOps::CloudAccount < ApplicationRecord belongs_to :project belongs_to :user + belongs_to :repository def drone_host [drone_ip, ":80"].join diff --git a/app/models/repository.rb b/app/models/repository.rb index 6d20afce5..ec6232927 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -3,6 +3,7 @@ class Repository < ApplicationRecord belongs_to :project, :touch => true belongs_to :user has_one :mirror, foreign_key: :repo_id + has_one :dev_ops_cloud_account, foreign_key: :repo_id has_many :version_releases, dependent: :destroy validates :identifier, presence: true diff --git a/config/routes.rb b/config/routes.rb index 075ed74a0..709ff9073 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -22,7 +22,15 @@ Rails.application.routes.draw do get :common end end - resources :builds + + resources :builds, only: :index do + collection do + get ':number', to: 'builds#detail', as: 'detail' + get ':number/logs/:stage/:step', to: 'builds#detail', as: 'logs' + post ':number', to: 'builds#restart', as: 'restart' + delete ':number', to: 'builds#delete', as: 'delete' + end + end end resources :sync_forge, only: [:create] do diff --git a/db/migrate/20200715075831_add_repository_ref_to_dev_ops_cloud_account.rb b/db/migrate/20200715075831_add_repository_ref_to_dev_ops_cloud_account.rb new file mode 100644 index 000000000..af42232e0 --- /dev/null +++ b/db/migrate/20200715075831_add_repository_ref_to_dev_ops_cloud_account.rb @@ -0,0 +1,7 @@ +class AddRepositoryRefToDevOpsCloudAccount < ActiveRecord::Migration[5.2] + def change + add_column :dev_ops_cloud_accounts, :repo_id, :integer + + add_index :dev_ops_cloud_accounts, :repo_id, name: 'dev_ops_cloud_accounts_repo_id_ix' + end +end From b9abd6a15239c140cb3a7021e209306c3b6e3d99 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 15 Jul 2020 17:13:16 +0800 Subject: [PATCH 030/384] =?UTF-8?q?FIX=20=E6=8F=92=E9=94=80=E6=8E=89dev=5F?= =?UTF-8?q?chain=E5=88=86=E6=94=AF=E7=9A=84=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/sync_forge_controller.rb | 37 ++++++++--- app/jobs/sync_projects_job.rb | 78 +++++++++++++++++------- app/models/sync_log.rb | 2 +- 3 files changed, 85 insertions(+), 32 deletions(-) diff --git a/app/controllers/sync_forge_controller.rb b/app/controllers/sync_forge_controller.rb index eb42f6075..8b0e6ab0b 100644 --- a/app/controllers/sync_forge_controller.rb +++ b/app/controllers/sync_forge_controller.rb @@ -5,14 +5,31 @@ class SyncForgeController < ApplicationController ActiveRecord::Base.transaction do params.permit! sync_params = params[:sync_params] + project_user = User.where(login: sync_params[:owner_login])&.first #以前已同步的项目,那么肯定存在仓库 - if Project.exists?(identifier: sync_params[:identifier]) + + user_projects = Project.where(user_id: project_user.id) + if user_projects.where(id: sync_params[:id], identifier: sync_params[:identifier]).present? + has_project = true + project = user_projects.where(id: sync_params[:id], identifier: sync_params[:identifier])&.first + elsif user_projects.where(id: sync_params[:id]).present? + has_project = true + project = user_projects.where(id: sync_params[:id])&.first + elsif user_projects.where(identifier: sync_params[:identifier]).present? + has_project = true + project = user_projects.where(identifier: sync_params[:identifier])&.first + else + has_project = false + end + + if has_project SyncLog.sync_log("=================begin_to_update_project========") - project = Project.find_by(identifier: sync_params[:identifier]) + # project = user_projects.where(id: sync_params[:id]), identifier: sync_params[:identifier])&.first || + check_sync_project(project, sync_params) else #新建项目 SyncLog.sync_log("=================begin_to_create_new_project========") - project_user = User.where(login: sync_params[:owner_login]).first + project_params = { repository_name: sync_params[:identifier], user_id: project_user.id, @@ -30,6 +47,8 @@ class SyncForgeController < ApplicationController SyncRepositoryJob.perform_later(sync_params[:owner_login], sync_params[:identifier], sync_params[:repository], get_sudomain) if sync_params[:repository].present? check_new_project(project, sync_params) + else + SyncLog.sync_project_log("=============new_project_create_failed, trustie_project_id==:#{params[:sync_params][:id]}") end end end @@ -57,6 +76,7 @@ class SyncForgeController < ApplicationController new_user = User.new(u[:user_params].merge(mail: u_mail)) username = new_user.login + password = "12345678" if new_user.save! SyncLog.sync_log("=================sync_to_user_success==#{new_user.login}") @@ -175,11 +195,10 @@ class SyncForgeController < ApplicationController begin forge_issue_ids = project&.issues&.select(:id)&.pluck(:id) sync_projects_params = {} - unless forge_issue_ids.size.to_i < old_issues_params[:count].to_i - forge_journal_ids = Journal.select([:id, :journalized_id, :journalized_type]).where(journalized_id: forge_issue_ids).pluck(:id) + if forge_issue_ids.size.to_i <= old_issues_params[:count].to_i diff_issue_ids = old_issues_params[:ids] - forge_issue_ids - if diff_issue_ids.size == 0 #issue数量一样,判断评论是否有增减 + forge_journal_ids = Journal.select([:id, :journalized_id, :journalized_type]).where(journalized_id: forge_issue_ids).pluck(:id) diff_journal_ids = old_issues_params[:journals][:ids] - forge_journal_ids unless diff_journal_ids.size == 0 sync_projects_params = { @@ -209,7 +228,7 @@ class SyncForgeController < ApplicationController def change_project_watchers(project, watchers,gitea_main) SyncLog.sync_log("***5. begin_to_sync_watchers---------------") forge_watchers_ids = project&.watchers&.select(:id)&.pluck(:id) - unless forge_watchers_ids.size.to_i < watchers[:count].to_i + if forge_watchers_ids.size.to_i <= watchers[:count].to_i diff_target_ids = watchers[:ids] - forge_watchers_ids if diff_target_ids.size > 0 sync_projects_params = { @@ -228,7 +247,7 @@ class SyncForgeController < ApplicationController def change_project_versions(project, versions,gitea_main) SyncLog.sync_log("***4. begin_to_sync_versions---------------") forge_version_ids = project&.versions&.select(:id)&.pluck(:id) - unless forge_version_ids.size < versions[:count].to_i + if forge_version_ids.size <= versions[:count].to_i diff_version_ids = versions[:ids] - forge_version_ids if diff_version_ids.size > 0 sync_projects_params = { @@ -247,7 +266,7 @@ class SyncForgeController < ApplicationController def change_project_members(project, members,gitea_main) SyncLog.sync_log("***3. begin_to_sync_members---------------") forge_member_ids = project&.members&.select(:id)&.pluck(:id) - unless forge_member_ids.size < members[:count] + if forge_member_ids.size <= members[:count] diff_member_ids = members[:ids] - forge_member_ids if diff_member_ids.size > 0 sync_projects_params = { diff --git a/app/jobs/sync_projects_job.rb b/app/jobs/sync_projects_job.rb index cfa52d22d..fb6cbed03 100644 --- a/app/jobs/sync_projects_job.rb +++ b/app/jobs/sync_projects_job.rb @@ -57,23 +57,42 @@ class SyncProjectsJob < ApplicationJob u_id = User.select(:id, :login).where(login: re[:user_login]).pluck(:id).first re[:target_params].delete(:id) if target_type == "Issue" - new_target = target_type.constantize.new(re[:target_params].merge(author_id: u_id)) + is_exists = Issue.exists?(author_id: u_id, project_id: re[:target_params][:project_id], subject: re[:target_params][:subject]) + unless is_exists + assing_u_id = User.select(:id, :login).where(login: re[:assign_login]).pluck(:id).first + new_target = target_type.constantize.new(re[:target_params].merge(author_id: u_id)) + new_target.assigned_to_id = assing_u_id + end else - new_target = target_type.constantize.new(re[:target_params].merge(user_id: u_id)) + case target_type + when "Journal" + is_exists = Journal.exists?(user_id: u_id, journalized_id: re[:target_params][:journalized_id], created_on: re[:target_params][:created_on].to_s.to_time) + when "Member" + is_exists = Member.exists?(user_id: u_id, project_id: re[:target_params][:project_id], created_on: re[:target_params][:created_on].to_s.to_time) + when "Version" + is_exists = Version.exists?(user_id: u_id, project_id: re[:target_params][:project_id], created_on: re[:target_params][:created_on].to_s.to_time) + when "Watcher" + is_exists = Watcher.exists?(user_id: u_id, watchable_id: re[:target_params][:watchable_id], created_at: re[:target_params][:created_at].to_s.to_time) + when "PraiseTread" + is_exists = PraiseTread.exists?(user_id: u_id, praise_tread_object_id: re[:target_params][:praise_tread_object_id], created_at: re[:target_params][:created_at].to_s.to_time) + else + is_exists = false + end + unless is_exists + new_target = target_type.constantize.new(re[:target_params].merge(user_id: u_id)) + end end - - if target_type == "Issue" - assing_u_id = User.select(:id, :login).where(login: re[:assign_login]).pluck(:id).first - new_target.assigned_to_id = assing_u_id - end - if new_target.save! + + if !is_exists && new_target.save! SyncLog.sync_project_log("***【#{target_type}】. create_success---------------") if re[:journals].present? create_journals(re[:journals], "Journal", new_target.id) end if re[:journal_details].present? re[:journal_details].each do |j| - JournalDetail.create!(j.merge(journal_id: new_target.id)) if j.present? + unless JournalDetail.exists?(journal_id: new_target.id) + JournalDetail.create!(j.merge(journal_id: new_target.id)) if j.present? + end end end if re[:member_roles].present? @@ -82,7 +101,7 @@ class SyncProjectsJob < ApplicationJob end end else - SyncLog.sync_project_log("***【#{target_type}】. create_failed---------------") + SyncLog.sync_project_log("***【#{target_type}】. create_failed---or has_exists---------------") end end end @@ -100,14 +119,22 @@ class SyncProjectsJob < ApplicationJob SyncLog.sync_log("***user_login:#{re[:user_login]}----target_type:#{target_type}-----#{index+1}") if re[:target_params].present? u_id = User.select(:id, :login).where(login: re[:user_login]).pluck(:id).first - re[:target_params].delete(:id) - new_target = Journal.new(re[:target_params].merge(user_id: u_id)) - new_target.journalized_id = issue_id - if new_target.save! - if re[:journal_details].present? - re[:journal_details].each do |j| - JournalDetail.create!(j.merge(journal_id: new_target.id)) + is_exists = Journal.exists?(user_id: u_id, journalized_id: re[:target_params][:journalized_id], created_on: re[:target_params][:created_on].to_s.to_time) + + if is_exists + SyncLog.sync_project_log("***00000. Journal:#{re[:target_params][:id]}-is exists--------------") + else + re[:target_params].delete(:id) + new_target = Journal.new(re[:target_params].merge(user_id: u_id)) + new_target.journalized_id = issue_id + if new_target.save! + if re[:journal_details].present? + re[:journal_details].each do |j| + JournalDetail.create!(j.merge(journal_id: new_target.id)) + end end + else + SyncLog.sync_project_log("***111222. journal_create failed---------------") end end end @@ -118,15 +145,22 @@ class SyncProjectsJob < ApplicationJob def create_versions(project, target_jsons) SyncLog.sync_log("***【Versions】. begin_to_create_verison---------------") return SyncLog.sync_log("*** no target_jsons") if target_jsons.blank? - all_issues = project.issues.select(:id, :project_id, :fixed_version_id) target_jsons.each do |re| old_id = re[:target_params][:id] if re[:target_params].present? u_id = User.select(:id, :login).where(login: re[:user_login]).pluck(:id).first - re[:target_params].delete(:id) - new_target = Version.new(re[:target_params].merge(user_id: u_id)) - if new_target.save! - all_issues&.where(fixed_version_id: old_id)&.update_all(fixed_version_id: new_target.id) + is_exists = Version.exists?(user_id: u_id, project_id: re[:target_params][:project_id], created_on: re[:target_params][:created_on].to_s.to_time) + if is_exists + SyncLog.sync_project_log("***00000. Version:#{re[:target_params][:id]}-is exists--------------") + else + re[:target_params].delete(:id) + new_target = Version.new(re[:target_params].merge(user_id: u_id)) + if new_target.save! + all_issues = project.issues.select(:id, :project_id, :fixed_version_id) + all_issues&.where(fixed_version_id: old_id)&.update_all(fixed_version_id: new_target.id) + else + SyncLog.sync_project_log("***111222. Version_create failed---------------") + end end end end diff --git a/app/models/sync_log.rb b/app/models/sync_log.rb index f24a0a927..73fd8c789 100644 --- a/app/models/sync_log.rb +++ b/app/models/sync_log.rb @@ -5,7 +5,7 @@ class SyncLog end def self.sync_project_log(message=nil) - @my_log ||= Logger.new("#{Rails.root}/log/sync_error_project.log") + @my_log ||= Logger.new("#{Rails.root}/log/sync_project_log.log") @my_log.debug(message) unless message.nil? end end \ No newline at end of file From bc82451fcca080834381ff5160305f363a5577de Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Wed, 15 Jul 2020 18:02:43 +0800 Subject: [PATCH 031/384] Change --- app/controllers/sync_forge_controller.rb | 41 ++++++++++++------------ app/jobs/sync_projects_job.rb | 1 - 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/app/controllers/sync_forge_controller.rb b/app/controllers/sync_forge_controller.rb index f3557058c..147961a2f 100644 --- a/app/controllers/sync_forge_controller.rb +++ b/app/controllers/sync_forge_controller.rb @@ -1,11 +1,11 @@ class SyncForgeController < ApplicationController # before_action :check_token - def create + def create ActiveRecord::Base.transaction do params.permit! sync_params = params[:sync_params] - project_user = User.where(login: sync_params[:owner_login])&.first + project_user = User.where(login: sync_params[:owner_login])&.first #以前已同步的项目,那么肯定存在仓库 user_projects = Project.where(user_id: project_user.id) @@ -24,12 +24,12 @@ class SyncForgeController < ApplicationController if has_project SyncLog.sync_log("=================begin_to_update_project========") - # project = user_projects.where(id: sync_params[:id]), identifier: sync_params[:identifier])&.first || + # project = user_projects.where(id: sync_params[:id]), identifier: sync_params[:identifier])&.first || check_sync_project(project, sync_params) else #新建项目 SyncLog.sync_log("=================begin_to_create_new_project========") - + project_params = { repository_name: sync_params[:identifier], user_id: project_user.id, @@ -44,16 +44,16 @@ class SyncForgeController < ApplicationController new_project_score = ProjectScore.create(score_params) SyncLog.sync_log("=================new_project_score:#{new_project_score.try(:id)}========") end - + SyncRepositoryJob.perform_later(sync_params[:owner_login], sync_params[:identifier], sync_params[:repository], get_sudomain) if sync_params[:repository].present? check_new_project(project, sync_params) else - SyncLog.sync_log("=============new_project_create_failed, trustie_project_id==:#{params[:sync_params][:id]}") + SyncLog.sync_project_log("=============new_project_create_failed, trustie_project_id==:#{params[:sync_params][:id]}") end end end rescue Exception => e - SyncLog.sync_log("=============sync_has_errors:==#{e.message}, project_id==:#{params[:sync_params][:id]}") + SyncLog.sync_project_log("=============sync_has_errors:==#{e.message}, project_id==:#{params[:sync_params][:id]}") end def sync_users @@ -76,7 +76,6 @@ class SyncForgeController < ApplicationController new_user = User.new(u[:user_params].merge(mail: u_mail)) username = new_user.login - password = "12345678" if new_user.save! SyncLog.sync_log("=================sync_to_user_success==#{new_user.login}") @@ -96,7 +95,7 @@ class SyncForgeController < ApplicationController # SyncLog.sync_log("=================sync_to_user_failed,user_login==#{new_user.login}") # end # else - # SyncLog.sync_log("=============sync_to_user_failed,user_login====#{new_user.login}") + # SyncLog.sync_project_log("=============sync_to_user_failed,user_login====#{new_user.login}") # SyncLog.sync_log("=================sync_to_user_failed,user_login====#{new_user.login}") # end # end @@ -107,7 +106,7 @@ class SyncForgeController < ApplicationController SyncLog.sync_log("=================sync_user_failed====#{e}") end - private + private def check_sync_project(project,sync_params) begin @@ -117,8 +116,8 @@ class SyncForgeController < ApplicationController end SyncLog.sync_log("----begin_to_check_sync_project----project_id:#{project.id}---------------") - change_project_score(project, sync_params[:project_score], sync_params[:repository]) if sync_params[:repository].present? #更新project_score - change_project_issues(project, sync_params[:issues],project.id, gitea_main) + change_project_score(project, sync_params[:project_score], sync_params[:repository]) if sync_params[:repository].present? #更新project_score + change_project_issues(project, sync_params[:issues],project.id, gitea_main) change_project_members(project, sync_params[:members],gitea_main) change_project_versions(project, sync_params[:project_versions],gitea_main) change_project_watchers(project, sync_params[:project_watchers],gitea_main) @@ -126,7 +125,7 @@ class SyncForgeController < ApplicationController rescue => e SyncLog.sync_log("=========check_sync_project_errors:#{e}===================") end - + end def check_new_project(project,sync_params) @@ -159,7 +158,7 @@ class SyncForgeController < ApplicationController parent_id: project.id } SyncProjectsJob.perform_later(sync_projects_params,gitea_main) - + SyncLog.sync_log("***6. end_to_sync_parises---------------") end end @@ -181,7 +180,7 @@ class SyncForgeController < ApplicationController end end pre_project_score.save! if change_num > 0 #如果 project_score有变化则更新 - else + else ProjectScore.create!(project_scores.merge(project_id: project.id)) end SyncLog.sync_log("***1. end_to_sync_project_score---------------") @@ -217,7 +216,7 @@ class SyncForgeController < ApplicationController } end end - + SyncProjectsJob.perform_later(sync_projects_params, gitea_main) if sync_projects_params.present? SyncLog.sync_log("***2. end_to_syncissues---------------") rescue Exception => e @@ -238,7 +237,7 @@ class SyncForgeController < ApplicationController parent_id: project.id } SyncProjectsJob.perform_later(sync_projects_params,gitea_main) - + end end SyncLog.sync_log("***5. begin_to_sync_watchers---------------") @@ -258,7 +257,7 @@ class SyncForgeController < ApplicationController } SyncProjectsJob.perform_later(sync_projects_params,gitea_main) end - + SyncLog.sync_log("***4. end_to_sync_versions---------------") end end @@ -277,12 +276,12 @@ class SyncForgeController < ApplicationController } SyncProjectsJob.perform_later(sync_projects_params,gitea_main) end - + SyncLog.sync_log("***3. end_to_sync_members---------------") end end - # def check_token + # def check_token # sync_params = params[:sync_params] # unless sync_params[:token] && sync_params[:token] == get_token # render json: {message: "token_errors"} @@ -304,4 +303,4 @@ class SyncForgeController < ApplicationController return gitea_main end -end +end \ No newline at end of file diff --git a/app/jobs/sync_projects_job.rb b/app/jobs/sync_projects_job.rb index e0655fe5a..104cc6e59 100644 --- a/app/jobs/sync_projects_job.rb +++ b/app/jobs/sync_projects_job.rb @@ -112,7 +112,6 @@ class SyncProjectsJob < ApplicationJob rescue => e SyncLog.sync_log("=========***【#{target_type}】creat_had_erros:#{e}===================") end - end def create_journals(target_jsons, target_type,issue_id) From 006ff7fd620050c738b6ee6eeb41f03ffab92a6a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 15 Jul 2020 20:34:01 +0800 Subject: [PATCH 032/384] ADD devops builds's api --- app/controllers/dev_ops/builds_controller.rb | 8 ++-- .../dev_ops/cloud_accounts_controller.rb | 9 ++-- app/libs/dev_ops/drone/request.rb | 42 +++++++++---------- app/models/dev_ops/cloud_account.rb | 2 +- app/models/repository.rb | 2 +- config/routes.rb | 3 +- 6 files changed, 30 insertions(+), 36 deletions(-) diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb index 0cf160a10..2474b1136 100644 --- a/app/controllers/dev_ops/builds_controller.rb +++ b/app/controllers/dev_ops/builds_controller.rb @@ -1,6 +1,6 @@ -class DevOps::BuildsController < ApplicationController +class ::DevOps::BuildsController < ApplicationController before_action :require_login - before_action :find_project + before_action :find_repo def index cloud_account = @repo.dev_ops_cloud_account @@ -37,7 +37,7 @@ class DevOps::BuildsController < ApplicationController end private - def find_project - @repo = Repository.find params[:id] + def find_repo + @repo = ::Repository.find params[:id] end end diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index 5acc6934f..ca506fa49 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -14,12 +14,12 @@ class DevOps::CloudAccountsController < ApplicationController logger.info "######### create_params: #{create_params}" - if cloud_account = @project.dev_ops_cloud_account + if cloud_account = @repo.dev_ops_cloud_account cloud_account else cloud_account = DevOps::CloudAccount.new(create_params) cloud_account.user = current_user - cloud_account.project_id = @project.id + cloud_account.repo_id = @repo.id cloud_account.save! end @@ -64,11 +64,10 @@ class DevOps::CloudAccountsController < ApplicationController private def devops_params - params.permit(:account, :secret, :ip_num, :project_id) + params.permit(:account, :secret, :ip_num, :repo_id) end def find_project - @project = Project.find_by_id params[:project_id] - render_not_found("未找到project_id为:#{params[:project_id]}相关的项目") if @project.blank? + @repo = Repository.find params[:repo_id] end end diff --git a/app/libs/dev_ops/drone/request.rb b/app/libs/dev_ops/drone/request.rb index 615e53b6e..6ce738a72 100644 --- a/app/libs/dev_ops/drone/request.rb +++ b/app/libs/dev_ops/drone/request.rb @@ -24,22 +24,22 @@ end def get(endpoint, path, options={}) - set_request_defaults(endpoint) + validate_request_params!(endpoint) request(:get, endpoint, path, options) end def post(endpoint, path, options={}) - set_request_defaults(endpoint) + validate_request_params!(endpoint) request(:post, endpoint, path, options) end def put(endpoint, path, options={}) - set_request_defaults(endpoint) + validate_request_params!(endpoint) request(:put, endpoint, path, options) end def delete(endpoint, path, options={}) - set_request_defaults(endpoint) + validate_request_params!(endpoint) request(:delete, endpoint, path, options) end @@ -47,27 +47,10 @@ def request(method, endpoint, path, **params) Rails.logger.info("[drone] request: #{method} #{path} #{params.except(:secret).inspect}") - client = Faraday.new(path: domain) + client = Faraday.new(url: endpoint) response = client.public_send(method, path, params) - result = JSON.parse(response.body) - Rails.logger.info("[drone] response:#{response.status} #{result.inspect}") - - if response.status != 200 - raise DevOps::Drone::Error.parse(result) - end - - if result['errcode'].present? && result['errcode'].to_i.nonzero? - raise DevOps::Drone::Error.parse(result) - end - - result - end - - # Sets a base_uri and default_params for requests. - # @raise [Error::MissingCredentials] if endpoint not set. - def set_request_defaults(endpoint, private_token, sudo=nil) - raise "Please set an endpoint to API" unless endpoint + json_response(response) end # Checks the response code for common errors. @@ -89,8 +72,21 @@ response.parsed_response end + # Checks a base_uri and params for requests. + def validate_request_params!(endpoint) + raise "Please set an endpoint to API" unless endpoint + end + def error_message(response) "Server responded with code #{response.code}, message: #{response.parsed_response.message}. " \ "Request URI: #{response.request.base_uri}#{response.request.path}" end + + def json_response(response) + result = JSON.parse(response.body) + status = response.status + Rails.logger.info("[drone] response:#{status} #{result.inspect}") + + response.status != 200 ? result.merge!(status: response.status) : result + end end diff --git a/app/models/dev_ops/cloud_account.rb b/app/models/dev_ops/cloud_account.rb index 778335fb6..8b07a7493 100644 --- a/app/models/dev_ops/cloud_account.rb +++ b/app/models/dev_ops/cloud_account.rb @@ -1,7 +1,7 @@ class DevOps::CloudAccount < ApplicationRecord belongs_to :project belongs_to :user - belongs_to :repository + belongs_to :repository, foreign_key: :repo_id def drone_host [drone_ip, ":80"].join diff --git a/app/models/repository.rb b/app/models/repository.rb index ec6232927..373604c8a 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -3,7 +3,7 @@ class Repository < ApplicationRecord belongs_to :project, :touch => true belongs_to :user has_one :mirror, foreign_key: :repo_id - has_one :dev_ops_cloud_account, foreign_key: :repo_id + has_one :dev_ops_cloud_account, class_name: 'DevOps::CloudAccount', foreign_key: :repo_id has_many :version_releases, dependent: :destroy validates :identifier, presence: true diff --git a/config/routes.rb b/config/routes.rb index 709ff9073..5589b55b9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -22,13 +22,12 @@ Rails.application.routes.draw do get :common end end - resources :builds, only: :index do collection do get ':number', to: 'builds#detail', as: 'detail' - get ':number/logs/:stage/:step', to: 'builds#detail', as: 'logs' post ':number', to: 'builds#restart', as: 'restart' delete ':number', to: 'builds#delete', as: 'delete' + get ':number/logs/:stage/:step', to: 'builds#detail', as: 'logs' end end end From 8d5a373c6b02f81f63b9088a84124cc7ac2c720f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 15 Jul 2020 20:34:25 +0800 Subject: [PATCH 033/384] Update readme.md ducument --- README.md | 341 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 339 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 66bc49773..c30dbd75e 100644 --- a/README.md +++ b/README.md @@ -2340,7 +2340,7 @@ http://localhost:3000/api//api/repositories/3868/delete_file | jq "author": { "name": "18816895620", "email": "2456233122@qq.com", - "date": "2020-01-08T07:57:34Z" + "date": "2020-01-08T07:57:34Z"`` }, "committer": { "name": "18816895620", @@ -2364,9 +2364,23 @@ POST /api/dev_ops/cloud_accounts *示例* ``` -curl -X POST http://localhost:3000/api/dev_ops/cloud_accounts | jq +curl -X POST \ +-d "account=xx" \ +-d "secret=xxx" \ +-d "ip_num=xx.xx.xx.xx" \ +-d "repo_id=5988" \ +https://localhost:3000/api/dev_ops/cloud_accounts.json | jq ``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|account |是|string |云服务器ssh连接登录用户名 | +|secret |是|string |云服务器ssh连接登录秘密 | +|ip_num |否|string |云服务器公网IP | +|repo_id |否|string |repository id| + *返回参数说明:* |参数名|类型|说明| @@ -2459,6 +2473,12 @@ GET /api/dev_ops/languages/:id curl -X GET http://localhost:3000/api/dev_ops/languages/114.json | jq ``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |language's id | + *返回参数说明:* |参数名|类型|说明| @@ -2480,3 +2500,320 @@ curl -X GET http://localhost:3000/api/dev_ops/languages/114.json | jq ] ``` --- + +#### 获取构建列表 +``` +GET /api/dev_ops/builds +``` + +*示例* +``` +curl -X GET http://localhost:3000/api/dev_ops/builds | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|build's id| +|number |string|build's number| +|status |string|build's result| +|event |string|build's event| + +返回值 +``` +[ + { + "id": 100207, + "repo_id": 296163, + "number": 42, + "status": "success", + "event": "pull_request", + "action": "sync", + "link": "https://github.com/octoat/hello-world/compare/e3320539a4c0...9fc1ad6ebf12", + "message": "updated README", + "before": "e3320539a4c03ccfda992641646deb67d8bf98f3", + "after": "9fc1ad6ebf12462f3f9773003e26b4c6f54a772e", + "ref": "refs/heads/master", + "source_repo": "spaceghost/hello-world", + "source": "develop", + "target": "master", + "author_login": "octocat", + "author_name": "The Octocat", + "author_email": "octocat@github.com", + "author_avatar": "http://www.gravatar.com/avatar/7194e8d48fa1d2b689f99443b767316c", + "sender": "bradrydzewski", + "started": 1564085874, + "finished": 1564086343, + "created": 1564085874, + "updated": 1564085874, + "version": 3 + } +] +``` +--- + +#### 获取某条构建详情信息 +``` +GET /api/dev_ops/builds/:number +``` + +*示例* +``` +curl -X GET http://localhost:3000/api/dev_ops/builds/42 | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|number |是|int |build's number | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|build's id| +|status |string|build's status| +|event |string|build's event| + +返回值 +``` +{ + "id": 100207, + "repo_id": 296163, + "number": 42, + "status": "pending", + "event": "pull_request", + "action": "sync", + "link": "https://github.com/octoat/hello-world/compare/e3320539a4c0...9fc1ad6ebf12", + "message": "updated README", + "before": "e3320539a4c03ccfda992641646deb67d8bf98f3", + "after": "9fc1ad6ebf12462f3f9773003e26b4c6f54a772e", + "ref": "refs/heads/master", + "source_repo": "spaceghost/hello-world", + "source": "develop", + "target": "master", + "author_login": "octocat", + "author_name": "The Octocat", + "author_email": "octocat@github.com", + "author_avatar": "http://www.gravatar.com/avatar/7194e8d48fa1d2b689f99443b767316c", + "sender": "bradrydzewski", + "started": 0, + "finished": 0, + "created": 1564085874, + "updated": 1564085874, + "version": 1, + "stages": [ + { + "id": 199937, + "repo_id": 296163, + "build_id": 100207, + "number": 1, + "name": "default", + "kind": "pipeline", + "type": "docker", + "status": "pending", + "errignore": false, + "exit_code": 0, + "machine": "15e89c0f84f1", + "os": "linux", + "arch": "amd64", + "started": 0, + "stopped": 0, + "created": 1564085874, + "updated": 1564086343, + "version": 1, + "on_success": true, + "on_failure": false + } + ] +} +``` +--- + +#### 重启构建/重新构建 +``` +POST /api/dev_ops/builds/:number +``` + +*示例* +``` +curl -X POST http://localhost:3000/api/dev_ops/builds/42 | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|number |是|int |build's number | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|build's id| +|status |string|build's status| +|event |string|build's event| + +返回值 +``` +{ + "id": 100207, + "repo_id": 296163, + "number": 42, + "status": "pending", + "event": "pull_request", + "action": "sync", + "link": "https://github.com/octoat/hello-world/compare/e3320539a4c0...9fc1ad6ebf12", + "message": "updated README", + "before": "e3320539a4c03ccfda992641646deb67d8bf98f3", + "after": "9fc1ad6ebf12462f3f9773003e26b4c6f54a772e", + "ref": "refs/heads/master", + "source_repo": "spaceghost/hello-world", + "source": "develop", + "target": "master", + "author_login": "octocat", + "author_name": "The Octocat", + "author_email": "octocat@github.com", + "author_avatar": "http://www.gravatar.com/avatar/7194e8d48fa1d2b689f99443b767316c", + "sender": "bradrydzewski", + "started": 0, + "finished": 0, + "created": 1564085874, + "updated": 1564085874, + "version": 1, + "stages": [ + { + "id": 199937, + "repo_id": 296163, + "build_id": 100207, + "number": 1, + "name": "default", + "kind": "pipeline", + "type": "docker", + "status": "pending", + "errignore": false, + "exit_code": 0, + "machine": "15e89c0f84f1", + "os": "linux", + "arch": "amd64", + "started": 0, + "stopped": 0, + "created": 1564085874, + "updated": 1564086343, + "version": 1, + "on_success": true, + "on_failure": false + } + ] +} +``` +--- + +#### 关闭构建 +``` +DELETE /api/dev_ops/builds/:number +``` + +*示例* +``` +curl -X DELETE http://localhost:3000/api/dev_ops/builds/42 | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|number |是|int |build's number | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|build's id| +|status |string|build's status| +|event |string|build's event| + +返回值 +``` +``` +--- + +#### 获取某条构建的log信息 +``` +GET /api/dev_ops/builds/:number/logs/:stage/:step +``` + +*示例* +``` +curl -X GET http://localhost:3000/api/dev_ops/builds/42/logs/ | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|number |是|int |build's number | +|stage |是|int |build's stage id | +|step |是|int |build's step id | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|build's id| +|status |string|build's status| +|event |string|build's event| + +返回值 +``` +[ + { + "proc": "clone", + "pos": 0, + "out": "+ git init\n" + }, + { + "proc": "clone", + "pos": 1, + "out": "Initialized empty Git repository in /drone/src/github.com/octocat/hello-world/.git/\n" + }, + { + "proc": "clone", + "pos": 2, + "out": "+ git remote add origin https://github.com/octocat/hello-world.git\n" + }, + { + "proc": "clone", + "pos": 3, + "out": "+ git fetch --no-tags origin +refs/heads/master:\n" + }, + { + "proc": "clone", + "pos": 4, + "out": "From https://github.com/octocat/hello-world\n" + }, + { + "proc": "clone", + "pos": 5, + "out": " * branch master -> FETCH_HEAD\n" + }, + { + "proc": "clone", + "pos": 6, + "out": " * [new branch] master -> origin/master\n" + }, + { + "proc": "clone", + "pos": 7, + "out": "+ git reset --hard -q 62126a02ffea3dabd7789e5c5407553490973665\n" + }, + { + "proc": "clone", + "pos": 8, + "out": "+ git submodule update --init --recursive\n" + } +] +``` +--- From fb54d575612f0927c2e17c63ea449d4095d03f80 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Wed, 15 Jul 2020 21:29:59 +0800 Subject: [PATCH 034/384] change --- app/controllers/sync_forge_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/sync_forge_controller.rb b/app/controllers/sync_forge_controller.rb index 0c20fd671..8b5eaf70e 100644 --- a/app/controllers/sync_forge_controller.rb +++ b/app/controllers/sync_forge_controller.rb @@ -75,11 +75,11 @@ class SyncForgeController < ApplicationController username = new_user.login password = "12345678" - if new_user.save! - SyncLog.sync_log("=================sync_to_user_success==#{new_user.login}") - else - SyncLog.sync_log("=================sync_to_user_failed,user_login==#{new_user.login}") - end + # if new_user.save! + # SyncLog.sync_log("=================sync_to_user_success==#{new_user.login}") + # else + # SyncLog.sync_log("=================sync_to_user_failed,user_login==#{new_user.login}") + # end ActiveRecord::Base.transaction do interactor = Gitea::RegisterInteractor.call({username: username, email: new_user.mail, password: password}) if interactor.success? From 289f4495b6aa9f6d37f7e61d6af7efc6266226d0 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Wed, 15 Jul 2020 22:01:12 +0800 Subject: [PATCH 035/384] chang issues --- app/controllers/sync_forge_controller.rb | 34 ++++++++++++++++++------ 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/app/controllers/sync_forge_controller.rb b/app/controllers/sync_forge_controller.rb index 8b5eaf70e..d7e07d0ad 100644 --- a/app/controllers/sync_forge_controller.rb +++ b/app/controllers/sync_forge_controller.rb @@ -206,18 +206,36 @@ class SyncForgeController < ApplicationController token: get_token, parent_id: project_id } + SyncLog.sync_log("***2--02. sync_projects_params-#{sync_projects_params}--------------") + SyncProjectsJob.perform_later(sync_projects_params, gitea_main) end else - sync_projects_params = { - type: "Issue", - ids: diff_issue_ids, - token: get_token, - parent_id: project_id - } + if diff_issue_ids.size > 200 + new_diff_ids = diff_issue_ids.in_groups_of(200).map{|k| k.reject(&:blank?)} + new_diff_ids.each_with_index do |diff, index| + sync_projects_params = { + type: "Issue", + ids: diff, + token: get_token, + parent_id: project_id + } + SyncLog.sync_log("***2--030#{idnex+1}. sync_projects_params_groups-#{sync_projects_params}--------------") + SyncProjectsJob.perform_later(sync_projects_params, gitea_main) + end + else + sync_projects_params = { + type: "Issue", + ids: diff_issue_ids, + token: get_token, + parent_id: project_id + } + end + SyncLog.sync_log("***2--03. sync_projects_params_groups-#{sync_projects_params}--------------") + SyncProjectsJob.perform_later(sync_projects_params, gitea_main) end end - SyncLog.sync_log("***2--02. sync_projects_params-#{sync_projects_params}--------------") - SyncProjectsJob.perform_later(sync_projects_params, gitea_main) if sync_projects_params.present? + + # SyncProjectsJob.perform_later(sync_projects_params, gitea_main) if sync_projects_params.present? SyncLog.sync_log("***2. end_to_syncissues---------------") rescue Exception => e SyncLog.sync_log("=========change_project_issues_errors:#{e}===================") From b077d0c361d24dd5f4eb7809836d4600b55192c8 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Wed, 15 Jul 2020 22:38:58 +0800 Subject: [PATCH 036/384] change --- app/controllers/sync_forge_controller.rb | 50 ++++++++++++++---------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/app/controllers/sync_forge_controller.rb b/app/controllers/sync_forge_controller.rb index d7e07d0ad..c68b512e2 100644 --- a/app/controllers/sync_forge_controller.rb +++ b/app/controllers/sync_forge_controller.rb @@ -210,28 +210,38 @@ class SyncForgeController < ApplicationController SyncProjectsJob.perform_later(sync_projects_params, gitea_main) end else - if diff_issue_ids.size > 200 - new_diff_ids = diff_issue_ids.in_groups_of(200).map{|k| k.reject(&:blank?)} - new_diff_ids.each_with_index do |diff, index| - sync_projects_params = { - type: "Issue", - ids: diff, - token: get_token, - parent_id: project_id - } - SyncLog.sync_log("***2--030#{idnex+1}. sync_projects_params_groups-#{sync_projects_params}--------------") - SyncProjectsJob.perform_later(sync_projects_params, gitea_main) - end - else - sync_projects_params = { - type: "Issue", - ids: diff_issue_ids, - token: get_token, - parent_id: project_id - } - end + # if diff_issue_ids.size > 200 + # new_diff_ids = diff_issue_ids.in_groups_of(200).map{|k| k.reject(&:blank?)} + # new_diff_ids.each_with_index do |diff, index| + # sync_projects_params = { + # type: "Issue", + # ids: diff, + # token: get_token, + # parent_id: project_id + # } + # SyncLog.sync_log("***2--030#{idnex+1}. sync_projects_params_groups-#{sync_projects_params}--------------") + # SyncProjectsJob.perform_later(sync_projects_params, gitea_main) + # end + # else + # sync_projects_params = { + # type: "Issue", + # ids: diff_issue_ids, + # token: get_token, + # parent_id: project_id + # } + # SyncLog.sync_log("***2--03. sync_projects_params_groups-#{sync_projects_params}--------------") + # SyncProjectsJob.perform_later(sync_projects_params, gitea_main) + # end + + sync_projects_params = { + type: "Issue", + ids: diff_issue_ids, + token: get_token, + parent_id: project_id + } SyncLog.sync_log("***2--03. sync_projects_params_groups-#{sync_projects_params}--------------") SyncProjectsJob.perform_later(sync_projects_params, gitea_main) + end end From 69425d6d0a91ad279a0d8350140c7b8e656c248e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 17 Jul 2020 16:02:54 +0800 Subject: [PATCH 037/384] FIX . --- app/controllers/dev_ops/cloud_accounts_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index ca506fa49..108e2fdc5 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -23,7 +23,6 @@ class DevOps::CloudAccountsController < ApplicationController cloud_account.save! end - # 2. 生成oauth2应用程序的client_id和client_secrete gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline", redirect_uris: ["#{cloud_account.drone_url}/login"]}) logger.info "######### gitea_oauth: #{gitea_oauth}" From 8a7464cf6cbe13c226ffb0deae57c9600177bf55 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Fri, 17 Jul 2020 18:29:56 +0800 Subject: [PATCH 038/384] change --- app/controllers/issues_controller.rb | 54 +++++++++++----------------- 1 file changed, 20 insertions(+), 34 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 97ba09e7b..d0afb796a 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -110,40 +110,22 @@ class IssuesController < ApplicationController issue_params = issue_send_params(params) @issue = Issue.new(issue_params) - begin - if @issue.save! - if params[:attachment_ids].present? - params[:attachment_ids].each do |id| - attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) - unless attachment.blank? - attachment.container = @issue - attachment.author_id = current_user.id - attachment.description = "" - attachment.save - end + if @issue.save! + if params[:attachment_ids].present? + params[:attachment_ids].each do |id| + attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) + unless attachment.blank? + attachment.container = @issue + attachment.author_id = current_user.id + attachment.description = "" + attachment.save end end - if params[:issue_tag_ids].present? - params[:issue_tag_ids].each do |tag| - IssueTagsRelate.create!(issue_id: @issue.id, issue_tag_id: tag) - end + end + if params[:issue_tag_ids].present? + params[:issue_tag_ids].each do |tag| + IssueTagsRelate.create!(issue_id: @issue.id, issue_tag_id: tag) end - if params[:assigned_to_id].present? - Tiding.create!(user_id: params[:assigned_to_id], trigger_user_id: current_user.id, - container_id: @issue.id, container_type: 'Issue', - parent_container_id: @project.id, parent_container_type: "Project", - tiding_type: 'issue', status: 0) - end - - #为悬赏任务时, 扣除当前用户的积分 - if params[:issue_type].to_s == "2" - post_to_chain("minus", params[:token].to_i, current_user.try(:login)) - end - - @issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") - normal_status(0, "创建成功") - else - normal_status(-1, "创建失败") end if params[:assigned_to_id].present? Tiding.create!(user_id: params[:assigned_to_id], trigger_user_id: current_user.id, @@ -152,11 +134,15 @@ class IssuesController < ApplicationController tiding_type: 'issue', status: 0) end + #为悬赏任务时, 扣除当前用户的积分 + if params[:issue_type].to_s == "2" + post_to_chain("minus", params[:token].to_i, current_user.try(:login)) + end + @issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") - # normal_status(0, "创建成功",) - render :json => { status: 0, message: "创建成功", id: @issue.id} + render json: {status: 0, message: "创建成", id: @issue.id} else - + normal_status(-1, "创建失败") end end From e414960153b580fef5b1b9af36215c16e2ec7853 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 20 Jul 2020 15:38:12 +0800 Subject: [PATCH 039/384] Update drone request server --- app/libs/dev_ops/drone/request.rb | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/app/libs/dev_ops/drone/request.rb b/app/libs/dev_ops/drone/request.rb index 6ce738a72..6cc38174e 100644 --- a/app/libs/dev_ops/drone/request.rb +++ b/app/libs/dev_ops/drone/request.rb @@ -35,7 +35,12 @@ def put(endpoint, path, options={}) validate_request_params!(endpoint) - request(:put, endpoint, path, options) + + end + + def patch(url, params={}) + validate_request_params!(endpoint) + request(:patch, endpoint, path, options) end def delete(endpoint, path, options={}) @@ -45,10 +50,19 @@ private def request(method, endpoint, path, **params) - Rails.logger.info("[drone] request: #{method} #{path} #{params.except(:secret).inspect}") + Rails.logger.info("[drone] request: #{method} #{path} #{params.except(:drone_token).inspect}") - client = Faraday.new(url: endpoint) - response = client.public_send(method, path, params) + client ||= begin + Faraday.new(url: endpoint) do |req| + req.request :url_encoded + req.headers['Content-Type'] = 'application/json' + req.response :logger # 显示日志 + req.adapter Faraday.default_adapter + req.authorization :Bearer, params[:drone_token] + req.headers['Authorization'] + end + end + response = client.public_send(method, path, params.except(:drone_token)) json_response(response) end From 2633e65a6c0041ba65e96aabcd6670fafcbb409b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 20 Jul 2020 15:39:12 +0800 Subject: [PATCH 040/384] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index c30dbd75e..38c681bd5 100644 --- a/README.md +++ b/README.md @@ -2511,6 +2511,12 @@ GET /api/dev_ops/builds curl -X GET http://localhost:3000/api/dev_ops/builds | jq ``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |repository's id | + *返回参数说明:* |参数名|类型|说明| From 9cc2e80e9877ae7ad520ff10504cf9838cb1a550 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 20 Jul 2020 15:47:58 +0800 Subject: [PATCH 041/384] FIX bug --- app/libs/dev_ops/drone/request.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/libs/dev_ops/drone/request.rb b/app/libs/dev_ops/drone/request.rb index 6cc38174e..85420b7ab 100644 --- a/app/libs/dev_ops/drone/request.rb +++ b/app/libs/dev_ops/drone/request.rb @@ -35,10 +35,10 @@ def put(endpoint, path, options={}) validate_request_params!(endpoint) - + request(:put, endpoint, path, options) end - def patch(url, params={}) + def patch(endpoint, path, options={}) validate_request_params!(endpoint) request(:patch, endpoint, path, options) end From 1f54e02acece8882c6ff952277d56ca7a3d219a4 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 20 Jul 2020 16:12:37 +0800 Subject: [PATCH 042/384] ADD devops .trustie-pipeline.ym file --- .trustie-pipeline.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .trustie-pipeline.yml diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml new file mode 100644 index 000000000..662261bb6 --- /dev/null +++ b/.trustie-pipeline.yml @@ -0,0 +1,13 @@ +kind: pipeline +name: default + +platform: + os: linux + arch: arm64 + +steps: +- name: test + image: ruby + commands: + - bundle install --jobs=3 --retry=3 + - rake From 5fcb4a55006b4b8eae1fea757995c7300b3b1af7 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 20 Jul 2020 16:52:26 +0800 Subject: [PATCH 043/384] FIX drone sever request params --- app/libs/dev_ops/drone/api.rb | 2 +- app/libs/dev_ops/drone/request.rb | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/libs/dev_ops/drone/api.rb b/app/libs/dev_ops/drone/api.rb index 860e54557..cf910fd63 100644 --- a/app/libs/dev_ops/drone/api.rb +++ b/app/libs/dev_ops/drone/api.rb @@ -39,7 +39,7 @@ class DevOps::Drone::API < DevOps::Drone::Request # Activate user's project with Drone CI # POST api/repos/{owner}/{name} # eq: - # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier).avtivate + # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier).activate def activate post(endpoint, "/api/repos/#{owner}/#{repo}", drone_token: drone_token) end diff --git a/app/libs/dev_ops/drone/request.rb b/app/libs/dev_ops/drone/request.rb index 85420b7ab..a59b515d2 100644 --- a/app/libs/dev_ops/drone/request.rb +++ b/app/libs/dev_ops/drone/request.rb @@ -62,7 +62,9 @@ req.headers['Authorization'] end end - response = client.public_send(method, path, params.except(:drone_token)) + response = client.public_send(method, path) do |req| + req.body = params.except(:drone_token).to_json + end json_response(response) end From 15fc5de3de3c53877ba6056a95a33c3b83648629 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 21 Jul 2020 12:35:26 +0800 Subject: [PATCH 044/384] =?UTF-8?q?FIX=20=E6=B5=8B=E8=AF=95giteawebhook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/dev_ops/builds_controller.rb | 9 +++++++-- app/forms/dev_ops/create_cloud_account_form.rb | 4 ++-- app/libs/dev_ops/drone/client.rb | 4 ++-- config/routes.rb | 1 + 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb index 2474b1136..98e82741a 100644 --- a/app/controllers/dev_ops/builds_controller.rb +++ b/app/controllers/dev_ops/builds_controller.rb @@ -1,6 +1,6 @@ class ::DevOps::BuildsController < ApplicationController - before_action :require_login - before_action :find_repo + before_action :require_login, except: :test_webhook + before_action :find_repo, except: :test_webhook def index cloud_account = @repo.dev_ops_cloud_account @@ -36,6 +36,11 @@ class ::DevOps::BuildsController < ApplicationController render json: result end + def test_webhook + logger.info "==============已经回调成功了....." + render_ok + end + private def find_repo @repo = ::Repository.find params[:id] diff --git a/app/forms/dev_ops/create_cloud_account_form.rb b/app/forms/dev_ops/create_cloud_account_form.rb index 2d1752b74..e17edc5ba 100644 --- a/app/forms/dev_ops/create_cloud_account_form.rb +++ b/app/forms/dev_ops/create_cloud_account_form.rb @@ -1,9 +1,9 @@ class DevOps::CreateCloudAccountForm include ActiveModel::Model - attr_accessor :project_id, :ip_num, :account, :secret + attr_accessor :repo_id, :ip_num, :account, :secret - validates :project_id, :account, :secret, presence: true + validates :repo_id, :account, :secret, presence: true validates :ip_num, presence: true, format: { with: CustomRegexp::IP, multiline: true, message: 'IP 地址格式不对' } end diff --git a/app/libs/dev_ops/drone/client.rb b/app/libs/dev_ops/drone/client.rb index 540876bc6..dfd68e5bd 100644 --- a/app/libs/dev_ops/drone/client.rb +++ b/app/libs/dev_ops/drone/client.rb @@ -14,7 +14,7 @@ class DevOps::Drone::Client def run `docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ - -e DRONE_RPC_SERVER=drone-server-#{client_id}:9000 \ + -e DRONE_PRC_HOST=drone-server-#{client_id}:9000 \ -e DRONE_RPC_SECRET=#{rpc_secret} \ -e DRONE_RUNNER_NAME=#{drone_ip} \ --restart always \ @@ -27,7 +27,7 @@ class DevOps::Drone::Client def generate_cmd "docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ - -e DRONE_RPC_SERVER=drone-server-#{client_id}:9000 \ + -e DRONE_PRC_HOST=#{drone_ip}-#{client_id}:9000 \ -e DRONE_RPC_SECRET=#{rpc_secret} \ -e DRONE_RUNNER_NAME=#{drone_ip} \ --restart always \ diff --git a/config/routes.rb b/config/routes.rb index 5589b55b9..cebbe8945 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -28,6 +28,7 @@ Rails.application.routes.draw do post ':number', to: 'builds#restart', as: 'restart' delete ':number', to: 'builds#delete', as: 'delete' get ':number/logs/:stage/:step', to: 'builds#detail', as: 'logs' + post 'test_webhook', to: 'builds#test_webhook', as: 'test_webhook' end end end From 5d34ac68d509b4361cdfd169cf59ede7dcb9583f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 21 Jul 2020 14:17:19 +0800 Subject: [PATCH 045/384] FIX create oauth bug --- app/controllers/dev_ops/cloud_accounts_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index 108e2fdc5..9be2d05d7 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -20,6 +20,7 @@ class DevOps::CloudAccountsController < ApplicationController cloud_account = DevOps::CloudAccount.new(create_params) cloud_account.user = current_user cloud_account.repo_id = @repo.id + cloud_account.project_id = @repo.project.id cloud_account.save! end @@ -31,7 +32,7 @@ class DevOps::CloudAccountsController < ApplicationController redirect_uri: gitea_oauth['redirect_uris'], gitea_oauth_id: gitea_oauth['id'], user_id: current_user.id, - project_id: devops_params[:project_id]) + project_id: @repo.project.id) oauth.save rpc_secret = SecureRandom.hex 16 From 236782eca8cd33a7ba71b311eff8bf731ecebc23 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 21 Jul 2020 15:07:42 +0800 Subject: [PATCH 046/384] FIX drone server command's bug --- app/libs/dev_ops/drone/api.rb | 2 +- app/libs/dev_ops/drone/client.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/libs/dev_ops/drone/api.rb b/app/libs/dev_ops/drone/api.rb index cf910fd63..c7d807860 100644 --- a/app/libs/dev_ops/drone/api.rb +++ b/app/libs/dev_ops/drone/api.rb @@ -39,7 +39,7 @@ class DevOps::Drone::API < DevOps::Drone::Request # Activate user's project with Drone CI # POST api/repos/{owner}/{name} # eq: - # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier).activate + # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, project.owner.login, project.identifier).activate def activate post(endpoint, "/api/repos/#{owner}/#{repo}", drone_token: drone_token) end diff --git a/app/libs/dev_ops/drone/client.rb b/app/libs/dev_ops/drone/client.rb index dfd68e5bd..7f44f6e59 100644 --- a/app/libs/dev_ops/drone/client.rb +++ b/app/libs/dev_ops/drone/client.rb @@ -27,7 +27,7 @@ class DevOps::Drone::Client def generate_cmd "docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ - -e DRONE_PRC_HOST=#{drone_ip}-#{client_id}:9000 \ + -e DRONE_PRC_HOST=#{drone_ip}:9000 \ -e DRONE_RPC_SECRET=#{rpc_secret} \ -e DRONE_RUNNER_NAME=#{drone_ip} \ --restart always \ From 20d8f21ebb03c0ef4193dcb6e7526034cebfb6b5 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 21 Jul 2020 15:19:43 +0800 Subject: [PATCH 047/384] FIX bug --- app/libs/dev_ops/drone/client.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/libs/dev_ops/drone/client.rb b/app/libs/dev_ops/drone/client.rb index 7f44f6e59..a7c69cfdf 100644 --- a/app/libs/dev_ops/drone/client.rb +++ b/app/libs/dev_ops/drone/client.rb @@ -27,7 +27,7 @@ class DevOps::Drone::Client def generate_cmd "docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ - -e DRONE_PRC_HOST=#{drone_ip}:9000 \ + -e DRONE_RPC_HOST=#{drone_ip}:9000 \ -e DRONE_RPC_SECRET=#{rpc_secret} \ -e DRONE_RUNNER_NAME=#{drone_ip} \ --restart always \ From 0f92aa7981aa2d5e32a03db99d75bf7ef80591f2 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 21 Jul 2020 17:08:07 +0800 Subject: [PATCH 048/384] FIX test devops --- README.md | 318 ++++++++++++------ app/controllers/dev_ops/builds_controller.rb | 11 +- .../dev_ops/cloud_accounts_controller.rb | 2 +- app/libs/dev_ops/drone/client.rb | 15 +- app/libs/dev_ops/drone/server.rb | 1 - config/routes.rb | 3 +- 6 files changed, 213 insertions(+), 137 deletions(-) diff --git a/README.md b/README.md index 38c681bd5..9a8141ee0 100644 --- a/README.md +++ b/README.md @@ -2508,7 +2508,9 @@ GET /api/dev_ops/builds *示例* ``` -curl -X GET http://localhost:3000/api/dev_ops/builds | jq +curl -X GET \ +-d 'id=4844' \ +http://localhost:3000/api/dev_ops/builds | jq ``` *请求参数说明:* @@ -2530,29 +2532,31 @@ curl -X GET http://localhost:3000/api/dev_ops/builds | jq ``` [ { - "id": 100207, - "repo_id": 296163, - "number": 42, + "id": 1, + "repo_id": 8, + "trigger": "@hook", + "number": 1, "status": "success", - "event": "pull_request", - "action": "sync", - "link": "https://github.com/octoat/hello-world/compare/e3320539a4c0...9fc1ad6ebf12", - "message": "updated README", - "before": "e3320539a4c03ccfda992641646deb67d8bf98f3", - "after": "9fc1ad6ebf12462f3f9773003e26b4c6f54a772e", + "event": "push", + "action": "", + "link": "", + "timestamp": 0, + "message": "更新 '.trustie-pipeline.yml'\n", + "before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324", + "after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4", "ref": "refs/heads/master", - "source_repo": "spaceghost/hello-world", - "source": "develop", + "source_repo": "", + "source": "master", "target": "master", - "author_login": "octocat", - "author_name": "The Octocat", - "author_email": "octocat@github.com", - "author_avatar": "http://www.gravatar.com/avatar/7194e8d48fa1d2b689f99443b767316c", - "sender": "bradrydzewski", - "started": 1564085874, - "finished": 1564086343, - "created": 1564085874, - "updated": 1564085874, + "author_login": "jasder", + "author_name": "jasder", + "author_email": "email.com", + "author_avatar": "", + "sender": "jasder", + "started": 1595317786, + "finished": 1595318426, + "created": 1595317786, + "updated": 1595317786, "version": 3 } ] @@ -2566,13 +2570,16 @@ GET /api/dev_ops/builds/:number *示例* ``` -curl -X GET http://localhost:3000/api/dev_ops/builds/42 | jq +curl -X GET \ +-d 'id=4844' \ +http://ocalhost:3000/api/dev_ops/builds/1 | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| +|id |int|repository's id| |number |是|int |build's number | *返回参数说明:* @@ -2586,53 +2593,79 @@ curl -X GET http://localhost:3000/api/dev_ops/builds/42 | jq 返回值 ``` { - "id": 100207, - "repo_id": 296163, - "number": 42, - "status": "pending", - "event": "pull_request", - "action": "sync", - "link": "https://github.com/octoat/hello-world/compare/e3320539a4c0...9fc1ad6ebf12", - "message": "updated README", - "before": "e3320539a4c03ccfda992641646deb67d8bf98f3", - "after": "9fc1ad6ebf12462f3f9773003e26b4c6f54a772e", + "id": 1, + "repo_id": 8, + "trigger": "@hook", + "number": 1, + "status": "success", + "event": "push", + "action": "", + "link": "http://localhost:3000/jasder/forgeplus/compare/5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324...5e52ce51a239f5c8dd0b489a8a71e94f976179b4", + "timestamp": 0, + "message": "更新 '.trustie-pipeline.yml'\n", + "before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324", + "after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4", "ref": "refs/heads/master", - "source_repo": "spaceghost/hello-world", - "source": "develop", + "source_repo": "", + "source": "master", "target": "master", - "author_login": "octocat", - "author_name": "The Octocat", - "author_email": "octocat@github.com", - "author_avatar": "http://www.gravatar.com/avatar/7194e8d48fa1d2b689f99443b767316c", - "sender": "bradrydzewski", - "started": 0, - "finished": 0, - "created": 1564085874, - "updated": 1564085874, - "version": 1, + "author_login": "jasder", + "author_name": "jasder", + "author_email": "2053003901@qq.com", + "author_avatar": "http://localhost:3000/user/avatar/jasder/-1", + "sender": "jasder", + "started": 1595317786, + "finished": 1595318426, + "created": 1595317786, + "updated": 1595317786, + "version": 3, "stages": [ - { - "id": 199937, - "repo_id": 296163, - "build_id": 100207, + { + "id": 1, + "repo_id": 8, + "build_id": 1, + "number": 1, + "name": "default", + "kind": "pipeline", + "type": "docker", + "status": "success", + "errignore": false, + "exit_code": 0, + "machine": "121.36.81.172", + "os": "linux", + "arch": "arm64", + "started": 1595317786, + "stopped": 1595318426, + "created": 1595317786, + "updated": 1595318426, + "version": 4, + "on_success": true, + "on_failure": false, + "steps": [ + { + "id": 1, + "step_id": 1, "number": 1, - "name": "default", - "kind": "pipeline", - "type": "docker", - "status": "pending", - "errignore": false, + "name": "clone", + "status": "success", "exit_code": 0, - "machine": "15e89c0f84f1", - "os": "linux", - "arch": "amd64", - "started": 0, - "stopped": 0, - "created": 1564085874, - "updated": 1564086343, - "version": 1, - "on_success": true, - "on_failure": false - } + "started": 1595317786, + "stopped": 1595318373, + "version": 4 + }, + { + "id": 2, + "step_id": 1, + "number": 2, + "name": "test", + "status": "success", + "exit_code": 0, + "started": 1595318373, + "stopped": 1595318426, + "version": 4 + } + ] + } ] } ``` @@ -2645,13 +2678,16 @@ POST /api/dev_ops/builds/:number *示例* ``` -curl -X POST http://localhost:3000/api/dev_ops/builds/42 | jq +curl -X POST \ +-d 'id=4844' \ +http://localhost:3000/api/dev_ops/builds/1 | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| +|id |int|repository's id| |number |是|int |build's number | *返回参数说明:* @@ -2665,54 +2701,32 @@ curl -X POST http://localhost:3000/api/dev_ops/builds/42 | jq 返回值 ``` { - "id": 100207, - "repo_id": 296163, - "number": 42, + "id": 2, + "repo_id": 8, + "trigger": "jasder", + "number": 2, "status": "pending", - "event": "pull_request", - "action": "sync", - "link": "https://github.com/octoat/hello-world/compare/e3320539a4c0...9fc1ad6ebf12", - "message": "updated README", - "before": "e3320539a4c03ccfda992641646deb67d8bf98f3", - "after": "9fc1ad6ebf12462f3f9773003e26b4c6f54a772e", + "event": "push", + "action": "", + "link": "http://localhost:3000/jasder/forgeplus/compare/5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324...5e52ce51a239f5c8dd0b489a8a71e94f976179b4", + "timestamp": 0, + "message": "更新 '.trustie-pipeline.yml'\n", + "before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324", + "after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4", "ref": "refs/heads/master", - "source_repo": "spaceghost/hello-world", - "source": "develop", + "source_repo": "", + "source": "master", "target": "master", - "author_login": "octocat", - "author_name": "The Octocat", - "author_email": "octocat@github.com", - "author_avatar": "http://www.gravatar.com/avatar/7194e8d48fa1d2b689f99443b767316c", - "sender": "bradrydzewski", + "author_login": "jasder", + "author_name": "jasder", + "author_email": "2053003901@qq.com", + "author_avatar": "http://localhost:3000/user/avatar/jasder/-1", + "sender": "jasder", "started": 0, "finished": 0, - "created": 1564085874, - "updated": 1564085874, - "version": 1, - "stages": [ - { - "id": 199937, - "repo_id": 296163, - "build_id": 100207, - "number": 1, - "name": "default", - "kind": "pipeline", - "type": "docker", - "status": "pending", - "errignore": false, - "exit_code": 0, - "machine": "15e89c0f84f1", - "os": "linux", - "arch": "amd64", - "started": 0, - "stopped": 0, - "created": 1564085874, - "updated": 1564086343, - "version": 1, - "on_success": true, - "on_failure": false - } - ] + "created": 1595321350, + "updated": 1595321350, + "version": 1 } ``` --- @@ -2724,13 +2738,16 @@ DELETE /api/dev_ops/builds/:number *示例* ``` -curl -X DELETE http://localhost:3000/api/dev_ops/builds/42 | jq +curl -X DELETE \ +-d 'id=4844' \ +http://localhost:3000/api/dev_ops/builds/42 | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| +|id |int|repository's id| |number |是|int |build's number | *返回参数说明:* @@ -2743,6 +2760,82 @@ curl -X DELETE http://localhost:3000/api/dev_ops/builds/42 | jq 返回值 ``` +{ + "id": 2, + "repo_id": 8, + "trigger": "jasder", + "number": 2, + "status": "killed", + "event": "push", + "action": "", + "link": "http://localhost:3000/jasder/forgeplus/compare/5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324...5e52ce51a239f5c8dd0b489a8a71e94f976179b4", + "timestamp": 0, + "message": "更新 '.trustie-pipeline.yml'\n", + "before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324", + "after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4", + "ref": "refs/heads/master", + "source_repo": "", + "source": "master", + "target": "master", + "author_login": "jasder", + "author_name": "jasder", + "author_email": "2053003901@qq.com", + "author_avatar": "http://localhost:3000/user/avatar/jasder/-1", + "sender": "jasder", + "started": 1595321352, + "finished": 1595321590, + "created": 1595321350, + "updated": 1595321352, + "version": 3, + "stages": [ + { + "id": 2, + "repo_id": 8, + "build_id": 2, + "number": 1, + "name": "default", + "kind": "pipeline", + "type": "docker", + "status": "killed", + "errignore": false, + "exit_code": 0, + "machine": "121.36.81.172", + "os": "linux", + "arch": "arm64", + "started": 1595321352, + "stopped": 1595321590, + "created": 1595321350, + "updated": 1595321352, + "version": 4, + "on_success": true, + "on_failure": false, + "steps": [ + { + "id": 3, + "step_id": 2, + "number": 1, + "name": "clone", + "status": "killed", + "exit_code": 130, + "started": 1595321353, + "stopped": 1595321590, + "version": 3 + }, + { + "id": 4, + "step_id": 2, + "number": 2, + "name": "test", + "status": "skipped", + "exit_code": 130, + "started": 1595321590, + "stopped": 1595321590, + "version": 2 + } + ] + } + ] +} ``` --- @@ -2753,14 +2846,17 @@ GET /api/dev_ops/builds/:number/logs/:stage/:step *示例* ``` -curl -X GET http://localhost:3000/api/dev_ops/builds/42/logs/ | jq +curl -X GET \ +-d 'id=4844' \ +http://localhost:3000/api/dev_ops/builds/42/logs/ | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| -|number |是|int |build's number | +|id |int|repository's id| +|number |是|int |build's number | |stage |是|int |build's stage id | |step |是|int |build's step id | diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb index 98e82741a..034555970 100644 --- a/app/controllers/dev_ops/builds_controller.rb +++ b/app/controllers/dev_ops/builds_controller.rb @@ -1,6 +1,6 @@ class ::DevOps::BuildsController < ApplicationController - before_action :require_login, except: :test_webhook - before_action :find_repo, except: :test_webhook + before_action :require_login + before_action :find_repo def index cloud_account = @repo.dev_ops_cloud_account @@ -31,16 +31,11 @@ class ::DevOps::BuildsController < ApplicationController def logs cloud_account = @repo.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: params[:build], stage: params[:stage], step: sync_params[:step]).logs + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: params[:build], stage: params[:stage], step: params[:step]).logs render json: result end - def test_webhook - logger.info "==============已经回调成功了....." - render_ok - end - private def find_repo @repo = ::Repository.find params[:id] diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index 9be2d05d7..614f9748d 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -50,7 +50,7 @@ class DevOps::CloudAccountsController < ApplicationController logger.info "######### result: #{result}" - redirect_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{oauth.client_id}&redirect_uri=#{cloud_account.drone_url}/login&response_type=code" + redirect_url = "#{cloud_account.drone_url}/login&response_type=code" logger.info "######### redirect_url: #{redirect_url}" if result render_ok(redirect_url: redirect_url) diff --git a/app/libs/dev_ops/drone/client.rb b/app/libs/dev_ops/drone/client.rb index a7c69cfdf..c427f79d8 100644 --- a/app/libs/dev_ops/drone/client.rb +++ b/app/libs/dev_ops/drone/client.rb @@ -11,23 +11,10 @@ class DevOps::Drone::Client @rpc_secret = rpc_secret end - def run - `docker run -d \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -e DRONE_PRC_HOST=drone-server-#{client_id}:9000 \ - -e DRONE_RPC_SECRET=#{rpc_secret} \ - -e DRONE_RUNNER_NAME=#{drone_ip} \ - --restart always \ - --name drone-agent--#{client_id} \ - --net="bridge" \ - drone/drone-runner-docker:1 - ` - end - def generate_cmd "docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ - -e DRONE_RPC_HOST=#{drone_ip}:9000 \ + -e DRONE_RPC_HOST=#{drone_ip}:80 \ -e DRONE_RPC_SECRET=#{rpc_secret} \ -e DRONE_RUNNER_NAME=#{drone_ip} \ --restart always \ diff --git a/app/libs/dev_ops/drone/server.rb b/app/libs/dev_ops/drone/server.rb index 04c7a9cda..e4bbe9da5 100644 --- a/app/libs/dev_ops/drone/server.rb +++ b/app/libs/dev_ops/drone/server.rb @@ -46,7 +46,6 @@ class DevOps::Drone::Server -e DRONE_SERVER_HOST=#{drone_host} \ -e DRONE_SERVER_PROTO=http \ -p '80:80' \ - -p '9000:9000' \ --restart=always \ --detach=true \ --name=drone-server-#{client_id} \ diff --git a/config/routes.rb b/config/routes.rb index cebbe8945..64ada7e8d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -27,8 +27,7 @@ Rails.application.routes.draw do get ':number', to: 'builds#detail', as: 'detail' post ':number', to: 'builds#restart', as: 'restart' delete ':number', to: 'builds#delete', as: 'delete' - get ':number/logs/:stage/:step', to: 'builds#detail', as: 'logs' - post 'test_webhook', to: 'builds#test_webhook', as: 'test_webhook' + get ':number/logs/:stage/:step', to: 'builds#logs', as: 'logs' end end end From 794f28178709c6613419819ce85bf809216aa0e0 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 21 Jul 2020 17:11:28 +0800 Subject: [PATCH 049/384] FIX bug --- app/libs/dev_ops/drone/api.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/libs/dev_ops/drone/api.rb b/app/libs/dev_ops/drone/api.rb index c7d807860..bc22d63d2 100644 --- a/app/libs/dev_ops/drone/api.rb +++ b/app/libs/dev_ops/drone/api.rb @@ -68,6 +68,6 @@ class DevOps::Drone::API < DevOps::Drone::Request # eq: # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: build, stage: stage, step: step).logs def logs - get(endpoint, "/api/repos/#{owner}/#{repo}/builds/#{options[:build]}/logs/#{options[:stage]}/#{options[:step]}", drone_token: drone_token) + get(endpoint, "/api/repos/#{owner}/#{repo}/builds/#{options[:number]}/logs/#{options[:stage]}/#{options[:step]}", drone_token: drone_token) end end From cf244390ef3f25885dc36ee0af9dad0426765876 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 21 Jul 2020 17:13:15 +0800 Subject: [PATCH 050/384] FIX git drone logs api params's bug --- app/controllers/dev_ops/builds_controller.rb | 2 +- app/libs/dev_ops/drone/api.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb index 034555970..8870ec4b3 100644 --- a/app/controllers/dev_ops/builds_controller.rb +++ b/app/controllers/dev_ops/builds_controller.rb @@ -31,7 +31,7 @@ class ::DevOps::BuildsController < ApplicationController def logs cloud_account = @repo.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: params[:build], stage: params[:stage], step: params[:step]).logs + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: params[:number], stage: params[:stage], step: params[:step]).logs render json: result end diff --git a/app/libs/dev_ops/drone/api.rb b/app/libs/dev_ops/drone/api.rb index bc22d63d2..c7d807860 100644 --- a/app/libs/dev_ops/drone/api.rb +++ b/app/libs/dev_ops/drone/api.rb @@ -68,6 +68,6 @@ class DevOps::Drone::API < DevOps::Drone::Request # eq: # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: build, stage: stage, step: step).logs def logs - get(endpoint, "/api/repos/#{owner}/#{repo}/builds/#{options[:number]}/logs/#{options[:stage]}/#{options[:step]}", drone_token: drone_token) + get(endpoint, "/api/repos/#{owner}/#{repo}/builds/#{options[:build]}/logs/#{options[:stage]}/#{options[:step]}", drone_token: drone_token) end end From 77b55daf04b7bc1964629546789c8696f3e2aed2 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 21 Jul 2020 17:24:30 +0800 Subject: [PATCH 051/384] Update README.md --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 9a8141ee0..02cbf6a07 100644 --- a/README.md +++ b/README.md @@ -2332,7 +2332,7 @@ http://localhost:3000/api//api/repositories/3868/delete_file | jq 返回值 -``` +```json { "commit": { "sha": "7b70509105b587e71f5692b9e8ab70851e321f64", @@ -2390,7 +2390,7 @@ https://localhost:3000/api/dev_ops/cloud_accounts.json | jq |redirect_url |string|重定向地址,请求成功后,需要调整到该地址进行认证| 返回值 -``` +```json { "status": 0, "message": "success", @@ -2419,7 +2419,7 @@ curl -X GET http://localhost:3000/api/dev_ops/languages.json | jq |cover_url |string|语言的logo链接| 返回值 -``` +```json [ { "id": 114, @@ -2451,7 +2451,7 @@ curl -X GET http://localhost:3000/api/dev_ops/languages/common.json | jq |cover_url |string|语言的logo链接| 返回值 -``` +```json [ { "id": 114, @@ -2489,7 +2489,7 @@ curl -X GET http://localhost:3000/api/dev_ops/languages/114.json | jq |cover_url |string|语言的logo链接| 返回值 -``` +```json [ { "id": 114, @@ -2529,7 +2529,7 @@ http://localhost:3000/api/dev_ops/builds | jq |event |string|build's event| 返回值 -``` +```json [ { "id": 1, @@ -2591,7 +2591,7 @@ http://ocalhost:3000/api/dev_ops/builds/1 | jq |event |string|build's event| 返回值 -``` +```json { "id": 1, "repo_id": 8, @@ -2699,7 +2699,7 @@ http://localhost:3000/api/dev_ops/builds/1 | jq |event |string|build's event| 返回值 -``` +```json { "id": 2, "repo_id": 8, @@ -2759,7 +2759,7 @@ http://localhost:3000/api/dev_ops/builds/42 | jq |event |string|build's event| 返回值 -``` +```json { "id": 2, "repo_id": 8, @@ -2848,7 +2848,7 @@ GET /api/dev_ops/builds/:number/logs/:stage/:step ``` curl -X GET \ -d 'id=4844' \ -http://localhost:3000/api/dev_ops/builds/42/logs/ | jq +http://localhost:3000/api/dev_ops/builds/2/logs/1/3 | jq ``` *请求参数说明:* @@ -2869,7 +2869,7 @@ http://localhost:3000/api/dev_ops/builds/42/logs/ | jq |event |string|build's event| 返回值 -``` +```json [ { "proc": "clone", From 07dfc06c9f580e205fcb980a4f38863d613dd6ac Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 21 Jul 2020 17:27:57 +0800 Subject: [PATCH 052/384] FIX code review --- app/libs/dev_ops/drone/server.rb | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/app/libs/dev_ops/drone/server.rb b/app/libs/dev_ops/drone/server.rb index e4bbe9da5..cb08ca271 100644 --- a/app/libs/dev_ops/drone/server.rb +++ b/app/libs/dev_ops/drone/server.rb @@ -13,26 +13,6 @@ class DevOps::Drone::Server @client_secret = client_secret end - def run - ` - docker run \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -e DRONE_GITEA_SERVER=#{gitea_url} \ - -e DRONE_GITEA_CLIENT_ID=#{client_id} \ - -e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \ - -e DRONE_RPC_SECRET=#{rpc_secret} \ - -e DRONE_SERVER_HOST=#{drone_host} \ - -e DRONE_SERVER_PROTO=http \ - -p "80:80" \ - -p "9000:9000" \ - --restart=always \ - --detach=true \ - --name=drone-server-#{client_id} \ - --net="bridge" \ - drone/drone:1 - ` - end - # TODO 一下代码方便测试,正式环境请移除 # docker rm -f `docker ps -qa` def generate_cmd From a22bd280bcef61f1e8a67b006d0764917a8060d5 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 21 Jul 2020 17:34:47 +0800 Subject: [PATCH 053/384] Update api document --- README.md | 45 ++++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 02cbf6a07..3ed28e687 100644 --- a/README.md +++ b/README.md @@ -2740,7 +2740,7 @@ DELETE /api/dev_ops/builds/:number ``` curl -X DELETE \ -d 'id=4844' \ -http://localhost:3000/api/dev_ops/builds/42 | jq +http://localhost:3000/api/dev_ops/builds/2 | jq ``` *请求参数说明:* @@ -2848,7 +2848,7 @@ GET /api/dev_ops/builds/:number/logs/:stage/:step ``` curl -X GET \ -d 'id=4844' \ -http://localhost:3000/api/dev_ops/builds/2/logs/1/3 | jq +http://localhost:3000/api/dev_ops/builds/2/logs/1/1 | jq ``` *请求参数说明:* @@ -2857,8 +2857,8 @@ http://localhost:3000/api/dev_ops/builds/2/logs/1/3 | jq |-|-|-|-| |id |int|repository's id| |number |是|int |build's number | -|stage |是|int |build's stage id | -|step |是|int |build's step id | +|stage |是|int |build's stage number | +|step |是|int |build's step number | *返回参数说明:* @@ -2872,49 +2872,44 @@ http://localhost:3000/api/dev_ops/builds/2/logs/1/3 | jq ```json [ { - "proc": "clone", "pos": 0, - "out": "+ git init\n" + "out": "+ git fetch origin +refs/heads/master:\n", + "time": 1 }, { - "proc": "clone", "pos": 1, - "out": "Initialized empty Git repository in /drone/src/github.com/octocat/hello-world/.git/\n" + "out": "Initialized empty Git repository in /drone/src/.git/\n", + "time": 1 }, { - "proc": "clone", "pos": 2, - "out": "+ git remote add origin https://github.com/octocat/hello-world.git\n" + "out": "warning: redirecting to https://testgitea2.trustie.net/jasder/forgeplus.git/\n", + "time": 1 }, { - "proc": "clone", "pos": 3, - "out": "+ git fetch --no-tags origin +refs/heads/master:\n" + "out": "From http://testgitea2.trustie.net/jasder/forgeplus\n", + "time": 493 }, { - "proc": "clone", "pos": 4, - "out": "From https://github.com/octocat/hello-world\n" + "out": " * branch master -> FETCH_HEAD\n", + "time": 493 }, { - "proc": "clone", "pos": 5, - "out": " * branch master -> FETCH_HEAD\n" + "out": " * [new branch] master -> origin/master\n", + "time": 493 }, { - "proc": "clone", "pos": 6, - "out": " * [new branch] master -> origin/master\n" + "out": "+ git checkout 5e52ce51a239f5c8dd0b489a8a71e94f976179b4 -b master\n", + "time": 493 }, { - "proc": "clone", "pos": 7, - "out": "+ git reset --hard -q 62126a02ffea3dabd7789e5c5407553490973665\n" - }, - { - "proc": "clone", - "pos": 8, - "out": "+ git submodule update --init --recursive\n" + "out": "Already on 'master'\n", + "time": 496 } ] ``` From 1c2264f7216358b6328e76953b1ed3ed27293555 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 22 Jul 2020 11:18:02 +0800 Subject: [PATCH 054/384] ADD get .trustie-pipeline.yml file api with devops --- README.md | 35 ++++++++++++++++++++ app/controllers/dev_ops/builds_controller.rb | 15 +++++++++ config/routes.rb | 1 + 3 files changed, 51 insertions(+) diff --git a/README.md b/README.md index 3ed28e687..e98789b26 100644 --- a/README.md +++ b/README.md @@ -2399,6 +2399,41 @@ https://localhost:3000/api/dev_ops/cloud_accounts.json | jq ``` --- +#### 获取仓库的.trustie-pipeline.yml +``` +GET /api/dev_ops/builds/get_trustie_pipeline +``` +*示例* +``` +curl -X GET \ +-d "id=4844" \ +http://localhost:3000/api/dev_ops/builds/get_trustie_pipeline.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |repository's id | +|ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |id | +|name |string|文件夹或文件名称| +|path |string|文件夹或文件相对路径| +|content |string|文件内容,| + +``` +{ + "name": ".trustie-pipeline.yml", + "path": ".trustie-pipeline.yml", + "content": "..jsaf" +} +``` + #### 获取语言列表 ``` GET /api/dev_ops/languages diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb index 8870ec4b3..b7829c634 100644 --- a/app/controllers/dev_ops/builds_controller.rb +++ b/app/controllers/dev_ops/builds_controller.rb @@ -1,4 +1,6 @@ class ::DevOps::BuildsController < ApplicationController + include RepositoriesHelper + before_action :require_login before_action :find_repo @@ -36,6 +38,19 @@ class ::DevOps::BuildsController < ApplicationController render json: result end + # get .trustie-pipeline.yml file + def get_trustie_pipeline + file_path_uri = URI.parse('.trustie-pipeline.yml') + interactor = Repositories::EntriesInteractor.call(@repo.user, @repo.identifier, file_path_uri, ref: params[:ref] || "master") + if interactor.success? + file = interactor.result + return render json: {} if file[:status] + + json = {name: file['name'], path: file['path'], content: render_decode64_content(file['content'])} + render json: json + end + end + private def find_repo @repo = ::Repository.find params[:id] diff --git a/config/routes.rb b/config/routes.rb index 64ada7e8d..8064352bf 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -24,6 +24,7 @@ Rails.application.routes.draw do end resources :builds, only: :index do collection do + get 'get_trustie_pipeline', to: 'builds#get_trustie_pipeline', as: 'get_trustie_pipeline' get ':number', to: 'builds#detail', as: 'detail' post ':number', to: 'builds#restart', as: 'restart' delete ':number', to: 'builds#delete', as: 'delete' From 8b5c3797e97529140a2b94f93e6b2a60835fc6cf Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 22 Jul 2020 11:27:30 +0800 Subject: [PATCH 055/384] FIX devops ucloud account --- app/controllers/dev_ops/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index 614f9748d..7514a2e0e 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -15,7 +15,7 @@ class DevOps::CloudAccountsController < ApplicationController if cloud_account = @repo.dev_ops_cloud_account - cloud_account + return render_error('该仓库已绑定了云帐号.') else cloud_account = DevOps::CloudAccount.new(create_params) cloud_account.user = current_user From 3d99dee31bde3c9b59f6651775212e21a948b6f6 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 22 Jul 2020 11:44:42 +0800 Subject: [PATCH 056/384] Update devops redirect_url --- app/controllers/dev_ops/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index 7514a2e0e..3d3663cf6 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -50,7 +50,7 @@ class DevOps::CloudAccountsController < ApplicationController logger.info "######### result: #{result}" - redirect_url = "#{cloud_account.drone_url}/login&response_type=code" + redirect_url = "#{cloud_account.drone_url}/login" logger.info "######### redirect_url: #{redirect_url}" if result render_ok(redirect_url: redirect_url) From 3c7b25746202d1772222a297f0216d16b5c801e5 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 22 Jul 2020 14:28:54 +0800 Subject: [PATCH 057/384] =?UTF-8?q?FIX=20devops=20=E6=89=80=E6=9C=89?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E7=9B=B8=E5=85=B3=E7=9A=84=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=8F=82=E6=95=B0repo=5Fid=20=E6=94=B9=E4=B8=BAproject=5Fid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 29 +++++++++--------- app/controllers/dev_ops/builds_controller.rb | 30 +++++++++---------- .../dev_ops/cloud_accounts_controller.rb | 12 ++++---- .../dev_ops/create_cloud_account_form.rb | 4 +-- 4 files changed, 37 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index e98789b26..8dc5546a3 100644 --- a/README.md +++ b/README.md @@ -2368,7 +2368,7 @@ curl -X POST \ -d "account=xx" \ -d "secret=xxx" \ -d "ip_num=xx.xx.xx.xx" \ --d "repo_id=5988" \ +-d "project_id=5988" \ https://localhost:3000/api/dev_ops/cloud_accounts.json | jq ``` @@ -2379,7 +2379,7 @@ https://localhost:3000/api/dev_ops/cloud_accounts.json | jq |account |是|string |云服务器ssh连接登录用户名 | |secret |是|string |云服务器ssh连接登录秘密 | |ip_num |否|string |云服务器公网IP | -|repo_id |否|string |repository id| +|project_id |否|string |project's id| *返回参数说明:* @@ -2406,14 +2406,14 @@ GET /api/dev_ops/builds/get_trustie_pipeline *示例* ``` curl -X GET \ --d "id=4844" \ +-d "project_id=4844" \ http://localhost:3000/api/dev_ops/builds/get_trustie_pipeline.json | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| -|id |是|int |repository's id | +|project_id |是|int |project's id | |ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | @@ -2421,7 +2421,6 @@ http://localhost:3000/api/dev_ops/builds/get_trustie_pipeline.json | jq |参数名|类型|说明| |-|-|-| -|id |int |id | |name |string|文件夹或文件名称| |path |string|文件夹或文件相对路径| |content |string|文件内容,| @@ -2544,7 +2543,7 @@ GET /api/dev_ops/builds *示例* ``` curl -X GET \ --d 'id=4844' \ +-d 'project_id=4844' \ http://localhost:3000/api/dev_ops/builds | jq ``` @@ -2552,7 +2551,7 @@ http://localhost:3000/api/dev_ops/builds | jq |参数名|必选|类型|说明| |-|-|-|-| -|id |是|int |repository's id | +|project_id |是|int |project's id | *返回参数说明:* @@ -2606,7 +2605,7 @@ GET /api/dev_ops/builds/:number *示例* ``` curl -X GET \ --d 'id=4844' \ +-d 'project_id=4844' \ http://ocalhost:3000/api/dev_ops/builds/1 | jq ``` @@ -2614,7 +2613,7 @@ http://ocalhost:3000/api/dev_ops/builds/1 | jq |参数名|必选|类型|说明| |-|-|-|-| -|id |int|repository's id| +|project_id |int|project's id| |number |是|int |build's number | *返回参数说明:* @@ -2714,7 +2713,7 @@ POST /api/dev_ops/builds/:number *示例* ``` curl -X POST \ --d 'id=4844' \ +-d 'project_id=4844' \ http://localhost:3000/api/dev_ops/builds/1 | jq ``` @@ -2722,7 +2721,7 @@ http://localhost:3000/api/dev_ops/builds/1 | jq |参数名|必选|类型|说明| |-|-|-|-| -|id |int|repository's id| +|project_id |int|project's id| |number |是|int |build's number | *返回参数说明:* @@ -2774,7 +2773,7 @@ DELETE /api/dev_ops/builds/:number *示例* ``` curl -X DELETE \ --d 'id=4844' \ +-d 'project_id=4844' \ http://localhost:3000/api/dev_ops/builds/2 | jq ``` @@ -2782,7 +2781,7 @@ http://localhost:3000/api/dev_ops/builds/2 | jq |参数名|必选|类型|说明| |-|-|-|-| -|id |int|repository's id| +|project_id |int|project's id| |number |是|int |build's number | *返回参数说明:* @@ -2882,7 +2881,7 @@ GET /api/dev_ops/builds/:number/logs/:stage/:step *示例* ``` curl -X GET \ --d 'id=4844' \ +-d 'project_id=4844' \ http://localhost:3000/api/dev_ops/builds/2/logs/1/1 | jq ``` @@ -2890,7 +2889,7 @@ http://localhost:3000/api/dev_ops/builds/2/logs/1/1 | jq |参数名|必选|类型|说明| |-|-|-|-| -|id |int|repository's id| +|project_id |int|project's id| |number |是|int |build's number | |stage |是|int |build's stage number | |step |是|int |build's step number | diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb index b7829c634..72943d7e7 100644 --- a/app/controllers/dev_ops/builds_controller.rb +++ b/app/controllers/dev_ops/builds_controller.rb @@ -1,39 +1,39 @@ -class ::DevOps::BuildsController < ApplicationController +class DevOps::BuildsController < ApplicationController include RepositoriesHelper before_action :require_login - before_action :find_repo + before_action :find_project def index - cloud_account = @repo.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier).builds + cloud_account = @project.dev_ops_cloud_account + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier).builds render json: result end def detail - cloud_account = @repo.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: params[:number]).build + cloud_account = @project.dev_ops_cloud_account + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).build render json: result end def restart - cloud_account = @repo.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: params[:number]).restart + cloud_account = @project.dev_ops_cloud_account + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).restart render json: result end def delete - cloud_account = @repo.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: params[:number]).stop + cloud_account = @project.dev_ops_cloud_account + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).stop render json: result end def logs - cloud_account = @repo.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: params[:number], stage: params[:stage], step: params[:step]).logs + cloud_account = @project.dev_ops_cloud_account + result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, build: params[:number], stage: params[:stage], step: params[:step]).logs render json: result end @@ -41,7 +41,7 @@ class ::DevOps::BuildsController < ApplicationController # get .trustie-pipeline.yml file def get_trustie_pipeline file_path_uri = URI.parse('.trustie-pipeline.yml') - interactor = Repositories::EntriesInteractor.call(@repo.user, @repo.identifier, file_path_uri, ref: params[:ref] || "master") + interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: params[:ref] || "master") if interactor.success? file = interactor.result return render json: {} if file[:status] @@ -52,7 +52,7 @@ class ::DevOps::BuildsController < ApplicationController end private - def find_repo - @repo = ::Repository.find params[:id] + def find_project + @project = Project.find params[:project_id] end end diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index 3d3663cf6..c7c445d88 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -14,13 +14,13 @@ class DevOps::CloudAccountsController < ApplicationController logger.info "######### create_params: #{create_params}" - if cloud_account = @repo.dev_ops_cloud_account + if cloud_account = @project.dev_ops_cloud_account return render_error('该仓库已绑定了云帐号.') else cloud_account = DevOps::CloudAccount.new(create_params) cloud_account.user = current_user - cloud_account.repo_id = @repo.id - cloud_account.project_id = @repo.project.id + cloud_account.repo_id = @project.repository.id + cloud_account.project_id = @project.id cloud_account.save! end @@ -32,7 +32,7 @@ class DevOps::CloudAccountsController < ApplicationController redirect_uri: gitea_oauth['redirect_uris'], gitea_oauth_id: gitea_oauth['id'], user_id: current_user.id, - project_id: @repo.project.id) + project_id: @project.id) oauth.save rpc_secret = SecureRandom.hex 16 @@ -64,10 +64,10 @@ class DevOps::CloudAccountsController < ApplicationController private def devops_params - params.permit(:account, :secret, :ip_num, :repo_id) + params.permit(:account, :secret, :ip_num, :project_id) end def find_project - @repo = Repository.find params[:repo_id] + @project = Project.find params[:project_id] end end diff --git a/app/forms/dev_ops/create_cloud_account_form.rb b/app/forms/dev_ops/create_cloud_account_form.rb index e17edc5ba..2d1752b74 100644 --- a/app/forms/dev_ops/create_cloud_account_form.rb +++ b/app/forms/dev_ops/create_cloud_account_form.rb @@ -1,9 +1,9 @@ class DevOps::CreateCloudAccountForm include ActiveModel::Model - attr_accessor :repo_id, :ip_num, :account, :secret + attr_accessor :project_id, :ip_num, :account, :secret - validates :repo_id, :account, :secret, presence: true + validates :project_id, :account, :secret, presence: true validates :ip_num, presence: true, format: { with: CustomRegexp::IP, multiline: true, message: 'IP 地址格式不对' } end From b7b3751d431c587169a34fd894efdb07b959f611 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 22 Jul 2020 15:16:01 +0800 Subject: [PATCH 058/384] ADD devops authorize --- app/controllers/application_controller.rb | 10 ++++++++-- app/controllers/dev_ops/builds_controller.rb | 1 + .../dev_ops/cloud_accounts_controller.rb | 16 +++++++--------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 68f0b2a48..e97c8ec08 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -342,7 +342,8 @@ class ApplicationController < ActionController::Base elsif params[:debug] == 'student' User.current = User.find 8686 elsif params[:debug] == 'admin' - user = User.find 1 + logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....." + user = User.find 36480 User.current = user cookies.signed[:user_id] = user.id end @@ -384,7 +385,7 @@ class ApplicationController < ActionController::Base def current_user if Rails.env.development? - User.current = User.find 1 + User.current = User.find 36480 else User.current end @@ -743,6 +744,11 @@ class ApplicationController < ActionController::Base interactor.success? ? render_ok : render_error(interactor.error) end + # devops 权限验证 + def devops_authorize! + render_forbidden unless @project.owner?(current_user) + end + private def object_not_found uid_logger("Missing template or cant't find record, responding with 404") diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb index 72943d7e7..2c419ea7d 100644 --- a/app/controllers/dev_ops/builds_controller.rb +++ b/app/controllers/dev_ops/builds_controller.rb @@ -3,6 +3,7 @@ class DevOps::BuildsController < ApplicationController before_action :require_login before_action :find_project + before_action :devops_authorize! def index cloud_account = @project.dev_ops_cloud_account diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index c7c445d88..10cd67bbd 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -1,19 +1,14 @@ class DevOps::CloudAccountsController < ApplicationController before_action :require_login before_action :find_project + before_action :devops_authorize! def create ActiveRecord::Base.transaction do DevOps::CreateCloudAccountForm.new(devops_params).validate! - logger.info "######### devops_params: #{devops_params}" - logger.info "######### ......: #{(IPAddr.new devops_params[:ip_num]).to_i}" - logger.info "######### ......: #{DevOps::CloudAccount.encrypted_secret(devops_params[:secret])}" + # 1. 保存华为云服务器帐号 - logger.info "######### ......ff: #{devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret]))}" create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret])) - logger.info "######### create_params: #{create_params}" - - if cloud_account = @project.dev_ops_cloud_account return render_error('该仓库已绑定了云帐号.') else @@ -37,6 +32,7 @@ class DevOps::CloudAccountsController < ApplicationController rpc_secret = SecureRandom.hex 16 logger.info "######### rpc_secret: #{rpc_secret}" + # 3. 创建drone server drone_server_cmd = DevOps::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd logger.info "######### drone_server_cmd: #{drone_server_cmd}" @@ -52,10 +48,12 @@ class DevOps::CloudAccountsController < ApplicationController redirect_url = "#{cloud_account.drone_url}/login" logger.info "######### redirect_url: #{redirect_url}" - if result + + if result && !result.blank? render_ok(redirect_url: redirect_url) else - render_error('激活失败') + render_error('激活失败, 请检查你的云服务器信息是否正确.') + raise ActiveRecord::Rollback end end rescue Exception => ex From 5d7458bede8991938bc795f16ded55cbd3b74f2d Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Wed, 22 Jul 2020 16:42:55 +0800 Subject: [PATCH 059/384] Add trustie projects projectscore --- app/controllers/users_controller.rb | 5 +- db/seeds.rb | 548 +++++++++++++++++++++++++++- 2 files changed, 551 insertions(+), 2 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index b23f2f0c0..bfaffd508 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -156,13 +156,16 @@ class UsersController < ApplicationController name: p.name, is_public: p.is_public, updated_on: p.updated_on.strftime("%Y-%m-%d"), + status: p.status, + is_member: p.member?(current_user.try(:id)), owner: { name: p.owner.try(:show_real_name), login: p.owner.login }, members_count: p&.members.size, issues_count: p.issues_count - p.pull_requests_count, - commits_count: p&.project_score&.changeset_num.to_i + commits_count: p&.project_score&.changeset_num.to_i, + project_score: p&.project_score&.as_json(:except=>[:created_at, :updated_at]).merge!(commit_time: format_time(p&.project_score&.commit_time)) } projects_json.push(pj) end diff --git a/db/seeds.rb b/db/seeds.rb index c5169d6bb..4d231253b 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -28,4 +28,550 @@ # vod_status: "uploaded", # published_at: nil, # filesize: 14877403 -# } \ No newline at end of file +# } + +# mm = "drwxrwx--- 63 git git 4096 4月 21 18:23 jacknudt +# drwxrws--- 51 git git 4096 4月 21 18:23 linchun +# drwxrwx--- 8 git git 141 4月 21 18:23 jiangdami +# drwxrws--- 10 git git 208 4月 21 18:23 yeshifuo +# drwxrwx--- 6 git git 82 4月 21 18:23 xtom598 +# drwxrwx--- 16 git git 4096 4月 21 18:23 ladventure +# drwxrwx--- 6 git git 89 4月 21 18:23 whcunzhang +# drwxrws--- 8 git git 159 4月 21 18:23 xuzhen +# drwxrws--- 8 git git 159 4月 21 18:23 yinkang +# drwxrws--- 8 git git 164 4月 21 18:23 mingholy +# drwxrws--- 7 git git 142 4月 21 18:23 qiaoyang +# drwxrws--- 6 git git 91 4月 21 18:23 ttskym +# drwxrwx--- 8 git git 167 4月 21 18:23 megan +# drwxrwx--- 7 git git 143 4月 21 18:23 wc +# drwxrwx--- 7 git git 138 4月 21 18:23 kakawei +# drwxrwx--- 9 git git 183 4月 21 18:23 liqing +# drwxrws--- 10 git git 196 4月 21 18:23 zym +# drwxrwx--- 9 git git 218 4月 21 18:23 zengqx +# drwxrws--- 6 git git 102 4月 21 18:23 scuwangjianfei +# drwxrws--- 5 git git 70 4月 21 18:23 wzz +# drwxrwx--- 10 git git 203 4月 21 18:23 yaopan +# drwxrws--- 12 git git 243 4月 21 18:23 lifan +# drwxrwx--- 19 git git 4096 4月 21 18:23 lifu +# drwxrws--- 5 git git 77 4月 21 18:23 tzshede +# drwxrwx--- 2 git git 6 4月 22 14:32 asmallsun +# drwxrwx--- 2 git git 6 4月 22 14:33 cpr123 +# drwxrwx--- 2 git git 6 4月 22 14:51 benny +# drwxrwx--- 2 git git 6 4月 22 14:51 blgwq +# drwxrwx--- 2 git git 6 4月 22 15:02 daijingyi +# drwxrwx--- 2 git git 6 4月 22 16:25 gxm2019112207 +# drwxrwx--- 2 git git 6 4月 22 17:00 Ch1017 +# drwxrwx--- 2 git git 6 4月 22 17:11 future1 +# drwxrwx--- 2 git git 6 4月 22 17:13 flourish +# drwxrwx--- 2 git git 6 4月 22 18:03 Eliauk +# drwxrwx--- 2 git git 6 4月 22 18:38 chenyao333 +# drwxrwx--- 2 git git 6 4月 22 19:23 asdzxc +# drwxrwx--- 2 git git 6 4月 22 19:36 apply +# drwxrwx--- 2 git git 6 4月 22 19:48 Awin +# drwxrwx--- 2 git git 6 4月 22 19:58 fangning +# drwxrwx--- 2 git git 6 4月 22 20:57 DevilLi +# drwxrwx--- 2 git git 6 4月 22 21:07 dengjuan +# drwxrwx--- 2 git git 6 4月 22 22:10 dandelionl +# drwxrwx--- 2 git git 6 4月 23 01:38 a857 +# drwxrwx--- 2 git git 6 4月 23 22:46 Azaurr +# drwxrwx--- 3 git git 21 4月 28 15:33 ALPNAP +# drwxr-xr-x 3 git git 33 4月 28 16:49 jiaozi211 +# drwxr-xr-x 4 git git 54 5月 6 14:33 ff123 +# drwxrwx--- 2 git git 6 5月 7 16:15 anhriuiq +# drwxr-xr-x 4 git git 41 5月 9 09:41 coderfch +# drwxrwx--- 2 git git 6 5月 11 22:52 Ethan4 +# drwxrwx--- 2 git git 6 5月 11 22:57 enable +# drwxrwx--- 2 git git 6 5月 12 12:01 doublecircle +# drwxrwx--- 2 git git 6 5月 12 13:54 gaolongfei +# drwxrwx--- 2 git git 6 5月 12 14:46 crystal0 +# drwxrwx--- 2 git git 6 5月 22 12:47 gujiaxiang +# drwxrwx--- 2 git git 6 5月 22 12:47 Freshwinds +# drwxrwx--- 2 git git 6 5月 22 12:47 atong97 +# drwxrwx--- 2 git git 6 5月 22 12:47 AriesYao +# drwxrwx--- 2 git git 6 5月 29 10:41 Arif +# drwxrwx--- 2 git git 6 5月 30 13:30 druks +# drwxrws--- 5 git git 65 6月 1 19:54 fangquntian +# drwxrwx--- 8 git git 160 6月 9 20:19 qyzh1996 +# drwxrwx--- 2 git git 6 6月 13 11:26 Gany +# drwxrwx--- 3 git git 22 6月 20 23:39 FadePeople +# drwxrwx--- 3 git git 27 6月 24 10:20 xiangliangliang +# drwxrwx--- 2 git git 6 6月 27 11:42 a1s2d3 +# drwxrws--- 4 git git 41 6月 27 16:45 Althur +# drwxrwx--- 2 git git 6 6月 28 05:04 a151811 +# drwxrwx--- 6 git git 77 7月 1 15:01 jiangfeng +# drwxrwx--- 2 git git 6 7月 1 15:03 llha +# drwxr-xr-x 2 git git 6 7月 1 16:36 chris1002 +# drwxrwx--- 2 git git 6 7月 7 13:37 a233 +# drwxrwx--- 2 git git 6 7月 9 14:30 alang +# drwxr-xr-x 4 git git 42 7月 12 21:39 charleszcq +# drwxrws--- 9 git git 198 7月 15 01:44 luojiwen +# drwxrwx--- 9 git git 174 7月 15 01:44 wrm1995 +# drwxrwx--- 4 git git 67 7月 15 01:44 whj +# drwxr-xr-x 3 git git 46 7月 15 01:44 xinwuyaqu +# drwxr-xr-x 3 git git 46 7月 15 01:44 azaurr +# drwxrwx--- 3 git git 46 7月 15 01:44 xpcivelon +# drwxr-xr-x 3 git git 46 7月 15 01:44 wangjichuan +# drwxrwx--- 15 git git 313 7月 15 01:44 hushasha +# drwxr-xr-x 3 git git 46 7月 15 01:44 dreacter +# drwxrwx--- 31 git git 4096 7月 15 01:45 qiubing +# drwxrwx--- 14 git git 237 7月 15 01:45 net +# drwxrwx--- 5 git git 70 7月 15 01:45 zhao2017 +# drwxrws--- 4 git git 47 7月 15 01:45 littlefinger +# drwxrws--- 3 git git 46 7月 15 01:45 vainglory +# drwxr-xr-x 3 git git 46 7月 15 01:45 yk +# drwxr-xr-x 5 git git 76 7月 15 01:45 connolly +# drwxrwx--- 3 git git 46 7月 15 01:45 robin_shaun +# drwxrwx--- 3 git git 46 7月 15 01:45 xunhan +# drwxr-xr-x 3 git git 46 7月 15 01:45 majj +# drwxr-xr-x 3 git git 46 7月 15 01:45 strawer +# drwxr-xr-x 3 git git 46 7月 15 01:45 hyp19991114 +# drwxr-xr-x 3 git git 46 7月 15 01:45 msydoe +# drwxr-xr-x 3 git git 46 7月 15 01:45 sukifly +# drwxr-xr-x 3 git git 46 7月 15 01:45 aning +# drwxr-xr-x 3 git git 46 7月 15 01:45 sansuiqiang +# drwxr-xr-x 3 git git 46 7月 15 01:45 chenhuadust +# drwxr-xr-x 3 git git 46 7月 15 01:45 steph +# drwxr-xr-x 4 git git 86 7月 15 01:45 xusongxu +# drwxr-xr-x 100 git git 4096 7月 15 01:45 hjqreturn +# drwxr-xr-x 3 git git 46 7月 15 01:45 lap123 +# drwxr-xr-x 3 git git 46 7月 15 01:45 aaaaaaries +# drwxr-xr-x 3 git git 46 7月 15 01:45 jiroo +# drwxr-xr-x 3 git git 46 7月 15 01:45 zwhmily +# drwxr-xr-x 3 git git 46 7月 15 01:45 ye0000 +# drwxr-xr-x 3 git git 46 7月 15 01:45 ffnudt +# drwxrwx--- 3 git git 46 7月 15 01:45 madehong +# drwxr-xr-x 4 git git 41 7月 15 01:45 althur +# drwxr-xr-x 7 git git 206 7月 15 01:45 linbojue +# drwxr-xr-x 3 git git 46 7月 15 01:45 kevinl +# drwxrws--- 25 git git 4096 7月 15 01:45 young +# drwxr-xr-x 3 git git 46 7月 15 01:45 mj2333 +# drwxrwx--- 3 git git 46 7月 15 01:45 zhaijianyang +# drwxrws--- 6 git git 127 7月 15 01:45 lexi +# drwxrwx--- 3 git git 46 7月 15 01:45 wangfang1 +# drwxr-xr-x 4 git git 61 7月 15 01:45 alpnap +# drwxrws--- 108 git git 4096 7月 15 01:45 starlee +# drwxrws--- 4 git git 44 7月 15 01:45 zmiracle +# drwxr-xr-x 3 git git 26 7月 15 23:56 hjl4am +# drwxr-xr-x 6 git git 142 7月 15 23:57 fadepeople +# drwxr-xr-x 3 git git 24 7月 16 10:45 wangliang +# drwxr-xr-x 4 git git 55 7月 16 20:24 transcendence +# drwxr-xr-x 2 git git 6 7月 17 14:08 royiwen +# drwxrws--- 4 git git 52 7月 17 18:34 dengxiang +# drwxrws--- 4 git git 44 7月 17 18:34 chykd +# drwxrws--- 4 git git 48 7月 17 18:34 chensen +# drwxrws--- 3 git git 28 7月 17 18:34 buyaolian +# drwxrws--- 3 git git 27 7月 17 18:34 go2school +# drwxrws--- 4 git git 52 7月 17 18:34 doublezhang +# drwxrws--- 3 git git 27 7月 17 18:34 dingyan +# drwxrws--- 6 git git 86 7月 17 18:34 fiona98 +# drwxrws--- 3 git git 27 7月 17 18:34 254282288 +# drwxrws--- 3 git git 33 7月 17 18:34 cs_melody +# drwxrws--- 3 git git 27 7月 17 18:34 446117802 +# drwxrws--- 3 git git 23 7月 17 18:34 296769150 +# drwxrws--- 3 git git 27 7月 17 18:34 flycutter +# drwxrws--- 3 git git 27 7月 17 18:34 645305914 +# drwxrws--- 3 git git 34 7月 17 18:34 brikeylee +# drwxrws--- 13 git git 239 7月 17 18:34 ccccx +# drwxrws--- 4 git git 40 7月 17 18:34 chychenhongyi +# drwxrws--- 4 git git 48 7月 17 18:34 cjw12345 +# drwxrws--- 3 git git 27 7月 17 18:34 chenyi +# drwxrws--- 3 git git 22 7月 17 18:34 gl2013 +# drwxrws--- 5 git git 61 7月 17 18:34 airwings +# drwxrws--- 3 git git 27 7月 17 18:34 blackgod +# drwxrws--- 3 git git 27 7月 17 18:34 bxyybxx +# drwxrws--- 4 git git 47 7月 17 18:34 dushiyin +# drwxrws--- 3 git git 22 7月 17 18:34 dengtengjiao +# drwxrws--- 3 git git 27 7月 17 18:34 aipeng +# drwxrws--- 3 git git 27 7月 17 18:34 gaomali +# drwxrws--- 3 git git 27 7月 17 18:34 chaanyean +# drwxrws--- 3 git git 27 7月 17 18:34 alanlong +# drwxrws--- 5 git git 70 7月 17 18:34 a1508248159 +# drwxrws--- 3 git git 30 7月 17 18:34 gcs122 +# drwxrws--- 4 git git 37 7月 17 18:34 962445223 +# drwxrws--- 5 git git 64 7月 17 18:34 cxhssg0 +# drwxrws--- 5 git git 68 7月 17 18:34 alan +# drwxrws--- 3 git git 27 7月 17 18:34 chenyi123 +# drwxrws--- 3 git git 27 7月 17 18:35 caixiang +# drwxrws--- 5 git git 74 7月 17 18:35 fenghenda +# drwxrws--- 3 git git 27 7月 17 18:35 201509066016 +# drwxrws--- 3 git git 27 7月 17 18:35 dongshuai11 +# drwxrws--- 3 git git 27 7月 17 18:35 745691375 +# drwxrws--- 3 git git 27 7月 17 18:35 crack521 +# drwxrws--- 5 git git 74 7月 17 18:35 demostudent +# drwxrws--- 5 git git 84 7月 17 18:35 girlinmymirror +# drwxrws--- 3 git git 27 7月 17 18:35 baobao44 +# drwxrws--- 4 git git 36 7月 17 18:35 2013551828 +# drwxrws--- 3 git git 27 7月 17 18:35 chenzhongwei15 +# drwxrws--- 4 git git 48 7月 17 18:35 chen834768 +# drwxrws--- 3 git git 27 7月 17 18:35 explorer +# drwxrws--- 7 git git 143 7月 17 18:35 fool +# drwxrws--- 3 git git 27 7月 17 18:35 561513726 +# drwxrws--- 3 git git 27 7月 17 18:35 dengxuelei11 +# drwxrws--- 5 git git 73 7月 17 18:35 cjy19951215 +# drwxrws--- 4 git git 47 7月 17 18:35 123txy +# drwxrws--- 3 git git 27 7月 17 18:35 201206020025 +# drwxrws--- 7 git git 134 7月 17 18:35 bingxia +# drwxrws--- 4 git git 52 7月 17 18:35 alin3217 +# drwxrwx--- 3 git git 27 7月 17 18:35 a45678 +# drwxrws--- 3 git git 27 7月 17 18:35 1012159603 +# drwxrws--- 7 git git 112 7月 17 18:35 chancy +# drwxrws--- 3 git git 27 7月 17 18:35 duanguangjun +# drwxrws--- 5 git git 97 7月 17 18:35 b411763600 +# drwxrws--- 3 git git 24 7月 17 18:35 fzddtc +# drwxrws--- 3 git git 27 7月 17 18:35 dingdong +# drwxrws--- 3 git git 27 7月 17 18:35 gebinbin +# drwxrwx--- 3 git git 27 7月 17 18:35 ash123 +# drwxrws--- 16 git git 4096 7月 17 18:35 chenming85 +# drwxrws--- 3 git git 27 7月 17 18:35 guocheng08 +# drwxrws--- 4 git git 47 7月 17 18:35 201206021009 +# drwxrws--- 4 git git 42 7月 17 18:35 ccrystal +# drwxrws--- 3 git git 27 7月 17 18:35 1455182184 +# drwxrws--- 4 git git 58 7月 17 18:35 fox +# drwxrws--- 4 git git 52 7月 17 18:35 chenbotao +# drwxrws--- 3 git git 22 7月 17 18:35 dongguochao +# drwxrws--- 3 git git 20 7月 17 18:35 dmucms +# drwxrws--- 3 git git 33 7月 17 18:35 cuili +# drwxrwx--- 3 git git 27 7月 17 18:35 h7777777 +# drwxrws--- 3 git git 24 7月 17 18:35 fengying +# drwxrws--- 3 git git 27 7月 17 18:37 chenchunyu11 +# drwxrws--- 3 git git 27 7月 17 18:37 axiaobi +# drwxrws--- 3 git git 27 7月 17 18:37 292850825 +# drwxrws--- 3 git git 22 7月 17 18:37 can_be_used +# drwxrws--- 5 git git 82 7月 17 18:37 201528014227051 +# drwxrws--- 4 git git 48 7月 17 18:37 biggerbrain +# drwxrws--- 4 git git 52 7月 17 18:37 adjecverb +# drwxrws--- 5 git git 73 7月 17 18:37 dr1dr1dr1 +# drwxrws--- 3 git git 27 7月 17 18:37 delete +# drwxrws--- 4 git git 50 7月 17 18:37 546251617 +# drwxrws--- 3 git git 27 7月 17 18:37 gaoang +# drwxrws--- 3 git git 27 7月 17 18:37 ace1one +# drwxrws--- 3 git git 22 7月 17 18:37 28376149 +# drwxrwx--- 4 git git 60 7月 17 18:37 cuicuo +# drwxrws--- 3 git git 27 7月 17 18:37 141 +# drwxrws--- 5 git git 68 7月 17 18:37 chenshengling +# drwxrws--- 6 git git 88 7月 17 18:37 1010041109 +# drwxrws--- 3 git git 27 7月 17 18:37 201109060047 +# drwxrws--- 4 git git 54 7月 17 18:37 gy_way +# drwxrws--- 3 git git 27 7月 17 18:37 cryhnuc +# drwxrws--- 3 git git 27 7月 17 18:38 gnleaf +# drwxrws--- 3 git git 27 7月 17 18:38 15066082 +# drwxrws--- 7 git git 138 7月 17 18:38 a1979468 +# drwxrws--- 13 git git 225 7月 17 18:38 389370191 +# drwxrws--- 5 git git 61 7月 17 18:38 goneaway +# drwxrws--- 3 git git 27 7月 17 18:38 2013551629 +# drwxrws--- 4 git git 48 7月 17 18:38 fstdy +# drwxrws--- 4 git git 42 7月 17 18:38 201206043011 +# drwxrws--- 3 git git 21 7月 17 18:38 987654321 +# drwxrws--- 6 git git 88 7月 17 18:38 billcode +# drwxrws--- 4 git git 48 7月 17 18:38 1150478143 +# drwxrws--- 4 git git 48 7月 17 18:38 guohaotian +# drwxrws--- 3 git git 27 7月 17 18:38 ellen +# drwxrws--- 10 git git 254 7月 17 18:38 cgao +# drwxrws--- 4 git git 52 7月 17 18:38 changyan17 +# drwxrws--- 3 git git 27 7月 17 18:38 201109062119 +# drwxrws--- 3 git git 27 7月 17 18:38 chenxuanying +# drwxrws--- 6 git git 101 7月 17 18:38 crazyitman +# drwxrws--- 3 git git 27 7月 17 18:38 a5661390 +# drwxrws--- 8 git git 123 7月 17 18:38 cashewnut +# drwxrws--- 4 git git 52 7月 17 18:38 fuxinjiang +# drwxrwx--- 3 git git 27 7月 17 18:38 fuxiang +# drwxrws--- 3 git git 21 7月 17 18:38 gejian +# drwxrws--- 3 git git 27 7月 17 18:38 2013551712 +# drwxrws--- 3 git git 27 7月 17 18:38 gyy0104 +# drwxrwx--- 8 git git 129 7月 17 18:38 bufeibufei +# drwxrws--- 7 git git 122 7月 17 18:38 binling +# drwxrws--- 7 git git 132 7月 17 18:38 199395 +# drwxrws--- 3 git git 27 7月 17 18:38 berg +# drwxrws--- 4 git git 49 7月 17 18:38 201528016029011 +# drwxrws--- 5 git git 69 7月 17 18:38 caoyuan +# drwxrws--- 3 git git 27 7月 17 18:38 clavichord93 +# drwxrws--- 5 git git 71 7月 17 18:38 fansijiang +# drwxrws--- 4 git git 52 7月 17 18:38 chentong +# drwxrws--- 7 git git 91 7月 17 18:38 gaoyongzhan +# drwxrws--- 6 git git 85 7月 17 18:38 201509066020 +# drwxrws--- 6 git git 89 7月 17 18:38 aca16 +# drwxrws--- 5 git git 77 7月 17 18:38 deland99 +# drwxrws--- 3 git git 22 7月 17 18:38 doommerchant +# drwxrws--- 8 git git 157 7月 17 18:38 coder +# drwxrws--- 3 git git 27 7月 17 18:38 godwetrust +# drwxrws--- 3 git git 27 7月 17 18:38 gyang973256 +# drwxrws--- 4 git git 43 7月 17 18:38 caoshujin001 +# drwxrws--- 10 git git 205 7月 17 18:38 chensiyuan15 +# drwxrws--- 9 git git 134 7月 17 18:39 aqsxdefv +# drwxrws--- 3 git git 25 7月 17 18:39 darkuniverse +# drwxrws--- 4 git git 48 7月 17 18:39 201409062123 +# drwxrws--- 3 git git 27 7月 17 18:39 gwyneth1818 +# drwxrws--- 4 git git 48 7月 17 18:39 crazyyd +# drwxrws--- 3 git git 27 7月 17 18:39 2013551820 +# drwxrws--- 5 git git 69 7月 17 18:39 a111 +# drwxrws--- 3 git git 27 7月 17 18:39 950727 +# drwxrws--- 5 git git 73 7月 17 18:39 baohb +# drwxrws--- 7 git git 143 7月 17 18:39 caojiaxin +# drwxrws--- 3 git git 27 7月 17 18:39 1017 +# drwxrws--- 10 git git 174 7月 17 18:39 chenpeng15 +# drwxrws--- 6 git git 84 7月 17 18:39 damid +# drwxrws--- 3 git git 27 7月 17 18:39 big +# drwxrws--- 6 git git 101 7月 17 18:39 201528015029001 +# drwxrws--- 3 git git 27 7月 17 18:39 fyzhang +# drwxrws--- 3 git git 23 7月 17 18:39 547618026 +# drwxrws--- 14 git git 257 7月 17 18:39 demouser +# drwxrws--- 6 git git 84 7月 17 18:39 daguocai +# drwxrws--- 3 git git 25 7月 17 18:39 cxw931012 +# drwxrws--- 4 git git 66 7月 17 18:39 2013551823 +# drwxrws--- 3 git git 21 7月 17 18:39 fccccc +# drwxrws--- 8 git git 133 7月 17 18:39 chishuqi +# drwxrwx--- 3 git git 27 7月 17 18:39 csuzxa +# drwxrws--- 5 git git 87 7月 17 18:39 ghlozyx +# drwxrws--- 5 git git 73 7月 17 18:39 201618004133060 +# drwxrws--- 4 git git 51 7月 17 18:39 goujian +# drwxrws--- 7 git git 111 7月 17 18:39 code_monkey +# drwxrws--- 3 git git 27 7月 17 18:39 cuijingyong +# drwxrws--- 9 git git 139 7月 17 18:39 caochen +# drwxrws--- 3 git git 23 7月 17 18:39 bb411763600 +# drwxrws--- 6 git git 103 7月 17 18:39 cyberdb +# drwxrws--- 9 git git 159 7月 17 18:39 cookie +# drwxrws--- 7 git git 127 7月 17 18:39 chener +# drwxrws--- 3 git git 34 7月 17 18:39 ghostsys +# drwxrwx--- 3 git git 31 7月 17 18:39 1246299550 +# drwxrws--- 3 git git 25 7月 17 18:39 caicaiyan +# drwxrws--- 5 git git 78 7月 17 18:39 difanyi +# drwxrws--- 3 git git 27 7月 17 18:39 chilin +# drwxrws--- 4 git git 44 7月 17 18:39 fiona_w +# drwxrws--- 3 git git 27 7月 17 18:39 guwenkai +# drwxrws--- 3 git git 27 7月 17 18:39 guoziyang +# drwxrwx--- 3 git git 27 7月 17 18:39 gf457832386 +# drwxrws--- 5 git git 67 7月 17 18:39 dangzhiteng +# drwxrws--- 4 git git 48 7月 17 18:40 chenmengxiao +# drwxrws--- 8 git git 137 7月 17 18:40 dianer123 +# drwxrws--- 24 git git 4096 7月 17 18:40 guange +# drwxrws--- 8 git git 138 7月 17 18:40 fhx569287825 +# drwxrws--- 11 git git 210 7月 17 18:40 daiao +# drwxrws--- 6 git git 90 7月 17 18:40 changxuefeng +# drwxrws--- 3 git git 27 7月 17 18:40 ceaserz +# drwxrws--- 3 git git 27 7月 17 18:40 c0411034 +# drwxrws--- 6 git git 84 7月 17 18:40 asdypeij +# drwxrws--- 3 git git 25 7月 17 18:40 bin5220 +# drwxrws--- 4 git git 56 7月 17 18:40 brucexiajun +# drwxrws--- 3 git git 27 7月 17 18:40 emon +# drwxrws--- 10 git git 154 7月 17 18:40 chazhidao +# drwxrws--- 3 git git 27 7月 17 18:40 dengding +# drwxrwx--- 4 git git 49 7月 17 18:40 bufeibufeibufei +# drwxrws--- 3 git git 24 7月 17 18:40 dsy6 +# drwxrws--- 4 git git 52 7月 17 18:40 changxiaoning +# drwxrws--- 3 git git 27 7月 17 18:40 chenyanrong +# drwxrws--- 5 git git 64 7月 17 18:40 buaaxzl +# drwxrws--- 5 git git 68 7月 17 18:40 fuyou2017 +# drwxrws--- 12 git git 203 7月 17 18:40 baiyu +# drwxrws--- 6 git git 90 7月 17 18:40 1430297883 +# drwxrws--- 3 git git 27 7月 17 18:40 1771306659 +# drwxrws--- 3 git git 27 7月 17 18:40 binhai.feng +# drwxrwx--- 6 git git 96 7月 17 18:40 gtt301617 +# drwxrws--- 3 git git 24 7月 17 18:40 chentao12a +# drwxrws--- 6 git git 139 7月 17 18:40 duweijing +# drwxrws--- 3 git git 27 7月 17 18:40 1508090032 +# drwxrws--- 5 git git 72 7月 17 18:40 dvhfb +# drwxrws--- 70 git git 4096 7月 17 18:40 root +# drwxrws--- 4 git git 43 7月 17 18:40 aa411763600 +# drwxrws--- 6 git git 97 7月 17 18:40 chenmengwen +# drwxrws--- 3 git git 27 7月 17 18:40 danger +# drwxrws--- 14 git git 228 7月 17 18:41 bingningning21 +# drwxrws--- 13 git git 302 7月 17 18:41 gcm3651 +# drwxrws--- 3 git git 27 7月 17 18:41 fengyuansun +# drwxrws--- 10 git git 182 7月 17 18:41 173280609 +# drwxrws--- 29 git git 4096 7月 17 18:41 gyiang +# drwxrws--- 10 git git 173 7月 17 18:41 evak110 +# drwxrws--- 3 git git 27 7月 17 18:41 bjhit +# drwxrws--- 4 git git 52 7月 17 18:41 guowenli +# drwxrws--- 3 git git 27 7月 17 18:41 feivo +# drwxrws--- 4 git git 48 7月 17 18:41 gdfly +# drwxrws--- 5 git git 79 7月 17 18:41 2272437706 +# drwxrwx--- 5 git git 75 7月 17 18:41 aaloneisland +# drwxrws--- 8 git git 128 7月 17 18:41 ddddsd +# drwxrws--- 7 git git 100 7月 17 18:41 fanguangsheng +# drwxrws--- 9 git git 146 7月 17 18:41 chehuimin +# drwxrws--- 21 git git 4096 7月 17 18:41 forge01 +# drwxrws--- 3 git git 27 7月 17 18:42 almkaiser +# drwxrws--- 6 git git 106 7月 17 18:42 ghlozyx2016 +# drwxrws--- 3 git git 27 7月 17 18:42 baozidexieqiao +# drwxrws--- 4 git git 46 7月 17 18:42 eef +# drwxrws--- 14 git git 254 7月 17 18:42 gayeep +# drwxrws--- 7 git git 111 7月 17 18:42 chenhuifeng +# drwxrws--- 3 git git 29 7月 17 18:49 coosa0 +# drwxrwx--- 54 git git 4096 7月 17 18:49 a411763600 +# drwxrws--- 10 git git 184 7月 17 18:51 cxt +# drwxrwx--- 4 git git 70 7月 17 18:51 feng3 +# drwxrws--- 7 git git 109 7月 17 18:51 chensha +# drwxrwx--- 58 git git 4096 7月 18 16:50 wangtao +# drwxrwx--- 3 git git 26 7月 18 19:24 gulian +# drwxr-xr-x 13 git git 252 7月 20 14:15 sylorhuang +# drwxrws--- 5 git git 64 7月 20 16:24 lqchen +# drwxrwx--- 3 git git 28 7月 20 16:44 primenumber +# drwxrws--- 23 git git 4096 7月 21 11:23 jasder" + +# nn = "drwxrwx--- 2 git git 4096 4月 20 10:31 ljxin559 +# drwxrwx--- 2 git git 4096 4月 21 20:21 liumeixi +# drwxrwx--- 2 git git 4096 4月 22 09:52 jiangke +# drwxrwx--- 2 git git 4096 4月 22 14:30 tanyu +# drwxrwx--- 2 git git 4096 4月 22 14:31 mazhihui +# drwxrwx--- 2 git git 4096 4月 22 14:32 asmallsun +# drwxrwx--- 2 git git 4096 4月 22 14:33 cpr123 +# drwxrwx--- 2 git git 4096 4月 22 14:44 zlyy +# drwxrwx--- 2 git git 4096 4月 22 14:44 qdl2019112120 +# drwxrwx--- 2 git git 4096 4月 22 14:46 xtzslx +# drwxrwx--- 2 git git 4096 4月 22 14:48 zhangsiyu +# drwxrwx--- 2 git git 4096 4月 22 14:48 yourjuly +# drwxrwx--- 2 git git 4096 4月 22 14:51 benny +# drwxrwx--- 2 git git 4096 4月 22 14:51 blgwq +# drwxrwx--- 2 git git 4096 4月 22 14:54 xlszd +# drwxrwx--- 2 git git 4096 4月 22 15:00 liyuan929 +# drwxrwx--- 2 git git 4096 4月 22 15:01 kuangmx +# drwxrwx--- 2 git git 4096 4月 22 15:02 daijingyi +# drwxrwx--- 2 git git 4096 4月 22 15:03 LXQ098 +# drwxrwx--- 2 git git 4096 4月 22 15:04 mlhlzds +# drwxrwx--- 2 git git 4096 4月 22 15:30 Yesene +# drwxrwx--- 2 git git 4096 4月 22 16:17 Lauv.luziyi +# drwxrwx--- 2 git git 4096 4月 22 16:21 lyw2019112215 +# drwxrwx--- 2 git git 4096 4月 22 16:25 gxm2019112207 +# drwxrwx--- 2 git git 4096 4月 22 16:27 PuCC +# drwxrwx--- 2 git git 4096 4月 22 16:27 ty12 +# drwxrwx--- 2 git git 4096 4月 22 16:31 paradiseling +# drwxrwx--- 2 git git 4096 4月 22 16:32 sjy22 +# drwxrwx--- 2 git git 4096 4月 22 16:33 Surong +# drwxrwx--- 2 git git 4096 4月 22 17:00 Ch1017 +# drwxrwx--- 2 git git 4096 4月 22 17:08 ZQLIN +# drwxrwx--- 2 git git 4096 4月 22 17:08 lxylxy +# drwxrwx--- 2 git git 4096 4月 22 17:09 hzz010806 +# drwxrwx--- 2 git git 4096 4月 22 17:11 future1 +# drwxrwx--- 2 git git 4096 4月 22 17:13 flourish +# drwxrwx--- 2 git git 4096 4月 22 17:13 rainbow00 +# drwxrwx--- 2 git git 4096 4月 22 17:14 lxh11 +# drwxrwx--- 2 git git 4096 4月 22 17:18 orange0416 +# drwxrwx--- 2 git git 4096 4月 22 17:18 yanyan778 +# drwxrwx--- 2 git git 4096 4月 22 17:20 sweetheart +# drwxrwx--- 2 git git 4096 4月 22 18:03 Eliauk +# drwxrwx--- 2 git git 4096 4月 22 18:28 Homie +# drwxrwx--- 2 git git 4096 4月 22 18:38 chenyao333 +# drwxrwx--- 2 git git 4096 4月 22 18:39 zxy42 +# drwxrwx--- 2 git git 4096 4月 22 19:22 wsqq +# drwxrwx--- 2 git git 4096 4月 22 19:23 asdzxc +# drwxrwx--- 2 git git 4096 4月 22 19:36 apply +# drwxrwx--- 2 git git 4096 4月 22 19:48 Awin +# drwxrwx--- 2 git git 4096 4月 22 19:58 fangning +# drwxrwx--- 2 git git 4096 4月 22 20:10 Ther +# drwxrwx--- 2 git git 4096 4月 22 20:15 mrtber +# drwxrwx--- 2 git git 4096 4月 22 20:27 lijing7 +# drwxrwx--- 2 git git 4096 4月 22 20:28 zlp11 +# drwxrwx--- 2 git git 4096 4月 22 20:36 ky4209241005 +# drwxrwx--- 2 git git 4096 4月 22 20:57 DevilLi +# drwxrwx--- 2 git git 4096 4月 22 21:04 Jujubo +# drwxrwx--- 2 git git 4096 4月 22 21:07 dengjuan +# drwxrwx--- 2 git git 4096 4月 22 22:10 dandelionl +# drwxrwx--- 2 git git 4096 4月 22 22:49 zerorain +# drwxrwx--- 2 git git 4096 4月 23 01:38 a857 +# drwxrwx--- 2 git git 4096 4月 23 10:20 zy000 +# drwxrwx--- 2 git git 4096 4月 23 18:54 jyhhhh +# drwxrwx--- 2 git git 4096 4月 23 22:46 Azaurr +# drwxrwx--- 2 git git 4096 4月 24 14:02 Mical +# drwxrwx--- 2 git git 4096 4月 24 21:20 rowoon +# drwxrwx--- 2 git git 4096 4月 27 11:39 sjsj +# drwxrwx--- 2 git git 4096 4月 29 16:03 lu1712921837 +# drwxrwx--- 2 git git 4096 5月 7 16:15 anhriuiq +# drwxrws--- 25 git git 4096 5月 10 15:48 qiubing +# drwxrwx--- 2 git git 4096 5月 10 19:35 wyy100425 +# drwxrwx--- 2 git git 4096 5月 11 16:41 Karryk +# drwxrwx--- 2 git git 4096 5月 11 22:03 Sukifly +# drwxrwx--- 2 git git 4096 5月 11 22:19 shiluo +# drwxrwx--- 2 git git 4096 5月 11 22:52 Ethan4 +# drwxrwx--- 2 git git 4096 5月 11 22:57 enable +# drwxrwx--- 2 git git 4096 5月 12 10:51 songcheng123 +# drwxrwx--- 2 git git 4096 5月 12 12:01 doublecircle +# drwxrwx--- 2 git git 4096 5月 12 13:54 gaolongfei +# drwxrwx--- 2 git git 4096 5月 12 14:46 crystal0 +# drwxrws--- 20 git git 4096 5月 13 15:16 guange +# drwxrwx--- 2 git git 4096 5月 13 16:45 sxyzxd +# drwxrws--- 68 git git 4096 5月 14 11:10 root +# drwxrws--- 7 git git 4096 5月 15 08:54 net +# drwxrwx--- 2 git git 4096 5月 19 11:29 ma_shijuan +# drwxrwx--- 4 git git 4096 5月 20 10:57 hjl4am +# drwxrws--- 110 git git 4096 5月 20 11:08 Hjqreturn +# drwxrwx--- 3 git git 4096 5月 22 12:47 gtt301617 +# drwxrwx--- 2 git git 4096 5月 22 12:47 gujiaxiang +# drwxrwx--- 2 git git 4096 5月 22 12:47 woody13 +# drwxrwx--- 2 git git 4096 5月 22 12:47 Freshwinds +# drwxrwx--- 2 git git 4096 5月 22 12:47 atong97 +# drwxrwx--- 2 git git 4096 5月 22 12:47 AriesYao +# drwxrwx--- 2 git git 4096 5月 25 11:41 q527100546 +# drwxrws--- 4 git git 4096 5月 28 08:51 littlefinger +# drwxrws--- 9 git git 4096 5月 28 08:54 caochen +# drwxrws--- 4 git git 4096 5月 28 14:31 zhao2017 +# drwxrws--- 5 git git 4096 5月 29 10:41 kedai +# drwxrwx--- 2 git git 4096 5月 29 10:41 Arif +# drwxrwx--- 2 git git 4096 5月 29 10:41 Zhanglllfh +# drwxrws--- 6 git git 4096 5月 29 15:02 wrm1995 +# drwxrwx--- 2 git git 4096 5月 30 13:30 druks +# drwxrwx--- 2 git git 4096 5月 31 18:13 syw11806 +# drwxrws--- 5 git git 4096 6月 1 19:54 fangquntian +# drwxrwx--- 2 git git 4096 6月 2 11:43 zwk132613 +# drwxrwx--- 2 git git 4096 6月 3 09:44 panxiaosheng +# drwxrwx--- 2 git git 4096 6月 4 13:38 xiejianxiong +# drwxrwx--- 2 git git 4096 6月 5 14:00 yubaolun +# drwxrwx--- 2 git git 4096 6月 5 15:38 xinyao +# drwxrwx--- 2 git git 4096 6月 10 10:43 Racine +# drwxrwx--- 2 git git 4096 6月 10 19:58 VNJia +# drwxrwx--- 2 git git 4096 6月 13 11:26 Gany +# drwxrwx--- 2 git git 4096 6月 18 00:35 huojiajia +# drwxrwx--- 3 git git 4096 6月 20 23:39 FadePeople +# drwxrwx--- 12 git git 4096 6月 21 13:26 a411763600 +# drwxrws--- 8 git git 4096 6月 24 10:29 nudtpc +# drwxrwx--- 2 git git 4096 6月 24 10:29 zyq744 +# drwxrwx--- 2 git git 4096 6月 24 10:29 gf457832386 +# drwxrwx--- 2 git git 4096 6月 25 23:21 wslb +# drwxrwx--- 2 git git 4096 6月 27 11:42 a1s2d3 +# drwxrws--- 4 git git 4096 6月 27 16:45 Althur +# drwxrwx--- 2 git git 4096 6月 28 05:04 a151811 +# drwxrwx--- 2 git git 4096 7月 4 23:00 iwce +# drwxrwx--- 2 git git 4096 7月 7 13:37 a233 +# drwxrws--- 10 git git 4096 7月 7 16:28 SylorHuang +# drwxrwx--- 3 git git 4096 7月 9 14:30 wangliang +# drwxrwx--- 2 git git 4096 7月 9 14:30 MartinYuan +# drwxrwx--- 2 git git 4096 7月 9 14:30 alang +# drwxrwx--- 2 git git 4096 7月 9 15:57 MeMsc +# drwxrws--- 77 git git 4096 7月 10 09:11 starlee +# drwxrwx--- 2 git git 4096 7月 10 22:30 tmzg +# drwxrws--- 4 git git 4096 7月 11 02:23 zmiracle +# drwxrwx--- 3 git git 4096 7月 12 10:31 aaloneisland +# drwxrwx--- 2 git git 4096 7月 13 11:13 yuwei2005 +# drwxrws--- 10 git git 4096 7月 13 17:41 hushasha +# drwxrwx--- 2 git git 4096 7月 13 17:41 Royiwen +# drwxrwx--- 2 git git 4096 7月 13 17:41 liudong +# drwxrwx--- 2 git git 4096 7月 13 17:41 luliliang +# drwxrwx--- 2 git git 4096 7月 13 17:41 LDOU +# drwxrwx--- 2 git git 4096 7月 13 17:41 LoveSeed +# drwxrwx--- 2 git git 4096 7月 13 17:41 yangxiong +# drwxrwx--- 2 git git 4096 7月 17 10:37 luosuo10 +# drwxrwx--- 2 git git 4096 7月 17 14:28 yuxianger +# drwxrwx--- 2 git git 4096 7月 18 09:44 luoshaoshuai +# drwxrwx--- 2 git git 4096 7月 18 09:46 wl17862708856 +# drwxrwx--- 2 git git 4096 7月 18 09:48 JSYNWY +# drwxrwx--- 2 git git 4096 7月 18 09:48 fzp01 +# drwxrwx--- 2 git git 4096 7月 18 09:53 mumuou +# drwxrwx--- 2 git git 4096 7月 18 09:58 guojiabao +# drwxrwx--- 2 git git 4096 7月 18 09:58 swcstudy +# drwxrwx--- 2 git git 4096 7月 18 10:01 zhanglong4567 +# drwxrwx--- 2 git git 4096 7月 18 10:01 lipeng15 +# drwxrwx--- 2 git git 4096 7月 18 10:10 lixiong19 +# drwxrwx--- 2 git git 4096 7月 18 10:11 hhhh849 +# drwxrwx--- 2 git git 4096 7月 18 10:14 zhazha +# drwxrwx--- 2 git git 4096 7月 18 10:16 lizhenyi08 +# drwxrwx--- 2 git git 4096 7月 18 10:57 guorunze14 +# drwxrwx--- 2 git git 4096 7月 20 10:40 JavaClass +# drwxrwx--- 4 git git 4096 7月 20 10:47 ALPNAP" + +# m_array = nn.split("\n") +# n_array = [] +# m_array.each do |a| +# s = a.split(" ").last +# puts s+"," +# end + +# puts n_array.to_s \ No newline at end of file From 0b9a69ec56b4fd20e9b75862e8ba7b37100bd794 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 24 Jul 2020 15:35:43 +0800 Subject: [PATCH 060/384] ADD sha for get trsitie-pileline.yml file api --- README.md | 1 + app/controllers/dev_ops/builds_controller.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8dc5546a3..1013d6f95 100644 --- a/README.md +++ b/README.md @@ -2429,6 +2429,7 @@ http://localhost:3000/api/dev_ops/builds/get_trustie_pipeline.json | jq { "name": ".trustie-pipeline.yml", "path": ".trustie-pipeline.yml", + "sha": "548sfefsafef48sf485s4f", "content": "..jsaf" } ``` diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb index 2c419ea7d..8cbb48e35 100644 --- a/app/controllers/dev_ops/builds_controller.rb +++ b/app/controllers/dev_ops/builds_controller.rb @@ -47,7 +47,7 @@ class DevOps::BuildsController < ApplicationController file = interactor.result return render json: {} if file[:status] - json = {name: file['name'], path: file['path'], content: render_decode64_content(file['content'])} + json = {name: file['name'], path: file['path'], sha: file['sha'], content: render_decode64_content(file['content'])} render json: json end end From 69ea60dfd55d845bb8e16cd46bf2dfb006948ea1 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 6 Aug 2020 14:26:19 +0800 Subject: [PATCH 061/384] FIX update devops process --- README.md | 112 ++++++++++++++++++ app/controllers/application_controller.rb | 5 - app/controllers/concerns/devopsable.rb | 32 +++++ .../dev_ops/cloud_accounts_controller.rb | 32 +++-- .../dev_ops/languages_controller.rb | 1 + app/controllers/users_controller.rb | 19 ++- app/libs/dev_ops/drone/ci.rb | 2 +- app/libs/dev_ops/drone/server.rb | 23 +++- app/models/concerns/droneable.rb | 29 +++++ app/models/user.rb | 13 +- app/views/users/devops.json.jbuilder | 12 ++ app/views/users/get_user_info.json.jbuilder | 3 +- config/routes.rb | 11 +- ...20200731073851_add_devops_step_to_users.rb | 5 + 14 files changed, 276 insertions(+), 23 deletions(-) create mode 100644 app/controllers/concerns/devopsable.rb create mode 100644 app/models/concerns/droneable.rb create mode 100644 app/views/users/devops.json.jbuilder create mode 100644 db/migrate/20200731073851_add_devops_step_to_users.rb diff --git a/README.md b/README.md index 1013d6f95..8a6ada33d 100644 --- a/README.md +++ b/README.md @@ -2357,6 +2357,51 @@ http://localhost:3000/api//api/repositories/3868/delete_file | jq ### DevOps相关api --- +#### 获取devops流程步骤(判断devops是否初始化) +``` +GET /api/users/devops +``` + +*示例* +``` +curl -X GET \ +-d "project_id=5988" \ +https://localhost:3000/api/users/devops.json | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|project_id |是|string |项目id或者项目的标识identifier| + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|step |int|初始化devops流程步骤; 0: 标识未开启devops,1: 标识用户已填写了云服务器相关信息,但并未开启认证, 2: 标识用户已开启了CI服务端的认证, 3: 标识用户已经授权并获取了CI服务的token| +|account |string|你的云服务器帐号| +|ip |string|你的云服务器帐号ip| +|secret |string|你的云服务器登录密码| +|authenticate_url |string|devops授权认证地址, 只有填写了服务器相关信息后才会有该地址| +|get_drone_token_url |string|获取CI服务端token地址, 只有认证成功后才会有该地址| + +返回值 +```json +{ + "step": 0, + "cloud_account": { + "id": 1, + "account": "xxx", + "ip": "xxx.xxx.xxx.x", + "secret": "11111", + "authenticate_url": "http://localhost:3000/login", + "get_drone_token_url": "http://localhost:3000/account" + } +} +``` +--- + #### 初始化DevOps流程 ``` POST /api/dev_ops/cloud_accounts @@ -2399,6 +2444,72 @@ https://localhost:3000/api/dev_ops/cloud_accounts.json | jq ``` --- +#### 用户认证CI服务端后,需要调用该接口进行更新devlops流程状态 +``` +PUT /api/users/devops_authenticate +``` +*示例* +``` +curl -X PUT \ +-d "project_id=5988" \ +http://localhost:3000/api/users/devops_authenticate.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|project_id |是|string |项目id或者项目的标识identifier| + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:成功, -1: 失败| + +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +#### 激活项目 +``` +POST /api/dev_ops/cloud_accounts/:id/activate +``` +*示例* +``` +curl -X POST \ +-d "id=1" \ +-d "project_id=4844" \ +-d "drone_token=xxxxxxxxxx" \ +http://localhost:3000/api/dev_ops/cloud_accounts/1/activate.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|project_id |是|int |project's id or identifier | +|id |是|int |cloud_account's id | +|drone_token |否|string |CI端用户的token值,只有当用户第一次激活时,才需要填写该值 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:成功, -1: 失败| + +``` +{ + "status": 0, + "message": "success" +} +``` +--- + #### 获取仓库的.trustie-pipeline.yml ``` GET /api/dev_ops/builds/get_trustie_pipeline @@ -2433,6 +2544,7 @@ http://localhost:3000/api/dev_ops/builds/get_trustie_pipeline.json | jq "content": "..jsaf" } ``` +--- #### 获取语言列表 ``` diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index e97c8ec08..9cb23ab2d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -744,11 +744,6 @@ class ApplicationController < ActionController::Base interactor.success? ? render_ok : render_error(interactor.error) end - # devops 权限验证 - def devops_authorize! - render_forbidden unless @project.owner?(current_user) - end - private def object_not_found uid_logger("Missing template or cant't find record, responding with 404") diff --git a/app/controllers/concerns/devopsable.rb b/app/controllers/concerns/devopsable.rb new file mode 100644 index 000000000..43828fd22 --- /dev/null +++ b/app/controllers/concerns/devopsable.rb @@ -0,0 +1,32 @@ +module Devopsable + extend ActiveSupport::Concern + + included do + end + + # devops 权限验证 + def devops_authorize! + render_forbidden unless @project.owner?(current_user) + end + + def auto_load_project + @project = Project.find_by(id: params[:project_id]) || Project.find_by(identifier: params[:project_id]) + render_not_found('未找到相关的项目') if @project.blank? + end + + # TODO 暂时限制项目拥有者才有权限操作 + def limit_owner_can_devops!(user) + return if @project.owner? user + render_forbidden + end + + def find_cloud_account + @cloud_account = DevOps::CloudAccount.find params[:id] + end + + def set_drone_token!(user, cloud_account, drone_token) + return if user.devops_has_token? + cloud_account.update_column(:drone_token, drone_token) + user.set_drone_step!(User::DEVOPS_HAS_TOKEN) + end +end diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index 10cd67bbd..d2e849eb5 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -1,7 +1,10 @@ class DevOps::CloudAccountsController < ApplicationController + include Devopsable + before_action :require_login - before_action :find_project + before_action :auto_load_project before_action :devops_authorize! + before_action :find_cloud_account, only: %i[activate] def create ActiveRecord::Base.transaction do @@ -14,8 +17,6 @@ class DevOps::CloudAccountsController < ApplicationController else cloud_account = DevOps::CloudAccount.new(create_params) cloud_account.user = current_user - cloud_account.repo_id = @project.repository.id - cloud_account.project_id = @project.id cloud_account.save! end @@ -50,6 +51,7 @@ class DevOps::CloudAccountsController < ApplicationController logger.info "######### redirect_url: #{redirect_url}" if result && !result.blank? + current_user.set_drone_step!(User::DEVOPS_UNVERIFIED) render_ok(redirect_url: redirect_url) else render_error('激活失败, 请检查你的云服务器信息是否正确.') @@ -60,12 +62,28 @@ class DevOps::CloudAccountsController < ApplicationController render_error(ex.message) end + def activate + result = + if current_user.devops_has_token? + # 已有drone_token的,直接激活项目 + DevOps::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier).activate + else + # 没有token,说明是第一次激活devops, 需要用户填写token值 + return render_error('请先在CI服务端做用户认证.') if !current_user.devops_verified? + DevOps::Drone::API.new(params[:drone_token], @cloud_account.drone_url, @project.owner.login, @project.identifier).activate + end + + if result + set_drone_token!(current_user, @cloud_account, params[:drone_token]) + @project.update_column(:open_devops, true) + render_ok + else + render_error("激活失败,请检查你的token值是否正确.") + end + end + private def devops_params params.permit(:account, :secret, :ip_num, :project_id) end - - def find_project - @project = Project.find params[:project_id] - end end diff --git a/app/controllers/dev_ops/languages_controller.rb b/app/controllers/dev_ops/languages_controller.rb index 5863be647..be8b25b85 100644 --- a/app/controllers/dev_ops/languages_controller.rb +++ b/app/controllers/dev_ops/languages_controller.rb @@ -1,4 +1,5 @@ class DevOps::LanguagesController < ApplicationController + # TODO 需要开启权限认证,只有该项目devops初始化成功后才能获取语言列表 before_action :require_login before_action :find_langugae, only: :show diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index ac60f4d18..00b1e37a5 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,8 +1,10 @@ class UsersController < ApplicationController + include Devopsable before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users] - before_action :require_login, only: %i[me list] + before_action :require_login, only: %i[me list devops_authenticate devops] + before_action :auto_load_project, only: %i[devops devops_authenticate] skip_before_action :check_sign, only: [:attachment_show] def list @@ -177,7 +179,7 @@ class UsersController < ApplicationController def trustie_projects user_id = User.select(:id, :login).where(login: params[:login])&.first&.id projects = Project.visible - + projects = projects.joins(:members).where(members: { user_id: user_id }) search = params[:search].to_s.strip @@ -212,6 +214,19 @@ class UsersController < ApplicationController render_ok end + def devops + @user = current_user + limit_owner_can_devops!(user) + @cloud_account = @user.dev_ops_cloud_account + end + + # devops 认证 + def devops_authenticate + limit_owner_can_devops!(current_user) + current_user.set_drone_step!(User::DEVOPS_VERIFIED) + render_ok + end + private def load_user @user = User.find_by_login(params[:id]) || User.find_by(id: params[:id]) diff --git a/app/libs/dev_ops/drone/ci.rb b/app/libs/dev_ops/drone/ci.rb index cfa67cdc2..c2a06d4ce 100644 --- a/app/libs/dev_ops/drone/ci.rb +++ b/app/libs/dev_ops/drone/ci.rb @@ -20,6 +20,6 @@ class DevOps::Drone::Ci private def cmd - "cd ..; cd var/lib/drone/; sqlite3 database.sqlite; .dump; select user_hash from users where user_login=#{gitea_username} " + "cd ..; cd var/lib/drone/; sqlite3 database.sqlite; .dump; select user_hash from users where user_login=#{gitea_username};" end end diff --git a/app/libs/dev_ops/drone/server.rb b/app/libs/dev_ops/drone/server.rb index cb08ca271..152f27df4 100644 --- a/app/libs/dev_ops/drone/server.rb +++ b/app/libs/dev_ops/drone/server.rb @@ -18,7 +18,8 @@ class DevOps::Drone::Server def generate_cmd "service docker start; docker rm -f `docker ps -qa`; docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ - -v /var/lib/drone:/data \ + -e DRONE_DATABASE_DRIVER=mysql \ + -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@#{database_host}:3306/drone?parseTime=true \ -e DRONE_GITEA_SERVER=#{gitea_url} \ -e DRONE_GITEA_CLIENT_ID=#{client_id} \ -e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \ @@ -37,4 +38,24 @@ class DevOps::Drone::Server def gitea_url Gitea.gitea_config[:domain] end + + def database_username + database_config[Rails.env]["username"] + end + + def database_password + database_config[Rails.env]["password"] + end + + def database_host + database_config[Rails.env]["host"] + end + + def database + database_config[Rails.env]["database"] + end + + def database_config + Rails.configuration.database_configuration + end end diff --git a/app/models/concerns/droneable.rb b/app/models/concerns/droneable.rb new file mode 100644 index 000000000..2e7206fb0 --- /dev/null +++ b/app/models/concerns/droneable.rb @@ -0,0 +1,29 @@ +module Droneable + extend ActiveSupport::Concern + + included do + end + + def devops_uninit? + self.devops_step === User::DEVOPS_UNINIT + end + + def devops_unverified? + self.devops_step === User::DEVOPS_UNVERIFIED + end + + def devops_verified? + self.devops_step === User::DEVOPS_VERIFIED + end + + def devops_has_token? + self.devops_step === User::DEVOPS_HAS_TOKEN + end + + def set_drone_step!(step) + self.update_column(:devops_step, step) + end + + module ClassMethods + end +end diff --git a/app/models/user.rb b/app/models/user.rb index f919ed1bf..9d6b24694 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -5,8 +5,16 @@ class User < ApplicationRecord include Likeable include BaseModel include ProjectOperable + include Droneable # include Searchable::Dependents::User + # devops step + # devops_step column: 0: 未填写服务器信息;1: 已填写服务器信息(未认证); 2: 已认证, 3: 已填写token值 + DEVOPS_UNINIT = 0 + DEVOPS_UNVERIFIED = 1 + DEVOPS_VERIFIED = 2 + DEVOPS_HAS_TOKEN = 3 + # Account statuses STATUS_ANONYMOUS = 0 STATUS_ACTIVE = 1 @@ -70,8 +78,9 @@ class User < ApplicationRecord # 关注 has_many :be_watchers, foreign_key: :user_id, dependent: :destroy # 我的关注 has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户 - - has_many :watchers, as: :watchable, dependent: :destroy + has_many :watchers, as: :watchable, dependent: :destroy + + has_one :dev_ops_cloud_account, class_name: 'DevOps::CloudAccount', dependent: :destroy # 认证 has_many :apply_user_authentication diff --git a/app/views/users/devops.json.jbuilder b/app/views/users/devops.json.jbuilder new file mode 100644 index 000000000..7ae5fa2c1 --- /dev/null +++ b/app/views/users/devops.json.jbuilder @@ -0,0 +1,12 @@ +json.step @user.devops_step +json.cloud_account do + if @cloud_account && !@user.devops_uninit? + json.account @cloud_account.account + json.ip @cloud_account.drone_ip + json.secret @cloud_account.visible_secret + json.authenticate_url "#{@cloud_account.drone_url}/login" if @user.devops_unverified? + json.get_drone_token_url "#{@cloud_account.drone_url}/account" if @user.devops_verified? + else + json.nil! + end +end diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index 1c83716bd..1c78d4fef 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -12,5 +12,4 @@ json.user_phone_binded @user.phone.present? # json.email @user.mail json.profile_completed @user.profile_completed? json.professional_certification @user.professional_certification - - +json.devops_step @user.devops_step diff --git a/config/routes.rb b/config/routes.rb index 8064352bf..e292a396c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -16,7 +16,11 @@ Rails.application.routes.draw do resources :edu_settings scope '/api' do namespace :dev_ops do - resources :cloud_accounts, only: [:create] + resources :cloud_accounts, only: [:create] do + member do + post :activate + end + end resources :languages, only: [:index, :show] do collection do get :common @@ -189,11 +193,12 @@ Rails.application.routes.draw do post :sync_salt get :trustie_projects get :trustie_related_projects + get :devops + put :devops_authenticate end scope module: :users do - # resources :courses, only: [:index] - resources :projects, only: [:index] + # resources :projects, only: [:index] # resources :subjects, only: [:index] resources :project_packages, only: [:index] # 私信 diff --git a/db/migrate/20200731073851_add_devops_step_to_users.rb b/db/migrate/20200731073851_add_devops_step_to_users.rb new file mode 100644 index 000000000..6815b797e --- /dev/null +++ b/db/migrate/20200731073851_add_devops_step_to_users.rb @@ -0,0 +1,5 @@ +class AddDevopsStepToUsers < ActiveRecord::Migration[5.2] + def change + add_column :users, :devops_step, :integer, default: 0, comment: '0: uninit devops; 1: unverified; 2: verified' + end +end From 8e7c25b5ed4826d98c1dc367e673ba4d5988edf4 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 13 Aug 2020 21:11:33 +0800 Subject: [PATCH 062/384] FIX code bug --- app/models/user.rb | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 68e3fb2e5..bbc5d15ac 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -78,14 +78,9 @@ class User < ApplicationRecord # 关注 has_many :be_watchers, foreign_key: :user_id, dependent: :destroy # 我的关注 has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户 -<<<<<<< HEAD has_many :watchers, as: :watchable, dependent: :destroy has_one :dev_ops_cloud_account, class_name: 'DevOps::CloudAccount', dependent: :destroy -======= - - has_many :watchers, as: :watchable, dependent: :destroy ->>>>>>> dev_change_route # 认证 has_many :apply_user_authentication From cf43a64adaedaf8336568814ce67191fbf131cfc Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 13 Aug 2020 23:38:32 +0800 Subject: [PATCH 063/384] FIX rewrite devops with ci --- app/controllers/ci/base_controller.rb | 3 + app/controllers/ci/builds_controller.rb | 58 ++++++++++ .../cloud_accounts_controller.rb | 21 ++-- .../{dev_ops => ci}/languages_controller.rb | 9 +- app/controllers/concerns/devopsable.rb | 6 +- app/controllers/dev_ops/builds_controller.rb | 59 ---------- .../create_cloud_account_form.rb | 2 +- app/libs/{dev_ops => ci}/drone/api.rb | 2 +- app/libs/{dev_ops => ci}/drone/ci.rb | 2 +- app/libs/{dev_ops => ci}/drone/client.rb | 2 +- app/libs/{dev_ops => ci}/drone/error.rb | 2 +- app/libs/ci/drone/request.rb | 108 ++++++++++++++++++ app/libs/{dev_ops => ci}/drone/server.rb | 2 +- app/libs/{dev_ops => ci}/drone/start.rb | 2 +- app/libs/dev_ops/drone/request.rb | 108 ------------------ app/models/{dev_ops => ci}/cloud_account.rb | 2 +- app/models/{dev_ops => ci}/language.rb | 2 +- app/models/project.rb | 2 +- app/models/repository.rb | 2 +- app/models/user.rb | 3 +- config/routes.rb | 2 +- ...v_ops_cloud_account_to_ci_cloud_account.rb | 5 + ..._rename_dev_ops_language_to_ci_language.rb | 5 + 23 files changed, 210 insertions(+), 199 deletions(-) create mode 100644 app/controllers/ci/base_controller.rb create mode 100644 app/controllers/ci/builds_controller.rb rename app/controllers/{dev_ops => ci}/cloud_accounts_controller.rb (71%) rename app/controllers/{dev_ops => ci}/languages_controller.rb (50%) delete mode 100644 app/controllers/dev_ops/builds_controller.rb rename app/forms/{dev_ops => ci}/create_cloud_account_form.rb (88%) rename app/libs/{dev_ops => ci}/drone/api.rb (98%) rename app/libs/{dev_ops => ci}/drone/ci.rb (97%) rename app/libs/{dev_ops => ci}/drone/client.rb (96%) rename app/libs/{dev_ops => ci}/drone/error.rb (82%) create mode 100644 app/libs/ci/drone/request.rb rename app/libs/{dev_ops => ci}/drone/server.rb (98%) rename app/libs/{dev_ops => ci}/drone/start.rb (97%) delete mode 100644 app/libs/dev_ops/drone/request.rb rename app/models/{dev_ops => ci}/cloud_account.rb (89%) rename app/models/{dev_ops => ci}/language.rb (90%) create mode 100644 db/migrate/20200813144941_rename_dev_ops_cloud_account_to_ci_cloud_account.rb create mode 100644 db/migrate/20200813150315_rename_dev_ops_language_to_ci_language.rb diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb new file mode 100644 index 000000000..edbd5b8a4 --- /dev/null +++ b/app/controllers/ci/base_controller.rb @@ -0,0 +1,3 @@ +class Ci::BaseController < ApplicationController + before_action :require_login +end diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb new file mode 100644 index 000000000..de6a9b22d --- /dev/null +++ b/app/controllers/ci/builds_controller.rb @@ -0,0 +1,58 @@ +class Ci::BuildsController < Ci::BaseController + include RepositoriesHelper + + before_action :find_project, :find_cloud_account + before_action :find_cloud_account, except: :get_trustie_pipeline + before_action :ci_authorize! + + def index + result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier).builds + + render json: result + end + + def detail + result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).build + + render json: result + end + + def restart + result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).restart + + render json: result + end + + def delete + result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).stop + render json: result + end + + def logs + result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier, build: params[:number], stage: params[:stage], step: params[:step]).logs + + render json: result + end + + # get .trustie-pipeline.yml file + def get_trustie_pipeline + file_path_uri = URI.parse('.trustie-pipeline.yml') + interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: params[:ref] || "master") + if interactor.success? + file = interactor.result + return render json: {} if file[:status] + + json = {name: file['name'], path: file['path'], sha: file['sha'], content: render_decode64_content(file['content'])} + render json: json + end + end + + private + def find_project + @project = Project.find params[:project_id] + end + + def find_cloud_account + @cloud_account = @project.ci_cloud_account + end +end diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb similarity index 71% rename from app/controllers/dev_ops/cloud_accounts_controller.rb rename to app/controllers/ci/cloud_accounts_controller.rb index d2e849eb5..f4ab4ba3c 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -1,21 +1,20 @@ -class DevOps::CloudAccountsController < ApplicationController +class Ci::CloudAccountsController < Ci::BaseController include Devopsable - before_action :require_login before_action :auto_load_project - before_action :devops_authorize! + before_action :ci_authorize! before_action :find_cloud_account, only: %i[activate] def create ActiveRecord::Base.transaction do - DevOps::CreateCloudAccountForm.new(devops_params).validate! + Ci::CreateCloudAccountForm.new(devops_params).validate! # 1. 保存华为云服务器帐号 - create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret])) + create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: Ci::CloudAccount.encrypted_secret(devops_params[:secret])) if cloud_account = @project.dev_ops_cloud_account return render_error('该仓库已绑定了云帐号.') else - cloud_account = DevOps::CloudAccount.new(create_params) + cloud_account = Ci::CloudAccount.new(create_params) cloud_account.user = current_user cloud_account.save! end @@ -35,15 +34,15 @@ class DevOps::CloudAccountsController < ApplicationController logger.info "######### rpc_secret: #{rpc_secret}" # 3. 创建drone server - drone_server_cmd = DevOps::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd + drone_server_cmd = Ci::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd logger.info "######### drone_server_cmd: #{drone_server_cmd}" # 4. 创建drone client - drone_client_cmd = DevOps::Drone::Client.new(oauth.client_id, cloud_account.drone_ip, rpc_secret).generate_cmd + drone_client_cmd = Ci::Drone::Client.new(oauth.client_id, cloud_account.drone_ip, rpc_secret).generate_cmd logger.info "######### drone_client_cmd: #{drone_client_cmd}" # 5. 登录远程服务器,启动drone服务 - result = DevOps::Drone::Start.new(cloud_account.account, cloud_account.visible_secret, cloud_account.drone_ip, drone_server_cmd, drone_client_cmd).run + result = Ci::Drone::Start.new(cloud_account.account, cloud_account.visible_secret, cloud_account.drone_ip, drone_server_cmd, drone_client_cmd).run logger.info "######### result: #{result}" @@ -66,11 +65,11 @@ class DevOps::CloudAccountsController < ApplicationController result = if current_user.devops_has_token? # 已有drone_token的,直接激活项目 - DevOps::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier).activate + Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier).activate else # 没有token,说明是第一次激活devops, 需要用户填写token值 return render_error('请先在CI服务端做用户认证.') if !current_user.devops_verified? - DevOps::Drone::API.new(params[:drone_token], @cloud_account.drone_url, @project.owner.login, @project.identifier).activate + Ci::Drone::API.new(params[:drone_token], @cloud_account.drone_url, @project.owner.login, @project.identifier).activate end if result diff --git a/app/controllers/dev_ops/languages_controller.rb b/app/controllers/ci/languages_controller.rb similarity index 50% rename from app/controllers/dev_ops/languages_controller.rb rename to app/controllers/ci/languages_controller.rb index be8b25b85..b4b3e184d 100644 --- a/app/controllers/dev_ops/languages_controller.rb +++ b/app/controllers/ci/languages_controller.rb @@ -1,21 +1,20 @@ -class DevOps::LanguagesController < ApplicationController +class Ci::LanguagesController < Ci::BaseController # TODO 需要开启权限认证,只有该项目devops初始化成功后才能获取语言列表 - before_action :require_login before_action :find_langugae, only: :show def index - @languages = DevOps::Language.by_usage_amount_desc + @languages = Ci::Language.by_usage_amount_desc end def show end def common - @languages = DevOps::Language.six_common + @languages = Ci::Language.six_common end private def find_langugae - @language = DevOps::Language.find params[:id] + @language = Ci::Language.find params[:id] end end diff --git a/app/controllers/concerns/devopsable.rb b/app/controllers/concerns/devopsable.rb index 43828fd22..ea6a48f16 100644 --- a/app/controllers/concerns/devopsable.rb +++ b/app/controllers/concerns/devopsable.rb @@ -4,8 +4,8 @@ module Devopsable included do end - # devops 权限验证 - def devops_authorize! + # ci 权限验证 + def ci_authorize! render_forbidden unless @project.owner?(current_user) end @@ -21,7 +21,7 @@ module Devopsable end def find_cloud_account - @cloud_account = DevOps::CloudAccount.find params[:id] + @cloud_account = Ci::CloudAccount.find params[:id] end def set_drone_token!(user, cloud_account, drone_token) diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb deleted file mode 100644 index 8cbb48e35..000000000 --- a/app/controllers/dev_ops/builds_controller.rb +++ /dev/null @@ -1,59 +0,0 @@ -class DevOps::BuildsController < ApplicationController - include RepositoriesHelper - - before_action :require_login - before_action :find_project - before_action :devops_authorize! - - def index - cloud_account = @project.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier).builds - - render json: result - end - - def detail - cloud_account = @project.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).build - - render json: result - end - - def restart - cloud_account = @project.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).restart - - render json: result - end - - def delete - cloud_account = @project.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).stop - render json: result - end - - def logs - cloud_account = @project.dev_ops_cloud_account - result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, build: params[:number], stage: params[:stage], step: params[:step]).logs - - render json: result - end - - # get .trustie-pipeline.yml file - def get_trustie_pipeline - file_path_uri = URI.parse('.trustie-pipeline.yml') - interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: params[:ref] || "master") - if interactor.success? - file = interactor.result - return render json: {} if file[:status] - - json = {name: file['name'], path: file['path'], sha: file['sha'], content: render_decode64_content(file['content'])} - render json: json - end - end - - private - def find_project - @project = Project.find params[:project_id] - end -end diff --git a/app/forms/dev_ops/create_cloud_account_form.rb b/app/forms/ci/create_cloud_account_form.rb similarity index 88% rename from app/forms/dev_ops/create_cloud_account_form.rb rename to app/forms/ci/create_cloud_account_form.rb index 2d1752b74..a2dda6a4f 100644 --- a/app/forms/dev_ops/create_cloud_account_form.rb +++ b/app/forms/ci/create_cloud_account_form.rb @@ -1,4 +1,4 @@ -class DevOps::CreateCloudAccountForm +class Ci::CreateCloudAccountForm include ActiveModel::Model attr_accessor :project_id, :ip_num, :account, :secret diff --git a/app/libs/dev_ops/drone/api.rb b/app/libs/ci/drone/api.rb similarity index 98% rename from app/libs/dev_ops/drone/api.rb rename to app/libs/ci/drone/api.rb index c7d807860..0c83007a5 100644 --- a/app/libs/dev_ops/drone/api.rb +++ b/app/libs/ci/drone/api.rb @@ -1,4 +1,4 @@ -class DevOps::Drone::API < DevOps::Drone::Request +class Ci::Drone::API < Ci::Drone::Request attr_reader :drone_token, :endpoint, :owner, :repo, :options # drone_token: diff --git a/app/libs/dev_ops/drone/ci.rb b/app/libs/ci/drone/ci.rb similarity index 97% rename from app/libs/dev_ops/drone/ci.rb rename to app/libs/ci/drone/ci.rb index c2a06d4ce..c47b5396f 100644 --- a/app/libs/dev_ops/drone/ci.rb +++ b/app/libs/ci/drone/ci.rb @@ -1,4 +1,4 @@ -class DevOps::Drone::Ci +class Ci::Drone::Ci attr_reader :host, :username, :password, :gitea_username # host: drone server's ip diff --git a/app/libs/dev_ops/drone/client.rb b/app/libs/ci/drone/client.rb similarity index 96% rename from app/libs/dev_ops/drone/client.rb rename to app/libs/ci/drone/client.rb index c427f79d8..ebaef5b1c 100644 --- a/app/libs/dev_ops/drone/client.rb +++ b/app/libs/ci/drone/client.rb @@ -1,4 +1,4 @@ -class DevOps::Drone::Client +class Ci::Drone::Client attr_reader :client_id, :drone_ip, :rpc_secret # client_id: user's client_id from oauth diff --git a/app/libs/dev_ops/drone/error.rb b/app/libs/ci/drone/error.rb similarity index 82% rename from app/libs/dev_ops/drone/error.rb rename to app/libs/ci/drone/error.rb index 2803a6c88..2ddfccd8f 100644 --- a/app/libs/dev_ops/drone/error.rb +++ b/app/libs/ci/drone/error.rb @@ -1,4 +1,4 @@ -class DevOps::Drone::Error < StandardError +class Ci::Drone::Error < StandardError attr_reader :code def initialize(code, message) diff --git a/app/libs/ci/drone/request.rb b/app/libs/ci/drone/request.rb new file mode 100644 index 000000000..5f3e54be4 --- /dev/null +++ b/app/libs/ci/drone/request.rb @@ -0,0 +1,108 @@ +class Ci::Drone::Request + # Converts the response body to an ObjectifiedHash. + def self.parse(body) + body = decode(body) + + if body.is_a? Hash + ObjectifiedHash.new body + elsif body.is_a? Array + body.collect! { |e| ObjectifiedHash.new(e) } + elsif body == true + body + else + raise Error::Parsing.new "Couldn't parse a response body" + end + end + + # Decodes a JSON response into Ruby object. + def self.decode(response) + begin + JSON.load response + rescue JSON::ParserError + raise Error::Parsing.new "The response is not a valid JSON" + end + end + + def get(endpoint, path, options={}) + validate_request_params!(endpoint) + request(:get, endpoint, path, options) + end + + def post(endpoint, path, options={}) + validate_request_params!(endpoint) + request(:post, endpoint, path, options) + end + + def put(endpoint, path, options={}) + validate_request_params!(endpoint) + request(:put, endpoint, path, options) + end + + def patch(endpoint, path, options={}) + validate_request_params!(endpoint) + request(:patch, endpoint, path, options) + end + + def delete(endpoint, path, options={}) + validate_request_params!(endpoint) + request(:delete, endpoint, path, options) + end + + private + def request(method, endpoint, path, **params) + Rails.logger.info("[drone] request: #{method} #{path} #{params.except(:drone_token).inspect}") + + client ||= begin + Faraday.new(url: endpoint) do |req| + req.request :url_encoded + req.headers['Content-Type'] = 'application/json' + req.response :logger # 显示日志 + req.adapter Faraday.default_adapter + req.authorization :Bearer, params[:drone_token] + req.headers['Authorization'] + end + end + response = client.public_send(method, path) do |req| + req.body = params.except(:drone_token).to_json + end + + json_response(response) + end + + # Checks the response code for common errors. + # Returns parsed response for successful requests. + def validate(response) + # case response.code + # when 400; raise Error::BadRequest.new error_message(response) + # when 401; raise Error::Unauthorized.new error_message(response) + # when 403; raise Error::Forbidden.new error_message(response) + # when 404; raise Error::NotFound.new error_message(response) + # when 405; raise Error::MethodNotAllowed.new error_message(response) + # when 406; raise Error::DataNotAccepted.new error_message(response) + # when 409; raise Error::Conflict.new error_message(response) + # when 500; raise Error::InternalServerError.new error_message(response) + # when 502; raise Error::BadGateway.new error_message(response) + # when 503; raise Error::ServiceUnavailable.new error_message(response) + # end + + response.parsed_response + end + + # Checks a base_uri and params for requests. + def validate_request_params!(endpoint) + raise "Please set an endpoint to API" unless endpoint + end + + def error_message(response) + "Server responded with code #{response.code}, message: #{response.parsed_response.message}. " \ + "Request URI: #{response.request.base_uri}#{response.request.path}" + end + + def json_response(response) + result = JSON.parse(response.body) + status = response.status + Rails.logger.info("[drone] response:#{status} #{result.inspect}") + + response.status != 200 ? result.merge!(status: response.status) : result + end +end diff --git a/app/libs/dev_ops/drone/server.rb b/app/libs/ci/drone/server.rb similarity index 98% rename from app/libs/dev_ops/drone/server.rb rename to app/libs/ci/drone/server.rb index 152f27df4..2a350cc95 100644 --- a/app/libs/dev_ops/drone/server.rb +++ b/app/libs/ci/drone/server.rb @@ -1,4 +1,4 @@ -class DevOps::Drone::Server +class Ci::Drone::Server attr_reader :client_id, :client_secret, :drone_host, :rpc_secret # client_id: user's client_id from oauth diff --git a/app/libs/dev_ops/drone/start.rb b/app/libs/ci/drone/start.rb similarity index 97% rename from app/libs/dev_ops/drone/start.rb rename to app/libs/ci/drone/start.rb index 29c3324f6..19b7d09ce 100644 --- a/app/libs/dev_ops/drone/start.rb +++ b/app/libs/ci/drone/start.rb @@ -1,4 +1,4 @@ -class DevOps::Drone::Start +class Ci::Drone::Start attr_reader :drone_username, :drone_password, :drone_host, :drone_server_cmd, :drone_client_cmd # drone_username="XXXX" 云服务器登录用户名 diff --git a/app/libs/dev_ops/drone/request.rb b/app/libs/dev_ops/drone/request.rb deleted file mode 100644 index a59b515d2..000000000 --- a/app/libs/dev_ops/drone/request.rb +++ /dev/null @@ -1,108 +0,0 @@ - class DevOps::Drone::Request - # Converts the response body to an ObjectifiedHash. - def self.parse(body) - body = decode(body) - - if body.is_a? Hash - ObjectifiedHash.new body - elsif body.is_a? Array - body.collect! { |e| ObjectifiedHash.new(e) } - elsif body == true - body - else - raise Error::Parsing.new "Couldn't parse a response body" - end - end - - # Decodes a JSON response into Ruby object. - def self.decode(response) - begin - JSON.load response - rescue JSON::ParserError - raise Error::Parsing.new "The response is not a valid JSON" - end - end - - def get(endpoint, path, options={}) - validate_request_params!(endpoint) - request(:get, endpoint, path, options) - end - - def post(endpoint, path, options={}) - validate_request_params!(endpoint) - request(:post, endpoint, path, options) - end - - def put(endpoint, path, options={}) - validate_request_params!(endpoint) - request(:put, endpoint, path, options) - end - - def patch(endpoint, path, options={}) - validate_request_params!(endpoint) - request(:patch, endpoint, path, options) - end - - def delete(endpoint, path, options={}) - validate_request_params!(endpoint) - request(:delete, endpoint, path, options) - end - - private - def request(method, endpoint, path, **params) - Rails.logger.info("[drone] request: #{method} #{path} #{params.except(:drone_token).inspect}") - - client ||= begin - Faraday.new(url: endpoint) do |req| - req.request :url_encoded - req.headers['Content-Type'] = 'application/json' - req.response :logger # 显示日志 - req.adapter Faraday.default_adapter - req.authorization :Bearer, params[:drone_token] - req.headers['Authorization'] - end - end - response = client.public_send(method, path) do |req| - req.body = params.except(:drone_token).to_json - end - - json_response(response) - end - - # Checks the response code for common errors. - # Returns parsed response for successful requests. - def validate(response) - # case response.code - # when 400; raise Error::BadRequest.new error_message(response) - # when 401; raise Error::Unauthorized.new error_message(response) - # when 403; raise Error::Forbidden.new error_message(response) - # when 404; raise Error::NotFound.new error_message(response) - # when 405; raise Error::MethodNotAllowed.new error_message(response) - # when 406; raise Error::DataNotAccepted.new error_message(response) - # when 409; raise Error::Conflict.new error_message(response) - # when 500; raise Error::InternalServerError.new error_message(response) - # when 502; raise Error::BadGateway.new error_message(response) - # when 503; raise Error::ServiceUnavailable.new error_message(response) - # end - - response.parsed_response - end - - # Checks a base_uri and params for requests. - def validate_request_params!(endpoint) - raise "Please set an endpoint to API" unless endpoint - end - - def error_message(response) - "Server responded with code #{response.code}, message: #{response.parsed_response.message}. " \ - "Request URI: #{response.request.base_uri}#{response.request.path}" - end - - def json_response(response) - result = JSON.parse(response.body) - status = response.status - Rails.logger.info("[drone] response:#{status} #{result.inspect}") - - response.status != 200 ? result.merge!(status: response.status) : result - end - end diff --git a/app/models/dev_ops/cloud_account.rb b/app/models/ci/cloud_account.rb similarity index 89% rename from app/models/dev_ops/cloud_account.rb rename to app/models/ci/cloud_account.rb index 8b07a7493..18ac68fa7 100644 --- a/app/models/dev_ops/cloud_account.rb +++ b/app/models/ci/cloud_account.rb @@ -1,4 +1,4 @@ -class DevOps::CloudAccount < ApplicationRecord +class Ci::CloudAccount < ApplicationRecord belongs_to :project belongs_to :user belongs_to :repository, foreign_key: :repo_id diff --git a/app/models/dev_ops/language.rb b/app/models/ci/language.rb similarity index 90% rename from app/models/dev_ops/language.rb rename to app/models/ci/language.rb index 742ae54ea..0d16e5bd2 100644 --- a/app/models/dev_ops/language.rb +++ b/app/models/ci/language.rb @@ -1,4 +1,4 @@ -class DevOps::Language < ApplicationRecord +class Ci::Language < ApplicationRecord # before_save :encode_content belongs_to :cover, class_name: "Attachment", foreign_key: :cover_id, optional: true diff --git a/app/models/project.rb b/app/models/project.rb index 83ff78789..24bbe9afc 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -20,7 +20,7 @@ class Project < ApplicationRecord has_many :fork_users, dependent: :destroy # has_many :commits, dependent: :destroy - has_one :dev_ops_cloud_account, class_name: 'DevOps::CloudAccount', dependent: :destroy + has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', dependent: :destroy has_one :project_score, dependent: :destroy has_one :repository, dependent: :destroy has_many :pull_requests, dependent: :destroy diff --git a/app/models/repository.rb b/app/models/repository.rb index 373604c8a..17c42a938 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -3,7 +3,7 @@ class Repository < ApplicationRecord belongs_to :project, :touch => true belongs_to :user has_one :mirror, foreign_key: :repo_id - has_one :dev_ops_cloud_account, class_name: 'DevOps::CloudAccount', foreign_key: :repo_id + has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', foreign_key: :repo_id has_many :version_releases, dependent: :destroy validates :identifier, presence: true diff --git a/app/models/user.rb b/app/models/user.rb index bbc5d15ac..e860cbbe8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -6,6 +6,7 @@ class User < ApplicationRecord include BaseModel include ProjectOperable include ProjectAbility + include Droneable # include Searchable::Dependents::User # devops step @@ -80,7 +81,7 @@ class User < ApplicationRecord has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户 has_many :watchers, as: :watchable, dependent: :destroy - has_one :dev_ops_cloud_account, class_name: 'DevOps::CloudAccount', dependent: :destroy + has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', dependent: :destroy # 认证 has_many :apply_user_authentication diff --git a/config/routes.rb b/config/routes.rb index c343a3798..3d660421c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -15,7 +15,7 @@ Rails.application.routes.draw do get 'auth/cas/callback', to: 'oauth/cas#create' resources :edu_settings scope '/api' do - namespace :dev_ops do + namespace :ci do resources :cloud_accounts, only: [:create] do member do post :activate diff --git a/db/migrate/20200813144941_rename_dev_ops_cloud_account_to_ci_cloud_account.rb b/db/migrate/20200813144941_rename_dev_ops_cloud_account_to_ci_cloud_account.rb new file mode 100644 index 000000000..2fcc477ae --- /dev/null +++ b/db/migrate/20200813144941_rename_dev_ops_cloud_account_to_ci_cloud_account.rb @@ -0,0 +1,5 @@ +class RenameDevOpsCloudAccountToCiCloudAccount < ActiveRecord::Migration[5.2] + def change + rename_table :dev_ops_cloud_accounts, :ci_cloud_accounts + end +end diff --git a/db/migrate/20200813150315_rename_dev_ops_language_to_ci_language.rb b/db/migrate/20200813150315_rename_dev_ops_language_to_ci_language.rb new file mode 100644 index 000000000..473618389 --- /dev/null +++ b/db/migrate/20200813150315_rename_dev_ops_language_to_ci_language.rb @@ -0,0 +1,5 @@ +class RenameDevOpsLanguageToCiLanguage < ActiveRecord::Migration[5.2] + def change + rename_table :dev_ops_languages, :ci_languages + end +end From 775c27a45ba2767bd9b557431ae0b1393b4a9198 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 14 Aug 2020 22:14:59 +0800 Subject: [PATCH 064/384] FIX login bug --- app/controllers/oauth/educoder_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index 317fe03db..0a1a6c6b3 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -9,7 +9,7 @@ class Oauth::EducoderController < Oauth::BaseController open_user= OpenUsers::Educoder.find_by(uid: login) - if open_user.present? && open_user.user.present? && open_user.user.email_bind? + if open_user.present? && open_user.user.present? && open_user.user.email_binded?? # 存在说明绑定了,验证信息是否齐全, if current_user != open_user.user logout_user From 90f14d2051fd9b2522c6a42dd9b523a1de8e79e1 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sat, 15 Aug 2020 10:58:56 +0800 Subject: [PATCH 065/384] FIX projects fork users bug --- app/views/projects/fork_users.json.jbuilder | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/views/projects/fork_users.json.jbuilder b/app/views/projects/fork_users.json.jbuilder index 95e69ca75..435b7e805 100644 --- a/app/views/projects/fork_users.json.jbuilder +++ b/app/views/projects/fork_users.json.jbuilder @@ -1,12 +1,13 @@ json.count @forks_count -json.users do +json.users do json.array! @fork_users.each do |f| - user = f.user + user = f.user fork_project = Project.select(:id,:name).find_by(id: f.fork_project_id) json.id f.fork_project_id + json.identifier fork_project.identifier json.name "#{user.try(:show_real_name)}/#{fork_project.try(:name)}" json.login user.try(:login) json.image_url url_to_avatar(user) json.format_time f.created_at.strftime("%Y-%m-%d") end -end \ No newline at end of file +end From 466bdedfcd206c3e483f8e434ef68d53fb76ba93 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Sat, 15 Aug 2020 12:40:31 +0800 Subject: [PATCH 066/384] Change --- app/controllers/pull_requests_controller.rb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 916f02ece..77bffe6a7 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -70,11 +70,8 @@ class PullRequestsController < ApplicationController if local_requests.save remote_pr_params = @local_params remote_pr_params = remote_pr_params.merge(head: "#{params[:merge_user_login]}:#{params[:head]}").compact if local_requests.is_original && params[:merge_user_login] - if @project.forked_from_project_id.present? - gitea_request = Gitea::PullRequest::CreateService.call(current_user.try(:gitea_token), @project.fork_project.owner, @repository.try(:identifier), remote_pr_params.except(:milestone)) - else - gitea_request = Gitea::PullRequest::CreateService.call(current_user.try(:gitea_token), @project.owner, @repository.try(:identifier), remote_pr_params.except(:milestone)) - end + gitea_request = Gitea::PullRequest::CreateService.call(current_user.try(:gitea_token), @project.owner, @repository.try(:identifier), remote_pr_params.except(:milestone)) + if gitea_request && local_requests.update_attributes(gpid: gitea_request["number"]) if params[:issue_tag_ids].present? params[:issue_tag_ids].each do |tag| From a0d287b1df9f33b84619dcf48508175f2d01454d Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Sat, 15 Aug 2020 12:50:04 +0800 Subject: [PATCH 067/384] Change --- app/controllers/pull_requests_controller.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 77bffe6a7..ab1927b59 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -70,8 +70,11 @@ class PullRequestsController < ApplicationController if local_requests.save remote_pr_params = @local_params remote_pr_params = remote_pr_params.merge(head: "#{params[:merge_user_login]}:#{params[:head]}").compact if local_requests.is_original && params[:merge_user_login] - gitea_request = Gitea::PullRequest::CreateService.call(current_user.try(:gitea_token), @project.owner, @repository.try(:identifier), remote_pr_params.except(:milestone)) - + if params[:fork_project_id].present? + gitea_request = Gitea::PullRequest::CreateService.call(current_user.try(:gitea_token), @project.fork_project.owner, @repository.try(:identifier), remote_pr_params.except(:milestone)) + else + gitea_request = Gitea::PullRequest::CreateService.call(current_user.try(:gitea_token), @project.owner, @repository.try(:identifier), remote_pr_params.except(:milestone)) + end if gitea_request && local_requests.update_attributes(gpid: gitea_request["number"]) if params[:issue_tag_ids].present? params[:issue_tag_ids].each do |tag| From 0af359ec0cfaf8add3aa80bc280c7d7cb926de02 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Sat, 15 Aug 2020 13:21:33 +0800 Subject: [PATCH 068/384] Change --- app/controllers/pull_requests_controller.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index ab1927b59..bd4e0d8f8 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -1,7 +1,7 @@ class PullRequestsController < ApplicationController before_action :require_login, except: [:index, :show] - before_action :load_repository - before_action :set_user, only: [:new, :get_branches] + before_action :find_project_with_id + before_action :set_repository before_action :find_pull_request, except: [:index, :new, :create, :check_can_merge,:get_branches,:create_merge_infos] # before_action :get_relatived, only: [:edit] include TagChosenHelper @@ -70,11 +70,7 @@ class PullRequestsController < ApplicationController if local_requests.save remote_pr_params = @local_params remote_pr_params = remote_pr_params.merge(head: "#{params[:merge_user_login]}:#{params[:head]}").compact if local_requests.is_original && params[:merge_user_login] - if params[:fork_project_id].present? - gitea_request = Gitea::PullRequest::CreateService.call(current_user.try(:gitea_token), @project.fork_project.owner, @repository.try(:identifier), remote_pr_params.except(:milestone)) - else - gitea_request = Gitea::PullRequest::CreateService.call(current_user.try(:gitea_token), @project.owner, @repository.try(:identifier), remote_pr_params.except(:milestone)) - end + gitea_request = Gitea::PullRequest::CreateService.call(current_user.try(:gitea_token), @project.owner, @repository.try(:identifier), remote_pr_params.except(:milestone)) if gitea_request && local_requests.update_attributes(gpid: gitea_request["number"]) if params[:issue_tag_ids].present? params[:issue_tag_ids].each do |tag| @@ -238,8 +234,12 @@ class PullRequestsController < ApplicationController private - def set_user + + def set_repository + @repository = @project.repository @user = @project.owner + normal_status(-1, "仓库不存在") unless @repository.present? + normal_status(-1, "用户不存在") unless @user.present? end def find_pull_request From 929b56629c5a1f3e9ffff9ed3c6130d7c6b3ea53 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Sat, 15 Aug 2020 13:28:22 +0800 Subject: [PATCH 069/384] Change --- app/controllers/pull_requests_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 185cccdec..fc7e5612f 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -1,7 +1,7 @@ class PullRequestsController < ApplicationController before_action :require_login, except: [:index, :show] - before_action :find_project_with_id - before_action :set_repository + before_action :load_repository + before_action :set_user, only: [:new, :get_branches] before_action :find_pull_request, except: [:index, :new, :create, :check_can_merge,:get_branches,:create_merge_infos] # before_action :get_relatived, only: [:edit] include TagChosenHelper From 226787207616fe28c55d906207de2e1c84a6ff02 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Sat, 15 Aug 2020 13:30:44 +0800 Subject: [PATCH 070/384] Chnage --- app/controllers/pull_requests_controller.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index fc7e5612f..47c0e5940 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -234,6 +234,9 @@ class PullRequestsController < ApplicationController private + def set_user + @user = @project.owner + end def set_repository @repository = @project.repository From 7bb43700b4334516a238e6535e27ad62ce335f4b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 17 Aug 2020 11:22:53 +0800 Subject: [PATCH 071/384] ADD namespace ci for model --- app/models/{dev_ops.rb => ci.rb} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename app/models/{dev_ops.rb => ci.rb} (57%) diff --git a/app/models/dev_ops.rb b/app/models/ci.rb similarity index 57% rename from app/models/dev_ops.rb rename to app/models/ci.rb index f6b80f15f..50a7a6279 100644 --- a/app/models/dev_ops.rb +++ b/app/models/ci.rb @@ -1,5 +1,5 @@ -module DevOps +module Ci def self.table_name_prefix - 'dev_ops_' + 'ci_' end end From af220cfffcadb4eaf66ce366276a9aa75fd67b14 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 17 Aug 2020 14:22:26 +0800 Subject: [PATCH 072/384] FIX config drone database --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- app/libs/ci/drone/server.rb | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index f4ab4ba3c..d941a9ae2 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -11,7 +11,7 @@ class Ci::CloudAccountsController < Ci::BaseController # 1. 保存华为云服务器帐号 create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: Ci::CloudAccount.encrypted_secret(devops_params[:secret])) - if cloud_account = @project.dev_ops_cloud_account + if cloud_account = @project.ci_cloud_account return render_error('该仓库已绑定了云帐号.') else cloud_account = Ci::CloudAccount.new(create_params) diff --git a/app/libs/ci/drone/server.rb b/app/libs/ci/drone/server.rb index 2a350cc95..5a699bea6 100644 --- a/app/libs/ci/drone/server.rb +++ b/app/libs/ci/drone/server.rb @@ -40,19 +40,19 @@ class Ci::Drone::Server end def database_username - database_config[Rails.env]["username"] + database_config[Rails.env]["ci"]["username"] end def database_password - database_config[Rails.env]["password"] + database_config[Rails.env]["ci"]["password"] end def database_host - database_config[Rails.env]["host"] + database_config[Rails.env]["ci"]["host"] end def database - database_config[Rails.env]["database"] + database_config[Rails.env]["ci"]["database"] end def database_config From a4d8338cb56686b04d1e3e06cd2dc3a1dbaa8e96 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 17 Aug 2020 14:29:09 +0800 Subject: [PATCH 073/384] ADD ci database port --- app/libs/ci/drone/server.rb | 6 +++++- app/models/ci/cloud_account.rb | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/libs/ci/drone/server.rb b/app/libs/ci/drone/server.rb index 5a699bea6..232f5ab84 100644 --- a/app/libs/ci/drone/server.rb +++ b/app/libs/ci/drone/server.rb @@ -19,7 +19,7 @@ class Ci::Drone::Server "service docker start; docker rm -f `docker ps -qa`; docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_DATABASE_DRIVER=mysql \ - -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@#{database_host}:3306/drone?parseTime=true \ + -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@#{database_host}:#{database_port}/drone?parseTime=true \ -e DRONE_GITEA_SERVER=#{gitea_url} \ -e DRONE_GITEA_CLIENT_ID=#{client_id} \ -e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \ @@ -51,6 +51,10 @@ class Ci::Drone::Server database_config[Rails.env]["ci"]["host"] end + def database_port + database_config[Rails.env]["ci"]["port"] || 3306 + end + def database database_config[Rails.env]["ci"]["database"] end diff --git a/app/models/ci/cloud_account.rb b/app/models/ci/cloud_account.rb index 18ac68fa7..212aab639 100644 --- a/app/models/ci/cloud_account.rb +++ b/app/models/ci/cloud_account.rb @@ -1,7 +1,6 @@ class Ci::CloudAccount < ApplicationRecord belongs_to :project belongs_to :user - belongs_to :repository, foreign_key: :repo_id def drone_host [drone_ip, ":80"].join From 5ac6133aefbee657c29c81a63739d5cd956f5ef0 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 18 Aug 2020 09:23:23 +0800 Subject: [PATCH 074/384] FIX ci drone server connect database --- app/libs/ci/drone/server.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/libs/ci/drone/server.rb b/app/libs/ci/drone/server.rb index 232f5ab84..3041785a4 100644 --- a/app/libs/ci/drone/server.rb +++ b/app/libs/ci/drone/server.rb @@ -19,7 +19,7 @@ class Ci::Drone::Server "service docker start; docker rm -f `docker ps -qa`; docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_DATABASE_DRIVER=mysql \ - -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@#{database_host}:#{database_port}/drone?parseTime=true \ + -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@tcp\(#{database_host}:#{database_port}\)/drone?parseTime=true \ -e DRONE_GITEA_SERVER=#{gitea_url} \ -e DRONE_GITEA_CLIENT_ID=#{client_id} \ -e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \ From 9b25b7a9e6d83309ecf7557ddac122ced16fb2e7 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 18 Aug 2020 16:40:39 +0800 Subject: [PATCH 075/384] FIX ci drone server database --- app/libs/ci/drone/server.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/libs/ci/drone/server.rb b/app/libs/ci/drone/server.rb index 3041785a4..60fbfcb8e 100644 --- a/app/libs/ci/drone/server.rb +++ b/app/libs/ci/drone/server.rb @@ -19,7 +19,7 @@ class Ci::Drone::Server "service docker start; docker rm -f `docker ps -qa`; docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_DATABASE_DRIVER=mysql \ - -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@tcp\(#{database_host}:#{database_port}\)/drone?parseTime=true \ + -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@tcp\\(#{database_host}:#{database_port}\\)/drone?parseTime=true \ -e DRONE_GITEA_SERVER=#{gitea_url} \ -e DRONE_GITEA_CLIENT_ID=#{client_id} \ -e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \ From 70e6c1395deec853030801dc930d4c5a1ad29d0c Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 18 Aug 2020 16:42:17 +0800 Subject: [PATCH 076/384] FIX readme --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b450313b0..ca1648df4 100644 --- a/README.md +++ b/README.md @@ -2450,7 +2450,7 @@ https://localhost:3000/api/users/devops.json | jq #### 初始化DevOps流程 ``` -POST /api/dev_ops/cloud_accounts +POST /api/ci/cloud_accounts ``` *示例* @@ -2460,7 +2460,7 @@ curl -X POST \ -d "secret=xxx" \ -d "ip_num=xx.xx.xx.xx" \ -d "project_id=5988" \ -https://localhost:3000/api/dev_ops/cloud_accounts.json | jq +https://localhost:3000/api/ci/cloud_accounts.json | jq ``` *请求参数说明:* @@ -2528,7 +2528,6 @@ POST /api/dev_ops/cloud_accounts/:id/activate *示例* ``` curl -X POST \ --d "id=1" \ -d "project_id=4844" \ -d "drone_token=xxxxxxxxxx" \ http://localhost:3000/api/dev_ops/cloud_accounts/1/activate.json | jq From 1159a47b3e25a609358981ac149b056806f919f6 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 19 Aug 2020 15:51:53 +0800 Subject: [PATCH 077/384] Update readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ca1648df4..422b665f3 100644 --- a/README.md +++ b/README.md @@ -2523,14 +2523,14 @@ http://localhost:3000/api/users/devops_authenticate.json | jq #### 激活项目 ``` -POST /api/dev_ops/cloud_accounts/:id/activate +POST /api/ci/cloud_accounts/:id/activate ``` *示例* ``` curl -X POST \ -d "project_id=4844" \ -d "drone_token=xxxxxxxxxx" \ -http://localhost:3000/api/dev_ops/cloud_accounts/1/activate.json | jq +http://localhost:3000/api/ci/cloud_accounts/1/activate.json | jq ``` *请求参数说明:* @@ -2557,13 +2557,13 @@ http://localhost:3000/api/dev_ops/cloud_accounts/1/activate.json | jq #### 获取仓库的.trustie-pipeline.yml ``` -GET /api/dev_ops/builds/get_trustie_pipeline +GET /api/ci/builds/get_trustie_pipeline ``` *示例* ``` curl -X GET \ -d "project_id=4844" \ -http://localhost:3000/api/dev_ops/builds/get_trustie_pipeline.json | jq +http://localhost:3000/api/ci/builds/get_trustie_pipeline.json | jq ``` *请求参数说明:* From 89b2e263aed2d665ff1026ef14350cacd4021e76 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 19 Aug 2020 18:19:27 +0800 Subject: [PATCH 078/384] FIX devops builds api bug --- app/controllers/ci/builds_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index de6a9b22d..1a5552485 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -1,5 +1,6 @@ class Ci::BuildsController < Ci::BaseController include RepositoriesHelper + include Devopsable before_action :find_project, :find_cloud_account before_action :find_cloud_account, except: :get_trustie_pipeline From 7c1ab2cddf82b97cfd03b3ca3290017129c01b71 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 20 Aug 2020 18:37:53 +0800 Subject: [PATCH 079/384] =?UTF-8?q?FIX=20=E9=87=8D=E6=9E=84ci=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 +++++++------------ app/controllers/ci/base_controller.rb | 7 +++++ app/controllers/ci/builds_controller.rb | 18 ++++++------ app/helpers/ci/builds_helper.rb | 10 +++++++ app/helpers/ci/languages_helper.rb | 2 ++ app/helpers/dev_ops/builds_helper.rb | 2 -- app/helpers/dev_ops/languages_helper.rb | 2 -- app/libs/ci/drone/server.rb | 10 +++---- app/models/ci.rb | 6 ++-- app/models/ci/build.rb | 6 ++++ app/models/ci/cloud_account.rb | 3 +- app/models/ci/language.rb | 2 +- app/models/ci/local_base.rb | 5 ++++ app/models/ci/remote_base.rb | 7 +++++ app/models/ci/repo.rb | 19 +++++++++++++ app/models/ci/stage.rb | 6 ++++ app/models/ci/step.rb | 5 ++++ app/models/ci/user.rb | 6 ++++ app/queries/ci/builds/list_query.rb | 18 ++++++++++++ app/views/ci/builds/_build.json.jbuilder | 15 ++++++++++ app/views/ci/builds/_stage.json.jbuilder | 22 +++++++++++++++ app/views/ci/builds/_step.json.jbuilder | 8 ++++++ app/views/ci/builds/index.json.jbuilder | 4 +++ app/views/ci/builds/show.json.jbuilder | 4 +++ .../languages/common.json.jbuilder | 0 .../languages/index.json.jbuilder | 0 .../languages/show.json.jbuilder | 0 app/views/dev_ops/builds/index.json.jbuilder | 2 -- app/views/dev_ops/builds/show.json.jbuilder | 2 -- config/routes.rb | 22 +++++++++------ spec/models/ci/build_spec.rb | 5 ++++ spec/models/ci/repo_spec.rb | 5 ++++ spec/models/ci/stage_spec.rb | 5 ++++ spec/models/ci/step_spec.rb | 5 ++++ 34 files changed, 207 insertions(+), 54 deletions(-) create mode 100644 app/helpers/ci/builds_helper.rb create mode 100644 app/helpers/ci/languages_helper.rb delete mode 100644 app/helpers/dev_ops/builds_helper.rb delete mode 100644 app/helpers/dev_ops/languages_helper.rb create mode 100644 app/models/ci/build.rb create mode 100644 app/models/ci/local_base.rb create mode 100644 app/models/ci/remote_base.rb create mode 100644 app/models/ci/repo.rb create mode 100644 app/models/ci/stage.rb create mode 100644 app/models/ci/step.rb create mode 100644 app/models/ci/user.rb create mode 100644 app/queries/ci/builds/list_query.rb create mode 100644 app/views/ci/builds/_build.json.jbuilder create mode 100644 app/views/ci/builds/_stage.json.jbuilder create mode 100644 app/views/ci/builds/_step.json.jbuilder create mode 100644 app/views/ci/builds/index.json.jbuilder create mode 100644 app/views/ci/builds/show.json.jbuilder rename app/views/{dev_ops => ci}/languages/common.json.jbuilder (100%) rename app/views/{dev_ops => ci}/languages/index.json.jbuilder (100%) rename app/views/{dev_ops => ci}/languages/show.json.jbuilder (100%) delete mode 100644 app/views/dev_ops/builds/index.json.jbuilder delete mode 100644 app/views/dev_ops/builds/show.json.jbuilder create mode 100644 spec/models/ci/build_spec.rb create mode 100644 spec/models/ci/repo_spec.rb create mode 100644 spec/models/ci/stage_spec.rb create mode 100644 spec/models/ci/step_spec.rb diff --git a/README.md b/README.md index 422b665f3..d24d3d83f 100644 --- a/README.md +++ b/README.md @@ -2695,22 +2695,15 @@ curl -X GET http://localhost:3000/api/dev_ops/languages/114.json | jq #### 获取构建列表 ``` -GET /api/dev_ops/builds +GET /api/:owner/:repo/builds ``` *示例* ``` curl -X GET \ --d 'project_id=4844' \ -http://localhost:3000/api/dev_ops/builds | jq +http://localhost:3000/api/Jason/forge/builds | jq ``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|project_id |是|int |project's id | - *返回参数说明:* |参数名|类型|说明| @@ -2745,10 +2738,11 @@ http://localhost:3000/api/dev_ops/builds | jq "author_email": "email.com", "author_avatar": "", "sender": "jasder", - "started": 1595317786, - "finished": 1595318426, - "created": 1595317786, - "updated": 1595317786, + "started": "2020-08-19 06:22", + "finished": "2020-08-19 06:22", + "created": "2020-08-19 06:22", + "updated": "2020-08-19 06:22", + "duration_time": 0, "version": 3 } ] @@ -2757,22 +2751,20 @@ http://localhost:3000/api/dev_ops/builds | jq #### 获取某条构建详情信息 ``` -GET /api/dev_ops/builds/:number +GET /api/:owner/:repo/builds/:build ``` *示例* ``` curl -X GET \ --d 'project_id=4844' \ -http://ocalhost:3000/api/dev_ops/builds/1 | jq +http://ocalhost:3000/api/jasder/forge/builds/1 | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| -|project_id |int|project's id| -|number |是|int |build's number | +|build |是|int |build's number | *返回参数说明:* diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index edbd5b8a4..8212ff9a1 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -1,3 +1,10 @@ class Ci::BaseController < ApplicationController before_action :require_login + + def load_repo + namespace = params[:owner] + id = params[:repo] || params[:id] + + @user, @repo = Ci::Repo.find_with_namespace(namespace, id) + end end diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index 1a5552485..ff49c3ee2 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -2,14 +2,18 @@ class Ci::BuildsController < Ci::BaseController include RepositoriesHelper include Devopsable - before_action :find_project, :find_cloud_account - before_action :find_cloud_account, except: :get_trustie_pipeline - before_action :ci_authorize! + before_action :load_repo def index - result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier).builds + scope = @repo.builds - render json: result + scope = Ci::Builds::ListQuery.call(@repo, params) + @total_count = scope.map(&:build_id).size + @builds = paginate scope + end + + def show + @build = @repo.builds.includes(stages: [:steps]).find_by(build_number: params[:build]) end def detail @@ -49,10 +53,6 @@ class Ci::BuildsController < Ci::BaseController end private - def find_project - @project = Project.find params[:project_id] - end - def find_cloud_account @cloud_account = @project.ci_cloud_account end diff --git a/app/helpers/ci/builds_helper.rb b/app/helpers/ci/builds_helper.rb new file mode 100644 index 000000000..41c92229a --- /dev/null +++ b/app/helpers/ci/builds_helper.rb @@ -0,0 +1,10 @@ +module Ci::BuildsHelper + def format_utc_time(unix_time) + Rails.logger.info "00000000000000 #{unix_time}" + DateTime.strptime(unix_time.to_s,'%s').strftime("%Y-%m-%d %H:%M") + end + + def render_duartion_time(end_time, start_time) + (end_time - start_time) / 10000 + end +end diff --git a/app/helpers/ci/languages_helper.rb b/app/helpers/ci/languages_helper.rb new file mode 100644 index 000000000..dc4fa8978 --- /dev/null +++ b/app/helpers/ci/languages_helper.rb @@ -0,0 +1,2 @@ +module Ci::LanguagesHelper +end diff --git a/app/helpers/dev_ops/builds_helper.rb b/app/helpers/dev_ops/builds_helper.rb deleted file mode 100644 index 81d98403b..000000000 --- a/app/helpers/dev_ops/builds_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module DevOps::BuildsHelper -end diff --git a/app/helpers/dev_ops/languages_helper.rb b/app/helpers/dev_ops/languages_helper.rb deleted file mode 100644 index 00b1b6183..000000000 --- a/app/helpers/dev_ops/languages_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module DevOps::LanguagesHelper -end diff --git a/app/libs/ci/drone/server.rb b/app/libs/ci/drone/server.rb index 60fbfcb8e..2f0dad502 100644 --- a/app/libs/ci/drone/server.rb +++ b/app/libs/ci/drone/server.rb @@ -40,23 +40,23 @@ class Ci::Drone::Server end def database_username - database_config[Rails.env]["ci"]["username"] + database_config[Rails.env]["ci_server_db"]["username"] end def database_password - database_config[Rails.env]["ci"]["password"] + database_config[Rails.env]["ci_server_db"]["password"] end def database_host - database_config[Rails.env]["ci"]["host"] + database_config[Rails.env]["ci_server_db"]["host"] end def database_port - database_config[Rails.env]["ci"]["port"] || 3306 + database_config[Rails.env]["ci_server_db"]["port"] || 3306 end def database - database_config[Rails.env]["ci"]["database"] + database_config[Rails.env]["ci_server_db"]["database"] end def database_config diff --git a/app/models/ci.rb b/app/models/ci.rb index 50a7a6279..2bce3b852 100644 --- a/app/models/ci.rb +++ b/app/models/ci.rb @@ -1,5 +1,5 @@ module Ci - def self.table_name_prefix - 'ci_' - end + # def self.table_name_prefix + # 'ci_' + # end end diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb new file mode 100644 index 000000000..b119c9d98 --- /dev/null +++ b/app/models/ci/build.rb @@ -0,0 +1,6 @@ +class Ci::Build < Ci::RemoteBase + self.primary_key = 'build_id' + + belongs_to :repo, foreign_key: :build_repo_id + has_many :stages, foreign_key: "stage_build_id", dependent: :destroy +end diff --git a/app/models/ci/cloud_account.rb b/app/models/ci/cloud_account.rb index 212aab639..30f490797 100644 --- a/app/models/ci/cloud_account.rb +++ b/app/models/ci/cloud_account.rb @@ -1,4 +1,5 @@ -class Ci::CloudAccount < ApplicationRecord +class Ci::CloudAccount < Local::Base + belongs_to :project belongs_to :user diff --git a/app/models/ci/language.rb b/app/models/ci/language.rb index 0d16e5bd2..97c4a57d2 100644 --- a/app/models/ci/language.rb +++ b/app/models/ci/language.rb @@ -1,4 +1,4 @@ -class Ci::Language < ApplicationRecord +class Ci::Language < Local::Base # before_save :encode_content belongs_to :cover, class_name: "Attachment", foreign_key: :cover_id, optional: true diff --git a/app/models/ci/local_base.rb b/app/models/ci/local_base.rb new file mode 100644 index 000000000..e5d8968de --- /dev/null +++ b/app/models/ci/local_base.rb @@ -0,0 +1,5 @@ +class Local::Base < ApplicationRecord + def self.table_name_prefix + "ci_" + end +end diff --git a/app/models/ci/remote_base.rb b/app/models/ci/remote_base.rb new file mode 100644 index 000000000..ba2f5bbb1 --- /dev/null +++ b/app/models/ci/remote_base.rb @@ -0,0 +1,7 @@ +class Ci::RemoteBase < ApplicationRecord + self.abstract_class = true + + establish_connection Rails.configuration.database_configuration[Rails.env]["ci_server_db"] + + +end diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb new file mode 100644 index 000000000..83092d9cd --- /dev/null +++ b/app/models/ci/repo.rb @@ -0,0 +1,19 @@ +class Ci::Repo < Ci::RemoteBase + self.primary_key = 'repo_id' + + belongs_to :user, foreign_key: :repo_user_id + has_many :builds, foreign_key: "build_repo_id", dependent: :destroy + + def self.find_with_namespace(namespace_path, identifier) + logger.info "########namespace_path: #{namespace_path} ########identifier: #{identifier} " + + user = Ci::User.find_by_user_login namespace_path + return nil if user.blank? + + repo = user.repos.find_by(repo_name: identifier) + + return nil if repo.blank? + [user, repo] + end + +end diff --git a/app/models/ci/stage.rb b/app/models/ci/stage.rb new file mode 100644 index 000000000..2309f05d4 --- /dev/null +++ b/app/models/ci/stage.rb @@ -0,0 +1,6 @@ +class Ci::Stage < Ci::RemoteBase + self.primary_key = 'stage_id' + + belongs_to :build, foreign_key: :stage_build_id + has_many :steps, foreign_key: "step_stage_id", dependent: :destroy +end diff --git a/app/models/ci/step.rb b/app/models/ci/step.rb new file mode 100644 index 000000000..23d540314 --- /dev/null +++ b/app/models/ci/step.rb @@ -0,0 +1,5 @@ +class Ci::Step < Ci::RemoteBase + self.primary_key = 'step_id' + + belongs_to :stage, foreign_key: :step_stage_id +end diff --git a/app/models/ci/user.rb b/app/models/ci/user.rb new file mode 100644 index 000000000..90387b492 --- /dev/null +++ b/app/models/ci/user.rb @@ -0,0 +1,6 @@ +class Ci::User < Ci::RemoteBase + self.primary_key = 'user_id' + + has_many :repos, foreign_key: "repo_user_id", dependent: :destroy + +end diff --git a/app/queries/ci/builds/list_query.rb b/app/queries/ci/builds/list_query.rb new file mode 100644 index 000000000..b86fbd7da --- /dev/null +++ b/app/queries/ci/builds/list_query.rb @@ -0,0 +1,18 @@ +class Ci::Builds::ListQuery < ApplicationQuery + include CustomSortable + + attr_reader :params + + sort_columns :build_created, default_by: :build_created, default_direction: :desc + + def initialize(repo, params) + @repo = repo + @params = params + end + + def call + course_lists = @repo.builds + + custom_sort(course_lists, params[:sort_by], params[:sort_direction]) + end +end diff --git a/app/views/ci/builds/_build.json.jbuilder b/app/views/ci/builds/_build.json.jbuilder new file mode 100644 index 000000000..222d922fc --- /dev/null +++ b/app/views/ci/builds/_build.json.jbuilder @@ -0,0 +1,15 @@ +json.id build.build_id +json.repo_id build.build_repo_id +json.number build.build_number +json.status build.build_status +json.event build.build_event +json.action build.build_action +# json.link build.build_link +json.message build.build_message +json.author build.build_author +json.started format_utc_time build.build_started +json.finished format_utc_time build.build_finished +json.created format_utc_time build.build_created +json.updated format_utc_time build.build_updated +json.version build.build_version +json.duration_time render_duartion_time(build.build_finished, build.build_started) diff --git a/app/views/ci/builds/_stage.json.jbuilder b/app/views/ci/builds/_stage.json.jbuilder new file mode 100644 index 000000000..c2a079915 --- /dev/null +++ b/app/views/ci/builds/_stage.json.jbuilder @@ -0,0 +1,22 @@ +json.id stage.stage_id +json.repo_id stage.stage_repo_id +json.build_id stage.stage_build_id +json.name stage.stage_name +json.kind stage.stage_kind +json.type stage.stage_type +json.number stage.stage_number +json.status stage.stage_status +json.errignore stage.stage_errignore +json.exit_code stage.stage_exit_code +json.os stage.stage_os +json.arch stage.stage_arch +json.started format_utc_time(stage.stage_started) +json.stopped format_utc_time(stage.stage_stoped) +json.created format_utc_time(stage.stage_created) +json.updated format_utc_time(stage.stage_updated) +json.version stage.stage_version +json.on_success stage.stage_on_success +json.on_failure stage.stage_on_failure +json.steps build.steps do |stage| + json.partial! "/ci/builds/step", step: step +end diff --git a/app/views/ci/builds/_step.json.jbuilder b/app/views/ci/builds/_step.json.jbuilder new file mode 100644 index 000000000..097b4cf2c --- /dev/null +++ b/app/views/ci/builds/_step.json.jbuilder @@ -0,0 +1,8 @@ +json.id step.step_id +json.number step.step_number +json.name step.step_name +json.status step.step_status +json.exit_code step.step_exit_code +json.started format_utc_time(step.step_started) +json.stopped format_utc_time(step.step_stopped) +json.version step.build_version diff --git a/app/views/ci/builds/index.json.jbuilder b/app/views/ci/builds/index.json.jbuilder new file mode 100644 index 000000000..40fc515c5 --- /dev/null +++ b/app/views/ci/builds/index.json.jbuilder @@ -0,0 +1,4 @@ +json.total_count @total_count +json.builds @builds do |build| + json.partial! "/ci/builds/build", build: build +end diff --git a/app/views/ci/builds/show.json.jbuilder b/app/views/ci/builds/show.json.jbuilder new file mode 100644 index 000000000..0c2b21e2e --- /dev/null +++ b/app/views/ci/builds/show.json.jbuilder @@ -0,0 +1,4 @@ +json.partial! "/ci/builds/build", build: @build +json.stages @build.stages do |stage| + json.partial! "/ci/builds/stage", stage: stage +end diff --git a/app/views/dev_ops/languages/common.json.jbuilder b/app/views/ci/languages/common.json.jbuilder similarity index 100% rename from app/views/dev_ops/languages/common.json.jbuilder rename to app/views/ci/languages/common.json.jbuilder diff --git a/app/views/dev_ops/languages/index.json.jbuilder b/app/views/ci/languages/index.json.jbuilder similarity index 100% rename from app/views/dev_ops/languages/index.json.jbuilder rename to app/views/ci/languages/index.json.jbuilder diff --git a/app/views/dev_ops/languages/show.json.jbuilder b/app/views/ci/languages/show.json.jbuilder similarity index 100% rename from app/views/dev_ops/languages/show.json.jbuilder rename to app/views/ci/languages/show.json.jbuilder diff --git a/app/views/dev_ops/builds/index.json.jbuilder b/app/views/dev_ops/builds/index.json.jbuilder deleted file mode 100644 index b6539104b..000000000 --- a/app/views/dev_ops/builds/index.json.jbuilder +++ /dev/null @@ -1,2 +0,0 @@ -

DevOps::Builds#index

-

Find me in app/views/dev_ops/builds/index.html.erb

diff --git a/app/views/dev_ops/builds/show.json.jbuilder b/app/views/dev_ops/builds/show.json.jbuilder deleted file mode 100644 index f25a17b7b..000000000 --- a/app/views/dev_ops/builds/show.json.jbuilder +++ /dev/null @@ -1,2 +0,0 @@ -

DevOps::Builds#show

-

Find me in app/views/dev_ops/builds/show.html.erb

diff --git a/config/routes.rb b/config/routes.rb index 57f305776..68c4edd19 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -31,15 +31,15 @@ Rails.application.routes.draw do get :common end end - resources :builds, only: :index do - collection do - get 'get_trustie_pipeline', to: 'builds#get_trustie_pipeline', as: 'get_trustie_pipeline' - get ':number', to: 'builds#detail', as: 'detail' - post ':number', to: 'builds#restart', as: 'restart' - delete ':number', to: 'builds#delete', as: 'delete' - get ':number/logs/:stage/:step', to: 'builds#logs', as: 'logs' - end - end + # resources :builds, only: :index do + # collection do + # get 'get_trustie_pipeline', to: 'builds#get_trustie_pipeline', as: 'get_trustie_pipeline' + # get ':number', to: 'builds#detail', as: 'detail' + # post ':number', to: 'builds#restart', as: 'restart' + # delete ':number', to: 'builds#delete', as: 'delete' + # get ':number/logs/:stage/:step', to: 'builds#logs', as: 'logs' + # end + # end end resources :sync_forge, only: [:create] do @@ -338,6 +338,10 @@ Rails.application.routes.draw do resources :issue_tags, :path => :labels, only: [:create, :edit, :update, :destroy, :index] resources :version_releases, :path => :releases, only: [:index,:new, :create, :edit, :update, :destroy] + scope module: :ci do + resources :builds, param: :build + end + scope module: :projects do scope do get( diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb new file mode 100644 index 000000000..3246d09ea --- /dev/null +++ b/spec/models/ci/build_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Ci::Build, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/ci/repo_spec.rb b/spec/models/ci/repo_spec.rb new file mode 100644 index 000000000..407536991 --- /dev/null +++ b/spec/models/ci/repo_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Ci::Repo, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/ci/stage_spec.rb b/spec/models/ci/stage_spec.rb new file mode 100644 index 000000000..ba43cca2a --- /dev/null +++ b/spec/models/ci/stage_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Ci::Stage, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/ci/step_spec.rb b/spec/models/ci/step_spec.rb new file mode 100644 index 000000000..46ab7a4a0 --- /dev/null +++ b/spec/models/ci/step_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Ci::Step, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From 137e780db47efd22d1158bde8ef7243c395db365 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 21 Aug 2020 10:15:26 +0800 Subject: [PATCH 080/384] FIX . --- app/controllers/ci/builds_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index ff49c3ee2..336734b6a 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -8,6 +8,7 @@ class Ci::BuildsController < Ci::BaseController scope = @repo.builds scope = Ci::Builds::ListQuery.call(@repo, params) + @total_count = scope.map(&:build_id).size @builds = paginate scope end From e7a0bc7e0f7ceacf3ee78544900db90d354c29bd Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 21 Aug 2020 10:46:37 +0800 Subject: [PATCH 081/384] FIX code bug --- app/models/ci/cloud_account.rb | 5 ++--- app/models/ci/language.rb | 2 +- app/models/ci/local_base.rb | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/models/ci/cloud_account.rb b/app/models/ci/cloud_account.rb index 30f490797..409c77947 100644 --- a/app/models/ci/cloud_account.rb +++ b/app/models/ci/cloud_account.rb @@ -1,5 +1,4 @@ -class Ci::CloudAccount < Local::Base - +class Ci::CloudAccount < Ci::LocalBase belongs_to :project belongs_to :user @@ -12,7 +11,7 @@ class Ci::CloudAccount < Local::Base end def drone_url - ["http://", drone_host].join + ["http://", self.drone_host].join end def visible_secret diff --git a/app/models/ci/language.rb b/app/models/ci/language.rb index 97c4a57d2..edbdeb0b7 100644 --- a/app/models/ci/language.rb +++ b/app/models/ci/language.rb @@ -1,4 +1,4 @@ -class Ci::Language < Local::Base +class Ci::Language < Ci::LocalBase # before_save :encode_content belongs_to :cover, class_name: "Attachment", foreign_key: :cover_id, optional: true diff --git a/app/models/ci/local_base.rb b/app/models/ci/local_base.rb index e5d8968de..258f88a4b 100644 --- a/app/models/ci/local_base.rb +++ b/app/models/ci/local_base.rb @@ -1,4 +1,4 @@ -class Local::Base < ApplicationRecord +class Ci::LocalBase < ApplicationRecord def self.table_name_prefix "ci_" end From ae9d857d7fb63580ae56b725ff89c82f664526db Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 21 Aug 2020 14:53:48 +0800 Subject: [PATCH 082/384] FIX ci server --- README.md | 82 ++++++++----------- app/controllers/ci/builds_controller.rb | 27 +++--- .../ci/cloud_accounts_controller.rb | 4 +- app/controllers/ci/projects_controller.rb | 30 +++++++ app/controllers/concerns/devopsable.rb | 4 +- app/controllers/projects_controller.rb | 1 + app/controllers/users_controller.rb | 13 --- app/models/ci/cloud_account.rb | 1 - app/models/ci/local_base.rb | 2 + app/models/project.rb | 1 - app/views/ci/projects/authorize.json.jbuilder | 12 +++ app/views/projects/ci_authorize.json.jbuilder | 12 +++ config/routes.rb | 33 ++++++-- 13 files changed, 135 insertions(+), 87 deletions(-) create mode 100644 app/controllers/ci/projects_controller.rb create mode 100644 app/views/ci/projects/authorize.json.jbuilder create mode 100644 app/views/projects/ci_authorize.json.jbuilder diff --git a/README.md b/README.md index d24d3d83f..6a5b3db37 100644 --- a/README.md +++ b/README.md @@ -2403,29 +2403,28 @@ http://localhost:3000/api//api/repositories/3868/delete_file | jq ### DevOps相关api --- -#### 获取devops流程步骤(判断devops是否初始化) +#### 获取devops流程步骤 ``` -GET /api/users/devops +GET /api/:owner/:repo/ci_authorize ``` *示例* ``` curl -X GET \ --d "project_id=5988" \ -https://localhost:3000/api/users/devops.json | jq +http://localhost:3000/api/jasder/forgeplus/ci_authorize.json | jq ``` - *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| -|project_id |是|string |项目id或者项目的标识identifier| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | *返回参数说明:* |参数名|类型|说明| |-|-|-| -|step |int|初始化devops流程步骤; 0: 标识未开启devops,1: 标识用户已填写了云服务器相关信息,但并未开启认证, 2: 标识用户已开启了CI服务端的认证, 3: 标识用户已经授权并获取了CI服务的token| +|step |int|初始化devops流程步骤; 0: 标识未开启devops,1: 标识用户已填写了云服务器相关信息,但并未开启认证, 2: 标识用户已开启了CI服务端的认证, 3: 标识用户ci服务已初始化| |account |string|你的云服务器帐号| |ip |string|你的云服务器帐号ip| |secret |string|你的云服务器登录密码| @@ -2450,7 +2449,7 @@ https://localhost:3000/api/users/devops.json | jq #### 初始化DevOps流程 ``` -POST /api/ci/cloud_accounts +POST /api/:owner/:repo/cloud_accounts ``` *示例* @@ -2459,18 +2458,18 @@ curl -X POST \ -d "account=xx" \ -d "secret=xxx" \ -d "ip_num=xx.xx.xx.xx" \ --d "project_id=5988" \ -https://localhost:3000/api/ci/cloud_accounts.json | jq +https://localhost:3000/api/jasder/forgeplus/cloud_accounts.json | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | |account |是|string |云服务器ssh连接登录用户名 | |secret |是|string |云服务器ssh连接登录秘密 | |ip_num |否|string |云服务器公网IP | -|project_id |否|string |project's id| *返回参数说明:* @@ -2492,20 +2491,13 @@ https://localhost:3000/api/ci/cloud_accounts.json | jq #### 用户认证CI服务端后,需要调用该接口进行更新devlops流程状态 ``` -PUT /api/users/devops_authenticate +PUT /api/:owner/:repo/ci_authorize ``` *示例* ``` curl -X PUT \ --d "project_id=5988" \ -http://localhost:3000/api/users/devops_authenticate.json | jq +http://localhost:3000/api/jasder/forgeplus/ci_authorize.json | jq ``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|project_id |是|string |项目id或者项目的标识identifier| - *返回参数说明:* @@ -2523,20 +2515,20 @@ http://localhost:3000/api/users/devops_authenticate.json | jq #### 激活项目 ``` -POST /api/ci/cloud_accounts/:id/activate +POST /api/:owner/:repo/cloud_accounts/:id/activate ``` *示例* ``` curl -X POST \ --d "project_id=4844" \ -d "drone_token=xxxxxxxxxx" \ -http://localhost:3000/api/ci/cloud_accounts/1/activate.json | jq +http://localhost:3000/api/jasder/forgeplus/cloud_accounts/1/activate.json | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| -|project_id |是|int |project's id or identifier | +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | |id |是|int |cloud_account's id | |drone_token |否|string |CI端用户的token值,只有当用户第一次激活时,才需要填写该值 | @@ -2557,19 +2549,19 @@ http://localhost:3000/api/ci/cloud_accounts/1/activate.json | jq #### 获取仓库的.trustie-pipeline.yml ``` -GET /api/ci/builds/get_trustie_pipeline +GET /api/:owner/:repo/get_trustie_pipeline ``` *示例* ``` curl -X GET \ --d "project_id=4844" \ -http://localhost:3000/api/ci/builds/get_trustie_pipeline.json | jq +http://localhost:3000/api/jasder/forge/get_trustie_pipeline.json | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| -|project_id |是|int |project's id | +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | |ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | @@ -2593,12 +2585,12 @@ http://localhost:3000/api/ci/builds/get_trustie_pipeline.json | jq #### 获取语言列表 ``` -GET /api/dev_ops/languages +GET /api/ci/languages ``` *示例* ``` -curl -X GET http://localhost:3000/api/dev_ops/languages.json | jq +curl -X GET http://localhost:3000/api/ci/languages.json | jq ``` *返回参数说明:* @@ -2625,12 +2617,12 @@ curl -X GET http://localhost:3000/api/dev_ops/languages.json | jq #### 获取常用的6大语言 ``` -GET /api/dev_ops/languages/common +GET /api/ci/languages/common ``` *示例* ``` -curl -X GET http://localhost:3000/api/dev_ops/languages/common.json | jq +curl -X GET http://localhost:3000/api/ci/languages/common.json | jq ``` *返回参数说明:* @@ -2657,12 +2649,12 @@ curl -X GET http://localhost:3000/api/dev_ops/languages/common.json | jq #### 获取语言详情 ``` -GET /api/dev_ops/languages/:id +GET /api/ci/languages/:id ``` *示例* ``` -curl -X GET http://localhost:3000/api/dev_ops/languages/114.json | jq +curl -X GET http://localhost:3000/api/ci/languages/114.json | jq ``` *请求参数说明:* @@ -2857,22 +2849,20 @@ http://ocalhost:3000/api/jasder/forge/builds/1 | jq #### 重启构建/重新构建 ``` -POST /api/dev_ops/builds/:number +POST /api/:owner/:repo/builds/:build/restart ``` *示例* ``` curl -X POST \ --d 'project_id=4844' \ -http://localhost:3000/api/dev_ops/builds/1 | jq +http://localhost:3000/api/jasder/forgeplus/builds/1 | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| -|project_id |int|project's id| -|number |是|int |build's number | +|build |是|int |build's number | *返回参数说明:* @@ -2917,22 +2907,20 @@ http://localhost:3000/api/dev_ops/builds/1 | jq #### 关闭构建 ``` -DELETE /api/dev_ops/builds/:number +DELETE /api/:owner/:repo/builds/:build/stop ``` *示例* ``` curl -X DELETE \ --d 'project_id=4844' \ -http://localhost:3000/api/dev_ops/builds/2 | jq +http://localhost:3000/api/jaser/forge/builds/2 | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| -|project_id |int|project's id| -|number |是|int |build's number | +|build |是|int |build's number | *返回参数说明:* @@ -3025,13 +3013,12 @@ http://localhost:3000/api/dev_ops/builds/2 | jq #### 获取某条构建的log信息 ``` -GET /api/dev_ops/builds/:number/logs/:stage/:step +GET /api/:owner/:repo/builds/:build/logs/:stage/:step ``` *示例* ``` curl -X GET \ --d 'project_id=4844' \ http://localhost:3000/api/dev_ops/builds/2/logs/1/1 | jq ``` @@ -3039,8 +3026,7 @@ http://localhost:3000/api/dev_ops/builds/2/logs/1/1 | jq |参数名|必选|类型|说明| |-|-|-|-| -|project_id |int|project's id| -|number |是|int |build's number | +|build |是|int |build's number | |stage |是|int |build's stage number | |step |是|int |build's step number | diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index 336734b6a..33041afe6 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -3,12 +3,13 @@ class Ci::BuildsController < Ci::BaseController include Devopsable before_action :load_repo + before_action :find_cloud_account, except: [:index, :show] def index scope = @repo.builds scope = Ci::Builds::ListQuery.call(@repo, params) - + @total_count = scope.map(&:build_id).size @builds = paginate scope end @@ -17,25 +18,19 @@ class Ci::BuildsController < Ci::BaseController @build = @repo.builds.includes(stages: [:steps]).find_by(build_number: params[:build]) end - def detail - result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).build - - render json: result - end - def restart - result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).restart + result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:number]).restart render json: result end - def delete - result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).stop + def stop + result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:number]).stop render json: result end def logs - result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier, build: params[:number], stage: params[:stage], step: params[:step]).logs + result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, build: params[:number], stage: params[:stage], step: params[:step]).logs render json: result end @@ -55,6 +50,14 @@ class Ci::BuildsController < Ci::BaseController private def find_cloud_account - @cloud_account = @project.ci_cloud_account + @cloud_account = current_user.cloud_account + end + + def load_ci_user + begin + @ci_user = Ci::User.find_by(user_login: params[:owner]) + rescue + render_not_found + end end end diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index d941a9ae2..2fc488b0e 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -1,7 +1,7 @@ class Ci::CloudAccountsController < Ci::BaseController include Devopsable - before_action :auto_load_project + before_action :load_project before_action :ci_authorize! before_action :find_cloud_account, only: %i[activate] @@ -83,6 +83,6 @@ class Ci::CloudAccountsController < Ci::BaseController private def devops_params - params.permit(:account, :secret, :ip_num, :project_id) + params.permit(:account, :secret, :ip_num) end end diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb new file mode 100644 index 000000000..3cd2d988e --- /dev/null +++ b/app/controllers/ci/projects_controller.rb @@ -0,0 +1,30 @@ +class Ci::ProjectsController < Ci::BaseController + include Devopsable + + before_action :load_project + + def authorize + @user = current_user + limit_project_owner_can_devops!(@user, @project) + + if request.put? + @user.set_drone_step!(User::DEVOPS_VERIFIED) + render_ok + end + @cloud_account = @user.ci_cloud_account + end + + # get .trustie-pipeline.yml file + def get_trustie_pipeline + file_path_uri = URI.parse('.trustie-pipeline.yml') + interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: params[:ref] || "master") + if interactor.success? + file = interactor.result + return render json: {} if file[:status] + + json = {name: file['name'], path: file['path'], sha: file['sha'], content: render_decode64_content(file['content'])} + render json: json + end + end + +end diff --git a/app/controllers/concerns/devopsable.rb b/app/controllers/concerns/devopsable.rb index ea6a48f16..97983c318 100644 --- a/app/controllers/concerns/devopsable.rb +++ b/app/controllers/concerns/devopsable.rb @@ -15,8 +15,8 @@ module Devopsable end # TODO 暂时限制项目拥有者才有权限操作 - def limit_owner_can_devops!(user) - return if @project.owner? user + def limit_project_owner_can_devops!(user, project) + return if project.owner? user render_forbidden end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index f46945f80..8b169cc73 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -2,6 +2,7 @@ class ProjectsController < ApplicationController include ApplicationHelper include OperateProjectAbilityAble include ProjectsHelper + before_action :require_login, except: %i[index branches group_type_list simple show fork_users praise_users watch_users] before_action :load_project, except: %i[index group_type_list migrate create] before_action :authorizate_user_can_edit_project!, only: %i[update] diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 5ea43c47e..167e7be6c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -220,19 +220,6 @@ class UsersController < ApplicationController render_ok end - def devops - @user = current_user - limit_owner_can_devops!(user) - @cloud_account = @user.dev_ops_cloud_account - end - - # devops 认证 - def devops_authenticate - limit_owner_can_devops!(current_user) - current_user.set_drone_step!(User::DEVOPS_VERIFIED) - render_ok - end - private def load_user @user = User.find_by_login(params[:id]) || User.find_by(id: params[:id]) diff --git a/app/models/ci/cloud_account.rb b/app/models/ci/cloud_account.rb index 409c77947..f54db49d9 100644 --- a/app/models/ci/cloud_account.rb +++ b/app/models/ci/cloud_account.rb @@ -1,5 +1,4 @@ class Ci::CloudAccount < Ci::LocalBase - belongs_to :project belongs_to :user def drone_host diff --git a/app/models/ci/local_base.rb b/app/models/ci/local_base.rb index 258f88a4b..2d6bf70ff 100644 --- a/app/models/ci/local_base.rb +++ b/app/models/ci/local_base.rb @@ -1,4 +1,6 @@ class Ci::LocalBase < ApplicationRecord + self.abstract_class = true + def self.table_name_prefix "ci_" end diff --git a/app/models/project.rb b/app/models/project.rb index 24bbe9afc..bd2008af6 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -20,7 +20,6 @@ class Project < ApplicationRecord has_many :fork_users, dependent: :destroy # has_many :commits, dependent: :destroy - has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', dependent: :destroy has_one :project_score, dependent: :destroy has_one :repository, dependent: :destroy has_many :pull_requests, dependent: :destroy diff --git a/app/views/ci/projects/authorize.json.jbuilder b/app/views/ci/projects/authorize.json.jbuilder new file mode 100644 index 000000000..7ae5fa2c1 --- /dev/null +++ b/app/views/ci/projects/authorize.json.jbuilder @@ -0,0 +1,12 @@ +json.step @user.devops_step +json.cloud_account do + if @cloud_account && !@user.devops_uninit? + json.account @cloud_account.account + json.ip @cloud_account.drone_ip + json.secret @cloud_account.visible_secret + json.authenticate_url "#{@cloud_account.drone_url}/login" if @user.devops_unverified? + json.get_drone_token_url "#{@cloud_account.drone_url}/account" if @user.devops_verified? + else + json.nil! + end +end diff --git a/app/views/projects/ci_authorize.json.jbuilder b/app/views/projects/ci_authorize.json.jbuilder new file mode 100644 index 000000000..7ae5fa2c1 --- /dev/null +++ b/app/views/projects/ci_authorize.json.jbuilder @@ -0,0 +1,12 @@ +json.step @user.devops_step +json.cloud_account do + if @cloud_account && !@user.devops_uninit? + json.account @cloud_account.account + json.ip @cloud_account.drone_ip + json.secret @cloud_account.visible_secret + json.authenticate_url "#{@cloud_account.drone_url}/login" if @user.devops_unverified? + json.get_drone_token_url "#{@cloud_account.drone_url}/account" if @user.devops_verified? + else + json.nil! + end +end diff --git a/config/routes.rb b/config/routes.rb index 68c4edd19..a1afa6b7c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -21,11 +21,6 @@ Rails.application.routes.draw do resources :edu_settings scope '/api' do namespace :ci do - resources :cloud_accounts, only: [:create] do - member do - post :activate - end - end resources :languages, only: [:index, :show] do collection do get :common @@ -149,8 +144,6 @@ Rails.application.routes.draw do post :sync_salt get :trustie_projects get :trustie_related_projects - get :devops - put :devops_authenticate end scope module: :users do @@ -339,7 +332,31 @@ Rails.application.routes.draw do resources :version_releases, :path => :releases, only: [:index,:new, :create, :edit, :update, :destroy] scope module: :ci do - resources :builds, param: :build + scope do + match( + 'ci_authorize', + to: 'projects#authorize', + as: :ci_authorize, + :via => [:get, :put] + ) + get( + 'get_trustie_pipeline', + to: 'projects#get_trustie_pipeline', + as: :get_trustie_pipeline + ) + end + resources :cloud_accounts, only: [:create] do + member do + post :activate + end + end + resources :builds, param: :build do + member do + post :restart + delete :stop + get '/logs/:stage/:step', to: 'builds#logs', as: 'logs' + end + end end scope module: :projects do From c1e6792f29d8e17aa9296f77f08df894ffb556b4 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 21 Aug 2020 15:26:42 +0800 Subject: [PATCH 083/384] FIX cloud account bug --- app/controllers/ci/cloud_accounts_controller.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 2fc488b0e..119bef079 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -85,4 +85,8 @@ class Ci::CloudAccountsController < Ci::BaseController def devops_params params.permit(:account, :secret, :ip_num) end + + def find_cloud_account + @cloud_account = Ci::CloudAccount.find params[:id] + end end From 8758ec3197edc3bdf9feac31a091dd3c197a8ef4 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 21 Aug 2020 16:06:47 +0800 Subject: [PATCH 084/384] Update trustie pipeline api --- README.md | 33 +++++++++++++++++++++++ app/controllers/ci/builds_controller.rb | 13 --------- app/controllers/ci/projects_controller.rb | 11 ++++++++ app/libs/ci/drone/api.rb | 14 +++++----- config/routes.rb | 5 ++++ 5 files changed, 56 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 6a5b3db37..48fd21106 100644 --- a/README.md +++ b/README.md @@ -2583,6 +2583,39 @@ http://localhost:3000/api/jasder/forge/get_trustie_pipeline.json | jq ``` --- +#### 更新'.trustie-pipeline.yml'文件 +``` +PUT /api/:owner/:repo/update_trustie_pipeline +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/jasder/forge/update_trustie_pipeline.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | +|ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|接口返回状态, 1: 请求成功, -1: 请求失败| +|message |string|文件夹或文件相对路径| + +``` +{ + "status": 1, + "message": ".trustie-pipeline.yml" +} +``` +--- + #### 获取语言列表 ``` GET /api/ci/languages diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index 33041afe6..3579825d1 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -35,19 +35,6 @@ class Ci::BuildsController < Ci::BaseController render json: result end - # get .trustie-pipeline.yml file - def get_trustie_pipeline - file_path_uri = URI.parse('.trustie-pipeline.yml') - interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: params[:ref] || "master") - if interactor.success? - file = interactor.result - return render json: {} if file[:status] - - json = {name: file['name'], path: file['path'], sha: file['sha'], content: render_decode64_content(file['content'])} - render json: json - end - end - private def find_cloud_account @cloud_account = current_user.cloud_account diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index 3cd2d988e..4c46f2c9b 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -27,4 +27,15 @@ class Ci::ProjectsController < Ci::BaseController end end + def update_trustie_pipeline + interactor = Gitea::UpdateFileInteractor.call(current_user.gitea_token, params[:owner], params.merge(identifier: @project.identifier)) + if interactor.success? + @file = interactor.result + Ci::Drone::API.new(current_user.cloud_account.drone_token, current_user.cloud_account.endpoint, params[:owner], @project.identifier, config_path: '.trustie-pipeline.yml').config_yml + render_result(1, "更新成功") + else + render_error(interactor.error) + end + end + end diff --git a/app/libs/ci/drone/api.rb b/app/libs/ci/drone/api.rb index 0c83007a5..499636468 100644 --- a/app/libs/ci/drone/api.rb +++ b/app/libs/ci/drone/api.rb @@ -15,7 +15,7 @@ class Ci::Drone::API < Ci::Drone::Request # Build List # GET api/repos/{owner}/{name}/builds # eq: - # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier) + # Ci::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier) def builds get(endpoint, "api/repos/#{owner}/#{repo}/builds", drone_token: drone_token) end @@ -23,7 +23,7 @@ class Ci::Drone::API < Ci::Drone::Request # Build Info # GET api/repos/{owner}/{name}/builds/{number} # eq: - # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier, number: number).build + # Ci::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier, number: number).build def build get(endpoint, "api/repos/#{owner}/#{repo}/builds/#{options[:number]}", drone_token: drone_token) end @@ -31,7 +31,7 @@ class Ci::Drone::API < Ci::Drone::Request # Update .trustie-pipeline.yml file # PATCH api/repos/{owner}/{name}\ # eq: - # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier, config_path: config_path).config_yml + # Ci::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier, config_path: config_path).config_yml def config_yml patch(endpoint, "/api/repos/#{owner}/#{repo}", drone_token: drone_token, config_path: options[:config_path]) end @@ -39,7 +39,7 @@ class Ci::Drone::API < Ci::Drone::Request # Activate user's project with Drone CI # POST api/repos/{owner}/{name} # eq: - # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, project.owner.login, project.identifier).activate + # Ci::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, project.owner.login, project.identifier).activate def activate post(endpoint, "/api/repos/#{owner}/#{repo}", drone_token: drone_token) end @@ -48,7 +48,7 @@ class Ci::Drone::API < Ci::Drone::Request # POST api/repos/{owner}/{name}/builds/{number} # Restart the specified build. Please note this api requires read and write access to the repository and the request parameter {build} is not the build id but the build number. # eq: - # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: number).restart + # Ci::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: number).restart def restart post(endpoint, "/api/repos/#{owner}/#{repo}/builds/#{options[:number]}", drone_token: drone_token) end @@ -57,7 +57,7 @@ class Ci::Drone::API < Ci::Drone::Request # DELETE api/repos/{owner}/{name}/builds/{number} # Stop the specified build. Please note this api requires administrative privileges and the request parameter {build} is not the build id but the build number. # eq: - # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: number).stop + # Ci::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: number).stop def stop delete(endpoint, "/api/repos/#{owner}/#{repo}/builds/#{options[:number]}", drone_token: drone_token) end @@ -66,7 +66,7 @@ class Ci::Drone::API < Ci::Drone::Request # GET /api/repos/{owner}/{repo}/builds/{build}/logs/{stage}/{step} # Please note this api requires read access to the repository. # eq: - # DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: build, stage: stage, step: step).logs + # Ci::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: build, stage: stage, step: step).logs def logs get(endpoint, "/api/repos/#{owner}/#{repo}/builds/#{options[:build]}/logs/#{options[:stage]}/#{options[:step]}", drone_token: drone_token) end diff --git a/config/routes.rb b/config/routes.rb index a1afa6b7c..55366b565 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -344,6 +344,11 @@ Rails.application.routes.draw do to: 'projects#get_trustie_pipeline', as: :get_trustie_pipeline ) + put( + 'update_trustie_pipeline', + to: 'projects#update_trustie_pipeline', + as: :update_trustie_pipeline + ) end resources :cloud_accounts, only: [:create] do member do From 8abf748778acdbef364b690dac29bef40a3ffe28 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 21 Aug 2020 16:25:13 +0800 Subject: [PATCH 085/384] FIX bug --- app/controllers/ci/projects_controller.rb | 2 +- app/libs/ci/drone/api.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index 4c46f2c9b..a5af91304 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -31,7 +31,7 @@ class Ci::ProjectsController < Ci::BaseController interactor = Gitea::UpdateFileInteractor.call(current_user.gitea_token, params[:owner], params.merge(identifier: @project.identifier)) if interactor.success? @file = interactor.result - Ci::Drone::API.new(current_user.cloud_account.drone_token, current_user.cloud_account.endpoint, params[:owner], @project.identifier, config_path: '.trustie-pipeline.yml').config_yml + Ci::Drone::API.new(current_user.cloud_account.drone_token, current_user.cloud_account.drone_url, params[:owner], @project.identifier, config_path: '.trustie-pipeline.yml').config_yml render_result(1, "更新成功") else render_error(interactor.error) diff --git a/app/libs/ci/drone/api.rb b/app/libs/ci/drone/api.rb index 499636468..02743864c 100644 --- a/app/libs/ci/drone/api.rb +++ b/app/libs/ci/drone/api.rb @@ -23,7 +23,7 @@ class Ci::Drone::API < Ci::Drone::Request # Build Info # GET api/repos/{owner}/{name}/builds/{number} # eq: - # Ci::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier, number: number).build + # Ci::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, project.owner.login, project.identifier, number: number).build def build get(endpoint, "api/repos/#{owner}/#{repo}/builds/#{options[:number]}", drone_token: drone_token) end @@ -31,7 +31,7 @@ class Ci::Drone::API < Ci::Drone::Request # Update .trustie-pipeline.yml file # PATCH api/repos/{owner}/{name}\ # eq: - # Ci::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier, config_path: config_path).config_yml + # Ci::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, project.owner.login, project.identifier, config_path: config_path).config_yml def config_yml patch(endpoint, "/api/repos/#{owner}/#{repo}", drone_token: drone_token, config_path: options[:config_path]) end From 6d0eb74683caac6682e8b1a0098c9d111d29de4c Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sat, 22 Aug 2020 13:24:58 +0800 Subject: [PATCH 086/384] FIX educoder platform register bug when mail exists --- app/controllers/oauth/educoder_controller.rb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index a803adbb6..90f963e4f 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -8,7 +8,7 @@ class Oauth::EducoderController < Oauth::BaseController ::OauthEducoderForm.new({login: login, token: token, callback_url: callback_url}).validate! - open_user= OpenUsers::Educoder.find_by(uid: login) + open_user= OpenUsers::Educoder.find_by(uid: login) || OpenUsers::Educoder.find_by(uid: mail) if open_user.present? && open_user.user.present? && open_user.user.email_binded? Rails.logger.info "######## open_user exist and open_user.user exsit and email is binded ok" @@ -17,10 +17,20 @@ class Oauth::EducoderController < Oauth::BaseController redirect_to callback_url else Rails.logger.info "######## open user not exits" - user = User.find_by('login = ? or mail = ?', login, mail) + user, uid = nil + login_user = User.find_by(login: login) + + if login_user + uid = login + user = login_user + else + mail_user = User.find_by(mail: mail) + uid = mail + user = mail_user + end if user.is_a?(User) - OpenUsers::Educoder.create!(user: user, uid: login) + OpenUsers::Educoder.create!(user: user, uid: uid) successful_authentication(user) redirect_to callback_url From 72feacecbb1e66b970988ad91d57b837c213c0d8 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Mon, 24 Aug 2020 14:12:59 +0800 Subject: [PATCH 087/384] Test Project Validate Failed --- app/forms/ci/create_cloud_account_form.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/forms/ci/create_cloud_account_form.rb b/app/forms/ci/create_cloud_account_form.rb index a2dda6a4f..dfa16ecdd 100644 --- a/app/forms/ci/create_cloud_account_form.rb +++ b/app/forms/ci/create_cloud_account_form.rb @@ -3,7 +3,8 @@ class Ci::CreateCloudAccountForm attr_accessor :project_id, :ip_num, :account, :secret - validates :project_id, :account, :secret, presence: true + # validates :project_id, :account, :secret, presence: true + validates :account, :secret, presence: true validates :ip_num, presence: true, format: { with: CustomRegexp::IP, multiline: true, message: 'IP 地址格式不对' } end From 3586952a8947ff796c0928cf45b9316524d9c9a9 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Mon, 24 Aug 2020 14:16:11 +0800 Subject: [PATCH 088/384] Test Project Validate Failed1 --- app/controllers/application_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 7e474f549..7024e7c7e 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -749,7 +749,7 @@ class ApplicationController < ActionController::Base if @project and current_user.can_read_project?(@project) logger.info "###########: has project and can read project" - @project + @project and return elsif current_user.is_a?(AnonymousUser) logger.info "###########:This is AnonymousUser" @project = nil if !@project.is_public? @@ -759,7 +759,7 @@ class ApplicationController < ActionController::Base @project = nil render_not_found and return end - @project + # @project end def load_repository From 5a065d83b7c9c174f84ed4956533e80073c61d25 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Mon, 24 Aug 2020 14:17:23 +0800 Subject: [PATCH 089/384] Test Project Validate Failed12 --- app/forms/ci/create_cloud_account_form.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/forms/ci/create_cloud_account_form.rb b/app/forms/ci/create_cloud_account_form.rb index dfa16ecdd..7da78a05c 100644 --- a/app/forms/ci/create_cloud_account_form.rb +++ b/app/forms/ci/create_cloud_account_form.rb @@ -1,7 +1,7 @@ class Ci::CreateCloudAccountForm include ActiveModel::Model - attr_accessor :project_id, :ip_num, :account, :secret + attr_accessor :ip_num, :account, :secret # validates :project_id, :account, :secret, presence: true validates :account, :secret, presence: true From 79bc2655b7257efde90070e8c0a98a989a1cc248 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Mon, 24 Aug 2020 14:19:32 +0800 Subject: [PATCH 090/384] Test Project Validate Failed13 --- app/controllers/application_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 7024e7c7e..7e474f549 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -749,7 +749,7 @@ class ApplicationController < ActionController::Base if @project and current_user.can_read_project?(@project) logger.info "###########: has project and can read project" - @project and return + @project elsif current_user.is_a?(AnonymousUser) logger.info "###########:This is AnonymousUser" @project = nil if !@project.is_public? @@ -759,7 +759,7 @@ class ApplicationController < ActionController::Base @project = nil render_not_found and return end - # @project + @project end def load_repository From 7e7ab71231fd62aade2db063ad2cf1509e46bd91 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Mon, 24 Aug 2020 14:20:48 +0800 Subject: [PATCH 091/384] Test Project Validate Failed14 --- app/controllers/ci/cloud_accounts_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 119bef079..f4ba8c2f0 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -6,6 +6,7 @@ class Ci::CloudAccountsController < Ci::BaseController before_action :find_cloud_account, only: %i[activate] def create + logger.info "#########project_id: #{@project&.id}" ActiveRecord::Base.transaction do Ci::CreateCloudAccountForm.new(devops_params).validate! From 46801284aa97ff36b36454a899ed02126ee291d7 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Mon, 24 Aug 2020 14:28:30 +0800 Subject: [PATCH 092/384] Test Project Validate Failed15 --- app/controllers/concerns/devopsable.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/concerns/devopsable.rb b/app/controllers/concerns/devopsable.rb index 97983c318..8a930fc3f 100644 --- a/app/controllers/concerns/devopsable.rb +++ b/app/controllers/concerns/devopsable.rb @@ -5,7 +5,8 @@ module Devopsable end # ci 权限验证 - def ci_authorize! + def ci_authorize! + Rails.logger.info("================project_id :#{@project&.id}") render_forbidden unless @project.owner?(current_user) end From 200cb70f4bc2666cbc69685d78396b1728da3378 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Mon, 24 Aug 2020 15:06:05 +0800 Subject: [PATCH 093/384] Fixed: Issues --- app/controllers/ci/cloud_accounts_controller.rb | 3 +-- app/controllers/concerns/devopsable.rb | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index f4ba8c2f0..cfff87ae5 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -6,13 +6,12 @@ class Ci::CloudAccountsController < Ci::BaseController before_action :find_cloud_account, only: %i[activate] def create - logger.info "#########project_id: #{@project&.id}" ActiveRecord::Base.transaction do Ci::CreateCloudAccountForm.new(devops_params).validate! # 1. 保存华为云服务器帐号 create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: Ci::CloudAccount.encrypted_secret(devops_params[:secret])) - if cloud_account = @project.ci_cloud_account + if current_user&.ci_cloud_account.present? return render_error('该仓库已绑定了云帐号.') else cloud_account = Ci::CloudAccount.new(create_params) diff --git a/app/controllers/concerns/devopsable.rb b/app/controllers/concerns/devopsable.rb index 8a930fc3f..651c42b5c 100644 --- a/app/controllers/concerns/devopsable.rb +++ b/app/controllers/concerns/devopsable.rb @@ -6,7 +6,6 @@ module Devopsable # ci 权限验证 def ci_authorize! - Rails.logger.info("================project_id :#{@project&.id}") render_forbidden unless @project.owner?(current_user) end From e23ce05b1b0c6e15b802c6038bc89833cde3da8e Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Mon, 24 Aug 2020 15:09:16 +0800 Subject: [PATCH 094/384] Fixed: Issues2 --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index cfff87ae5..0067eef0a 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -14,7 +14,7 @@ class Ci::CloudAccountsController < Ci::BaseController if current_user&.ci_cloud_account.present? return render_error('该仓库已绑定了云帐号.') else - cloud_account = Ci::CloudAccount.new(create_params) + cloud_account = Ci::CloudAccount.new(create_params.merge(project_id: @project.id)) cloud_account.user = current_user cloud_account.save! end From 405e5b5d3d598c30307e627cae9db46c2d964d92 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 11:05:46 +0800 Subject: [PATCH 095/384] FIX bug --- app/controllers/ci/projects_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index a5af91304..718c3ebd4 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -1,5 +1,6 @@ class Ci::ProjectsController < Ci::BaseController include Devopsable + include RepositoriesHelper before_action :load_project From 4932eae2858f9a02e12727d6fc3aa34bf5bef994 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 14:25:42 +0800 Subject: [PATCH 096/384] ADD branch and sha for builds api --- app/views/ci/builds/_build.json.jbuilder | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/views/ci/builds/_build.json.jbuilder b/app/views/ci/builds/_build.json.jbuilder index 222d922fc..9a90a09f1 100644 --- a/app/views/ci/builds/_build.json.jbuilder +++ b/app/views/ci/builds/_build.json.jbuilder @@ -12,4 +12,8 @@ json.finished format_utc_time build.build_finished json.created format_utc_time build.build_created json.updated format_utc_time build.build_updated json.version build.build_version +json.build_after_sha build.build_after +json.build_before_sha build.build_before +json.branch_source build.build_source +json.branch_target build.build_target json.duration_time render_duartion_time(build.build_finished, build.build_started) From 1ea9e420bef11e20b77b1a8556270abf86bf71e6 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 15:43:30 +0800 Subject: [PATCH 097/384] ADD paginate for builds api --- README.md | 18 ++++++++++++++++++ app/helpers/ci/builds_helper.rb | 4 +++- app/models/ci/build.rb | 7 +++++++ app/models/ci/repo.rb | 7 +++++++ app/queries/ci/builds/list_query.rb | 19 +++++++++++++++++-- app/views/ci/builds/_author.json.jbuilder | 4 ++++ app/views/ci/builds/_build.json.jbuilder | 4 +++- app/views/ci/builds/_stage.json.jbuilder | 2 +- 8 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 app/views/ci/builds/_author.json.jbuilder diff --git a/README.md b/README.md index 48fd21106..7b56e51b1 100644 --- a/README.md +++ b/README.md @@ -2599,6 +2599,14 @@ http://localhost:3000/api/jasder/forge/update_trustie_pipeline.json | jq |owner |是|string |用户登录名 | |repo |是|string |project's identifier | |ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | +|filepath |是|string |文件相对于仓库的路径(或修改后的文件路径) | +|from_path |是|string |原文件相对于仓库的路径, 只有当需要修改原文件名称时,才需要该参数 | +|sha |是|string |文件的sha标识值 | +|content |是|string |内容 | +|message |否|string |提交说明 | +|branch |否|string |分支名称, branch和new_branch必须存在一个,且只能存在一个 | +|new_branch |否|string |新的分支名称 | +|ci_language_id |否|string |新的分支名称 | *返回参数说明:* @@ -2729,6 +2737,16 @@ curl -X GET \ http://localhost:3000/api/Jason/forge/builds | jq ``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |项目拥有者 | +|repo |是|string |项目identifier | +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认20条 | +|search |是|string |构建状态条件过滤; 值说明:pending: 准备中,failure: 构建失败,running: 运行中,error:构建失败(.trustie-pipeline.yml文件错误),success: 构建成功 | + *返回参数说明:* |参数名|类型|说明| diff --git a/app/helpers/ci/builds_helper.rb b/app/helpers/ci/builds_helper.rb index 41c92229a..02707bec3 100644 --- a/app/helpers/ci/builds_helper.rb +++ b/app/helpers/ci/builds_helper.rb @@ -1,10 +1,12 @@ module Ci::BuildsHelper def format_utc_time(unix_time) Rails.logger.info "00000000000000 #{unix_time}" + return nil if unix_time.blank? DateTime.strptime(unix_time.to_s,'%s').strftime("%Y-%m-%d %H:%M") end def render_duartion_time(end_time, start_time) - (end_time - start_time) / 10000 + return nil if end_time == 0 + game_spend_time(end_time - start_time) end end diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index b119c9d98..e1d1832f4 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -3,4 +3,11 @@ class Ci::Build < Ci::RemoteBase belongs_to :repo, foreign_key: :build_repo_id has_many :stages, foreign_key: "stage_build_id", dependent: :destroy + + scope :successed, ->{ by_status('success') } + scope :failed, -> { by_status('failure') } + scope :running, -> { by_status('running') } + scope :errored, -> { by_status('error') } + scope :pending, -> { by_status('pending') } + scope :by_status, ->(status) { where(build_status: status) } end diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index 83092d9cd..8c82f4227 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -16,4 +16,11 @@ class Ci::Repo < Ci::RemoteBase [user, repo] end + def enable + update_column(:repo_config, '.trustie-pipeline.yml') + end + + def activate + + end end diff --git a/app/queries/ci/builds/list_query.rb b/app/queries/ci/builds/list_query.rb index b86fbd7da..4577045f6 100644 --- a/app/queries/ci/builds/list_query.rb +++ b/app/queries/ci/builds/list_query.rb @@ -11,8 +11,23 @@ class Ci::Builds::ListQuery < ApplicationQuery end def call - course_lists = @repo.builds + scope = @repo.builds - custom_sort(course_lists, params[:sort_by], params[:sort_direction]) + scope = + case params[:search] + when 'success' + scope.successed + when 'pending' + scope.pending + when 'error' + scope.errored + when 'running' + scope.running + when 'failure' + scope.failed + else + scope + end + custom_sort(scope, params[:sort_by], params[:sort_direction]) end end diff --git a/app/views/ci/builds/_author.json.jbuilder b/app/views/ci/builds/_author.json.jbuilder new file mode 100644 index 000000000..280f7ef98 --- /dev/null +++ b/app/views/ci/builds/_author.json.jbuilder @@ -0,0 +1,4 @@ +json.id user.id +json.name user.real_name +json.login user.login +json.image_url url_to_avatar(user) diff --git a/app/views/ci/builds/_build.json.jbuilder b/app/views/ci/builds/_build.json.jbuilder index 9a90a09f1..b54d64c5e 100644 --- a/app/views/ci/builds/_build.json.jbuilder +++ b/app/views/ci/builds/_build.json.jbuilder @@ -6,7 +6,9 @@ json.event build.build_event json.action build.build_action # json.link build.build_link json.message build.build_message -json.author build.build_author +json.author do + json.partial! 'author', user: current_user +end json.started format_utc_time build.build_started json.finished format_utc_time build.build_finished json.created format_utc_time build.build_created diff --git a/app/views/ci/builds/_stage.json.jbuilder b/app/views/ci/builds/_stage.json.jbuilder index c2a079915..3a1eca9db 100644 --- a/app/views/ci/builds/_stage.json.jbuilder +++ b/app/views/ci/builds/_stage.json.jbuilder @@ -11,7 +11,7 @@ json.exit_code stage.stage_exit_code json.os stage.stage_os json.arch stage.stage_arch json.started format_utc_time(stage.stage_started) -json.stopped format_utc_time(stage.stage_stoped) +json.stopped format_utc_time(stage.stage_stopped) json.created format_utc_time(stage.stage_created) json.updated format_utc_time(stage.stage_updated) json.version stage.stage_version From 41f876a7145ea507fd6b56c6cc71b70bef48a536 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 15:48:41 +0800 Subject: [PATCH 098/384] FIX build finished time bug --- app/helpers/ci/builds_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/ci/builds_helper.rb b/app/helpers/ci/builds_helper.rb index 02707bec3..099b3a2cb 100644 --- a/app/helpers/ci/builds_helper.rb +++ b/app/helpers/ci/builds_helper.rb @@ -1,7 +1,7 @@ module Ci::BuildsHelper def format_utc_time(unix_time) Rails.logger.info "00000000000000 #{unix_time}" - return nil if unix_time.blank? + return nil if unix_time == 0 DateTime.strptime(unix_time.to_s,'%s').strftime("%Y-%m-%d %H:%M") end From 3e25a7b28cbf3e76511479d6ca99fe1f39c75fa2 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 15:49:47 +0800 Subject: [PATCH 099/384] FIX code review --- app/helpers/ci/builds_helper.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/helpers/ci/builds_helper.rb b/app/helpers/ci/builds_helper.rb index 099b3a2cb..1f08f72b6 100644 --- a/app/helpers/ci/builds_helper.rb +++ b/app/helpers/ci/builds_helper.rb @@ -1,6 +1,5 @@ module Ci::BuildsHelper def format_utc_time(unix_time) - Rails.logger.info "00000000000000 #{unix_time}" return nil if unix_time == 0 DateTime.strptime(unix_time.to_s,'%s').strftime("%Y-%m-%d %H:%M") end From 1617a541fe117e110cba375adafff47a35d8627b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 15:59:53 +0800 Subject: [PATCH 100/384] FIX code review --- app/models/ci/build.rb | 2 +- app/queries/ci/builds/list_query.rb | 19 +++++++------------ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index e1d1832f4..a96e1cfd8 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -8,6 +8,6 @@ class Ci::Build < Ci::RemoteBase scope :failed, -> { by_status('failure') } scope :running, -> { by_status('running') } scope :errored, -> { by_status('error') } - scope :pending, -> { by_status('pending') } + scope :pending, -> { by_status('pending') } scope :by_status, ->(status) { where(build_status: status) } end diff --git a/app/queries/ci/builds/list_query.rb b/app/queries/ci/builds/list_query.rb index 4577045f6..fb5034811 100644 --- a/app/queries/ci/builds/list_query.rb +++ b/app/queries/ci/builds/list_query.rb @@ -13,21 +13,16 @@ class Ci::Builds::ListQuery < ApplicationQuery def call scope = @repo.builds - scope = + builds = case params[:search] - when 'success' - scope.successed - when 'pending' - scope.pending - when 'error' - scope.errored - when 'running' - scope.running - when 'failure' - scope.failed + when 'success' then scope.successed + when 'pending' then scope.pending + when 'error' then scope.errored + when 'running' then scope.running + when 'failure' then scope.failed else scope end - custom_sort(scope, params[:sort_by], params[:sort_direction]) + custom_sort(builds, params[:sort_by], params[:sort_direction]) end end From ec7becc26eae5e9702f1293f8e7da112ba44b9e6 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 16:34:13 +0800 Subject: [PATCH 101/384] FIX user search cloud account's bug --- app/controllers/ci/builds_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index 3579825d1..22732053b 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -37,7 +37,7 @@ class Ci::BuildsController < Ci::BaseController private def find_cloud_account - @cloud_account = current_user.cloud_account + @cloud_account = current_user.ci_cloud_account end def load_ci_user From 66efdcc1b6b32e8555437b28defaf9a57bcaed33 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 16:39:31 +0800 Subject: [PATCH 102/384] FIX build's number params --- app/controllers/ci/builds_controller.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index 22732053b..6967aefba 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -19,18 +19,18 @@ class Ci::BuildsController < Ci::BaseController end def restart - result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:number]).restart + result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:build]).restart render json: result end def stop - result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:number]).stop + result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:build]).stop render json: result end def logs - result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, build: params[:number], stage: params[:stage], step: params[:step]).logs + result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, build: params[:build], stage: params[:stage], step: params[:step]).logs render json: result end From 5375c3ec71f6ba5c3a56ae2f770ae82eaeeaef0b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 17:01:03 +0800 Subject: [PATCH 103/384] ADD build status with killed --- README.md | 2 +- app/models/ci/build.rb | 1 + app/queries/ci/builds/list_query.rb | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b56e51b1..9a5a12a75 100644 --- a/README.md +++ b/README.md @@ -2745,7 +2745,7 @@ http://localhost:3000/api/Jason/forge/builds | jq |repo |是|string |项目identifier | |page |否|string |页数,第几页 | |limit |否|string |每页多少条数据,默认20条 | -|search |是|string |构建状态条件过滤; 值说明:pending: 准备中,failure: 构建失败,running: 运行中,error:构建失败(.trustie-pipeline.yml文件错误),success: 构建成功 | +|search |是|string |构建状态条件过滤; 值说明:pending: 准备中,failure: 构建失败,running: 运行中,error:构建失败(.trustie-pipeline.yml文件错误),success: 构建成功,killed: 撤销构建 | *返回参数说明:* diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index a96e1cfd8..6873f2ede 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -9,5 +9,6 @@ class Ci::Build < Ci::RemoteBase scope :running, -> { by_status('running') } scope :errored, -> { by_status('error') } scope :pending, -> { by_status('pending') } + scope :killed, -> { by_status('killed') } scope :by_status, ->(status) { where(build_status: status) } end diff --git a/app/queries/ci/builds/list_query.rb b/app/queries/ci/builds/list_query.rb index fb5034811..bfb0b0a59 100644 --- a/app/queries/ci/builds/list_query.rb +++ b/app/queries/ci/builds/list_query.rb @@ -20,6 +20,7 @@ class Ci::Builds::ListQuery < ApplicationQuery when 'error' then scope.errored when 'running' then scope.running when 'failure' then scope.failed + when 'killed' then scope.killed else scope end From 21192d70b62d37d8fe8525b5cc6cf0813cb2519e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 17:09:44 +0800 Subject: [PATCH 104/384] FIX stage bug --- app/views/ci/builds/_stage.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/ci/builds/_stage.json.jbuilder b/app/views/ci/builds/_stage.json.jbuilder index 3a1eca9db..256f81e77 100644 --- a/app/views/ci/builds/_stage.json.jbuilder +++ b/app/views/ci/builds/_stage.json.jbuilder @@ -17,6 +17,6 @@ json.updated format_utc_time(stage.stage_updated) json.version stage.stage_version json.on_success stage.stage_on_success json.on_failure stage.stage_on_failure -json.steps build.steps do |stage| +json.steps stage.steps do |step| json.partial! "/ci/builds/step", step: step end From c54723a6c6fb43ae50a52abcd08019dce716dd26 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 17:14:55 +0800 Subject: [PATCH 105/384] FIX step bug --- app/views/ci/builds/_step.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/ci/builds/_step.json.jbuilder b/app/views/ci/builds/_step.json.jbuilder index 097b4cf2c..93b1353fc 100644 --- a/app/views/ci/builds/_step.json.jbuilder +++ b/app/views/ci/builds/_step.json.jbuilder @@ -5,4 +5,4 @@ json.status step.step_status json.exit_code step.step_exit_code json.started format_utc_time(step.step_started) json.stopped format_utc_time(step.step_stopped) -json.version step.build_version +json.version step.step_version From 087f81a6aad001ca7d26a8633b8f8c03fdeab843 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 25 Aug 2020 17:59:32 +0800 Subject: [PATCH 106/384] ADD duration time for stage and step --- app/views/ci/builds/_stage.json.jbuilder | 1 + app/views/ci/builds/_step.json.jbuilder | 1 + 2 files changed, 2 insertions(+) diff --git a/app/views/ci/builds/_stage.json.jbuilder b/app/views/ci/builds/_stage.json.jbuilder index 256f81e77..57c68bf63 100644 --- a/app/views/ci/builds/_stage.json.jbuilder +++ b/app/views/ci/builds/_stage.json.jbuilder @@ -14,6 +14,7 @@ json.started format_utc_time(stage.stage_started) json.stopped format_utc_time(stage.stage_stopped) json.created format_utc_time(stage.stage_created) json.updated format_utc_time(stage.stage_updated) +json.duration_time render_duartion_time(stage.stage_started, stage.stage_stopped) json.version stage.stage_version json.on_success stage.stage_on_success json.on_failure stage.stage_on_failure diff --git a/app/views/ci/builds/_step.json.jbuilder b/app/views/ci/builds/_step.json.jbuilder index 93b1353fc..970149d89 100644 --- a/app/views/ci/builds/_step.json.jbuilder +++ b/app/views/ci/builds/_step.json.jbuilder @@ -5,4 +5,5 @@ json.status step.step_status json.exit_code step.step_exit_code json.started format_utc_time(step.step_started) json.stopped format_utc_time(step.step_stopped) +json.duration_time render_duartion_time(step.step_started, step.step_stopped) json.version step.step_version From d16713e61113c386480046967b5a8cd3db5bccc9 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 26 Aug 2020 10:43:47 +0800 Subject: [PATCH 107/384] FIX buid time bug --- app/helpers/ci/builds_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/ci/builds_helper.rb b/app/helpers/ci/builds_helper.rb index 1f08f72b6..53c0e8ed7 100644 --- a/app/helpers/ci/builds_helper.rb +++ b/app/helpers/ci/builds_helper.rb @@ -5,7 +5,7 @@ module Ci::BuildsHelper end def render_duartion_time(end_time, start_time) - return nil if end_time == 0 + return nil if end_time == 0 || state_time == 0 game_spend_time(end_time - start_time) end end From 7e9d5a9acbc7d855d23a6e9d8f9a08f05127508f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 26 Aug 2020 10:45:21 +0800 Subject: [PATCH 108/384] FIX code bug --- app/helpers/ci/builds_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/ci/builds_helper.rb b/app/helpers/ci/builds_helper.rb index 53c0e8ed7..15494ca8a 100644 --- a/app/helpers/ci/builds_helper.rb +++ b/app/helpers/ci/builds_helper.rb @@ -5,7 +5,7 @@ module Ci::BuildsHelper end def render_duartion_time(end_time, start_time) - return nil if end_time == 0 || state_time == 0 + return nil if end_time == 0 || start_time == 0 game_spend_time(end_time - start_time) end end From aac6df879087ba0674afa5cffcb6ce3204790bd5 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 26 Aug 2020 10:46:54 +0800 Subject: [PATCH 109/384] FIX time count bug --- app/views/ci/builds/_stage.json.jbuilder | 2 +- app/views/ci/builds/_step.json.jbuilder | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/ci/builds/_stage.json.jbuilder b/app/views/ci/builds/_stage.json.jbuilder index 57c68bf63..95c2eff52 100644 --- a/app/views/ci/builds/_stage.json.jbuilder +++ b/app/views/ci/builds/_stage.json.jbuilder @@ -14,7 +14,7 @@ json.started format_utc_time(stage.stage_started) json.stopped format_utc_time(stage.stage_stopped) json.created format_utc_time(stage.stage_created) json.updated format_utc_time(stage.stage_updated) -json.duration_time render_duartion_time(stage.stage_started, stage.stage_stopped) +json.duration_time render_duartion_time(stage.stage_stopped, stage.stage_started) json.version stage.stage_version json.on_success stage.stage_on_success json.on_failure stage.stage_on_failure diff --git a/app/views/ci/builds/_step.json.jbuilder b/app/views/ci/builds/_step.json.jbuilder index 970149d89..44d5f3667 100644 --- a/app/views/ci/builds/_step.json.jbuilder +++ b/app/views/ci/builds/_step.json.jbuilder @@ -5,5 +5,5 @@ json.status step.step_status json.exit_code step.step_exit_code json.started format_utc_time(step.step_started) json.stopped format_utc_time(step.step_stopped) -json.duration_time render_duartion_time(step.step_started, step.step_stopped) +json.duration_time render_duartion_time(step.step_stopped, step.step_started) json.version step.step_version From fc7b714d4cbe1e55befd406554a661194acdb532 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 26 Aug 2020 11:57:47 +0800 Subject: [PATCH 110/384] FIX delete project_id with create cloud_account --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 0067eef0a..93dbe506c 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -14,7 +14,7 @@ class Ci::CloudAccountsController < Ci::BaseController if current_user&.ci_cloud_account.present? return render_error('该仓库已绑定了云帐号.') else - cloud_account = Ci::CloudAccount.new(create_params.merge(project_id: @project.id)) + cloud_account = Ci::CloudAccount.new create_params cloud_account.user = current_user cloud_account.save! end From 21fa22ed21a9d069a6387b477659143d6eaf22c4 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 26 Aug 2020 12:02:51 +0800 Subject: [PATCH 111/384] FIX --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 93dbe506c..0067eef0a 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -14,7 +14,7 @@ class Ci::CloudAccountsController < Ci::BaseController if current_user&.ci_cloud_account.present? return render_error('该仓库已绑定了云帐号.') else - cloud_account = Ci::CloudAccount.new create_params + cloud_account = Ci::CloudAccount.new(create_params.merge(project_id: @project.id)) cloud_account.user = current_user cloud_account.save! end From 1e99e87228667a9d6d26a3b6a36dbe31bd71557c Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 26 Aug 2020 14:34:32 +0800 Subject: [PATCH 112/384] FIX delete 'docker rm -f' command --- app/libs/ci/drone/server.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/libs/ci/drone/server.rb b/app/libs/ci/drone/server.rb index 2f0dad502..68a144961 100644 --- a/app/libs/ci/drone/server.rb +++ b/app/libs/ci/drone/server.rb @@ -16,7 +16,7 @@ class Ci::Drone::Server # TODO 一下代码方便测试,正式环境请移除 # docker rm -f `docker ps -qa` def generate_cmd - "service docker start; docker rm -f `docker ps -qa`; docker run \ + "service docker start; docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_DATABASE_DRIVER=mysql \ -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@tcp\\(#{database_host}:#{database_port}\\)/drone?parseTime=true \ From 72cacb72a656e9379084cc3844d31208f4d78c64 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 26 Aug 2020 15:02:02 +0800 Subject: [PATCH 113/384] FIX devops author api --- app/controllers/ci/projects_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index 718c3ebd4..4b3b87aed 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -10,7 +10,6 @@ class Ci::ProjectsController < Ci::BaseController if request.put? @user.set_drone_step!(User::DEVOPS_VERIFIED) - render_ok end @cloud_account = @user.ci_cloud_account end From 8c9c085259908dfa4902c55c815cf4415ec1d246 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 26 Aug 2020 15:14:00 +0800 Subject: [PATCH 114/384] ADD cloud account id --- app/views/ci/projects/authorize.json.jbuilder | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/ci/projects/authorize.json.jbuilder b/app/views/ci/projects/authorize.json.jbuilder index 7ae5fa2c1..e8ed15796 100644 --- a/app/views/ci/projects/authorize.json.jbuilder +++ b/app/views/ci/projects/authorize.json.jbuilder @@ -1,6 +1,7 @@ json.step @user.devops_step json.cloud_account do if @cloud_account && !@user.devops_uninit? + json.id @cloud_account.id json.account @cloud_account.account json.ip @cloud_account.drone_ip json.secret @cloud_account.visible_secret From 518e966a8718ae89866f533085085a21e863311c Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 26 Aug 2020 16:23:59 +0800 Subject: [PATCH 115/384] FIX update trustie-pileline --- app/controllers/ci/cloud_accounts_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 0067eef0a..0af384582 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -4,6 +4,7 @@ class Ci::CloudAccountsController < Ci::BaseController before_action :load_project before_action :ci_authorize! before_action :find_cloud_account, only: %i[activate] + before_action :load_repo, only: %i[activate] def create ActiveRecord::Base.transaction do @@ -75,6 +76,7 @@ class Ci::CloudAccountsController < Ci::BaseController if result set_drone_token!(current_user, @cloud_account, params[:drone_token]) @project.update_column(:open_devops, true) + @repo.config_trustie_pipeline render_ok else render_error("激活失败,请检查你的token值是否正确.") From 2866c060c7b5dfbfba9ba5d09fcad2ae6a2fbd1b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 26 Aug 2020 16:24:51 +0800 Subject: [PATCH 116/384] FIx code review --- app/controllers/ci/projects_controller.rb | 3 ++- app/models/ci/remote_base.rb | 5 ++++- app/models/ci/repo.rb | 6 ++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index 4b3b87aed..70e81310b 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -3,6 +3,7 @@ class Ci::ProjectsController < Ci::BaseController include RepositoriesHelper before_action :load_project + before_action :load_repo, only: [:update_trustie_pipeline] def authorize @user = current_user @@ -31,7 +32,7 @@ class Ci::ProjectsController < Ci::BaseController interactor = Gitea::UpdateFileInteractor.call(current_user.gitea_token, params[:owner], params.merge(identifier: @project.identifier)) if interactor.success? @file = interactor.result - Ci::Drone::API.new(current_user.cloud_account.drone_token, current_user.cloud_account.drone_url, params[:owner], @project.identifier, config_path: '.trustie-pipeline.yml').config_yml + @repo.config_trustie_pipeline render_result(1, "更新成功") else render_error(interactor.error) diff --git a/app/models/ci/remote_base.rb b/app/models/ci/remote_base.rb index ba2f5bbb1..349149fed 100644 --- a/app/models/ci/remote_base.rb +++ b/app/models/ci/remote_base.rb @@ -3,5 +3,8 @@ class Ci::RemoteBase < ApplicationRecord establish_connection Rails.configuration.database_configuration[Rails.env]["ci_server_db"] - + def generate_code + [*'a'..'z',*'0'..'9',*'A'..'Z'].sample(32).join + end + end diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index 8c82f4227..dbdd8b6a8 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -16,11 +16,13 @@ class Ci::Repo < Ci::RemoteBase [user, repo] end - def enable + def config_trustie_pipeline update_column(:repo_config, '.trustie-pipeline.yml') end def activate - + # repo_active、repo_signer、repo_secret、repo_updated + update_columns(repo_active: 1, repo_signer: generate_code, repo_secret: generate_code, repo_updated: Time.now.to_i) end + end From 82c4f4f38ae454cc6f39e4ebc3ddab9b5eb1414e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 27 Aug 2020 11:39:11 +0800 Subject: [PATCH 117/384] ADD build error status --- app/views/ci/builds/_build.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/ci/builds/_build.json.jbuilder b/app/views/ci/builds/_build.json.jbuilder index b54d64c5e..1c1afcbf1 100644 --- a/app/views/ci/builds/_build.json.jbuilder +++ b/app/views/ci/builds/_build.json.jbuilder @@ -4,7 +4,7 @@ json.number build.build_number json.status build.build_status json.event build.build_event json.action build.build_action -# json.link build.build_link +json.error build.build_error if build.build_status == 'error' json.message build.build_message json.author do json.partial! 'author', user: current_user From 016971287c21686a305f5edb307f3c2944b1a2fc Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 27 Aug 2020 11:50:17 +0800 Subject: [PATCH 118/384] ADD open_devops for repositores show api --- app/views/repositories/show.json.jbuilder | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/repositories/show.json.jbuilder b/app/views/repositories/show.json.jbuilder index 539f713a8..29c8a77cf 100644 --- a/app/views/repositories/show.json.jbuilder +++ b/app/views/repositories/show.json.jbuilder @@ -16,6 +16,7 @@ json.permission User.current&.admin? ? "Manager" : @project.get_premission(@use json.mirror_url @project&.repository.mirror_url json.mirror @project&.repository.mirror_url.present? json.type @project.numerical_for_project_type +json.open_devops @project.open_devops? unless @project.common? json.mirror_status @repo.mirror_status From 79c557bd68a69ea849694a1d7a8d09964ead5728 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 27 Aug 2020 14:43:44 +0800 Subject: [PATCH 119/384] =?UTF-8?q?FIX=20=E4=BF=AE=E5=A4=8D=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=BA=93=E5=9C=A8=E7=BA=BF=E5=88=9B=E5=BB=BA=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=97=B6=EF=BC=8Ccommiter=E4=BF=A1=E6=81=AF=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/repositories_controller.rb | 2 ++ app/interactors/gitea/create_file_interactor.rb | 1 + 2 files changed, 3 insertions(+) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 2e2711aa9..c968161b4 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -66,6 +66,8 @@ class RepositoriesController < ApplicationController end def create_file + content_params = content_params.merge(committer: {email: current_user.mail, name: current_user.login}) + interactor = Gitea::CreateFileInteractor.call(current_user.gitea_token, @project.owner.login, content_params) if interactor.success? @file = interactor.result diff --git a/app/interactors/gitea/create_file_interactor.rb b/app/interactors/gitea/create_file_interactor.rb index 27a381e73..278d5d857 100644 --- a/app/interactors/gitea/create_file_interactor.rb +++ b/app/interactors/gitea/create_file_interactor.rb @@ -57,6 +57,7 @@ module Gitea file_params = file_params.merge(new_branch: @params[:new_branch]) unless @params[:new_branch].blank? file_params = file_params.merge(content: Base64.encode64(@params[:content])) file_params = file_params.merge(message: @params[:message]) unless @params[:message].blank? + file_params = file_params.merge(committer: @params[:committer]) file_params end end From 9823b03099cada338a9da978ca234354376a06cf Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 27 Aug 2020 15:05:09 +0800 Subject: [PATCH 120/384] FIX hash merge bug --- app/controllers/repositories_controller.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index c968161b4..6dceb60a1 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -67,7 +67,7 @@ class RepositoriesController < ApplicationController def create_file content_params = content_params.merge(committer: {email: current_user.mail, name: current_user.login}) - + interactor = Gitea::CreateFileInteractor.call(current_user.gitea_token, @project.owner.login, content_params) if interactor.success? @file = interactor.result @@ -156,6 +156,10 @@ class RepositoriesController < ApplicationController new_branch: params[:new_branch], content: params[:content], message: params[:message], + committer: { + email: current_user.mail, + name: current_user.login + }, identifier: @project.identifier } end From c6a31cbda8ba80f89baf0015273778955c063eda Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 27 Aug 2020 15:10:11 +0800 Subject: [PATCH 121/384] FIX delete hash merge code --- app/controllers/repositories_controller.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 6dceb60a1..9d1c98e37 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -66,8 +66,6 @@ class RepositoriesController < ApplicationController end def create_file - content_params = content_params.merge(committer: {email: current_user.mail, name: current_user.login}) - interactor = Gitea::CreateFileInteractor.call(current_user.gitea_token, @project.owner.login, content_params) if interactor.success? @file = interactor.result From b26c2f273f7a9550f8112ecbdad00e39a0674937 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 27 Aug 2020 16:01:10 +0800 Subject: [PATCH 122/384] FIX build time bug --- app/helpers/ci/builds_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/ci/builds_helper.rb b/app/helpers/ci/builds_helper.rb index 15494ca8a..c0e591069 100644 --- a/app/helpers/ci/builds_helper.rb +++ b/app/helpers/ci/builds_helper.rb @@ -1,7 +1,7 @@ module Ci::BuildsHelper def format_utc_time(unix_time) return nil if unix_time == 0 - DateTime.strptime(unix_time.to_s,'%s').strftime("%Y-%m-%d %H:%M") + Time.at(unix_time).strftime("%Y-%m-%d %H:%M") end def render_duartion_time(end_time, start_time) From b75896821fea5046ec4f49e1019101ee08da3756 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 28 Aug 2020 10:25:08 +0800 Subject: [PATCH 123/384] =?UTF-8?q?FIX=20=E4=BC=98=E5=8C=96ci=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ci/cloud_accounts_controller.rb | 25 ++++++++----------- app/controllers/ci/projects_controller.rb | 1 - app/models/ci/repo.rb | 13 +++++----- app/models/concerns/droneable.rb | 12 +++------ app/models/user.rb | 4 +-- ...007_add_ci_user_id_to_ci_cloud_accounts.rb | 5 ++++ ...emove_project_id_from_ci_cloud_accounts.rb | 7 ++++++ 7 files changed, 33 insertions(+), 34 deletions(-) create mode 100644 db/migrate/20200828021007_add_ci_user_id_to_ci_cloud_accounts.rb create mode 100644 db/migrate/20200828022021_remove_project_id_from_ci_cloud_accounts.rb diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 0af384582..2c0bdc049 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -15,7 +15,7 @@ class Ci::CloudAccountsController < Ci::BaseController if current_user&.ci_cloud_account.present? return render_error('该仓库已绑定了云帐号.') else - cloud_account = Ci::CloudAccount.new(create_params.merge(project_id: @project.id)) + cloud_account = Ci::CloudAccount.new(create_params) cloud_account.user = current_user cloud_account.save! end @@ -63,23 +63,18 @@ class Ci::CloudAccountsController < Ci::BaseController end def activate - result = - if current_user.devops_has_token? - # 已有drone_token的,直接激活项目 - Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @project.owner.login, @project.identifier).activate - else - # 没有token,说明是第一次激活devops, 需要用户填写token值 - return render_error('请先在CI服务端做用户认证.') if !current_user.devops_verified? - Ci::Drone::API.new(params[:drone_token], @cloud_account.drone_url, @project.owner.login, @project.identifier).activate - end + return render_error('请先在指定地址做用户认证') unless current_user.ci_certification? - if result - set_drone_token!(current_user, @cloud_account, params[:drone_token]) + return render_error('该项目已经激活') if @repo.repo_active? + + ci_user = Ci::User.find_by(user_login: current_user.login) + begin + @repo.activate! @project.update_column(:open_devops, true) - @repo.config_trustie_pipeline + @cloud_account.update_column(ci_user_id: ci_user.user_id) render_ok - else - render_error("激活失败,请检查你的token值是否正确.") + rescue Exception => ex + render_error(ex.message) end end diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index 70e81310b..d0f2ebe1b 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -32,7 +32,6 @@ class Ci::ProjectsController < Ci::BaseController interactor = Gitea::UpdateFileInteractor.call(current_user.gitea_token, params[:owner], params.merge(identifier: @project.identifier)) if interactor.success? @file = interactor.result - @repo.config_trustie_pipeline render_result(1, "更新成功") else render_error(interactor.error) diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index dbdd8b6a8..b0d549701 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -16,13 +16,12 @@ class Ci::Repo < Ci::RemoteBase [user, repo] end - def config_trustie_pipeline - update_column(:repo_config, '.trustie-pipeline.yml') - end - - def activate - # repo_active、repo_signer、repo_secret、repo_updated - update_columns(repo_active: 1, repo_signer: generate_code, repo_secret: generate_code, repo_updated: Time.now.to_i) + def activate! + update_columns(repo_active: 1, + repo_signer: generate_code, + repo_secret: generate_code, + repo_config: '.trustie-pipeline.yml', + repo_updated: Time.now.to_i) end end diff --git a/app/models/concerns/droneable.rb b/app/models/concerns/droneable.rb index 2e7206fb0..530692559 100644 --- a/app/models/concerns/droneable.rb +++ b/app/models/concerns/droneable.rb @@ -12,18 +12,14 @@ module Droneable self.devops_step === User::DEVOPS_UNVERIFIED end - def devops_verified? - self.devops_step === User::DEVOPS_VERIFIED - end - - def devops_has_token? - self.devops_step === User::DEVOPS_HAS_TOKEN - end - def set_drone_step!(step) self.update_column(:devops_step, step) end + def ci_certification? + Ci::User.exists?(user_login: self.login) + end + module ClassMethods end end diff --git a/app/models/user.rb b/app/models/user.rb index e860cbbe8..9acd369e8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -10,11 +10,9 @@ class User < ApplicationRecord # include Searchable::Dependents::User # devops step - # devops_step column: 0: 未填写服务器信息;1: 已填写服务器信息(未认证); 2: 已认证, 3: 已填写token值 + # devops_step column: 0: 未填写服务器信息;1: 已填写服务器信息(未认证); DEVOPS_UNINIT = 0 DEVOPS_UNVERIFIED = 1 - DEVOPS_VERIFIED = 2 - DEVOPS_HAS_TOKEN = 3 # Account statuses STATUS_ANONYMOUS = 0 diff --git a/db/migrate/20200828021007_add_ci_user_id_to_ci_cloud_accounts.rb b/db/migrate/20200828021007_add_ci_user_id_to_ci_cloud_accounts.rb new file mode 100644 index 000000000..6fe4f7a6e --- /dev/null +++ b/db/migrate/20200828021007_add_ci_user_id_to_ci_cloud_accounts.rb @@ -0,0 +1,5 @@ +class AddCiUserIdToCiCloudAccounts < ActiveRecord::Migration[5.2] + def change + add_column :ci_cloud_accounts, :ci_user_id, :integer + end +end diff --git a/db/migrate/20200828022021_remove_project_id_from_ci_cloud_accounts.rb b/db/migrate/20200828022021_remove_project_id_from_ci_cloud_accounts.rb new file mode 100644 index 000000000..580083bf8 --- /dev/null +++ b/db/migrate/20200828022021_remove_project_id_from_ci_cloud_accounts.rb @@ -0,0 +1,7 @@ +class RemoveProjectIdFromCiCloudAccounts < ActiveRecord::Migration[5.2] + def change + remove_column :ci_cloud_accounts, :project_id + remove_column :ci_cloud_accounts, :repo_id + remove_column :ci_cloud_accounts, :drone_token + end +end From 30ff51f93bb50329911d191e610e10e8c2b57bdd Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 28 Aug 2020 10:38:39 +0800 Subject: [PATCH 124/384] FIX devops author url --- app/views/ci/projects/authorize.json.jbuilder | 1 - 1 file changed, 1 deletion(-) diff --git a/app/views/ci/projects/authorize.json.jbuilder b/app/views/ci/projects/authorize.json.jbuilder index e8ed15796..39a20b1b3 100644 --- a/app/views/ci/projects/authorize.json.jbuilder +++ b/app/views/ci/projects/authorize.json.jbuilder @@ -6,7 +6,6 @@ json.cloud_account do json.ip @cloud_account.drone_ip json.secret @cloud_account.visible_secret json.authenticate_url "#{@cloud_account.drone_url}/login" if @user.devops_unverified? - json.get_drone_token_url "#{@cloud_account.drone_url}/account" if @user.devops_verified? else json.nil! end From 27b6a251af621267e5636d32c9924728508e9397 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 28 Aug 2020 10:43:32 +0800 Subject: [PATCH 125/384] FIX . --- app/controllers/ci/projects_controller.rb | 3 --- app/views/projects/ci_authorize.json.jbuilder | 1 - 2 files changed, 4 deletions(-) diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index d0f2ebe1b..7e43108c1 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -9,9 +9,6 @@ class Ci::ProjectsController < Ci::BaseController @user = current_user limit_project_owner_can_devops!(@user, @project) - if request.put? - @user.set_drone_step!(User::DEVOPS_VERIFIED) - end @cloud_account = @user.ci_cloud_account end diff --git a/app/views/projects/ci_authorize.json.jbuilder b/app/views/projects/ci_authorize.json.jbuilder index 7ae5fa2c1..b6120f497 100644 --- a/app/views/projects/ci_authorize.json.jbuilder +++ b/app/views/projects/ci_authorize.json.jbuilder @@ -5,7 +5,6 @@ json.cloud_account do json.ip @cloud_account.drone_ip json.secret @cloud_account.visible_secret json.authenticate_url "#{@cloud_account.drone_url}/login" if @user.devops_unverified? - json.get_drone_token_url "#{@cloud_account.drone_url}/account" if @user.devops_verified? else json.nil! end From f47eae3aeb4144a8c205768e2bbb96c3f610a989 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 28 Aug 2020 10:46:23 +0800 Subject: [PATCH 126/384] FIX app/views/projects/ci_authorize.json.jbuilder --- app/views/projects/ci_authorize.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/ci_authorize.json.jbuilder b/app/views/projects/ci_authorize.json.jbuilder index b6120f497..8882d26ae 100644 --- a/app/views/projects/ci_authorize.json.jbuilder +++ b/app/views/projects/ci_authorize.json.jbuilder @@ -4,7 +4,7 @@ json.cloud_account do json.account @cloud_account.account json.ip @cloud_account.drone_ip json.secret @cloud_account.visible_secret - json.authenticate_url "#{@cloud_account.drone_url}/login" if @user.devops_unverified? + json.redirect_url "#{@cloud_account.drone_url}/login" if @user.devops_unverified? else json.nil! end From b9a57be67d1695edd849b631b9c4012cf022331c Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 28 Aug 2020 10:56:04 +0800 Subject: [PATCH 127/384] FIX code bug --- app/controllers/ci/builds_controller.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index 6967aefba..f90519143 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -19,18 +19,18 @@ class Ci::BuildsController < Ci::BaseController end def restart - result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:build]).restart + result = Ci::Drone::API.new(@user.user_hash, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:build]).restart render json: result end def stop - result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:build]).stop + result = Ci::Drone::API.new(@user.user_hash, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:build]).stop render json: result end def logs - result = Ci::Drone::API.new(@cloud_account.drone_token, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, build: params[:build], stage: params[:stage], step: params[:step]).logs + result = Ci::Drone::API.new(@user.user_hash, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, build: params[:build], stage: params[:stage], step: params[:step]).logs render json: result end From 903103ec5d12fca894bc3784371cc0566dfe5a1e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 28 Aug 2020 11:40:29 +0800 Subject: [PATCH 128/384] FIX ci active repo bug --- app/controllers/ci/cloud_accounts_controller.rb | 5 +++-- app/models/ci/repo.rb | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 2c0bdc049..6578a730e 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -65,11 +65,12 @@ class Ci::CloudAccountsController < Ci::BaseController def activate return render_error('请先在指定地址做用户认证') unless current_user.ci_certification? - return render_error('该项目已经激活') if @repo.repo_active? + return render_error('该项目已经激活') if @repo && @repo.repo_active? ci_user = Ci::User.find_by(user_login: current_user.login) + repo = Ci::Repo.where(repo_namespace: current_user.login, repo_name: params[:repo]).first begin - @repo.activate! + repo.activate!(ci_user.user_id) @project.update_column(:open_devops, true) @cloud_account.update_column(ci_user_id: ci_user.user_id) render_ok diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index b0d549701..3c1b910f2 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -16,10 +16,11 @@ class Ci::Repo < Ci::RemoteBase [user, repo] end - def activate! + def activate!(ci_user_id) update_columns(repo_active: 1, repo_signer: generate_code, repo_secret: generate_code, + repo_user_id: ci_user_id, repo_config: '.trustie-pipeline.yml', repo_updated: Time.now.to_i) end From 1290b3446fd23b8539fbb0196c5c8f1e703bbca9 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 28 Aug 2020 11:50:14 +0800 Subject: [PATCH 129/384] FIX update_column bug --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 6578a730e..85b0e7ac8 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -72,7 +72,7 @@ class Ci::CloudAccountsController < Ci::BaseController begin repo.activate!(ci_user.user_id) @project.update_column(:open_devops, true) - @cloud_account.update_column(ci_user_id: ci_user.user_id) + @cloud_account.update_column(:ci_user_id, ci_user.user_id) render_ok rescue Exception => ex render_error(ex.message) From 26f03badbca1434a085e84c44053afb8bb6c785f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sat, 29 Aug 2020 10:35:22 +0800 Subject: [PATCH 130/384] FIX change routes --- config/routes.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/routes.rb b/config/routes.rb index 55366b565..c2f608afd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -26,7 +26,7 @@ Rails.application.routes.draw do get :common end end - # resources :builds, only: :index do + # resources :repos, only: :index do # collection do # get 'get_trustie_pipeline', to: 'builds#get_trustie_pipeline', as: 'get_trustie_pipeline' # get ':number', to: 'builds#detail', as: 'detail' From dc3ec48b8c11d8459b37074285cbc833e3f37ef2 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sat, 29 Aug 2020 11:57:50 +0800 Subject: [PATCH 131/384] FIX educoder author bug --- app/controllers/oauth/educoder_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index 90f963e4f..597aac6a9 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -29,7 +29,7 @@ class Oauth::EducoderController < Oauth::BaseController user = mail_user end - if user.is_a?(User) + if user.is_a?(User) && !user.is_a?(AnonymousUser) OpenUsers::Educoder.create!(user: user, uid: uid) successful_authentication(user) From ef4578286f9d430c89d64d3ed8c0be0e39e82496 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sat, 29 Aug 2020 12:07:06 +0800 Subject: [PATCH 132/384] =?UTF-8?q?FIX=20=E8=A7=A3=E5=86=B3forked=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=88=A0=E9=99=A4=E5=90=8E=EF=BC=8Cfork=20user?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=85=B3=E8=81=94=E5=88=A0=E9=99=A4=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/fork_user.rb | 4 +++- app/models/project.rb | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/models/fork_user.rb b/app/models/fork_user.rb index 10ae32328..4a4d5f77e 100644 --- a/app/models/fork_user.rb +++ b/app/models/fork_user.rb @@ -1,4 +1,6 @@ class ForkUser < ApplicationRecord - belongs_to :project + belongs_to :project belongs_to :user + belongs_to :fork_project, class_name: 'ForkUser', foreign_key: :fork_project_id + end diff --git a/app/models/project.rb b/app/models/project.rb index bd2008af6..24f8a85de 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -18,6 +18,7 @@ class Project < ApplicationRecord has_many :project_trends, dependent: :destroy has_many :watchers, as: :watchable, dependent: :destroy has_many :fork_users, dependent: :destroy + has_many :forked_users, class_name: 'ForkUser', foreign_key: :fork_project_id, dependent: :destroy # has_many :commits, dependent: :destroy has_one :project_score, dependent: :destroy From d674fad6041356f821246898b1cad6c8cbbd8307 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 1 Sep 2020 15:16:00 +0800 Subject: [PATCH 133/384] Update readme.md --- README.md | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/README.md b/README.md index 9a5a12a75..4698acc5e 100644 --- a/README.md +++ b/README.md @@ -2489,30 +2489,6 @@ https://localhost:3000/api/jasder/forgeplus/cloud_accounts.json | jq ``` --- -#### 用户认证CI服务端后,需要调用该接口进行更新devlops流程状态 -``` -PUT /api/:owner/:repo/ci_authorize -``` -*示例* -``` -curl -X PUT \ -http://localhost:3000/api/jasder/forgeplus/ci_authorize.json | jq -``` - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|status |int|0:成功, -1: 失败| - -``` -{ - "status": 0, - "message": "success" -} -``` ---- - #### 激活项目 ``` POST /api/:owner/:repo/cloud_accounts/:id/activate @@ -2520,7 +2496,6 @@ POST /api/:owner/:repo/cloud_accounts/:id/activate *示例* ``` curl -X POST \ --d "drone_token=xxxxxxxxxx" \ http://localhost:3000/api/jasder/forgeplus/cloud_accounts/1/activate.json | jq ``` *请求参数说明:* @@ -2530,8 +2505,6 @@ http://localhost:3000/api/jasder/forgeplus/cloud_accounts/1/activate.json | jq |owner |是|string |用户登录名 | |repo |是|string |project's identifier | |id |是|int |cloud_account's id | -|drone_token |否|string |CI端用户的token值,只有当用户第一次激活时,才需要填写该值 | - *返回参数说明:* From 318c9487fb6ee6253cc74de5d343df22631afa9d Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 1 Sep 2020 15:23:02 +0800 Subject: [PATCH 134/384] =?UTF-8?q?FIX=20=E8=A7=A3=E5=86=B3trustie?= =?UTF-8?q?=E5=92=8Cforge=E5=90=8C=E6=AD=A5=E7=99=BB=E5=BD=95=E7=99=BB?= =?UTF-8?q?=E5=87=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/accounts_controller.rb | 2 + app/controllers/concerns/login_helper.rb | 47 +++++++++++++++++++++--- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 8d51fddc8..3625a0a3f 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -246,6 +246,8 @@ class AccountsController < ApplicationController def set_autologin_cookie(user) token = Token.get_or_create_permanent_login_token(user, "autologin") + sync_user_token_to_trustie(user.login, token.value) + cookie_options = { :value => token.value, :expires => 1.month.from_now, diff --git a/app/controllers/concerns/login_helper.rb b/app/controllers/concerns/login_helper.rb index 8891ad029..ff26c4b55 100644 --- a/app/controllers/concerns/login_helper.rb +++ b/app/controllers/concerns/login_helper.rb @@ -11,13 +11,15 @@ module LoginHelper def set_autologin_cookie(user) token = Token.get_or_create_permanent_login_token(user, "autologin") + sync_user_token_to_trustie(user.login, token.value) + Rails.logger.info "###### def set_autologin_cookie and get_or_create_permanent_login_token result: #{token&.value}" cookie_options = { :value => token.value, :expires => 1.month.from_now, :path => '/', :secure => false, - :httponly => false + :httponly => true } if edu_setting('cookie_domain').present? cookie_options = cookie_options.merge(domain: edu_setting('cookie_domain')) @@ -51,11 +53,16 @@ module LoginHelper Rails.logger.info("####################__User.current_id______######{current_user.try(:id)}###___#{current_user&.logged?}") if User.current.logged? - if autologin = cookies.delete(autologin_cookie_name) + user = User.current + autologin = + if edu_setting('cookie_domain').present? + cookies.delete(autologin_cookie_name, domain: edu_setting('cookie_domain')) + else + cookies.delete(autologin_cookie_name) + end - User.current.delete_autologin_token(autologin) - end - User.current.delete_session_token(session[:tk]) + user.delete_autologin_token(autologin) + user.delete_session_token(session[:tk]) self.logged_user = nil end @@ -68,7 +75,7 @@ module LoginHelper # Sets the logged in user def logged_user=(user) - # reset_session + reset_session if user && user.is_a?(User) Rails.logger.info("########________logged_user___________###########{user.id}") @@ -111,4 +118,32 @@ module LoginHelper false end end + + # TODO 同步token到trustie平台,保持同步登录状态 + def sync_user_token_to_trustie(login, token_value) + + config = Rails.application.config_for(:configuration).symbolize_keys! + + token = config[:sync_token] + api_host = config[:sync_url] + + url = "#{api_host}/api/v1/users/sync_user_token" + sync_json = { + "token": token, + "login": type, + "user_token": token_value + } + uri = URI.parse(url) + + if api_host + http = Net::HTTP.new(uri.hostname, uri.port) + + if api_host.include?("https://") + http.use_ssl = true + end + + http.send_request('PUT', uri.path, sync_json.to_json, {'Content-Type' => 'application/json'}) + end + + end end From cd933f20313645ef0aa52210e9d94a190d159b12 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 1 Sep 2020 15:33:31 +0800 Subject: [PATCH 135/384] FIX CODE BUG --- app/controllers/concerns/login_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/login_helper.rb b/app/controllers/concerns/login_helper.rb index ff26c4b55..5b971e246 100644 --- a/app/controllers/concerns/login_helper.rb +++ b/app/controllers/concerns/login_helper.rb @@ -130,7 +130,7 @@ module LoginHelper url = "#{api_host}/api/v1/users/sync_user_token" sync_json = { "token": token, - "login": type, + "login": login, "user_token": token_value } uri = URI.parse(url) From 6ec599a94615844f7c7ee5b3db29a4f7e36f55bc Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 1 Sep 2020 15:51:03 +0800 Subject: [PATCH 136/384] =?UTF-8?q?FIX=20forge=E7=99=BB=E5=BD=95=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=90=8C=E6=AD=A5trustie=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/concerns/login_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/login_helper.rb b/app/controllers/concerns/login_helper.rb index 5b971e246..233aac0a1 100644 --- a/app/controllers/concerns/login_helper.rb +++ b/app/controllers/concerns/login_helper.rb @@ -142,7 +142,7 @@ module LoginHelper http.use_ssl = true end - http.send_request('PUT', uri.path, sync_json.to_json, {'Content-Type' => 'application/json'}) + http.send_request('POST', uri.path, sync_json.to_json, {'Content-Type' => 'application/json'}) end end From 562d0b7b07a7cbede352441e458c058c306cc3f9 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 3 Sep 2020 15:52:54 +0800 Subject: [PATCH 137/384] =?UTF-8?q?ADD=20=E4=B8=AA=E4=BA=BA=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E6=B7=BB=E5=8A=A0devops=E7=AE=A1=E7=90=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 181 +++++++++++++++++- .../ci/cloud_accounts_controller.rb | 136 ++++++++----- app/models/ci/cloud_account.rb | 1 + app/models/ci/log.rb | 4 + app/models/ci/perm.rb | 4 + app/models/ci/user.rb | 2 + app/models/oauth.rb | 1 - app/models/user.rb | 3 +- .../ci/ucloud_accounts/bind.json.jbuilder | 9 + .../ci/ucloud_accounts/show.json.jbuilder | 9 + .../ci/ucloud_accounts/unbind.json.jbuilder | 0 .../projects/_project_detail.json.jbuilder | 1 + config/routes.rb | 23 +++ 13 files changed, 327 insertions(+), 47 deletions(-) create mode 100644 app/models/ci/log.rb create mode 100644 app/models/ci/perm.rb create mode 100644 app/views/ci/ucloud_accounts/bind.json.jbuilder create mode 100644 app/views/ci/ucloud_accounts/show.json.jbuilder create mode 100644 app/views/ci/ucloud_accounts/unbind.json.jbuilder diff --git a/README.md b/README.md index 4698acc5e..61970b40f 100644 --- a/README.md +++ b/README.md @@ -2424,7 +2424,7 @@ http://localhost:3000/api/jasder/forgeplus/ci_authorize.json | jq |参数名|类型|说明| |-|-|-| -|step |int|初始化devops流程步骤; 0: 标识未开启devops,1: 标识用户已填写了云服务器相关信息,但并未开启认证, 2: 标识用户已开启了CI服务端的认证, 3: 标识用户ci服务已初始化| +|step |int|初始化devops流程步骤; 0: 标识未开启devops,1: 标识用户已填写了云服务器相关信息,但并未开启认证, 2: 标识用户已开启了CI服务端的认证| |account |string|你的云服务器帐号| |ip |string|你的云服务器帐号ip| |secret |string|你的云服务器登录密码| @@ -3108,3 +3108,182 @@ http://localhost:3000/api/dev_ops/builds/2/logs/1/1 | jq ] ``` --- + +#### 获取CI服务器配置信息 +``` +GET /api/users/ci/cloud_account +``` + +*示例* +``` +curl -X GET \ +http://localhost:3000/api/users/ci/cloud_account | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|step |int|0: 未绑定;1: 未认证(已绑定),2: 已认证| +|ip |string|ci服务器ip| +|redirect_url |string|认证地址| + +返回值 +```json +{ + "step": 0, + "cloud_account": { + "ip": "xxx.xxx.xxx.x", + "redirect_url": "http://localhost:3000/login", + } +} +``` +--- + +#### 绑定CI服务器 +``` +POST /api/users/ci/cloud_account/bind +``` + +*示例* +``` +curl -X POST \ +-d "account=xx" \ +-d "secret=xxx" \ +-d "ip_num=xx.xx.xx.xx" \ +https://localhost:3000/api/users/ci/cloud_account/bind.json | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|account |是|string |云服务器ssh连接登录用户名 | +|secret |是|string |云服务器ssh连接登录秘密 | +|ip_num |否|string |云服务器公网IP | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|step |int|0: 未绑定;1: 未认证(已绑定),2: 已认证| +|ip |string|ci服务器ip| +|redirect_url |string|认证地址| + +返回值 +```json +{ + "step": 0, + "cloud_account": { + "ip": "xxx.xxx.xxx.x", + "redirect_url": "http://localhost:3000/login", + } +} +``` +--- + + +### 解除CI服务器绑定 +``` +DELETE /api/users/ci/cloud_account/unbind +``` + +*示例* +``` +curl -X DELETE \ +http://localhost:3000/api/users/ci/cloud_account/unbind.json | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|状态码, 0: 成功,-1: 失败| +|message |string|返回信息说明| + +返回值 +```json +{ + "status": 0, + "message": "success" +} +``` +--- + +### 项目列表 +``` +GET /api/users/:login/projects +``` + +*示例* +``` +curl -X GET \ +-d "page=1" \ +-d "limit=20" \ +http://localhost:3000/api/users/Jason/projects.json | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|page |否|int |页数,第几页 | +|limit |否|int |每页多少条数据,默认20条 | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int |项目总条数 | +|id |string |项目id | +|name |string|项目名称| +|description |string|项目简介| +|open_devops |boolean|激活状态,true: 激活; false:未激活| +|visits |int|流量数| +|forked_count |int|被fork的数量| +|praises_count |int|star数量| +|is_public |boolean|是否公开, true:公开,false:未公开| +|mirror_url |string|镜像url| +|last_update_time|int|最后更新时间,为UNIX格式的时间戳| +|author |object|项目创建者| +|-- name |string|用户名,也是用户标识| +|category |object|项目类别| +|-- id |int|项目类型id| +|-- name |string|项目类型名称| +|language |object|项目语言| +|-- id |int|项目语言id| +|-- name |string|项目语言名称| + + +返回值 +``` +{ + "total_count": 3096, + "projects": [ + { + "id": 1, + "name": "hnfl_demo1", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": true, + "mirror_url": null, + "last_update_time": 1577697461, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + } + ] +} +``` +--- diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 85b0e7ac8..46fd02e76 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -10,52 +10,12 @@ class Ci::CloudAccountsController < Ci::BaseController ActiveRecord::Base.transaction do Ci::CreateCloudAccountForm.new(devops_params).validate! - # 1. 保存华为云服务器帐号 - create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: Ci::CloudAccount.encrypted_secret(devops_params[:secret])) - if current_user&.ci_cloud_account.present? - return render_error('该仓库已绑定了云帐号.') - else - cloud_account = Ci::CloudAccount.new(create_params) - cloud_account.user = current_user - cloud_account.save! - end - - # 2. 生成oauth2应用程序的client_id和client_secrete - gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline", redirect_uris: ["#{cloud_account.drone_url}/login"]}) - logger.info "######### gitea_oauth: #{gitea_oauth}" - oauth = Oauth.new(client_id: gitea_oauth['client_id'], - client_secret: gitea_oauth['client_secret'], - redirect_uri: gitea_oauth['redirect_uris'], - gitea_oauth_id: gitea_oauth['id'], - user_id: current_user.id, - project_id: @project.id) - oauth.save - - rpc_secret = SecureRandom.hex 16 - logger.info "######### rpc_secret: #{rpc_secret}" - - # 3. 创建drone server - drone_server_cmd = Ci::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd - logger.info "######### drone_server_cmd: #{drone_server_cmd}" - - # 4. 创建drone client - drone_client_cmd = Ci::Drone::Client.new(oauth.client_id, cloud_account.drone_ip, rpc_secret).generate_cmd - logger.info "######### drone_client_cmd: #{drone_client_cmd}" - - # 5. 登录远程服务器,启动drone服务 - result = Ci::Drone::Start.new(cloud_account.account, cloud_account.visible_secret, cloud_account.drone_ip, drone_server_cmd, drone_client_cmd).run - logger.info "######### result: #{result}" - - - redirect_url = "#{cloud_account.drone_url}/login" - logger.info "######### redirect_url: #{redirect_url}" - - if result && !result.blank? - current_user.set_drone_step!(User::DEVOPS_UNVERIFIED) - render_ok(redirect_url: redirect_url) - else + @cloud_account = bind_account(current_user) + if @cloud_account.blank? render_error('激活失败, 请检查你的云服务器信息是否正确.') raise ActiveRecord::Rollback + else + current_user.set_drone_step!(User::DEVOPS_UNVERIFIED) end end rescue Exception => ex @@ -79,6 +39,37 @@ class Ci::CloudAccountsController < Ci::BaseController end end + def show + @cloud_account = current_user.ci_cloud_account + end + + + def bind + Ci::CreateCloudAccountForm.new(devops_params).validate! + + ActiveRecord::Base.transaction do + @cloud_account = bind_account(current_user) + if @cloud_account.blank? + render_error('激活失败, 请检查你的云服务器信息是否正确.') + raise ActiveRecord::Rollback + else + current_user.set_drone_step!(User::DEVOPS_UNVERIFIED) + end + end + rescue Exception => ex + render_error(ex.message) + end + + def unbind + ActiveRecord::Base.transaction do + unbind_account!(current_user) + render_ok + end + rescue Exception => ex + render_error(ex.message) + end + + private def devops_params params.permit(:account, :secret, :ip_num) @@ -87,4 +78,61 @@ class Ci::CloudAccountsController < Ci::BaseController def find_cloud_account @cloud_account = Ci::CloudAccount.find params[:id] end + + def bind_account(user) + # 1. 保存华为云服务器帐号 + create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: Ci::CloudAccount.encrypted_secret(devops_params[:secret])) + + return render_error('你已绑定了云帐号.') if user.ci_cloud_account.blank? + + cloud_account = Ci::CloudAccount.new(create_params) + cloud_account.user = user + cloud_account.save! + + # 2. 生成oauth2应用程序的client_id和client_secrete + gitea_oauth = Gitea::Oauth2::CreateService.call(user.gitea_token, {name: "pipeline", redirect_uris: ["#{cloud_account.drone_url}/login"]}) + logger.info "######### gitea_oauth: #{gitea_oauth}" + oauth = Oauth.new(client_id: gitea_oauth['client_id'], + client_secret: gitea_oauth['client_secret'], + redirect_uri: gitea_oauth['redirect_uris'], + gitea_oauth_id: gitea_oauth['id'], + user_id: current_user.id) + oauth.save + + rpc_secret = SecureRandom.hex 16 + logger.info "######### rpc_secret: #{rpc_secret}" + + # 3. 创建drone server + drone_server_cmd = Ci::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd + logger.info "######### drone_server_cmd: #{drone_server_cmd}" + + # 4. 创建drone client + drone_client_cmd = Ci::Drone::Client.new(oauth.client_id, cloud_account.drone_ip, rpc_secret).generate_cmd + logger.info "######### drone_client_cmd: #{drone_client_cmd}" + + # 5. 登录远程服务器,启动drone服务 + result = Ci::Drone::Start.new(cloud_account.account, cloud_account.visible_secret, cloud_account.drone_ip, drone_server_cmd, drone_client_cmd).run + logger.info "######### result: #{result}" + + + redirect_url = "#{cloud_account.drone_url}/login" + logger.info "######### redirect_url: #{redirect_url}" + + result && !result.blank? ? cloud_account : nil + end + + def unbind_account!(user) + cloud_account = user.ci_cloud_account + + case user.devops_step + when User::DEVOPS_UNINIT + return render_error('你还未绑定CI服务器') + when User::DEVOPS_UNVERIFIED + cloud_account.destroy + when User::DEVOPS_CERTIFICATION + cloud_account.ci_user.destroy + end + user.projects.update_all(open_devops: false) + user.set_drone_step!(User::DEVOPS_UNINIT) + end end diff --git a/app/models/ci/cloud_account.rb b/app/models/ci/cloud_account.rb index f54db49d9..ca8524c9a 100644 --- a/app/models/ci/cloud_account.rb +++ b/app/models/ci/cloud_account.rb @@ -1,5 +1,6 @@ class Ci::CloudAccount < Ci::LocalBase belongs_to :user + belongs_to :ci_user, class_name: 'Ci::User', foreign_key: :ci_user_id def drone_host [drone_ip, ":80"].join diff --git a/app/models/ci/log.rb b/app/models/ci/log.rb new file mode 100644 index 000000000..e509425dd --- /dev/null +++ b/app/models/ci/log.rb @@ -0,0 +1,4 @@ +class Ci::Log < Ci::RemoteBase + self.primary_key = 'log_id' + +end diff --git a/app/models/ci/perm.rb b/app/models/ci/perm.rb new file mode 100644 index 000000000..ae16d5880 --- /dev/null +++ b/app/models/ci/perm.rb @@ -0,0 +1,4 @@ +class Ci::Perm < Ci::RemoteBase + belongs_to :user, foreign_key: :perm_user_id + +end diff --git a/app/models/ci/user.rb b/app/models/ci/user.rb index 90387b492..fecf7dccd 100644 --- a/app/models/ci/user.rb +++ b/app/models/ci/user.rb @@ -2,5 +2,7 @@ class Ci::User < Ci::RemoteBase self.primary_key = 'user_id' has_many :repos, foreign_key: "repo_user_id", dependent: :destroy + has_many :perms, foreign_key: "perm_user_id", dependent: :destroy + has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', foreign_key: :ci_user_id end diff --git a/app/models/oauth.rb b/app/models/oauth.rb index 563ed0906..bf7860515 100644 --- a/app/models/oauth.rb +++ b/app/models/oauth.rb @@ -1,5 +1,4 @@ # for oauth2 application class Oauth < ApplicationRecord - belongs_to :project belongs_to :user end diff --git a/app/models/user.rb b/app/models/user.rb index 9acd369e8..9df853b4e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -10,9 +10,10 @@ class User < ApplicationRecord # include Searchable::Dependents::User # devops step - # devops_step column: 0: 未填写服务器信息;1: 已填写服务器信息(未认证); + # devops_step column: 0: 未填写服务器信息;1: 已填写服务器信息(未认证);2: 已认证 DEVOPS_UNINIT = 0 DEVOPS_UNVERIFIED = 1 + DEVOPS_CERTIFICATION = 2 # Account statuses STATUS_ANONYMOUS = 0 diff --git a/app/views/ci/ucloud_accounts/bind.json.jbuilder b/app/views/ci/ucloud_accounts/bind.json.jbuilder new file mode 100644 index 000000000..230f4672f --- /dev/null +++ b/app/views/ci/ucloud_accounts/bind.json.jbuilder @@ -0,0 +1,9 @@ +json.step current_user.devops_step +json.cloud_account do + if @cloud_account && !current_user.devops_uninit? + json.ip @cloud_account.drone_ip + json.redirect_url "#{@cloud_account.drone_url}/login" if current_user.devops_unverified? + else + json.nil! + end +end diff --git a/app/views/ci/ucloud_accounts/show.json.jbuilder b/app/views/ci/ucloud_accounts/show.json.jbuilder new file mode 100644 index 000000000..230f4672f --- /dev/null +++ b/app/views/ci/ucloud_accounts/show.json.jbuilder @@ -0,0 +1,9 @@ +json.step current_user.devops_step +json.cloud_account do + if @cloud_account && !current_user.devops_uninit? + json.ip @cloud_account.drone_ip + json.redirect_url "#{@cloud_account.drone_url}/login" if current_user.devops_unverified? + else + json.nil! + end +end diff --git a/app/views/ci/ucloud_accounts/unbind.json.jbuilder b/app/views/ci/ucloud_accounts/unbind.json.jbuilder new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/projects/_project_detail.json.jbuilder b/app/views/projects/_project_detail.json.jbuilder index d7cd196e2..b14a237e7 100644 --- a/app/views/projects/_project_detail.json.jbuilder +++ b/app/views/projects/_project_detail.json.jbuilder @@ -16,6 +16,7 @@ json.type project&.numerical_for_project_type json.last_update_time render_unix_time(project.updated_on) json.time_ago time_from_now(project.updated_on) json.forked_from_project_id project.forked_from_project_id +json.open_devops project.open_devops? json.author do json.name user.try(:show_real_name) json.login user.login diff --git a/config/routes.rb b/config/routes.rb index c2f608afd..595692371 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -26,6 +26,7 @@ Rails.application.routes.draw do get :common end end + # resources :repos, only: :index do # collection do # get 'get_trustie_pipeline', to: 'builds#get_trustie_pipeline', as: 'get_trustie_pipeline' @@ -144,6 +145,28 @@ Rails.application.routes.draw do post :sync_salt get :trustie_projects get :trustie_related_projects + + scope '/ci', module: :ci do + scope do + post( + '/cloud_account/bind', + to: 'cloud_accounts#bind', + as: :bind_cloud_acclount + ) + + get( + '/cloud_account', + to: 'cloud_accounts#show', + as: :get_cloud_account + ) + + delete( + '/cloud_account/unbind', + to: 'cloud_accounts#unbind', + as: :unbind_cloud_acclount + ) + end + end end scope module: :users do From b31a11302c782b1c584d8647d9ab9bae50346dd1 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 3 Sep 2020 17:05:38 +0800 Subject: [PATCH 138/384] FIX devops admin bug --- app/controllers/ci/cloud_accounts_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 46fd02e76..f133ec445 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -1,8 +1,8 @@ class Ci::CloudAccountsController < Ci::BaseController include Devopsable - before_action :load_project - before_action :ci_authorize! + before_action :load_project, only: %i[create activate] + before_action :ci_authorize!, only: %i[create activate] before_action :find_cloud_account, only: %i[activate] before_action :load_repo, only: %i[activate] From 74b2a5b021dd58fc7fe0ada49a2f843b202959fd Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 3 Sep 2020 17:10:23 +0800 Subject: [PATCH 139/384] FIX rename ucloud view dir --- .../ci/{ucloud_accounts => cloud_accounts}/bind.json.jbuilder | 0 .../ci/{ucloud_accounts => cloud_accounts}/show.json.jbuilder | 0 .../ci/{ucloud_accounts => cloud_accounts}/unbind.json.jbuilder | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename app/views/ci/{ucloud_accounts => cloud_accounts}/bind.json.jbuilder (100%) rename app/views/ci/{ucloud_accounts => cloud_accounts}/show.json.jbuilder (100%) rename app/views/ci/{ucloud_accounts => cloud_accounts}/unbind.json.jbuilder (100%) diff --git a/app/views/ci/ucloud_accounts/bind.json.jbuilder b/app/views/ci/cloud_accounts/bind.json.jbuilder similarity index 100% rename from app/views/ci/ucloud_accounts/bind.json.jbuilder rename to app/views/ci/cloud_accounts/bind.json.jbuilder diff --git a/app/views/ci/ucloud_accounts/show.json.jbuilder b/app/views/ci/cloud_accounts/show.json.jbuilder similarity index 100% rename from app/views/ci/ucloud_accounts/show.json.jbuilder rename to app/views/ci/cloud_accounts/show.json.jbuilder diff --git a/app/views/ci/ucloud_accounts/unbind.json.jbuilder b/app/views/ci/cloud_accounts/unbind.json.jbuilder similarity index 100% rename from app/views/ci/ucloud_accounts/unbind.json.jbuilder rename to app/views/ci/cloud_accounts/unbind.json.jbuilder From 32ec60bbe3f377be90cf172296a50db26c1e5ce8 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 10:17:44 +0800 Subject: [PATCH 140/384] =?UTF-8?q?FIX=20=E5=AE=8C=E5=96=84ci=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E7=9A=84=E8=A7=A3=E7=BB=91=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ci/cloud_accounts_controller.rb | 24 ++++++++-- app/controllers/hooks_controller.rb | 46 +++++++++---------- app/models/ci/perm.rb | 4 +- app/services/gitea/hooks/destroy_service.rb | 20 ++++---- app/services/gitea/hooks/list_service.rb | 24 ++++++---- 5 files changed, 69 insertions(+), 49 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index f133ec445..dc5579ef5 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -123,16 +123,30 @@ class Ci::CloudAccountsController < Ci::BaseController def unbind_account!(user) cloud_account = user.ci_cloud_account - case user.devops_step - when User::DEVOPS_UNINIT - return render_error('你还未绑定CI服务器') + when User::DEVOPS_UNINIT, cloud_account.blank? + return render_error('你未绑定CI服务器') when User::DEVOPS_UNVERIFIED - cloud_account.destroy + cloud_account.destroy! when User::DEVOPS_CERTIFICATION - cloud_account.ci_user.destroy + cloud_account.ci_user.destroy! end user.projects.update_all(open_devops: false) user.set_drone_step!(User::DEVOPS_UNINIT) + + # TODO + # 删除用户项目下的与ci相关的所有webhook + user.projects.each do |project| + result = Gitea::Hooks::ListService.call(user.gitea_token, user.login, project.identifier) + + if result.status == 200 + hooks = JSON.parse(result.body) + hooks.each do |hook| + if hook['config']['url'].include? cloud_account.drone_host + Gitea::Hooks::DestroyService.call(user.gitea_token, user.login, project.identifier, hook['id']) + end + end + end + end end end diff --git a/app/controllers/hooks_controller.rb b/app/controllers/hooks_controller.rb index 92b1d7227..206f79477 100644 --- a/app/controllers/hooks_controller.rb +++ b/app/controllers/hooks_controller.rb @@ -4,18 +4,18 @@ class HooksController < ApplicationController before_action :check_user before_action :set_repository - def index - hooks_response = Gitea::Hooks::ListService.new(@user, @repository.try(:identifier)).call - if hooks_response.status == 200 + def index + hooks_response = Gitea::Hooks::ListService.new(@user.gitea_token, @user.login, @repository.try(:identifier)).call + if hooks_response.status == 200 lists = JSON.parse(hooks_response.body) @hooks_size = lists.size @hooks = paginate(lists) - else + else normal_status(-1, "出现错误") end end - def create + def create #根据gitea的api # hook_params = { # active: true, @@ -36,17 +36,17 @@ class HooksController < ApplicationController # content_type: params[:content_type].to_i, # secret: params[:secret], # events: { - # push_only: params[:push_only] || false, # 是否为推送事件 - # send_everything: params[:send_everything] || false, #是否为所有事件 + # push_only: params[:push_only] || false, # 是否为推送事件 + # send_everything: params[:send_everything] || false, #是否为所有事件 # choose_events: params[:choose_events] || false, #是否为自定义事件 # branch_filter: params[:branch_filter] || "*", # events: { # create: params[:create] || false, #创建分支/标签 - # delete: params[:delete] || false, #删除分支/标签 - # fork: params[:fork] || false, #仓库被派生 + # delete: params[:delete] || false, #删除分支/标签 + # fork: params[:fork] || false, #仓库被派生 # issues: params[:issues] || false, #工单 - # issue_comment: params[:issue_comment] || false, #评论 - # push: params[:push] || false # 推送 + # issue_comment: params[:issue_comment] || false, #评论 + # push: params[:push] || false # 推送 # pull_request: params[:pull_request] || false #合并请求 # repository: params[:repository] || false #仓库 # release: params[:release] || false #版本发布 @@ -58,28 +58,28 @@ class HooksController < ApplicationController Gitea::Hooks::CreateService.new(@user, @repository.try(:identifier), hook_params).call #创建gitea的hook功能 Gitea::Hooks::CreateService.new(user, p.try(:identifier), hook_params).call #创建gitea的hook功能 - end + end - def update + def update hook_params = params[:hook_params] response = Gitea::Hooks::UpdateService.new(@user, @repository.try(:identifier), hook_params, params[:id]).call - if response.status == 200 + if response.status == 200 normal_status(1, "更新成功") - else + else normal_status(-1, "更新失败") end - end + end - def destroy + def destroy response = Gitea::Hooks::DestroyService.new(@user, @repository.try(:identifier), params[:id]).call if response.status == 204 normal_status(1, "删除成功") - else + else normal_status(-1, "删除失败") end - end + end - private + private def set_repository @repository = @project.repository @@ -88,9 +88,9 @@ class HooksController < ApplicationController normal_status(-1, "用户不存在") unless @user.present? end - def check_user - unless @project.user_id == current_user.id - tip_exception(403, "您没有权限进入") + def check_user + unless @project.user_id == current_user.id + tip_exception(403, "您没有权限进入") end end end diff --git a/app/models/ci/perm.rb b/app/models/ci/perm.rb index ae16d5880..8a238c2c6 100644 --- a/app/models/ci/perm.rb +++ b/app/models/ci/perm.rb @@ -1,4 +1,6 @@ class Ci::Perm < Ci::RemoteBase - belongs_to :user, foreign_key: :perm_user_id + self.primary_key = nil + + belongs_to :ci_user, class_name: 'Ci::User', foreign_key: :perm_user_id end diff --git a/app/services/gitea/hooks/destroy_service.rb b/app/services/gitea/hooks/destroy_service.rb index 779ebd41d..b30178eaf 100644 --- a/app/services/gitea/hooks/destroy_service.rb +++ b/app/services/gitea/hooks/destroy_service.rb @@ -1,23 +1,23 @@ class Gitea::Hooks::DestroyService < Gitea::ClientService - attr_reader :user, :repo_name,:hook_id + attr_reader :token, :owner, :repo, :hook_id - def initialize(user, repo_name, hook_id) - @user = user - @repo_name = repo_name + def initialize(token, owner, repo, hook_id) + @token = token + @owner = owner + @repo = repo @hook_id = hook_id end - def call - response = delete(url, params) + def call + delete(url, params) end private def params - Hash.new.merge(token: user.gitea_token) + Hash.new.merge(token: token) end def url - "/repos/#{user.login}/#{repo_name}/hooks/#{hook_id}".freeze + "/repos/#{owner}/#{repo}/hooks/#{hook_id}".freeze end - -end \ No newline at end of file +end diff --git a/app/services/gitea/hooks/list_service.rb b/app/services/gitea/hooks/list_service.rb index 00170073f..04dab7dbe 100644 --- a/app/services/gitea/hooks/list_service.rb +++ b/app/services/gitea/hooks/list_service.rb @@ -1,23 +1,27 @@ class Gitea::Hooks::ListService < Gitea::ClientService - attr_reader :user, :repo_name + attr_reader :token, :owner, :repo, :params - def initialize(user, repo_name) - @user = user - @repo_name = repo_name - @body = body + def initialize(token, owner, repo_name, params={}) + @token = token + @owner = owner + @repo = repo + @params = params end - def call - response = get(url, params) + def call + get(url, params) end private def params - Hash.new.merge(token: user.gitea_token) + Hash.new.merge(token: token, + page: params[:page], + limit: params[:limit] + ).compact! end def url - "/repos/#{user.login}/#{repo_name}/hooks".freeze + "/repos/#{owner}/#{repo}/hooks".freeze end -end \ No newline at end of file +end From 8c908a35ac213d1aaff861acd51f9b54ad6c4b99 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 10:28:41 +0800 Subject: [PATCH 141/384] FIX bug --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index dc5579ef5..79e15a093 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -83,7 +83,7 @@ class Ci::CloudAccountsController < Ci::BaseController # 1. 保存华为云服务器帐号 create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: Ci::CloudAccount.encrypted_secret(devops_params[:secret])) - return render_error('你已绑定了云帐号.') if user.ci_cloud_account.blank? + return render_error('你已绑定了云帐号.') unless user.ci_cloud_account.blank? cloud_account = Ci::CloudAccount.new(create_params) cloud_account.user = user From eb2f1f46e02591e27527de6ecc12f572d8dcf056 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 15:46:07 +0800 Subject: [PATCH 142/384] ADD create gitea webhook api --- .../ci/cloud_accounts_controller.rb | 16 +++++++++ app/services/gitea/hooks/create_service.rb | 36 +++++++++++++------ 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 79e15a093..a696c075c 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -30,6 +30,9 @@ class Ci::CloudAccountsController < Ci::BaseController ci_user = Ci::User.find_by(user_login: current_user.login) repo = Ci::Repo.where(repo_namespace: current_user.login, repo_name: params[:repo]).first begin + bind_result = bind_hook!(current_user, @cloud_account, @repo) + return render_error('hook激活失败') unless bind_result + repo.activate!(ci_user.user_id) @project.update_column(:open_devops, true) @cloud_account.update_column(:ci_user_id, ci_user.user_id) @@ -149,4 +152,17 @@ class Ci::CloudAccountsController < Ci::BaseController end end end + + def bind_hook!(user, cloud_account, repo) + hook_params = { + "active": true, + "config": { + "content_type": "json", + "url": cloud_account.drone_url + "/hook?secret=#{repo.repo_signer}" + }, + "type": "gitea" + } + result = Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.repo_name, hook_params) + result.status == 201 ? true : false + end end diff --git a/app/services/gitea/hooks/create_service.rb b/app/services/gitea/hooks/create_service.rb index 9c66c9a7e..c6993ffa7 100644 --- a/app/services/gitea/hooks/create_service.rb +++ b/app/services/gitea/hooks/create_service.rb @@ -1,23 +1,39 @@ class Gitea::Hooks::CreateService < Gitea::ClientService - attr_reader :user, :repo_name, :body + attr_reader :token, :owner, :repo, :body - def initialize(user, repo_name, body) - @user = user - @repo_name = repo_name - @body = body + # body params: + # { + # "active": false, + # "branch_filter": "string", + # "config": { + # "content_type": "string", + # "url": "string" + # }, + # "events": [ + # "create" + # ], + # "type": "gitea" + # } + # eg: + # Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.identifier, body) + def initialize(token, owner, repo, body) + @token = token + @owner = owner + @repo = repo + @body = body end - def call - response = post(url, params) + def call + post(url, params) end private def params - body.merge(token: user.gitea_token) + Hash.new.merge(token: token, data: body).compact! end def url - "/repos/#{user.login}/#{repo_name}/hooks".freeze + "/repos/#{owner}/#{repo}/hooks".freeze end -end \ No newline at end of file +end From f7d83acafe0bfc3e62d5400fd5e591923e332762 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 16:17:18 +0800 Subject: [PATCH 143/384] ADD webhook manager --- .../ci/cloud_accounts_controller.rb | 27 +++++++++---------- ...074907_add_gitea_webhook_id_to_projects.rb | 5 ++++ 2 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 db/migrate/20200904074907_add_gitea_webhook_id_to_projects.rb diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index a696c075c..83dd77b39 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -30,11 +30,12 @@ class Ci::CloudAccountsController < Ci::BaseController ci_user = Ci::User.find_by(user_login: current_user.login) repo = Ci::Repo.where(repo_namespace: current_user.login, repo_name: params[:repo]).first begin - bind_result = bind_hook!(current_user, @cloud_account, @repo) - return render_error('hook激活失败') unless bind_result + result = bind_hook!(current_user, @cloud_account, @repo) + return render_error('hook激活失败') unless result repo.activate!(ci_user.user_id) - @project.update_column(:open_devops, true) + @project.update_columns(:open_devops, true, gitea_webhook_id: result['id']) + @cloud_account.update_column(:ci_user_id, ci_user.user_id) render_ok rescue Exception => ex @@ -139,17 +140,9 @@ class Ci::CloudAccountsController < Ci::BaseController # TODO # 删除用户项目下的与ci相关的所有webhook - user.projects.each do |project| - result = Gitea::Hooks::ListService.call(user.gitea_token, user.login, project.identifier) - - if result.status == 200 - hooks = JSON.parse(result.body) - hooks.each do |hook| - if hook['config']['url'].include? cloud_account.drone_host - Gitea::Hooks::DestroyService.call(user.gitea_token, user.login, project.identifier, hook['id']) - end - end - end + user.projects.pluck(:identifier, :gitea_webhook_id).each do |project| + result = Gitea::Hooks::DestroyService.call(user.gitea_token, user.login, project.identifier, project.gitea_webhook_id) + project.update_column(:gitea_webhook_id, nil) if result.status == 204 end end @@ -163,6 +156,10 @@ class Ci::CloudAccountsController < Ci::BaseController "type": "gitea" } result = Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.repo_name, hook_params) - result.status == 201 ? true : false + regurn nil if result.status unless result.status == 201 + + body = JSON.parse(result.body) + @project.update_column(:gitea_webhook_id, body['id']) + body end end diff --git a/db/migrate/20200904074907_add_gitea_webhook_id_to_projects.rb b/db/migrate/20200904074907_add_gitea_webhook_id_to_projects.rb new file mode 100644 index 000000000..35ba3e284 --- /dev/null +++ b/db/migrate/20200904074907_add_gitea_webhook_id_to_projects.rb @@ -0,0 +1,5 @@ +class AddGiteaWebhookIdToProjects < ActiveRecord::Migration[5.2] + def change + add_column :projects, :gitea_webhook_id, :integer + end +end From 15c92597a91677ace7c771ef772c934f663564c2 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 16:21:06 +0800 Subject: [PATCH 144/384] FIX code bug --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 83dd77b39..748ac9c4e 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -140,7 +140,7 @@ class Ci::CloudAccountsController < Ci::BaseController # TODO # 删除用户项目下的与ci相关的所有webhook - user.projects.pluck(:identifier, :gitea_webhook_id).each do |project| + user.projects.select(:identifier, :gitea_webhook_id).each do |project| result = Gitea::Hooks::DestroyService.call(user.gitea_token, user.login, project.identifier, project.gitea_webhook_id) project.update_column(:gitea_webhook_id, nil) if result.status == 204 end From 930f8195b7b2ff4238421544c76f6300842cf1d4 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 16:24:20 +0800 Subject: [PATCH 145/384] FIX project search wrong --- app/controllers/ci/cloud_accounts_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 748ac9c4e..91be6c0a3 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -140,8 +140,8 @@ class Ci::CloudAccountsController < Ci::BaseController # TODO # 删除用户项目下的与ci相关的所有webhook - user.projects.select(:identifier, :gitea_webhook_id).each do |project| - result = Gitea::Hooks::DestroyService.call(user.gitea_token, user.login, project.identifier, project.gitea_webhook_id) + user.projects.select(:id, :identifier, :gitea_webhook_id).each do |project| + result = Gitea::Hooks::DestroyService.call(user.gitea_token, user.login, project.identifier, project.gitea_webhook_id) unless project.gitea_webhook_id.blank? project.update_column(:gitea_webhook_id, nil) if result.status == 204 end end From 48350dc6f299360efb5725547066b09b060f0a11 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 16:26:00 +0800 Subject: [PATCH 146/384] FIX delete webhook for bind ci service --- app/controllers/ci/cloud_accounts_controller.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 91be6c0a3..5702f397b 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -141,8 +141,10 @@ class Ci::CloudAccountsController < Ci::BaseController # TODO # 删除用户项目下的与ci相关的所有webhook user.projects.select(:id, :identifier, :gitea_webhook_id).each do |project| - result = Gitea::Hooks::DestroyService.call(user.gitea_token, user.login, project.identifier, project.gitea_webhook_id) unless project.gitea_webhook_id.blank? - project.update_column(:gitea_webhook_id, nil) if result.status == 204 + if project.gitea_webhook_id + result = Gitea::Hooks::DestroyService.call(user.gitea_token, user.login, project.identifier, project.gitea_webhook_id) + project.update_column(:gitea_webhook_id, nil) if result.status == 204 + end end end From e0dac721143c3bc2c5baad6aa935f02593ea52cb Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 16:45:38 +0800 Subject: [PATCH 147/384] FIX ci repos dependent destroy bug --- app/controllers/ci/cloud_accounts_controller.rb | 1 + app/models/ci/user.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 5702f397b..dd665435a 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -134,6 +134,7 @@ class Ci::CloudAccountsController < Ci::BaseController cloud_account.destroy! when User::DEVOPS_CERTIFICATION cloud_account.ci_user.destroy! + Ci::Repo.where(repo_namespace: user.login).delete_all end user.projects.update_all(open_devops: false) user.set_drone_step!(User::DEVOPS_UNINIT) diff --git a/app/models/ci/user.rb b/app/models/ci/user.rb index fecf7dccd..197b6a30a 100644 --- a/app/models/ci/user.rb +++ b/app/models/ci/user.rb @@ -2,7 +2,7 @@ class Ci::User < Ci::RemoteBase self.primary_key = 'user_id' has_many :repos, foreign_key: "repo_user_id", dependent: :destroy - has_many :perms, foreign_key: "perm_user_id", dependent: :destroy + has_many :perms, foreign_key: "perm_user_id", dependent: :delete_all has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', foreign_key: :ci_user_id end From 5c2bb71e5797917996e65a21a58bfee15730dc54 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 16:57:23 +0800 Subject: [PATCH 148/384] FIX ci activate repo's bug --- app/controllers/ci/cloud_accounts_controller.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index dd665435a..d610b1333 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -30,10 +30,8 @@ class Ci::CloudAccountsController < Ci::BaseController ci_user = Ci::User.find_by(user_login: current_user.login) repo = Ci::Repo.where(repo_namespace: current_user.login, repo_name: params[:repo]).first begin - result = bind_hook!(current_user, @cloud_account, @repo) - return render_error('hook激活失败') unless result - repo.activate!(ci_user.user_id) + bind_hook!(current_user, @cloud_account, repo) @project.update_columns(:open_devops, true, gitea_webhook_id: result['id']) @cloud_account.update_column(:ci_user_id, ci_user.user_id) From 0777db4ab4b07c0924796a638cb3d8b6397dfd5b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 17:11:02 +0800 Subject: [PATCH 149/384] FIX --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index d610b1333..8f21978c7 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -31,7 +31,7 @@ class Ci::CloudAccountsController < Ci::BaseController repo = Ci::Repo.where(repo_namespace: current_user.login, repo_name: params[:repo]).first begin repo.activate!(ci_user.user_id) - bind_hook!(current_user, @cloud_account, repo) + result = bind_hook!(current_user, @cloud_account, repo) @project.update_columns(:open_devops, true, gitea_webhook_id: result['id']) @cloud_account.update_column(:ci_user_id, ci_user.user_id) From 81ec2644834fc11f0a6b4a78a54a03fbfab45e9e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 17:26:37 +0800 Subject: [PATCH 150/384] Update destroy ci_user attassion --- README.md | 4 +++- app/controllers/ci/cloud_accounts_controller.rb | 13 +++++++------ app/views/ci/cloud_accounts/show.json.jbuilder | 1 + 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 61970b40f..aa7cd1569 100644 --- a/README.md +++ b/README.md @@ -3124,7 +3124,8 @@ http://localhost:3000/api/users/ci/cloud_account | jq |参数名|类型|说明| |-|-|-| -|step |int|0: 未绑定;1: 未认证(已绑定),2: 已认证| +|step |int|0: 未绑定;1: 未认证(已绑定)| +|devops_certification |boolean|true: 已认证, false: 未认证| |ip |string|ci服务器ip| |redirect_url |string|认证地址| @@ -3132,6 +3133,7 @@ http://localhost:3000/api/users/ci/cloud_account | jq ```json { "step": 0, + "devops_certification": false, "cloud_account": { "ip": "xxx.xxx.xxx.x", "redirect_url": "http://localhost:3000/login", diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 8f21978c7..ffb4c9997 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -125,15 +125,16 @@ class Ci::CloudAccountsController < Ci::BaseController def unbind_account!(user) cloud_account = user.ci_cloud_account - case user.devops_step - when User::DEVOPS_UNINIT, cloud_account.blank? + ci_user = cloud_account.ci_user + + if user.devops_step == User::DEVOPS_UNINIT || cloud_account.blank? return render_error('你未绑定CI服务器') - when User::DEVOPS_UNVERIFIED - cloud_account.destroy! - when User::DEVOPS_CERTIFICATION - cloud_account.ci_user.destroy! + elsif user.devops_step == User::DEVOPS_UNVERIFIED || user.ci_certification? + ci_user.destroy! if ci_user Ci::Repo.where(repo_namespace: user.login).delete_all + cloud_account.destroy! end + user.projects.update_all(open_devops: false) user.set_drone_step!(User::DEVOPS_UNINIT) diff --git a/app/views/ci/cloud_accounts/show.json.jbuilder b/app/views/ci/cloud_accounts/show.json.jbuilder index 230f4672f..28c68570b 100644 --- a/app/views/ci/cloud_accounts/show.json.jbuilder +++ b/app/views/ci/cloud_accounts/show.json.jbuilder @@ -1,4 +1,5 @@ json.step current_user.devops_step +json.devops_certification current_user.ci_certification? json.cloud_account do if @cloud_account && !current_user.devops_uninit? json.ip @cloud_account.drone_ip From e77475e26a1d9e47b8b2bd8fc592e519a60eda30 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 17:35:29 +0800 Subject: [PATCH 151/384] ADD ci cloud account authenticate url --- app/controllers/ci/cloud_accounts_controller.rb | 1 + app/models/ci/cloud_account.rb | 4 ++++ app/views/ci/projects/authorize.json.jbuilder | 2 +- app/views/users/devops.json.jbuilder | 3 +-- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index ffb4c9997..c8d361050 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -16,6 +16,7 @@ class Ci::CloudAccountsController < Ci::BaseController raise ActiveRecord::Rollback else current_user.set_drone_step!(User::DEVOPS_UNVERIFIED) + render_ok(redirect_url: @cloud_account.authenticate_url) end end rescue Exception => ex diff --git a/app/models/ci/cloud_account.rb b/app/models/ci/cloud_account.rb index ca8524c9a..25fe81609 100644 --- a/app/models/ci/cloud_account.rb +++ b/app/models/ci/cloud_account.rb @@ -22,4 +22,8 @@ class Ci::CloudAccount < Ci::LocalBase Base64.encode64(str.strip).gsub(/\n/, '') end + def authenticate_url + [drone_url, '/login'].join + end + end diff --git a/app/views/ci/projects/authorize.json.jbuilder b/app/views/ci/projects/authorize.json.jbuilder index 39a20b1b3..13b77f289 100644 --- a/app/views/ci/projects/authorize.json.jbuilder +++ b/app/views/ci/projects/authorize.json.jbuilder @@ -5,7 +5,7 @@ json.cloud_account do json.account @cloud_account.account json.ip @cloud_account.drone_ip json.secret @cloud_account.visible_secret - json.authenticate_url "#{@cloud_account.drone_url}/login" if @user.devops_unverified? + json.authenticate_url @cloud_account.authenticate_url if @user.devops_unverified? else json.nil! end diff --git a/app/views/users/devops.json.jbuilder b/app/views/users/devops.json.jbuilder index 7ae5fa2c1..5830720e1 100644 --- a/app/views/users/devops.json.jbuilder +++ b/app/views/users/devops.json.jbuilder @@ -4,8 +4,7 @@ json.cloud_account do json.account @cloud_account.account json.ip @cloud_account.drone_ip json.secret @cloud_account.visible_secret - json.authenticate_url "#{@cloud_account.drone_url}/login" if @user.devops_unverified? - json.get_drone_token_url "#{@cloud_account.drone_url}/account" if @user.devops_verified? + json.authenticate_url @cloud_account.authenticate_url if @user.devops_unverified? else json.nil! end From 9613f4c48575822f03fcffab2c01f9d4ac60a064 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 17:51:39 +0800 Subject: [PATCH 152/384] FIX test gitea create webhook --- app/controllers/ci/cloud_accounts_controller.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index c8d361050..f5a18e160 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -31,9 +31,12 @@ class Ci::CloudAccountsController < Ci::BaseController ci_user = Ci::User.find_by(user_login: current_user.login) repo = Ci::Repo.where(repo_namespace: current_user.login, repo_name: params[:repo]).first begin + Rails.logger.info "============activate ======== #{ci_user.user_login} -- #{repo.repo_name}" repo.activate!(ci_user.user_id) + Rails.logger.info "==========activate start create hook ========" result = bind_hook!(current_user, @cloud_account, repo) - @project.update_columns(:open_devops, true, gitea_webhook_id: result['id']) + Rails.logger.info "=========activate create hook result #{result}" + @project.update_columns(open_devops: true, gitea_webhook_id: result['id']) if result @cloud_account.update_column(:ci_user_id, ci_user.user_id) render_ok @@ -158,9 +161,10 @@ class Ci::CloudAccountsController < Ci::BaseController }, "type": "gitea" } + Rails.logger.info "----------bind hook --------" result = Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.repo_name, hook_params) - regurn nil if result.status unless result.status == 201 - + regurn nil unless result.status == 201 + Rails.logger.info "----------bind hook success--------" body = JSON.parse(result.body) @project.update_column(:gitea_webhook_id, body['id']) body From 401efd7c9bcda3af4345133464242e2ec8f91a47 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 18:16:38 +0800 Subject: [PATCH 153/384] FIX code bug --- app/controllers/ci/cloud_accounts_controller.rb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index f5a18e160..f492c2fd8 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -134,7 +134,7 @@ class Ci::CloudAccountsController < Ci::BaseController if user.devops_step == User::DEVOPS_UNINIT || cloud_account.blank? return render_error('你未绑定CI服务器') elsif user.devops_step == User::DEVOPS_UNVERIFIED || user.ci_certification? - ci_user.destroy! if ci_user + ci_user.destroy! unless ci_user.blank? Ci::Repo.where(repo_namespace: user.login).delete_all cloud_account.destroy! end @@ -154,15 +154,16 @@ class Ci::CloudAccountsController < Ci::BaseController def bind_hook!(user, cloud_account, repo) hook_params = { - "active": true, - "config": { - "content_type": "json", - "url": cloud_account.drone_url + "/hook?secret=#{repo.repo_signer}" + active: true, + config: { + content_type: json, + url: cloud_account.drone_url + "/hook?secret=#{repo.repo_signer}" }, - "type": "gitea" + type: gitea } - Rails.logger.info "----------bind hook --------" + Rails.logger.info "----------bind hook -------- #{hook_params}" result = Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.repo_name, hook_params) + Rails.logger.info "----------gitea bind hook status -------- #{result.status}" regurn nil unless result.status == 201 Rails.logger.info "----------bind hook success--------" body = JSON.parse(result.body) From 5cc54049154651e2ad8942804f6f8837bbb729c2 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 18:20:50 +0800 Subject: [PATCH 154/384] FIX . --- app/controllers/ci/cloud_accounts_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index f492c2fd8..68556b6e0 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -156,10 +156,10 @@ class Ci::CloudAccountsController < Ci::BaseController hook_params = { active: true, config: { - content_type: json, + content_type: "json", url: cloud_account.drone_url + "/hook?secret=#{repo.repo_signer}" }, - type: gitea + type: "gitea" } Rails.logger.info "----------bind hook -------- #{hook_params}" result = Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.repo_name, hook_params) From a8821de85ffeca2b18e38f52f14d37daf2ddd075 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 7 Sep 2020 11:23:09 +0800 Subject: [PATCH 155/384] Update gitea hooks api --- app/services/gitea/hooks/create_service.rb | 2 +- app/services/gitea/hooks/list_service.rb | 2 +- app/services/gitea/hooks/update_service.rb | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/services/gitea/hooks/create_service.rb b/app/services/gitea/hooks/create_service.rb index c6993ffa7..711427e27 100644 --- a/app/services/gitea/hooks/create_service.rb +++ b/app/services/gitea/hooks/create_service.rb @@ -29,7 +29,7 @@ class Gitea::Hooks::CreateService < Gitea::ClientService private def params - Hash.new.merge(token: token, data: body).compact! + Hash.new.merge(token: token, data: body).compact end def url diff --git a/app/services/gitea/hooks/list_service.rb b/app/services/gitea/hooks/list_service.rb index 04dab7dbe..3bd05ea56 100644 --- a/app/services/gitea/hooks/list_service.rb +++ b/app/services/gitea/hooks/list_service.rb @@ -17,7 +17,7 @@ class Gitea::Hooks::ListService < Gitea::ClientService Hash.new.merge(token: token, page: params[:page], limit: params[:limit] - ).compact! + ).compact end def url diff --git a/app/services/gitea/hooks/update_service.rb b/app/services/gitea/hooks/update_service.rb index d59467588..9086a3a3c 100644 --- a/app/services/gitea/hooks/update_service.rb +++ b/app/services/gitea/hooks/update_service.rb @@ -2,14 +2,14 @@ class Gitea::Hooks::UpdateService < Gitea::ClientService attr_reader :user, :repo_name, :body,:hook_id def initialize(user, repo_name, body, hook_id) - @user = user - @repo_name = repo_name - @body = body + @user = user + @repo_name = repo_name + @body = body @hook_id = hook_id end - def call - response = patch(url, params) + def call + patch(url, params) end private @@ -21,4 +21,4 @@ class Gitea::Hooks::UpdateService < Gitea::ClientService "/repos/#{user.login}/#{repo_name}/hooks/#{hook_id}".freeze end -end \ No newline at end of file +end From 061f4cae4552adc4b60ea1d926b672babcb045bd Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 7 Sep 2020 13:50:26 +0800 Subject: [PATCH 156/384] FIX educoder account oauth --- app/controllers/oauth/educoder_controller.rb | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index 597aac6a9..f27b8b6d3 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -17,20 +17,10 @@ class Oauth::EducoderController < Oauth::BaseController redirect_to callback_url else Rails.logger.info "######## open user not exits" - user, uid = nil - login_user = User.find_by(login: login) - - if login_user - uid = login - user = login_user - else - mail_user = User.find_by(mail: mail) - uid = mail - user = mail_user - end + user = User.find_by(login: login) || User.find_by(mail: mail) if user.is_a?(User) && !user.is_a?(AnonymousUser) - OpenUsers::Educoder.create!(user: user, uid: uid) + OpenUsers::Educoder.create!(user: user, uid: login) successful_authentication(user) redirect_to callback_url From 6985699989d9aa6cd06c8f5187cbf8af7188920f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 7 Sep 2020 14:44:26 +0800 Subject: [PATCH 157/384] Upage ci certifacate --- README.md | 4 ++-- app/views/ci/cloud_accounts/show.json.jbuilder | 2 +- app/views/ci/projects/authorize.json.jbuilder | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index aa7cd1569..f9491e8e1 100644 --- a/README.md +++ b/README.md @@ -3125,7 +3125,7 @@ http://localhost:3000/api/users/ci/cloud_account | jq |参数名|类型|说明| |-|-|-| |step |int|0: 未绑定;1: 未认证(已绑定)| -|devops_certification |boolean|true: 已认证, false: 未认证| +|ci_certification |boolean|true: 已认证, false: 未认证| |ip |string|ci服务器ip| |redirect_url |string|认证地址| @@ -3133,7 +3133,7 @@ http://localhost:3000/api/users/ci/cloud_account | jq ```json { "step": 0, - "devops_certification": false, + "ci_certification": false, "cloud_account": { "ip": "xxx.xxx.xxx.x", "redirect_url": "http://localhost:3000/login", diff --git a/app/views/ci/cloud_accounts/show.json.jbuilder b/app/views/ci/cloud_accounts/show.json.jbuilder index 28c68570b..847b750d5 100644 --- a/app/views/ci/cloud_accounts/show.json.jbuilder +++ b/app/views/ci/cloud_accounts/show.json.jbuilder @@ -1,5 +1,5 @@ json.step current_user.devops_step -json.devops_certification current_user.ci_certification? +json.ci_certification current_user.ci_certification? json.cloud_account do if @cloud_account && !current_user.devops_uninit? json.ip @cloud_account.drone_ip diff --git a/app/views/ci/projects/authorize.json.jbuilder b/app/views/ci/projects/authorize.json.jbuilder index 13b77f289..d57e07fea 100644 --- a/app/views/ci/projects/authorize.json.jbuilder +++ b/app/views/ci/projects/authorize.json.jbuilder @@ -1,4 +1,5 @@ json.step @user.devops_step +json.ci_certification @user.ci_certification? json.cloud_account do if @cloud_account && !@user.devops_uninit? json.id @cloud_account.id From 4a20caed0e890dc154096d32bf210b78a18731bb Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 7 Sep 2020 15:11:43 +0800 Subject: [PATCH 158/384] FIX gitea webhook bug --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 68556b6e0..bd1662c7a 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -164,7 +164,7 @@ class Ci::CloudAccountsController < Ci::BaseController Rails.logger.info "----------bind hook -------- #{hook_params}" result = Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.repo_name, hook_params) Rails.logger.info "----------gitea bind hook status -------- #{result.status}" - regurn nil unless result.status == 201 + regurn nil if result[:status].present? Rails.logger.info "----------bind hook success--------" body = JSON.parse(result.body) @project.update_column(:gitea_webhook_id, body['id']) From 2b470eed50c30df58db6c7821628c8848e6e5db2 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 7 Sep 2020 16:05:03 +0800 Subject: [PATCH 159/384] Delete some log info --- app/controllers/ci/cloud_accounts_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index bd1662c7a..7bb2a8509 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -163,7 +163,6 @@ class Ci::CloudAccountsController < Ci::BaseController } Rails.logger.info "----------bind hook -------- #{hook_params}" result = Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.repo_name, hook_params) - Rails.logger.info "----------gitea bind hook status -------- #{result.status}" regurn nil if result[:status].present? Rails.logger.info "----------bind hook success--------" body = JSON.parse(result.body) From e877c2cde6d60bc0df6d0bf9ffd19b9359032f5d Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 7 Sep 2020 16:25:06 +0800 Subject: [PATCH 160/384] FIX code review --- app/controllers/ci/cloud_accounts_controller.rb | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 7bb2a8509..9c8031190 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -31,11 +31,8 @@ class Ci::CloudAccountsController < Ci::BaseController ci_user = Ci::User.find_by(user_login: current_user.login) repo = Ci::Repo.where(repo_namespace: current_user.login, repo_name: params[:repo]).first begin - Rails.logger.info "============activate ======== #{ci_user.user_login} -- #{repo.repo_name}" repo.activate!(ci_user.user_id) - Rails.logger.info "==========activate start create hook ========" result = bind_hook!(current_user, @cloud_account, repo) - Rails.logger.info "=========activate create hook result #{result}" @project.update_columns(open_devops: true, gitea_webhook_id: result['id']) if result @cloud_account.update_column(:ci_user_id, ci_user.user_id) @@ -129,12 +126,12 @@ class Ci::CloudAccountsController < Ci::BaseController def unbind_account!(user) cloud_account = user.ci_cloud_account - ci_user = cloud_account.ci_user + ci_user = cloud_account.ci_user || Ci::User.find_by(user_login: user.login) if user.devops_step == User::DEVOPS_UNINIT || cloud_account.blank? return render_error('你未绑定CI服务器') elsif user.devops_step == User::DEVOPS_UNVERIFIED || user.ci_certification? - ci_user.destroy! unless ci_user.blank? + ci_user.destroy! Ci::Repo.where(repo_namespace: user.login).delete_all cloud_account.destroy! end @@ -161,12 +158,8 @@ class Ci::CloudAccountsController < Ci::BaseController }, type: "gitea" } - Rails.logger.info "----------bind hook -------- #{hook_params}" result = Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.repo_name, hook_params) - regurn nil if result[:status].present? - Rails.logger.info "----------bind hook success--------" - body = JSON.parse(result.body) - @project.update_column(:gitea_webhook_id, body['id']) - body + + result[:status].present? ? nil : result end end From 3290609bbc167a4e055e8c8d1904826059d19ac6 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 8 Sep 2020 15:29:19 +0800 Subject: [PATCH 161/384] FIX request devops languages api authoure --- app/controllers/projects_controller.rb | 2 +- app/helpers/projects_helper.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 8b169cc73..b1a73dda7 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -101,7 +101,7 @@ class ProjectsController < ApplicationController end def simple - json_response(@project) + json_response(@project, current_user) end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 6d36c2b3c..3f0fa09b2 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -28,7 +28,7 @@ module ProjectsHelper (User.find_by_login identifier) || (User.find_by_mail identifier) end - def json_response(project) + def json_response(project, user) repo = project.repository tmp_json = {} unless project.common? @@ -45,7 +45,7 @@ module ProjectsHelper name: project.name, id: project.id, repo_id: repo.id, - open_devops: project.open_devops?, + open_devops: (user.blank? || user.is_a?(AnonymousUser)) ? false : project.open_devops?, type: project.numerical_for_project_type, author: { login: project.owner.login, From 5dfc6504a0c05b4cb388e23631c9e62dacdae497 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 8 Sep 2020 15:29:38 +0800 Subject: [PATCH 162/384] ADD sync ci user repos api --- app/libs/ci/drone/api.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/libs/ci/drone/api.rb b/app/libs/ci/drone/api.rb index 02743864c..6891efa93 100644 --- a/app/libs/ci/drone/api.rb +++ b/app/libs/ci/drone/api.rb @@ -70,4 +70,12 @@ class Ci::Drone::API < Ci::Drone::Request def logs get(endpoint, "/api/repos/#{owner}/#{repo}/builds/#{options[:build]}/logs/#{options[:stage]}/#{options[:step]}", drone_token: drone_token) end + + # Synchronize the currently authenticated user’s repository list. + # POST /api/user/repos + # eq: + # Ci::Drone::API.new(drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: number).sync + def sync_repos + post(endpoint, "/api/users/repos", drone_token: drone_token) + end end From 0edac45e828482e2e289cdc807e341bb4b732056 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 9 Sep 2020 09:17:11 +0800 Subject: [PATCH 163/384] =?UTF-8?q?FIX=20=E8=A7=A3=E5=86=B3=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=A7=A6=E5=8F=91=E6=9E=84=E5=BB=BA=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/ci/repo.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index 3c1b910f2..dbe663ea0 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -21,6 +21,7 @@ class Ci::Repo < Ci::RemoteBase repo_signer: generate_code, repo_secret: generate_code, repo_user_id: ci_user_id, + repo_timeout: 60, repo_config: '.trustie-pipeline.yml', repo_updated: Time.now.to_i) end From be6ff6a043f68c730f4ccc45ffa8b3d3d2657f5b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 9 Sep 2020 09:57:44 +0800 Subject: [PATCH 164/384] FIX update query ci user and ci repo method --- app/controllers/ci/cloud_accounts_controller.rb | 17 +++++++---------- app/models/ci/repo.rb | 9 +++------ 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 9c8031190..67480b4d9 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -24,18 +24,16 @@ class Ci::CloudAccountsController < Ci::BaseController end def activate - return render_error('请先在指定地址做用户认证') unless current_user.ci_certification? + return render_error('请先在指定地址做用户认证') unless @user.ci_certification? return render_error('该项目已经激活') if @repo && @repo.repo_active? - - ci_user = Ci::User.find_by(user_login: current_user.login) - repo = Ci::Repo.where(repo_namespace: current_user.login, repo_name: params[:repo]).first begin - repo.activate!(ci_user.user_id) - result = bind_hook!(current_user, @cloud_account, repo) - @project.update_columns(open_devops: true, gitea_webhook_id: result['id']) if result - - @cloud_account.update_column(:ci_user_id, ci_user.user_id) + ActiveRecord::Base.transaction do + repo.activate!(@user.user_id) + result = bind_hook!(@user, @cloud_account, @repo) + @project.update_columns(open_devops: true, gitea_webhook_id: result['id']) + @cloud_account.update_column(:ci_user_id, @user.user_id) + end render_ok rescue Exception => ex render_error(ex.message) @@ -46,7 +44,6 @@ class Ci::CloudAccountsController < Ci::BaseController @cloud_account = current_user.ci_cloud_account end - def bind Ci::CreateCloudAccountForm.new(devops_params).validate! diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index dbe663ea0..76237dd2e 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -8,16 +8,13 @@ class Ci::Repo < Ci::RemoteBase logger.info "########namespace_path: #{namespace_path} ########identifier: #{identifier} " user = Ci::User.find_by_user_login namespace_path - return nil if user.blank? + repo = Ci::Repo.where(repo_namespace: namespace_path, repo_name: identifier).first - repo = user.repos.find_by(repo_name: identifier) - - return nil if repo.blank? - [user, repo] + (user.blank? || repo.blank?) ? nil : [user, repo] end def activate!(ci_user_id) - update_columns(repo_active: 1, + update(repo_active: 1, repo_signer: generate_code, repo_secret: generate_code, repo_user_id: ci_user_id, From 91966192e1de191673356beb3a4ef0e3e9f5075a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 9 Sep 2020 10:33:49 +0800 Subject: [PATCH 165/384] =?UTF-8?q?FIX=20=E5=A4=84=E7=90=86gitea=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=BA=93=E4=B8=AD=E8=8E=B7=E5=8F=96=E5=AD=90=E7=9B=AE?= =?UTF-8?q?=E5=BD=95404=E6=97=B6=E7=9A=84=E5=AE=B9=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/repositories_controller.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 9d1c98e37..3776cade4 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -40,8 +40,10 @@ class RepositoriesController < ApplicationController file_path_uri = URI.parse(URI.encode(params[:filepath].to_s.strip)) interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: @ref) if interactor.success? - @sub_entries = interactor.result - @sub_entries = [] << @sub_entries unless @sub_entries.is_a? Array + result = interactor.result + return @sub_entries = [] if result[:status] == -1 + + @sub_entries = [] << result unless result.is_a? Array @sub_entries = @sub_entries.sort_by{ |hash| hash['type'] } else render_error(interactor.error) From 217dfc03b2cdecc9e9b8824c528c17408c2b0e51 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 10 Sep 2020 10:53:12 +0800 Subject: [PATCH 166/384] ADD ci namespace modle associations --- app/models/ci/cloud_account.rb | 2 +- app/models/ci/log.rb | 3 ++- app/models/ci/perm.rb | 4 ++-- app/models/ci/repo.rb | 1 + app/models/ci/step.rb | 1 + 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/models/ci/cloud_account.rb b/app/models/ci/cloud_account.rb index 25fe81609..b10ca7118 100644 --- a/app/models/ci/cloud_account.rb +++ b/app/models/ci/cloud_account.rb @@ -1,6 +1,6 @@ class Ci::CloudAccount < Ci::LocalBase belongs_to :user - belongs_to :ci_user, class_name: 'Ci::User', foreign_key: :ci_user_id + belongs_to :ci_user, class_name: 'Ci::User', foreign_key: :ci_user_id, optional: true def drone_host [drone_ip, ":80"].join diff --git a/app/models/ci/log.rb b/app/models/ci/log.rb index e509425dd..b0c8e337e 100644 --- a/app/models/ci/log.rb +++ b/app/models/ci/log.rb @@ -1,4 +1,5 @@ class Ci::Log < Ci::RemoteBase - self.primary_key = 'log_id' + self.primary_key = nil + belongs_to :step, class_name: 'Ci::Step', foreign_key: :log_id end diff --git a/app/models/ci/perm.rb b/app/models/ci/perm.rb index 8a238c2c6..65ee7ab4b 100644 --- a/app/models/ci/perm.rb +++ b/app/models/ci/perm.rb @@ -1,6 +1,6 @@ class Ci::Perm < Ci::RemoteBase self.primary_key = nil - belongs_to :ci_user, class_name: 'Ci::User', foreign_key: :perm_user_id - + belongs_to :user, class_name: 'Ci::User', foreign_key: :perm_user_id + belongs_to :repo, class_name: 'Ci::Repo', foreign_key: :perm_repo_uid end diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index 76237dd2e..b7d6473f9 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -2,6 +2,7 @@ class Ci::Repo < Ci::RemoteBase self.primary_key = 'repo_id' belongs_to :user, foreign_key: :repo_user_id + has_one :perm, foreign_key: :perm_repo_uid, dependent: :destroy has_many :builds, foreign_key: "build_repo_id", dependent: :destroy def self.find_with_namespace(namespace_path, identifier) diff --git a/app/models/ci/step.rb b/app/models/ci/step.rb index 23d540314..eed7d6a70 100644 --- a/app/models/ci/step.rb +++ b/app/models/ci/step.rb @@ -2,4 +2,5 @@ class Ci::Step < Ci::RemoteBase self.primary_key = 'step_id' belongs_to :stage, foreign_key: :step_stage_id + has_one :log, class_name: 'Ci::Log', foreign_key: :log_id end From 9b1f95bf08a58ee73c17d52237ce47ca418771d4 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 10 Sep 2020 11:52:54 +0800 Subject: [PATCH 167/384] ADD builds authorization --- app/controllers/ci/builds_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index f90519143..ac567bae1 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -2,6 +2,8 @@ class Ci::BuildsController < Ci::BaseController include RepositoriesHelper include Devopsable + before_action :load_project + before_action :ci_authorize! before_action :load_repo before_action :find_cloud_account, except: [:index, :show] From 6419453fcae7a18021450f94ea6787b739122d64 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 10 Sep 2020 16:01:24 +0800 Subject: [PATCH 168/384] FIX ci code review --- app/controllers/ci/base_controller.rb | 36 ++++++ app/controllers/ci/builds_controller.rb | 16 +-- .../ci/cloud_accounts_controller.rb | 109 ++---------------- app/controllers/ci/projects_controller.rb | 6 +- .../concerns/ci/cloud_account_manageable.rb | 93 +++++++++++++++ app/controllers/concerns/devopsable.rb | 32 ----- app/controllers/users_controller.rb | 5 +- 7 files changed, 144 insertions(+), 153 deletions(-) create mode 100644 app/controllers/concerns/ci/cloud_account_manageable.rb delete mode 100644 app/controllers/concerns/devopsable.rb diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index 8212ff9a1..14ca13000 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -7,4 +7,40 @@ class Ci::BaseController < ApplicationController @user, @repo = Ci::Repo.find_with_namespace(namespace, id) end + + private + def authorize_access_project! + unless @project.manager?(current_user) + return render_forbidden + end + end + + def authorize_manage_builds! + unless @project.owner?(current_user) + return render_forbidden + end + end + + def authenticate_admin! + return render_forbidden unless current_user.admin? + end + + def authorize_owner_project! + unless @project.owner?(current_user) + return render_forbidden + end + end + + def find_cloud_account + @cloud_account ||= current_user.ci_cloud_account + end + + def load_ci_user + begin + @ci_user = Ci::User.find_by(user_login: params[:owner]) + rescue + render_not_found + end + end + end diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index ac567bae1..bce2a31c9 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -1,9 +1,8 @@ class Ci::BuildsController < Ci::BaseController include RepositoriesHelper - include Devopsable before_action :load_project - before_action :ci_authorize! + before_action :authorize_owner_project! before_action :load_repo before_action :find_cloud_account, except: [:index, :show] @@ -36,17 +35,4 @@ class Ci::BuildsController < Ci::BaseController render json: result end - - private - def find_cloud_account - @cloud_account = current_user.ci_cloud_account - end - - def load_ci_user - begin - @ci_user = Ci::User.find_by(user_login: params[:owner]) - rescue - render_not_found - end - end end diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 67480b4d9..b6ed50c4e 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -1,16 +1,15 @@ class Ci::CloudAccountsController < Ci::BaseController - include Devopsable + include Ci::CloudAccountManageable before_action :load_project, only: %i[create activate] - before_action :ci_authorize!, only: %i[create activate] - before_action :find_cloud_account, only: %i[activate] + before_action :authorize_owner_project!, only: %i[create activate] before_action :load_repo, only: %i[activate] + before_action :find_cloud_account, only: %i[show] + before_action :validate_params!, only: %i[create bind] def create ActiveRecord::Base.transaction do - Ci::CreateCloudAccountForm.new(devops_params).validate! - - @cloud_account = bind_account(current_user) + @cloud_account = bind_account! if @cloud_account.blank? render_error('激活失败, 请检查你的云服务器信息是否正确.') raise ActiveRecord::Rollback @@ -27,6 +26,8 @@ class Ci::CloudAccountsController < Ci::BaseController return render_error('请先在指定地址做用户认证') unless @user.ci_certification? return render_error('该项目已经激活') if @repo && @repo.repo_active? + + @cloud_account = Ci::CloudAccount.find params[:id] begin ActiveRecord::Base.transaction do repo.activate!(@user.user_id) @@ -41,14 +42,11 @@ class Ci::CloudAccountsController < Ci::BaseController end def show - @cloud_account = current_user.ci_cloud_account end def bind - Ci::CreateCloudAccountForm.new(devops_params).validate! - ActiveRecord::Base.transaction do - @cloud_account = bind_account(current_user) + @cloud_account = bind_account! if @cloud_account.blank? render_error('激活失败, 请检查你的云服务器信息是否正确.') raise ActiveRecord::Rollback @@ -62,7 +60,7 @@ class Ci::CloudAccountsController < Ci::BaseController def unbind ActiveRecord::Base.transaction do - unbind_account!(current_user) + unbind_account! render_ok end rescue Exception => ex @@ -71,92 +69,7 @@ class Ci::CloudAccountsController < Ci::BaseController private - def devops_params - params.permit(:account, :secret, :ip_num) - end - - def find_cloud_account - @cloud_account = Ci::CloudAccount.find params[:id] - end - - def bind_account(user) - # 1. 保存华为云服务器帐号 - create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: Ci::CloudAccount.encrypted_secret(devops_params[:secret])) - - return render_error('你已绑定了云帐号.') unless user.ci_cloud_account.blank? - - cloud_account = Ci::CloudAccount.new(create_params) - cloud_account.user = user - cloud_account.save! - - # 2. 生成oauth2应用程序的client_id和client_secrete - gitea_oauth = Gitea::Oauth2::CreateService.call(user.gitea_token, {name: "pipeline", redirect_uris: ["#{cloud_account.drone_url}/login"]}) - logger.info "######### gitea_oauth: #{gitea_oauth}" - oauth = Oauth.new(client_id: gitea_oauth['client_id'], - client_secret: gitea_oauth['client_secret'], - redirect_uri: gitea_oauth['redirect_uris'], - gitea_oauth_id: gitea_oauth['id'], - user_id: current_user.id) - oauth.save - - rpc_secret = SecureRandom.hex 16 - logger.info "######### rpc_secret: #{rpc_secret}" - - # 3. 创建drone server - drone_server_cmd = Ci::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd - logger.info "######### drone_server_cmd: #{drone_server_cmd}" - - # 4. 创建drone client - drone_client_cmd = Ci::Drone::Client.new(oauth.client_id, cloud_account.drone_ip, rpc_secret).generate_cmd - logger.info "######### drone_client_cmd: #{drone_client_cmd}" - - # 5. 登录远程服务器,启动drone服务 - result = Ci::Drone::Start.new(cloud_account.account, cloud_account.visible_secret, cloud_account.drone_ip, drone_server_cmd, drone_client_cmd).run - logger.info "######### result: #{result}" - - - redirect_url = "#{cloud_account.drone_url}/login" - logger.info "######### redirect_url: #{redirect_url}" - - result && !result.blank? ? cloud_account : nil - end - - def unbind_account!(user) - cloud_account = user.ci_cloud_account - ci_user = cloud_account.ci_user || Ci::User.find_by(user_login: user.login) - - if user.devops_step == User::DEVOPS_UNINIT || cloud_account.blank? - return render_error('你未绑定CI服务器') - elsif user.devops_step == User::DEVOPS_UNVERIFIED || user.ci_certification? - ci_user.destroy! - Ci::Repo.where(repo_namespace: user.login).delete_all - cloud_account.destroy! - end - - user.projects.update_all(open_devops: false) - user.set_drone_step!(User::DEVOPS_UNINIT) - - # TODO - # 删除用户项目下的与ci相关的所有webhook - user.projects.select(:id, :identifier, :gitea_webhook_id).each do |project| - if project.gitea_webhook_id - result = Gitea::Hooks::DestroyService.call(user.gitea_token, user.login, project.identifier, project.gitea_webhook_id) - project.update_column(:gitea_webhook_id, nil) if result.status == 204 - end - end - end - - def bind_hook!(user, cloud_account, repo) - hook_params = { - active: true, - config: { - content_type: "json", - url: cloud_account.drone_url + "/hook?secret=#{repo.repo_signer}" - }, - type: "gitea" - } - result = Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.repo_name, hook_params) - - result[:status].present? ? nil : result + def validate_params! + Ci::CreateCloudAccountForm.new(devops_params).validate! end end diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index 7e43108c1..a5535fcbe 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -1,15 +1,13 @@ class Ci::ProjectsController < Ci::BaseController - include Devopsable include RepositoriesHelper before_action :load_project before_action :load_repo, only: [:update_trustie_pipeline] + before_action :authorize_owner_project!, only: [:authorize] + before_action :find_cloud_account, only: [:authorize] def authorize @user = current_user - limit_project_owner_can_devops!(@user, @project) - - @cloud_account = @user.ci_cloud_account end # get .trustie-pipeline.yml file diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb new file mode 100644 index 000000000..1a31c4dc5 --- /dev/null +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -0,0 +1,93 @@ +module Ci::CloudAccountManageable + extend ActiveSupport::Concern + + included do + end + + def bind_account! + # 1. 保存华为云服务器帐号 + create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: Ci::CloudAccount.encrypted_secret(devops_params[:secret])) + + return render_error('你已绑定了云帐号.') unless current_user.ci_cloud_account.blank? + + cloud_account = Ci::CloudAccount.new(create_params) + cloud_account.user = current_user + cloud_account.save! + + # 2. 生成oauth2应用程序的client_id和client_secrete + gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline", redirect_uris: ["#{cloud_account.drone_url}/login"]}) + logger.info "######### gitea_oauth: #{gitea_oauth}" + oauth = Oauth.new(client_id: gitea_oauth['client_id'], + client_secret: gitea_oauth['client_secret'], + redirect_uri: gitea_oauth['redirect_uris'], + gitea_oauth_id: gitea_oauth['id'], + user_id: current_user.id) + oauth.save + + rpc_secret = SecureRandom.hex 16 + logger.info "######### rpc_secret: #{rpc_secret}" + + # 3. 创建drone server + drone_server_cmd = Ci::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd + logger.info "######### drone_server_cmd: #{drone_server_cmd}" + + # 4. 创建drone client + drone_client_cmd = Ci::Drone::Client.new(oauth.client_id, cloud_account.drone_ip, rpc_secret).generate_cmd + logger.info "######### drone_client_cmd: #{drone_client_cmd}" + + # 5. 登录远程服务器,启动drone服务 + result = Ci::Drone::Start.new(cloud_account.account, cloud_account.visible_secret, cloud_account.drone_ip, drone_server_cmd, drone_client_cmd).run + logger.info "######### result: #{result}" + + + redirect_url = "#{cloud_account.drone_url}/login" + logger.info "######### redirect_url: #{redirect_url}" + + result && !result.blank? ? cloud_account : nil + end + + def unbind_account! + cloud_account = current_user.ci_cloud_account + ci_user = cloud_account.ci_user || Ci::User.find_by(user_login: current_user.login) + + if current_user.devops_step == User::DEVOPS_UNINIT || cloud_account.blank? + return render_error('你未绑定CI服务器') + elsif current_user.devops_step == User::DEVOPS_UNVERIFIED || current_user.ci_certification? + ci_user.destroy! + Ci::Repo.where(repo_namespace: current_user.login).delete_all + cloud_account.destroy! + end + + current_user.projects.update_all(open_devops: false) + current_user.set_drone_step!(User::DEVOPS_UNINIT) + + # TODO + # 删除用户项目下的与ci相关的所有webhook + current_user.projects.select(:id, :identifier, :gitea_webhook_id).each do |project| + if project.gitea_webhook_id + result = Gitea::Hooks::DestroyService.call(current_user.gitea_token, current_user.login, project.identifier, project.gitea_webhook_id) + project.update_column(:gitea_webhook_id, nil) if result.status == 204 + end + end + end + + def bind_hook!(user, cloud_account, repo) + hook_params = { + active: true, + config: { + content_type: "json", + url: cloud_account.drone_url + "/hook?secret=#{repo.repo_signer}" + }, + type: "gitea" + } + result = Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.repo_name, hook_params) + + result[:status].present? ? nil : result + end + + private + def devops_params + params.permit(:account, :secret, :ip_num) + end + +end diff --git a/app/controllers/concerns/devopsable.rb b/app/controllers/concerns/devopsable.rb deleted file mode 100644 index 651c42b5c..000000000 --- a/app/controllers/concerns/devopsable.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Devopsable - extend ActiveSupport::Concern - - included do - end - - # ci 权限验证 - def ci_authorize! - render_forbidden unless @project.owner?(current_user) - end - - def auto_load_project - @project = Project.find_by(id: params[:project_id]) || Project.find_by(identifier: params[:project_id]) - render_not_found('未找到相关的项目') if @project.blank? - end - - # TODO 暂时限制项目拥有者才有权限操作 - def limit_project_owner_can_devops!(user, project) - return if project.owner? user - render_forbidden - end - - def find_cloud_account - @cloud_account = Ci::CloudAccount.find params[:id] - end - - def set_drone_token!(user, cloud_account, drone_token) - return if user.devops_has_token? - cloud_account.update_column(:drone_token, drone_token) - user.set_drone_step!(User::DEVOPS_HAS_TOKEN) - end -end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 167e7be6c..390fc86b7 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,10 +1,7 @@ class UsersController < ApplicationController - include Devopsable - before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users] - before_action :require_login, only: %i[me list devops_authenticate devops] - before_action :auto_load_project, only: %i[devops devops_authenticate] + before_action :require_login, only: %i[me list] skip_before_action :check_sign, only: [:attachment_show] def list From ad43c6975b4a5e6320b31e7223231a6efdc5703f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 10 Sep 2020 18:00:37 +0800 Subject: [PATCH 169/384] =?UTF-8?q?ADD=20=E8=A7=A3=E5=86=B3ci=E7=AB=AF?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8E=88=E6=9D=83=E5=90=8E=EF=BC=8C=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=90=8C=E6=AD=A5=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ci/cloud_accounts_controller.rb | 12 ++++++-- app/models/ci/perm.rb | 14 +++++++++ app/models/ci/repo.rb | 30 ++++++++++++++++++- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index b6ed50c4e..8efe6c959 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -26,11 +26,17 @@ class Ci::CloudAccountsController < Ci::BaseController return render_error('请先在指定地址做用户认证') unless @user.ci_certification? return render_error('该项目已经激活') if @repo && @repo.repo_active? - - @cloud_account = Ci::CloudAccount.find params[:id] begin + @cloud_account = Ci::CloudAccount.find params[:id] ActiveRecord::Base.transaction do - repo.activate!(@user.user_id) + if @repo + return render_error('该项目已经激活') if @repo.repo_active? + @repo.activate!(@user.user_id) + else + @repo = Ci::Repo.auto_create!(@uesr, @project) + @user.update_column(:user_syncing, false) + end + result = bind_hook!(@user, @cloud_account, @repo) @project.update_columns(open_devops: true, gitea_webhook_id: result['id']) @cloud_account.update_column(:ci_user_id, @user.user_id) diff --git a/app/models/ci/perm.rb b/app/models/ci/perm.rb index 65ee7ab4b..e6bc2ebbb 100644 --- a/app/models/ci/perm.rb +++ b/app/models/ci/perm.rb @@ -3,4 +3,18 @@ class Ci::Perm < Ci::RemoteBase belongs_to :user, class_name: 'Ci::User', foreign_key: :perm_user_id belongs_to :repo, class_name: 'Ci::Repo', foreign_key: :perm_repo_uid + + def self.auto_create!(user, repo) + perm = new( + perm_user_id: user.user_id, + perm_repo_uid: repo.repo_id, + perm_read: true, + perm_write: true, + perm_admin: true, + perm_synced: 0, + perm_created: Time.now.to_i, + perm_updated: Time.now.to_i + ) + perm.save! + end end diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index b7d6473f9..85416c1bc 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -11,7 +11,7 @@ class Ci::Repo < Ci::RemoteBase user = Ci::User.find_by_user_login namespace_path repo = Ci::Repo.where(repo_namespace: namespace_path, repo_name: identifier).first - (user.blank? || repo.blank?) ? nil : [user, repo] + [user, repo] end def activate!(ci_user_id) @@ -24,4 +24,32 @@ class Ci::Repo < Ci::RemoteBase repo_updated: Time.now.to_i) end + def self.auto_create!(user, project) + repo = new( + repo_user_id: user.user_id, + repo_namespace: project.owner.login, + repo_name: project.identifier, + repo_slug: "#{project.owner.login}/#{project.identifier}", + repo_clone_url: project.repository.url, + repo_active: 1, + repo_private: true, + repo_visibility: 'private', + repo_branch: 'master', + repo_counter: 0, + repo_trusted: false, + repo_protected: false, + repo_synced: 0, + repo_version: 1, + repo_signer: generate_code, + repo_secret: generate_code, + repo_timeout: 60, + repo_config: '.trustie-pipeline.yml', + repo_created: Time.now.to_i, + repo_updated: Time.now.to_i + ) + if repo.save! + Ci::Perm.auto_create!(user, repo) + repo + end + end end From f3d6244fee2c66eef3ba451a4f26d307ded451cd Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 11 Sep 2020 09:55:21 +0800 Subject: [PATCH 170/384] FIX ci certification bug --- app/controllers/ci/cloud_accounts_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 8efe6c959..25cd89a4a 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -23,7 +23,7 @@ class Ci::CloudAccountsController < Ci::BaseController end def activate - return render_error('请先在指定地址做用户认证') unless @user.ci_certification? + return render_error('请先在指定地址做用户认证') unless current_user.ci_certification? return render_error('该项目已经激活') if @repo && @repo.repo_active? begin @@ -31,15 +31,15 @@ class Ci::CloudAccountsController < Ci::BaseController ActiveRecord::Base.transaction do if @repo return render_error('该项目已经激活') if @repo.repo_active? - @repo.activate!(@user.user_id) + @repo.activate!(current_user.user_id) else - @repo = Ci::Repo.auto_create!(@uesr, @project) + @repo = Ci::Repo.auto_create!(current_user, @project) @user.update_column(:user_syncing, false) end - result = bind_hook!(@user, @cloud_account, @repo) + result = bind_hook!(current_user, @cloud_account, @repo) @project.update_columns(open_devops: true, gitea_webhook_id: result['id']) - @cloud_account.update_column(:ci_user_id, @user.user_id) + @cloud_account.update_column(:ci_user_id, current_user.user_id) end render_ok rescue Exception => ex From 956852328640b41a2bd153c063b4553ec8ff49bc Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 11 Sep 2020 10:00:29 +0800 Subject: [PATCH 171/384] FIX user bug --- app/controllers/ci/cloud_accounts_controller.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 25cd89a4a..8db203eb3 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -31,15 +31,15 @@ class Ci::CloudAccountsController < Ci::BaseController ActiveRecord::Base.transaction do if @repo return render_error('该项目已经激活') if @repo.repo_active? - @repo.activate!(current_user.user_id) + @repo.activate!(@user.user_id) else - @repo = Ci::Repo.auto_create!(current_user, @project) + @repo = Ci::Repo.auto_create!(@user, @project) @user.update_column(:user_syncing, false) end result = bind_hook!(current_user, @cloud_account, @repo) @project.update_columns(open_devops: true, gitea_webhook_id: result['id']) - @cloud_account.update_column(:ci_user_id, current_user.user_id) + @cloud_account.update_column(:ci_user_id, @user.user_id) end render_ok rescue Exception => ex From 2e0d76575cd131611a5ab5825bd5d562d9d1ffc5 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 11 Sep 2020 10:13:54 +0800 Subject: [PATCH 172/384] FIX repo instance method's bug --- app/models/ci/repo.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index 85416c1bc..f009e7380 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -40,13 +40,14 @@ class Ci::Repo < Ci::RemoteBase repo_protected: false, repo_synced: 0, repo_version: 1, - repo_signer: generate_code, - repo_secret: generate_code, repo_timeout: 60, repo_config: '.trustie-pipeline.yml', repo_created: Time.now.to_i, repo_updated: Time.now.to_i ) + + repo.repo_signer = repo.generate_code + repo.repo_secret = repo.generate_code if repo.save! Ci::Perm.auto_create!(user, repo) repo From f9ec41f9bcbb65580d06a5b475760cbae7878f14 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 11 Sep 2020 10:41:27 +0800 Subject: [PATCH 173/384] FIX ci repo asstassion --- app/models/ci/repo.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index f009e7380..5e45f42b0 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -50,6 +50,7 @@ class Ci::Repo < Ci::RemoteBase repo.repo_secret = repo.generate_code if repo.save! Ci::Perm.auto_create!(user, repo) + repo.update_column(:repo_uid, repo.id) repo end end From 868ffbabacd81c4087ed493a93d7415be70e9155 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 11 Sep 2020 15:05:03 +0800 Subject: [PATCH 174/384] FIX ci query log with 404 bug --- app/controllers/ci/builds_controller.rb | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index bce2a31c9..90b78d3ea 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -31,7 +31,22 @@ class Ci::BuildsController < Ci::BaseController end def logs - result = Ci::Drone::API.new(@user.user_hash, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, build: params[:build], stage: params[:stage], step: params[:step]).logs + # TODO **待优化** + # 因直接操作ci库,如下查询待优化,可直接根据log id查询即可 + build = @repo.builds.find_by(build_number: params[:build]) + return render_not_found("Couldn't found build with 'number'= #{params[:build]}") if build.blank? + + stage = build.stages.includes(steps: [:log]).find_by(stage_number: params[:stage]) + return render_not_found("Couldn't found build with 'number'= #{params[:stage]}") if stage.blank? + + step = stage.steps.find_by(step_number: params[:step]) + return render_not_found("Couldn't found build with 'number'= #{params[:step]}") if step.blank? + + log = step.log + + result = log.blank? ? nil : JSON.parse(log.log_data) + + # result = Ci::Drone::API.new(@user.user_hash, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, build: params[:build], stage: params[:stage], step: params[:step]).logs render json: result end From fae4907fd18a46dc311ec8affdc9ac241a652afc Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 11 Sep 2020 16:34:19 +0800 Subject: [PATCH 175/384] FIX set ci repo default value --- app/models/ci/repo.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index 5e45f42b0..df8fb3569 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -30,6 +30,9 @@ class Ci::Repo < Ci::RemoteBase repo_namespace: project.owner.login, repo_name: project.identifier, repo_slug: "#{project.owner.login}/#{project.identifier}", + repo_scm: "git", + repo_ssh_url: "", + repo_html: "", repo_clone_url: project.repository.url, repo_active: 1, repo_private: true, From 5b8b74b8089754b5fbed0ddff2d9e33bc5f8297e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 11 Sep 2020 16:35:08 +0800 Subject: [PATCH 176/384] ADD ci authorue column for get user info api --- app/views/users/get_user_info.json.jbuilder | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index 1c78d4fef..d9aa44025 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -13,3 +13,4 @@ json.user_phone_binded @user.phone.present? json.profile_completed @user.profile_completed? json.professional_certification @user.professional_certification json.devops_step @user.devops_step +json.ci_certification @user.ci_certification? From 1e823aef97534e91edc088bc94f4f0f9ebc6f1b4 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 11 Sep 2020 17:08:40 +0800 Subject: [PATCH 177/384] FIX ci log data with null bug --- app/controllers/ci/builds_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index 90b78d3ea..7df443665 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -44,7 +44,7 @@ class Ci::BuildsController < Ci::BaseController log = step.log - result = log.blank? ? nil : JSON.parse(log.log_data) + result = log.blank? ? nil : (log.log_data[0..5].include?('null') ? nil : JSON.parse(log.log_data)) # result = Ci::Drone::API.new(@user.user_hash, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, build: params[:build], stage: params[:stage], step: params[:step]).logs From bb98dad64c9b6f53e1c6e9e862c26e48d972be9a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 11 Sep 2020 22:40:32 +0800 Subject: [PATCH 178/384] FIX educoder auto register --- app/controllers/oauth/educoder_controller.rb | 2 +- app/views/oauth/register.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index f27b8b6d3..8ed537d6c 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -25,7 +25,7 @@ class Oauth::EducoderController < Oauth::BaseController redirect_to callback_url else - redirect_to oauth_register_path(login: login, callback_url: callback_url) + redirect_to oauth_register_path(login: login, mail: mail, callback_url: callback_url) end end rescue WechatOauth::Error => ex diff --git a/app/views/oauth/register.html.erb b/app/views/oauth/register.html.erb index 59a3d4857..96778fa06 100644 --- a/app/views/oauth/register.html.erb +++ b/app/views/oauth/register.html.erb @@ -11,7 +11,7 @@
邮箱: - <%= text_field_tag :mail, '', placeholder: '请输入绑定邮箱', maxlength: 40, id: 'email' %> + <%= text_field_tag :mail, params[:mail], placeholder: '请输入绑定邮箱', maxlength: 40, id: 'email' %>

From b785105730b63aba7d8e2cc8f788954b15f483d9 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 11 Sep 2020 23:04:16 +0800 Subject: [PATCH 179/384] FIX get sub entries bug --- app/controllers/repositories_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 3776cade4..7a6b7991a 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -41,7 +41,7 @@ class RepositoriesController < ApplicationController interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: @ref) if interactor.success? result = interactor.result - return @sub_entries = [] if result[:status] == -1 + return @sub_entries = [] if result.is_a?(Hash) && result[:status] == -1 @sub_entries = [] << result unless result.is_a? Array @sub_entries = @sub_entries.sort_by{ |hash| hash['type'] } From e7ff26faa52006b0ccd148d1608110f72c616d04 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 11 Sep 2020 23:20:18 +0800 Subject: [PATCH 180/384] FIX code bug --- app/controllers/repositories_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 7a6b7991a..566881ffd 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -43,7 +43,7 @@ class RepositoriesController < ApplicationController result = interactor.result return @sub_entries = [] if result.is_a?(Hash) && result[:status] == -1 - @sub_entries = [] << result unless result.is_a? Array + @sub_entries = result.is_a?(Array) ? result : [result] @sub_entries = @sub_entries.sort_by{ |hash| hash['type'] } else render_error(interactor.error) From b74d43083e31768d0c2f1b52b70fe6128082bda8 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 18 Sep 2020 15:26:14 +0800 Subject: [PATCH 181/384] =?UTF-8?q?FIX=20=E8=A7=A3=E5=86=B3ci=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=AE=89=E5=85=A8=E6=80=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/ci/base_controller.rb | 19 +++++++++++- app/controllers/ci/builds_controller.rb | 5 +-- .../ci/cloud_accounts_controller.rb | 6 ++-- .../concerns/ci/cloud_account_manageable.rb | 2 +- app/libs/ci/database.rb | 31 +++++++++++++++++++ app/libs/ci/drone/server.rb | 13 +++----- app/models/ci/remote_base.rb | 6 ++-- app/views/ci/builds/_build.json.jbuilder | 2 +- app/views/ci/builds/index.json.jbuilder | 2 +- 9 files changed, 65 insertions(+), 21 deletions(-) create mode 100644 app/libs/ci/database.rb diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index 14ca13000..95c43d5bd 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -1,11 +1,12 @@ class Ci::BaseController < ApplicationController before_action :require_login + before_action :connect_to_ci_database def load_repo namespace = params[:owner] id = params[:repo] || params[:id] - @user, @repo = Ci::Repo.find_with_namespace(namespace, id) + @ci_user, @repo = Ci::Repo.find_with_namespace(namespace, id) end private @@ -43,4 +44,20 @@ class Ci::BaseController < ApplicationController end end + # Dynamically sets the database connection. + def connect_to_ci_database + db_config = Rails.configuration.database_configuration[Rails.env]["ci_server_db"] + return render_error('ci database config missing') if db_config.blank? + + req_params = { + host: db_config["host"], + username: db_config['username'], + password: db_config['password'], + port: db_config['port'], + database: "#{current_user.login}_#{db_config['database']}" + } + db_params = Ci::Database.get_connection_params(req_params) + Ci::Database.set_connection(db_params) + end + end diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index 7df443665..e797a746d 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -7,6 +7,7 @@ class Ci::BuildsController < Ci::BaseController before_action :find_cloud_account, except: [:index, :show] def index + @user = current_user scope = @repo.builds scope = Ci::Builds::ListQuery.call(@repo, params) @@ -20,13 +21,13 @@ class Ci::BuildsController < Ci::BaseController end def restart - result = Ci::Drone::API.new(@user.user_hash, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:build]).restart + result = Ci::Drone::API.new(@ci_user.user_hash, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:build]).restart render json: result end def stop - result = Ci::Drone::API.new(@user.user_hash, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:build]).stop + result = Ci::Drone::API.new(@ci_user.user_hash, @cloud_account.drone_url, @repo.repo_namespace, @repo.repo_name, number: params[:build]).stop render json: result end diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 8db203eb3..23438d2e9 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -31,15 +31,15 @@ class Ci::CloudAccountsController < Ci::BaseController ActiveRecord::Base.transaction do if @repo return render_error('该项目已经激活') if @repo.repo_active? - @repo.activate!(@user.user_id) + @repo.activate!(@ci_user.user_id) else - @repo = Ci::Repo.auto_create!(@user, @project) + @repo = Ci::Repo.auto_create!(@ci_user, @project) @user.update_column(:user_syncing, false) end result = bind_hook!(current_user, @cloud_account, @repo) @project.update_columns(open_devops: true, gitea_webhook_id: result['id']) - @cloud_account.update_column(:ci_user_id, @user.user_id) + @cloud_account.update_column(:ci_user_id, @ci_user.user_id) end render_ok rescue Exception => ex diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 1a31c4dc5..4bc3f6826 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -28,7 +28,7 @@ module Ci::CloudAccountManageable logger.info "######### rpc_secret: #{rpc_secret}" # 3. 创建drone server - drone_server_cmd = Ci::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd + drone_server_cmd = Ci::Drone::Server.new(current_user.login, oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd logger.info "######### drone_server_cmd: #{drone_server_cmd}" # 4. 创建drone client diff --git a/app/libs/ci/database.rb b/app/libs/ci/database.rb new file mode 100644 index 000000000..f3d606f4e --- /dev/null +++ b/app/libs/ci/database.rb @@ -0,0 +1,31 @@ +module Ci + class Database < ActiveRecord::Base + self.abstract_class = true + + # Dynamically sets the database connection. + def self.set_connection(params) + puts "[Ci::Database] set db connection params: #{params}" + establish_connection( + adapter: params[:adapter], + database: params[:database], + port: params[:port].to_i, + host: params[:host], + username: params[:username], + password: params[:password], + encoding: "utf8" + ) + end + + def self.get_connection_params(connect_to) + params = Hash.new + params[:adapter] = "mysql2" + params[:host] = connect_to[:host].to_s + params[:username] = connect_to[:username].to_s + params[:password] = connect_to[:password].to_s + params[:database] = connect_to[:database].to_s + params[:port] = connect_to[:port] || "43306" + params[:encoding] = "utf8" + return params + end + end +end diff --git a/app/libs/ci/drone/server.rb b/app/libs/ci/drone/server.rb index 68a144961..508ddd7e0 100644 --- a/app/libs/ci/drone/server.rb +++ b/app/libs/ci/drone/server.rb @@ -1,12 +1,13 @@ class Ci::Drone::Server - attr_reader :client_id, :client_secret, :drone_host, :rpc_secret + attr_reader :user_login, :client_id, :client_secret, :drone_host, :rpc_secret # client_id: user's client_id from oauth # client_secret: user's client_id from oauth # drone_host: 云服务器地址,eq: 173.53.21.31:80 # eg: - # DevOps::Drone::Server.new(current_user.oauth.client_id, current_user.oauth.client_secret, 'drone_host').generate_cmd - def initialize(client_id, client_secret, drone_host, rpc_secret) + # DevOps::Drone::Server.new(current_user.login, current_user.oauth.client_id, current_user.oauth.client_secret, 'drone_host').generate_cmd + def initialize(user_login, client_id, client_secret, drone_host, rpc_secret) + @user_login = user_login @client_id = client_id @drone_host = drone_host @rpc_secret = rpc_secret @@ -19,7 +20,7 @@ class Ci::Drone::Server "service docker start; docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_DATABASE_DRIVER=mysql \ - -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@tcp\\(#{database_host}:#{database_port}\\)/drone?parseTime=true \ + -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@tcp\\(#{database_host}:#{database_port}\\)/drone_#{user_login}?parseTime=true \ -e DRONE_GITEA_SERVER=#{gitea_url} \ -e DRONE_GITEA_CLIENT_ID=#{client_id} \ -e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \ @@ -55,10 +56,6 @@ class Ci::Drone::Server database_config[Rails.env]["ci_server_db"]["port"] || 3306 end - def database - database_config[Rails.env]["ci_server_db"]["database"] - end - def database_config Rails.configuration.database_configuration end diff --git a/app/models/ci/remote_base.rb b/app/models/ci/remote_base.rb index 349149fed..836315ffa 100644 --- a/app/models/ci/remote_base.rb +++ b/app/models/ci/remote_base.rb @@ -1,10 +1,8 @@ -class Ci::RemoteBase < ApplicationRecord +class Ci::RemoteBase < Ci::Database self.abstract_class = true - establish_connection Rails.configuration.database_configuration[Rails.env]["ci_server_db"] - def generate_code [*'a'..'z',*'0'..'9',*'A'..'Z'].sample(32).join end - + end diff --git a/app/views/ci/builds/_build.json.jbuilder b/app/views/ci/builds/_build.json.jbuilder index 1c1afcbf1..d9414be1b 100644 --- a/app/views/ci/builds/_build.json.jbuilder +++ b/app/views/ci/builds/_build.json.jbuilder @@ -7,7 +7,7 @@ json.action build.build_action json.error build.build_error if build.build_status == 'error' json.message build.build_message json.author do - json.partial! 'author', user: current_user + json.partial! 'author', user: user end json.started format_utc_time build.build_started json.finished format_utc_time build.build_finished diff --git a/app/views/ci/builds/index.json.jbuilder b/app/views/ci/builds/index.json.jbuilder index 40fc515c5..a4b24d98b 100644 --- a/app/views/ci/builds/index.json.jbuilder +++ b/app/views/ci/builds/index.json.jbuilder @@ -1,4 +1,4 @@ json.total_count @total_count json.builds @builds do |build| - json.partial! "/ci/builds/build", build: build + json.partial! "/ci/builds/build", build: build, user: @user end From 0467119605ede4ff7afa10eefc6956e2716bcfdd Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 18 Sep 2020 15:46:36 +0800 Subject: [PATCH 182/384] FIX ci db bug --- app/controllers/ci/base_controller.rb | 18 ++------------- app/controllers/concerns/ci/db_connectable.rb | 23 +++++++++++++++++++ app/controllers/users_controller.rb | 3 +++ app/views/users/get_user_info.json.jbuilder | 2 +- 4 files changed, 29 insertions(+), 17 deletions(-) create mode 100644 app/controllers/concerns/ci/db_connectable.rb diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index 95c43d5bd..13ff46410 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -1,4 +1,6 @@ class Ci::BaseController < ApplicationController + include Ci::DbConnectable + before_action :require_login before_action :connect_to_ci_database @@ -44,20 +46,4 @@ class Ci::BaseController < ApplicationController end end - # Dynamically sets the database connection. - def connect_to_ci_database - db_config = Rails.configuration.database_configuration[Rails.env]["ci_server_db"] - return render_error('ci database config missing') if db_config.blank? - - req_params = { - host: db_config["host"], - username: db_config['username'], - password: db_config['password'], - port: db_config['port'], - database: "#{current_user.login}_#{db_config['database']}" - } - db_params = Ci::Database.get_connection_params(req_params) - Ci::Database.set_connection(db_params) - end - end diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb new file mode 100644 index 000000000..41cb96bf6 --- /dev/null +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -0,0 +1,23 @@ +module Ci::DbConnectable + extend ActiveSupport::Concern + + include do + end + + # Dynamically sets the database connection. + def connect_to_ci_database + db_config = Rails.configuration.database_configuration[Rails.env]["ci_server_db"] + return render_error('ci database config missing') if db_config.blank? + + req_params = { + host: db_config["host"], + username: db_config['username'], + password: db_config['password'], + port: db_config['port'], + database: "#{current_user.login}_#{db_config['database']}" + } + db_params = Ci::Database.get_connection_params(req_params) + Ci::Database.set_connection(db_params) + end + +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 390fc86b7..c5bc97276 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,7 +1,10 @@ class UsersController < ApplicationController + include Ci::DbConnectable + before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users] before_action :require_login, only: %i[me list] + before_action :connect_to_ci_database, only: :get_user_info skip_before_action :check_sign, only: [:attachment_show] def list diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index d9aa44025..b6c239a9e 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -13,4 +13,4 @@ json.user_phone_binded @user.phone.present? json.profile_completed @user.profile_completed? json.professional_certification @user.professional_certification json.devops_step @user.devops_step -json.ci_certification @user.ci_certification? +json.ci_certification @user.ci_certification? if !@user.is_a?(AnonymousUser) From 467f278de59dcbd97842ecc1ac933b0fa2911faf Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 18 Sep 2020 16:40:54 +0800 Subject: [PATCH 183/384] ADD ci datbase config --- app/controllers/concerns/ci/db_connectable.rb | 7 ++++--- app/libs/ci/drone/server.rb | 2 +- app/models/concerns/droneable.rb | 2 +- app/views/users/get_user_info.json.jbuilder | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index 41cb96bf6..1274d6913 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -6,15 +6,16 @@ module Ci::DbConnectable # Dynamically sets the database connection. def connect_to_ci_database - db_config = Rails.configuration.database_configuration[Rails.env]["ci_server_db"] - return render_error('ci database config missing') if db_config.blank? + config = Rails.application.config_for(:configuration).symbolize_keys! + db_config = config[:gitea].symbolize_keys! + raise 'ci database config missing' if db_config.blank? req_params = { host: db_config["host"], username: db_config['username'], password: db_config['password'], port: db_config['port'], - database: "#{current_user.login}_#{db_config['database']}" + database: "#{current_user.login}_drone" } db_params = Ci::Database.get_connection_params(req_params) Ci::Database.set_connection(db_params) diff --git a/app/libs/ci/drone/server.rb b/app/libs/ci/drone/server.rb index 508ddd7e0..ddaad0f8d 100644 --- a/app/libs/ci/drone/server.rb +++ b/app/libs/ci/drone/server.rb @@ -20,7 +20,7 @@ class Ci::Drone::Server "service docker start; docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_DATABASE_DRIVER=mysql \ - -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@tcp\\(#{database_host}:#{database_port}\\)/drone_#{user_login}?parseTime=true \ + -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@tcp\\(#{database_host}:#{database_port}\\)/#{user_login}_drone?parseTime=true \ -e DRONE_GITEA_SERVER=#{gitea_url} \ -e DRONE_GITEA_CLIENT_ID=#{client_id} \ -e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \ diff --git a/app/models/concerns/droneable.rb b/app/models/concerns/droneable.rb index 530692559..8f8c5f966 100644 --- a/app/models/concerns/droneable.rb +++ b/app/models/concerns/droneable.rb @@ -17,7 +17,7 @@ module Droneable end def ci_certification? - Ci::User.exists?(user_login: self.login) + devops_unverified? && Ci::User.exists?(user_login: self.login) end module ClassMethods diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index b6c239a9e..f7ff93323 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -13,4 +13,4 @@ json.user_phone_binded @user.phone.present? json.profile_completed @user.profile_completed? json.professional_certification @user.professional_certification json.devops_step @user.devops_step -json.ci_certification @user.ci_certification? if !@user.is_a?(AnonymousUser) +json.ci_certification @user.ci_certification? if !@user.is_a?(AnonymousUser) && @user.devops_unverified? From 7789c30e5bb9f07c242dfc6716409dd6e926f049 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 18 Sep 2020 16:44:38 +0800 Subject: [PATCH 184/384] FIX ci db bug --- app/controllers/concerns/ci/db_connectable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index 1274d6913..951364aad 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -7,7 +7,7 @@ module Ci::DbConnectable # Dynamically sets the database connection. def connect_to_ci_database config = Rails.application.config_for(:configuration).symbolize_keys! - db_config = config[:gitea].symbolize_keys! + db_config = config[:ci_db_server].symbolize_keys! raise 'ci database config missing' if db_config.blank? req_params = { From 8f279753cc22820f40e9668e3e9e34f147e2926f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 18 Sep 2020 16:50:35 +0800 Subject: [PATCH 185/384] FIX code bug --- app/controllers/concerns/ci/db_connectable.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index 951364aad..fb54c9e65 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -11,10 +11,10 @@ module Ci::DbConnectable raise 'ci database config missing' if db_config.blank? req_params = { - host: db_config["host"], - username: db_config['username'], - password: db_config['password'], - port: db_config['port'], + host: db_config[:host], + username: db_config[:username], + password: db_config[:password], + port: db_config[:port], database: "#{current_user.login}_drone" } db_params = Ci::Database.get_connection_params(req_params) From c4b9ef79d19d83205f3cfb24b9c695c437d1f8ee Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Fri, 18 Sep 2020 17:16:37 +0800 Subject: [PATCH 186/384] Change Issues Clean Routes --- app/controllers/issues_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index f0578d10e..9569b5a77 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -1,6 +1,6 @@ class IssuesController < ApplicationController before_action :require_login, except: [:index, :show, :index_chosen] - before_action :load_project + before_action :load_project, except: :clean before_action :set_user before_action :check_issue_permission before_action :check_project_public, only: [:index ,:show, :copy, :index_chosen, :close_issue] From ee732c0c3a7a9ddb385eebabbf43a7e0c06e27c1 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Fri, 18 Sep 2020 17:23:47 +0800 Subject: [PATCH 187/384] Change Issues Clean Routes --- app/controllers/issues_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 9569b5a77..f0578d10e 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -1,6 +1,6 @@ class IssuesController < ApplicationController before_action :require_login, except: [:index, :show, :index_chosen] - before_action :load_project, except: :clean + before_action :load_project before_action :set_user before_action :check_issue_permission before_action :check_project_public, only: [:index ,:show, :copy, :index_chosen, :close_issue] From a904adaaa0f6f4704740ecd4cfd8655c71d24c89 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 22 Sep 2020 10:43:34 +0800 Subject: [PATCH 188/384] FIX test ci init tables structure --- .../concerns/ci/cloud_account_manageable.rb | 20 +- app/controllers/concerns/ci/db_connectable.rb | 2 +- app/libs/ci/schema.rb | 556 ++++++++++++++++++ 3 files changed, 576 insertions(+), 2 deletions(-) create mode 100644 app/libs/ci/schema.rb diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 4bc3f6826..2935ea9aa 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -43,7 +43,25 @@ module Ci::CloudAccountManageable redirect_url = "#{cloud_account.drone_url}/login" logger.info "######### redirect_url: #{redirect_url}" - result && !result.blank? ? cloud_account : nil + if result && !result.blank? + # Ci::Schema.execute(username, password, port, host, database) + # con_result = @connection.execute(Ci::Schema.statement) + + Ci::Schema.sqls.split(';').map(&:strip).each do |sql| + con_result = @connection.execute(sql) + Rails.logger.info "=============> ci create tabels result: #{con_result}" + end + + + # if con_result.present? + # puts "==========> connection con_result: #{con_result}" + # else + # puts "----------创建ci数据库失败" + # end + cloud_account + else + nil + end end def unbind_account! diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index fb54c9e65..d1c4c7a43 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -18,7 +18,7 @@ module Ci::DbConnectable database: "#{current_user.login}_drone" } db_params = Ci::Database.get_connection_params(req_params) - Ci::Database.set_connection(db_params) + @connection = Ci::Database.set_connection(db_params) end end diff --git a/app/libs/ci/schema.rb b/app/libs/ci/schema.rb new file mode 100644 index 000000000..c75cec73d --- /dev/null +++ b/app/libs/ci/schema.rb @@ -0,0 +1,556 @@ +module Ci::Schema + class << self + def execute(username, password, port, host, database) + `mysql -u#{username} -p#{password} -P#{port} -h#{host} #{database} < #{Rails.root}/db/ci_structure.sql` + end + + def sqls + "CREATE TABLE IF NOT EXISTS `repos` ( + `repo_id` int(11) NOT NULL AUTO_INCREMENT, + `repo_uid` varchar(250) DEFAULT NULL, + `repo_user_id` int(11) DEFAULT NULL, + `repo_namespace` varchar(250) DEFAULT NULL, + `repo_name` varchar(250) DEFAULT NULL, + `repo_slug` varchar(250) DEFAULT NULL, + `repo_scm` varchar(50) DEFAULT NULL, + `repo_clone_url` varchar(2000) DEFAULT NULL, + `repo_ssh_url` varchar(2000) DEFAULT NULL, + `repo_html_url` varchar(2000) DEFAULT NULL, + `repo_active` tinyint(1) DEFAULT NULL, + `repo_private` tinyint(1) DEFAULT NULL, + `repo_visibility` varchar(50) DEFAULT NULL, + `repo_branch` varchar(250) DEFAULT NULL, + `repo_counter` int(11) DEFAULT NULL, + `repo_config` varchar(500) DEFAULT NULL, + `repo_timeout` int(11) DEFAULT NULL, + `repo_trusted` tinyint(1) DEFAULT NULL, + `repo_protected` tinyint(1) DEFAULT NULL, + `repo_synced` int(11) DEFAULT NULL, + `repo_created` int(11) DEFAULT NULL, + `repo_updated` int(11) DEFAULT NULL, + `repo_version` int(11) DEFAULT NULL, + `repo_signer` varchar(50) DEFAULT NULL, + `repo_secret` varchar(50) DEFAULT NULL, + `repo_no_forks` tinyint(1) NOT NULL DEFAULT '0', + `repo_no_pulls` tinyint(1) NOT NULL DEFAULT '0', + `repo_cancel_pulls` tinyint(1) NOT NULL DEFAULT '0', + `repo_cancel_push` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`repo_id`), + UNIQUE KEY `repo_slug` (`repo_slug`), + UNIQUE KEY `repo_uid` (`repo_uid`) + ) ENGINE=InnoDB AUTO_INCREMENT=137 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `builds` ( + `build_id` int(11) NOT NULL AUTO_INCREMENT, + `build_repo_id` int(11) DEFAULT NULL, + `build_config_id` int(11) DEFAULT NULL, + `build_trigger` varchar(250) DEFAULT NULL, + `build_number` int(11) DEFAULT NULL, + `build_parent` int(11) DEFAULT NULL, + `build_status` varchar(50) DEFAULT NULL, + `build_error` varchar(500) DEFAULT NULL, + `build_event` varchar(50) DEFAULT NULL, + `build_action` varchar(50) DEFAULT NULL, + `build_link` varchar(1000) DEFAULT NULL, + `build_timestamp` int(11) DEFAULT NULL, + `build_title` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `build_message` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `build_before` varchar(50) DEFAULT NULL, + `build_after` varchar(50) DEFAULT NULL, + `build_ref` varchar(500) DEFAULT NULL, + `build_source_repo` varchar(250) DEFAULT NULL, + `build_source` varchar(500) DEFAULT NULL, + `build_target` varchar(500) DEFAULT NULL, + `build_author` varchar(500) DEFAULT NULL, + `build_author_name` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `build_author_email` varchar(500) DEFAULT NULL, + `build_author_avatar` varchar(1000) DEFAULT NULL, + `build_sender` varchar(500) DEFAULT NULL, + `build_deploy` varchar(500) DEFAULT NULL, + `build_params` varchar(2000) DEFAULT NULL, + `build_started` int(11) DEFAULT NULL, + `build_finished` int(11) DEFAULT NULL, + `build_created` int(11) DEFAULT NULL, + `build_updated` int(11) DEFAULT NULL, + `build_version` int(11) DEFAULT NULL, + `build_cron` varchar(50) NOT NULL DEFAULT ' ', + `build_deploy_id` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`build_id`), + UNIQUE KEY `build_repo_id` (`build_repo_id`,`build_number`), + KEY `ix_build_repo` (`build_repo_id`), + KEY `ix_build_author` (`build_author`), + KEY `ix_build_sender` (`build_sender`), + KEY `ix_build_ref` (`build_repo_id`,`build_ref`) + ) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `cron` ( + `cron_id` int(11) NOT NULL AUTO_INCREMENT, + `cron_repo_id` int(11) DEFAULT NULL, + `cron_name` varchar(50) DEFAULT NULL, + `cron_expr` varchar(50) DEFAULT NULL, + `cron_next` int(11) DEFAULT NULL, + `cron_prev` int(11) DEFAULT NULL, + `cron_event` varchar(50) DEFAULT NULL, + `cron_branch` varchar(250) DEFAULT NULL, + `cron_target` varchar(250) DEFAULT NULL, + `cron_disabled` tinyint(1) DEFAULT NULL, + `cron_created` int(11) DEFAULT NULL, + `cron_updated` int(11) DEFAULT NULL, + `cron_version` int(11) DEFAULT NULL, + PRIMARY KEY (`cron_id`), + UNIQUE KEY `cron_repo_id` (`cron_repo_id`,`cron_name`), + KEY `ix_cron_repo` (`cron_repo_id`), + KEY `ix_cron_next` (`cron_next`), + CONSTRAINT `cron_ibfk_1` FOREIGN KEY (`cron_repo_id`) REFERENCES `repos` (`repo_id`) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + CREATE TABLE IF NOT EXISTS `latest` ( + `latest_repo_id` int(11) NOT NULL DEFAULT '0', + `latest_build_id` int(11) DEFAULT NULL, + `latest_type` varchar(50) NOT NULL DEFAULT ' ', + `latest_name` varchar(500) NOT NULL DEFAULT ' ', + `latest_created` int(11) DEFAULT NULL, + `latest_updated` int(11) DEFAULT NULL, + `latest_deleted` int(11) DEFAULT NULL, + PRIMARY KEY (`latest_repo_id`,`latest_type`,`latest_name`), + KEY `ix_latest_repo` (`latest_repo_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `logs` ( + `log_id` int(11) NOT NULL, + `log_data` mediumblob, + PRIMARY KEY (`log_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `migrations` ( + `name` varchar(255) DEFAULT NULL, + UNIQUE KEY `name` (`name`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + CREATE TABLE IF NOT EXISTS `nodes` ( + `node_id` int(11) NOT NULL AUTO_INCREMENT, + `node_uid` varchar(500) DEFAULT NULL, + `node_provider` varchar(50) DEFAULT NULL, + `node_state` varchar(50) DEFAULT NULL, + `node_name` varchar(50) DEFAULT NULL, + `node_image` varchar(500) DEFAULT NULL, + `node_region` varchar(100) DEFAULT NULL, + `node_size` varchar(100) DEFAULT NULL, + `node_os` varchar(50) DEFAULT NULL, + `node_arch` varchar(50) DEFAULT NULL, + `node_kernel` varchar(50) DEFAULT NULL, + `node_variant` varchar(50) DEFAULT NULL, + `node_address` varchar(500) DEFAULT NULL, + `node_capacity` int(11) DEFAULT NULL, + `node_filter` varchar(2000) DEFAULT NULL, + `node_labels` varchar(2000) DEFAULT NULL, + `node_error` varchar(2000) DEFAULT NULL, + `node_ca_key` blob, + `node_ca_cert` blob, + `node_tls_key` blob, + `node_tls_cert` blob, + `node_tls_name` varchar(500) DEFAULT NULL, + `node_paused` tinyint(1) DEFAULT NULL, + `node_protected` tinyint(1) DEFAULT NULL, + `node_created` int(11) DEFAULT NULL, + `node_updated` int(11) DEFAULT NULL, + `node_pulled` int(11) DEFAULT NULL, + PRIMARY KEY (`node_id`), + UNIQUE KEY `node_name` (`node_name`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `orgsecrets` ( + `secret_id` int(11) NOT NULL AUTO_INCREMENT, + `secret_namespace` varchar(50) DEFAULT NULL, + `secret_name` varchar(200) DEFAULT NULL, + `secret_type` varchar(50) DEFAULT NULL, + `secret_data` blob, + `secret_pull_request` tinyint(1) DEFAULT NULL, + `secret_pull_request_push` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`secret_id`), + UNIQUE KEY `secret_namespace` (`secret_namespace`,`secret_name`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `perms` ( + `perm_user_id` int(11) NOT NULL DEFAULT '0', + `perm_repo_uid` varchar(250) NOT NULL DEFAULT ' ', + `perm_read` tinyint(1) DEFAULT NULL, + `perm_write` tinyint(1) DEFAULT NULL, + `perm_admin` tinyint(1) DEFAULT NULL, + `perm_synced` int(11) DEFAULT NULL, + `perm_created` int(11) DEFAULT NULL, + `perm_updated` int(11) DEFAULT NULL, + PRIMARY KEY (`perm_user_id`,`perm_repo_uid`), + KEY `ix_perms_user` (`perm_user_id`), + KEY `ix_perms_repo` (`perm_repo_uid`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `secrets` ( + `secret_id` int(11) NOT NULL AUTO_INCREMENT, + `secret_repo_id` int(11) DEFAULT NULL, + `secret_name` varchar(500) DEFAULT NULL, + `secret_data` blob, + `secret_pull_request` tinyint(1) DEFAULT NULL, + `secret_pull_request_push` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`secret_id`), + UNIQUE KEY `secret_repo_id` (`secret_repo_id`,`secret_name`), + KEY `ix_secret_repo` (`secret_repo_id`), + KEY `ix_secret_repo_name` (`secret_repo_id`,`secret_name`), + CONSTRAINT `secrets_ibfk_1` FOREIGN KEY (`secret_repo_id`) REFERENCES `repos` (`repo_id`) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `stages` ( + `stage_id` int(11) NOT NULL AUTO_INCREMENT, + `stage_repo_id` int(11) DEFAULT NULL, + `stage_build_id` int(11) DEFAULT NULL, + `stage_number` int(11) DEFAULT NULL, + `stage_name` varchar(100) DEFAULT NULL, + `stage_kind` varchar(50) DEFAULT NULL, + `stage_type` varchar(50) DEFAULT NULL, + `stage_status` varchar(50) DEFAULT NULL, + `stage_error` varchar(500) DEFAULT NULL, + `stage_errignore` tinyint(1) DEFAULT NULL, + `stage_exit_code` int(11) DEFAULT NULL, + `stage_limit` int(11) DEFAULT NULL, + `stage_os` varchar(50) DEFAULT NULL, + `stage_arch` varchar(50) DEFAULT NULL, + `stage_variant` varchar(10) DEFAULT NULL, + `stage_kernel` varchar(50) DEFAULT NULL, + `stage_machine` varchar(500) DEFAULT NULL, + `stage_started` int(11) DEFAULT NULL, + `stage_stopped` int(11) DEFAULT NULL, + `stage_created` int(11) DEFAULT NULL, + `stage_updated` int(11) DEFAULT NULL, + `stage_version` int(11) DEFAULT NULL, + `stage_on_success` tinyint(1) DEFAULT NULL, + `stage_on_failure` tinyint(1) DEFAULT NULL, + `stage_depends_on` text, + `stage_labels` text, + PRIMARY KEY (`stage_id`), + UNIQUE KEY `stage_build_id` (`stage_build_id`,`stage_number`), + KEY `ix_stages_build` (`stage_build_id`) + ) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `stages_unfinished` ( + `stage_id` int(11) NOT NULL, + PRIMARY KEY (`stage_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `steps` ( + `step_id` int(11) NOT NULL AUTO_INCREMENT, + `step_stage_id` int(11) DEFAULT NULL, + `step_number` int(11) DEFAULT NULL, + `step_name` varchar(100) DEFAULT NULL, + `step_status` varchar(50) DEFAULT NULL, + `step_error` varchar(500) DEFAULT NULL, + `step_errignore` tinyint(1) DEFAULT NULL, + `step_exit_code` int(11) DEFAULT NULL, + `step_started` int(11) DEFAULT NULL, + `step_stopped` int(11) DEFAULT NULL, + `step_version` int(11) DEFAULT NULL, + PRIMARY KEY (`step_id`), + UNIQUE KEY `step_stage_id` (`step_stage_id`,`step_number`), + KEY `ix_steps_stage` (`step_stage_id`) + ) ENGINE=InnoDB AUTO_INCREMENT=83 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `users` ( + `user_id` int(11) NOT NULL AUTO_INCREMENT, + `user_login` varchar(250) DEFAULT NULL, + `user_email` varchar(500) DEFAULT NULL, + `user_admin` tinyint(1) DEFAULT NULL, + `user_machine` tinyint(1) DEFAULT NULL, + `user_active` tinyint(1) DEFAULT NULL, + `user_avatar` varchar(2000) DEFAULT NULL, + `user_syncing` tinyint(1) DEFAULT NULL, + `user_synced` int(11) DEFAULT NULL, + `user_created` int(11) DEFAULT NULL, + `user_updated` int(11) DEFAULT NULL, + `user_last_login` int(11) DEFAULT NULL, + `user_oauth_token` varchar(500) DEFAULT NULL, + `user_oauth_refresh` varchar(500) DEFAULT NULL, + `user_oauth_expiry` int(11) DEFAULT NULL, + `user_hash` varchar(500) DEFAULT NULL, + PRIMARY KEY (`user_id`), + UNIQUE KEY `user_login` (`user_login`), + UNIQUE KEY `user_hash` (`user_hash`) + ) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;" + end + + + def statement + sqls = <<-SQL + CREATE TABLE IF NOT EXISTS `repos` ( + `repo_id` int(11) NOT NULL AUTO_INCREMENT, + `repo_uid` varchar(250) DEFAULT NULL, + `repo_user_id` int(11) DEFAULT NULL, + `repo_namespace` varchar(250) DEFAULT NULL, + `repo_name` varchar(250) DEFAULT NULL, + `repo_slug` varchar(250) DEFAULT NULL, + `repo_scm` varchar(50) DEFAULT NULL, + `repo_clone_url` varchar(2000) DEFAULT NULL, + `repo_ssh_url` varchar(2000) DEFAULT NULL, + `repo_html_url` varchar(2000) DEFAULT NULL, + `repo_active` tinyint(1) DEFAULT NULL, + `repo_private` tinyint(1) DEFAULT NULL, + `repo_visibility` varchar(50) DEFAULT NULL, + `repo_branch` varchar(250) DEFAULT NULL, + `repo_counter` int(11) DEFAULT NULL, + `repo_config` varchar(500) DEFAULT NULL, + `repo_timeout` int(11) DEFAULT NULL, + `repo_trusted` tinyint(1) DEFAULT NULL, + `repo_protected` tinyint(1) DEFAULT NULL, + `repo_synced` int(11) DEFAULT NULL, + `repo_created` int(11) DEFAULT NULL, + `repo_updated` int(11) DEFAULT NULL, + `repo_version` int(11) DEFAULT NULL, + `repo_signer` varchar(50) DEFAULT NULL, + `repo_secret` varchar(50) DEFAULT NULL, + `repo_no_forks` tinyint(1) NOT NULL DEFAULT '0', + `repo_no_pulls` tinyint(1) NOT NULL DEFAULT '0', + `repo_cancel_pulls` tinyint(1) NOT NULL DEFAULT '0', + `repo_cancel_push` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`repo_id`), + UNIQUE KEY `repo_slug` (`repo_slug`), + UNIQUE KEY `repo_uid` (`repo_uid`) + ) ENGINE=InnoDB AUTO_INCREMENT=137 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `builds` ( + `build_id` int(11) NOT NULL AUTO_INCREMENT, + `build_repo_id` int(11) DEFAULT NULL, + `build_config_id` int(11) DEFAULT NULL, + `build_trigger` varchar(250) DEFAULT NULL, + `build_number` int(11) DEFAULT NULL, + `build_parent` int(11) DEFAULT NULL, + `build_status` varchar(50) DEFAULT NULL, + `build_error` varchar(500) DEFAULT NULL, + `build_event` varchar(50) DEFAULT NULL, + `build_action` varchar(50) DEFAULT NULL, + `build_link` varchar(1000) DEFAULT NULL, + `build_timestamp` int(11) DEFAULT NULL, + `build_title` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `build_message` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `build_before` varchar(50) DEFAULT NULL, + `build_after` varchar(50) DEFAULT NULL, + `build_ref` varchar(500) DEFAULT NULL, + `build_source_repo` varchar(250) DEFAULT NULL, + `build_source` varchar(500) DEFAULT NULL, + `build_target` varchar(500) DEFAULT NULL, + `build_author` varchar(500) DEFAULT NULL, + `build_author_name` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `build_author_email` varchar(500) DEFAULT NULL, + `build_author_avatar` varchar(1000) DEFAULT NULL, + `build_sender` varchar(500) DEFAULT NULL, + `build_deploy` varchar(500) DEFAULT NULL, + `build_params` varchar(2000) DEFAULT NULL, + `build_started` int(11) DEFAULT NULL, + `build_finished` int(11) DEFAULT NULL, + `build_created` int(11) DEFAULT NULL, + `build_updated` int(11) DEFAULT NULL, + `build_version` int(11) DEFAULT NULL, + `build_cron` varchar(50) NOT NULL DEFAULT ' ', + `build_deploy_id` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`build_id`), + UNIQUE KEY `build_repo_id` (`build_repo_id`,`build_number`), + KEY `ix_build_repo` (`build_repo_id`), + KEY `ix_build_author` (`build_author`), + KEY `ix_build_sender` (`build_sender`), + KEY `ix_build_ref` (`build_repo_id`,`build_ref`) + ) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `cron` ( + `cron_id` int(11) NOT NULL AUTO_INCREMENT, + `cron_repo_id` int(11) DEFAULT NULL, + `cron_name` varchar(50) DEFAULT NULL, + `cron_expr` varchar(50) DEFAULT NULL, + `cron_next` int(11) DEFAULT NULL, + `cron_prev` int(11) DEFAULT NULL, + `cron_event` varchar(50) DEFAULT NULL, + `cron_branch` varchar(250) DEFAULT NULL, + `cron_target` varchar(250) DEFAULT NULL, + `cron_disabled` tinyint(1) DEFAULT NULL, + `cron_created` int(11) DEFAULT NULL, + `cron_updated` int(11) DEFAULT NULL, + `cron_version` int(11) DEFAULT NULL, + PRIMARY KEY (`cron_id`), + UNIQUE KEY `cron_repo_id` (`cron_repo_id`,`cron_name`), + KEY `ix_cron_repo` (`cron_repo_id`), + KEY `ix_cron_next` (`cron_next`), + CONSTRAINT `cron_ibfk_1` FOREIGN KEY (`cron_repo_id`) REFERENCES `repos` (`repo_id`) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + CREATE TABLE IF NOT EXISTS `latest` ( + `latest_repo_id` int(11) NOT NULL DEFAULT '0', + `latest_build_id` int(11) DEFAULT NULL, + `latest_type` varchar(50) NOT NULL DEFAULT ' ', + `latest_name` varchar(500) NOT NULL DEFAULT ' ', + `latest_created` int(11) DEFAULT NULL, + `latest_updated` int(11) DEFAULT NULL, + `latest_deleted` int(11) DEFAULT NULL, + PRIMARY KEY (`latest_repo_id`,`latest_type`,`latest_name`), + KEY `ix_latest_repo` (`latest_repo_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `logs` ( + `log_id` int(11) NOT NULL, + `log_data` mediumblob, + PRIMARY KEY (`log_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `migrations` ( + `name` varchar(255) DEFAULT NULL, + UNIQUE KEY `name` (`name`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + CREATE TABLE IF NOT EXISTS `nodes` ( + `node_id` int(11) NOT NULL AUTO_INCREMENT, + `node_uid` varchar(500) DEFAULT NULL, + `node_provider` varchar(50) DEFAULT NULL, + `node_state` varchar(50) DEFAULT NULL, + `node_name` varchar(50) DEFAULT NULL, + `node_image` varchar(500) DEFAULT NULL, + `node_region` varchar(100) DEFAULT NULL, + `node_size` varchar(100) DEFAULT NULL, + `node_os` varchar(50) DEFAULT NULL, + `node_arch` varchar(50) DEFAULT NULL, + `node_kernel` varchar(50) DEFAULT NULL, + `node_variant` varchar(50) DEFAULT NULL, + `node_address` varchar(500) DEFAULT NULL, + `node_capacity` int(11) DEFAULT NULL, + `node_filter` varchar(2000) DEFAULT NULL, + `node_labels` varchar(2000) DEFAULT NULL, + `node_error` varchar(2000) DEFAULT NULL, + `node_ca_key` blob, + `node_ca_cert` blob, + `node_tls_key` blob, + `node_tls_cert` blob, + `node_tls_name` varchar(500) DEFAULT NULL, + `node_paused` tinyint(1) DEFAULT NULL, + `node_protected` tinyint(1) DEFAULT NULL, + `node_created` int(11) DEFAULT NULL, + `node_updated` int(11) DEFAULT NULL, + `node_pulled` int(11) DEFAULT NULL, + PRIMARY KEY (`node_id`), + UNIQUE KEY `node_name` (`node_name`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `orgsecrets` ( + `secret_id` int(11) NOT NULL AUTO_INCREMENT, + `secret_namespace` varchar(50) DEFAULT NULL, + `secret_name` varchar(200) DEFAULT NULL, + `secret_type` varchar(50) DEFAULT NULL, + `secret_data` blob, + `secret_pull_request` tinyint(1) DEFAULT NULL, + `secret_pull_request_push` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`secret_id`), + UNIQUE KEY `secret_namespace` (`secret_namespace`,`secret_name`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `perms` ( + `perm_user_id` int(11) NOT NULL DEFAULT '0', + `perm_repo_uid` varchar(250) NOT NULL DEFAULT ' ', + `perm_read` tinyint(1) DEFAULT NULL, + `perm_write` tinyint(1) DEFAULT NULL, + `perm_admin` tinyint(1) DEFAULT NULL, + `perm_synced` int(11) DEFAULT NULL, + `perm_created` int(11) DEFAULT NULL, + `perm_updated` int(11) DEFAULT NULL, + PRIMARY KEY (`perm_user_id`,`perm_repo_uid`), + KEY `ix_perms_user` (`perm_user_id`), + KEY `ix_perms_repo` (`perm_repo_uid`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `secrets` ( + `secret_id` int(11) NOT NULL AUTO_INCREMENT, + `secret_repo_id` int(11) DEFAULT NULL, + `secret_name` varchar(500) DEFAULT NULL, + `secret_data` blob, + `secret_pull_request` tinyint(1) DEFAULT NULL, + `secret_pull_request_push` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`secret_id`), + UNIQUE KEY `secret_repo_id` (`secret_repo_id`,`secret_name`), + KEY `ix_secret_repo` (`secret_repo_id`), + KEY `ix_secret_repo_name` (`secret_repo_id`,`secret_name`), + CONSTRAINT `secrets_ibfk_1` FOREIGN KEY (`secret_repo_id`) REFERENCES `repos` (`repo_id`) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `stages` ( + `stage_id` int(11) NOT NULL AUTO_INCREMENT, + `stage_repo_id` int(11) DEFAULT NULL, + `stage_build_id` int(11) DEFAULT NULL, + `stage_number` int(11) DEFAULT NULL, + `stage_name` varchar(100) DEFAULT NULL, + `stage_kind` varchar(50) DEFAULT NULL, + `stage_type` varchar(50) DEFAULT NULL, + `stage_status` varchar(50) DEFAULT NULL, + `stage_error` varchar(500) DEFAULT NULL, + `stage_errignore` tinyint(1) DEFAULT NULL, + `stage_exit_code` int(11) DEFAULT NULL, + `stage_limit` int(11) DEFAULT NULL, + `stage_os` varchar(50) DEFAULT NULL, + `stage_arch` varchar(50) DEFAULT NULL, + `stage_variant` varchar(10) DEFAULT NULL, + `stage_kernel` varchar(50) DEFAULT NULL, + `stage_machine` varchar(500) DEFAULT NULL, + `stage_started` int(11) DEFAULT NULL, + `stage_stopped` int(11) DEFAULT NULL, + `stage_created` int(11) DEFAULT NULL, + `stage_updated` int(11) DEFAULT NULL, + `stage_version` int(11) DEFAULT NULL, + `stage_on_success` tinyint(1) DEFAULT NULL, + `stage_on_failure` tinyint(1) DEFAULT NULL, + `stage_depends_on` text, + `stage_labels` text, + PRIMARY KEY (`stage_id`), + UNIQUE KEY `stage_build_id` (`stage_build_id`,`stage_number`), + KEY `ix_stages_build` (`stage_build_id`) + ) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `stages_unfinished` ( + `stage_id` int(11) NOT NULL, + PRIMARY KEY (`stage_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `steps` ( + `step_id` int(11) NOT NULL AUTO_INCREMENT, + `step_stage_id` int(11) DEFAULT NULL, + `step_number` int(11) DEFAULT NULL, + `step_name` varchar(100) DEFAULT NULL, + `step_status` varchar(50) DEFAULT NULL, + `step_error` varchar(500) DEFAULT NULL, + `step_errignore` tinyint(1) DEFAULT NULL, + `step_exit_code` int(11) DEFAULT NULL, + `step_started` int(11) DEFAULT NULL, + `step_stopped` int(11) DEFAULT NULL, + `step_version` int(11) DEFAULT NULL, + PRIMARY KEY (`step_id`), + UNIQUE KEY `step_stage_id` (`step_stage_id`,`step_number`), + KEY `ix_steps_stage` (`step_stage_id`) + ) ENGINE=InnoDB AUTO_INCREMENT=83 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + CREATE TABLE IF NOT EXISTS `users` ( + `user_id` int(11) NOT NULL AUTO_INCREMENT, + `user_login` varchar(250) DEFAULT NULL, + `user_email` varchar(500) DEFAULT NULL, + `user_admin` tinyint(1) DEFAULT NULL, + `user_machine` tinyint(1) DEFAULT NULL, + `user_active` tinyint(1) DEFAULT NULL, + `user_avatar` varchar(2000) DEFAULT NULL, + `user_syncing` tinyint(1) DEFAULT NULL, + `user_synced` int(11) DEFAULT NULL, + `user_created` int(11) DEFAULT NULL, + `user_updated` int(11) DEFAULT NULL, + `user_last_login` int(11) DEFAULT NULL, + `user_oauth_token` varchar(500) DEFAULT NULL, + `user_oauth_refresh` varchar(500) DEFAULT NULL, + `user_oauth_expiry` int(11) DEFAULT NULL, + `user_hash` varchar(500) DEFAULT NULL, + PRIMARY KEY (`user_id`), + UNIQUE KEY `user_login` (`user_login`), + UNIQUE KEY `user_hash` (`user_hash`) + ) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + SQL + + sqls + end + end +end From 7750ed18d7715c35ad8cdb3fc79aaea9c4b3788b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 22 Sep 2020 11:59:33 +0800 Subject: [PATCH 189/384] FIX ci db init --- .../ci/cloud_accounts_controller.rb | 4 +++ .../concerns/ci/cloud_account_manageable.rb | 25 ++++--------------- app/controllers/concerns/ci/db_connectable.rb | 16 ++++++++++-- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 23438d2e9..018254996 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -6,6 +6,10 @@ class Ci::CloudAccountsController < Ci::BaseController before_action :load_repo, only: %i[activate] before_action :find_cloud_account, only: %i[show] before_action :validate_params!, only: %i[create bind] + before_action only: %i[create bind] do + master_db = true + connect_to_ci_database(master_db) + end def create ActiveRecord::Base.transaction do diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 2935ea9aa..a0ffb4ce7 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -22,7 +22,10 @@ module Ci::CloudAccountManageable redirect_uri: gitea_oauth['redirect_uris'], gitea_oauth_id: gitea_oauth['id'], user_id: current_user.id) - oauth.save + oauth.save! + + # 初始化ci端数据库 + ci_db_structure!(@connection, "#{current_user.login}_drone") rpc_secret = SecureRandom.hex 16 logger.info "######### rpc_secret: #{rpc_secret}" @@ -43,25 +46,7 @@ module Ci::CloudAccountManageable redirect_url = "#{cloud_account.drone_url}/login" logger.info "######### redirect_url: #{redirect_url}" - if result && !result.blank? - # Ci::Schema.execute(username, password, port, host, database) - # con_result = @connection.execute(Ci::Schema.statement) - - Ci::Schema.sqls.split(';').map(&:strip).each do |sql| - con_result = @connection.execute(sql) - Rails.logger.info "=============> ci create tabels result: #{con_result}" - end - - - # if con_result.present? - # puts "==========> connection con_result: #{con_result}" - # else - # puts "----------创建ci数据库失败" - # end - cloud_account - else - nil - end + result && !result.blank? ? cloud_account : nil end def unbind_account! diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index d1c4c7a43..935d6473a 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -5,7 +5,7 @@ module Ci::DbConnectable end # Dynamically sets the database connection. - def connect_to_ci_database + def connect_to_ci_database(master_db=false) config = Rails.application.config_for(:configuration).symbolize_keys! db_config = config[:ci_db_server].symbolize_keys! raise 'ci database config missing' if db_config.blank? @@ -15,10 +15,22 @@ module Ci::DbConnectable username: db_config[:username], password: db_config[:password], port: db_config[:port], - database: "#{current_user.login}_drone" + database: master_db === true ? db_config[:database] : "#{current_user.login}_#{db_config[:database]}" } db_params = Ci::Database.get_connection_params(req_params) @connection = Ci::Database.set_connection(db_params) end + def ci_db_structure!(connection, database) + result = connection.execute("CREATE DATABASE #{database}") + return false unless result.present? + + # Ci::Schema.execute(username, password, port, host, database) + # con_result = @connection.execute(Ci::Schema.statement) + + Ci::Schema.statement.split(';').map(&:strip).each do |sql| + con_result = @connection.execute(sql) + Rails.logger.info "=============> ci create tabels result: #{con_result}" + end + end end From 88b2dd120842e2fcb73eb0a1272ac775ddbed74d Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 22 Sep 2020 15:50:16 +0800 Subject: [PATCH 190/384] FIX perfect ci init datbase --- .../ci/cloud_accounts_controller.rb | 4 ++-- .../concerns/ci/cloud_account_manageable.rb | 9 +++++++-- app/controllers/concerns/ci/db_connectable.rb | 19 +++++++++++-------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 018254996..c4ffa27ba 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -1,14 +1,14 @@ class Ci::CloudAccountsController < Ci::BaseController include Ci::CloudAccountManageable + skip_before_action :connect_to_ci_database, only: %i[create bind] before_action :load_project, only: %i[create activate] before_action :authorize_owner_project!, only: %i[create activate] before_action :load_repo, only: %i[activate] before_action :find_cloud_account, only: %i[show] before_action :validate_params!, only: %i[create bind] before_action only: %i[create bind] do - master_db = true - connect_to_ci_database(master_db) + connect_to_ci_database(master_db: true) end def create diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index a0ffb4ce7..f834c6b44 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -24,8 +24,13 @@ module Ci::CloudAccountManageable user_id: current_user.id) oauth.save! - # 初始化ci端数据库 - ci_db_structure!(@connection, "#{current_user.login}_drone") + # 创建数据ci端数据库 + database_result = auto_create_database!(@connection, "#{current_user.login}_drone") + cloud_account = nil and return unless database_result.present? + + # 初始化表结构 + sub_connection = connect_to_ci_database + auto_create_table_structure!(sub_connection) rpc_secret = SecureRandom.hex 16 logger.info "######### rpc_secret: #{rpc_secret}" diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index 935d6473a..228221b3e 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -5,7 +5,8 @@ module Ci::DbConnectable end # Dynamically sets the database connection. - def connect_to_ci_database(master_db=false) + def connect_to_ci_database(options={}) + master_db = options[:master_db] || false config = Rails.application.config_for(:configuration).symbolize_keys! db_config = config[:ci_db_server].symbolize_keys! raise 'ci database config missing' if db_config.blank? @@ -14,22 +15,24 @@ module Ci::DbConnectable host: db_config[:host], username: db_config[:username], password: db_config[:password], - port: db_config[:port], - database: master_db === true ? db_config[:database] : "#{current_user.login}_#{db_config[:database]}" + port: db_config[:port] } + req_params = req_params.merge(database: "#{current_user.login}_#{db_config[:database]}") unless master_db === true + db_params = Ci::Database.get_connection_params(req_params) - @connection = Ci::Database.set_connection(db_params) + @connection = Ci::Database.set_connection(db_params).connection end - def ci_db_structure!(connection, database) - result = connection.execute("CREATE DATABASE #{database}") - return false unless result.present? + def auto_create_database!(connection, database) + connection.execute("CREATE DATABASE #{database}") + end + def auto_create_table_structure!(connection) # Ci::Schema.execute(username, password, port, host, database) # con_result = @connection.execute(Ci::Schema.statement) Ci::Schema.statement.split(';').map(&:strip).each do |sql| - con_result = @connection.execute(sql) + con_result = connection.execute(sql) Rails.logger.info "=============> ci create tabels result: #{con_result}" end end From 9ebc0aa1dc528c28bd9dd8cdaf1f54fcf837f1e0 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 22 Sep 2020 16:15:30 +0800 Subject: [PATCH 191/384] ADD rails log --- app/controllers/concerns/ci/db_connectable.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index 228221b3e..23113aa26 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -24,14 +24,17 @@ module Ci::DbConnectable end def auto_create_database!(connection, database) - connection.execute("CREATE DATABASE #{database}") + Rails.logger.info "[CI::DbConnectable] auto_create_database's connection: #{connection}" + connection.execute("CREATE DATABASE IF NOT EXISTS #{database}") end def auto_create_table_structure!(connection) + Rails.logger.info "[CI::DbConnectable] auto_create_table_structure's connection: #{connection}" # Ci::Schema.execute(username, password, port, host, database) # con_result = @connection.execute(Ci::Schema.statement) Ci::Schema.statement.split(';').map(&:strip).each do |sql| + Rails.logger.info "[CI::DbConnectable] auto_create_table_structure's sql: #{sql}" con_result = connection.execute(sql) Rails.logger.info "=============> ci create tabels result: #{con_result}" end From 7e851fe5af00f6ab582fc95ea6cfe8a63b060731 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 22 Sep 2020 16:22:55 +0800 Subject: [PATCH 192/384] FIX delete nil or empty string from sqls arrary --- app/controllers/concerns/ci/db_connectable.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index 23113aa26..8bc32a7cb 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -33,7 +33,8 @@ module Ci::DbConnectable # Ci::Schema.execute(username, password, port, host, database) # con_result = @connection.execute(Ci::Schema.statement) - Ci::Schema.statement.split(';').map(&:strip).each do |sql| + sqls = Ci::Schema.statement.split(';').map(&:strip).reject { |e| e.to_s.empty? } + sqls.each do |sql| Rails.logger.info "[CI::DbConnectable] auto_create_table_structure's sql: #{sql}" con_result = connection.execute(sql) Rails.logger.info "=============> ci create tabels result: #{con_result}" From 4b3359108f984098ad0df5eb8e748b5e9e02cf5f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 22 Sep 2020 17:40:01 +0800 Subject: [PATCH 193/384] FIX ci drone server cmd bug --- app/libs/ci/drone/server.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/libs/ci/drone/server.rb b/app/libs/ci/drone/server.rb index ddaad0f8d..add2e4392 100644 --- a/app/libs/ci/drone/server.rb +++ b/app/libs/ci/drone/server.rb @@ -20,7 +20,7 @@ class Ci::Drone::Server "service docker start; docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_DATABASE_DRIVER=mysql \ - -e DRONE_DATABASE_DATASOURCE=#{database_username}:#{database_password}@tcp\\(#{database_host}:#{database_port}\\)/#{user_login}_drone?parseTime=true \ + -e DRONE_DATABASE_DATASOURCE=#{database_username}:'#{database_password}'@tcp\\(#{database_host}:#{database_port}\\)/#{user_login}_drone?parseTime=true \ -e DRONE_GITEA_SERVER=#{gitea_url} \ -e DRONE_GITEA_CLIENT_ID=#{client_id} \ -e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \ From 1b1801319ad3235e74bfad217645c69ef4a8609f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 22 Sep 2020 17:40:21 +0800 Subject: [PATCH 194/384] FIX code bug --- app/controllers/concerns/ci/db_connectable.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index 8bc32a7cb..a4de9c4ba 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -30,12 +30,9 @@ module Ci::DbConnectable def auto_create_table_structure!(connection) Rails.logger.info "[CI::DbConnectable] auto_create_table_structure's connection: #{connection}" - # Ci::Schema.execute(username, password, port, host, database) - # con_result = @connection.execute(Ci::Schema.statement) sqls = Ci::Schema.statement.split(';').map(&:strip).reject { |e| e.to_s.empty? } sqls.each do |sql| - Rails.logger.info "[CI::DbConnectable] auto_create_table_structure's sql: #{sql}" con_result = connection.execute(sql) Rails.logger.info "=============> ci create tabels result: #{con_result}" end From a4c5db95bb28db8d53b8d17c125defd61902f9e9 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 22 Sep 2020 18:12:13 +0800 Subject: [PATCH 195/384] FIX get user info api's bug --- app/controllers/users_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index c5bc97276..f05525f2e 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -4,7 +4,8 @@ class UsersController < ApplicationController before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users] before_action :require_login, only: %i[me list] - before_action :connect_to_ci_database, only: :get_user_info + before_action :connect_to_ci_database, only: :get_user_info, if: -> { current_user && !current_user.is_a?(AnonymousUser) } + skip_before_action :check_sign, only: [:attachment_show] def list From a97bbb6ddbea26523d5a9d4dd840a743b54dc16a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Sep 2020 09:17:30 +0800 Subject: [PATCH 196/384] Update ci db schema --- app/libs/ci/schema.rb | 370 +++++------------------------------------- app/models/ci/repo.rb | 2 +- 2 files changed, 38 insertions(+), 334 deletions(-) diff --git a/app/libs/ci/schema.rb b/app/libs/ci/schema.rb index c75cec73d..b510f3a30 100644 --- a/app/libs/ci/schema.rb +++ b/app/libs/ci/schema.rb @@ -1,11 +1,8 @@ module Ci::Schema class << self - def execute(username, password, port, host, database) - `mysql -u#{username} -p#{password} -P#{port} -h#{host} #{database} < #{Rails.root}/db/ci_structure.sql` - end - - def sqls - "CREATE TABLE IF NOT EXISTS `repos` ( + def statement + sqls = <<-SQL + CREATE TABLE IF NOT EXISTS `repos` ( `repo_id` int(11) NOT NULL AUTO_INCREMENT, `repo_uid` varchar(250) DEFAULT NULL, `repo_user_id` int(11) DEFAULT NULL, @@ -31,16 +28,12 @@ module Ci::Schema `repo_version` int(11) DEFAULT NULL, `repo_signer` varchar(50) DEFAULT NULL, `repo_secret` varchar(50) DEFAULT NULL, - `repo_no_forks` tinyint(1) NOT NULL DEFAULT '0', - `repo_no_pulls` tinyint(1) NOT NULL DEFAULT '0', - `repo_cancel_pulls` tinyint(1) NOT NULL DEFAULT '0', - `repo_cancel_push` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`repo_id`), UNIQUE KEY `repo_slug` (`repo_slug`), UNIQUE KEY `repo_uid` (`repo_uid`) - ) ENGINE=InnoDB AUTO_INCREMENT=137 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + ) ENGINE=InnoDB AUTO_INCREMENT=137 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - CREATE TABLE IF NOT EXISTS `builds` ( + CREATE TABLE IF NOT EXISTS `builds` ( `build_id` int(11) NOT NULL AUTO_INCREMENT, `build_repo_id` int(11) DEFAULT NULL, `build_config_id` int(11) DEFAULT NULL, @@ -73,17 +66,11 @@ module Ci::Schema `build_created` int(11) DEFAULT NULL, `build_updated` int(11) DEFAULT NULL, `build_version` int(11) DEFAULT NULL, - `build_cron` varchar(50) NOT NULL DEFAULT ' ', - `build_deploy_id` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`build_id`), - UNIQUE KEY `build_repo_id` (`build_repo_id`,`build_number`), - KEY `ix_build_repo` (`build_repo_id`), - KEY `ix_build_author` (`build_author`), - KEY `ix_build_sender` (`build_sender`), - KEY `ix_build_ref` (`build_repo_id`,`build_ref`) - ) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + UNIQUE KEY `build_repo_id` (`build_repo_id`,`build_number`) + ) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - CREATE TABLE IF NOT EXISTS `cron` ( + CREATE TABLE IF NOT EXISTS `cron` ( `cron_id` int(11) NOT NULL AUTO_INCREMENT, `cron_repo_id` int(11) DEFAULT NULL, `cron_name` varchar(50) DEFAULT NULL, @@ -99,35 +86,32 @@ module Ci::Schema `cron_version` int(11) DEFAULT NULL, PRIMARY KEY (`cron_id`), UNIQUE KEY `cron_repo_id` (`cron_repo_id`,`cron_name`), - KEY `ix_cron_repo` (`cron_repo_id`), - KEY `ix_cron_next` (`cron_next`), CONSTRAINT `cron_ibfk_1` FOREIGN KEY (`cron_repo_id`) REFERENCES `repos` (`repo_id`) ON DELETE CASCADE - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE IF NOT EXISTS `latest` ( + CREATE TABLE IF NOT EXISTS `latest` ( `latest_repo_id` int(11) NOT NULL DEFAULT '0', `latest_build_id` int(11) DEFAULT NULL, - `latest_type` varchar(50) NOT NULL DEFAULT ' ', - `latest_name` varchar(500) NOT NULL DEFAULT ' ', + `latest_type` varchar(50) NOT NULL DEFAULT '', + `latest_name` varchar(500) NOT NULL DEFAULT '', `latest_created` int(11) DEFAULT NULL, `latest_updated` int(11) DEFAULT NULL, `latest_deleted` int(11) DEFAULT NULL, - PRIMARY KEY (`latest_repo_id`,`latest_type`,`latest_name`), - KEY `ix_latest_repo` (`latest_repo_id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + PRIMARY KEY (`latest_repo_id`,`latest_type`,`latest_name`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - CREATE TABLE IF NOT EXISTS `logs` ( + CREATE TABLE IF NOT EXISTS `logs` ( `log_id` int(11) NOT NULL, `log_data` mediumblob, PRIMARY KEY (`log_id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - CREATE TABLE IF NOT EXISTS `migrations` ( + CREATE TABLE IF NOT EXISTS `migrations` ( `name` varchar(255) DEFAULT NULL, UNIQUE KEY `name` (`name`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; - CREATE TABLE IF NOT EXISTS `nodes` ( + CREATE TABLE IF NOT EXISTS `nodes` ( `node_id` int(11) NOT NULL AUTO_INCREMENT, `node_uid` varchar(500) DEFAULT NULL, `node_provider` varchar(50) DEFAULT NULL, @@ -157,9 +141,9 @@ module Ci::Schema `node_pulled` int(11) DEFAULT NULL, PRIMARY KEY (`node_id`), UNIQUE KEY `node_name` (`node_name`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - CREATE TABLE IF NOT EXISTS `orgsecrets` ( + CREATE TABLE IF NOT EXISTS `orgsecrets` ( `secret_id` int(11) NOT NULL AUTO_INCREMENT, `secret_namespace` varchar(50) DEFAULT NULL, `secret_name` varchar(200) DEFAULT NULL, @@ -169,23 +153,21 @@ module Ci::Schema `secret_pull_request_push` tinyint(1) DEFAULT NULL, PRIMARY KEY (`secret_id`), UNIQUE KEY `secret_namespace` (`secret_namespace`,`secret_name`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - CREATE TABLE IF NOT EXISTS `perms` ( + CREATE TABLE IF NOT EXISTS `perms` ( `perm_user_id` int(11) NOT NULL DEFAULT '0', - `perm_repo_uid` varchar(250) NOT NULL DEFAULT ' ', + `perm_repo_uid` varchar(250) NOT NULL DEFAULT '', `perm_read` tinyint(1) DEFAULT NULL, `perm_write` tinyint(1) DEFAULT NULL, `perm_admin` tinyint(1) DEFAULT NULL, `perm_synced` int(11) DEFAULT NULL, `perm_created` int(11) DEFAULT NULL, `perm_updated` int(11) DEFAULT NULL, - PRIMARY KEY (`perm_user_id`,`perm_repo_uid`), - KEY `ix_perms_user` (`perm_user_id`), - KEY `ix_perms_repo` (`perm_repo_uid`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + PRIMARY KEY (`perm_user_id`,`perm_repo_uid`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - CREATE TABLE IF NOT EXISTS `secrets` ( + CREATE TABLE IF NOT EXISTS `secrets` ( `secret_id` int(11) NOT NULL AUTO_INCREMENT, `secret_repo_id` int(11) DEFAULT NULL, `secret_name` varchar(500) DEFAULT NULL, @@ -194,12 +176,10 @@ module Ci::Schema `secret_pull_request_push` tinyint(1) DEFAULT NULL, PRIMARY KEY (`secret_id`), UNIQUE KEY `secret_repo_id` (`secret_repo_id`,`secret_name`), - KEY `ix_secret_repo` (`secret_repo_id`), - KEY `ix_secret_repo_name` (`secret_repo_id`,`secret_name`), CONSTRAINT `secrets_ibfk_1` FOREIGN KEY (`secret_repo_id`) REFERENCES `repos` (`repo_id`) ON DELETE CASCADE - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - CREATE TABLE IF NOT EXISTS `stages` ( + CREATE TABLE IF NOT EXISTS `stages` ( `stage_id` int(11) NOT NULL AUTO_INCREMENT, `stage_repo_id` int(11) DEFAULT NULL, `stage_build_id` int(11) DEFAULT NULL, @@ -227,16 +207,15 @@ module Ci::Schema `stage_depends_on` text, `stage_labels` text, PRIMARY KEY (`stage_id`), - UNIQUE KEY `stage_build_id` (`stage_build_id`,`stage_number`), - KEY `ix_stages_build` (`stage_build_id`) - ) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + UNIQUE KEY `stage_build_id` (`stage_build_id`,`stage_number`) + ) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - CREATE TABLE IF NOT EXISTS `stages_unfinished` ( + CREATE TABLE IF NOT EXISTS `stages_unfinished` ( `stage_id` int(11) NOT NULL, PRIMARY KEY (`stage_id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - CREATE TABLE IF NOT EXISTS `steps` ( + CREATE TABLE IF NOT EXISTS `steps` ( `step_id` int(11) NOT NULL AUTO_INCREMENT, `step_stage_id` int(11) DEFAULT NULL, `step_number` int(11) DEFAULT NULL, @@ -249,11 +228,10 @@ module Ci::Schema `step_stopped` int(11) DEFAULT NULL, `step_version` int(11) DEFAULT NULL, PRIMARY KEY (`step_id`), - UNIQUE KEY `step_stage_id` (`step_stage_id`,`step_number`), - KEY `ix_steps_stage` (`step_stage_id`) - ) ENGINE=InnoDB AUTO_INCREMENT=83 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + UNIQUE KEY `step_stage_id` (`step_stage_id`,`step_number`) + ) ENGINE=InnoDB AUTO_INCREMENT=83 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - CREATE TABLE IF NOT EXISTS `users` ( + CREATE TABLE IF NOT EXISTS `users` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `user_login` varchar(250) DEFAULT NULL, `user_email` varchar(500) DEFAULT NULL, @@ -273,280 +251,6 @@ module Ci::Schema PRIMARY KEY (`user_id`), UNIQUE KEY `user_login` (`user_login`), UNIQUE KEY `user_hash` (`user_hash`) - ) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;" - end - - - def statement - sqls = <<-SQL - CREATE TABLE IF NOT EXISTS `repos` ( - `repo_id` int(11) NOT NULL AUTO_INCREMENT, - `repo_uid` varchar(250) DEFAULT NULL, - `repo_user_id` int(11) DEFAULT NULL, - `repo_namespace` varchar(250) DEFAULT NULL, - `repo_name` varchar(250) DEFAULT NULL, - `repo_slug` varchar(250) DEFAULT NULL, - `repo_scm` varchar(50) DEFAULT NULL, - `repo_clone_url` varchar(2000) DEFAULT NULL, - `repo_ssh_url` varchar(2000) DEFAULT NULL, - `repo_html_url` varchar(2000) DEFAULT NULL, - `repo_active` tinyint(1) DEFAULT NULL, - `repo_private` tinyint(1) DEFAULT NULL, - `repo_visibility` varchar(50) DEFAULT NULL, - `repo_branch` varchar(250) DEFAULT NULL, - `repo_counter` int(11) DEFAULT NULL, - `repo_config` varchar(500) DEFAULT NULL, - `repo_timeout` int(11) DEFAULT NULL, - `repo_trusted` tinyint(1) DEFAULT NULL, - `repo_protected` tinyint(1) DEFAULT NULL, - `repo_synced` int(11) DEFAULT NULL, - `repo_created` int(11) DEFAULT NULL, - `repo_updated` int(11) DEFAULT NULL, - `repo_version` int(11) DEFAULT NULL, - `repo_signer` varchar(50) DEFAULT NULL, - `repo_secret` varchar(50) DEFAULT NULL, - `repo_no_forks` tinyint(1) NOT NULL DEFAULT '0', - `repo_no_pulls` tinyint(1) NOT NULL DEFAULT '0', - `repo_cancel_pulls` tinyint(1) NOT NULL DEFAULT '0', - `repo_cancel_push` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`repo_id`), - UNIQUE KEY `repo_slug` (`repo_slug`), - UNIQUE KEY `repo_uid` (`repo_uid`) - ) ENGINE=InnoDB AUTO_INCREMENT=137 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - - CREATE TABLE IF NOT EXISTS `builds` ( - `build_id` int(11) NOT NULL AUTO_INCREMENT, - `build_repo_id` int(11) DEFAULT NULL, - `build_config_id` int(11) DEFAULT NULL, - `build_trigger` varchar(250) DEFAULT NULL, - `build_number` int(11) DEFAULT NULL, - `build_parent` int(11) DEFAULT NULL, - `build_status` varchar(50) DEFAULT NULL, - `build_error` varchar(500) DEFAULT NULL, - `build_event` varchar(50) DEFAULT NULL, - `build_action` varchar(50) DEFAULT NULL, - `build_link` varchar(1000) DEFAULT NULL, - `build_timestamp` int(11) DEFAULT NULL, - `build_title` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `build_message` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `build_before` varchar(50) DEFAULT NULL, - `build_after` varchar(50) DEFAULT NULL, - `build_ref` varchar(500) DEFAULT NULL, - `build_source_repo` varchar(250) DEFAULT NULL, - `build_source` varchar(500) DEFAULT NULL, - `build_target` varchar(500) DEFAULT NULL, - `build_author` varchar(500) DEFAULT NULL, - `build_author_name` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `build_author_email` varchar(500) DEFAULT NULL, - `build_author_avatar` varchar(1000) DEFAULT NULL, - `build_sender` varchar(500) DEFAULT NULL, - `build_deploy` varchar(500) DEFAULT NULL, - `build_params` varchar(2000) DEFAULT NULL, - `build_started` int(11) DEFAULT NULL, - `build_finished` int(11) DEFAULT NULL, - `build_created` int(11) DEFAULT NULL, - `build_updated` int(11) DEFAULT NULL, - `build_version` int(11) DEFAULT NULL, - `build_cron` varchar(50) NOT NULL DEFAULT ' ', - `build_deploy_id` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`build_id`), - UNIQUE KEY `build_repo_id` (`build_repo_id`,`build_number`), - KEY `ix_build_repo` (`build_repo_id`), - KEY `ix_build_author` (`build_author`), - KEY `ix_build_sender` (`build_sender`), - KEY `ix_build_ref` (`build_repo_id`,`build_ref`) - ) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - - CREATE TABLE IF NOT EXISTS `cron` ( - `cron_id` int(11) NOT NULL AUTO_INCREMENT, - `cron_repo_id` int(11) DEFAULT NULL, - `cron_name` varchar(50) DEFAULT NULL, - `cron_expr` varchar(50) DEFAULT NULL, - `cron_next` int(11) DEFAULT NULL, - `cron_prev` int(11) DEFAULT NULL, - `cron_event` varchar(50) DEFAULT NULL, - `cron_branch` varchar(250) DEFAULT NULL, - `cron_target` varchar(250) DEFAULT NULL, - `cron_disabled` tinyint(1) DEFAULT NULL, - `cron_created` int(11) DEFAULT NULL, - `cron_updated` int(11) DEFAULT NULL, - `cron_version` int(11) DEFAULT NULL, - PRIMARY KEY (`cron_id`), - UNIQUE KEY `cron_repo_id` (`cron_repo_id`,`cron_name`), - KEY `ix_cron_repo` (`cron_repo_id`), - KEY `ix_cron_next` (`cron_next`), - CONSTRAINT `cron_ibfk_1` FOREIGN KEY (`cron_repo_id`) REFERENCES `repos` (`repo_id`) ON DELETE CASCADE - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - - CREATE TABLE IF NOT EXISTS `latest` ( - `latest_repo_id` int(11) NOT NULL DEFAULT '0', - `latest_build_id` int(11) DEFAULT NULL, - `latest_type` varchar(50) NOT NULL DEFAULT ' ', - `latest_name` varchar(500) NOT NULL DEFAULT ' ', - `latest_created` int(11) DEFAULT NULL, - `latest_updated` int(11) DEFAULT NULL, - `latest_deleted` int(11) DEFAULT NULL, - PRIMARY KEY (`latest_repo_id`,`latest_type`,`latest_name`), - KEY `ix_latest_repo` (`latest_repo_id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - - CREATE TABLE IF NOT EXISTS `logs` ( - `log_id` int(11) NOT NULL, - `log_data` mediumblob, - PRIMARY KEY (`log_id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - - CREATE TABLE IF NOT EXISTS `migrations` ( - `name` varchar(255) DEFAULT NULL, - UNIQUE KEY `name` (`name`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8; - - CREATE TABLE IF NOT EXISTS `nodes` ( - `node_id` int(11) NOT NULL AUTO_INCREMENT, - `node_uid` varchar(500) DEFAULT NULL, - `node_provider` varchar(50) DEFAULT NULL, - `node_state` varchar(50) DEFAULT NULL, - `node_name` varchar(50) DEFAULT NULL, - `node_image` varchar(500) DEFAULT NULL, - `node_region` varchar(100) DEFAULT NULL, - `node_size` varchar(100) DEFAULT NULL, - `node_os` varchar(50) DEFAULT NULL, - `node_arch` varchar(50) DEFAULT NULL, - `node_kernel` varchar(50) DEFAULT NULL, - `node_variant` varchar(50) DEFAULT NULL, - `node_address` varchar(500) DEFAULT NULL, - `node_capacity` int(11) DEFAULT NULL, - `node_filter` varchar(2000) DEFAULT NULL, - `node_labels` varchar(2000) DEFAULT NULL, - `node_error` varchar(2000) DEFAULT NULL, - `node_ca_key` blob, - `node_ca_cert` blob, - `node_tls_key` blob, - `node_tls_cert` blob, - `node_tls_name` varchar(500) DEFAULT NULL, - `node_paused` tinyint(1) DEFAULT NULL, - `node_protected` tinyint(1) DEFAULT NULL, - `node_created` int(11) DEFAULT NULL, - `node_updated` int(11) DEFAULT NULL, - `node_pulled` int(11) DEFAULT NULL, - PRIMARY KEY (`node_id`), - UNIQUE KEY `node_name` (`node_name`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - - CREATE TABLE IF NOT EXISTS `orgsecrets` ( - `secret_id` int(11) NOT NULL AUTO_INCREMENT, - `secret_namespace` varchar(50) DEFAULT NULL, - `secret_name` varchar(200) DEFAULT NULL, - `secret_type` varchar(50) DEFAULT NULL, - `secret_data` blob, - `secret_pull_request` tinyint(1) DEFAULT NULL, - `secret_pull_request_push` tinyint(1) DEFAULT NULL, - PRIMARY KEY (`secret_id`), - UNIQUE KEY `secret_namespace` (`secret_namespace`,`secret_name`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - - CREATE TABLE IF NOT EXISTS `perms` ( - `perm_user_id` int(11) NOT NULL DEFAULT '0', - `perm_repo_uid` varchar(250) NOT NULL DEFAULT ' ', - `perm_read` tinyint(1) DEFAULT NULL, - `perm_write` tinyint(1) DEFAULT NULL, - `perm_admin` tinyint(1) DEFAULT NULL, - `perm_synced` int(11) DEFAULT NULL, - `perm_created` int(11) DEFAULT NULL, - `perm_updated` int(11) DEFAULT NULL, - PRIMARY KEY (`perm_user_id`,`perm_repo_uid`), - KEY `ix_perms_user` (`perm_user_id`), - KEY `ix_perms_repo` (`perm_repo_uid`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - - CREATE TABLE IF NOT EXISTS `secrets` ( - `secret_id` int(11) NOT NULL AUTO_INCREMENT, - `secret_repo_id` int(11) DEFAULT NULL, - `secret_name` varchar(500) DEFAULT NULL, - `secret_data` blob, - `secret_pull_request` tinyint(1) DEFAULT NULL, - `secret_pull_request_push` tinyint(1) DEFAULT NULL, - PRIMARY KEY (`secret_id`), - UNIQUE KEY `secret_repo_id` (`secret_repo_id`,`secret_name`), - KEY `ix_secret_repo` (`secret_repo_id`), - KEY `ix_secret_repo_name` (`secret_repo_id`,`secret_name`), - CONSTRAINT `secrets_ibfk_1` FOREIGN KEY (`secret_repo_id`) REFERENCES `repos` (`repo_id`) ON DELETE CASCADE - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - - CREATE TABLE IF NOT EXISTS `stages` ( - `stage_id` int(11) NOT NULL AUTO_INCREMENT, - `stage_repo_id` int(11) DEFAULT NULL, - `stage_build_id` int(11) DEFAULT NULL, - `stage_number` int(11) DEFAULT NULL, - `stage_name` varchar(100) DEFAULT NULL, - `stage_kind` varchar(50) DEFAULT NULL, - `stage_type` varchar(50) DEFAULT NULL, - `stage_status` varchar(50) DEFAULT NULL, - `stage_error` varchar(500) DEFAULT NULL, - `stage_errignore` tinyint(1) DEFAULT NULL, - `stage_exit_code` int(11) DEFAULT NULL, - `stage_limit` int(11) DEFAULT NULL, - `stage_os` varchar(50) DEFAULT NULL, - `stage_arch` varchar(50) DEFAULT NULL, - `stage_variant` varchar(10) DEFAULT NULL, - `stage_kernel` varchar(50) DEFAULT NULL, - `stage_machine` varchar(500) DEFAULT NULL, - `stage_started` int(11) DEFAULT NULL, - `stage_stopped` int(11) DEFAULT NULL, - `stage_created` int(11) DEFAULT NULL, - `stage_updated` int(11) DEFAULT NULL, - `stage_version` int(11) DEFAULT NULL, - `stage_on_success` tinyint(1) DEFAULT NULL, - `stage_on_failure` tinyint(1) DEFAULT NULL, - `stage_depends_on` text, - `stage_labels` text, - PRIMARY KEY (`stage_id`), - UNIQUE KEY `stage_build_id` (`stage_build_id`,`stage_number`), - KEY `ix_stages_build` (`stage_build_id`) - ) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - - CREATE TABLE IF NOT EXISTS `stages_unfinished` ( - `stage_id` int(11) NOT NULL, - PRIMARY KEY (`stage_id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - - CREATE TABLE IF NOT EXISTS `steps` ( - `step_id` int(11) NOT NULL AUTO_INCREMENT, - `step_stage_id` int(11) DEFAULT NULL, - `step_number` int(11) DEFAULT NULL, - `step_name` varchar(100) DEFAULT NULL, - `step_status` varchar(50) DEFAULT NULL, - `step_error` varchar(500) DEFAULT NULL, - `step_errignore` tinyint(1) DEFAULT NULL, - `step_exit_code` int(11) DEFAULT NULL, - `step_started` int(11) DEFAULT NULL, - `step_stopped` int(11) DEFAULT NULL, - `step_version` int(11) DEFAULT NULL, - PRIMARY KEY (`step_id`), - UNIQUE KEY `step_stage_id` (`step_stage_id`,`step_number`), - KEY `ix_steps_stage` (`step_stage_id`) - ) ENGINE=InnoDB AUTO_INCREMENT=83 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; - - CREATE TABLE IF NOT EXISTS `users` ( - `user_id` int(11) NOT NULL AUTO_INCREMENT, - `user_login` varchar(250) DEFAULT NULL, - `user_email` varchar(500) DEFAULT NULL, - `user_admin` tinyint(1) DEFAULT NULL, - `user_machine` tinyint(1) DEFAULT NULL, - `user_active` tinyint(1) DEFAULT NULL, - `user_avatar` varchar(2000) DEFAULT NULL, - `user_syncing` tinyint(1) DEFAULT NULL, - `user_synced` int(11) DEFAULT NULL, - `user_created` int(11) DEFAULT NULL, - `user_updated` int(11) DEFAULT NULL, - `user_last_login` int(11) DEFAULT NULL, - `user_oauth_token` varchar(500) DEFAULT NULL, - `user_oauth_refresh` varchar(500) DEFAULT NULL, - `user_oauth_expiry` int(11) DEFAULT NULL, - `user_hash` varchar(500) DEFAULT NULL, - PRIMARY KEY (`user_id`), - UNIQUE KEY `user_login` (`user_login`), - UNIQUE KEY `user_hash` (`user_hash`) ) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; SQL diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index df8fb3569..687ea62e3 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -32,7 +32,7 @@ class Ci::Repo < Ci::RemoteBase repo_slug: "#{project.owner.login}/#{project.identifier}", repo_scm: "git", repo_ssh_url: "", - repo_html: "", + repo_html_url: "", repo_clone_url: project.repository.url, repo_active: 1, repo_private: true, From 76b9031fc82d6fdabc31008df36a6e6defda086f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Sep 2020 11:06:54 +0800 Subject: [PATCH 197/384] FIX bug --- app/models/concerns/droneable.rb | 3 ++- app/views/users/get_user_info.json.jbuilder | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/models/concerns/droneable.rb b/app/models/concerns/droneable.rb index 8f8c5f966..ad5fbcc5f 100644 --- a/app/models/concerns/droneable.rb +++ b/app/models/concerns/droneable.rb @@ -17,7 +17,8 @@ module Droneable end def ci_certification? - devops_unverified? && Ci::User.exists?(user_login: self.login) + return false if self.is_a?(AnonymousUser) + devops_unverified? && Ci::User.exists?(user_login: self.login) if @user.devops_unverified? end module ClassMethods diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index f7ff93323..d9aa44025 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -13,4 +13,4 @@ json.user_phone_binded @user.phone.present? json.profile_completed @user.profile_completed? json.professional_certification @user.professional_certification json.devops_step @user.devops_step -json.ci_certification @user.ci_certification? if !@user.is_a?(AnonymousUser) && @user.devops_unverified? +json.ci_certification @user.ci_certification? From 0f22110870f98895488d9d29aee9774497cd0a6f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Sep 2020 11:10:30 +0800 Subject: [PATCH 198/384] FIX ci author --- app/controllers/users_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index f05525f2e..53fca0fbd 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -4,7 +4,7 @@ class UsersController < ApplicationController before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users] before_action :require_login, only: %i[me list] - before_action :connect_to_ci_database, only: :get_user_info, if: -> { current_user && !current_user.is_a?(AnonymousUser) } + before_action :connect_to_ci_database, only: :get_user_info, if: -> { current_user && !current_user.is_a?(AnonymousUser) && current_user.devops_unverified? } skip_before_action :check_sign, only: [:attachment_show] From 135bdfd69f789db87a8e39f1429392f918c4da9d Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Sep 2020 11:12:15 +0800 Subject: [PATCH 199/384] FIX code bug --- app/models/concerns/droneable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/concerns/droneable.rb b/app/models/concerns/droneable.rb index ad5fbcc5f..73334f59b 100644 --- a/app/models/concerns/droneable.rb +++ b/app/models/concerns/droneable.rb @@ -18,7 +18,7 @@ module Droneable def ci_certification? return false if self.is_a?(AnonymousUser) - devops_unverified? && Ci::User.exists?(user_login: self.login) if @user.devops_unverified? + devops_unverified? && Ci::User.exists?(user_login: self.login) end module ClassMethods From aa89103669cfc8bd7876d5b817faaddf9f824a62 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Sep 2020 11:15:14 +0800 Subject: [PATCH 200/384] FIX connection ci database add condition --- app/controllers/ci/base_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index 13ff46410..57f6cdf4c 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -2,7 +2,7 @@ class Ci::BaseController < ApplicationController include Ci::DbConnectable before_action :require_login - before_action :connect_to_ci_database + before_action :connect_to_ci_database, if: -> { current_user && !current_user.is_a?(AnonymousUser) && current_user.devops_unverified? } def load_repo namespace = params[:owner] From 53224881bace4a322fb3173c5743088153ac427f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Sep 2020 11:40:13 +0800 Subject: [PATCH 201/384] =?UTF-8?q?ADD=20devops=E4=B8=AD=E9=99=90=E5=88=B6?= =?UTF-8?q?=E6=AF=8F=E5=8F=B0=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=8F=AA=E8=83=BD?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E4=B8=80=E4=B8=AA=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/ci/cloud_accounts_controller.rb | 5 +++++ app/controllers/concerns/ci/cloud_account_manageable.rb | 2 -- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index c4ffa27ba..ecbfdbf41 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -12,6 +12,11 @@ class Ci::CloudAccountsController < Ci::BaseController end def create + return render_error('你已绑定了云帐号.') unless current_user.ci_cloud_account.blank? + + ip_num = IPAddr.new(devops_params[:ip_num]).to_i + return render_error("#{devops_params[:ip_num]}服务器已被使用.") if Ci::CloudAccount.exists?(ip_num: ip_num) + ActiveRecord::Base.transaction do @cloud_account = bind_account! if @cloud_account.blank? diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index f834c6b44..9bff6beaa 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -8,8 +8,6 @@ module Ci::CloudAccountManageable # 1. 保存华为云服务器帐号 create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: Ci::CloudAccount.encrypted_secret(devops_params[:secret])) - return render_error('你已绑定了云帐号.') unless current_user.ci_cloud_account.blank? - cloud_account = Ci::CloudAccount.new(create_params) cloud_account.user = current_user cloud_account.save! From 27da6d9904bc47d3b00ea063fd35e7784e1c6f9e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Sep 2020 15:38:47 +0800 Subject: [PATCH 202/384] FIX ci create cloud account bug --- app/controllers/concerns/ci/cloud_account_manageable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 9bff6beaa..038913ffe 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -24,7 +24,7 @@ module Ci::CloudAccountManageable # 创建数据ci端数据库 database_result = auto_create_database!(@connection, "#{current_user.login}_drone") - cloud_account = nil and return unless database_result.present? + logger.info "[CI::DbConnectable] auto_create_database's result: #{database_result}" # 初始化表结构 sub_connection = connect_to_ci_database From 7435d96eed07f5d475707557d80bdabec96bf379 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Sep 2020 16:22:18 +0800 Subject: [PATCH 203/384] ADD check cloud account --- app/controllers/ci/cloud_accounts_controller.rb | 13 +++++++++---- .../concerns/ci/cloud_account_manageable.rb | 8 ++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index ecbfdbf41..741ef53dc 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -12,10 +12,8 @@ class Ci::CloudAccountsController < Ci::BaseController end def create - return render_error('你已绑定了云帐号.') unless current_user.ci_cloud_account.blank? - - ip_num = IPAddr.new(devops_params[:ip_num]).to_i - return render_error("#{devops_params[:ip_num]}服务器已被使用.") if Ci::CloudAccount.exists?(ip_num: ip_num) + flag, msg = check_bind_cloud_account! + return render_error(msg) if flag === true ActiveRecord::Base.transaction do @cloud_account = bind_account! @@ -56,10 +54,17 @@ class Ci::CloudAccountsController < Ci::BaseController end end + def unactivate + + end + def show end def bind + flag, msg = check_bind_cloud_account! + return render_error(msg) if flag === true + ActiveRecord::Base.transaction do @cloud_account = bind_account! if @cloud_account.blank? diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 038913ffe..033aa5ebe 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -91,6 +91,14 @@ module Ci::CloudAccountManageable result[:status].present? ? nil : result end + + def check_bind_cloud_account! + return [true, "你已经绑定了云帐号."] unless current_user.ci_cloud_account.blank? + + ip_num = IPAddr.new(devops_params[:ip_num]).to_i + Ci::CloudAccount.exists?(ip_num: ip_num) ? [true, "#{devops_params[:ip_num]}服务器已被使用."] : [false, nil] + end + private def devops_params params.permit(:account, :secret, :ip_num) From 3829f21da191c68f29e0798fce5b7031268f8635 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Sep 2020 16:58:22 +0800 Subject: [PATCH 204/384] FIX load project bug --- app/controllers/application_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index cd317e50f..bcf42ccbc 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -10,7 +10,7 @@ class ApplicationController < ActionController::Base include LoggerHelper include LoginHelper include RegisterHelper - + protect_from_forgery prepend: true, unless: -> { request.format.json? } before_action :check_sign @@ -749,7 +749,7 @@ class ApplicationController < ActionController::Base if @project and current_user.can_read_project?(@project) logger.info "###########: has project and can read project" @project - elsif current_user.is_a?(AnonymousUser) + elsif @project && current_user.is_a?(AnonymousUser) logger.info "###########:This is AnonymousUser" @project = nil if !@project.is_public? render_forbidden and return From b9a3a86b38297e5607b39e9ac978ba3a6de77e48 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Wed, 23 Sep 2020 17:40:48 +0800 Subject: [PATCH 205/384] Change VersionRelease Default False --- app/controllers/version_releases_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/version_releases_controller.rb b/app/controllers/version_releases_controller.rb index bc6f03037..a9e7fa63a 100644 --- a/app/controllers/version_releases_controller.rb +++ b/app/controllers/version_releases_controller.rb @@ -139,7 +139,7 @@ class VersionReleasesController < ApplicationController body: params[:body], draft: params[:draft] || false, name: params[:name], - prerelease: params[:prerelease], + prerelease: params[:prerelease] || false, tag_name: params[:tag_name], target_commitish: params[:target_commitish] || "master" #分支 } From f116e3347daaa007e948242c6f13b47512b8eb9b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 24 Sep 2020 11:14:16 +0800 Subject: [PATCH 206/384] FIX build detail render user bug --- app/views/ci/builds/_build.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/ci/builds/_build.json.jbuilder b/app/views/ci/builds/_build.json.jbuilder index d9414be1b..1c1afcbf1 100644 --- a/app/views/ci/builds/_build.json.jbuilder +++ b/app/views/ci/builds/_build.json.jbuilder @@ -7,7 +7,7 @@ json.action build.build_action json.error build.build_error if build.build_status == 'error' json.message build.build_message json.author do - json.partial! 'author', user: user + json.partial! 'author', user: current_user end json.started format_utc_time build.build_started json.finished format_utc_time build.build_finished From e698efb14f74335e929ca56c7aa0d3f7302487ab Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Thu, 24 Sep 2020 14:57:36 +0800 Subject: [PATCH 207/384] Add Attachment Video --- app/controllers/application_controller.rb | 2 +- app/views/attachments/_attachment_simple.json.jbuilder | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index bcf42ccbc..5a706e38a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -385,7 +385,7 @@ class ApplicationController < ActionController::Base def current_user if Rails.env.development? - User.current = User.find 36480 + User.current = User.find 1 else User.current end diff --git a/app/views/attachments/_attachment_simple.json.jbuilder b/app/views/attachments/_attachment_simple.json.jbuilder index 6737838d1..46250489f 100644 --- a/app/views/attachments/_attachment_simple.json.jbuilder +++ b/app/views/attachments/_attachment_simple.json.jbuilder @@ -3,6 +3,7 @@ json.title attachment.title json.filesize number_to_human_size attachment.filesize json.description attachment.description json.is_pdf attachment.is_pdf? +json.absolute_path absolute_path(local_path(attachment)) json.url attachment.is_pdf? ? download_url(attachment,disposition:"inline") : download_url(attachment) # json.url download_url(attachment) json.set! :delete, delete.nil? ? true : delete if defined? delete \ No newline at end of file From 09d382ab8f6a8702831c14cbc99e0a98f796585c Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Thu, 24 Sep 2020 15:33:30 +0800 Subject: [PATCH 208/384] Add Attachment Video1 --- app/views/attachments/_attachment_simple.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/attachments/_attachment_simple.json.jbuilder b/app/views/attachments/_attachment_simple.json.jbuilder index 46250489f..0681d6022 100644 --- a/app/views/attachments/_attachment_simple.json.jbuilder +++ b/app/views/attachments/_attachment_simple.json.jbuilder @@ -3,7 +3,7 @@ json.title attachment.title json.filesize number_to_human_size attachment.filesize json.description attachment.description json.is_pdf attachment.is_pdf? -json.absolute_path absolute_path(local_path(attachment)) +json.absolute_path "https://forgeplus.trustie.net/#{absolute_path(local_path(attachment))}" json.url attachment.is_pdf? ? download_url(attachment,disposition:"inline") : download_url(attachment) # json.url download_url(attachment) json.set! :delete, delete.nil? ? true : delete if defined? delete \ No newline at end of file From 1fcf540dfcccef28d7daea72ed7b0390a61ff894 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Fri, 25 Sep 2020 09:49:42 +0800 Subject: [PATCH 209/384] Add Attachment --- app/controllers/attachments_controller.rb | 22 ++++++++++++++++++- .../_attachment_simple.json.jbuilder | 1 - config/routes.rb | 1 + 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 4f64abbb6..b592bb3f9 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -2,7 +2,7 @@ # # 文件上传 class AttachmentsController < ApplicationController - before_action :require_login, :check_auth, except: [:show] + before_action :require_login, :check_auth, except: [:show, :preview_attachment] before_action :find_file, only: %i[show destroy] before_action :attachment_candown, only: [:show] skip_before_action :check_sign, only: [:show, :create] @@ -98,6 +98,26 @@ class AttachmentsController < ApplicationController end end + # 附件为视频时,点击播放 + def preview_attachment + attachment = Attachment.find_by(id: params[:id]) + dir_path = "#{Rails.root}/public/preview" + Dir.mkdir(dir_path) unless Dir.exist?(dir_path) + if params[:status] == "preview" + if system("cp -r #{absolute_path(local_path(attachment))} #{dir_path}/") + render json: {status: 1, url: "#{dir_path}/#{attachment.disk_filename}"} + else + normal_status(-1, "出现错误,请稍后重试") + end + else + if system("rm -rf #{dir_path}/#{attachment.disk_filename}") + normal_status(1, "操作成功") + else + normal_status(-1, "出现错误,请稍后重试") + end + end + end + private def find_file @file = diff --git a/app/views/attachments/_attachment_simple.json.jbuilder b/app/views/attachments/_attachment_simple.json.jbuilder index 0681d6022..6737838d1 100644 --- a/app/views/attachments/_attachment_simple.json.jbuilder +++ b/app/views/attachments/_attachment_simple.json.jbuilder @@ -3,7 +3,6 @@ json.title attachment.title json.filesize number_to_human_size attachment.filesize json.description attachment.description json.is_pdf attachment.is_pdf? -json.absolute_path "https://forgeplus.trustie.net/#{absolute_path(local_path(attachment))}" json.url attachment.is_pdf? ? download_url(attachment,disposition:"inline") : download_url(attachment) # json.url download_url(attachment) json.set! :delete, delete.nil? ? true : delete if defined? delete \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index f8b4eec71..0af147919 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -33,6 +33,7 @@ Rails.application.routes.draw do resources :attachments do collection do delete :destroy_files + post :preview_attachment end end get 'home/index' From 47c147c263300210ab37c0160e57f0e57687208d Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Fri, 25 Sep 2020 09:50:57 +0800 Subject: [PATCH 210/384] Add Attachment1 --- config/routes.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/routes.rb b/config/routes.rb index 0af147919..40d1546ba 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -31,9 +31,11 @@ Rails.application.routes.draw do resources :compose_projects, only: [:create, :destroy] end resources :attachments do + member do + post :preview_attachment + end collection do delete :destroy_files - post :preview_attachment end end get 'home/index' From d9f6750797fa005d93c6cb6c337007645110dfa9 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Fri, 25 Sep 2020 10:26:51 +0800 Subject: [PATCH 211/384] Add Attachment2 --- app/controllers/attachments_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index b592bb3f9..a79aae425 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -105,7 +105,7 @@ class AttachmentsController < ApplicationController Dir.mkdir(dir_path) unless Dir.exist?(dir_path) if params[:status] == "preview" if system("cp -r #{absolute_path(local_path(attachment))} #{dir_path}/") - render json: {status: 1, url: "#{dir_path}/#{attachment.disk_filename}"} + render json: {status: 1, url: "/preview/#{attachment.disk_filename}"} else normal_status(-1, "出现错误,请稍后重试") end From db6e3b0f383500882d71d3c2e03b2650a0c34bf8 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 25 Sep 2020 10:41:32 +0800 Subject: [PATCH 212/384] FIX fork users list api bug --- app/controllers/projects_controller.rb | 2 +- app/models/fork_user.rb | 2 +- app/views/projects/fork_users.json.jbuilder | 7 +++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index f46945f80..b4fd3e3b4 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -94,7 +94,7 @@ class ProjectsController < ApplicationController end def fork_users - fork_users = @project.fork_users.includes(:user, :project).order("fork_users.created_at desc").distinct + fork_users = @project.fork_users.includes(:user, :project, :fork_project).order("fork_users.created_at desc").distinct @forks_count = fork_users.size @fork_users = paginate(fork_users) end diff --git a/app/models/fork_user.rb b/app/models/fork_user.rb index 4a4d5f77e..749f74980 100644 --- a/app/models/fork_user.rb +++ b/app/models/fork_user.rb @@ -1,6 +1,6 @@ class ForkUser < ApplicationRecord belongs_to :project belongs_to :user - belongs_to :fork_project, class_name: 'ForkUser', foreign_key: :fork_project_id + belongs_to :fork_project, class_name: 'Project', foreign_key: :fork_project_id end diff --git a/app/views/projects/fork_users.json.jbuilder b/app/views/projects/fork_users.json.jbuilder index 3feb31edb..a539797e7 100644 --- a/app/views/projects/fork_users.json.jbuilder +++ b/app/views/projects/fork_users.json.jbuilder @@ -2,10 +2,9 @@ json.count @forks_count json.users do json.array! @fork_users.each do |f| user = f.user - fork_project = Project.select(:id,:name, :identifier).find_by(id: f.fork_project_id) - json.id f.fork_project_id - json.identifier fork_project.identifier - json.name "#{user.try(:show_real_name)}/#{fork_project.try(:name)}" + json.id f.fork_project.id + json.identifier f.fork_project.identifier + json.name "#{user.try(:show_real_name)}/#{f.fork_project.try(:name)}" json.login user.try(:login) json.image_url url_to_avatar(user) json.format_time f.created_at.strftime("%Y-%m-%d") From 1d72256098b806c45f7fe98c13785052894ae9f8 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Sun, 27 Sep 2020 10:47:55 +0800 Subject: [PATCH 213/384] Add License Id and Reset Version issues_count --- app/controllers/issues_controller.rb | 2 +- .../20200927023922_reset_versions_count.rb | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20200927023922_reset_versions_count.rb diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index f0578d10e..78942fda9 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -196,7 +196,7 @@ class IssuesController < ApplicationController if params[:status_id].to_i == 5 @issue.issue_times.update_all(end_time: Time.now) - @issue.update_closed_issues_count_in_project! + # @issue.update_closed_issues_count_in_project! #已经有after_update方法了,这里就不需要了 end @issue.create_journal_detail(change_files, issue_files, issue_file_ids, current_user&.id) diff --git a/db/migrate/20200927023922_reset_versions_count.rb b/db/migrate/20200927023922_reset_versions_count.rb new file mode 100644 index 000000000..2c121e62d --- /dev/null +++ b/db/migrate/20200927023922_reset_versions_count.rb @@ -0,0 +1,17 @@ +class ResetVersionsCount < ActiveRecord::Migration[5.2] + def change + execute "ALTER TABLE licenses MODIFY COLUMN id INT AUTO_INCREMENT;" + versions = Version.includes(:issues).select(:id, :closed_issues_count, :percent,:issues_count) + versions.each do |v| + Version.reset_counters v.id, :issues + closed_issues = Issue.select(:id, :fixed_version_id, :status_id).where(fixed_version_id: v.id, status_id: 5).size + unless v.closed_issues_count.to_i == closed_issues + percent = v.issues_count.to_i <=0 ? 0.0 : (closed_issues.to_f / v.issues_count.to_i) + v.closed_issues_count = closed_issues + v.percent = percent + v.save + end + puts v.id + end + end +end From 6cbb22acaf3a5c3e4174dc12f53ebef5708e713a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sun, 27 Sep 2020 10:56:08 +0800 Subject: [PATCH 214/384] ADD open_devops_count column fro projects tables --- .../20200925090122_add_open_devops_count_to_projects.rb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 db/migrate/20200925090122_add_open_devops_count_to_projects.rb diff --git a/db/migrate/20200925090122_add_open_devops_count_to_projects.rb b/db/migrate/20200925090122_add_open_devops_count_to_projects.rb new file mode 100644 index 000000000..9150b2679 --- /dev/null +++ b/db/migrate/20200925090122_add_open_devops_count_to_projects.rb @@ -0,0 +1,5 @@ +class AddOpenDevopsCountToProjects < ActiveRecord::Migration[5.2] + def change + add_column :projects, :open_devops_count, :integer, default: 0, comment: '针对同一台ci服务器激活devops流程的次数' + end +end From a3088625672fc7fd7d52526634d6cceae0df4121 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sun, 27 Sep 2020 11:30:37 +0800 Subject: [PATCH 215/384] =?UTF-8?q?FIX=20=E4=BC=98=E5=8C=96ci=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=EF=BC=8C=E5=B9=B6=E9=85=8D=E7=BD=AEgitea=E7=9B=B8?= =?UTF-8?q?=E5=85=B3database?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 35 ++++++++++++++-- app/controllers/ci/base_controller.rb | 8 ++-- .../ci/cloud_accounts_controller.rb | 4 -- app/controllers/ci/projects_controller.rb | 40 ++++++++++++++++++- .../concerns/ci/cloud_account_manageable.rb | 36 +++++++++++------ app/models/ci/repo.rb | 4 ++ app/models/concerns/droneable.rb | 16 ++++++++ app/models/project.rb | 10 +++++ config/routes.rb | 12 ++++++ 9 files changed, 138 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index f9491e8e1..f8f6d05be 100644 --- a/README.md +++ b/README.md @@ -2491,12 +2491,42 @@ https://localhost:3000/api/jasder/forgeplus/cloud_accounts.json | jq #### 激活项目 ``` -POST /api/:owner/:repo/cloud_accounts/:id/activate +POST /api/:owner/:repo/activate ``` *示例* ``` curl -X POST \ -http://localhost:3000/api/jasder/forgeplus/cloud_accounts/1/activate.json | jq +http://localhost:3000/api/jasder/forgeplus/activate.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:成功, -1: 失败| + +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +#### 取消激活项目 +``` +POST /api/:owner/:repo/deactivate +``` +*示例* +``` +curl -X POST \ +http://localhost:3000/api/jasder/forgeplus/deactivate.json | jq ``` *请求参数说明:* @@ -2504,7 +2534,6 @@ http://localhost:3000/api/jasder/forgeplus/cloud_accounts/1/activate.json | jq |-|-|-|-| |owner |是|string |用户登录名 | |repo |是|string |project's identifier | -|id |是|int |cloud_account's id | *返回参数说明:* diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index 57f6cdf4c..a2c4e4ab6 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -36,14 +36,12 @@ class Ci::BaseController < ApplicationController def find_cloud_account @cloud_account ||= current_user.ci_cloud_account + @cloud_account.blank? ? raise("未找到相关的记录") : @cloud_account end def load_ci_user - begin - @ci_user = Ci::User.find_by(user_login: params[:owner]) - rescue - render_not_found - end + @ci_user ||= Ci::User.find_by(user_login: params[:owner]) + @ci_user.blank? ? raise("未找到相关的记录") : @ci_user end end diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 741ef53dc..01f4800b0 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -54,10 +54,6 @@ class Ci::CloudAccountsController < Ci::BaseController end end - def unactivate - - end - def show end diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index a5535fcbe..d67342ff9 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -2,9 +2,9 @@ class Ci::ProjectsController < Ci::BaseController include RepositoriesHelper before_action :load_project - before_action :load_repo, only: [:update_trustie_pipeline] + before_action :load_repo, only: [:update_trustie_pipeline, :activate, :deactivate] before_action :authorize_owner_project!, only: [:authorize] - before_action :find_cloud_account, only: [:authorize] + before_action :find_cloud_account, only: [:authorize, :activate, :deactivate] def authorize @user = current_user @@ -33,4 +33,40 @@ class Ci::ProjectsController < Ci::BaseController end end + def activate + return render_error('你还未认证') unless current_user.ci_certification? + + begin + ActiveRecord::Base.transaction do + if @repo + return render_error('该项目已经激活') if @repo.repo_active? + if @project.ci_reactivate? + @project.ci_reactivate!(@repo) + return render_ok + end + @repo.activate!(@ci_user.user_id) + else + @repo = Ci::Repo.auto_create!(@ci_user, @project) + @ci_user.update_column(:user_syncing, false) + end + + result = bind_hook!(current_user, @cloud_account, @repo) + @project.update_columns(open_devops: true, gitea_webhook_id: result['id']) + @project.increment!(:open_devops_count) + @cloud_account.update_column(:ci_user_id, @ci_user.user_id) + end + render_ok + rescue Exception => ex + render_error(ex.message) + end + end + + def deactivate + return render_error('已经是激活状态') if @repo.repo_active? + + @project.update_column(open_devops: false) + @repo.deactivate! + render_ok + end + end diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 033aa5ebe..f9e82e2ad 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -49,7 +49,11 @@ module Ci::CloudAccountManageable redirect_url = "#{cloud_account.drone_url}/login" logger.info "######### redirect_url: #{redirect_url}" - result && !result.blank? ? cloud_account : nil + return nil unless result.present? + + gitea_oauth_grant!(current_user.gitea_uid, oauth.gitea_oauth_id) + return cloud_account + # result && !result.blank? ? cloud_account : nil end def unbind_account! @@ -64,17 +68,7 @@ module Ci::CloudAccountManageable cloud_account.destroy! end - current_user.projects.update_all(open_devops: false) - current_user.set_drone_step!(User::DEVOPS_UNINIT) - - # TODO - # 删除用户项目下的与ci相关的所有webhook - current_user.projects.select(:id, :identifier, :gitea_webhook_id).each do |project| - if project.gitea_webhook_id - result = Gitea::Hooks::DestroyService.call(current_user.gitea_token, current_user.login, project.identifier, project.gitea_webhook_id) - project.update_column(:gitea_webhook_id, nil) if result.status == 204 - end - end + current_user.unbind_account! end def bind_hook!(user, cloud_account, repo) @@ -91,7 +85,6 @@ module Ci::CloudAccountManageable result[:status].present? ? nil : result end - def check_bind_cloud_account! return [true, "你已经绑定了云帐号."] unless current_user.ci_cloud_account.blank? @@ -99,6 +92,23 @@ module Ci::CloudAccountManageable Ci::CloudAccount.exists?(ip_num: ip_num) ? [true, "#{devops_params[:ip_num]}服务器已被使用."] : [false, nil] end + def gitea_oauth_grant!(gitea_uid, application_id) + gitea_server_config = Rails.configuration.database_configuration[Rails.env]["gitea_server"] + if gitea_server_config.blank? + puts "[Gitea Server]: gitea database config missing" + return + else + puts "[Gitea Server]: gitea db config is exists." + end + + connection = establish_connection gitea_server_config + + unix_time = Time.now.to_i + sql = "INSERT INTO oauth2_grant ( user_id, application_id, counter, created_unix, updated_unix ) VALUES ( #{gitea_uid}, #{application_id}, 0, #{unix_time}, #{unix_time} );" + + connection.execute(sql) + end + private def devops_params params.permit(:account, :secret, :ip_num) diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index 687ea62e3..a23b7f801 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -57,4 +57,8 @@ class Ci::Repo < Ci::RemoteBase repo end end + + def deactivate! + update_column(:repo_active, 0) + end end diff --git a/app/models/concerns/droneable.rb b/app/models/concerns/droneable.rb index 73334f59b..546a78bba 100644 --- a/app/models/concerns/droneable.rb +++ b/app/models/concerns/droneable.rb @@ -21,6 +21,22 @@ module Droneable devops_unverified? && Ci::User.exists?(user_login: self.login) end + def unbind_account! + user_projects = selef.projects + + user_projects.update_all(open_devops: false, open_devops_count: 0) + set_drone_step!(User::DEVOPS_UNINIT) + + # TODO + # 删除用户项目下的与ci相关的所有webhook + user_projects.select(:id, :identifier, :gitea_webhook_id).each do |project| + if project.gitea_webhook_id + result = Gitea::Hooks::DestroyService.call(self.gitea_token, self.login, project.identifier, project.gitea_webhook_id) + project.update_column(:gitea_webhook_id, nil) if result.status == 204 + end + end + end + module ClassMethods end end diff --git a/app/models/project.rb b/app/models/project.rb index 24f8a85de..c30f67f1a 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -180,4 +180,14 @@ class Project < ApplicationRecord return nil if project.blank? project end + + def ci_reactivate? + open_devops_count > 0 + end + + def ci_reactivate!(ci_repo) + ci_repo.update_column(:repo_active, 1) + update_column(:open_devops, true) + increment!(:open_devops_count) + end end diff --git a/config/routes.rb b/config/routes.rb index 595692371..2f172760c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -372,10 +372,22 @@ Rails.application.routes.draw do to: 'projects#update_trustie_pipeline', as: :update_trustie_pipeline ) + post( + 'activate', + to: 'projects#activate', + as: :ci_activate_project + ) + delete( + 'deactivate', + to: 'projects#deactivate', + as: :ci_deactivate_project + ) end + resources :cloud_accounts, only: [:create] do member do post :activate + delete :deactivate end end resources :builds, param: :build do From 3621f4ff4851621764b047bc2bfb5af6faaea244 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sun, 27 Sep 2020 15:30:44 +0800 Subject: [PATCH 216/384] ADD gitea databse config --- app/controllers/ci/base_controller.rb | 2 +- .../concerns/ci/cloud_account_manageable.rb | 12 +++--------- app/libs/gitea/database.rb | 12 ++++++++++++ app/models/ci/repo.rb | 4 ++-- app/models/ci/user.rb | 4 ++-- app/models/concerns/droneable.rb | 2 +- app/models/gitea/base.rb | 4 ++++ 7 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 app/libs/gitea/database.rb create mode 100644 app/models/gitea/base.rb diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index a2c4e4ab6..2286804f9 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -36,7 +36,7 @@ class Ci::BaseController < ApplicationController def find_cloud_account @cloud_account ||= current_user.ci_cloud_account - @cloud_account.blank? ? raise("未找到相关的记录") : @cloud_account + @cloud_account.blank? ? nil : @cloud_account end def load_ci_user diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index f9e82e2ad..eae546c02 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -93,17 +93,11 @@ module Ci::CloudAccountManageable end def gitea_oauth_grant!(gitea_uid, application_id) - gitea_server_config = Rails.configuration.database_configuration[Rails.env]["gitea_server"] - if gitea_server_config.blank? - puts "[Gitea Server]: gitea database config missing" - return - else - puts "[Gitea Server]: gitea db config is exists." - end - - connection = establish_connection gitea_server_config + connection = Gitea::Database.set_connection.connection unix_time = Time.now.to_i + # TODO + # 目前直接操作db,可以建立对应的model进行操作 sql = "INSERT INTO oauth2_grant ( user_id, application_id, counter, created_unix, updated_unix ) VALUES ( #{gitea_uid}, #{application_id}, 0, #{unix_time}, #{unix_time} );" connection.execute(sql) diff --git a/app/libs/gitea/database.rb b/app/libs/gitea/database.rb new file mode 100644 index 000000000..4698607a4 --- /dev/null +++ b/app/libs/gitea/database.rb @@ -0,0 +1,12 @@ +module Gitea + class Database < ActiveRecord::Base + self.abstract_class = true + + def self.set_connection + gitea_server_config = Rails.configuration.database_configuration[Rails.env]["gitea_server"] + raise 'gitea database config missing' if gitea_server_config.blank? + + establish_connection gitea_server_config + end + end +end diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index a23b7f801..8396cfa90 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -2,8 +2,8 @@ class Ci::Repo < Ci::RemoteBase self.primary_key = 'repo_id' belongs_to :user, foreign_key: :repo_user_id - has_one :perm, foreign_key: :perm_repo_uid, dependent: :destroy - has_many :builds, foreign_key: "build_repo_id", dependent: :destroy + has_one :perm, foreign_key: :perm_repo_uid + has_many :builds, foreign_key: :build_repo_id, dependent: :destroy def self.find_with_namespace(namespace_path, identifier) logger.info "########namespace_path: #{namespace_path} ########identifier: #{identifier} " diff --git a/app/models/ci/user.rb b/app/models/ci/user.rb index 197b6a30a..6f077b330 100644 --- a/app/models/ci/user.rb +++ b/app/models/ci/user.rb @@ -1,8 +1,8 @@ class Ci::User < Ci::RemoteBase self.primary_key = 'user_id' - has_many :repos, foreign_key: "repo_user_id", dependent: :destroy - has_many :perms, foreign_key: "perm_user_id", dependent: :delete_all + has_many :repos, foreign_key: :repo_user_id, dependent: :destroy + has_many :perms, foreign_key: :perm_user_id, dependent: :delete_all has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', foreign_key: :ci_user_id end diff --git a/app/models/concerns/droneable.rb b/app/models/concerns/droneable.rb index 546a78bba..c1f8b3391 100644 --- a/app/models/concerns/droneable.rb +++ b/app/models/concerns/droneable.rb @@ -22,7 +22,7 @@ module Droneable end def unbind_account! - user_projects = selef.projects + user_projects = self.projects user_projects.update_all(open_devops: false, open_devops_count: 0) set_drone_step!(User::DEVOPS_UNINIT) diff --git a/app/models/gitea/base.rb b/app/models/gitea/base.rb new file mode 100644 index 000000000..d14249bf6 --- /dev/null +++ b/app/models/gitea/base.rb @@ -0,0 +1,4 @@ +class Gitea::Base < Gitea::Database + self.abstract_class = true + +end From d9ed3baa022939943bfd6d0429c2894b33643e5a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sun, 27 Sep 2020 15:37:02 +0800 Subject: [PATCH 217/384] Update readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f8f6d05be..2b62be626 100644 --- a/README.md +++ b/README.md @@ -2521,7 +2521,7 @@ http://localhost:3000/api/jasder/forgeplus/activate.json | jq #### 取消激活项目 ``` -POST /api/:owner/:repo/deactivate +DELETE /api/:owner/:repo/deactivate ``` *示例* ``` From 7f9674baf3c5b6652e9f4c555b30ee8c1d5fcdf5 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sun, 27 Sep 2020 16:35:38 +0800 Subject: [PATCH 218/384] FIX bug --- app/controllers/ci/projects_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index d67342ff9..bfd3e2b43 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -1,5 +1,6 @@ class Ci::ProjectsController < Ci::BaseController include RepositoriesHelper + include Ci::CloudAccountManageable before_action :load_project before_action :load_repo, only: [:update_trustie_pipeline, :activate, :deactivate] From fc6a05fe12e43120b2bf596e281f6c376bdf3642 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 28 Sep 2020 11:26:37 +0800 Subject: [PATCH 219/384] FIX code bug --- app/controllers/ci/projects_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index bfd3e2b43..5603c8de2 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -63,7 +63,7 @@ class Ci::ProjectsController < Ci::BaseController end def deactivate - return render_error('已经是激活状态') if @repo.repo_active? + return render_error('该项目已经取消激活') if !@repo.repo_active? @project.update_column(open_devops: false) @repo.deactivate! From 74a19bd2ce26b030fc43fe41837082eb719759d0 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 28 Sep 2020 11:30:49 +0800 Subject: [PATCH 220/384] FIX code bug --- app/controllers/ci/projects_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index 5603c8de2..bf09fb002 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -65,7 +65,7 @@ class Ci::ProjectsController < Ci::BaseController def deactivate return render_error('该项目已经取消激活') if !@repo.repo_active? - @project.update_column(open_devops: false) + @project.update_column(:open_devops, false) @repo.deactivate! render_ok end From d24e7b6a1035f18dbbdba1f2ceaf83610dfb29cd Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 29 Sep 2020 11:45:29 +0800 Subject: [PATCH 221/384] FIX repository create file with token bug --- app/interactors/gitea/create_file_interactor.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/interactors/gitea/create_file_interactor.rb b/app/interactors/gitea/create_file_interactor.rb index 278d5d857..acceeaa97 100644 --- a/app/interactors/gitea/create_file_interactor.rb +++ b/app/interactors/gitea/create_file_interactor.rb @@ -9,7 +9,8 @@ module Gitea attr_reader :error, :result def initialize(token, owner, params) - @owner = owner + @token = token + @owner = owner @params = params end From 3777059e487ebf86bb0626f0698885149b58dd27 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 29 Sep 2020 11:46:18 +0800 Subject: [PATCH 222/384] ADD gitea api request url for escape --- app/services/gitea/client_service.rb | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 584276378..06cad0e45 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -20,10 +20,6 @@ class Gitea::ClientService < ApplicationService # } def post(url, params={}) puts "[gitea] request params: #{params}" - request_url = [api_url, url].join('').freeze - Rails.logger.info("######_____api____request_url_______###############{request_url}") - Rails.logger.info("######_____api____request_params_______###############{params}") - auth_token = authen_params(params[:token]) response = conn(auth_token).post do |req| req.url "#{request_url}" @@ -35,7 +31,7 @@ class Gitea::ClientService < ApplicationService def get(url, params={}) auth_token = authen_params(params[:token]) conn(auth_token).get do |req| - req.url full_url(url) + req.url full_url(url, 'get') params.except(:token).each_pair do |key, value| req.params["#{key}"] = value end @@ -117,14 +113,15 @@ class Gitea::ClientService < ApplicationService [domain, base_url].join('') end - def full_url(api_rest) - [api_url, api_rest].join('').freeze + def full_url(api_rest, action='post') + url = [api_url, api_rest].join('').freeze + url = action === 'get' ? url : URI.escape(url) + puts "[gitea] request url: #{url}" + return url end def render_status(response) - Rails.logger.info("###############____response__#{response}") - Rails.logger.info("###############____response_status_#{response.status}") - Rails.logger.info("###############____response_body_#{response.body}") + puts "[gitea] response status: #{response.status}" mark = "[gitea] " case response.status when 201, 200, 202 From c934933c7cdacf73b2ab0eaf530c99fa0b0a51b2 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 29 Sep 2020 13:50:24 +0800 Subject: [PATCH 223/384] FIX code bug --- app/services/gitea/client_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 06cad0e45..f2581b724 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -22,7 +22,7 @@ class Gitea::ClientService < ApplicationService puts "[gitea] request params: #{params}" auth_token = authen_params(params[:token]) response = conn(auth_token).post do |req| - req.url "#{request_url}" + req.url full_url(url) req.body = params[:data].to_json end render_status(response) From f5c7792717b0e28f5babfac4ebe1c88cfc368393 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Tue, 29 Sep 2020 14:27:57 +0800 Subject: [PATCH 224/384] Add Download --- app/controllers/attachments_controller.rb | 10 +++++++++- app/helpers/repositories_helper.rb | 4 ++-- app/views/repositories/_simple_entry.json.jbuilder | 2 +- config/routes.rb | 2 ++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index a79aae425..8f8ade13d 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -2,7 +2,7 @@ # # 文件上传 class AttachmentsController < ApplicationController - before_action :require_login, :check_auth, except: [:show, :preview_attachment] + before_action :require_login, :check_auth, except: [:show, :preview_attachment, :get_file] before_action :find_file, only: %i[show destroy] before_action :attachment_candown, only: [:show] skip_before_action :check_sign, only: [:show, :create] @@ -28,6 +28,14 @@ class AttachmentsController < ApplicationController update_downloads(@file) end + + def get_file + normal_status(-1, "参数缺失") if params[:download_url].blank? + response = Faraday.get(URI.parse(params[:download_url].to_s.gsub("http:", "https:"))) + filename = params[:download_url].to_s.split("/").pop() + send_data(response.body.force_encoding("UTF-8"), filename: filename, type: "application/octet-stream", disposition: 'attachment') + end + def create # 1. 本地存储 # 2. 上传到云 diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index 2b6d9d405..c6274393a 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -1,11 +1,11 @@ module RepositoriesHelper def render_decode64_content(str) return nil if str.blank? - Base64.decode64(str).force_encoding('UTF-8') + Base64.decode64(str).force_encoding("UTF-8") end def download_type(str) - default_type = %w(xlsx xls ppt pptx pdf zip 7z rar exe pdb obj idb png jpg gif tif psd svg RData rdata) + default_type = %w(xlsx xls ppt pptx pdf zip 7z rar exe pdb obj idb png jpg gif tif psd svg RData rdata doc docx mpp) default_type.include?(str&.downcase) end diff --git a/app/views/repositories/_simple_entry.json.jbuilder b/app/views/repositories/_simple_entry.json.jbuilder index 4890f4047..be603d91b 100644 --- a/app/views/repositories/_simple_entry.json.jbuilder +++ b/app/views/repositories/_simple_entry.json.jbuilder @@ -7,7 +7,7 @@ json.sha entry['sha'] json.path entry['path'] json.type entry['type'] json.size entry['size'] -json.content entry['content'].present? && !direct_download ? render_decode64_content(entry['content']).force_encoding('UTF-8') : "" +json.content entry['content'].present? && !direct_download ? render_decode64_content(entry['content']) : "" json.target entry['target'] json.download_url entry['download_url'] json.direct_download direct_download diff --git a/config/routes.rb b/config/routes.rb index 40d1546ba..c9a277ad4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -8,8 +8,10 @@ Rails.application.routes.draw do # Serve websocket cable requests in-process mount ActionCable.server => '/cable' + get 'attachments/entries/get_file', to: 'attachments#get_file' get 'attachments/download/:id', to: 'attachments#show' get 'attachments/download/:id/:filename', to: 'attachments#show' + get 'auth/qq/callback', to: 'oauth/qq#create' get 'auth/failure', to: 'oauth/base#auth_failure' get 'auth/cas/callback', to: 'oauth/cas#create' From 75c951c204cc246ffb8b91566c1b4c12d2d8c094 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Tue, 29 Sep 2020 14:47:12 +0800 Subject: [PATCH 225/384] Change --- app/controllers/attachments_controller.rb | 3 ++- app/helpers/repositories_helper.rb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 8f8ade13d..16842fb55 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -31,7 +31,8 @@ class AttachmentsController < ApplicationController def get_file normal_status(-1, "参数缺失") if params[:download_url].blank? - response = Faraday.get(URI.parse(params[:download_url].to_s.gsub("http:", "https:"))) + url = URI.encode(params[:download_url].to_s.gsub("http:", "https:")) + response = Faraday.get(url) filename = params[:download_url].to_s.split("/").pop() send_data(response.body.force_encoding("UTF-8"), filename: filename, type: "application/octet-stream", disposition: 'attachment') end diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index c6274393a..f41fbd362 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -5,7 +5,7 @@ module RepositoriesHelper end def download_type(str) - default_type = %w(xlsx xls ppt pptx pdf zip 7z rar exe pdb obj idb png jpg gif tif psd svg RData rdata doc docx mpp) + default_type = %w(xlsx xls ppt pptx pdf zip 7z rar exe pdb obj idb png jpg gif tif psd svg RData rdata doc docx mpp vsdx) default_type.include?(str&.downcase) end From f792f298b6f6b7b0bbe042885546778dfffdbb5e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sun, 4 Oct 2020 10:56:43 +0800 Subject: [PATCH 226/384] ADD index for users tables --- db/migrate/20200929062837_add_index_to_users_type.rb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 db/migrate/20200929062837_add_index_to_users_type.rb diff --git a/db/migrate/20200929062837_add_index_to_users_type.rb b/db/migrate/20200929062837_add_index_to_users_type.rb new file mode 100644 index 000000000..d27ca9dd7 --- /dev/null +++ b/db/migrate/20200929062837_add_index_to_users_type.rb @@ -0,0 +1,5 @@ +class AddIndexToUsersType < ActiveRecord::Migration[5.2] + def change + add_index :users, :type + end +end From c6a7719d4de3186256b7cc7afa4caef4049abbed Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sun, 4 Oct 2020 12:01:26 +0800 Subject: [PATCH 227/384] ADD recommand projects api --- README.md | 59 ++++++++++++++++++++++++++ app/controllers/projects_controller.rb | 8 +++- app/models/project.rb | 2 + config/routes.rb | 7 +-- 4 files changed, 71 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8450de925..0cefd2a1a 100644 --- a/README.md +++ b/README.md @@ -1364,6 +1364,65 @@ http://localhost:3000/api/projects | jq ``` --- +#### 推荐项目 +``` +GET api/projects/recommend +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/projects/recommend | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int |项目总条数 | +|id |string |项目id | +|name |string|项目名称| +|description |string|项目简介| +|visits |int|流量数| +|forked_count |int|被fork的数量| +|praises_count |int|star数量| +|is_public |boolean|是否公开, true:公开,false:未公开| +|mirror_url |string|镜像url| +|last_update_time|int|最后更新时间,为UNIX格式的时间戳| +|author |object|项目创建者| +|-- name |string|用户名,也是用户标识| +|category |object|项目类别| +|-- id |int|项目类型id| +|-- name |string|项目类型名称| +|language |object|项目语言| +|-- id |int|项目语言id| +|-- name |string|项目语言名称| + + +返回值 +``` +[ + { + "id": 20, + "repo_id": null, + "identifier": "PNAekinmH", + "name": "FNILL", + "visits": 13567, + "author": { + "name": "王一达", + "login": "wangyida", + "image_url": "avatars/User/b" + }, + "category": { + "id": 8, + "name": "其他" + } + }, + ... +] + +``` +--- + ### 获取分支列表 ``` GET /api/:namespace_id/:id/branches diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index b4fd3e3b4..513a77367 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -2,8 +2,8 @@ class ProjectsController < ApplicationController include ApplicationHelper include OperateProjectAbilityAble include ProjectsHelper - before_action :require_login, except: %i[index branches group_type_list simple show fork_users praise_users watch_users] - before_action :load_project, except: %i[index group_type_list migrate create] + before_action :require_login, except: %i[index branches group_type_list simple show fork_users praise_users watch_users recommend] + before_action :load_project, except: %i[index group_type_list migrate create recommend] before_action :authorizate_user_can_edit_project!, only: %i[update] before_action :project_public?, only: %i[fork_users praise_users watch_users] @@ -103,6 +103,10 @@ class ProjectsController < ApplicationController json_response(@project) end + def recommend + @projects = Project.recommend.includes(:repository, :project_category, owner: :user_extension).limit(5) + end + private def project_params diff --git a/app/models/project.rb b/app/models/project.rb index 24f8a85de..c268bd406 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -36,6 +36,8 @@ class Project < ApplicationRecord after_save :check_project_members scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :user_id, :forked_count, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on)} scope :no_anomory_projects, -> {where("projects.user_id is not null and projects.user_id != ?", 2)} + scope :recommend, -> { visible.project_statics_select.where(recommend: true) } + def self.search_project(search) diff --git a/config/routes.rb b/config/routes.rb index c9a277ad4..81fc2ccef 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,7 +11,7 @@ Rails.application.routes.draw do get 'attachments/entries/get_file', to: 'attachments#get_file' get 'attachments/download/:id', to: 'attachments#show' get 'attachments/download/:id/:filename', to: 'attachments#show' - + get 'auth/qq/callback', to: 'oauth/qq#create' get 'auth/failure', to: 'oauth/base#auth_failure' get 'auth/cas/callback', to: 'oauth/cas#create' @@ -19,7 +19,7 @@ Rails.application.routes.draw do get 'oauth/bind', to: 'oauth/educoder#bind' get 'oauth/register', to: 'oauth#register' post 'oauth/auto_register', to: 'oauth#auto_register' - + resources :edu_settings scope '/api' do @@ -33,7 +33,7 @@ Rails.application.routes.draw do resources :compose_projects, only: [:create, :destroy] end resources :attachments do - member do + member do post :preview_attachment end collection do @@ -89,6 +89,7 @@ Rails.application.routes.draw do collection do post :migrate get :group_type_list + get :recommend end end From 4ff8c4dc1aeef8451cfce55c9ecf5c67122f3aa5 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sun, 4 Oct 2020 12:03:38 +0800 Subject: [PATCH 228/384] ADD recommand projects api --- app/views/projects/recommend.json.jbuilder | 22 +++++++++++++++++++ ...0201004034434_add_recommend_to_projects.rb | 5 +++++ 2 files changed, 27 insertions(+) create mode 100644 app/views/projects/recommend.json.jbuilder create mode 100644 db/migrate/20201004034434_add_recommend_to_projects.rb diff --git a/app/views/projects/recommend.json.jbuilder b/app/views/projects/recommend.json.jbuilder new file mode 100644 index 000000000..1da5be405 --- /dev/null +++ b/app/views/projects/recommend.json.jbuilder @@ -0,0 +1,22 @@ +json.array! @projects do |project| + owner = project.owner + json.id project.id + json.repo_id project&.repository&.id + json.identifier project.identifier + json.name project.name + json.visits project.visits + json.author do + json.name owner.try(:show_real_name) + json.login owner.login + json.image_url url_to_avatar(owner) + end + + json.category do + if project.project_category.blank? + json.nil! + else + json.id project.project_category.id + json.name project.project_category.name + end + end +end diff --git a/db/migrate/20201004034434_add_recommend_to_projects.rb b/db/migrate/20201004034434_add_recommend_to_projects.rb new file mode 100644 index 000000000..d00b3eb66 --- /dev/null +++ b/db/migrate/20201004034434_add_recommend_to_projects.rb @@ -0,0 +1,5 @@ +class AddRecommendToProjects < ActiveRecord::Migration[5.2] + def change + add_column :projects, :recommend, :boolean, default: false + end +end From 0faa75045066ebf218f716e0caf3f2589aababd7 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Sun, 4 Oct 2020 17:32:37 +0800 Subject: [PATCH 229/384] ADD project detail api --- README.md | 85 +++++++++++++++++++ app/controllers/projects_controller.rb | 27 ++++++ app/models/project.rb | 1 + app/models/project_detail.rb | 4 + app/views/projects/about.json.jbuilder | 5 ++ config/routes.rb | 1 + .../20201004070431_create_project_details.rb | 12 +++ 7 files changed, 135 insertions(+) create mode 100644 app/models/project_detail.rb create mode 100644 app/views/projects/about.json.jbuilder create mode 100644 db/migrate/20201004070431_create_project_details.rb diff --git a/README.md b/README.md index 0cefd2a1a..65f240f21 100644 --- a/README.md +++ b/README.md @@ -1423,6 +1423,91 @@ http://localhost:3000/api/projects/recommend | jq ``` --- +#### 项目主页 +``` +GET api/:namespace_id/:id/about +``` + +*示例* +``` +curl -X GET \ +http://localhost:3000/api/:jason/forgeplus/about | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|namespace_id |是|string |用户登录名 | +|id |是|string |项目标识identifier | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|identifier |string|project's identifier| +|content |string|主页内容| +|attachments |array|附件| +|-- name |string|用户名,也是用户标识| + + +返回值 +``` +{ + "content": "", + "identifier": "forgeplus", + attachments: [ + + ] +} + +``` +--- + +#### 修改项目主页内容 +``` +POST api/:namespace_id/:id +``` + +*示例* +``` +curl -X POST \ +-d "content=内容" \ +-d "attachment_ids=[1, 2, 2]" \ +http://localhost:3000/api/:jasder/forgeplus | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|namespace_id |是|string |用户登录名 | +|id |是|string |项目标识identifier | +|content |是|string |内容信息 | +|attachment_ids |是|array |附件id | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|identifier |string|project's identifier| +|content |string|主页内容| +|attachments |array|附件| +|-- name |string|用户名,也是用户标识| + +返回值 +``` +{ + "content": "", + "identifier": "forgeplus", + attachments: [ + + ] +} + +``` +--- + ### 获取分支列表 ``` GET /api/:namespace_id/:id/branches diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 513a77367..363e90969 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -107,6 +107,33 @@ class ProjectsController < ApplicationController @projects = Project.recommend.includes(:repository, :project_category, owner: :user_extension).limit(5) end + def about + @project_detail = @project.project_detail + @attachments = Array(@project_detail&.attachments) if request.get? + ActiveRecord::Base.transaction do + if request.post? + authorizate_user_can_edit_project! + unless @project_detail.present? + @project_detail = ProjectDetail.new( + content: params[:content], + project_id: @project.id) + else + @project_detail.content = params[:content] + end + if @project_detail.save! + attachment_ids = Array(params[:attachment_ids]) + logger.info "=============> #{Array(params[:attachment_ids])}" + @attachments = Attachment.where(id: attachment_ids).select(:id, :container_id, :container_type) + @attachments.update_all( + container_id: @project_detail.id, + container_type: @project_detail.model_name.name, + author_id: current_user.id, + description: "") + end + end + end + end + private def project_params diff --git a/app/models/project.rb b/app/models/project.rb index c268bd406..49dc64090 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -32,6 +32,7 @@ class Project < ApplicationRecord has_many :versions, -> { order("versions.created_on DESC, versions.name DESC") }, dependent: :destroy has_many :praise_treads, as: :praise_tread_object, dependent: :destroy has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position" + has_one :project_detail, dependent: :destroy after_save :check_project_members scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :user_id, :forked_count, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on)} diff --git a/app/models/project_detail.rb b/app/models/project_detail.rb new file mode 100644 index 000000000..a2d088ba4 --- /dev/null +++ b/app/models/project_detail.rb @@ -0,0 +1,4 @@ +class ProjectDetail < ApplicationRecord + belongs_to :project, optional: true + has_many :attachments, as: :container, dependent: :destroy +end diff --git a/app/views/projects/about.json.jbuilder b/app/views/projects/about.json.jbuilder new file mode 100644 index 000000000..72041ca64 --- /dev/null +++ b/app/views/projects/about.json.jbuilder @@ -0,0 +1,5 @@ +json.content @project_detail&.content +json.identifier @project.identifier +json.attachments @attachments do |attach| + json.partial! "attachments/attachment_simple", locals: {attachment: attach} +end diff --git a/config/routes.rb b/config/routes.rb index 81fc2ccef..6c7f5d80c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -255,6 +255,7 @@ Rails.application.routes.draw do get :watchers, to: 'projects#watch_users' get :stargazers, to: 'projects#praise_users' get :members, to: 'projects#fork_users' + match :about, :via => [:get, :put, :post] end end diff --git a/db/migrate/20201004070431_create_project_details.rb b/db/migrate/20201004070431_create_project_details.rb new file mode 100644 index 000000000..09b63bd62 --- /dev/null +++ b/db/migrate/20201004070431_create_project_details.rb @@ -0,0 +1,12 @@ +class CreateProjectDetails < ActiveRecord::Migration[5.2] + def change + create_table :project_details do |t| + t.integer :project_id + t.longtext :content + + t.timestamps + end + + add_index :project_details, :project_id + end +end From 758302170db4cbc7d1d1067a8b98297ec2a969e0 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 5 Oct 2020 17:29:58 +0800 Subject: [PATCH 230/384] Upate readme.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 65f240f21..7d65e6f1f 100644 --- a/README.md +++ b/README.md @@ -1466,7 +1466,7 @@ http://localhost:3000/api/:jason/forgeplus/about | jq #### 修改项目主页内容 ``` -POST api/:namespace_id/:id +POST api/:namespace_id/:id/about ``` *示例* @@ -1474,7 +1474,7 @@ POST api/:namespace_id/:id curl -X POST \ -d "content=内容" \ -d "attachment_ids=[1, 2, 2]" \ -http://localhost:3000/api/:jasder/forgeplus | jq +http://localhost:3000/api/:jasder/forgeplus/about | jq ``` *请求参数说明:* From 5ca94e4f9711568516c2d2044aef25a251239860 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 5 Oct 2020 17:41:28 +0800 Subject: [PATCH 231/384] FIX project about page for attachment bugh --- app/controllers/projects_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 363e90969..f861ce4db 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -123,7 +123,7 @@ class ProjectsController < ApplicationController if @project_detail.save! attachment_ids = Array(params[:attachment_ids]) logger.info "=============> #{Array(params[:attachment_ids])}" - @attachments = Attachment.where(id: attachment_ids).select(:id, :container_id, :container_type) + @attachments = Attachment.where(id: attachment_ids) @attachments.update_all( container_id: @project_detail.id, container_type: @project_detail.model_name.name, From 63ae3fdea091490fb21468e6e5929f7d960f687e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 9 Oct 2020 11:40:20 +0800 Subject: [PATCH 232/384] FIX project about page for authoration --- app/controllers/projects_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index f861ce4db..253622440 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -2,7 +2,7 @@ class ProjectsController < ApplicationController include ApplicationHelper include OperateProjectAbilityAble include ProjectsHelper - before_action :require_login, except: %i[index branches group_type_list simple show fork_users praise_users watch_users recommend] + before_action :require_login, except: %i[index branches group_type_list simple show fork_users praise_users watch_users recommend about] before_action :load_project, except: %i[index group_type_list migrate create recommend] before_action :authorizate_user_can_edit_project!, only: %i[update] before_action :project_public?, only: %i[fork_users praise_users watch_users] @@ -112,6 +112,7 @@ class ProjectsController < ApplicationController @attachments = Array(@project_detail&.attachments) if request.get? ActiveRecord::Base.transaction do if request.post? + require_login authorizate_user_can_edit_project! unless @project_detail.present? @project_detail = ProjectDetail.new( From a9358552c0c95a7bc56b3f396cc4a93988f84c27 Mon Sep 17 00:00:00 2001 From: whystar Date: Tue, 13 Oct 2020 16:29:49 +0800 Subject: [PATCH 233/384] upate readme --- README.md | 1967 +---------------------------------- deployment.md | 2004 ++++++++++++++++++++++++++++++++++++ docs/figs/code.png | Bin 0 -> 140057 bytes docs/figs/issue_assign.png | Bin 0 -> 84683 bytes docs/figs/issue_manage.png | Bin 0 -> 196639 bytes docs/figs/issue_view.png | Bin 0 -> 82443 bytes docs/figs/milestone.png | Bin 0 -> 106431 bytes 7 files changed, 2026 insertions(+), 1945 deletions(-) create mode 100644 deployment.md create mode 100644 docs/figs/code.png create mode 100644 docs/figs/issue_assign.png create mode 100644 docs/figs/issue_manage.png create mode 100644 docs/figs/issue_view.png create mode 100644 docs/figs/milestone.png diff --git a/README.md b/README.md index e8e510f38..db44e01ab 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,15 @@ +Trustie (确实)是一个以大众化协同开发、开放式资源共享、持续性可信评估为核心机理,面向高校创新实践的在线协作平台 + +## 特性 + +- 软件创作与生产深度融合的软件开发环境体系结构 软件自由创作和工程生产的高效衔接,适于软件开发中群体智慧的有效汇聚。 + +- 构件化协同开发环境的可扩展运行框架多样化工具的集成和联动,形成了强动态扩展能力的平台框架。 + +- “互联网即资源库”的全新软件复用模式 成长式软件资源管理系统,实现了分散资源的知识融合、资源的可持续增长和有效复用。 + +## 部署 -# 本地开发部署步骤 #### 1. 安装依赖包 @@ -45,1960 +55,27 @@ rails s http://localhost:3000/projects ``` ---- +## 页面展示 -# API文档 +- 代码库 -## 基本介绍 +![](docs/figs/code.png) -开发API服务地址: +- 任务管理 +![](docs/figs/issue_mange.png) -https://testgitea.trustie.net/ +- 任务查看 +![](docs/figs/issue_view.png) -响应状态说明: +- 任务指派 -|字段|类型|说明| -|-|-|-| -|status |int |响应状态码,0:请求成功,-1: 请求失败| -|message |string |响应说明 | +![](docs/figs/issue_assign.png) +- 里程碑 -### API接口 ---- +![](docs/figs/milestone.png) -#### 用户注册(通过其他平台) -``` -POST accounts/remote_register -``` -*示例* -``` -curl -X POST \ --d "email=2456233122@qq.com" \ --d "password=djs_D_00001" \ --d "username=16895620" \ --d "platform=forge" \ -http://localhost:3000/api/accounts/remote_register | jq -``` -*请求参数说明:* -|参数名|必选|类型|说明| -|-|-|-|-| -|email |是|string |邮箱 | -|username |是|string |登录名 | -|password |是|string |秘密 | -|platform |否|string |用户来源的相关平台,取值范围['educoder', 'trustie', 'forge'], 默认值为forge | - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|user|json object |返回数据| -|-- id |int |用户id | -|-- token |string|用户token| - - -返回值 -``` -{ - "status": 0, - "message": "success", - "user": { - "id": 36400, - "token": "8c87a80d9cfacc92fcb2451845104f35119eda96" - } -} -``` ---- - -#### 获取当前登录用户信息 -``` -GET api/users/me -``` -*示例* -``` -curl -X GET http://localhost:3000/api/users/me | jq -``` - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|user_id |int |用户id | -|username |string|用户名称| -|admin |boolean|是否为管理用户| -|login |string|登录名| -|image_url |string|用户头像| - - -返回值 -``` -{ - "username": "18816895620", - "login": "18816895620", - "user_id": 36401, - "image_url": "avatars/User/b", - "admin": false -} -``` ---- - -#### 用户列表(带搜索功能) -``` -GET api/users/list -``` -*示例* -``` -curl -X GET \ --d "limit=10" \ --d "search=18816895620" -http://localhost:3000/api/users/list | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|page |否|int |页数,第几页 | -|limit |否|int |每页多少条数据,默认15条 | -|search |否|string |用户名、登录名匹配搜索 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|total_count |int |总用户条数 | -|users |array| | -|-- username |string|用户全名| -|-- login |string|用户登录名| -|-- user_id |int|用户id| -|-- image_url |string|用户头像| - -返回值 -``` -{ - "total_count": 1, - "users": [ - { - "username": "18816895620", - "login": "18816895620", - "user_id": 36401, - "image_url": "avatars/User/b" - } - ] -} -``` ---- - -#### 获取项目类别列表(可根据名称搜素) -``` -GET api/project_categories -``` -*示例* -``` -curl -X GET \ --d "name=大数据" \ -http://localhost:3000/api/project_categories/ | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|name |否|string |类别名称 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|project_categories|array |返回数据| -|-- id |int |类别id | -|-- name |string|类别名称| - - -返回值 -``` -{ - "project_categories": [ - { - "id": 1, - "name": "大数据" - } - ] -} -``` ---- - -#### 获取项目语言列表(可根据名称搜素) -``` -GET api/project_languages -``` -*示例* -``` -curl -X GET \ --d "name=Ruby" \ -http://localhost:3000/api/project_languages/ | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|name |否|string |类别名称 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|project_languages|array |返回数据| -|-- id |int |语言id | -|-- name |string|语言名称| - - -返回值 -``` -{ - "project_languages": [ - { - "id": 1, - "name": "Ruby" - } - ] -} -``` ---- - -#### 获取.gitignore模板列表(可根据名称搜素) -``` -GET api/ignores -``` -*示例* -``` -curl -X GET \ --d "name=Ada" \ -http://localhost:3000/api/ignores/ | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|name |否|string |gitignore名称 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|ignores|array |返回数据| -|-- id |int |id | -|-- name |string|gitignore名称| - - -返回值 -``` -{ - "ignores": [ - { - "id": 1, - "name": "Ada" - } - ] -} -``` ---- - -#### 获取开源许可证列表(可根据名称搜素) -``` -GET api/licenses -``` -*示例* -``` -curl -X GET \ --d "name=AFL" \ -http://localhost:3000/api/licenses/ | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|name |否|string |开源许可证名称 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|licenses|array |返回数据| -|-- id |int |id | -|-- name |string|开源许可证名称| - - -返回值 -``` -{ - "licenses": [ - { - "id": 57, - "name": "AFL-1.2" - }, - { - "id": 76, - "name": "AFL-3.0" - }, - { - "id": 214, - "name": "AFL-1.1" - }, - { - "id": 326, - "name": "AFL-2.1" - }, - { - "id": 350, - "name": "AFL-2.0" - } - ] -} -``` ---- - -#### 创建项目 -``` -POST api/projects -``` -*示例* -``` -curl -X POST \ --d "user_id=36401" \ --d "name=hnfl_demo" \ --d "description=my first project" \ --d "repository_name=hnfl_demo" \ --d "project_category_id=1" \ --d "project_language_id=2" \ --d "ignore_id=2" \ --d "license_id=1" \ -http://localhost:3000/api/projects/ | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|user_id |是|int |用户id或者组织id | -|name |是|string |项目名称 | -|description |是|string |项目描述 | -|repository_name |是|string |仓库名称, 只含有数字、字母、下划线不能以下划线开头和结尾,且唯一 | -|project_category_id|是|int |项目类别id | -|project_language_id|是|int |项目语言id | -|ignore_id |否|int |gitignore相关id | -|license_id |否|int |开源许可证id | -|private |否|boolean|项目是否私有, true:为私有,false: 公开,默认为公开 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|id |int |id | -|name |string|项目名称| - - -返回值 -``` -{ - "id": 3240, - "name": "好项目" -} -``` ---- - -#### 新建镜像项目 -``` -POST api/projects/migrate -``` -*示例* -``` -curl -X POST \ --d "user_id=36401" \ --d "clone_addr=https://gitea.com/mx8090alex/golden.git" \ --d "name=golden" \ --d "description=golden" \ --d "repository_name=golden" \ --d "project_category_id=1" \ --d "project_language_id=2" \ -http://localhost:3000/api/projects/migrate | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|user_id |是|int |用户id或者组织id | -|name |是|string |项目名称 | -|clone_addr |是|string |镜像项目clone地址 | -|description |否|string |项目描述 | -|repository_name |是|string |仓库名称, 只含有数字、字母、下划线不能以下划线开头和结尾,且唯一 | -|project_category_id|是|int |项目类别id | -|project_language_id|是|int |项目语言id | -|private |否|boolean|项目是否私有, true:为私有,false: 非私有,默认为公开 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|id |int |id | -|name |string|项目名称| - - -返回值 -``` -{ - "id": 3263, - "name": "ni项目" -} -``` ---- - -#### 项目详情 -``` -GET api/projects/:id -``` -*示例* -``` -curl -X GET http://localhost:3000/api/projects/3263 | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|id |int |id | -|name |string|项目名称| -|identifier |string|项目标识| -|is_public |boolean|项目是否公开, true:公开,false:私有| -|description |string|项目简介| -|repo_id |int|仓库id| -|repo_identifier|string|仓库标识| - - -返回值 -``` -{ - "name": "ni项目", - "identifier": "mirror_demo", - "is_public": true, - "description": "my first project mirror_demo", - "repo_id": 75073, - "repo_identifier": "mirror_demo" -} -``` ---- - -#### 编辑仓库信息 -``` -GET /api/:login/:repo_identifier/edit.json -``` -*示例* -``` -curl -X GET http://localhost:3000/api/18816895620/mirror_demo/edit.json | jq -``` - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|identifier |string |仓库标识 | -|project_id |int|项目id| -|project_name |string|项目名称| -|project_identifier |string|项目标识| -|project_description |string|项目简介| -|project_category_id |int|项目类别id| -|project_language_id |int|项目语言id| -|private |boolean|项目是否私有, true:为私有,false: 公开 | - - -返回值 -``` -{ - "identifier": "mirror_demo", - "project_id": 3263, - "project_name": "ni项目", - "project_identifier": "mirror_demo", - "project_description": "my first project mirror_demo", - "project_category_id": 1, - "project_language_id": 2, - "private": false -} -``` ---- - -#### 修改项目信息 -``` -PATCH api/projects/:id -``` -*示例* -``` -curl -X PATCH \ --d "name=hnfl_demo" \ --d "description=my first project" \ --d "project_category_id=1" \ --d "project_language_id=2" \ --d "private=true" \ -http://localhost:3000/api/projects/3263.json | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|name |否|string |项目名称 | -|description |否|string |项目描述 | -|project_category_id|否|int |项目类别id | -|project_language_id|否|int |项目语言id | -|private |否|boolean|项目是否私有, true:为私有,false: 公开,默认为公开 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|id |int|id | -|identifier |string|项目标识| -|name |string|项目名称| -|description |string|项目简介| -|project_category_id|int|项目类别id| -|project_language_id|int|项目语言id| -|private |否|boolean|项目是否私有, true:为私有,false: 公开,默认为公开 | - - -返回值 -``` -{ - "id": 3263, - "identifier": "mirror_demo", - "name": "hnfl_demo", - "description": "my first project", - "project_category_id": 1, - "project_language_id": 2, - "is_public": true -} -``` ---- - -#### 删除项目 -``` -DELETE api/projects/:id -``` -*示例* -``` -curl -X DELETE http://localhost:3000/api/projects/3263.json | jq -``` - -注:只有超级管理员和项目拥有者才能删除仓库 - -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|status |int|返回状态, 0: 表示操作成功 | -|message |string|返回信息说明| - - -返回值 -``` -{ - "status": 0, - "message": "success" -} -``` ---- - -#### 项目添加成员 -``` -POST api/projects/:id/members -``` -*示例* -``` -curl -X POST \ --d "user_id=36406" \ -http://localhost:3000/api/projects/3297/members | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|user_id |是|int |用户id | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|status |int |0:添加成功, -1: 添加失败, 1: 表示已经是项目成员 | -|message |string|返回信息说明| - - -返回值 -``` -{ - "status": 0, - "message": "success" -} -``` ---- - -#### 项目删除成员 -``` -DELETE api/projects/:id/members/remove -``` -*示例* -``` -curl -X DELETE \ --d "user_id=36400" \ -http://localhost:3000/api/projects/3263/members/remove | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|user_id |是|int |用户id | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|status |int |0:移除成功, -1: 移除失败, 1: 表示还不是项目成员 | -|message |string|返回信息说明| - - -返回值 -``` -{ - "status": 0, - "message": "success" -} -``` ---- - -#### 更改项目成员角色/权限 -``` -PUT api/projects/:id/members/change_role -``` -*示例* -``` -curl -X PUT \ --d "user_id=36400" \ --d "role=Developer" \ -http://localhost:3000/api/projects/3263/members/change_role | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|user_id |是|int |用户id | -|role |是|string |取值范围:"Manager", "Developer", "Reporter";分别为项目管理人员(拥有所有操作权限)、项目开发人员(只拥有读写权限)、项目报告人员(只拥有读权限) | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|status |int |0:角色更改成功, -1: 更改失败失败, 1: 表示还不是项目成员 | -|message |string|返回信息说明| - - -返回值 -``` -{ - "status": 0, - "message": "success" -} -``` ---- - - -#### 项目成员列表 -``` -GET api/projects/:id/members -``` -*示例* -``` -curl -X GET \ --d "page=1" \ --d "limit=5" \ -http://localhost:3000/api/projects/3263/members | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|page |否|string |页数,第几页 | -|limit |否|string |每页多少条数据,默认15条 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|total_count |int |返回记录总条数 | -|members |array|项目成员信息| -|-- id |int|用户id| -|-- name |string|用户名称| -|-- login |string|用户登录名/标识| -|-- image_url |string|用户头像| -|-- is_owner |boolean|是否是项目的拥有者,true:是, false:不是| -|-- role |string|该用户在项目中的角色, Manager: 管理员(拥有操作权限); Developer:开发人员(只拥有读写权限); Reporter:报告人员(只拥有读权限)| - - -返回值 -``` -{ - "total_count": 2, - "members": [ - { - "id": 36401, - "name": "18816895620", - "login": "18816895620", - "image_url": "avatars/User/b", - "is_owner": true, - "role": "Manager" - }, - { - "id": 36399, - "name": "18816365620", - "login": "18816365620", - "image_url": "avatars/User/b", - "is_owner": false, - "role": "Developer" - } - ] -} -``` ---- - -#### Fork项目 -``` -POST /api/projects/:project_id/forks -``` -*示例* -``` -curl -X POST http://localhost:3000/api/projects/3297/forks | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|project_id |是|int |项目id | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|id |int |项目id | -|identifier |string|项目标识| - - -返回值 -``` -{ - "id": 3290, - "identifier": "newadm" -} -``` ---- - -#### 获取代码目录列表 -``` -POST api/:login/:repo_identifier/entries -``` -*示例* -``` -curl -X GET \ --d "ref=develop" \ -http://localhost:3000/api/18816895620/mirror_demo/entries | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|id |int |id | -|name |string|文件夹或文件名称| -|path |string|文件夹或文件相对路径| -|type |string|文件类型, file:文件,dir:文件目录| -|size |int|文件夹或文件大小 单位B| -|content |string|文件内容,| -|target |string|标签| - -返回值 -``` -[ - { - "name": "Manual", - "path": "Manual", - "sha": "c2f18765235076b4c835b3e31262b3ee65176a75", - "type": "file", - "size": 12579, - "content": null, - "target": null, - "commit": null - }, - { - "name": "README", - "path": "README", - "sha": "91a29176828eba5c5598f5d4a95458e861f271ec", - "type": "file", - "size": 1767, - "content": null, - "target": null, - "commit": null - }, - { - "name": "base", - "path": "base", - "sha": "7adbe5698e02dba062216333d5e1d16b36ae1cbd", - "type": "dir", - "size": 0, - "content": null, - "target": null, - "commit": null - } -] -``` ---- - -#### 获取子目录代码列表/编辑某个具体的文件 -``` -GET api/:login/:repo_identifier/sub_entries -``` -*示例* -``` -curl -X GET \ --d "ref=master" \ --d "filepath=test1_create_file.rb" \ -http://localhost:3000/api/18816895620/mirror_demo/sub_entries | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|filepath |是|string |文件夹、文件的相对路径 | -|ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|id |int |id | -|name |string|文件夹或文件名称| -|path |string|文件夹或文件相对路径| -|type |string|文件类型, file:文件,dir:文件目录| -|size |int|文件夹或文件大小 单位KB| -|content |string|文件内容,| -|target |string|标签| -|url |string|文件访问链接,带分支| -|html_url |string|文件访问链接,未标识分支| -|git_url |string|文件夹或文件的git仓库访问链接| -|download_url |string|文件下载、文件内容访问链接| - -返回值 -``` -[ - { - "name": "build.rc", - "path": "lib/build.rc", - "type": "", - "size": 1268, - "content": null, - "target": null, - "url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/contents/lib/build.rc?ref=master", - "html_url": "http://localhost:3003/18816895620/mirror_demo/src/branch/master/lib/build.rc", - "git_url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/git/blobs/191fcf1a63b3777e2977fcede7dd5309efdd70fe", - "download_url": null - }, - { - "name": "cfg.rc", - "path": "lib/cfg.rc", - "type": "file", - "size": 107, - "content": null, - "target": null, - "url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/contents/lib/cfg.rc?ref=master", - "html_url": "http://localhost:3003/18816895620/mirror_demo/src/branch/master/lib/cfg.rc", - "git_url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/git/blobs/0b91ba0ed1c00e130c77bb9058af3787fea986a0", - "download_url": "http://localhost:3003/18816895620/mirror_demo/raw/branch/master/lib/cfg.rc" - }, - { - "name": "fn", - "path": "lib/fn", - "type": "dir", - "size": 0, - "content": null, - "target": null, - "url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/contents/lib/fn?ref=master", - "html_url": "http://localhost:3003/18816895620/mirror_demo/src/branch/master/lib/fn", - "git_url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/git/blobs/e33bd45949ef8f804471d0b6b2c59728eb445989", - "download_url": null - } -] -``` ---- - -#### 项目类别列表(用于项目列表左侧导航中的项目类别列表) -``` -GET api/project_categories/group_list -``` -*示例* -``` -curl -X GET http://localhost:3000/api/project_categories/group_list | jq -``` - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|id |int |项目分类id | -|name |string|项目分类名称| -|projects_count |int |项目数量| - - -返回值 -``` -[ - { - "id": 1, - "name": "大数据", - "projects_count": 30 - }, - { - "id": 2, - "name": "机器学习", - "projects_count": 1 - }, - { - "id": 3, - "name": "深度学习", - "projects_count": 1 - } -] -``` ---- - -#### 项目类型列表(用于项目列表左侧导航上方中的项目类型列表) -``` -GET api/projects/group_type_list -``` -*示例* -``` -curl -X GET http://localhost:3000/api/projects/group_type_list | jq -``` - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|project_type |string|项目类型 | -|name |string|项目类型名称| -|projects_count |int |项目数量| - - -返回值 -``` -[ - { - "project_type": "common", - "name": "开源托管项目", - "projects_count": 2106 - }, - { - "project_type": "mirror", - "name": "开源镜像项目", - "projects_count": 1 - } -] -``` ---- - -#### 项目列表 -``` -GET api/projects -``` -*示例* -``` -curl -X GET \ --d "page=1" \ --d "limit=5" \ -http://localhost:3000/api/projects | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|page |否|string |页数,第几页 | -|limit |否|string |每页多少条数据,默认15条 | -|sort_by |否|string |排序类型, 取值:updated_on \| created_on \| forked_count \| praises_count, updated_on: 更新时间排序,created_on: 创建时间排序,forked_count: fork数据排序,praises_count: 点赞数量排序,默认为updated_on更新时间排序 | -|sort_direction|否|string |排序方式,取值为: desc \| asc; desc: 降序排序, asc: 升序排序, 默认为:desc | -|search |否|string |按照项目名称搜索 | -|category_id |否|int |项目类别id | -|language_id |否|int |项目语言id | -|project_type |否|string |项目类型, 取值为:common \| mirror; common:开源托管项目, mirror:开源镜像项目 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|total_count |int |项目总条数 | -|id |string |项目id | -|name |string|项目名称| -|description |string|项目简介| -|visits |int|流量数| -|forked_count |int|被fork的数量| -|praises_count |int|star数量| -|is_public |boolean|是否公开, true:公开,false:未公开| -|mirror_url |string|镜像url| -|last_update_time|int|最后更新时间,为UNIX格式的时间戳| -|author |object|项目创建者| -|-- name |string|用户名,也是用户标识| -|category |object|项目类别| -|-- id |int|项目类型id| -|-- name |string|项目类型名称| -|language |object|项目语言| -|-- id |int|项目语言id| -|-- name |string|项目语言名称| - - -返回值 -``` -{ - "total_count": 3096, - "projects": [ - { - "id": 1, - "name": "hnfl_demo1", - "description": "my first project", - "visits": 0, - "praises_count": 0, - "forked_count": 0, - "is_public": true, - "mirror_url": null, - "last_update_time": 1577697461, - "author": { - "name": "18816895620", - "image_url": "avatars/User/b" - }, - "category": { - "id": 1, - "name": "大数据" - }, - "language": { - "id": 2, - "name": "C" - } - }, - { - "id": 2, - "name": "hnfl_demo", - "description": "my first project", - "visits": 0, - "praises_count": 0, - "forked_count": 0, - "is_public": true, - "mirror_url": null, - "last_update_time": 1577697403, - "author": { - "name": "18816895620", - "image_url": "avatars/User/b" - }, - "category": { - "id": 1, - "name": "大数据" - }, - "language": { - "id": 2, - "name": "C" - } - }, - { - "id": 3, - "name": "统计局", - "description": "my first project", - "visits": 0, - "praises_count": 0, - "forked_count": 0, - "is_public": true, - "mirror_url": null, - "last_update_time": 1577415173, - "author": { - "name": "18816895620", - "image_url": "avatars/User/b" - }, - "category": { - "id": 1, - "name": "大数据" - }, - "language": { - "id": 2, - "name": "C" - } - }, - { - "id": 5, - "name": "开源同名", - "description": "my first project", - "visits": 0, - "praises_count": 0, - "forked_count": 0, - "is_public": false, - "mirror_url": "https://gitea.com/CasperVector/slew.git", - "last_update_time": 1577346228, - "author": { - "name": "18816895620", - "image_url": "avatars/User/b" - }, - "category": { - "id": 1, - "name": "大数据" - }, - "language": { - "id": 2, - "name": "C" - } - }, - { - "id": 7, - "name": "开源支持", - "description": "my first project", - "visits": 0, - "praises_count": 0, - "forked_count": 0, - "is_public": true, - "mirror_url": null, - "last_update_time": 1577341572, - "author": { - "name": "18816895620", - "image_url": "avatars/User/b" - }, - "category": { - "id": 1, - "name": "大数据" - }, - "language": { - "id": 2, - "name": "C" - } - } - ] -} -``` ---- - -### 获取分支列表 -``` -GET /api/projects/:identifier/branches -``` -*示例* -``` -curl -X GET http://localhost:3000/api/projects/mirror_demo/branches | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|identifier |是|string |项目标识 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|name |string|分支名称| -|user_can_push |boolean|用户是否可push| -|user_can_merge |boolean|用户是否客merge| -|protected |boolean|是否为保护分支| -|http_url |boolean|http链接| -|zip_url |boolean|zip包下载链接| -|tar_url |boolean|tar.gz下载链接| -|last_commit |object|最后提交记录| -|-- id |string|提交记录id| -|-- message |string|提交的说明信息| -|-- timestamp |int|提交时间,为UNIX时间戳| -|-- time_from_now|string|转换后的时间| -|author |object|提交用户| -|-- login |string|用户名称| -|-- image_url |string|用户头像| - - -返回值 -``` -[ - { - "name": "develop", - "user_can_push": true, - "user_can_merge": true, - "protected": false, - "http_url": "http://localhost:3003/18816895620/mirror_demo.git", - "zip_url": "http://localhost:3003/18816895620/mirror_demo/develop.zip", - "tar_url": "http://localhost:3003/18816895620/mirror_demo/develop.tar.gz", - "last_commit": { - "id": "735674d6696bddbafa993db9c67b40c41246c77f", - "message": "FIX test branch content\n", - "timestamp": 1577694074, - "time_from_now": "1天前" - }, - "author": { - "login": "18816895620", - "image_url": "avatars/User/b" - } - }, - { - "name": "master", - "user_can_push": true, - "user_can_merge": true, - "protected": false, - "http_url": "http://localhost:3003/18816895620/mirror_demo.git", - "zip_url": "http://localhost:3003/18816895620/mirror_demo/master.zip", - "tar_url": "http://localhost:3003/18816895620/mirror_demo/master.tar.gz", - "last_commit": { - "id": "19ac3bc45f62cc87a94b8ecce61101d8fd2dafd2", - "message": "合并pull request测试\n\n该功能很不错,感谢你的建议\n", - "timestamp": 1577244567, - "time_from_now": "6天前" - }, - "author": { - "login": "18816895620", - "image_url": "avatars/User/b" - } - } -] -``` ---- - -### 获取版本列表 -``` -GET /api/:login/:repo_identifier/tags -``` -*示例* -``` -curl -X GET http://localhost:3000/api/18816895620/mirror_demo/tags | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | - - -*返回参数说明:* - -|参数名|类型|说明| --|-|- -|name |string|分支名称| -|user_can_push |boolean|用户是否可push| -|user_can_merge |boolean|用户是否客merge| -|protected |boolean|是否为保护分支| -|http_url |boolean|http链接| -|zip_url |boolean|zip包下载链接| -|tar_url |boolean|tar.gz下载链接| -|last_commit |object|最后提交记录| -|-- id |string|提交记录id| -|-- message |string|提交的说明信息| -|-- timestamp |int|提交时间,为UNIX时间戳| -|-- time_from_now|string|转换后的时间| -|author |object|提交用户| -|-- login |string|用户名称| -|-- image_url |string|用户头像| - - -返回值 -``` -[ - { - "name": "develop", - "user_can_push": true, - "user_can_merge": true, - "protected": false, - "http_url": "http://localhost:3003/18816895620/mirror_demo.git", - "zip_url": "http://localhost:3003/18816895620/mirror_demo/develop.zip", - "tar_url": "http://localhost:3003/18816895620/mirror_demo/develop.tar.gz", - "last_commit": { - "id": "735674d6696bddbafa993db9c67b40c41246c77f", - "message": "FIX test branch content\n", - "timestamp": 1577694074, - "time_from_now": "1天前" - }, - "author": { - "login": "18816895620", - "image_url": "avatars/User/b" - } - }, - { - "name": "master", - "user_can_push": true, - "user_can_merge": true, - "protected": false, - "http_url": "http://localhost:3003/18816895620/mirror_demo.git", - "zip_url": "http://localhost:3003/18816895620/mirror_demo/master.zip", - "tar_url": "http://localhost:3003/18816895620/mirror_demo/master.tar.gz", - "last_commit": { - "id": "19ac3bc45f62cc87a94b8ecce61101d8fd2dafd2", - "message": "合并pull request测试\n\n该功能很不错,感谢你的建议\n", - "timestamp": 1577244567, - "time_from_now": "6天前" - }, - "author": { - "login": "18816895620", - "image_url": "avatars/User/b" - } - } -] -``` ---- - -## 仓库详情 -``` -GET /api/:login/:repo_identifier/ -``` -*示例* -``` -curl -X GET \ -http://localhost:3000/api/18816895620/mirror_demo | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|string |项目id | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|identifier |string|仓库标识| -|project_id |int|项目id| -|project_identifier|string|项目标识| -|praises_count |int|点赞数量| -|forked_count |int|fork数量| -|watchers_count |int|关注数量| -|branches_count |int|分支数量| -|commits_count |int|总提交记录数量| -|issues_count |int|总提交记录数量| -|pull_requests_count |int|总提交记录数量| -|praised |boolean|当前登录用户是否已点赞,true:已点赞,fasle:未点赞, 用户未登录状态为null| -|watched |boolean|当前登录用户是否已关注,true:已关注,fasle:未关注, 用户未登录状态为null| -|permission |string|当前登录用户对该仓库的操作权限, Manager:管理员,可以在线编辑文件、在线新建文件、可以设置仓库的基本信息; Developer:开发人员,可在线编辑文件、在线新建文件、不能设置仓库信息; Reporter: 报告人员,只能查看信息,不能设置仓库信息、不能在线编辑文件、不能在线新建文件;用户未登录时也会返回Reporter, 说明也只有读取文件的权限 | -|size |int|仓库文件大小,单位:KB| -|mirror_url |string|镜像地址, 只有通过镜像过来的项目才会有这个地址| -|ssh_url |string|仓库ssh地址| -|clone_url |string|仓库克隆地址| -|empty |boolean|仓库是否为空,true: 空仓库;false: 非空仓库| -|private |boolean|仓库是否私有,true: 私有仓库;fasle: 非私有的| -|default_branch |string|仓库默认分支| -|full_name |string|仓库全名(带用户名)| -|author |object|提交用户| -|-- login |string|用户login| -|-- name |string|用户姓名| -|-- image_url |string|用户头像| - - -返回值 -``` -{ - "identifier": "mirror_demo", - "project_id": 3263, - "project_identifier": "mirror_demo", - "praises_count": 1, - "forked_count": 0, - "watchers_count": 1, - "branches_count": 6, - "commits_count": 107, - "issues_count": 0, - "pull_requests_count": 0, - "permission": "Manager", - "mirror_url": "https://gitea.com/CasperVector/slew.git", - "watched": true, - "praised": true, - "size": 446, - "ssh_url": "jasder@localhost:18816895620/mirror_demo.git", - "clone_url": "http://localhost:3003/18816895620/mirror_demo.git", - "default_branch": "master", - "empty": false, - "full_name": "18816895620/mirror_demo", - "mirror": false, - "private": false, - "author": { - "login": "18816895620", - "name": "美女", - "image_url": "avatars/User/b" - } -} -``` ---- - -## 获取提交记录列表 -``` -GET /api/:login/:repo_identifier/commits -``` -*示例* -``` -curl -X GET \ --d "sha=develop" \ --d "page=1" \ -http://localhost:3000/api/18816895620/mirror_demo/commits | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|sha |否|string |分支名称、提交记录的sha标识,默认为master分支 | -|page |否|int |页数, 默认为1 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|total_count|int|总记录条数| -|commits |array|提交记录的数组| -|-- sha |string|提交记录sha标识| -|-- message |string|提交的备注说明| -|-- timestamp |int|提交UNIX时间戳| -|-- time_from_now|string|提交距离当前的时间| -|author |object|提交用户| -|-- login |string|用户名称| -|-- image_url |string|用户头像| - - -返回值 -``` -{ - "total_count": 63, - "commits": [ - { - "sha": "19ac3bc45f62cc87a94b8ecce61101d8fd2dafd2", - "message": "合并pull request测试", - "timestamp": 1577244567, - "time_from_now": "7天前", - "author": { - "name": "18816895620", - "image_url": "avatars/User/b" - } - }, - { - "sha": "2b33c5f55214db41879936312ee43611406c4dbd", - "message": "FIX .", - "timestamp": 1577244474, - "time_from_now": "7天前", - "author": { - "name": "18816895620", - "image_url": "avatars/User/b" - } - } - ] -} -``` ---- - -### 点赞 -``` -POST /api/projects/:id/praise_tread/like -``` -*示例* -``` -curl -X POST http://localhost:3000/api/projects/3263/praise_tread/like | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是 |int |项目id | - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|status |int|0:点赞成功,-1:操作失败,2:表示已经点过赞了| - - -返回值 -``` -{ - "status": 0, - "message": "success" -} -``` ---- - -### 取消点赞 -``` -DELETE /api/projects/:id/praise_tread/unlike -``` -*示例* -``` -curl -X DELETE http://localhost:3000/api/projects/3263/praise_tread/unlike | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是 |int |项目id | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|status |int|0:点赞成功,-1:操作失败,2:表示还未点赞| - - -返回值 -``` -{ - "status": 0, - "message": "success" -} -``` ---- - -### 用户是否点过赞 -``` -GET /api/projects/:id/praise_tread/check_like -``` -*示例* -``` -curl -X GET http://localhost:3000/api/projects/3263/praise_tread/check_like | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是 |int |项目id | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|status |int|1:已点过赞,0:未点过赞, -1:请求操作失败| - - -返回值 -``` -{ - "status": 0, - "message": "success" -} -``` ---- - -### 项目的点赞者列表 -``` -GET /api/projects/:id/praise_tread -``` -*示例* -``` -curl -X GET \ --d "page=1" \ --d "limit=5" \ -http://localhost:3000/api/projects/3263/praise_tread | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|page |否|string |页数,第几页 | -|limit |否|string |每页多少条数据,默认15条 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|total_count |int|总条数| -|praises |array|点赞数据| -|-- name |string|用户名称| -|-- login |string|用户标识/登录名(login)| -|-- image_url |string|用户头像| - - - -返回值 -``` -{ - "total_count": 1, - "praises": [ - { - "name": "18816895620", - "login": "18816895620", - "image_url": "avatars/User/b" - } - ] -} -``` ---- - -### 关注(项目) -``` -POST /api/projects/:id/watchers/follow -``` -*示例* -``` -curl -X POST http://localhost:3000/api/projects/3263/watchers/follow | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|status |int|0:点赞成功,-1:操作失败,2:表示已经点过赞了| - - -返回值 -``` -{ - "status": 0, - "message": "响应成功" -} -``` ---- - -### 取消关注 -``` -DELETE /api/projects/:id/watchers/unfollow -``` -*示例* -``` -curl -X DELETE http://localhost:3000//api/projects/3263/watchers/unfollow | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|status |int|0:点赞成功,-1:操作失败,2:表示还未点赞| - - -返回值 -``` -{ - "status": 0, - "message": "响应成功" -} -``` ---- - -### 用户是否关注过项目 -``` -GET /api/projects/:id/watchers/check_watch -``` -*示例* -``` -curl -X GET http://localhost:3000/api/projects/3263/watchers/check_watch | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是 |int |项目id | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|status |int|1:已关注,0:未关注, -1:请求操作失败| - - -返回值 -``` -{ - "status": 0, - "message": "success" -} -``` ---- - -### 项目的关注者列表 -``` -GET /api/projects/:id/watchers -``` -*示例* -``` -curl -X GET \ --d "page=1" \ --d "limit=5" \ -http://localhost:3000//api/projects/3263/watchers | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|page |否|string |页数,第几页 | -|limit |否|string |每页多少条数据,默认15条 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|total_count |int|总条数| -|watchers |array|关注数据| -|-- name |string|用户名称| -|-- login |string|用户标识/登录名(login)| -|-- image_url |string|用户头像| - - -返回值 -``` -{ - "total_count": 1, - "watchers": [ - { - "name": "18816895620", - "login": "18816895620", - "image_url": "avatars/User/b" - } - ] -} -``` ---- - -### 仓库新建文件 -``` -DELETE /api/:login/:repo_identifier/contents -``` -*示例* -``` -curl -X POST \ --d 'filepath=test1_create_file1.rb' \ --d 'branch=master' \ --d 'content=提交的内容' \ --d 'message=test commit ' \ -http://localhost:3000/api/18816895620/mirror_demo/contents.json | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|string |项目id | -|filepath |是|string |文件相对于仓库的路径 | -|content |否|string |内容 | -|message |否|string |提交说明 | -|branch |否|string |分支名称, branch和new_branch必须存在一个 | -|new_branch |否|string |新的分支名称 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|name |string|文件名| -|sha |string|提交文件的sha值| -|size |int|文件大小, 单位:B| -|content |string|base64编码后的文件内容| -|encoding |string|编码方式| -|commit |object|| -|-- message |string|提交备注说明信息| -|-- committer|object|| -|---- name |string|用户名| -|---- email |string|用户邮箱| -|---- date |string|文件创建时间| - - - -返回值 -``` -{ - "name": "test1_create_file12.rb", - "sha": "7b70509105b587e71f5692b9e8ab70851e321f64", - "size": 12, - "content": "Wm5ObWMyRmtaZz09", - "encoding": "base64", - "commit": { - "message": "good luck\n", - "author": { - "name": "18816895620", - "email": "2456233122@qq.com", - "date": "2020-01-07T03:31:20Z" - }, - "committer": { - "name": "18816895620", - "email": "2456233122@qq.com", - "date": "2020-01-07T03:31:20Z" - } - } -} -``` ---- - -### 更新仓库中的文件 -``` -PUT /api/:login/:repo_identifier/contents/files/update -``` -*示例* -``` -curl -X PUT \ --d 'filepath=text1.rb' \ --d 'branch=master' \ --d 'content=ruby code' \ --d 'message=更改提交信息' \ --d 'from_path=text.rb' \ --d "sha=57426eb21e4ceabdf4b206f022077e0040" \ -http://localhost:3000/api/18816895620/mirror_demo/contents/files/update.json | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|filepath |是|string |文件相对于仓库的路径(或修改后的文件路径) | -|from_path |是|string |原文件相对于仓库的路径, 只有当需要修改原文件名称时,才需要该参数 | -|sha |是|string |文件的sha标识值 | -|content |是|string |内容 | -|message |否|string |提交说明 | -|branch |否|string |分支名称, branch和new_branch必须存在一个,且只能存在一个 | -|new_branch |否|string |新的分支名称 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|name |string|文件名| -|sha |string|提交文件的sha值| -|size |int|文件大小, 单位:B| -|content |string|base64编码后的文件内容| -|encoding |string|编码方式| -|commit |object|| -|-- message |string|提交备注说明信息| -|-- committer|object|| -|---- name |string|用户名| -|---- email |string|用户邮箱| -|---- date |string|文件创建时间| - - -返回值 -``` -{ - "name": "test1_create_file6.rb", - "sha": "57426eb21e4ceabdf4b206f022257e08077e0040", - "size": 16, - "content": "5o+Q5Lqk55qE5YaF5a65MQ==", - "encoding": "base64", - "commit": { - "message": "更改提交信息\n", - "author": { - "name": "18816895620", - "email": "2456233122@qq.com", - "date": "2020-01-08T07:05:15Z" - }, - "committer": { - "name": "18816895620", - "email": "2456233122@qq.com", - "date": "2020-01-08T07:05:15Z" - } - } -} -``` ---- - -### 删除仓库中的文件 -``` -DELETE /api/:login/:repo_identifier/contents/files/delete -``` -*示例* -``` -curl -X DELETE \ --d 'filepath=test1_create_file12.rb' \ --d 'test delete file' \ --d 'sha=7b70509105b587e71f5692b9e8ab70851e321f64' \ -http://localhost:3000/api/18816895620/mirror_demo/contents/files/delete | jq -``` -*请求参数说明:* - -|参数名|必选|类型|说明| -|-|-|-|-| -|id |是|int |项目id | -|filepath |是|string |文件相对于仓库的路径 | -|message |否|string |提交说明 | -|branch |否|string |分支名称, 默认为master分支| -|new_branch |否|string |新的分支名称 | - - -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|sha |string|提交文件的sha值| -|commit |object|| -|-- message |string|提交备注说明信息| -|-- committer|object|| -|---- name |string|用户名| -|---- email |string|用户邮箱| -|---- date |string|文件创建时间| - - -返回值 -``` -{ - "commit": { - "sha": "7b70509105b587e71f5692b9e8ab70851e321f64", - "message": "Delete 'test1_create_file11.rb'\n", - "author": { - "name": "18816895620", - "email": "2456233122@qq.com", - "date": "2020-01-08T07:57:34Z" - }, - "committer": { - "name": "18816895620", - "email": "2456233122@qq.com", - "date": "2020-01-08T07:57:34Z" - } - } -} -``` ---- diff --git a/deployment.md b/deployment.md new file mode 100644 index 000000000..e8e510f38 --- /dev/null +++ b/deployment.md @@ -0,0 +1,2004 @@ + +# 本地开发部署步骤 + +#### 1. 安装依赖包 + +```bash +bundle install +``` + +#### 2. 配置初始化文件 +进入项目根目录执行一下命令: + +```bash +cp config/configuration.yml.example config/configuration.yml +cp config/database.yml.example config/database.yml +touch config/redis.yml +touch config/elasticsearch.yml +``` + +#### 3. 创建数据库 + +```bash +rails db:create +``` + +#### 4. 导入数据表结构 + +```bash +bundle exec rake sync_table_structure:import_csv +``` + +#### 5. 执行migrate迁移文件 +```bash +rails db:migrate RAILS_ENV=development +``` + +#### 6. 启动rails服务 +```bash +rails s +``` + +#### 7. 浏览器访问 +在浏览器中输入如下地址访问: +```bash +http://localhost:3000/projects +``` + +--- + + +# API文档 + +## 基本介绍 + +开发API服务地址: + +https://testgitea.trustie.net/ + + +响应状态说明: + +|字段|类型|说明| +|-|-|-| +|status |int |响应状态码,0:请求成功,-1: 请求失败| +|message |string |响应说明 | + + +### API接口 +--- + +#### 用户注册(通过其他平台) +``` +POST accounts/remote_register +``` +*示例* +``` +curl -X POST \ +-d "email=2456233122@qq.com" \ +-d "password=djs_D_00001" \ +-d "username=16895620" \ +-d "platform=forge" \ +http://localhost:3000/api/accounts/remote_register | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|email |是|string |邮箱 | +|username |是|string |登录名 | +|password |是|string |秘密 | +|platform |否|string |用户来源的相关平台,取值范围['educoder', 'trustie', 'forge'], 默认值为forge | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|user|json object |返回数据| +|-- id |int |用户id | +|-- token |string|用户token| + + +返回值 +``` +{ + "status": 0, + "message": "success", + "user": { + "id": 36400, + "token": "8c87a80d9cfacc92fcb2451845104f35119eda96" + } +} +``` +--- + +#### 获取当前登录用户信息 +``` +GET api/users/me +``` +*示例* +``` +curl -X GET http://localhost:3000/api/users/me | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|user_id |int |用户id | +|username |string|用户名称| +|admin |boolean|是否为管理用户| +|login |string|登录名| +|image_url |string|用户头像| + + +返回值 +``` +{ + "username": "18816895620", + "login": "18816895620", + "user_id": 36401, + "image_url": "avatars/User/b", + "admin": false +} +``` +--- + +#### 用户列表(带搜索功能) +``` +GET api/users/list +``` +*示例* +``` +curl -X GET \ +-d "limit=10" \ +-d "search=18816895620" +http://localhost:3000/api/users/list | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|page |否|int |页数,第几页 | +|limit |否|int |每页多少条数据,默认15条 | +|search |否|string |用户名、登录名匹配搜索 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int |总用户条数 | +|users |array| | +|-- username |string|用户全名| +|-- login |string|用户登录名| +|-- user_id |int|用户id| +|-- image_url |string|用户头像| + +返回值 +``` +{ + "total_count": 1, + "users": [ + { + "username": "18816895620", + "login": "18816895620", + "user_id": 36401, + "image_url": "avatars/User/b" + } + ] +} +``` +--- + +#### 获取项目类别列表(可根据名称搜素) +``` +GET api/project_categories +``` +*示例* +``` +curl -X GET \ +-d "name=大数据" \ +http://localhost:3000/api/project_categories/ | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|name |否|string |类别名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|project_categories|array |返回数据| +|-- id |int |类别id | +|-- name |string|类别名称| + + +返回值 +``` +{ + "project_categories": [ + { + "id": 1, + "name": "大数据" + } + ] +} +``` +--- + +#### 获取项目语言列表(可根据名称搜素) +``` +GET api/project_languages +``` +*示例* +``` +curl -X GET \ +-d "name=Ruby" \ +http://localhost:3000/api/project_languages/ | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|name |否|string |类别名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|project_languages|array |返回数据| +|-- id |int |语言id | +|-- name |string|语言名称| + + +返回值 +``` +{ + "project_languages": [ + { + "id": 1, + "name": "Ruby" + } + ] +} +``` +--- + +#### 获取.gitignore模板列表(可根据名称搜素) +``` +GET api/ignores +``` +*示例* +``` +curl -X GET \ +-d "name=Ada" \ +http://localhost:3000/api/ignores/ | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|name |否|string |gitignore名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|ignores|array |返回数据| +|-- id |int |id | +|-- name |string|gitignore名称| + + +返回值 +``` +{ + "ignores": [ + { + "id": 1, + "name": "Ada" + } + ] +} +``` +--- + +#### 获取开源许可证列表(可根据名称搜素) +``` +GET api/licenses +``` +*示例* +``` +curl -X GET \ +-d "name=AFL" \ +http://localhost:3000/api/licenses/ | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|name |否|string |开源许可证名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|licenses|array |返回数据| +|-- id |int |id | +|-- name |string|开源许可证名称| + + +返回值 +``` +{ + "licenses": [ + { + "id": 57, + "name": "AFL-1.2" + }, + { + "id": 76, + "name": "AFL-3.0" + }, + { + "id": 214, + "name": "AFL-1.1" + }, + { + "id": 326, + "name": "AFL-2.1" + }, + { + "id": 350, + "name": "AFL-2.0" + } + ] +} +``` +--- + +#### 创建项目 +``` +POST api/projects +``` +*示例* +``` +curl -X POST \ +-d "user_id=36401" \ +-d "name=hnfl_demo" \ +-d "description=my first project" \ +-d "repository_name=hnfl_demo" \ +-d "project_category_id=1" \ +-d "project_language_id=2" \ +-d "ignore_id=2" \ +-d "license_id=1" \ +http://localhost:3000/api/projects/ | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|user_id |是|int |用户id或者组织id | +|name |是|string |项目名称 | +|description |是|string |项目描述 | +|repository_name |是|string |仓库名称, 只含有数字、字母、下划线不能以下划线开头和结尾,且唯一 | +|project_category_id|是|int |项目类别id | +|project_language_id|是|int |项目语言id | +|ignore_id |否|int |gitignore相关id | +|license_id |否|int |开源许可证id | +|private |否|boolean|项目是否私有, true:为私有,false: 公开,默认为公开 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |id | +|name |string|项目名称| + + +返回值 +``` +{ + "id": 3240, + "name": "好项目" +} +``` +--- + +#### 新建镜像项目 +``` +POST api/projects/migrate +``` +*示例* +``` +curl -X POST \ +-d "user_id=36401" \ +-d "clone_addr=https://gitea.com/mx8090alex/golden.git" \ +-d "name=golden" \ +-d "description=golden" \ +-d "repository_name=golden" \ +-d "project_category_id=1" \ +-d "project_language_id=2" \ +http://localhost:3000/api/projects/migrate | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|user_id |是|int |用户id或者组织id | +|name |是|string |项目名称 | +|clone_addr |是|string |镜像项目clone地址 | +|description |否|string |项目描述 | +|repository_name |是|string |仓库名称, 只含有数字、字母、下划线不能以下划线开头和结尾,且唯一 | +|project_category_id|是|int |项目类别id | +|project_language_id|是|int |项目语言id | +|private |否|boolean|项目是否私有, true:为私有,false: 非私有,默认为公开 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |id | +|name |string|项目名称| + + +返回值 +``` +{ + "id": 3263, + "name": "ni项目" +} +``` +--- + +#### 项目详情 +``` +GET api/projects/:id +``` +*示例* +``` +curl -X GET http://localhost:3000/api/projects/3263 | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |id | +|name |string|项目名称| +|identifier |string|项目标识| +|is_public |boolean|项目是否公开, true:公开,false:私有| +|description |string|项目简介| +|repo_id |int|仓库id| +|repo_identifier|string|仓库标识| + + +返回值 +``` +{ + "name": "ni项目", + "identifier": "mirror_demo", + "is_public": true, + "description": "my first project mirror_demo", + "repo_id": 75073, + "repo_identifier": "mirror_demo" +} +``` +--- + +#### 编辑仓库信息 +``` +GET /api/:login/:repo_identifier/edit.json +``` +*示例* +``` +curl -X GET http://localhost:3000/api/18816895620/mirror_demo/edit.json | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|identifier |string |仓库标识 | +|project_id |int|项目id| +|project_name |string|项目名称| +|project_identifier |string|项目标识| +|project_description |string|项目简介| +|project_category_id |int|项目类别id| +|project_language_id |int|项目语言id| +|private |boolean|项目是否私有, true:为私有,false: 公开 | + + +返回值 +``` +{ + "identifier": "mirror_demo", + "project_id": 3263, + "project_name": "ni项目", + "project_identifier": "mirror_demo", + "project_description": "my first project mirror_demo", + "project_category_id": 1, + "project_language_id": 2, + "private": false +} +``` +--- + +#### 修改项目信息 +``` +PATCH api/projects/:id +``` +*示例* +``` +curl -X PATCH \ +-d "name=hnfl_demo" \ +-d "description=my first project" \ +-d "project_category_id=1" \ +-d "project_language_id=2" \ +-d "private=true" \ +http://localhost:3000/api/projects/3263.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|name |否|string |项目名称 | +|description |否|string |项目描述 | +|project_category_id|否|int |项目类别id | +|project_language_id|否|int |项目语言id | +|private |否|boolean|项目是否私有, true:为私有,false: 公开,默认为公开 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|id | +|identifier |string|项目标识| +|name |string|项目名称| +|description |string|项目简介| +|project_category_id|int|项目类别id| +|project_language_id|int|项目语言id| +|private |否|boolean|项目是否私有, true:为私有,false: 公开,默认为公开 | + + +返回值 +``` +{ + "id": 3263, + "identifier": "mirror_demo", + "name": "hnfl_demo", + "description": "my first project", + "project_category_id": 1, + "project_language_id": 2, + "is_public": true +} +``` +--- + +#### 删除项目 +``` +DELETE api/projects/:id +``` +*示例* +``` +curl -X DELETE http://localhost:3000/api/projects/3263.json | jq +``` + +注:只有超级管理员和项目拥有者才能删除仓库 + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|返回状态, 0: 表示操作成功 | +|message |string|返回信息说明| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +#### 项目添加成员 +``` +POST api/projects/:id/members +``` +*示例* +``` +curl -X POST \ +-d "user_id=36406" \ +http://localhost:3000/api/projects/3297/members | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|user_id |是|int |用户id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int |0:添加成功, -1: 添加失败, 1: 表示已经是项目成员 | +|message |string|返回信息说明| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +#### 项目删除成员 +``` +DELETE api/projects/:id/members/remove +``` +*示例* +``` +curl -X DELETE \ +-d "user_id=36400" \ +http://localhost:3000/api/projects/3263/members/remove | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|user_id |是|int |用户id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int |0:移除成功, -1: 移除失败, 1: 表示还不是项目成员 | +|message |string|返回信息说明| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +#### 更改项目成员角色/权限 +``` +PUT api/projects/:id/members/change_role +``` +*示例* +``` +curl -X PUT \ +-d "user_id=36400" \ +-d "role=Developer" \ +http://localhost:3000/api/projects/3263/members/change_role | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|user_id |是|int |用户id | +|role |是|string |取值范围:"Manager", "Developer", "Reporter";分别为项目管理人员(拥有所有操作权限)、项目开发人员(只拥有读写权限)、项目报告人员(只拥有读权限) | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int |0:角色更改成功, -1: 更改失败失败, 1: 表示还不是项目成员 | +|message |string|返回信息说明| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + + +#### 项目成员列表 +``` +GET api/projects/:id/members +``` +*示例* +``` +curl -X GET \ +-d "page=1" \ +-d "limit=5" \ +http://localhost:3000/api/projects/3263/members | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认15条 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int |返回记录总条数 | +|members |array|项目成员信息| +|-- id |int|用户id| +|-- name |string|用户名称| +|-- login |string|用户登录名/标识| +|-- image_url |string|用户头像| +|-- is_owner |boolean|是否是项目的拥有者,true:是, false:不是| +|-- role |string|该用户在项目中的角色, Manager: 管理员(拥有操作权限); Developer:开发人员(只拥有读写权限); Reporter:报告人员(只拥有读权限)| + + +返回值 +``` +{ + "total_count": 2, + "members": [ + { + "id": 36401, + "name": "18816895620", + "login": "18816895620", + "image_url": "avatars/User/b", + "is_owner": true, + "role": "Manager" + }, + { + "id": 36399, + "name": "18816365620", + "login": "18816365620", + "image_url": "avatars/User/b", + "is_owner": false, + "role": "Developer" + } + ] +} +``` +--- + +#### Fork项目 +``` +POST /api/projects/:project_id/forks +``` +*示例* +``` +curl -X POST http://localhost:3000/api/projects/3297/forks | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|project_id |是|int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |项目id | +|identifier |string|项目标识| + + +返回值 +``` +{ + "id": 3290, + "identifier": "newadm" +} +``` +--- + +#### 获取代码目录列表 +``` +POST api/:login/:repo_identifier/entries +``` +*示例* +``` +curl -X GET \ +-d "ref=develop" \ +http://localhost:3000/api/18816895620/mirror_demo/entries | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |id | +|name |string|文件夹或文件名称| +|path |string|文件夹或文件相对路径| +|type |string|文件类型, file:文件,dir:文件目录| +|size |int|文件夹或文件大小 单位B| +|content |string|文件内容,| +|target |string|标签| + +返回值 +``` +[ + { + "name": "Manual", + "path": "Manual", + "sha": "c2f18765235076b4c835b3e31262b3ee65176a75", + "type": "file", + "size": 12579, + "content": null, + "target": null, + "commit": null + }, + { + "name": "README", + "path": "README", + "sha": "91a29176828eba5c5598f5d4a95458e861f271ec", + "type": "file", + "size": 1767, + "content": null, + "target": null, + "commit": null + }, + { + "name": "base", + "path": "base", + "sha": "7adbe5698e02dba062216333d5e1d16b36ae1cbd", + "type": "dir", + "size": 0, + "content": null, + "target": null, + "commit": null + } +] +``` +--- + +#### 获取子目录代码列表/编辑某个具体的文件 +``` +GET api/:login/:repo_identifier/sub_entries +``` +*示例* +``` +curl -X GET \ +-d "ref=master" \ +-d "filepath=test1_create_file.rb" \ +http://localhost:3000/api/18816895620/mirror_demo/sub_entries | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|filepath |是|string |文件夹、文件的相对路径 | +|ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |id | +|name |string|文件夹或文件名称| +|path |string|文件夹或文件相对路径| +|type |string|文件类型, file:文件,dir:文件目录| +|size |int|文件夹或文件大小 单位KB| +|content |string|文件内容,| +|target |string|标签| +|url |string|文件访问链接,带分支| +|html_url |string|文件访问链接,未标识分支| +|git_url |string|文件夹或文件的git仓库访问链接| +|download_url |string|文件下载、文件内容访问链接| + +返回值 +``` +[ + { + "name": "build.rc", + "path": "lib/build.rc", + "type": "", + "size": 1268, + "content": null, + "target": null, + "url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/contents/lib/build.rc?ref=master", + "html_url": "http://localhost:3003/18816895620/mirror_demo/src/branch/master/lib/build.rc", + "git_url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/git/blobs/191fcf1a63b3777e2977fcede7dd5309efdd70fe", + "download_url": null + }, + { + "name": "cfg.rc", + "path": "lib/cfg.rc", + "type": "file", + "size": 107, + "content": null, + "target": null, + "url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/contents/lib/cfg.rc?ref=master", + "html_url": "http://localhost:3003/18816895620/mirror_demo/src/branch/master/lib/cfg.rc", + "git_url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/git/blobs/0b91ba0ed1c00e130c77bb9058af3787fea986a0", + "download_url": "http://localhost:3003/18816895620/mirror_demo/raw/branch/master/lib/cfg.rc" + }, + { + "name": "fn", + "path": "lib/fn", + "type": "dir", + "size": 0, + "content": null, + "target": null, + "url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/contents/lib/fn?ref=master", + "html_url": "http://localhost:3003/18816895620/mirror_demo/src/branch/master/lib/fn", + "git_url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/git/blobs/e33bd45949ef8f804471d0b6b2c59728eb445989", + "download_url": null + } +] +``` +--- + +#### 项目类别列表(用于项目列表左侧导航中的项目类别列表) +``` +GET api/project_categories/group_list +``` +*示例* +``` +curl -X GET http://localhost:3000/api/project_categories/group_list | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |项目分类id | +|name |string|项目分类名称| +|projects_count |int |项目数量| + + +返回值 +``` +[ + { + "id": 1, + "name": "大数据", + "projects_count": 30 + }, + { + "id": 2, + "name": "机器学习", + "projects_count": 1 + }, + { + "id": 3, + "name": "深度学习", + "projects_count": 1 + } +] +``` +--- + +#### 项目类型列表(用于项目列表左侧导航上方中的项目类型列表) +``` +GET api/projects/group_type_list +``` +*示例* +``` +curl -X GET http://localhost:3000/api/projects/group_type_list | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|project_type |string|项目类型 | +|name |string|项目类型名称| +|projects_count |int |项目数量| + + +返回值 +``` +[ + { + "project_type": "common", + "name": "开源托管项目", + "projects_count": 2106 + }, + { + "project_type": "mirror", + "name": "开源镜像项目", + "projects_count": 1 + } +] +``` +--- + +#### 项目列表 +``` +GET api/projects +``` +*示例* +``` +curl -X GET \ +-d "page=1" \ +-d "limit=5" \ +http://localhost:3000/api/projects | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认15条 | +|sort_by |否|string |排序类型, 取值:updated_on \| created_on \| forked_count \| praises_count, updated_on: 更新时间排序,created_on: 创建时间排序,forked_count: fork数据排序,praises_count: 点赞数量排序,默认为updated_on更新时间排序 | +|sort_direction|否|string |排序方式,取值为: desc \| asc; desc: 降序排序, asc: 升序排序, 默认为:desc | +|search |否|string |按照项目名称搜索 | +|category_id |否|int |项目类别id | +|language_id |否|int |项目语言id | +|project_type |否|string |项目类型, 取值为:common \| mirror; common:开源托管项目, mirror:开源镜像项目 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int |项目总条数 | +|id |string |项目id | +|name |string|项目名称| +|description |string|项目简介| +|visits |int|流量数| +|forked_count |int|被fork的数量| +|praises_count |int|star数量| +|is_public |boolean|是否公开, true:公开,false:未公开| +|mirror_url |string|镜像url| +|last_update_time|int|最后更新时间,为UNIX格式的时间戳| +|author |object|项目创建者| +|-- name |string|用户名,也是用户标识| +|category |object|项目类别| +|-- id |int|项目类型id| +|-- name |string|项目类型名称| +|language |object|项目语言| +|-- id |int|项目语言id| +|-- name |string|项目语言名称| + + +返回值 +``` +{ + "total_count": 3096, + "projects": [ + { + "id": 1, + "name": "hnfl_demo1", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": true, + "mirror_url": null, + "last_update_time": 1577697461, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + }, + { + "id": 2, + "name": "hnfl_demo", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": true, + "mirror_url": null, + "last_update_time": 1577697403, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + }, + { + "id": 3, + "name": "统计局", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": true, + "mirror_url": null, + "last_update_time": 1577415173, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + }, + { + "id": 5, + "name": "开源同名", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": false, + "mirror_url": "https://gitea.com/CasperVector/slew.git", + "last_update_time": 1577346228, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + }, + { + "id": 7, + "name": "开源支持", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": true, + "mirror_url": null, + "last_update_time": 1577341572, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + } + ] +} +``` +--- + +### 获取分支列表 +``` +GET /api/projects/:identifier/branches +``` +*示例* +``` +curl -X GET http://localhost:3000/api/projects/mirror_demo/branches | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|identifier |是|string |项目标识 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|name |string|分支名称| +|user_can_push |boolean|用户是否可push| +|user_can_merge |boolean|用户是否客merge| +|protected |boolean|是否为保护分支| +|http_url |boolean|http链接| +|zip_url |boolean|zip包下载链接| +|tar_url |boolean|tar.gz下载链接| +|last_commit |object|最后提交记录| +|-- id |string|提交记录id| +|-- message |string|提交的说明信息| +|-- timestamp |int|提交时间,为UNIX时间戳| +|-- time_from_now|string|转换后的时间| +|author |object|提交用户| +|-- login |string|用户名称| +|-- image_url |string|用户头像| + + +返回值 +``` +[ + { + "name": "develop", + "user_can_push": true, + "user_can_merge": true, + "protected": false, + "http_url": "http://localhost:3003/18816895620/mirror_demo.git", + "zip_url": "http://localhost:3003/18816895620/mirror_demo/develop.zip", + "tar_url": "http://localhost:3003/18816895620/mirror_demo/develop.tar.gz", + "last_commit": { + "id": "735674d6696bddbafa993db9c67b40c41246c77f", + "message": "FIX test branch content\n", + "timestamp": 1577694074, + "time_from_now": "1天前" + }, + "author": { + "login": "18816895620", + "image_url": "avatars/User/b" + } + }, + { + "name": "master", + "user_can_push": true, + "user_can_merge": true, + "protected": false, + "http_url": "http://localhost:3003/18816895620/mirror_demo.git", + "zip_url": "http://localhost:3003/18816895620/mirror_demo/master.zip", + "tar_url": "http://localhost:3003/18816895620/mirror_demo/master.tar.gz", + "last_commit": { + "id": "19ac3bc45f62cc87a94b8ecce61101d8fd2dafd2", + "message": "合并pull request测试\n\n该功能很不错,感谢你的建议\n", + "timestamp": 1577244567, + "time_from_now": "6天前" + }, + "author": { + "login": "18816895620", + "image_url": "avatars/User/b" + } + } +] +``` +--- + +### 获取版本列表 +``` +GET /api/:login/:repo_identifier/tags +``` +*示例* +``` +curl -X GET http://localhost:3000/api/18816895620/mirror_demo/tags | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +-|-|- +|name |string|分支名称| +|user_can_push |boolean|用户是否可push| +|user_can_merge |boolean|用户是否客merge| +|protected |boolean|是否为保护分支| +|http_url |boolean|http链接| +|zip_url |boolean|zip包下载链接| +|tar_url |boolean|tar.gz下载链接| +|last_commit |object|最后提交记录| +|-- id |string|提交记录id| +|-- message |string|提交的说明信息| +|-- timestamp |int|提交时间,为UNIX时间戳| +|-- time_from_now|string|转换后的时间| +|author |object|提交用户| +|-- login |string|用户名称| +|-- image_url |string|用户头像| + + +返回值 +``` +[ + { + "name": "develop", + "user_can_push": true, + "user_can_merge": true, + "protected": false, + "http_url": "http://localhost:3003/18816895620/mirror_demo.git", + "zip_url": "http://localhost:3003/18816895620/mirror_demo/develop.zip", + "tar_url": "http://localhost:3003/18816895620/mirror_demo/develop.tar.gz", + "last_commit": { + "id": "735674d6696bddbafa993db9c67b40c41246c77f", + "message": "FIX test branch content\n", + "timestamp": 1577694074, + "time_from_now": "1天前" + }, + "author": { + "login": "18816895620", + "image_url": "avatars/User/b" + } + }, + { + "name": "master", + "user_can_push": true, + "user_can_merge": true, + "protected": false, + "http_url": "http://localhost:3003/18816895620/mirror_demo.git", + "zip_url": "http://localhost:3003/18816895620/mirror_demo/master.zip", + "tar_url": "http://localhost:3003/18816895620/mirror_demo/master.tar.gz", + "last_commit": { + "id": "19ac3bc45f62cc87a94b8ecce61101d8fd2dafd2", + "message": "合并pull request测试\n\n该功能很不错,感谢你的建议\n", + "timestamp": 1577244567, + "time_from_now": "6天前" + }, + "author": { + "login": "18816895620", + "image_url": "avatars/User/b" + } + } +] +``` +--- + +## 仓库详情 +``` +GET /api/:login/:repo_identifier/ +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/18816895620/mirror_demo | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|string |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|identifier |string|仓库标识| +|project_id |int|项目id| +|project_identifier|string|项目标识| +|praises_count |int|点赞数量| +|forked_count |int|fork数量| +|watchers_count |int|关注数量| +|branches_count |int|分支数量| +|commits_count |int|总提交记录数量| +|issues_count |int|总提交记录数量| +|pull_requests_count |int|总提交记录数量| +|praised |boolean|当前登录用户是否已点赞,true:已点赞,fasle:未点赞, 用户未登录状态为null| +|watched |boolean|当前登录用户是否已关注,true:已关注,fasle:未关注, 用户未登录状态为null| +|permission |string|当前登录用户对该仓库的操作权限, Manager:管理员,可以在线编辑文件、在线新建文件、可以设置仓库的基本信息; Developer:开发人员,可在线编辑文件、在线新建文件、不能设置仓库信息; Reporter: 报告人员,只能查看信息,不能设置仓库信息、不能在线编辑文件、不能在线新建文件;用户未登录时也会返回Reporter, 说明也只有读取文件的权限 | +|size |int|仓库文件大小,单位:KB| +|mirror_url |string|镜像地址, 只有通过镜像过来的项目才会有这个地址| +|ssh_url |string|仓库ssh地址| +|clone_url |string|仓库克隆地址| +|empty |boolean|仓库是否为空,true: 空仓库;false: 非空仓库| +|private |boolean|仓库是否私有,true: 私有仓库;fasle: 非私有的| +|default_branch |string|仓库默认分支| +|full_name |string|仓库全名(带用户名)| +|author |object|提交用户| +|-- login |string|用户login| +|-- name |string|用户姓名| +|-- image_url |string|用户头像| + + +返回值 +``` +{ + "identifier": "mirror_demo", + "project_id": 3263, + "project_identifier": "mirror_demo", + "praises_count": 1, + "forked_count": 0, + "watchers_count": 1, + "branches_count": 6, + "commits_count": 107, + "issues_count": 0, + "pull_requests_count": 0, + "permission": "Manager", + "mirror_url": "https://gitea.com/CasperVector/slew.git", + "watched": true, + "praised": true, + "size": 446, + "ssh_url": "jasder@localhost:18816895620/mirror_demo.git", + "clone_url": "http://localhost:3003/18816895620/mirror_demo.git", + "default_branch": "master", + "empty": false, + "full_name": "18816895620/mirror_demo", + "mirror": false, + "private": false, + "author": { + "login": "18816895620", + "name": "美女", + "image_url": "avatars/User/b" + } +} +``` +--- + +## 获取提交记录列表 +``` +GET /api/:login/:repo_identifier/commits +``` +*示例* +``` +curl -X GET \ +-d "sha=develop" \ +-d "page=1" \ +http://localhost:3000/api/18816895620/mirror_demo/commits | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|sha |否|string |分支名称、提交记录的sha标识,默认为master分支 | +|page |否|int |页数, 默认为1 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count|int|总记录条数| +|commits |array|提交记录的数组| +|-- sha |string|提交记录sha标识| +|-- message |string|提交的备注说明| +|-- timestamp |int|提交UNIX时间戳| +|-- time_from_now|string|提交距离当前的时间| +|author |object|提交用户| +|-- login |string|用户名称| +|-- image_url |string|用户头像| + + +返回值 +``` +{ + "total_count": 63, + "commits": [ + { + "sha": "19ac3bc45f62cc87a94b8ecce61101d8fd2dafd2", + "message": "合并pull request测试", + "timestamp": 1577244567, + "time_from_now": "7天前", + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + } + }, + { + "sha": "2b33c5f55214db41879936312ee43611406c4dbd", + "message": "FIX .", + "timestamp": 1577244474, + "time_from_now": "7天前", + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + } + } + ] +} +``` +--- + +### 点赞 +``` +POST /api/projects/:id/praise_tread/like +``` +*示例* +``` +curl -X POST http://localhost:3000/api/projects/3263/praise_tread/like | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是 |int |项目id | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:点赞成功,-1:操作失败,2:表示已经点过赞了| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +### 取消点赞 +``` +DELETE /api/projects/:id/praise_tread/unlike +``` +*示例* +``` +curl -X DELETE http://localhost:3000/api/projects/3263/praise_tread/unlike | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是 |int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:点赞成功,-1:操作失败,2:表示还未点赞| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +### 用户是否点过赞 +``` +GET /api/projects/:id/praise_tread/check_like +``` +*示例* +``` +curl -X GET http://localhost:3000/api/projects/3263/praise_tread/check_like | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是 |int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|1:已点过赞,0:未点过赞, -1:请求操作失败| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +### 项目的点赞者列表 +``` +GET /api/projects/:id/praise_tread +``` +*示例* +``` +curl -X GET \ +-d "page=1" \ +-d "limit=5" \ +http://localhost:3000/api/projects/3263/praise_tread | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认15条 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int|总条数| +|praises |array|点赞数据| +|-- name |string|用户名称| +|-- login |string|用户标识/登录名(login)| +|-- image_url |string|用户头像| + + + +返回值 +``` +{ + "total_count": 1, + "praises": [ + { + "name": "18816895620", + "login": "18816895620", + "image_url": "avatars/User/b" + } + ] +} +``` +--- + +### 关注(项目) +``` +POST /api/projects/:id/watchers/follow +``` +*示例* +``` +curl -X POST http://localhost:3000/api/projects/3263/watchers/follow | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:点赞成功,-1:操作失败,2:表示已经点过赞了| + + +返回值 +``` +{ + "status": 0, + "message": "响应成功" +} +``` +--- + +### 取消关注 +``` +DELETE /api/projects/:id/watchers/unfollow +``` +*示例* +``` +curl -X DELETE http://localhost:3000//api/projects/3263/watchers/unfollow | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:点赞成功,-1:操作失败,2:表示还未点赞| + + +返回值 +``` +{ + "status": 0, + "message": "响应成功" +} +``` +--- + +### 用户是否关注过项目 +``` +GET /api/projects/:id/watchers/check_watch +``` +*示例* +``` +curl -X GET http://localhost:3000/api/projects/3263/watchers/check_watch | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是 |int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|1:已关注,0:未关注, -1:请求操作失败| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +### 项目的关注者列表 +``` +GET /api/projects/:id/watchers +``` +*示例* +``` +curl -X GET \ +-d "page=1" \ +-d "limit=5" \ +http://localhost:3000//api/projects/3263/watchers | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认15条 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int|总条数| +|watchers |array|关注数据| +|-- name |string|用户名称| +|-- login |string|用户标识/登录名(login)| +|-- image_url |string|用户头像| + + +返回值 +``` +{ + "total_count": 1, + "watchers": [ + { + "name": "18816895620", + "login": "18816895620", + "image_url": "avatars/User/b" + } + ] +} +``` +--- + +### 仓库新建文件 +``` +DELETE /api/:login/:repo_identifier/contents +``` +*示例* +``` +curl -X POST \ +-d 'filepath=test1_create_file1.rb' \ +-d 'branch=master' \ +-d 'content=提交的内容' \ +-d 'message=test commit ' \ +http://localhost:3000/api/18816895620/mirror_demo/contents.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|string |项目id | +|filepath |是|string |文件相对于仓库的路径 | +|content |否|string |内容 | +|message |否|string |提交说明 | +|branch |否|string |分支名称, branch和new_branch必须存在一个 | +|new_branch |否|string |新的分支名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|name |string|文件名| +|sha |string|提交文件的sha值| +|size |int|文件大小, 单位:B| +|content |string|base64编码后的文件内容| +|encoding |string|编码方式| +|commit |object|| +|-- message |string|提交备注说明信息| +|-- committer|object|| +|---- name |string|用户名| +|---- email |string|用户邮箱| +|---- date |string|文件创建时间| + + + +返回值 +``` +{ + "name": "test1_create_file12.rb", + "sha": "7b70509105b587e71f5692b9e8ab70851e321f64", + "size": 12, + "content": "Wm5ObWMyRmtaZz09", + "encoding": "base64", + "commit": { + "message": "good luck\n", + "author": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-07T03:31:20Z" + }, + "committer": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-07T03:31:20Z" + } + } +} +``` +--- + +### 更新仓库中的文件 +``` +PUT /api/:login/:repo_identifier/contents/files/update +``` +*示例* +``` +curl -X PUT \ +-d 'filepath=text1.rb' \ +-d 'branch=master' \ +-d 'content=ruby code' \ +-d 'message=更改提交信息' \ +-d 'from_path=text.rb' \ +-d "sha=57426eb21e4ceabdf4b206f022077e0040" \ +http://localhost:3000/api/18816895620/mirror_demo/contents/files/update.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|filepath |是|string |文件相对于仓库的路径(或修改后的文件路径) | +|from_path |是|string |原文件相对于仓库的路径, 只有当需要修改原文件名称时,才需要该参数 | +|sha |是|string |文件的sha标识值 | +|content |是|string |内容 | +|message |否|string |提交说明 | +|branch |否|string |分支名称, branch和new_branch必须存在一个,且只能存在一个 | +|new_branch |否|string |新的分支名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|name |string|文件名| +|sha |string|提交文件的sha值| +|size |int|文件大小, 单位:B| +|content |string|base64编码后的文件内容| +|encoding |string|编码方式| +|commit |object|| +|-- message |string|提交备注说明信息| +|-- committer|object|| +|---- name |string|用户名| +|---- email |string|用户邮箱| +|---- date |string|文件创建时间| + + +返回值 +``` +{ + "name": "test1_create_file6.rb", + "sha": "57426eb21e4ceabdf4b206f022257e08077e0040", + "size": 16, + "content": "5o+Q5Lqk55qE5YaF5a65MQ==", + "encoding": "base64", + "commit": { + "message": "更改提交信息\n", + "author": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-08T07:05:15Z" + }, + "committer": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-08T07:05:15Z" + } + } +} +``` +--- + +### 删除仓库中的文件 +``` +DELETE /api/:login/:repo_identifier/contents/files/delete +``` +*示例* +``` +curl -X DELETE \ +-d 'filepath=test1_create_file12.rb' \ +-d 'test delete file' \ +-d 'sha=7b70509105b587e71f5692b9e8ab70851e321f64' \ +http://localhost:3000/api/18816895620/mirror_demo/contents/files/delete | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|filepath |是|string |文件相对于仓库的路径 | +|message |否|string |提交说明 | +|branch |否|string |分支名称, 默认为master分支| +|new_branch |否|string |新的分支名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|sha |string|提交文件的sha值| +|commit |object|| +|-- message |string|提交备注说明信息| +|-- committer|object|| +|---- name |string|用户名| +|---- email |string|用户邮箱| +|---- date |string|文件创建时间| + + +返回值 +``` +{ + "commit": { + "sha": "7b70509105b587e71f5692b9e8ab70851e321f64", + "message": "Delete 'test1_create_file11.rb'\n", + "author": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-08T07:57:34Z" + }, + "committer": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-08T07:57:34Z" + } + } +} +``` +--- diff --git a/docs/figs/code.png b/docs/figs/code.png new file mode 100644 index 0000000000000000000000000000000000000000..b4a2cb7c48a55b470a37df64d48df12a4dd80fe9 GIT binary patch literal 140057 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 z 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 ov;S#c8CoT}Hx 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 UrO$~s9AR7rI(KeYY26S1FU!UZ-T(jq literal 0 HcmV?d00001 diff --git a/docs/figs/issue_assign.png b/docs/figs/issue_assign.png new file mode 100644 index 0000000000000000000000000000000000000000..3156ab16943c50a66a25f53a75eb477d6db611a4 GIT binary patch literal 84683 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%0A1aMyPBSKb5KZpP4+{ZsWzOxW@SV; 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 g-`m@xzB$Uw%sl;6NS^5C{Pnq@ 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

b_?4- zsMG8dFFE7Dk?^3Jzk~iexu2&Qeh)^;n12hh{VSWvzvIbchQN>k0ZXU<%E3Zm#7BhO z0MAEld^-QhKK|>8lJglExu_wWHSF(FMqQEdNB{mcx()qVe*NF$H>fSV|w zqL=nh2_*4tOZkmiqmRfS_uQ|)!Viv z2elp=Y-3ovNN|f$r)y-=m$6Gr-^L^pzwidJ?VHNxZKUtz)Wsc_4^{SW_HBmE;9n|ncTsPMl#m{1)H2^S_xaQ>a`Hz)g3f0ydv4*2`OQ$B5~vGt z>^00G!Nl*rx#rH3&)9F!q1X@{Y$;q;)30Y|06sfIT)0i@c)00KAKvVnU9ee~f+lwh z4+m~xa~GO7NZ`#~#@+?f>D|@-pP6gqGHen5=J~*vof|-lO6Kx|NtU78t-Gi1g%;QR z9|MWK=}V2l1oLJNI9H2`H%d}k`Q{}xR0%ej=Wr6_*~7taaZyzVpWsylsf5_MW{a4m1-`l)s_)6U&inN5kO03y)>Wx} z&HPngm1Lw^vl%%48U`#blNhcrLz)_0=>6DsHe6rkzo}NMhfU)5%ub1)U*`QXsaZDZ z{mj>Z@HyL$yyoxPm`vKzaMOb7npnOHoGUDYRE=Ee7Kg){E?$eD>y%vF*;4xY#NFJP ziBCXkc96ca+7fZagVWXqVf~YdkeizR2`)=u$W75EYB7bWVdG9U)+$saR2u1KH9H}9 z!8b((zHWFIcd(1FAr&zb9YmMwB)(n3pRJh zCN=6WY)V3Vr4W$tjU$#t?YT?J^@$na zybxx)8F>R*H1Sv!j_j{dUGze8bo>0l|c$4b}FEtskv#Mx$`Mm(4;K5+$zg(byPU&>~=P` zOu|~#__n@-e-8gac3X8*o5~OGoP6rHxSLi_t$C_2TorV)y6idOz+-e?czPvlTTq#? zli@m9;BeSe3@g$pQ6=Z#tPMLelZj~_0sd44O7 z@XdU9zCs#rQwrGMo!8eG=I7e^hG4t2gLTO4>)r&3clf>~*>RiJPVS$CPTf;dV(+Sz zHRu;Z90qudC)6Z_Wt$xvlQ?=@A�L4vMMm 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 literal 0 HcmV?d00001 From 774bcdd8b16663a7f17de9e3ec97f396cb6b9c6d Mon Sep 17 00:00:00 2001 From: whystar Date: Tue, 13 Oct 2020 16:42:20 +0800 Subject: [PATCH 234/384] use high-quality figs in readme --- README.md | 2 +- docs/figs/code.png | Bin 140057 -> 323421 bytes docs/figs/issue_assign.png | Bin 84683 -> 203460 bytes docs/figs/issue_manage.png | Bin 196639 -> 383772 bytes docs/figs/issue_view.png | Bin 82443 -> 210276 bytes docs/figs/milestone.png | Bin 106431 -> 227642 bytes 6 files changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index db44e01ab..59e060666 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ http://localhost:3000/projects ![](docs/figs/code.png) - 任务管理 -![](docs/figs/issue_mange.png) +![](docs/figs/issue_manage.png) - 任务查看 diff --git a/docs/figs/code.png b/docs/figs/code.png index b4a2cb7c48a55b470a37df64d48df12a4dd80fe9..469ee07b267eca35123ba44d83ee10cb0b3f9f00 100644 GIT binary patch literal 323421 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

  • 74)ur|6bx}`- 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 z

    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ʟG(=cYFjKyvnHyGJH)Fq)hPNWsc^a5}LZW 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 z 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 ov;S#c8CoT}Hx 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 UrO$~s9AR7rI(KeYY26S1FU!UZ-T(jq diff --git a/docs/figs/issue_assign.png b/docs/figs/issue_assign.png index 3156ab16943c50a66a25f53a75eb477d6db611a4..01798d2e7dc3eef030abc55c5981d1b264f5970c 100644 GIT binary patch literal 203460 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

    0pQNoz^v~0oOm_YFy#VXLbFm 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 z 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%0A1aMyPBSKb5KZpP4+{ZsWzOxW@SV; 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 S^rZ9mYZFwVga? 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%0A>f3>J#n_Wen!77*%Nr3`neCttb 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 z zBQeFXa86VQb9Gerb-`iBYOV_#f8qLvPw|@O5u8+rdBp4v3IstNVRBzJ0L~d7wHo%MTQ%iPCCOk5K4i2L%AxhR%c|i6pSoO(ESR1 z%WsfkcFt9dP))$`b{Gt9WTyf`Af1;g5?GV#omk9p&jV46qE@W;i3035hBSw^{K+#1SE3Um^AG3kh;SfJFQ)5+(4jA`PM zXe3{l54Vp_6D-xxwOmQ^_dG zs{8J4bF)GlY}c2?YVb|NqXnDa@N5bmcYVOokd?1hw>6`EmD@5|iiwUY2o~ ztkMW4w^J!mz!Pa2jd?V9yV20xmsUy32K+SbfS5E}UYvSTOB?Q65KaIH`UwN~Y?o~y z+M$XBWXS-yRZJuuJd9%TLDSe{%tD^iuAZXzEkFDSw#Pkx{y4d@P|be3o6?~Z%iCIA z8|Ql8?TT$d9JKr55y|(){Vkz_E)U}OuB$Nq5q=LjLU`G#4Y5|BWIE%jdd!-fqGAx& zL%Cn^1d77vy5)_cq=H+xcBE;(K*}>;Evf-GD|Jy>7_3RCkH#JQ?wGb>!6$B;KAa$E z&>n?4Z?@^V+v4KZcZ;;Dqk4qGWl`K`J60J5-9ZA})KpuEZpD~^_M;~vX#t1c%F=YR zlB60(#JuiB_J7MUlq6xD;f7L^9$_ehF-n@%qdKw>#qoqGW|vk<7ANj}4C|Mq7V{Qw zD|@TQYJM3MJQ1YycMnY`BlH0mZFwEJe!f(hB=WH?QJRUy8+yi&WkAZs~~`Ab5LjFP!$;`^40`^aqg&7}XUg$G$CzMDDWRl~g6aC8wl zrP;{@*^cdVIr#@Sjk3dKXXEGNbkG=Dk7$tmYfXAqGaw~boBsm$I^E4!ajT#!(-PW92Tgy+%doH5~ zwgLx*Zqsq_oYPrl!>x8@M=>lCEtfYQpZ~s)i)F9EJbDaxwIokGH#j5el;LtF_1C8{ z;xWo7Xx;@Y%Z4)@gDoYiF|1-fZ-)@l8#pD1GFYk+L$W6ux??n_enc{$+}%b7GbQG0 zO<=DlV2478)+bq{L4|5N7E%jWrk|wAzH*&Ev5?|iO`@L8|4ST_NP{VKv z3Zz^?cXZkS$VE=^2E~HvWixwmX=K008)zOB2!|{TN{ z%|0up_?F9li2OpQeE<{l54hAsYt_n`Htg&)aKR6Hy#kV%$5679GNnsv?|bwg<4#lJ z(fVNR$=wUQ2*f4=jSHg>pSVzg&;@+}|D~R>PsZcELlZuiUqBp#*bheq?|xl)bSoZV q_v(6mbk!%nY8c&p`LJ)|{PJc=k!8*72j&}B9~DIng-W?sq5lWRx?W}g literal 196639 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 g-`m@xzB$Uw%sl;6NS^5C{Pnq@ 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≠2;Pm}@msu>#$ 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 literal 106431 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

    b_?4- zsMG8dFFE7Dk?^3Jzk~iexu2&Qeh)^;n12hh{VSWvzvIbchQN>k0ZXU<%E3Zm#7BhO z0MAEld^-QhKK|>8lJglExu_wWHSF(FMqQEdNB{mcx()qVe*NF$H>fSV|w zqL=nh2_*4tOZkmiqmRfS_uQ|)!Viv z2elp=Y-3ovNN|f$r)y-=m$6Gr-^L^pzwidJ?VHNxZKUtz)Wsc_4^{SW_HBmE;9n|ncTsPMl#m{1)H2^S_xaQ>a`Hz)g3f0ydv4*2`OQ$B5~vGt z>^00G!Nl*rx#rH3&)9F!q1X@{Y$;q;)30Y|06sfIT)0i@c)00KAKvVnU9ee~f+lwh z4+m~xa~GO7NZ`#~#@+?f>D|@-pP6gqGHen5=J~*vof|-lO6Kx|NtU78t-Gi1g%;QR z9|MWK=}V2l1oLJNI9H2`H%d}k`Q{}xR0%ej=Wr6_*~7taaZyzVpWsylsf5_MW{a4m1-`l)s_)6U&inN5kO03y)>Wx} z&HPngm1Lw^vl%%48U`#blNhcrLz)_0=>6DsHe6rkzo}NMhfU)5%ub1)U*`QXsaZDZ z{mj>Z@HyL$yyoxPm`vKzaMOb7npnOHoGUDYRE=Ee7Kg){E?$eD>y%vF*;4xY#NFJP ziBCXkc96ca+7fZagVWXqVf~YdkeizR2`)=u$W75EYB7bWVdG9U)+$saR2u1KH9H}9 z!8b((zHWFIcd(1FAr&zb9YmMwB)(n3pRJh zCN=6WY)V3Vr4W$tjU$#t?YT?J^@$na zybxx)8F>R*H1Sv!j_j{dUGze8bo>0l|c$4b}FEtskv#Mx$`Mm(4;K5+$zg(byPU&>~=P` zOu|~#__n@-e-8gac3X8*o5~OGoP6rHxSLi_t$C_2TorV)y6idOz+-e?czPvlTTq#? zli@m9;BeSe3@g$pQ6=Z#tPMLelZj~_0sd44O7 z@XdU9zCs#rQwrGMo!8eG=I7e^hG4t2gLTO4>)r&3clf>~*>RiJPVS$CPTf;dV(+Sz zHRu;Z90qudC)6Z_Wt$xvlQ?=@A�L4vMMm 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 From 28d6aa2dda36975d9721b33303a1865a278e367c Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 13 Oct 2020 19:49:52 +0800 Subject: [PATCH 235/384] ADD drone user oauth --- README.md | 30 +++++++++++++ .../ci/cloud_accounts_controller.rb | 8 +++- .../concerns/ci/cloud_account_manageable.rb | 43 ++++++++++++++----- app/models/user.rb | 1 + config/routes.rb | 6 +++ 5 files changed, 76 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 7bc1dbcce..62bfa67c9 100644 --- a/README.md +++ b/README.md @@ -2633,6 +2633,36 @@ https://localhost:3000/api/jasder/forgeplus/cloud_accounts.json | jq ``` --- +#### devops用户认证授权 +``` +GET /api/users/ci/oauth_grant +``` +*示例* +``` +curl -X GET \ +-d "password=123456" +http://localhost:3000/api/users/ci/oauth_grant.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|password |是|string |用户密码 | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:成功, -1: 失败| + +``` +{ + "status": 0, + "message": "success" +} +``` +--- + #### 激活项目 ``` POST /api/:owner/:repo/activate diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 01f4800b0..a005075a9 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -5,7 +5,7 @@ class Ci::CloudAccountsController < Ci::BaseController before_action :load_project, only: %i[create activate] before_action :authorize_owner_project!, only: %i[create activate] before_action :load_repo, only: %i[activate] - before_action :find_cloud_account, only: %i[show] + before_action :find_cloud_account, only: %i[show oauth_grant] before_action :validate_params!, only: %i[create bind] before_action only: %i[create bind] do connect_to_ci_database(master_db: true) @@ -83,6 +83,12 @@ class Ci::CloudAccountsController < Ci::BaseController render_error(ex.message) end + def oauth_grant + return render_error('你输入的密码不正确.') unless current_user.check_password?(params[:password].to_s) + + result = gitea_oauth_grant!(current_user.login, password, @cloud_account.drone_url, current_user.oauths.last&.client_id) + result === true ? render_ok : render_error('授权失败.') + end private def validate_params! diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index eae546c02..e92cd77bf 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -50,10 +50,7 @@ module Ci::CloudAccountManageable logger.info "######### redirect_url: #{redirect_url}" return nil unless result.present? - - gitea_oauth_grant!(current_user.gitea_uid, oauth.gitea_oauth_id) - return cloud_account - # result && !result.blank? ? cloud_account : nil + result && !result.blank? ? cloud_account : nil end def unbind_account! @@ -92,15 +89,39 @@ module Ci::CloudAccountManageable Ci::CloudAccount.exists?(ip_num: ip_num) ? [true, "#{devops_params[:ip_num]}服务器已被使用."] : [false, nil] end - def gitea_oauth_grant!(gitea_uid, application_id) - connection = Gitea::Database.set_connection.connection + def gitea_oauth_grant!(username, password, drone_url, client_id) + state = SecureRandom.hex(8) - unix_time = Time.now.to_i - # TODO - # 目前直接操作db,可以建立对应的model进行操作 - sql = "INSERT INTO oauth2_grant ( user_id, application_id, counter, created_unix, updated_unix ) VALUES ( #{gitea_uid}, #{application_id}, 0, #{unix_time}, #{unix_time} );" + # redirect_uri eg: + # https://localhost:3000/login/oauth/authorize?client_id=94976481-ad0e-4ed4-9247-7eef106007a2&redirect_uri=http%3A%2F%2F121.69.81.11%3A80%2Flogin&response_type=code&state=9cab990b9cfb1805 + redirect_uri = CGI.escape("#{drone_url}/login&response_type=code&state=#{state}") + grant_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{client_id}&redirect_uri=#{redirect_uri}" + logger.info "[gitea] grant_url: #{grant_url}" - connection.execute(sql) + conn = Faraday.new(url: grant_url) do |req| + req.request :url_encoded + req.adapter Faraday.default_adapter + req.basic_auth(username, password) + end + + response = conn.get + logger.info "[gitea] response headers: #{response.headers}" + + drone_oauth_user!(response.headers.to_h['location'], state) + end + + def drone_oauth_user!(url, state) + logger.info "[drone] drone_oauth_user url: #{url}" + conn = Faraday.new(url: url) do |req| + req.request :url_encoded + req.adapter Faraday.default_adapter + req.headers["cookie"] = "_session_=#{SecureRandom.hex(32)}; _oauth_state_=#{state}" + end + + response = conn.get + logger.info "[drone] response headers: #{response.headers}" + + response.headers['location'].include?('error') ? false : true end private diff --git a/app/models/user.rb b/app/models/user.rb index 9df853b4e..93c8d3357 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -100,6 +100,7 @@ class User < ApplicationRecord # 教学案例 # has_many :libraries, dependent: :destroy has_many :project_trends, dependent: :destroy + has_many :oauths , dependent: :destroy # Groups and active users scope :active, lambda { where(status: STATUS_ACTIVE) } diff --git a/config/routes.rb b/config/routes.rb index 9b94ebeb3..ee1e505a3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -173,6 +173,12 @@ Rails.application.routes.draw do to: 'cloud_accounts#unbind', as: :unbind_cloud_acclount ) + + get( + 'oauth_grant', + to: 'cloud_accounts#oauth_grant', + as: :ci_oauth_grant + ) end end end From 516b254aa3f64ca6a5a5fa7bc2e859ad7eaf8808 Mon Sep 17 00:00:00 2001 From: whystar Date: Wed, 14 Oct 2020 10:35:33 +0800 Subject: [PATCH 236/384] smaller size of fig issue_assign --- README.md | 3 ++- docs/figs/issue_assign2.png | Bin 0 -> 70056 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 docs/figs/issue_assign2.png diff --git a/README.md b/README.md index 59e060666..da52bb57b 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ http://localhost:3000/projects ![](docs/figs/code.png) + - 任务管理 ![](docs/figs/issue_manage.png) @@ -71,7 +72,7 @@ http://localhost:3000/projects - 任务指派 -![](docs/figs/issue_assign.png) +![](docs/figs/issue_assign2.png) - 里程碑 diff --git a/docs/figs/issue_assign2.png b/docs/figs/issue_assign2.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd227649729f9167b50d6066e62fe5d23a1eac7 GIT binary patch literal 70056 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 Date: Thu, 15 Oct 2020 14:37:24 +0800 Subject: [PATCH 237/384] FIX devops pwd auth bug --- README.md | 2 +- app/controllers/ci/cloud_accounts_controller.rb | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 62bfa67c9..fae9bdf96 100644 --- a/README.md +++ b/README.md @@ -2640,7 +2640,7 @@ GET /api/users/ci/oauth_grant *示例* ``` curl -X GET \ --d "password=123456" +-d "password=123456" \ http://localhost:3000/api/users/ci/oauth_grant.json | jq ``` *请求参数说明:* diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index a005075a9..0b230566f 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -84,7 +84,8 @@ class Ci::CloudAccountsController < Ci::BaseController end def oauth_grant - return render_error('你输入的密码不正确.') unless current_user.check_password?(params[:password].to_s) + password = params[:password].to_s + return render_error('你输入的密码不正确.') unless current_user.check_password?(password) result = gitea_oauth_grant!(current_user.login, password, @cloud_account.drone_url, current_user.oauths.last&.client_id) result === true ? render_ok : render_error('授权失败.') From 4ea033df236dd5bbbd22273166844569d9309287 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 15 Oct 2020 15:02:48 +0800 Subject: [PATCH 238/384] FIX unbind ci user bug --- app/controllers/concerns/ci/cloud_account_manageable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index e92cd77bf..99b6f3aee 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -60,7 +60,7 @@ module Ci::CloudAccountManageable if current_user.devops_step == User::DEVOPS_UNINIT || cloud_account.blank? return render_error('你未绑定CI服务器') elsif current_user.devops_step == User::DEVOPS_UNVERIFIED || current_user.ci_certification? - ci_user.destroy! + ci_user.destroy! if ci_user Ci::Repo.where(repo_namespace: current_user.login).delete_all cloud_account.destroy! end From 862889158202fdcca34660dd90b5fc2860f359f2 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 15 Oct 2020 15:17:52 +0800 Subject: [PATCH 239/384] FIX gitea oauth grant url bug --- app/controllers/concerns/ci/cloud_account_manageable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 99b6f3aee..f81ee9ceb 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -94,7 +94,7 @@ module Ci::CloudAccountManageable # redirect_uri eg: # https://localhost:3000/login/oauth/authorize?client_id=94976481-ad0e-4ed4-9247-7eef106007a2&redirect_uri=http%3A%2F%2F121.69.81.11%3A80%2Flogin&response_type=code&state=9cab990b9cfb1805 - redirect_uri = CGI.escape("#{drone_url}/login&response_type=code&state=#{state}") + redirect_uri = CGI.escape("#{drone_url}/") + "login&response_type=code&state=#{state}" grant_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{client_id}&redirect_uri=#{redirect_uri}" logger.info "[gitea] grant_url: #{grant_url}" From 38ca183bcd663e1940a04ff923aef861f5aade68 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 15 Oct 2020 16:04:32 +0800 Subject: [PATCH 240/384] FIX code review --- app/controllers/concerns/ci/cloud_account_manageable.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index f81ee9ceb..f27267023 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -94,8 +94,8 @@ module Ci::CloudAccountManageable # redirect_uri eg: # https://localhost:3000/login/oauth/authorize?client_id=94976481-ad0e-4ed4-9247-7eef106007a2&redirect_uri=http%3A%2F%2F121.69.81.11%3A80%2Flogin&response_type=code&state=9cab990b9cfb1805 - redirect_uri = CGI.escape("#{drone_url}/") + "login&response_type=code&state=#{state}" - grant_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{client_id}&redirect_uri=#{redirect_uri}" + redirect_uri = CGI.escape("#{drone_url}/login") + grant_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{client_id}&redirect_uri=#{redirect_uri}&response_type=code&state=#{state}" logger.info "[gitea] grant_url: #{grant_url}" conn = Faraday.new(url: grant_url) do |req| @@ -115,7 +115,7 @@ module Ci::CloudAccountManageable conn = Faraday.new(url: url) do |req| req.request :url_encoded req.adapter Faraday.default_adapter - req.headers["cookie"] = "_session_=#{SecureRandom.hex(32)}; _oauth_state_=#{state}" + req.headers["cookie"] = "_session_=#{SecureRandom.hex(28)}; _oauth_state_=#{state}" end response = conn.get From 0c2c917c7f54a4b4d795fb7e8a42e81528edbcaf Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 15 Oct 2020 17:00:02 +0800 Subject: [PATCH 241/384] =?UTF-8?q?FIX=20=E7=BA=A0=E6=AD=A3drone=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/ci/cloud_accounts_controller.rb | 5 ++++- .../concerns/ci/cloud_account_manageable.rb | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 0b230566f..bb5df9895 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -87,7 +87,10 @@ class Ci::CloudAccountsController < Ci::BaseController password = params[:password].to_s return render_error('你输入的密码不正确.') unless current_user.check_password?(password) - result = gitea_oauth_grant!(current_user.login, password, @cloud_account.drone_url, current_user.oauths.last&.client_id) + oauth = current_user.oauths.last + return render_error("服务器出小差了.") if oauth.blank? + + result = gitea_oauth_grant!(password, oauth) result === true ? render_ok : render_error('授权失败.') end diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index f27267023..7a1011154 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -89,13 +89,24 @@ module Ci::CloudAccountManageable Ci::CloudAccount.exists?(ip_num: ip_num) ? [true, "#{devops_params[:ip_num]}服务器已被使用."] : [false, nil] end - def gitea_oauth_grant!(username, password, drone_url, client_id) + def gitea_auto_create_auth_grant!(gitea_oauth_id) + connection = Gitea::Database.set_connection.connection + unix_time = Time.now.to_i + + # 目前直接操作db,可以建立对应的model进行操作 + sql = "INSERT INTO oauth2_grant ( user_id, application_id, counter, created_unix, updated_unix ) VALUES ( #{current_user.gitea_uid}, #{gitea_oauth_id}, 0, #{unix_time}, #{unix_time} );" + connection.execute(sql) + end + + def gitea_oauth_grant!(password, oauth) + gitea_auto_create_auth_grant!(oauth&.gitea_oauth_id) + state = SecureRandom.hex(8) # redirect_uri eg: # https://localhost:3000/login/oauth/authorize?client_id=94976481-ad0e-4ed4-9247-7eef106007a2&redirect_uri=http%3A%2F%2F121.69.81.11%3A80%2Flogin&response_type=code&state=9cab990b9cfb1805 - redirect_uri = CGI.escape("#{drone_url}/login") - grant_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{client_id}&redirect_uri=#{redirect_uri}&response_type=code&state=#{state}" + redirect_uri = CGI.escape("#{@cloud_account.drone_url}/login") + grant_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{oauth&.client_id}&redirect_uri=#{redirect_uri}&response_type=code&state=#{state}" logger.info "[gitea] grant_url: #{grant_url}" conn = Faraday.new(url: grant_url) do |req| From 6456a0f90c502a26b8bda0094e6f828a42eed3b6 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 15 Oct 2020 17:04:42 +0800 Subject: [PATCH 242/384] FIX code bug --- app/controllers/concerns/ci/cloud_account_manageable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 7a1011154..d3111751d 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -112,7 +112,7 @@ module Ci::CloudAccountManageable conn = Faraday.new(url: grant_url) do |req| req.request :url_encoded req.adapter Faraday.default_adapter - req.basic_auth(username, password) + req.basic_auth(current_user.login, password) end response = conn.get From e0db7067ca45f7f4a2e2321751dec9b8e365b642 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 15 Oct 2020 17:20:09 +0800 Subject: [PATCH 243/384] FIX piple value --- app/controllers/concerns/ci/cloud_account_manageable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index d3111751d..3ebac8eac 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -13,7 +13,7 @@ module Ci::CloudAccountManageable cloud_account.save! # 2. 生成oauth2应用程序的client_id和client_secrete - gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline", redirect_uris: ["#{cloud_account.drone_url}/login"]}) + gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline-#{SecureRandom.hex(8)}", redirect_uris: ["#{cloud_account.drone_url}/login"]}) logger.info "######### gitea_oauth: #{gitea_oauth}" oauth = Oauth.new(client_id: gitea_oauth['client_id'], client_secret: gitea_oauth['client_secret'], From cfd285cbcdac25038f604a4c41e1c1565138199f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 15 Oct 2020 17:40:39 +0800 Subject: [PATCH 244/384] FIX delete drone database with undind cloud account --- app/controllers/concerns/ci/cloud_account_manageable.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 3ebac8eac..ea49b1894 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -55,14 +55,13 @@ module Ci::CloudAccountManageable def unbind_account! cloud_account = current_user.ci_cloud_account - ci_user = cloud_account.ci_user || Ci::User.find_by(user_login: current_user.login) if current_user.devops_step == User::DEVOPS_UNINIT || cloud_account.blank? return render_error('你未绑定CI服务器') elsif current_user.devops_step == User::DEVOPS_UNVERIFIED || current_user.ci_certification? - ci_user.destroy! if ci_user - Ci::Repo.where(repo_namespace: current_user.login).delete_all cloud_account.destroy! + # TOTO drop drone database + @connection.execute("DROP DATABASE IF EXISTS #{current_user.login}_drone") end current_user.unbind_account! From 7b0f219a829d6b3340ea8b4a1f1d68935f72e96f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 15 Oct 2020 19:40:50 +0800 Subject: [PATCH 245/384] FIX pwd bug --- app/controllers/ci/cloud_accounts_controller.rb | 5 +++-- app/views/ci/cloud_accounts/oauth_grant.json.jbuilder | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 app/views/ci/cloud_accounts/oauth_grant.json.jbuilder diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index bb5df9895..85f687716 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -84,14 +84,15 @@ class Ci::CloudAccountsController < Ci::BaseController end def oauth_grant - password = params[:password].to_s + password = params[:password].strip.to_s return render_error('你输入的密码不正确.') unless current_user.check_password?(password) oauth = current_user.oauths.last return render_error("服务器出小差了.") if oauth.blank? result = gitea_oauth_grant!(password, oauth) - result === true ? render_ok : render_error('授权失败.') + return render_error('授权失败.') unless result === true + current_user.set_drone_step!(User::DEVOPS_CERTIFICATION) end private diff --git a/app/views/ci/cloud_accounts/oauth_grant.json.jbuilder b/app/views/ci/cloud_accounts/oauth_grant.json.jbuilder new file mode 100644 index 000000000..39d2c0647 --- /dev/null +++ b/app/views/ci/cloud_accounts/oauth_grant.json.jbuilder @@ -0,0 +1 @@ +json.step current_user.devops_step From d8910e3dbf3e7bc5bc59611e6b4980bdfdef787a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 15 Oct 2020 19:46:56 +0800 Subject: [PATCH 246/384] FIX unbind ci cloud account bug --- app/controllers/concerns/ci/cloud_account_manageable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index ea49b1894..7faf91373 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -58,7 +58,7 @@ module Ci::CloudAccountManageable if current_user.devops_step == User::DEVOPS_UNINIT || cloud_account.blank? return render_error('你未绑定CI服务器') - elsif current_user.devops_step == User::DEVOPS_UNVERIFIED || current_user.ci_certification? + elsif current_user.devops_step != User::DEVOPS_UNINIT || current_user.ci_certification? cloud_account.destroy! # TOTO drop drone database @connection.execute("DROP DATABASE IF EXISTS #{current_user.login}_drone") From a0c80d8d25501725cf86873c9ae19e864028aa28 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 15 Oct 2020 19:49:43 +0800 Subject: [PATCH 247/384] FIX code bug --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 85f687716..bf8258990 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -84,7 +84,7 @@ class Ci::CloudAccountsController < Ci::BaseController end def oauth_grant - password = params[:password].strip.to_s + password = params[:password].to_s return render_error('你输入的密码不正确.') unless current_user.check_password?(password) oauth = current_user.oauths.last From e430645304cdf038004808bcb91a84864913c79d Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 16 Oct 2020 09:42:08 +0800 Subject: [PATCH 248/384] FIX ci connection database bug --- app/controllers/ci/base_controller.rb | 2 +- app/controllers/concerns/ci/cloud_account_manageable.rb | 2 +- app/models/concerns/droneable.rb | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index 2286804f9..aeabb0d3e 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -2,7 +2,7 @@ class Ci::BaseController < ApplicationController include Ci::DbConnectable before_action :require_login - before_action :connect_to_ci_database, if: -> { current_user && !current_user.is_a?(AnonymousUser) && current_user.devops_unverified? } + before_action :connect_to_ci_database, if: -> { current_user && !current_user.is_a?(AnonymousUser) && current_user.devops_certification? } def load_repo namespace = params[:owner] diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 7faf91373..a3418f711 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -58,7 +58,7 @@ module Ci::CloudAccountManageable if current_user.devops_step == User::DEVOPS_UNINIT || cloud_account.blank? return render_error('你未绑定CI服务器') - elsif current_user.devops_step != User::DEVOPS_UNINIT || current_user.ci_certification? + elsif current_user.ci_certification? cloud_account.destroy! # TOTO drop drone database @connection.execute("DROP DATABASE IF EXISTS #{current_user.login}_drone") diff --git a/app/models/concerns/droneable.rb b/app/models/concerns/droneable.rb index c1f8b3391..87013e2bb 100644 --- a/app/models/concerns/droneable.rb +++ b/app/models/concerns/droneable.rb @@ -12,6 +12,10 @@ module Droneable self.devops_step === User::DEVOPS_UNVERIFIED end + def devops_certification? + self.devops_step === User::DEVOPS_CERTIFICATION + end + def set_drone_step!(step) self.update_column(:devops_step, step) end From edcb9f863cbdd1c1a7303a4ae82b9bbd7833ea86 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 16 Oct 2020 09:47:36 +0800 Subject: [PATCH 249/384] FIX ci certification bug --- app/controllers/ci/cloud_accounts_controller.rb | 3 +-- app/models/concerns/droneable.rb | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index bf8258990..1271c708e 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -30,9 +30,8 @@ class Ci::CloudAccountsController < Ci::BaseController end def activate - return render_error('请先在指定地址做用户认证') unless current_user.ci_certification? + return render_error('请先认证') unless current_user.ci_certification? - return render_error('该项目已经激活') if @repo && @repo.repo_active? begin @cloud_account = Ci::CloudAccount.find params[:id] ActiveRecord::Base.transaction do diff --git a/app/models/concerns/droneable.rb b/app/models/concerns/droneable.rb index 87013e2bb..f91b9f988 100644 --- a/app/models/concerns/droneable.rb +++ b/app/models/concerns/droneable.rb @@ -22,7 +22,7 @@ module Droneable def ci_certification? return false if self.is_a?(AnonymousUser) - devops_unverified? && Ci::User.exists?(user_login: self.login) + devops_certification? && Ci::User.exists?(user_login: self.login) end def unbind_account! From 9a9540ad5062a8a95d17099fad9b0b2f22e34775 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 16 Oct 2020 09:50:30 +0800 Subject: [PATCH 250/384] Fix forge connection ci databases bug --- app/controllers/users_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 53fca0fbd..63e65a38f 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -4,7 +4,7 @@ class UsersController < ApplicationController before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users] before_action :require_login, only: %i[me list] - before_action :connect_to_ci_database, only: :get_user_info, if: -> { current_user && !current_user.is_a?(AnonymousUser) && current_user.devops_unverified? } + before_action :connect_to_ci_database, only: :get_user_info, if: -> { current_user && !current_user.is_a?(AnonymousUser) && current_user.devops_certification? } skip_before_action :check_sign, only: [:attachment_show] From 6df01dead143ae1cee6068a5305d32fc5a83b02f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 16 Oct 2020 11:07:28 +0800 Subject: [PATCH 251/384] FIX unbind devops bug --- .../concerns/ci/cloud_account_manageable.rb | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index a3418f711..d97bab309 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -55,14 +55,10 @@ module Ci::CloudAccountManageable def unbind_account! cloud_account = current_user.ci_cloud_account + return render_error('你未绑定CI服务器') if current_user.devops_step == User::DEVOPS_UNINIT || cloud_account.blank? - if current_user.devops_step == User::DEVOPS_UNINIT || cloud_account.blank? - return render_error('你未绑定CI服务器') - elsif current_user.ci_certification? - cloud_account.destroy! - # TOTO drop drone database - @connection.execute("DROP DATABASE IF EXISTS #{current_user.login}_drone") - end + cloud_account.destroy! unless cloud_account.blank? + @connection.execute("DROP DATABASE IF EXISTS #{current_user.login}_drone") # TOTO drop drone database current_user.unbind_account! end From 5156450eac9b42321a9e1c920090c7a9c835948e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 16 Oct 2020 11:57:20 +0800 Subject: [PATCH 252/384] =?UTF-8?q?ADD=20=E6=9B=B4=E6=94=B9=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E7=9A=84=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/ci/base_controller.rb | 6 +++--- app/controllers/ci/builds_controller.rb | 2 +- app/controllers/ci/cloud_accounts_controller.rb | 2 +- app/controllers/ci/projects_controller.rb | 2 +- app/views/ci/cloud_accounts/bind.json.jbuilder | 1 - app/views/ci/cloud_accounts/show.json.jbuilder | 1 - 6 files changed, 6 insertions(+), 8 deletions(-) diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index aeabb0d3e..59dc1cb84 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -18,8 +18,8 @@ class Ci::BaseController < ApplicationController end end - def authorize_manage_builds! - unless @project.owner?(current_user) + def authenticate_manager! + unless @project.manager?(current_user) return render_forbidden end end @@ -28,7 +28,7 @@ class Ci::BaseController < ApplicationController return render_forbidden unless current_user.admin? end - def authorize_owner_project! + def authorize_owner! unless @project.owner?(current_user) return render_forbidden end diff --git a/app/controllers/ci/builds_controller.rb b/app/controllers/ci/builds_controller.rb index e797a746d..4900a890a 100644 --- a/app/controllers/ci/builds_controller.rb +++ b/app/controllers/ci/builds_controller.rb @@ -2,7 +2,7 @@ class Ci::BuildsController < Ci::BaseController include RepositoriesHelper before_action :load_project - before_action :authorize_owner_project! + before_action :authorize_owner!, only: [:restart, :stop] before_action :load_repo before_action :find_cloud_account, except: [:index, :show] diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 1271c708e..a1429078e 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -3,7 +3,7 @@ class Ci::CloudAccountsController < Ci::BaseController skip_before_action :connect_to_ci_database, only: %i[create bind] before_action :load_project, only: %i[create activate] - before_action :authorize_owner_project!, only: %i[create activate] + before_action :authorize_owner!, only: %i[create activate] before_action :load_repo, only: %i[activate] before_action :find_cloud_account, only: %i[show oauth_grant] before_action :validate_params!, only: %i[create bind] diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index bf09fb002..c7b7338f1 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -4,7 +4,7 @@ class Ci::ProjectsController < Ci::BaseController before_action :load_project before_action :load_repo, only: [:update_trustie_pipeline, :activate, :deactivate] - before_action :authorize_owner_project!, only: [:authorize] + before_action :authorize_owner!, only: [:authorize] before_action :find_cloud_account, only: [:authorize, :activate, :deactivate] def authorize diff --git a/app/views/ci/cloud_accounts/bind.json.jbuilder b/app/views/ci/cloud_accounts/bind.json.jbuilder index 230f4672f..cff42cefe 100644 --- a/app/views/ci/cloud_accounts/bind.json.jbuilder +++ b/app/views/ci/cloud_accounts/bind.json.jbuilder @@ -2,7 +2,6 @@ json.step current_user.devops_step json.cloud_account do if @cloud_account && !current_user.devops_uninit? json.ip @cloud_account.drone_ip - json.redirect_url "#{@cloud_account.drone_url}/login" if current_user.devops_unverified? else json.nil! end diff --git a/app/views/ci/cloud_accounts/show.json.jbuilder b/app/views/ci/cloud_accounts/show.json.jbuilder index 847b750d5..efb2d7db9 100644 --- a/app/views/ci/cloud_accounts/show.json.jbuilder +++ b/app/views/ci/cloud_accounts/show.json.jbuilder @@ -3,7 +3,6 @@ json.ci_certification current_user.ci_certification? json.cloud_account do if @cloud_account && !current_user.devops_uninit? json.ip @cloud_account.drone_ip - json.redirect_url "#{@cloud_account.drone_url}/login" if current_user.devops_unverified? else json.nil! end From 7372911feaf372437ef2c7b7dd841129a29e2c02 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 16 Oct 2020 16:02:26 +0800 Subject: [PATCH 253/384] =?UTF-8?q?FIX=20=E9=87=8D=E6=9E=84=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=AE=A1=E7=90=86=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/repositories_helper.rb | 8 +++++++- app/views/repositories/show.json.jbuilder | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index f41fbd362..a845b70c5 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -1,4 +1,10 @@ module RepositoriesHelper + def render_permission(user, project) + return "Admin" if user&.admin? + return "Owner" if user === project.owner + project.get_premission(user) + end + def render_decode64_content(str) return nil if str.blank? Base64.decode64(str).force_encoding("UTF-8") @@ -44,7 +50,7 @@ module RepositoriesHelper end if r_content.include?("?") new_r_content = r_content + "&raw=true" - else + else new_r_content = r_content + "?raw=true" end unless r_content.include?("http://") || r_content.include?("https://") || r_content.include?("mailto:") diff --git a/app/views/repositories/show.json.jbuilder b/app/views/repositories/show.json.jbuilder index 29c8a77cf..fca2ad5bd 100644 --- a/app/views/repositories/show.json.jbuilder +++ b/app/views/repositories/show.json.jbuilder @@ -12,7 +12,7 @@ json.versions_count @project.versions_count #里程碑数量 json.version_releases_count @project.releases_size(@user.try(:id), "all") json.version_releasesed_count @project.releases_size(@user.try(:id), "released") #已发行的版本 json.contributor_users_count @project.contributor_users -json.permission User.current&.admin? ? "Manager" : @project.get_premission(@user) +json.permission render_permission(@user, @project) json.mirror_url @project&.repository.mirror_url json.mirror @project&.repository.mirror_url.present? json.type @project.numerical_for_project_type From 248eadb918889d6d8930b6522bcc117a7fa0395c Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Fri, 16 Oct 2020 16:26:15 +0800 Subject: [PATCH 254/384] Add Setting button --- .../admins/laboratories_controller.rb | 6 +++++ .../admins/laboratory_settings_controller.rb | 7 ++++++ .../laboratory_settings/_add_tr.html.erb | 12 +++++++++ .../admins/laboratory_settings/new.js.erb | 1 + .../admins/laboratory_settings/show.html.erb | 25 +++++++++++++++---- config/routes.rb | 2 +- 6 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 app/views/admins/laboratory_settings/_add_tr.html.erb create mode 100644 app/views/admins/laboratory_settings/new.js.erb diff --git a/app/controllers/admins/laboratories_controller.rb b/app/controllers/admins/laboratories_controller.rb index 1c314edeb..f397b0f34 100644 --- a/app/controllers/admins/laboratories_controller.rb +++ b/app/controllers/admins/laboratories_controller.rb @@ -6,6 +6,12 @@ class Admins::LaboratoriesController < Admins::BaseController @laboratories = paginate laboratories.preload(:laboratory_users) end + def new + respond_to do |format| + format.js + end + end + def create Admins::CreateLaboratoryService.call(create_params) render_ok diff --git a/app/controllers/admins/laboratory_settings_controller.rb b/app/controllers/admins/laboratory_settings_controller.rb index 283afc175..861db50c6 100644 --- a/app/controllers/admins/laboratory_settings_controller.rb +++ b/app/controllers/admins/laboratory_settings_controller.rb @@ -1,4 +1,11 @@ class Admins::LaboratorySettingsController < Admins::BaseController + + def new + respond_to do |format| + format.js + end + end + def show @laboratory = current_laboratory end diff --git a/app/views/admins/laboratory_settings/_add_tr.html.erb b/app/views/admins/laboratory_settings/_add_tr.html.erb new file mode 100644 index 000000000..2d6ff25d5 --- /dev/null +++ b/app/views/admins/laboratory_settings/_add_tr.html.erb @@ -0,0 +1,12 @@ + + <%= text_field_tag('navbar[][name]', "", id: nil, class: 'form-control', placeholder: "导航名称") %> + <%= text_field_tag('navbar[][link]', "", id: nil, class: 'form-control', placeholder: "导航链接") %> + + <%= check_box_tag('navbar[][hidden]', 0, false, id: nil, class: 'font-16') %> + + +

    + + \ No newline at end of file diff --git a/app/views/admins/laboratory_settings/new.js.erb b/app/views/admins/laboratory_settings/new.js.erb new file mode 100644 index 000000000..47eb5aa38 --- /dev/null +++ b/app/views/admins/laboratory_settings/new.js.erb @@ -0,0 +1 @@ +$("#laboratories-show-content").append("<%= j render partial: "admins/laboratory_settings/add_tr" %>") \ No newline at end of file diff --git a/app/views/admins/laboratory_settings/show.html.erb b/app/views/admins/laboratory_settings/show.html.erb index ee9880fbb..67536af24 100644 --- a/app/views/admins/laboratory_settings/show.html.erb +++ b/app/views/admins/laboratory_settings/show.html.erb @@ -143,18 +143,23 @@

    -?c!< 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 literal 82443 zcmcG$bypotvpyUM?(Po3VdL)Zoc>>bmNh30G5*MMWY)`taccs=S<(#)l8k>>oZr#Ua4`Z7~>Tr~12t za@LTQ_)s-Pa{TuI(LwI3^M?=kSpV6e%yZ}db`kp^FD0(!4t3TEZ}@pQod>evTkR>1 z1r1a1V1+^uSexA<*aXTLSWQySy1u-~ZQ3rmNVSQWcLkl%s?=rL@CZAOt*M+1a1Wsp z+prC~U`T{fsa-bvO>-WS9aF);&BNsQ|Cuip;xykf-+IXAC(8oHsgw$r@+lB!OZQM2 zV%8w&z%WA}LP3+o()ln(I!XkA_z=es2R#^(O+a=3a}p0K@|U!s9Q9QO&4EVpWi=7~yKR^jZ!m#er@!_S3)yQ!)LQ!p_a{AEuGI;s)d|f*Rjx1AeP4pjK z{&Rm>oCrl4_P7xe8O9iK!;O~)?iVTm z6)P3fbE~QJfRrd~@evm8gU;dF+Sof5}EshN%mW$n5Xy>l5h{7csiu zd~vDpdC=LD36c@T%wT4T&T$42ws6bGtF|1HN&wA%S(+vyyBVx^z4neE%SRcpuzFz1 z&vq#)Ng38XY~I#|M|(}#vHbfe4KexLFfha&olh?!D@-p>b!cRJJ7u5~1(4DmLGwIb z+ccc?;YJ;->a)rhU5bW6!&HEUK6h!ox=|GQ$if&SD_RL#FV6{I`+NSxPcOs&H{E#t z&X`b`*!zN6t5jIC49-($SLor90sJ@~nE90c>~!A)CrA=UT1;W1RyU`&th!@+g8GfB zCuD$hRIJZGU0l*C??;tgCT+aDyk6v@rkHZh@}N0eEcs>ctN+`mh@e9;@z`xCHu|Vh ziiSnDm`0ZN_780@LigbvVJ-A*PHv~*0pst3xZ_z`-%vuP`Px%POdV>7|C;Fknsb&l z0s#kQU0+nDPi?&60Us%fSt7o^Lih}QTn&9uQ8)uVJ)7y!;uuNb2;bg5JMx(9x{<;k{vlLT)>KW&S`38xpS}gM<~P$7Bl%2nC*4S>K}c=7T- z=8hC&x%$ptf`zahM}yEB?R{DODMk4wyrm?lr+_yygrVaTIn-ll(tz> zRu+jpJr0K%H72g5p&oSq04X;LKMG;u{cF^WtjwqAsQdKdB0!-B`<@ITm?p7`cBsFi zJxG4E-DAXb(C+`dfgvVA!QTn#?I`x4!CcGOxgo4Xe2_Ly2UDH}jJsg!UlGcXtji@I%%;|3_YJg(ipXSIhG6g+F&$ zmwYXc-H%0tl}O1(#hx;9 z`#F5G_FpgG!|(r#M03Do;Jd~xuDtqG>6{C#(ZweDreS_8BO$b84h6Ky!J7k<0YRK9 zg{0}+ZKLu_V8;3Yu@8q9;X1ZYz@!_&Ag)x#bDtQN$x={0AZoTR%+z#3&g?$k5%|eJ z{x~e27`lH0#*zq$eTV|`Mj@I(0ZpA92Skf&xWy)Xo~X&I@{3A+Ac9V$S?$M)kB|H_u%XtWA9~5jAoqu&`p1QLgb0((?g4|!3IbZ97k0)3PcLXAJIKu+4qL}Hk7Fp^kZDKFgcoND%Jgy@b%yL zoIp@6&mK|q0mm2xSwC?ViZQ6^zhjr;?`rXSc2YLHKePuUv)HL3n5l>bi*js1WNd)-Fr1Z!y}r}eJW;Q`B0QWd3TpH7(B%bew=#^%-Ij2Ieeo?;jwf0mJ2y^@bd`< zSeDVQgd2RfEppSN+yQUH**MuIy;Y!P!ZdXgWr{uMf(({V(*J3Mo^pU82Tgm1}-W;W=Sxp{73u| ze!7DNPA)GIU|$JGCf%ehO81ad!C7m>{gOQ(Ex5ph8S&!kCJl0Gkp&!@ej=DA17Rsf z8#0Qs#9oQmX4 zP*fkKMfXjLSANUL9ijTp8V7D6*$i90fe8HDn&T4~3X>eW#U2{nMMJZop(Q&#n1=3q z0xAPvj9^$9+q8v^4F`?5p3L~pPddwQyM%s>F;aZw#ZRpvGjasYO~5 z4)SUE!_b3^VMhQlVefhEf8eKu!6bNk9t;xvV+mtt7IXcu!cmtd?$X^onlUkz&-aqvDU^b5t5_VBL3?|vL@2G7*D zv)k=C++L-V_#weJEgP*0+6^m@AM6@>A@oOpT3+Vg11(&vc*9ZCkRFVVe0;h;D( z@eYyU$c!E$V`DxfMI~>7)P7g}4=`0;D$CMlQalAwyyA%j%XCGSO#X}3%lREvLX3(L z&lk(iNS-R)Cfq1rP&2GguQYrML2)#P zE34W9vSgrb~v!@qF=enpv`A zw4)VorFB1K-dEp*1=>eQKZ)}cfSYQs)w*a0c+2$I)^Ny(ms2)2^st?WTAKk0HtS)n z;u!?6!Xvp)Wra&&`3$3fR1r<7T$lZ4Z&n>|rG*}2sFgnI$(IyVBz;39w`#H*9zVMVT%(vCo7TeO~N;e0g|74N2XbBjyRQt+tanK6-LL6s#KXAM&xVdoYwf2h6T4 z1#+vt!=l@RcM{$7{rfh&GqQpZCsm-+M4y@m${k0MgKOWON@o|4H}033DUM1HLK(A~ zmcBrC{Y8PnxYLCl4FrISZU4Cl1+5fZ3f#+HZtd-$@Wi2nl^N|2k||2s*W^kC4e8(4 z(qs#U2$|(0C~j;|6z7zf5uoMnCtN%|CsNv|-%=Hou$R6MUf|hjALPq!5Yj-j#)KsW zt1m02Q!KpQN2LeA!z*6y`=BI&XcKhnx8l%aUOHWe<1Aj2sgC1`_Q3Y*lfC8eL1EVz z5@^uD*M0R?mx*Der-sXvMcauD7DH34&?>o={>{|zG0DWCJx4LUm&p@( zs)+kpoHGX}OdF|LaS#X7U|<}|g3sDz?9E8h@yV_ef+%6+J&5cYWwINuaI~e)VfrfF zMmg#+VsuX(G3*6{^BfM4o}kTiW%cR1j9~-E2HAX8QBqO#ERbEHzPuJQlgDl#Ad;15 zcpsBI<9^v_7xF}qta_vRA`StTYuDIKGIH@o4@+}0u~)E#>5sDU*lh+grKk*}`@WzI zX=_sex`Sv-vv2*&OSYpR5*A;Kj1?5>V~!%mPcw=^WixN5@Z0^Ln>*lt3>sk}S?MBp z+Zmy~ffLDPIquQ5SnhV(1VtkRxlva(Dk_hl0L5wbhI9(H^D;i5>mk@}g&(y7sj?k@(>eXsOUh&ho>n3ynQ zq^|tlpKj7zdYR`j7ASyV7#{nrD5K(H0)D3;{!1$jg3-MER$uZGrL6F3?{iH8P4%+H z;FLQ~w|cHNgOjFb=cX?2YQlTJKewlj)0LP zkbX_+w2>?H5=#n^<$jL|$CS5M$avIxYMtTd^vkEN_XZiIzvV zIcd3Q8bAYZ+KR?RCx2B*V!@=-fTk{|UQlURwjUT1u6$gRJ)lyx;!Yrgja{BbSAkVF ziaU|u0|fMS7^5&T?tE^&_XHbkzd+@zH^EnWoy@GQhd*q*xh{~~^xW}ogdJnc%vi3( z8u&dZS^%;`(6_*Nki9K((945ps1Yo)GgZX;)+^Kmp>_zs_uOt_iFcRy{rblSuRZ(4 zD44Y%XMucV;D7%G{chwQYa%apUDe%$G(Cn1>#ykl4p!uEjs0 z{ds3!i3Jc5A*Uh}C8qALNm|U91^w#bYNHbz>vv4%G9ZM&-E4Sad)Y^K(T3X(-TAm; zei6dkOaKsmr~f_n2Yg2k`2fEp;;-rlYQG9CXU`NuEw+jK0m9p%zU;=#hF=C^=RUID ze=4L`YA}9m@pvq4?+*Lz-32pYkOn6j>zF9u)1+N$_nG@Z)3`K2nm517NF4FkDGVa-vfBNKgNu{rm?km9CIIzGa2Q*JaR9z2a7&g~ z3(3+^q-!w2ZB<57vTwL`2h$*)V5D~)p>1QvN6sWs9&VJGO~)BVoOm?iGGGmNHzL_e4Y@8LSE&xu z)qXOlipZ|>=7UUR#aZzak1h8K2`@5&eJ!MKQg`?upU2*J>D`s^G_}utNa~-SrGLm0^t~+c`UktxLmBxbRe&ACrt_9@2U-;GD)}0c> z7D}wQxpJc^G0SLcl6JjazDK`5?oO+JPZ+?Cg&-O{Ex-2w{H}8!M_#tVGul43Tr91# znZM}?+&zQ$uJ_X*P3Svnd8p(sbKM1>_%Pl4fR#s9tAW#RH{H9vC+sbtHN_P%61pGp zjJ;JZ+|BZoqI6M})Al``+pi+f(mQRO{1&lyhO@Y-hOS>l-g2Jo$UNA)elDLM6+K-P z8ocnxq$KZDWdeqr$8%+Db+NXepAXfAOK>IyzwDZjzf+kRcnNR)oZnw*GUFGy3C=ay z%VfNIxQqmvT)xm3)K?F0y3IirzsHh89xlO^)jp&TTdxf6+=JN>{ND_f-?BDVyZ^z= z*pe_D1_bswI1ciY0d>g; z-LD%IMv`Og(3QpCNU*Z%da`5blcsrrHMo}Sr6;EXk8FOI-tB(yG}hN?a$ryXnDj)r z42O^GM8hDV$4VJ*i`PGSg$hQaF59ep(Ytq5!zzT=bH=j2A8;oLn=g^rCLn7UJS)!65p2WCTn>BAzq-xb^^yK!j=wJEV{;@stzQAnW^HK6?VPe5>`Qjsi=GS0` z&$wanS_ATG*MWmA?xXa2Y$aIbVi<#zqE^Mh`H6rt5aine;hmr!06C zOY&iIGA~4X-%~*~^>1m8E}z+PT->@Dq$2x2m95S$64WjZoWL}S&8L13SM}Lr&G^-~ za(#UhmCIR_hVI7BZ$J?`L|nBhA+WZ!8L|zz$8P~O{c&6l6%EO>YsW4uFF;0#r7W$1 zxj6vz?BlD*Fs=m`P~g8%i=bvM8xOXfKLVFU{j(g%N?7$m2n+oJaz!8cwi?{YuK9iR z?pR)o6OdQKC$7f7(X*h;=q1rc+V!hgwF<$?vm&I$rsS|j<#59W-x1gRnGF<$Tsx_@}R;uW$ief=Bo}c8^9}Z~_ypfO7XlU~r z_2o+BR-{@dD)L{s#vvEz-O_Ay0h8;lb6mT<2IOy?o~?5>+8wy{W>XT&@UbJUfwuTlWv8|Z^Uv>rig=;h-(PL(NVsu4Zz&^JJVg5Jaw#A2ub&f?}; zwl;VEH~w^XWjpB|fnq`5EqtlPR0ZvzxH1YND(crPX`EuqQ|RCQeMe>j-`J+77Zar! zv!!380t56odGUKYj2_Q@w)+jpya^t>?@m|dcl)!O^l2&ip5OnM&E7 z)WB)Ksexfp@OxoF$FDc>xu7sLkJ^K-cNy_r`U(0`Ud=IKEjQ(2^6|@@ zHGdfMU@$Q*eWuXnRf`K(MAMMn9xi@7x9p6#Xj*_6)YzEQ?B2Ar?D}_Ld=H@eA@|C; zx2J(O%Hl;tY3D}Y6#Q+IPsKE7b9d#w(B|QvmCw!@)lSCGM}O%kQe9l5HtG_(DW*oA^aA}TcuD;g0j!I&;Ty&ML0t9v_wQ}Yd_ zgn2GDB7XvyW$nH2PxxP&8(YcjyH2d8C|CsoM%4Nx>m@SUJ~*MsiUSdhLt6-Ru?TTF z_tld7ALZftsO6LnI`T!=@R2qA_ig%DBixgid60^WZB_(UmJvc*_p0VnRP?DV-7XfDmNRllzb*`SB;Np!0URp8oXVhAFNxx z8rO8ts{MVa0-3e2-wLBws+yg2R#R$;5=qVSiv=5%ky;4(>v&>W4iEC8XcGVm#yNhh_1P9#I zf4tEI0GSNl;8;6uCtEy)&Lh0@GHsS+uluN7+@0l3Xfs^OWf$`7G&HyXZN&}wn&S7A;{!x5&|nFaof9$CWd0shD{ zZf*+GFtJx<4(;-%3h&ZkMH9*gNI?QPgKKtxk?fZVgBHNOl=s)k%Q#Uga_#TV(Y10( z^AT9UfgSEY27R}L$c}@V)jcW7x^dIu54c?H!F~L)7z9w%Z(=3DeOc;H++4vC`~|ks zhwc&($%j_mb99tdV2S;6!cy35bf;&6f4f;Gm}se%k^}guBaSqbOpsZQ2?L|lFwW+@ z+KlbFBncG@omp*J2*=Y&1n?L+3DKCY>b^KqCpOUn}M=wrTxcYnzF#p2-A&BXPXG9^Usgt6*#DWZk)^nd8E{Y?S6^zO zLWPN#@Zq<#9Q>e%_QE5Lh3mBuFzW}sN;B{@_l=k9r>n{NIFsY_<$J^*)^tVaq;a9d zJu6I+lH+0qyZhqh55lM|r&X#u@%Y-i+oIR}kjqE_)#_}t(=(^CO5<+M?KidHXr_lrgJSBdrA4q{}vGq!>Gk_)t-O3{`~3q+7xIOGTZg~B5&0u zFTmv=8^Wnvme8@Wgl3=c-QklP@dRK%NR>-Y;_KD2d6jrSa>XKV8PrX6ZM zgM3!{ig=^DPOFhfe>ro1c|fS$2^acPavFynG`DakLVO(G5LF^|V#iRs z_;Tr1&NffRi_XLG#}zu!Nb9X6Kq={d{f_ zZMGYU@%3B@S#!9N!NE6Rprqf>I|L%Kaov=u{(eo%tizVLmWE$ryyzM<6M*)%DY>0C z4(Ni>EK%B{AzH(rudjOy+Qr1NrQ#qPdll*J?eBUu$)|HFAildDRQahlGU}engp!2 zhGxsxEDUozZbz2np&>M_XkuwU5-dt92P%z#cqJ}g?t*szF3w_UJvv$`ay)1y?1V0d znayMgVi41h^uWz?i&2Ihq%N+(xTrBlH!o#js=;CceT6b^O@#?5Ga_vFo(?RUx1;+0 zTdLVFB)53fp(0Y>Gvb_pz!FGXBN-(er2&duz)5Zzr7U;j69Ft%$5syMAHvHf)cqwW_0srKMRgZ}9Ht zMP}SYBVkzXyUgPR`I{)ze^MofCd`?(?^I~dq%3?)We#X4`>3Vtirx-0(@+e#@pv-E z%9=GFJ)ZOmg66*+VUU!Th$?+`t0~?@X$aJka_3_xPW|R-|CKe2i>42xPQt=UqGPJGQsqA3cel3#BdS=E{ZFgqhUpDybqXSRj$R4gBXN2=dK>|@c!YX$^gv+j7 z&sHq)*30Pu*yMadZ%Q1m#GxJvp-bqTH)8qBB5V$`{GV&~8tbX@bB?Mh<_#CjOa(yI zqI{Neg@yAnkunndTa?$9OLx17lbfPBakNjfMb_MCygB{3&U0EFZFGX73e!oc9&zQi z_~v{*wci^|*RefFR z=Vub#x(+vW>P#t5e?_i>Wk4jh2#3Vzbh^g>Q$ccIrKI@EL{&(!>du_*RWiP~=5jQz zg%vi?vXVbjcMb6+Ed7>^!bSjF1v5Gk* z%nsOFnNtv*iV2BI%rhrfc4vtjdMjk$YxdKfV4+jp+~`C9=*snJO|G z#}yQ}2EY<8$1>pc66WCd8u}OO#(r50gMo6f0Xti>E3kB#{8a@o-pXH|sk zBZ&0ztmpLp(E&zjat3N#u@d=?_1nj_R!U+A#UE(!lmA;_@~4dHd16GKMhYhc{WZu{pJ%D8M^uH-#V1!4hbzgR?#q4$*V8BIr>(9PF=dl&jlqb+H^BD zQWet;>c~rV|9bp?GnOa{2ed?jV;GXo9zyYx4yC;#sR6ZQ@m=9(&cjbqO=|yQD5jVW zp^K6{fjlPvwEXYGgp=$^Nb6OrJ^V-Bf9Nm-*9baToO^#p%x3G+TvjiyMp8(2+VPpRQDXL{?z+t1zPr|l{q zNmH(`$?lB7yX$3iz_0gcjhT9bsa}}aHey)wKiylscAO6+)8vDB2pjIPhv}R?vDb9s z`}`FZ0);lYdQZ5ctypN)7WlZl4|b?#Aft=j;Qm~f+@o!>^ET(L=+^hQ{90bNWwJ-O zEF$-_1Fs(21D6QfvuK(w`2L;`yZk4(_#*9%2wC$89r0T?^?K?jO7vnAVe{s$*`j3b zW!do-qj)-WDPIRCF$F;CSyT4|#(bJ?nyLfp&4tQpAZO{{br%+-SsYpA5R_tNPAEdBoL+N+bK z{8`5blB-0A!i$x2Kwf?9i%&iHlQDpJyQdQ9I!($#x<9<9>S6kZGr^B!MM~H&{%wCx zq`Li~>q`f10p;!Rp#GEVO-`p@Ma8p)hREQ1Rt7@KlRD=s)bsG{ zYHDER^vU*0A%V+ZP0#5S*dLdL4!UlH0$UicFQ(7x z?RKQ}-AJnhWH}6tp-F-1x)03x4o>TN7t39dKCT-Vt^J?|*}p8lkN)+>Ds$sWN_EaZ zX2$n!)PruaUW{93j&%S!8QB_aJAuzd?n3eWhX}`FVp1bM5@3GPJTDnXn#9s3$*CCK zrzO>F3l2iw7slzHosEz5-B7M@uRada9Ba}Npq&lcQu;^-6Mt(q7<5$9guVL(s^_o z4sN&r*N6lrX_L`lsgMS)Nb3w=c})03$fiBJGYchewPI*}SuBo>zP>z z4!SokP}<<^Ain-h_6gSv+%jL?a@pY3B^r3<6&83*!AXC#g~5*5WZF&3cdlW}8SS7$ z?}37+Ao*}w+VYqDm8FP~g^N`fGcY|hU%Hh}*{kveFxRu=DnRse>2lNld(Cb?(~5^W z#`TZ+r>ZFxq^q*yO(Ac@{(LsU61%S46AXFZ74iLp12m%do?DgM6`$SBYdJQi0Xen} zwBcyZWTl#kzl9pEf_A}h;GEFenm&BBXz=g&MTC&okTiM~M7v&0bMy7lYX)C(L5Lj9 zunQzYw@8Ij#lPu~D}D%iwUi3Y8SSu8nTbFG!TqK~fZ$l_iJb0h8mz1T8TqPPMtsAn z+X<%^Ooi7XA}@)>z(_pxv&K0k;rUqv6#&cVV;D8f?)pmDK@NaG5@R?JG~1f?)IS)@G-M5W28>;Wc!uqG{W09}F62xar+80tOCyIo9Y=osTPQTqXzaznxnxrJ8uN)A4dUtVq zFXOngBYwaXY}7BC#|E&O)7si>TY4J}IcpoYYp4Cr&H}es&$)7Ri9A=%w%ZeKd%0@HG#UvGwb@+e`2^E*C7;JL2O z>FX;0w`db!ki1Tdg?LHeM9k~n!)Lr=hWy2?*>JjCZ!FNTYEMP_d_EeTAYUP=;o!|Q ztjO_4Y z+nmvm<8}X)tG-^vd7$mbI$jhRcgS+&8kgzJOZ z`$NX?1_Z1uN-H?m<+DC&bYYvVXk@|ao`fgouepwzZ~*z7vF8PBRp9k_N?w~MbB^Z; zLy(+JscNoOQO(ItzNm1}Z^y*A+|)?@^=89|i*Hdx+(h!#*`_NJ6D!e}MMe<}(M534NU@ATG z_iQqaI-37={00}9)xh+n*9U4Dt^E2<(oGu9ekR$1*2?sKf@te4Z+^0uaq5+pAIPvj zKm5fDj65D3L`~Nu0HZgk%LcL<^C6;dVDX$A!=Z{*t!L?4qt|ZUgg5sQ#&2zBr`RWBKMEj1ngEgB}y4`-Xt0o{#gMR z*dcyT%k=7Wa(}VdXuPf~jAF#T2#!r>0CeSPp1^1tB06j-z8eC1X{EWiC^mUs- zebR~;2V4goyC5}o=FqhV8hO;k=Ny`VGoLxa_LtEwNdo+sX_LB5g!$Y*u1yz~me_K= zz$Lu;c5?CorZOe@d8sF-7az-3Kga%9{{E{kz#E3hB<=S8tDNR~ot?RG%2ay5>U^o8 zxz9&DeLiAM*<{dca4qQ4B4*@zw?bP;{i&Q_ova;5s4CmN`56% z^j+p_83A$>lYD+Nw!3dBK6d#Eq521#D%iFWKgoQq-;rLJqmey|^*JCh#TpfkFqh`0 zraIKKJ|(PGRAQcj-&Q!j;79}DU(O7*&A~)^AOs?mp}xSHWSG?_6g1Si4qk^R??ctz z{MAu_@aFUm@L&llz9|K_!l0e61s?KL^@xf`4pmwZVRHOitXT(C3>tJdOX0_ zfX+KzHmd_FCA!+L^=8N-w>iAKVt?=fB6kG$TrMUA2mkF?gxk(zwT-pABkDU9ar?7fb)=O}5SOlC0QJn4J2SaUJ7AlT+rL14(IUXT_4IC5c z!t)m1cS)g_g9XU=6at0Bj($PkbeCQZ?kv`ILmRCP2E(qMqO#cVYAxW`o?>VOtZVGw zzc)>5?|vl`FAB(LU!t9<2@z@<4hl6B0a8dDrjccL{4MVL=ZE!_CpgNoWD06vFkr@i z?et{%5BJHsx|L{fP`bnfAJP4)7oMN$o5Y=YF@Nc7u#zmkz6++e7Bw%|+-=`%kqmNg z%~`X!D;H)Aql8W)&~m}egT0^ur*P;-~xA#SkWp;GF z?LS!1xGo2${oYKHo)j>wf%MMq{MT67Bcp(xu#-`Q+Xa*DUP&E=MtgK+bq-`c>8k{q zM@(v&MjVCcj$v)BfRr2+S8>dVG~VE4zJ!H1b*peq3=&kiwKO`r?pK}|&r*#SEKVYr z^iM@6sS)28Z7g9Vw%CF>uSf(pH_w8$pQijwvpv+l#|4t2+7htWA;Dt0uAD(0=4d#A z`>f}(2wUEJWox-bjS+UixTE(DEzp-OD5naBXYqy2C<(~I0&u{<%^1S5*9xF}-E}f=gp_7N~o_|*(c2`r zA3S{)v*$gCqd2SFj2KG!0@6*0Dyi+xCksU*mG~M1@4;VOM#76H{NkE-qlVyNLTkJV zY<0IZL9M;#wD0@Ia=!4Zpb0xqUdqfQzI8N_cK3m%lDb?!?n#lT84)zBVKS!#bz*_9 zMO@|jbMiN?g$T}IZwa1c0r5jqq04|fqYAXn-Ey~~wLU2tmvHP>WIKCp0g9iu3%_G5 zg%auj8`71|GSs77k1WPKB!ytq7QdjAR4!rWLiNs&1pZ6WS8q3q7}^*cG(H!K@Jql$ zVMPZapn|cty*kR+JD8j}2kz~sKDx*alxRtvozKvFS!xDr)8vO!F6kQ!@?%Yg7||L< zBRM1CMw7Xrl%yoX**@5ihNI2ZE+0YeP7wIyPc>EO56x|?=!C5s(#tbihQpr9#?+x& zQ+%TP^B?0X@fByo2g%bWTX$}Tvr(31WP-5WPy6WXrv-{~d&sp;n_oK4udUn_BjQx& zUC}Kwa=}kwk_qQGT8;i7+1@QnOg?rP6~SxEs!XX%bdU}VefoFbnF3tP4yrmSeZod2PYZTf9x(AQg}A;7n4(w=OMPRrYs_Ly8=!>2y?7f-QWc1FV_3gAa_!8XuuZx zMotahaGp+&;RNu)H{w`jTA0z348?Q%=#NE)ZuKm(d5n)%HZT8m+{{3Y9d+A}}yr9Gk@nn_VfbUWQ=2`(| z)%iJBQ`;(@=e5Z7?bD>lXD!Ld78f@+;@<4sTzk0*Q>#KL9Z5>Sy*l+Bs5`&x>=oK|C0l#gCy#H zpw`MOZGcuuV!!uWABQ;}sV;xry@D~}P`}4yP=< zAhCXN>I!LNB?>6qa7#NIc9?x~k!Qp+TRYx2J%*IZh8mpQ$20R9-xs)r#b%?eq}eoW zjWGS&{WK0sq>@ja!k*g0wxU|uiI=)2&Ecv?# z4;Rw-^38hr$I#JaUE2IguZyHmIMMRJl;dFcaI*VYuAnQ|wry|wZSe$uBRSVws$}BA zJoBx2n$3yKT%xR^mHShKKG|*>pTnZ?bYU+Z)->MG*SuKTy3K(}d+#wa2zBF6-VL$& zJM1(mEb8-IND$c@=u&;!t<2?&3rCIG>*l=K7#SW%yK|pq<@vGys3>>q51{+kFqsb$ z{fKnO5A1`kJG_Kt63CICZ-|rCMO6pb%&JOJ=e#fX57eR z5)(I?bs>Fpi^V9_Ftl8KFpb?rPUD_{POWnS$yRG}`{5LRrLky+)OMG?5fvW2VOFYl z_Fx0KOv1q8LUFj<^ZZ1dF+Nlv=GGMX^2CCdW)#J4LVt=}HaPbukj9l;VD6|YKi@yd zEEM2V&Og`3E2%Y`~e-wmVw5Kt0A8GEv|cyy1GPmvptWR{T9 zgjeyc8B>upZIaRlN_N#(tGKNuJD}Xuox7>44Z7N9RhAQKSP>^BK;(U>NGl)p!=vYP3$!G{uM90BH|{@AsoFoL5k z^2P3FEN6%7=I#hPb0~f)bCIfBEbs<{3$?{4N&13KejW2$LaxyrakN6zz9bAB`LH0s z_Fbttm&P;xd|hcsr2g`Z7ahr!Pp94|L|=*}^ielrD%V|YJz3K7^Jm<3Zsqj8r~ys1 z6t9Q5C$7Ng&_3Cqh9tDcWqm;33v;k#08zy+^*wk^sElQvorH0KIN5j`1Q2U9IrY=R zrs&@G@Jj^?qaC*ZPuX%mC3-9FeeQjR64b* z&u~^PI^tG=|5LEZ#MwjSx8nHK!VS~o^Pb68!*SRruNv!hv?u~$EbJr5cN}?&C8GYe z#?0eDNo5MhEUvmFc6q~jDJkR3k`%Y8J+3bz7rmDm?KQQuQPTBoSCyp^4lh6_n~e`H z4^CfjoSxQX%3(p?lJ~G=ozAqEbX#^o!TI)ZbWL(Y#o}c7yLqhJB;%pd-z&y#c`!_>D0OW4BHx-{9ei_-O)*ZLqbw?^Kj>c<_k7dlH2T zVC%5?2n;Fb1XR)l$XhiD+jPe~#RW2^J4#>w1=diEV5Ts_k7dQ?iMgLW&uWL2O7Zq< z8}K-YM}ziYWb@>xZ?^s>Qh^-k_dI97GT%>jEf+jNeP?@*SegPgr}-zD)DL>USEXr- zzU?=BoH9gEC*Bz-eS#~cE~8ctA32P)Ji7bv8W5xG>|;ADN~*aOUaHB$kfAX z41h=+JW!06KVgu3nlHavt<2ojWsA>9Mf*$Q{7-nsS_HU>u0R|Eg zvU~zisn(_s!N30kz>qzoSWEOpVH)c{^T6NP5lIlmDphg)LVOSj(1Y}k^)M3&d6C%I@g=x7ecsR)`Kca9j5~tz4M-MbSF9k0&Oj*?!eOf*k~I7Zv)27LzwF6FXeT3ouC@!jOZ* zRIYz@nCP&r#!oD10#e^Nf!!mBx-#NdR#T+B#0i!YKE~K6?~JA>EHuoRm(K?N9zz(- zA-DeKzkX0xsDi>N!6q-t&^D2S!sRn95D@lRtgb273UYGtC253Yh=-z&iagXcL$&QF z5_rfgVD{^MHAFz}`>~Fo-(J-osV#BdY=AO01#EMy*-^#k$y?!NqN(fO3AVu-4?VaodTyArLZT2 z&!%A1`2LoVrfcyQbv0D-&MRKj6=nTT;P9?}^o!j+?n994f-gd#$6<0exAm8s*S#nP zG` zBWTlhgS)$HfIx!F;BLVo!GgQHGYk&F-8Hzo+u-i*?(Qy!ch7#i`+It-r=PB>?ykA+ ztDTDqOiX*llXBxPK&;&a((gLduT<#SwHM5(vJ#9f@MBDsg&JHxYb^z?xC4%>ccep) z1UU?-2knOl<8$I1n5ZTY#Hx*Q&@!xAJM6y1FpkF>q$=1#hA?j&i17SUlf*EIY_F3U zLY~Ju^$|=N5s_w;n3HV(JIXkc?6i^v4k-!si=P+g;XP+rz6)sCun;tMaS@2`<@Qgqx2tcoC zXHa9dRzHe7_e}!rLU$cuX$l!R91;`F_lAELtgnBr%@B+j6gXW0lF-ytMpF6etX~6pl>$oW4$RR z!GwiW#>}Mp+WpL>!%+unxLdwSSY}a?om$WQ9g0~J3dY#ptDAipY(V@!+XHb7hGtaX z+zyDz2#@3N$8QVJWTr-iz$6wfu~uP2*f2$T+tRSb_r^LaZSG+N{FPeuh<#RAeZ3`t z<0BISFW*Z_OUJC@8rPkmID+!*3haAhR1^b#BF=^)j>TS)r-tX$*kFtBQ@7oEhhp#N zxH=P!*~S4*LdLsh7qM}%32%ZLKiRQ=I6F!v@Ojn+7Pbfv~(JZW#sMqwd>8Y83{vcewtKC}c z^k0s#ZQnIL2>4D<8x@l;0GIRyW62Q=N!sCi6BV1c(_@QEy(w}q5V947;=Ev_#UbZ@ zoA1j%&8#;%{2Pw!M;oIeO*a6S^Vu z-!tl5HoI1E1r~!uaq&m;!{!w0LWR>wsueJ0UbC{j4wZ@ z7*?jy3VAYb)%}C)nLG7X{{b0v7VBJSjo;**`9Z}^$ReW&I-j{3HSt6kB>nMEJg>G80N=EV13fo8_q9)I0KO`v-!Wq+25&c96w zYUtVU9Fw(AP_i7u<;ASj*<)EquLh%$$ozfP{r-z56>GVTQly%Mh?zj24eFi6pM!DV!Xf zSGHZcO2*zqlB{ZFZF$0s8a1usG%ZOfk_C~Xbvr|dU-LAc&K-wjHVx;Or?=6;V}Z*) zt*@qFDjCHz$U!>mYZ;#)w0Br-W|K|$x(V?sBEt$7Vy4@CHp>B5k!xOgPD`nO>UeMq zTOG6Hv}p0bZ1`pfw%FCxv6?5MWiEzJ%AXq2u)wZ%X5K0v#!2s2ww7p4F)0z@GR1Ef zgmQ!Mcsdf}Ci^MsxLvjfkE}PMg-5p&ww8=wO5z&_KCd%GNeRQ$ zFI_Y{&gntQaUzqyE*$y?9jFygiXmFHn6xw7n)vC9)&Wt?N7Nru@a93XXBC=!^+0YI z6v<3_?CRMZ;B;C2WU%>pI(IU+YlDWOESrf(O4N@u7yZ=$i|5wUoszOsa&ylp7uq6e z@^7U@z4P^!>IdA(?2hzTxkJT4RAS@3bS3zr8$=cE-A5Hl1z7*s>|A|JzOIXMVeA%| z>ujq*cpZ_ZHUo$P3;wZ_bn*|O%Q>>A*-e{;3b5!PzR(3S<6KG@Cg{Z_1=00$CJyY! z=8?17c1auL4TxJ=9x67c>yh)DlCk&z9g-Uj`NC)Gz!F)b;$ZWFbmc>_Xf8BsP{io$1{@iu!S>59v)^iyZF%Ho ze1AX60C>BWcsAG#euL$sXW^QlQog)Eq>$7jL%a|fDwmM*;wJQr$SzZ&d+-`B7gy$I zA&=#OEPeyEjtJ9n8QH?JBA2fP2smm8``CR?X^QU?f0GMEh#E>_k^Dh2$JO^1{*hm& zm+z!`cD{{F*`V71>$U_Aczi!!t-)!g>eq7vB`?#H%Ob~F;pzCLuuDNq;cGWQZc@4Q1WWzTSH~k%XR2v$@U(PU??LeAcNlP!1`?xlb!spC;5;@G zcMNc3{TJpXeU@KXLR!!^PX}vr`H-07{72K1E4;AxTk9R5s{GjcGEC@FwehSJ z-2$xn1{liPo^2%$&zp+_$(%{t{9AL$Hl00}Bc@EY5CYEQ{MGcCYR_DA`OSs6WS)jq zcoh{Eqb#t@TjFwF7v9B|^Pua_2{6*bm00SsHl%M{`MK&)BH*NLekGB_eW~qCtL2XHr1*Lr%S~R&P7>xR_eZU%_270b{WNyS)%Rx_ z8|Lg5T2NzJlbxFB5?Rqzwr%8iaRn?A)X0OTIWfV&<`t>?MhbWC>q#0%@Q$4k|NVi4 z2_0PSyJHI&thMAfZ%tvr1?A6>y%to=*HkKLxzP^lwszGMp>+rHIhVPB${O}f^qGlQ zEzec=&LwBKd8^i%A5iP9T?E#ic~wd0f|J!E{xtVB|GUtrNd;6ceR|i(&;j#82SB=w zXnOx6Dc#%~e7eV=Ul5U0Y=m2%F&^XN6DhcLr%V#lB=@QulC$Tj@mBk`dFKZK*R+Vn zR_`49CVQ0nvnS<9m539|J2o3$z}(UD<9A3?C||ac5N;wE;-BWE3Wc5(uFRDQA3I%o zbaP8b!y`iJT3WD~WXbQA+GK7YdIN=&kzL#TGY8{I4(aBrRvx&%HweB|!D9z1M^+mD z2lNEkVpLJ@x0P%DVg4W1GJWF{{&WN_Tu3L{WZz^trk^!<#v-Iw57hfCcM^1`nv~yg z{*N&z#OE%Ao9pDP?qC_-^~cb}*SUIShfqsB>gJr(DBYtyWg5xRTfi9s&k!`G7Lr8V zLi1>_#tY@p*Y>)3sr1r;fJ3XZ@7&(8A&Ue5jfHN8Q~n3M418IY4iC$5SmsK4J}~fn zUUrNQbNec7vMjBqI&X(ao8%?v>Q}&f(u0+1K)m^2%}2*{sc(>i$NjD1eN>!Hz7O*6 z0V*kH;eWBNo3BEf@zMCaGMlev$V>T?$7MBjd3B?LYUuObc>>mACQj;f>Ve{VO>5U%5JTqa70OMJ# z{qxdt=lQhL{zs|HIQEjs?0@mHZ5032Y7iXJI2*JX&vqfhV+Lh~z{rHronjaS$c;sC z_~Pm^Zm7L0)3K!UN(v3EdMb0jJ*331%E72-nGWDV_@4bEsgv&rd{INK~nEt zs#OP#JWBX5%}mPwL=0^HgT^-h);0a!sAFLe`>N+IQjnBK)@(n%fl!yjhApbr65l~h z33>2yQ<826=5^SPOFCKLS&|GNgFu0HWFLsYcSCUKm@mYc_1`G6&?hilJ*KA!T^AHu zhXqR2e)KZ#1#oenA#^3dQ$`IOB<}mUKO7^a+)8k2;+Y$(L&m0zh6uA%(f)U@(KGuG zG(1_6Rh!KF^cNr&geh1{m!3432E8S)TJ&qV+k2i4RHvS{7_e5ez!0i7RD8ET= zmPO+ywKW;-$0rR-{NIn7&-_PUJ&@G}a^NR~{t5z9u$UGBISKw}*nW!q&><eDW&Fc6j{9Ft8-b9J!`jI2sXJbkta) zCci7?*;D~L@%%LLpA`3IFM5^jSjd*~MZ+g8KJEz3mxrCh)Zw(hVzXQzuEo0Bm!wZd z8xFO@UMF>RUDziuWXAW6=?H1(KEp2H{?idkMEXgauV2b_LjLD;8c{{d^ICONRm5%) zZ8M|ROUK!z_gdspiwR&==SE3;XuqMN4~_?{HGb|a66y1skw`S2ai5uvO9^3eeQauK zhSldLwDXuKI-eqara~t{VsBDeMB%Gy;oD-e`_2w1l{q&t<$tT9k-rj{r?*06 zJ`f3}Ef8Ei=}P5G?o0eG7f!T1QlavvK}|^+qmO)K0B7<1)qe`eeCA}F~dWO zruH88sU8w#HPMbrv!xGd{dSFIJ=TysVi@4nsB-QAm$FcO%iMDM^0rt0w(yK)&q#7s z$qrUBp>ya(33jy%5kr1=LLU+e28um)h}!@B`oA~l=NGkR`q7VH_qb52#p8WJh;&QU2hp{ zhmK_wcpa_oKEwal(;@lC6O7Te!%bf@-|=+Rfxqr_z6>H@9Y%xuXhTjh;$qJVB|pI= zL}i^CI7EIUTra@ud1H+#L4oH7eF2Z31+y38dO|v1oTL^@YVF(+JVzoCKTRnXj@1(U zbXjb(DAp$1)5AKTK^Dxb+G0I8Msz~IB|dw>A%H?JZbEELE^jY;CdUH1Um7+vd?Czz zJK#oH)G+v%thb71n(3T{<$trVIw}as;a}-#QT4-CMx~Q5!q;5Ve=X0^e81BXh~+wC zuiC!9mxq1{J63Doi!N0|J=&pJlBBM3UZd@FL#~EU^ebgqwur{Fz^}EY#B&{>pyMh$e*I^lM|BaXYU@@QuBJpkqXt*Q0eCEoo8 zK9IRlfCYL1HmvhRL=XMyp=F!f8ZG60+$m62q=%{yZq&-XY<&>A*n17i#bsak!2BUn z;CdSo(NQBq#bt5`V!~M0P}h@@P& z?JdJ~ySq7#&Mu?qR|lXLH``}i1&-c*U?Vq5z*oHt&b`mr%-Yt6Hq~D|=|^AHDt?3Y zitl_;(puAe`z1yCu`p$NScyHBVj|W)_qK%U{?~6mVY#Q`u4ws%3#7H0F7owGt|YQ~ z`M;56zU@SzXMv~~v*>&&l*&ilFNae(7VBF{uc(Jar~_WRG1)H!1E_cIpl6b~%}ER7 zh{syzjLG;PH8`no2o#2Q*t%yV_4oHWsCJ*~o|we>SlIkRXpvK-mC+HfB`6Ye%VMC- zleA*R`ekONyrjr?+l~%scT~Pt1y9s*%^J9l2@oIuCI2-Yq}WJycGmv+=e{C3g5maU zanay}q~n^&tNEVID(J2c9xk@&Lk&%TYi_|{^{;_womc~==fie$c`J+Ox-2pieeXZ* zKUal!yjSNZjD?%XRTbNZX52pUf@o`23Z4zNl1MY5yAW&T5%_G@2qqDwcJOK6#(V_7 z8^o50kOfq()FCjeUsQiDEN_&vxq4JGqu_hsL4TuP93eB5`ySG7=D`xe(oWm) zh$(j+YnBu8gGNH-6sDEZ4_-N#wexoUqvmWA5nQXe~4WiS>cLShzZ-uAaFaGKS%(Ly5Xt| z{q@v9L6e7OA~|yU^t%IuNv9>sA5JRAVQi;awSQiNfpGA#)1leZ>dq5`GvoSG#NkftQhjtG>n~jJ>zl!~(oS`x@~ZKGB+N z0?By94RQL0Dqj(hSy-X_BZ2)kh?oD4ziP7y_Rlc z=wij~GUed%IBbG^CC(@E9M(u7J>n1e4kpjUWM^z)emg;J-eCGw#ST&$c@L{}w4NG3 zuJYuU%HMj`m)7A|;e(YTO)W_ZN2pm+Rop^AE1T(~2tYHQDYzbMf-%*$L#Y`^pjguP z&w`x6x;C&BC9-*YTWd1tvzig&Jt5zzK=3Q22vepJruKz@c*t&8i1hRO#V7Jl>E;)Q z$;X4-C0tN=0d+>eS&C^^U&9%W)bOaNqZhxb?OMc$JTI1i49E$shNciXwpVMs(G0Uh zU1N&UP&Y?^xk{ge)N4!b_0m%JFX}n;{H)|Hi2zdwg0tlG04BcV->_(`f6@|L z3e#V0FLIDWYOl&Oj907}*Kx{GS0q^JspVL;ojONCHYc3~hDiuZ@bWHTqq3MtG4LW8|u#qSv=SEv4V_>zZ?{KPmt>k7;QL+AoL zSu)-3ahe{9&r7_pUXJ~fdAYGHIoUT)+4i$1vU+t;DSdbE!8Y$4^n}4x);FbtL*tzR zLqGv5o!iEh%cQ~!NlJuN{+|uHz)gsl5N*5CeR{>Rye^KLkqmCI^|4xc`xq;Arr-UD7AY>N#sq=#+G%FPyA zZzA31XGChARchwSEk7A>STGk~#Ms0u3fRq!O9yxqCFR6D^;^yN;&t=IEd=bJ^|ndd z#5@$1wQDY`?0H9sJms_m}(qXDT`+fKbUWgeG{IAor>oaYjL02m=5Oy>1=P z7x4XqDXt$DXB-tj;j9WK#b1CD3TSw8@P~PB2q+T{L$u*Wl{1VpEy7VbCUMu;<8c$x zM=+#P2O!oP)jd7$0!R4dwE!Y_(z1>>ODo>6Y2;F*AP9R!UDy3bxofYMCcIE>E4+~` z7dlYFCwlOhTE3jSbsQ-%IF3w!0zFB+Ah141H&@5yH>>^Z=baVZfd|270u|8DpY#Iu zM}3Qr$2OU~dH2}ER2&JKCXpk31Tu+R<8WEsI2&)sK#t#L?*CGPu(-CLVAChsXcPBy zDh$wK9hL1D$ZRErbLv~f7rA_pDn2lIp!}&hs5P+n!LRdb7^%+m9ZpNl0Y3X_@W1bK z2n#jW#Z?B^z-2^D4BKjv99E9rq3H2@EzE$2Sv9V>R~l-f%9VL zPYGEDag``Gq%`qqlC}qq0C1Ty;1%1?#=NV`Ke`~OB*SetgyZpCP2f|(HgOcMLG0I! z-p2l8Q4~m{#i(iah<$mcEz8Adz{F2S$O;D&mNlT<5Rr!#>1LsWpEMDaWjl5MHx4p{ zkTexqiycZVpqIH$iJ@9=FaPoM_l@0CfT);aBVtfeL$asZ$Q+KK=>L^;1TyBSKis0J?32Onj8=RVicJF z8NeEMqZcM4Btb4Er%mQ?qdYY+aP~By)74j4)|)RAc9{z<>sN#_$HjsBVJ$jqhMe8d zksy|jFC))Oa79uMcxaok%N+361+~Hs$;eCepVPm-ov9T&yAu)s<&Rx$dbz;QIHzVc zxgGg%4YvTRjT+ocA^1PVAq-3@KDFZla3e|Sp}hbii-wLsCeT4r({aniR_?*~PaQr= z5G_tjW0sJ^{Vy%2p|6W=)>x~V*s%bz8n&7(68z3dbPl~O^kdh#&7OtzzqJ)l>;+%@ zDbC8mE_bOGwvUOt{lKfQzh}9A=bi@CVpOdBReQh1%Au1f78!)n%TGcC;_%TGP8hv_02*vU@*#rkFH|YjF{8|)?z(s=17Iv5 zHnYq7QW2qRVZL5}JZoO_>0+xs2k54h_cCPV!jOP*G@To&o}JrSMVrauof*brL64z- zEHy|{zzq#_v$4_FoTMdJ>x0txx?QNwQb`O2r9(a0TkAIdD|{lqBn_&R{f`B`CVX)T z8@8~40V3{rM%03CQD@!Po6D2n_ki0vt90*o%w0J8%ZUZmEz_7NWtFYoO#X~OaDYo%l^>)EvDNo|cvGa~z0$P>If9my*P)12Z&zSLuO~%zWb?F`HIjX>Urzs%FUSSlwa=F+iuG+>w`6@p}g;e_u*elI}X%cM$@qj*XFHw9}vqs!swI< z-qg)*$XHE(&(FN~OqkueRK#Q$I#2P>B=2M>8R&ykY#OQBKovvNb(Wl>65FeOjU5W2 z{7w$=c5P{QbRBnfMfOVEUe58@Hvx)@0$z%(-juFfZdbTq#*mYOj^(s~Z+O*wY(ABO zwImws5p`#aK9y^aB)}Kijl2{lQjkUAYcCV#ZBAh>OolbdVYq^SWiARg5-kBxLb&#W zBI}AA0Z2R~>L5=+la#1Gm#D4IXG!4V{F^f2O)N5aG)Id*2eZodW`$j&z;Nn%=~B(j ze*dUeapj5?H{A(R2WW$pWy}ToNL#rYoT=toJpsB4d%S)C z1*u%aqRUEmatV4-Wxm}-VURXLoA0PRLT+`JMhW;yxv(g&>QkFGp%WkW7`8R|iXF{J zGg_@Q;N{mAQiTEQBHk|06|gan*ZXODX;J=3f(9x8v5JDMS_o!2G&e1!m13`XarQGD zg}H_0L|5!eI$k{oSA7#+PzxS&*Hv-b;7gDY35C#0$FgxNE;Tg4ATZu1twL4Pq zF>Z^KdpEgr>+3y#lT$N6<)ZbMEoKEb=Y3>6go>jZsxZ>#say!QFDHs(*N_%o zsc`@Sm=x1^>b~p54MOkD>)Od|csj@rn*WSyDZ`wdzjrUVV@Mf@;x~S%h{DfFRWRG5 z=2&oI?uG|x4en_*Vg4j=C?ywEE`lM!X6CT&Ap%tFjY5OS;*}91i`W=H4%%TcBMtKu za|kxmG&~3$!U=i8!EZZC*b3hy<-|G8*J@EntWne(EwPl>cA^(GgJ%(Dm^qe$#)lDC zYmUwHlD_vo#i<&2$ir9i-zk)V_Q|LPknHzxk|<2IIJenYH>pBmETqk^N%H8IzxiiJ zfB6aIf?HzdKno#W#mivE^Y-+DvuS&_;#0k%+nHpEeHfv|4?oZn-Z)L)F`#l~j3 zg`+e~iV%eP3t_q)#8Ia6?kMlujbwGzaPY?)i$!*U-cU~8<7pB&aLI9hXAkc^@^>2S zRa~XEf0}JOj+ZNqA;rp_ptn1u?qe61V)cU(aI1i9duheC(;1j1cyUa`!m<>0vEf9u z40dJ9^xmXEzUFS)osNrcnTZTKM@|358fH6pa&>4}%ItWLJZr7xZ|&KzDXOw>IGG`< zf)ofcB_omZyy_~gkhHy%PenPnIupPew;o%pu_xiQbt9q$Jwo!`o;s?tUuiwN@kGZ6 zqN0o?06u!Mdc45Tgy*k4Yl|%S{kk6_Y;t~B_8KYpIX9*}(n84vU){%1dufB>fMFUc z@yb~*v!+$gb4k(i-XyLfl&ogcQk%78k-J-bsW*shJ;}cW;1-_==WWe9*W1tB_{Rcs zfL!aViXq&!g_sXt1aA5&H*aqQgmNBDUo-Z9Rx%(gWI1w*1U^X>HeXM(nP%&+oY>u> zZ2H2z`&$2QKU{V|E6AvUZ2kfKN0%B{JF<3plVVx99MS51Bl-GTIiWWnzErf@fy(v% z+}LzpK(-S{)*L;4{@NZ}_x%qu5mTk6f0LWw3SR(1e!kgSJIWOhp=d)TB%eV++*l4y zz+tZbat4p)YeXe;ukmv?77GhfQRRiuO#d7?Q%~_42zxItuC2q@O_x5?`x$jq9Ry2X zlB$%d<+p0Tr>>b9x(u#UY)uaTt-v2VIx1#lY@!MFjup{({m^9#L1#T8YhXVSvwG-= ze3YUbPrv<$p6|dAG-=KJz*jWc}3#6_b1_THQuwB5FKy* zFbx(F{&t;N-OdgvC^SYpZ#j^EK1ZGw%pv#@F?M_PNMZ$SO|LbAF&TZuUO0+?2yY@N{4+0zc;TChU#v*C+tVA!aM?bgi=ewu{QU*@*STd6 z_kpfY(h>XGv?`pp1g7TaGVEZj;gPu7rl^{Z^bb|2%(7FH2VT3e0dT;Hpzx1{U9oiU zld#3Q{U05|w3LC%MUk1Ha0b%gersxdg8av4l&pSnTBcrI8%@!y5cmSQaY_AY5#+De zD4;E^@SU5wj8Bu-P(qv$fE}9!dM-0LoI$|jtANuy!QvEFH%#0P3;L0mg$=CD3!7j-yCFktjf35X?nSR?qhLtRb;zyY6GVsSgy5AwnHL!oUo+wae+}Z@ z%kdF)8~V*eYjRWVg`p5e`;@T9pt$60K?g41%>!I@+HN&7H;F>qHMH^}pMaqOgqJq# z)uu{RHlQz9a=k>%zJ$oOZqZC6*CmRkJhu1yEGq2ZKeRd??{cT0Clk3B`SiG+C2PY`8%H&#|F8opVedzD4)CVX(m5$o%b!h?ZV6v{^P7Simn zvmUCnhsU$nsJ{0sH|*A>@#b<|p#fe-e&xrmDRTno`(l(tdp_Oti3;5WLt* z$mGEdJ4t+hRfbiRLM$Q!#8ma@-&)U<;1P%u;%q~P(}fnVnFZW@tFAE@irDLOHkIu#dSh+OW8qJACDF{5)-(6rwWgb7Y@*dYGYCn+S7Um zFb-u?6Q-gEn*UwK6Ey)8F@xd9$SL*Ya9MqZu3BLnb@w0tx(tN8SGce{ImhW}U{&;- zX;V{v1zfz=+TGPJZ2L1zbXko@13tQu?3P1Rn9U^!R5M)=Hx73$OE=bnp`Y2E7UF>H z_xfz6dU<>MgoO(hh_&P6I?rxRx%K+I>J9h_z4rC()xI6*Q3f~bhgxlOlj*%S)hsUkE)9# z6)&XW9l_I3eP%vVe%sJtUutN7^z%QwVnhjElY`#EY_pxtzqxHs@m@X7pzQ>2JjZj~ z_&fhdJvPyOHWD*49)P|k{K5w$Pk0k^VTJsFV_xx-oICZkJ4i-;1{en^mkfZ zom-65wzU9uJz)BK)DEqNCc6?u{l|h z6@?3Uj`+xHi81=4fA)&|vXw0+IsGrd6|>@{J9z7quyCOMD+}!OZsNh4s>I$A@Q7iIx!l3YMB4hG(BwKM|DDgBriLbdvvdK7 z{M%AZ-_=quwd9`Cdws}lv%}L)M3|N3-Y|P3c(1Uc)7JYA%LoT=+Njr*E!~Vg#T~|d zQAJG#b#tIDgcu2<~s+it^AVqQFn?vRQ0+wFPpLi*Yv3WmzYUv$IcC z7iSU4peIRt3muv_%U82iMc@5ISc3;dO6z37wEG*&#fTQw_Y!cR>M&&RAp}7|LsG#hVl5Sr>PN$O zb&CYB9HNZRcevcE_kI6DXkn@NM>{McjeatEF7nJh1Yhk}K!6*n6HK$2t)-|12&3aJ z<%GptgrKm6GrPhD?q*k(X8tOrkQ=JVnD?>!n<25~0Bo$2dPOs;6Y3Kk`_5(k1qjEK zQ6qdH%M;bLtsN_iT%%BY-cQ8$}68sKZrjr~fctvC_PsRop@*#*8>RUyHLIPJDO*(c1qzqmTCAvv}IXbZVA zuEX5`zTMub(d6l19^3gK`5WmC7rk0~&A{7Fi&35_xTV z#KNV5SYrDKa)Yg%@SFhlW$ErUD@(F^e6$@lK@Uu(Gax}ND}O+$SHG$3U_jVA^JR2Z zUA-djZvT+!c>jK)yq4phd(%!Am)-caGW+Q|(!y6$y{DR|{wEizLU+Nd**K?PnOz6; zDTG}q$vp1#fxPyiJ1yMrpw-KS3Ch_Sxd=_B7cNvw&>J!RpVT8WqRx)vGxn)^O4Auj zH~TSC;8Pr)KH|#ti04Juc}CjRiloj!rGP!ZfE~<&mOg@9g0LZBSkvGrK4aUf$IV)O zqRKFwNA&2yew#Q_mDd`fe2+^u@Y${HX#z2vOi+yVqWihNavM+Z-^JW*91FMp7pC@G zN*#l@T2n2fYw3wmNlNK)xvXY{LhRPdW<1rMnu(7u2aNQ_yktEK9q-1}4Rg_xPm^py zXHktQMoc2P4qOY!KZSY6fjlNh7Zf@a`?n%l4L72L6Jjmv*%Wpz_8&-=a0*#wx* zz1xNS9QQYol6_Xel5ouamuJ#UI&0=#l$^7G_1@3Yzfgi2ALN01pY{`B2-T5qwd{sU ze?N0C*irm<;RKIEEcRVbw;7vd5rs!UUj1wK)w{G47Tfb*R;!Qn>&xn&Zwuqpzt}cT zW@90$l}{cs-@-;kW(5-Y(Rh9P7^21fk?P+{20}kH7jo6Z*dNRM%*zw6y2xO-oK=YF znD8*RUy4x64T~FWp=e2StieAxGIe0fd}F|px)*W!B^MDzu7A$D`d&*gNGeF`y7~l{ z%D65B2{Uzon-!o{5f_`4rZAKBH5{>ELc(q$ZL!T64l{PT%3%m7o5`I~&@NG@q7ti+ zl~nVD6s^sJW&Gq0;6L;WHnPaJMQ{ALMm^1jI!WqylCI<8>W<@w0DtTcM9Zyg?##OV zI$sKPirskm5IXx~PulUiM^v=b0teH)v?%hUyWRVlEpz}+5sND`YzHOB(H7@*9evnz zeA}@ag|t>adn=G>K zM7cEk?pOE6Nw|sqQThsBk%65NrdDjS*U1$8qz6ipk%h_T43j$5@s`%R12e?0h=uu_ zWAYSa+qTpMfmmVDvRUK^+c`8e+OEo|CbCRDpJA}a`yU(i=Tm5hnXMQ3&9NZq8GAwclTr9!S;2n zf|#TX3XS8v4&TVgI8(1F`1&`Nu7HtT>J^fFPq3g}XqQ3-LIkc;xn^iboMi79MafT% z86Ts(pTH|EomG{3M7f&m3^Ughu-iP!UsdrzJ3O*Z_yvV)o@%5ssed;gf^NE6-3?)? z$)6!q#&>6VdLu9SyHi3c_%{47}MQr(Gk2i&2GN0JU}&i~ItNF@ z;VyFAwte8>h`c1)+%yQyGzi**nL3jGR&=W=kQ_!uUWWok2TfCRg*n9pk9Uq=NB7Iz z+zX%}Q1O?h3GQ#A-4!=EYm!1d-WXjz(iHPLu%sjx!FgFH73nbc^(W-)gocvimQ(av zuJ5+c!Go>5gC%)tLHI|BwfehtwPwtdbN#C zzrB%|q&Q&_y1n6A<`&~?TqetA{18+4;<94>rSb7teZWB?#+$^E z&sQ_M2}D3M*q&(l)ctEMC-^)}qp6b3+|&uVe>+mco1xXhsfR6xC(1s^Jlv9)u|-+g zo7=jSrqcn%|B4oW%gtco^)eg~@{87pR6(7KS#aV@nmKto5-mR$FJ*_&O%ViN<%?5~ z0s}N6);nzc(}JP939@`Z7GtN>7*9{li}(97W~8z`N2WhaQf}i6m=Hrae{dz+?U`7} zX}0znVM<~}qorsdm{}cer;4A^MVt2$3@wV*8oIuGsWGb{R#Ub*?zQ-rn;SM0p9c8K zi`T62s?DsxWIELsce*gonUh-!wRGBOzk@Uuf6xVC(E>pF&M_xCrpa~un0`MMz#-sG zS?}$Xh!?(O#^gZxl@ZcZBCpcO-`lvK04@ooC3B0nAk1*w#`r7jN2jq%VwOb*K0pLMLkEo8Sy&2_^xlr2c z$jq#qS<8)@dQO%Pnp@mJH=af}j^#p!e@vGz%yNh2BURAT(<4_`R;KJJeYMBj!lz-8 zPz*GKNBB*o5)>ux-Z586k?<#{aUpZIK6x#a(D39>?Fp9?N(1O=_U(^-aIW2bd&G zGWovaGqu4Sj27QISm#CsA@Sci52g%@?;^75=T^Z_HTI)oQb}@xAMjkE&B2{lAq-%L zXwDoXG4&D5!`VBr9S5Q9OKSM2-bE&&k?^ln>g>tb*A)7XE&2P2`pVsx#*Pi%MpFVy z8r&FSMue=mY#n#srpl=-t2ioCXrdk-@ulBMF&@BjRDR~J0k&x_9p?RtmyXrUf+2q} z>xFO;Vj#=rhhm^9e&&of+9Scv9IIhr{XZ9g4oICc$hHdGPv0HN#DX`&s(GG8F4V7P z$u)UH;x+jt&!}KbM88{W!~Z%=kUmGufa(t+{xx;RH_}8U%D#YHk?%|=v9lBODdyh} zy=Gq#qyx02)C}rurB2mpj~qjoOmm*X_;FO_U-LRKuT8VvxmLcuRD;3(rDUc`P&60E z=@Gr@y}?6f5b8N{%kpRca18Duyd*7&OCRmFa8YYyedf*=QI0T5BdRABGZtsq92gDM zh9me>9D?^^k%#TJsS2)~eDW>us!|IZiRfapbSlY3X#^+GO25+^(Ad5ysHiaX$i| z33l`C5fyleowb6gd_j1`!6f#toZUVunmu)1BgZzZgAt?)s6rC`%3=F9@k=BoId~|nFm~ZGn*k-Np%b1E(HfEA zYO5M$;!$sfpzmy-(z(W|-AG?x;|ZgH*#Q%fA~1?6Eg)sCo@xHi$Z|M(*5L29>o2#y zOD;~NOsNR5K{&cLqY)VU^9K7Mxd6A}_}48rhm4p$ea*j-yQ6rfas7UO0n8m;QO8(m zZGn#a=&s7l#*R6>XhqU`8GSLD_tuD)2pCW%z+|@W`L&56|=b0r%Bi_tjZzpYL8uN z#q^CKK$Ydsv&EB;zEC0xtGm&v0Sm0r9@~S9<07o%UdJM{IDUYV$!~S+d9{eXsBoI(rbdGrjPEHS zFeXR&d$+Vr_&*UDgvj~~@!KNui@FUWzPesUa~XsMqc)ty|6~bK$Lj)tdRkBw(SV}? z)+q`aNTZ>+!a~PdkUyQR5YO_}LJ)>1s02NgCC!h{n`+5e1Ntwy2ifw((_bKT?C2&u-{>!=OdR0b}Uu2dVfWTMZ7rv}*oE0HTf zIO0B32;#1N{|UVH$v*cLv$)d!R1d5z!mriU^}oB6B*-60l$`OeJ_eexQ~MI>e*jYv zhKX_in47CcaxDBO}3(O0d6=EAbC zCfoMVyop>OES%ePIw7E_;46c2Pp!Wb?GJrGnYwf${6)Nv0WEXg(5vj;P#EvBN=521 zsp=K^1*s|rQvnmD>2rnyM?=mH%JhJx*J0d#r)VJn?Gs^z2(i-&8)UX=X`XrHtmbda zaV*`zilmGrK0d>)YZ@hcd=hQ#1IMIJulvbCBk=EO_T3Sf(yP)P>f{b)vNHbMsFNXd zsSC$SoW@exYO0Z#njKzO(hSXinZ52%-rv9d0(IWK{UwvLEnH23c0h7i{qhq+i{Ibc z;vy@iI>>l(X1-8raf-X#hggjijd4bj5!21sf3aVXEt4@RPy2<2l@i=YIYaTixoHr~ z8)rp}PsPOj98s!QrI!?3^5e?F;I%CMnBADbVAO!H+_>=ubKd8Q5y>A;e5`?OX;H8a;kC;wqp-wm2-HpdwA0xP0D5f-hF{!V)gSjV9dr4x@$jMW)C> z4@2J&R;pec=*ldf394E6<$FUzY2X{L_$nF{wc(7C2U}GoiRu+~`yR~iG?W($6>By| zK_i_b)q#S1TTdxh95xjB5aw7XG%9p$8mFgWpAypB{Q-L&Ms5uQ}tm1QHbb51ncl`^O6!=32$JNnW0g*#~~X*xGe6FWt@hPI>VCw zT4ivA+70s!$dIfyvtAwhO_L+Tf3(Q9XaPU3&ETovOk@G> zRxp0219donCst&{fQLW@FXRe~7o{eNy-}*ti7q~4huT=J8B<8Y?Q0lkjzZ0je?E#d zX<-~gWTz<3m$6-0l}-s?3|(&5gIzyyMv{>Su486+dwNn`1_(DGOV%D4l3r$X_eiF< z5GX}^Py)q=R-ev7w|si!#c>6UEbNM~v#&zym3rK1>w_5h_BY#L2BIOqfh5^r!B)*U zuB};0lA_i@iO)N>?64$u;}KflRYD20RwC-y_RpTxB+Hj0?1o5{8&gEo8T9(*_u28^Zi3aUPOQ+?M; z$eTLB9H+(>IaTN!Hf}e-A!5N@wTS)t!+9!9{P9(-Y0$KE-_43Pro1L;O^bEtp)0`* z!O`jfB>XKAb#!!;1_1apP#anZli<&;A=Nsya2bT0ALwm+%8;9M2O~&k&Ya~Xf$~K! zh`?6k!ko6w=Dd)b3y@z96y~mejCU7hVzPH%o}Kp6+ztOehAXkhy+QMOG1Cj;#>#aU z?ihullF_;jPvUYpQX6d~ix$xV^1<#6ndENrQ zWlj&b`M^-1ZY(JPa2xuOqc@UZhV3{eTsev5v!-6yMU>poyIFN(S^L{GJ}p))QnWmk z+!A=Ti4)-Wm8;1JwQw_oJ1ohzJ#8&&Tt_(eW9XDl@p$skP+lPhExJ`jrM z9A-=@obOnCeqSN~yC+_ZC*)d*7@knv{Xy;i?MwhQFM`%I!MlZeehsX*PVwe)>!V$p zT_b@mJXcDL>##IR+Ub%&&CE+|_rM{Jk>ZoFjV$|lPe7^k?jYXfy^YE{yb z!p6W)1kf!&X=;-nFE@QTjk*xuSfbN9&k-g=)wXR9b2{zn{#wHhW*)|cG-%OUi)tTH zcQ(wl5h3Tl{gpN|UGNdTWavvYW5Q>?7-^Q1Qr~tH+CZO1OUnM+^hV?3P0x?x|&R=RQGpFf#pHJ zvGTEgP{6XDPU5}}IEt5lXANc2sI($u#49=Hd;PN2NX3vs$}(~Yee6__SOS5K_V+%& z|LBd9&=;~WKsYVSF#i;=gEN<-vugQqn7It@sZEM&BWri;N@N`uIs4U-{4fT+e5(a) zC`GIPmxra9KXKKfHq?OT5$bEFF^uzZa7!o?==D_&vMI6Yr1levyBnK~qPJa414$ZE z4^c`T|NH?gqG3C9UBG{6%Rb@{ZCz9sCnjVN7TzYj=aL?X;Sm=f6`syi*D7f6e?qe_ zSUdR~CN;+IR}&2w*Mdc}=ko7%Vm~X=ZXGq9`-k)n|nvlks zHklf7oii%u>Qa}W<^1T#aeYTjUrpVvj@P@8MO_zN%0_Hyk3e7b!JI-U2~uR287$*?R*tT7`$6FArlk zA|Ux$2qp{RA~ydcjHjpCC3q29Vt7A?I)ZF`*u+^mdxTh1(R9&M0)05)o@71QL3WNE zR42M4tx{Eq?wjCJZKZxq^P@W6D<6e}?dR5T6YjfKYxqlPuV>^3epQW{_WHvZ9HV%f zVdQ<9qYq4f6+)?6PZ1#4IWbA(fX|p%;!wrhq>GJ%x6&>_m$`@{dvCNi!Ani|lbFN& zU)<|QOh5NW8xali33~m4M5`7G1s}&6oKSA8`N1Y4tW?^qQ9&z+Dc))YlQvre&4z09 z>o6uc<>yT(N7PN$`j{HI;G$5f=fbJ*6ch4^Qi;mXri6WR`y0&ZS(#diK~z1Q0yPP7 zWKtm=c{!r!b@4E0)5OLP)=*NM{TIq!aZTLObs>nVd(}hLs+n_$vd}5PBZ5Gx>aSoJ z8{`e&zZpMN51R+!Y(o{hI)H#`z#$Pj0-KCZ7EYr!_>>&a-uJtBP%Ey9RAWi0mcRsH4-$Gb+g@FpI@bWIr+eK|m{%dDoN|pFw4# z9y`%JL9L>q8{+%Hak=X1A3L_m&1?^+Z$uYHdGw*`_o2c;8463V zdZn^e3o1&fMbeQeqIMuI=y^p@Eouo)thH6#Y#*GWdahh9S)piJ9XcaoT+92bM>)!H zA)YxFP3rd-pyFeo(bwFT9e>R6nPGLle{Qt?kKl&cy^Ta%G^T0+RKW(I^l0%Qs=R(j zWOP@!I&w5W(ZR6EUAWZh0IG`MRkV5m*{QuB#zGvF=W(cgSFt|_^e8w&?ceL%;$sYL zvyi)1B+EQMD-cmIK6dH_eSumdY@j<&_)q})puY66KmS8w(q!gJxN3bF{xM>1iYE4s zdn@L-V#~}}b>p%NMc>e)y+E5h?(Ge`eDZj`8^i&EM_d*^W7p$C6P1IlUyGfiii%0@ zCkSmKrx|+=I$4$So9beA8xyha-6MZrJ(Sa0FQ+>fobS}mdoekMrTM^e8|l!4HQGn8 zfcPcc&}0R3CS}c{iHNOe!x9)t}i4|{Avq2bk|`;39y+DP2;#-X9`XP=D`^~Esm4sU|!6OIJ0}n`yBuLA$S|4m~U^qO;mva z@{4u8CFEtm$15u{v$8160cEYr3?|&Tgneaoz0J;4GpItUf3I2fD_in-O*6Q(+h8<< zchO9`ex`MPMLzN}e3ycTN??I4=*07Fd&8>Bmm|Lf($lWQP=mFp^5bH)=aJ1hK3Bw@Nn2v zWu2H&gi}#kU^2y!3FvDQ7ivy=VCJaN@us~qqAUHxkfHmoxcE7Jvb;ilhY7)FLwgGR z6uHY@?H>}fM`7AF_E?I5`%JTc&)N~@m`dZa87uFD8MePP3S{p z@`)v~a?t0?79Vj7RAh(vG;>qQiK#Xk9HJG;7@4VNcnFki-`{3^QnT-d+Mx=cTfdcz_kL9K1_M3g2Y|RJd z+v3iKg7kjI!7k5DSx+j}?T*v9vy%&;t(xr~r$zH(r|(%Z8LGH~#2FeBKVCav+b}0s z(b38DwS#l8Gl--Ir33;rDbhc8$3P|~qLVZgB`lS&8>(Emaf{2zv7vta__5OZNricy z?VGco(y*iBu@0qdA~)f)pz6!g(9r2 z7ya07+_0&g-1B9cp~fT0`Y(?+6vXCm@tM}k&7UKav!xL;&gpQze5p6wKB~~a9WuSL z$Kp3OCQYW+iNH&0c~4ZQl3e5WKFuaejP16d+{H)f?azhgug!G$`N8PECZ=)rJbMEi78`TVf!+sQ!1ARlg$QK zCDR2PoklHe8aAQoa`v-$fl!s1;iyR<+M}S+o)HuS-&nZFju`w?R zbUK9@xW-r80l4(!Y%4Gq5T~=9>KcJ{5%R}67LX3tmq*3PVag4z^mms;P4ZdD>2pGI z#haNOWAY}{HvV;foVAs9_*G_+uU}8UqmV0JBcg7e?pO7k2=cN}QEF+D`|lLCx1&=I zQL?)q0*vxayZ5iYmlXuRP60Wr%g#N#fhc2UHZ~$m;X$<={kvW-FR7e{WYvt*pp2~W z`f_|H1{r+`tZ;eC2srqum8BT>T)d%?z}WEtZM>6I7O`^4;Y4J zP8+Ty`tix%8Qp==cnk90tU3XON;f9o+Qt?4J)5C_Kmd4Nfw`@9;LIVjMrQoQ_F>Al zFcpjDrSyFOQ8E`2Q;~G8Eu0eeaP7_^Gq~W44mWO1wWf?5}kX`yOd+-vyO`>K+Ax6-Ps&d5Sf(#W~ zz4Rvg9v5a97_)gSRx-N8Dn=h{oj*>BnPw|{#P8)dZydpH|H4j|BFHYdAhNP?)x*Y1 zZ94gc{u!)8NACObc3&&PBJ`JR$S(v}`(*m_Yue%xG9uWp)3fGE(SEjMT@=xYQ&#a( zGSW1ca07W$1KMqeBuxBe(m{gSqogup(dS6+(SGPkN)WKo3B2Sk>0Z-{iklLsMf)&? zqg)`MpGnTJ_QL!^#EisqENMq_27Yyp`9jK9^q%^ZNV>W(N%fYwk%%nX9iC87X$5)vR zNtC{Q&~e}WY{-bCs}okc`VD!xxIn$#3+l%g)=AoDBNo)ApB$%jl^4%6!3ic!pRaUM7NQ;`U(K z3Oby?cern34jk;%>?F)6!%ftaWC>$?MM8oy`2467<@>puluS>)#BSKnGXIgI{5KIW z50_bNFmmjV-_?0F!Pi#0!j;rfrDfnYOK6A^K`_TZFZ7_t)JEXC?>8X%#$>{aZCthz zMm|;*bce6u<7jY@>>H)0Xl07ldNic$p(7WfaZUa{5%UhjDHw7|j{t~ciPsu+@uH3k z1;X4S$4%xl#`2b~-=i}!)f{+9Yl%}oK6*~^?c~kaaEE{k0LiB2Lp0Ll7o-MOg)`~j zAZL_Or+KvG?WQCmH_`hs5cMA`2TuoblS&pY(bJb(>>n5RiPGevvyAk=rI>K+y!Rd- zb}}mLK^!94*O=N-Wi^L;wB+1GzQxhS>8f+FCB3b?A<4#OCLbCfO=FUfJ;;|9G<=Tf zRSowh{MelwLIz+?FWKUFi`dIDUx6MubJ&QUpC?RF+TS0|3MAZ~_-0aAR)#0bmX&u1 zzmv#ogyNVwsndKM-}+Hrb0&&7K3ha8*%9lzMqV(gV`7G;QtJJ&Asg(9jzyhdl&-c? z?C&4m;v|b>a@3)rdyN0#ZTLSYE&K{2K(CM1^i7kBPGJUo$qLs;_G%Zdz4{bxAAgZz zBg^R^DM`A!-%3DCEh97_zD0G$wO2%Y1V$koA9!a8zGWaP~hVsQ*FJ(2}c0COO7ydA0OUUfDjd89GaGjM9L8kS<}Td z7(0JWYR-TS^fuO5U~On;9Ks3dL-9tpf8@JI&UnAaf_S204cuh2Bij$a_T|gc{17B3(b*3h;;tQP+Vt9V*VE3-%b~&1VL^@&T)Y55!SE7Dh6~Jnt89!ZEcI8> zP}3am{V(L3V$x@cX3ssi zEmQ03q25jic;|?WI1Q-TM0_uHQGTCl(DobSCV_Ti>CPuwxG~jEUeko@J1=HO5<(;V zm=d&f_-79K7PLkBu8WoRbiL2VYV4?L@e|I{6q8)$wv;=iX_DiLOH-#p@GO#4!{%Rx z^;-rNSD0_)b^Tw#_=W~QFdj^7=F-W~z{)K4QWpRGDFiUZcXpHtK_BP+lEw{@l=+g7 zl;po5kGy17UPW&AR$Sa)5X$6jafDq0=0Fs45+wj696H7a8{2is%VhFxZfP+e$07z3 zXXX{;S@kZi_*nqq0Oo2lxO065Lzb9KG>#WrU9D)f-kx<+B4Tb{LPQTu0%i~a(8Z+G zjkzi|wja__MTpP&3XQMSl8}*MY9jK>ku16Qvo7{fOLKF&wX6vq`E*K#wH{w@p)>~i z4hipg59LMp!O@Y>XH#4WPqG@Gv1`~%P^ZLT;o;aA4ehiGu(t7%@p%u$daB ze=U7c9FUEv=A+5r(82zJ;KLlu%sX4nWVG$1EtFbY2g+CzZd&Y+mtrkofQMV^^`X&s z`N8s+OAlc?GO-^L&tOJl(5ENGh>*Aqs6Sez6shFPvA7F2TsFjU2HrAwfyXK;Zhn^w3L>tY>= zXh8=s%TudDx%_mva6YKbKItGY-p7_W-0PX+1lbcP9+POS!HL5?du9fX!-VZ^r;C_V z+Q%rM5|zLVQq5Y96-*h{$GCwhyUyL0nO@?Tb#KjVDd>^`fygk0s;P^<4Gd3Nq~t*h z`5-c84uE!cptrRwLK>GEc3a^eqv^ZZ1secP~HF^;C zf(SB108zOeG9Bif<-hw}93Y{7(>1Eh&le7AdbYQ@P{0u;>*xy{m0q!1V>v9wXp?kmC+zx%(kk1 z(_akm`6F&S?tCVM&s-|$n~_NFkkL~npzZOsC#LoT^0)<90ismSiL7|kKS2T4;_oKj z_viQq46)sHJmz*O7aRv14v397%FK&C$H7?bUY)JT1V@sCH1(R=n!jWAv_LkKcsG^3Ns(KC&5Okww&mQJLb^ECrx42BFitH50SUVRDj)VD#xUfqYN`>_lIIh~57U1Y zQgHu+FdnksmuFuCfE#*U(*t3HPaU@DI~E72Imm__w#wAyuRD?XhkDX5WM+(NihGFy;69|#*V zdLCeA5#>YnB@sDpjO>()FDkohhYjGnbI^G|J-49Efe*{DV(7X%ey~8ofc$d6mvrXO zQZtNYUW6;rAz68vCiL>}BUuUNd0pzUXRbAMFg)UZ!Cd(|weLuDzArV^0EE=GNc;}W zC`Ks`;&=u~ml5fsUUr2`WJ(x)+9w(ofR2`6#s$s7Jix?PvWsh3tsunvv^f=@gob(& z2N#bpaLF*mpnSGeiK5;jA1|8Sq9>T)_K75xbXiBYxE!DB9Tkx_F-zIOux!za44x7O zx}2H4PpXtyv8Dgm#p9pW;_FgSqa8L7xFR{k8t6)#^Q9m?ZaLu^gUQ<8q%qB++?UD}!I{gsg>au_ z7)iRST2%nidwsv7)Y{6tN~L#G=Vh?*HB4tWqnh=!c?XM7FkuB7)_m#h^I&h~Oi}Ye zmJZAgtdHj}DXaiTVA0DJUK20iZk@y9?plSTkl+BBX$6|Q{?UY)=-E|rw(%c|cr%A| z3VKB*=GL%_;q@^Ey*-}#05`M3Z~luoXc2z{?lm5}Sl9lG1=wAayf+=330eF9r|JLV zSAQh3I^qkTE-5L)n|o9p4(%P&{NbMP#M8XKui1~K{?@wwU$Wkat zWW%Ovo(4c#4@@I^!QXe?`(L7vNJV6O@7?t12fdM-E;jX*+3@sW(BPmh1sW&y7|$_K6x%f)b6HOYg z!0t_{2$%+y0!^g3Q#D}!!{==%>=6=C(b!3ZnX=?R?tX3Du0Ml+Zn^#bu+K(9LJH+L zED2JkM>QRn8Mw;0(>Fgba(jB3+;=4jFC^)pijKf0{|y}yrU1E`RfZWQ=S$am{XaNn z6e?tlMh@mwH@nOU$skRd-_LPv|LQ)|4KCe#c219HaYxUM(NRGM1MV@Ai;t)IjX>!f zjTkJZ5l|{9JiT5v)8jCS-Eol{xYSx~b{7M(nX>pFINFoQZZ;lsrm|QnYQR|RBpYs2 zN7_1aJ+d~6nw?nR&06IuQ`W-znMgXF9WVOV)A`)q7zM=_;aIw`_jEP&R%=1E`NH=H zRC#|AuKi2cNRTl$00@1CIfMdlnX>cxU)$jWIbD|pQm8;8*k$79njYhA>iq9uPOgZ= zR2;A;?I?=ew2dc7y$$muL~WS%*=T5u?0FJ_|6WM%7vg6a+*M!*Qw%?`AqnWAH>D%G zL03CCG}{e{G+6ySRM75H&HzEaD?T$j!0sDCnt2K4bqFXs!M{nV&~T<7QG8;QUoMBh zc)L0_LUu;-%YWeb537VAfN8Zpm_F+(by>nr!RygqVEu2HI$9T!?CpC!Ve9vGCLumKYOI!}UMJ z(I~J{OvX^90~gx8pswIgRo)1Gg+bft!g&@_96Xdc7u*WO$;1+Ysb$k2&YiJGucLYT zax~dggdKbxdEx51RaWO27at!~%I-=n^}iP}LrkZFltGjnT^;?_Cqvg3y9cpyK^>p( z{+^GeX_?H3qu(4Wvfg?v`}yLcR$!SxNe5lmhc%OnQ_;P`L0`A)r49%N+2@6ifZ z*(R$IO2$`?){#$n?f-6r?z=@Y%Hi93k| zA%la?>Dj%^eM0|QH{P`aJ2XN&gm_FM5*3t4z#&3-`0-b~nf|!KurYDL#O<(LQE7Qp zBE~9D6@(Y%e<>BspCO`?VdIk{VYPyeiSn1~kSNIcu#i42JB|J7nYvL%Q$Pk0S8mbN zf7V3-E(QTU@QrNG%uoBM_}>{*fQLr-#it61$j?yyhqO9T1^6XKQT?^y|0564{Dnl` z+rASQAO0h$-&tlOjPPAM3F|Bm{x4Z}zMJQOd-ABW*Z=4}e-_ z?`_2}79RhS+j|x@Vi<~W4&qA7@Bh>HeX8Lc%8)E=|HD&%31`%WI{E+UtNce`e+fv} z`5$(M0hct0fjQPF{-3^I-rJBq3&>RbcMHTI!AKdzAYEvb|JxVo^Ltxp#J57#|86-+ z!24E_fVZIk_;26;``fp{J&VBnf+|c1pjmc-JhF?+HT)H?c~)VusnA4Gfe#ge|Icne z!$T??Jj2`dKhx;LoW+vjf(l#Deu!K%a1-O@|9vEOi6q~qw<%8fr`)3EJfaE;TW!Hf zl9C4{jrtYu%(efz_SnCm$U9CeOvzM9#;~@8?YuP<3sNV%-QT_aP$2_3{C;!WHv{|Y zKyZa%aG8K)fN=g-By=lQoE^E-kvlb{Dwp2hxJY6sCP`U^Yl^NvqXBe-d_}8(=S{nX z+7rE#$X$-+)myXX1(t9UcXr&Eg@QmIsZ59&eCDk#+Unn%gDvw)@!~uN)?vS%R)-Us z#n~6UC8z}24eyY9DbU4+xz4jCN(ufU2}5ju!;s!y$eeF90}NoFxd>ip1`O$7U=x~0 zbd^a2{B0X*Xl5IO)bvBATEjN#GgzBNFRD_%`82o;d3PBx%jRtl-@Lnk0N&b$v9k8L zVq`q?@g2l?MOg^3-JM=`+^*f3htKCben?SkA8P{esC|xKyG{`?@}d77AK-5&>bpKO z6B!cX@yhb8ynNhiUTosY!*ev_HuczlQxdi-?h{VE^=eSaBerAFk7l@Kmy-ZGG|?~( ztP$7VkkeaQtEI}clWN9=R%51g&2$8|O7Q?^ZQj7H57;<3?j2AvGBRe?)&le>nBkpy z?Q1%%&%-~Tw7C|Be$TIQjdM*))b$A5KkFPX)qTp+)}9@N;dq+=URH;wS#RY&FaE1{ zZ;Wl-YyOGm1aG0;d->dZ=x0TP?R{%S1p$v$17y>@q!&`J4SO~IKeF`Q;1i=EgAh$n zsemF%%7@>&->|TZ-&a*p`J*`FW%B{gdZEP-V+2O;1?Nbf(U7s)A(FwnpE*jddb8s0 z^>dNdtN!syD{LTq3L!b0n1u~0^=+_>8e*M3Kp2Ni4$9IX#w~P00>;N)@)pTJ^@es~ zbx0hUjL=sS--}0P;o9XBT#=lRf-G?tj9z8cryHJ=+V_7cc@Uu%5BW7|=FZH89TYfT z`8?Ob^yU?^pH_7mDqMcmS=0kD)a$KAR{N7oDrF3!h{*Wig6`aEQDBIG{&9EUWKb|D zk_Tg$2>np1D?2tL$-g{P>Qk1NpV~R@j&;ghNY#^7TveG`?y?>CGnq{HGB~b$_ut;q z()h|ydC4*jriqeC1g7gOeo3iS9}C`B!*V|yN5U|Vb#h#p5EGntO*sB?XE5ZDH13$n5(RasSHJ z9^RXHnEGo8fe*?7)n|t?h~J<5Qw)QEJH#viO`Mhjj~j^_dHqI8c)}ASo$2KMyofjQ z&{R8`iq@*9q2tw^yXH~uyvwx>%ef9s5rHUz;}U%>M{xCQ6VGq$6wSwZzOC_<##znf zH+R1{jA#_Uv?Ja4RUju*PIrRqioaO44;W7UnXvYZXXSI+XYuldK#VzVKj~PEv$u8M zaES|UPF3z;=xldz2#74Vk+Cy=+BD&I-WUyJSY_LfN)tQ;RpbOB2i-rb7E=1lStdxB zov{bW;+E_1f`w6WbaevP*L;w3{XcTI-0E*JLfkz+vX;7a2A(R@*|a{io#)@`KgDPR zp(D>{exDlS^)>;vvsT9!#Nj(0793719-9Imh@C{!}lY5#3Zi|zkaPnd-^;% za$j6Z&3csf?Ap5HxU`5DBjuvg_N)idmo?JNBfR`nqdPE` zH?+XE8LWV3xyt@Xwp90yG2Nv8yRio3_h!N^f0zL332oPxo*xhnl10M3*t&KGKq8Z`z+xMR6t_$>g`+(m_CCFgKqbjhOu#jLEDYNdne*XBC}Ar|I=;a z=@l*|$CZ}YD#yZibv5gL)B28(u?%s<_fe*FDNS&q(}dgZ(DU4%uRTnr0l%s}%WXgB znRM;8itgKq%zowZ-!)IDE+wdc-N}PY#QCC}$<_h3-g1S^?zzY~duP+f=5xz+FQ|X4 zRRfEmr4Y&GbF1Bpkr~ABe_6hx~Gkp?2}Cgn2G{{_6UMWs=GL z>1U4b$MuKTyAtPOk?M&+aqbw?Y~7eApC_toWH-A$&Gm42^ogEWpKI$KI3KibsM`DY zym7HU0Bucze&3Zx*inuvkJbz4ePWczt&Wao(qnuI!qk;eJUZ+5%I>G14%S*fu6kqj zzIfkHRIEpYOn6~OYG_Pi=R`}$uoT;72l=^vIDvRMcXj^WIe#t9C}rjM052;x0&SWn zP9r^`TEDUF`-DuP$fbC`7q@+pp6+4ssaws<<2^0oJrVcAutn<=1VJyHg_4TZdLR{@ zdc@EbdMf9+_z5v$axI|HLKrD)ufSHW7HNj8!Qk>1``%oo`3nD!MynwSw@20Wo(X(Sf4-MV-R+oxGr_AJ_r}fUjL8fMgR>Z! z)Vq+#ivw?0KnkxBqqmyO7N(Tx)WdY7_zu%KDd)w0&a0_(MMd8lPfL}KDUYJ`K?80-=Jk5d-CM0st0e zDRE+-!BPcB$HxhgbXYpdC>UkeyPF7Pd(xHJ?m=hLs`*g zbAwjcevUg>^r2`b8+lkLzAv^?k<0*_@3{;$=bJ^Q^QDv5C7ah#5r+XZ3%F_fOQ6|% z44TkYSAgT1--GGy#mY-ZCthq@)Z5EiMwROb_H)mEN0i*lcIdh7+l_AH&La*z+k7zH z`V%qSlgrlf`UBFM-HCImf@+{|(~ZjLeXMWajO$utdY|fsx34o;cKZ|2>@`NEqbs-) z2Axn|Y#~S-!MZGAihd}Nf`x`|+I4qe!nP~L21(EJ32Bt?M)5e$j^`==;eKcT6)Wel zlRQq-oA1>98Vl0%EmR}XIMw44eDudqf*~`>DhB^}f@shot7tC8@o8tebH;_7?mZmK z7reoI2ll5G$BP)(cKE4Dqt?UpAv4P#edDia$#1Xt#|zDf`>hXTT2K9!=GO34#70|} z=gV?yY1+E2i1Dj-(WbO?7SdjJ=x)VbLHmn za8^}c1c7l}(nmt2(-p5ivw;{oxmpF`>EUla^`ZXcR9J|KMRB$@%lG2QZu}wTqW$GQ zbk@~wM8>wu$ikx9o9F(a!A8V1mmdI;S#Lxs%lRT5l$I=MI_lp}FLfjz;zki9oQqQ> zQk2I!6*#kadg`_3uEo=VIFqhfd7s;`(SBCuXF5Svs`2{a^`htJl!U>{{+SzebvSil z!&v|IoCHM{GyGkJc-+EDtnKr&i`R}VZ{RNSE1*Tix(MBj(u77kU_kAzqv^ymwdLR@ zRoZb@uKmK-}R<3Zn^C53Nu6~sq{e6Jn8C1>MWJJP4BZOru>$c%4g8P z)YKw;MNV$grRdo>yqr#$$W`IgPF#L{Zglq?sNRG`AIDO7pm~2%hYLAHyA|QeM7oD% z1U-*DO*9*vOT%HUH*)qk-+^)m9IVvchC{aF-eOd%@FdVIe@Xwe#LGK zCvNGI(Zu$+zy9k82ouKOsC?CHMs9|p3XjhAu)DUIliGVAI#n@&$p4^^?(F$<9Te4t zsqfW%n2S{pTl@W2uj3hl;D)%|1RK79_jG9;uVeQw$i87(++hu47JZ*!`I5CCIJJBh z)zxaeKdm|RY1-XH(h=U*XPk#fB$zQShNje8eQSFUNS>t2cfMq166TV=th7J*NUi3< z!TX58_B~b>-7?z^9Y>{{nYh_gj?3pfAxD2b8!wgB86Dfqrs?$Y=zRKWVrx6+mD%QD zL~f(jod#xC4Zow7!6$hH^|YT-v;z)XMx+LNWJQL!wvr~GSrFTk;#q3e4D*ciff)5o zk1ViXk7mr!`+j)7Jt~cXZqE6%f18dw*xh>Od`)w$Yg@sM3959x3bAGBj!;Cf$@N9_ z*m6BGot{Mwh(vIIZhB7lcFlGzH{3Jwq~$X7Idv7KPtxL7z0I8L)ypPix*n6PuLGH?`{>lY8Blh`Kvn3cpORnex615*euBk&sclWX+5)^-zs1B_xRUFyl23Y>B=q{?QNIQD@_YFMND^E~gmeS4v+-+Xw>8;bbR?gH0>QK# zrW7BYMss`PZVCN>W3XTrY`JR)0Eu*k1394wp)r0`a|_o?v^YvRv>IZ8prVPM5m!F{ z?7k~h_=k%P+xEy7wq$xroL(z9Ut}4|aOIGPL3%K_3fwWx5@uUD1{o&V`c$U*u`CaO zM)6no8E4y`ZmfjLLgeEWJ#`w~zMMGfmC|g`6|Bcc*JoZ$x^xnN0^H zA?F9S?V%XqXCh9-*%&bfFYt2PQSP?AAI`L4`s6=31h=&sgk*Yex8u$^JLg$;LhAx! zwLC%HS#ELnEKAxo|KYu|&ST4prEnWUNPU zB#`F`PcT*A{a*@{rNoa1ue3^ScSK&Y{|Kw$y$%l(C;vnRE~72JNM1C;cO--^Vezr52KG9^-1hUtqDl2SoPntmf7^? zk6D9wIJ8{)NSQ4k8BX#=!b(@7eCj|xoH7ZmCkqLM!85TaRs56@PBFAoPHHiecP76) z9wkoJLM+$rO)?$&1)s;n+5`3%$V{ZO{JGlijIDI~6ilm-IDh1X!|#u=KGf^}O_{lW zQKo1+rBVW=Mr+%J)HaQU~>K6i6*6moNGM_LM5{w+OPQd^6B&aa`kB6OLkn% zH4x+8Y;Ahl1XkQxaldUz-T%zsjcGRRh|pbm)uhfqAFz&XkLu`{ij}JH=Hb1)@Ga;u z0bop6cOm;c652fUnldoeLcYD)uIK)=LG#q{K`Tfr+U~we*;re)9VlCWV355by#QvJ ztv~Fa^+ZnC@SCy*A7uNiJPm4SdC1^H%*u*$hCTxYv^_7{&b$dAaI$-F*4@BbIXpzcVS#G5`bP<1WmT!nMzAu6iV} zv#o;3#?gdxYH}TE++xJR2N^SveBpA4U*Yd~o>p} zwOl7Eu>(dT!H_EEt^5;kioO-BMaCFW)saaU9l~T0@^;)G%2j!+f8c$Tb!rom-cxUBU3a{_5zN=euBdJ}=Mt=JTkv;_#Am-{AY| zd+;s!p<_Ah(S_;+c zz1(^Eqi8Z+sIJ$A%5j=YHYt6f%5lmcxw&uAd7vbsOeN1V!}qnuBH!lz+*Zmq@lh}4Wub;dMK}j9q|;l z*2Nx9rQWNwmSY#dYP%TMV&DEH`WY&54Pjw}+KRpFiHNF4T9L=Fg>VQ6Tg)f#-DPFqe~_sU)(q;x_DPG3p0 z*A{~5CZ`(e*!|AdU#WntytOkI+XYFnGvW20F{n8qDxS7~+V!jN8yqQ37_eQf2%Lya z5eUcRQ@)3A$yYFYt=C1IhL6H*~7cWeILX=78v9<+aT^l&&|`xcX$sK#o=n)ta!4W?PQy8XLFWkmBFr*TH6)}6TzrsEceG@Pc4rw4zt|# z>EHV~LaOb4G*r3*iOv&4E|W>WyKK_GVUx@0XP@MH2Z=TE1o;zY`yzr)Sw!I0ngfto+sO6r^(eE0sQk@QT3>~k} zYhGgosod7+_&MRb{grYhyeYem~6*Bw9dU`H!jD?xMg z(P=gNc}-J98e-cI)#iUyrS&Hf_}0lg6m`qf+qWpa2L=bT1jRlLCMrNn+QjRA33)|? zOlilcNTyEl5!~P4J>S>d{QS|&^nHLGHUi}eV)%viVs#%zWZ!d%@)s1iU~nLlfDW1g zv3_>ZngT&IY0SmPr8#>4^z`OtI=i<@LH5!nh1)Ay_R=FH=V_)1?h&@V1oqrQm-E?Q zKUKG<#0dI+scHwSTU!TS{A%vu%&n&gR%4bP16>tXw4N^3U`+5nAtcjkODZzKdUC*O zQ3C{Myv@^%y>cj~< zo6D1RjH$)^OWLr4BHFam?W#ye0$^X{9Uhj8{#7V*RQ3Lh{Gz_&yyd9DWZN3%BasjW z>SmhYjrK6uDF_d75sdMfmiNrL07b|rRK?!quv-2f_P(+$uBPcW5E3NV;4Z`9?i$?P z65QQ_yE_DT*TI9k2X}XOx8M#rb3f;P2M1oc;%yf}(WW0}-A(PqG1t$NecsV}k}%4PdXgq| zBsXTH&~d%?#BIMA4R&AsP%T;Og@K5t=mry`>V-;&6RDrN`N8ofZ}WmV>sO3Vn>!2k zH?QMV&$SBlho(yV(E_ff$d!{O;c!h10J0o|+0GFct%UxwamFVWcOx_aEP513SutIH zDoG^0!l7UpCyS(N{tf|Xgz)2O9OcF2Uv1iN;aw0{pz-tu2IbP0uN#5kH69+XHlh;+ z`iE17kjRoO3Qom&H=`CC(VDg&rmwb-kp=V)n++aYezZ6891yvV?z}J9H_853yWBkR zCifG>x`8V`hJihXfzxX|9LKJ3=={?PvJmqvrGX84Yt3S-l3GNv0?sK;aXo5 z#`=!{kd9;K-`4&SKDCtSichtyBFzx^U#hp_q7Wm%peF7=N5QWDyspX%(EwKUL|T5; zfcdwxyvr{;z%_!yrbo9z(MKR@&7El(;}#Q+khA`&9Qo{Xm987mf?S!ngR>!;nS< z8z8#JvJH!|<2nDUAF_WWw8N^GB>&eC%LxDRWJieg`+pBcAAkdZ7{!D7#WnwHFkL{! zbBK1Y$~n97joJV7(-j6Wvi^Tp{>LN#Z@9AKGmLcAwx(z4zaRd8=Ib{S#l22`*w53L zA{w9FBU}((BfZ}Jsh4p6oens*aF2spAvQh=#xUZCYeXUjlG=Pphi-7m{Qs@&E-IQ^ zJD3x;UuTj&1Sh%7QsS;8^kl>&&zsx_hl&56Dbyt@mRrWoT&N8H?8fIcd9d&~;zI`X zD)e!9V?9Qxjd^ij%>7rs?{g^@j6X5}Y4#8FAz1!3V!7&0D@Bus_^bE|v2E}IYRIy& zz^FFE)Xs0-Hkcu06wE!p6sd5w_grAUh2@RU-~hMsT1wP0YB1@q>~f$39v)b-6H|VF zS$mi+1I++^acm0h>N}ZXxBWeixu%^!zdV$jRl@12<@wV2`q|2b&xhG3?9yGv=FDbgL4Nz=0(WP3-KQ;XL)!IBidmCh3Xp`xQlkd3FUGo(4>m+B&hYCq{QGz66GaejU0o%z>!uEf_qG5;~S1(Yj8u zeXXftNL-qdHR8RrQP63r|9YVLv@ylj?=zqIXZMSXzw2f4ZPB@NJkx`ntPY!teeo++ zrB%Cyu3D}%pQ&-sAOS;em*D*~*}>1UV!qwG zskLA{$Ok&60x})l6C>MQ+l&yhh zGnO8551@F^Rp68k_F?*oy|*Ncr@ko{M02_kuy|r&_+o%RHTal~MEI4$lg5aPK%7eT zO4&j7!Wf;f3QmhR*=O#ia+MNDCboanI;z@~OImEP9p`+WYO(SSF?j z@LVjw+m=sT-|URJZ_wfhjSWLz7Y&6lPB7Vz<^~ZE8W#ZLALp|cr*8LZlgVmQ&oWak zoO~QsNqWAONB0)J4CP7A2OWtNuNsaOSMb=(9?xVoBQ`voKnwCt%*^NHSFsdmYL!n> z1gX3jUz-?)bgrREcBU1ieaW(zFbP^rthpY!_AyD6s+28qi%N*jRXGv){q1v7?MlGw zQ6gg+v8uzqqVPKHp)Fdqa9jy8Z564PiE>vN%VMHBfV@_FTBbOvx?Q%spgt&=n&-Du z=Y0!daye-{ODG!$2a#jy=kN$EgMHou8E!V3O(FpnKCFYzFvN=5axD|S;XtAH+{tL_ z#39RA6N9$9x$9=DWapKjY*O?P?1k{J6q^j(ycFT9qJ!-J{83L&c&Ax%iWK2UFzyXK z)?$)QRfZ(ImsF?>^k{-8;*;gF$R7hqPjoU#4)p|ru_Uz>Z^5w&MvI-}M<;Y7doj}* zOo8j?>qqBu`FVNB5efp{znl2)W*u-Tc7;6jKXiD1RB!P>nzZSPJXV=rpACKI*I5nY zb~L+CBmLy^z7asID;*)1!6(UF6%M5@ov8^raQ7?dpR{ghe4ZkRd(5p)l%1A)nx@bj z$~T(SHKuYtu`2DpdYPJ?4wutvBvT%J&9*}7$S7{9z%8`K z)A6Q8Fc$c;9Kcg(c9EaK(@nS!;T{fl;)yz6Z8WkxRRzy%Ho8*Q9z#!Pdr$y{04zFc zSmyhuF^2=OytUz~H2oe(;8-aobyy^Sco<1Mce(`G-og7k$A~$_N0B*ECfz;>t+<4M zX?~@M!Cn5}Db7hE@e_qD)=FGT&ix+Jq=Dr`U+ok$D4_kNk0|Jo(5nbr2Ppy8juW99M)&k{SH!MT&|c`@+n z?g)YMg%Fq+=hv0k*qaiiB1=N?&D#yqbvJxhD|K&K67V^nYTR^@*U#UE=9Rc^#Zkk8 zr3^p;W9=zEXq{TS##7NDWDbj8sV8p{eEKvN` zZLc-_lvVs+70D_u!L~KXO8dPolSte54I+b6A6&`hz+xRzI=V;|;qB>~;ASHP zLhTuNzmuHC5dMUnzs+SY8Q(W|m3~6XMAL;TmAgQjGdNL^QIl=Vn8TRg*}3tkcz1hm zFjJq#^#Z{iO(0NA26r#qJGPz|fRK<7KD9)rs1rj;p z!`t%url7*tY*4Zru123r9!jg%A0dwAutqI#GyzAdYZ=J>Vv10){BcQ2lS>Oj?^fsL zj8`fpQ~3uFhgKhM@A4{b@Sw4kzd-i)vRq+MO(14fxw4izc1%}-zBgJ^SdM}Q^WZB* zNyoIg00&hAwaU7D)*n4#qPlLNT_$QZ=zt5#*7oHDz_hcHA*9D2rk;guMvtI>jz=QL zpCFAjEuojDiL4-9*Cekr^!P>!X5nn~D(fQOV-sDKpcm%DW3?@R7yMA1<$~wnMNfZ) zUH+|Re3gn4Z~vK=)CZI z(dQ#cMY6pZ609gib)G|MD{zFD?$i2ZG=>MuSNE^n2n)F8*+e2TM)b-U41{e|xewM7 zOuAa6&F&uDTx?ZA14ZJN+L});gngOIj#HhUl>7f%oNxU2B%9jW}@JnVGNsLWxt@++$kBq;~Z%XFvZDSLjJ^{N4T%r;(H@z$&z>seH&gCRv8 zj#-1m91kvGiPZ!M5(({8-_}Kl0Y3oAbT_3WJ3H}q57~v#a^}~bY0LQwVsAge{#SKn z4SM=KPXyi#B{lGaQt?t7g86#4`*AW9s3mF{YrpwgQ;;A5kzj0iCHiie*e z#)ihg3Y&LVmT0(=#G#(hMq07@;ZadRFAjULnw8PS-ardZ=>E4@JZ{XZ;u5ZBI}}2h zX|%p{Zf8-nu-`=Y8+^eG_pC;nZFN!_buCy;Kvw}>+4awd3En?^@u{YwJwgaIbkEeU zmb=%Kigul12z+ebEx%9AHzYC4JuGALDuY*$OHVBhhLzxg_o=L)n+8xqXgqh#Wzb>S zKdgUThYN)sS}>6!X%Cx4WD8&Mr()*{>~_m;J!VQ?zO1pfaWn%Lb;k9$b-_I?vlgpV z-(0Zq65tRR^zQ)W13)P0Fc3VmB|pv4i4B8guB&f&SUZnmR=EEwimaWi5drk}8jED@ z!5wU5H8yU|b@ zlBiOhbYF6tK*;eM6{nQ)R~h2Um^zF$%&U{)tx8*si_GV@6aR#>L~kIfvaeZ9oxsn5 zbb?Lb$EAgA5fAYXP`)8xs{FISr-cz2FO2WSbeca^Vg`R0Vcxjqa82Oqi_;vy8JaXGjkqg=6Wu1I9O0uVDa9$**3jQ+?3 z{)H8>ipED7VwY(7k{hELKmg4G#pF8?hTBST>hhXc5?-3ucqq5{o6sPhwZj$#@pdX@ zFmxr|!+0-u^SCm;02q`$=$NuL~pXoKh^HHbt zGEg%)DDajvygz@b!3y@d^+gFksx`%q_I%#oy@YGK`Api6Qz1K2u{@ife$BR||E#6X zn4Yv{8;)}!3QjV;h&9cqAl$;riWM(IlFM&+PM^GV{Y#y$mE~>tOilqOTN4|$!N6#Fw1U{aLX5va`!fTQwH zV6Orpt2K>wbCtDQ5X1w#<*!@GKJFeRD1&idaX{II+u!S|s^B8F z8xhwf^1QfxJroy@_Qn7`7vAF*;&r=cNV?r#JTH}c!LK%ZUF9U_V{@gmPxh4#ozCx5 zcS#b_gPj?^NQ2`ud^2-g;drdbpG>*?MEdDfqk*T&##|YNSOIb4b7iH$1kN*=ah7UTBLK}Ik_9nOy0nq zF@1NiXSm^@qISptoX>$KoO12v2lk&Uv9fxckb+7WsomXQ5YbDoK_-vpXOST>4>3^N zNtGR%>m!W01_>9+$BK#vh_7H?n0ZAP1u<8#NDf_hS_AR$v?2WF-=@yE_;-r88-!)M zWqb+8lgQ5fKZAK^mI%tC8Cih`Om#bwj>5w%N{-~ks>x%djB8-wf#7sg&;?#$ux2zB zXut6o>2CFFN@ChPnPYxSweWY$<%O~EADN8=ER4(o_x_w_S}GxI*yHaua&}CA$szw` zAxd2wR?10iewt9|9I|NN-DD-2N@41K>(R{vF?}X+u9jfp$jn$?U@I^b*lnpGGD+t@ zv&Q}T1zzK}Tln~s(D{hB5)Pl@C*FgaiU6<3^k7REo4GL}@JBQ&adg29-nJDZr>U-Kc{7LcUmt!<59a8sh{AL);;SdHpUVV zrdtlpOIIIvgZ);K=dtDw>c8c3*v&Os$XDxO!g1BhJ+@5NHNMhcdqD?TCiQ=#2e8Ys zh#j&sZ*SXTQwnC_(&dM|fBtA+u3m$D%4uCxp*df~8Guf0HwTzsOCJ>d6G>!=QSgmv zqRvZeQYkBTKcl*82=Fy=F`Z;Wf*23bg?1Q9EzQmx;{S|%`$S<6VV#`W$N}RHV8RltnAci3SNJ!MoEk+tK?8~y zw(Cuwth$BicW3EJF2||Tvs}G?xtQZp6S?kRoe~;d1P9JZgtw2UR&1oi-c=8!1T_qMLBY3-`QVP%#mxNE(&<6(pA_GhX=T7lws;eIQF&!jvdISt{Luse$mOdD ze~z%64vfIlQ`Y0VtM6w8$vShMZjo=MrCiT#4W1jKOIY3@au#0<^Fgx~6E5nf0GX+;bf1mHyhJ9p7l*?3M{rI3OWR$=o+4DJj)TPJQ&uUCGOMsOKG) zFPc;oyBH7au}ZK?Qji#<6u=^&$;8nTxc{J!gDj&a&-#PPX#ai9_E*yn!m6?^jV$hS zzmr+gbNPe4*h(4(tooo2-r7`N5iIWe$9ZCBKd=4a&kopGbdU$7D+0v!-2;{@NK>}B zQC0O1)*O1gBIe4<(^2j3GqJp$7Jm1|7n(V!`v`c4J<{PzP<_>66H7nz=)rjN3xI=t zO4C4d{J<6(eHq&x1_dE?{G4Pf6WZyKpDCp934w?>i}xkrlatHUICXAQnL|^L5_jgF zK|aQP?*3H$6-`4u)``=d1U8N^DYVFDsx{)L=lBw%X}w`{y`^afa}G(b0iMSrTapUJ z@XrJtZdHt1dZRcfM%wQdQ)8bIi2f4MNjA|| zsBZ^Tokv}N>WLs4YIz-x^$mkO_uxkfYZ2BTw|4fC$U^xTcl&x_`D}s*f+$QhdxMvQ zvl4N?k`zVG?%8&UOg-H{(MQvCeO`_W0ZHT?(kJda-)W6rQkg}n!!X&vw3Anf!?g}q zD}e~$9%7oKc4>nnU8An8nlJ~dg2*0INoKIaiS~on1u}{VC5nKsABsa3%x_Qa7laGj z!^N!!s8Ym~zZZ9bY6KC42f{0K^KIE5XH}>+L-6X}mviB2aEndZsQFA+KEX#$n7w8A z?CGl~*Ntm3z13_phCC8PT&pUii#^vol~6lNR%qslcfi|j|5{;eia8m+RvHhd4NN+M zvUw}nI37a(^#jduZ$Dj7?Syoj#1J7Z;Fw!GshS6fKpcJ-=)8aq2Y<*+BOo0}0S9mC z6L}fS-@^bO?d9(J(?&xTGLxndEUTKN>&u8?n zuzefmT4Aha2Df;`Eb{@fz&Uk@g6{2F?9mZk$POtRZHO1X3chDnSu#NpSJl&KJ4vZr z^_!(7Y=dD=`A1NMm{GuN=kqR^?{_^%iWqz7K$|C=&BF$eFEm^KB6Lj00+2}_K=lQG zzf+L6vn1y@mL{lbRfsSNE#2Ksvh2&*T$Ey>OSpUih)@h(#rZulo@(nvZc8<&B#(on zZx>hosMv}P%{VtvRA6^j^QXUYzMx(n4yCiyW7>~o^y#Zty7?D=%cexE#Z5lTZq!r< z%Op^tgI*{~NJezaq1r`T8sAdG1-C>eCN3aO2?4GA*~T*4vkc{vL_&TA_jq{yCYHZ_ z1OzPGZ9K6apoa#NZbj0?;jl7HuvwS~<;WOkc1%}(?Qttx3j`6Q*D&J8UhegI7~_1Z z3lWCD(k5~olE$(h`P=A+?U-8J=#N&cMhnE=R@_V^wy-qdQ0cvvo(oLj;`8}J`D1lJ zY6Z<8KG!e=`CZeI#(Kl&W`H`KoDJ_26&2k`o{c$j?`x?6HLgv{wGe%ptkjH0_|XakZae%3MVp|VGTj6+5%>e;m|5l( zwbMjA4wG>QUMT>mE!-=lJ%xR&P{__G_F~2>cwV;(h770&w;v)(zi|sFN8C_xVI%IL z4%<0tL_TfjCwJ0i$#RSNr8NFTU5wN0QZiOU3YyXyZAht?PITH zE7%xRVo!Hb2e%>vKFf(>9!3?AP8;-lim{9|x7fqRlf^-WrXFPqu?W(qaHkx@xwA@3 zzFd^90o?5@_tobD5^9aaY5rt*S?a+^!-$vBKJX1bo@5Vygg{0Eg#X;(w$aq#Ho_4Q zK*1|_7(2>-awd)*?w1%3H7*5IRVva`?mli2@QsTQ$^}d5ay3fdJSHA_lEowkN4m4B z33UeiOl-wqryf)KDdAyxL@>PHABbBiAzC5GMD|f7j)E*22Hq4ff<4U?+i&dAmx(90 ztH8U{9Qx7($&!)4gOOVsxOTTtrkT+jn0Jay9F!K`i3gaCl2y`ix^cmX9`b@DN|B)U zE$y8uLWAt4rq!a`W*nrT3^RS7GG27kdU3|yoQb!q*i-jVj3?03s9!2mS@l*^ytELh zFx@$*f70R(>Z0M8C_kAc+9w$zJGqr49w0z4b{w^TK51pysObXG&KyQNj{%MBTqaIf z4H*3lurvm7#rRCM$`IA&8T#o+GXzH5kiIg9-cKMG#eO-M8gG$)?XM>N_U==0A^IDu zl?dC5`uVr0pnM=|159`3cl=^lST*9wM9D}rp)qmjKUYuFs(%K3i*DR%Qoe9LbFXC| z;yh%K#q~JMVL&P2a9j_~=N`qj{V}xkE9cXDk(MY3hUteHK(h3txiAQe_2h5DyR3w6 zh8b>oZ171LRgH@zP!=;r%-i8~mrZLSaQo43;<5;2VnD@l1r4;TA1$kFcEirNZ{lLB z$D~UYpW-XC$^0#k!!ELJ%)!Ov^wc+oA;>Ga-;;J7OjM=H;HVeAnMTeQ4$=e&;lKWA+<;au~8Tw^le-7+@@UBjXO$9^fN7b0nHb- zt0^kF{5Ig!;-%d$7uNa5N>H{1dcQVD$i(}-Gb2Y#CpbK!{3OK@&rrVjN)r~+Eyg$5 zA2ys$Ig7Zg_B!-{2cn{YI<#V%klXzFoq|Q2)u^8N!XI2ik50`=&Fw71YkFy5FeWf* zpcU&roY!`a;V&`BYh@N&HOuTKd#R5 zyo`RT5V4QTfvNaJZ`CdO?wCOqw-P>r*Oz2eT39n=?1x3SC5MG6=)+f}Iz$b;AMK*L)3O`Xd9M|wbex-{~kc;$9%z;QS znT4NbDx&wdWaTBj1RKGx4OAW0b?H4NA?}e^??M}7L#Or8r8$R~uVcikm9n}cIj;do zz6Mnodjy=zCB)7h7NW{59im5%T0QZq2*hSBKQl|8U7wn-;;x>#ygS9krm2^5<}dB% z=^F^}ifrbPVHZlRR&YVId}4=q0j$>Q&f)Had^zq+hsPRp32`4Ar6baDgQSWAH%15 zzbBv0|H0PqP2Uk#QNp5j+_9dcwj}V*hRLBszB7AO5B-qCU4g{eb#i~LaaqT25w@Rh zCB*;cQN$MU6b>j$@9RUbaGH|W-8~n&96sFIT{8J6 zpzJIiGF0+~Sg%_KdKa8KUfgOYqK`&Ia|fnXlaUJzVVgb1RI%^5l|Ohlt(p5-k+~{czkvm zA=GGl&$EZuClDhWMT}>TG0Ngw&M;x#`y`#}6-Jis;ZI~~@G}mWuft!LTgbTEP0eoa z#YNnYXN%2YPl!(sUpD;mllwsG4eBLQKb;ZE37UvHOg&8BO)7s63`A3wl3n96qCkTJ zxbRJqvmh_yC)Z9GG5wM$A)&dUf*Hv)?-VbM%tMbJ$v*IpTM+Xd5Ex)Xrm%q@G1&g4 zdF_Cq9d|IL9i*%Cc3z))z%?fjO#RWGLDth+wjOLEPfsrvPcU)apNxE?gMzITFoBa;%^hP+(!Z=?S~lO0 z^_750zCJ`HU6g|A22IPxH?`pFc=+NoHz-4-%o{`^WXfLn8eu(soI=F7R*NymQDk|e zjUT}yS!o#~iU7&T#W(C)WPz`QE$m0S0SRX+6tz!P*7L)9ViU?6i^>)RGlLVvEjV7% zLREjnivlvcyEZ34zVe!;A->s$cEo%ZXRZZTfcFq`yt>ru@|cwnehvaes1AMUC*o^Z zrv1u4d6)B5B%MCkEEU?FWK!TGgUEPZ^=AnOI)a^9p=-SooBqhjzx1ssx>E7qMpHbA z8y=-BFBJ%eA&CY>eG|&Iwoej7VrK(Qz^A6aDe{45XitLafaK6rgKJ5=LHo84Z>iL0 zCq`@}x}atMS!)hzEV09nD7hD8e*>&vbVa33maLz)U-7Ta+1^me1H*ZLa5r%hslae? zXHGM@)x>{!v?(y%**@Y=|9QeBsC>F_Ie?})^9jS``*dJ_S5#k8n#Tqk0s0F~XQDhe zy-t6$&g?R*v12ZlDYFD1--!wWCUVTU~K1jHR~59jR1I)L1_+$h37=OUf!aNJE% z>DG`C6xo76VR5E^m{FA{fQZc#<$T3lb?B%ttL|q^v7mq_xRY%|Vo^*2uSkY*GP#uu zS!Kh8*|}gl|3woMX|VV}@9@>Fa;|<@=&}(9Ejt;A_!)n$^^!ns)-Wu5M2$$!*e69Q z!t|29c1_%o%!X)|je^R?S>dqpW%HNU-`%?DQNT@UMn&4Vb&eNiXK0Z7Uwd?qx{_*wwsBMIVfrn|3CsN=li4mNjPj(9gJYAP&_M!~|B)qD}*En~dBKGI58<9Wh1c{~x_ zhYgjgvF_q&P34V<3-K3N$@}UrvK_@JYR~ct;H84xow)i7~c3 zOqW}F>9Wjp=vBtBU@4301AO@zB*WR;l{c*;pc}nKo#5{t6{b`jVx&z;EqrbT{Gw+A zbFR=H(1*@D^*YcWHksj%m=j0$*4OStaKDG9?luT^TMR+_u2iu(e7Y`m51nZx9wd%O zZ1Mf4*RlPnr#Wp8_`2qPR8({sO={bO0&%fDb#sC@h`aI>W3A#TZ?m?}-hn%gq?0Iv z4OULE@*rf@i1|1xBlN9_E*39vrFEI->HAlzg^)lpRAbMd1&|e$VYw9{ayhnWu=Pr- zSU^!D0G$0Dc-XDNoh~6Ia{~ZTh$(r_Q~`z#jsv>L#U8EM%v+)PQ4Yu-%r|O(&X!qT zVKd$fbJ)?766fNz7Nv^2g1RYVep5fyd61PE+UdzHywWKM@x#tBJem96De0H|MpR}c z%gfswXzGr|iRW?273(BD8lMdbB+(BF0c7w=or_U$Aux4(J$F4Lu~3~Sg)jJE$)bxm z73b_2-{+?p#)Tv+h2W~J*NDz-6OU83G&37T0P57%7Uwq#>q<1qSxI*fJWMv7#GNhL zJ?GT*kC+r7JkEwfJUi*z>vx>4`}MI<%Qsq$$c>2okfH1K;dhebYX4N73#+9F$@xW6yAf3k&ho*As`_2eaU#Cy!RYlz3Olz(Ssih{h=D|0NCIhS0y1G4hy}Cw zqUlukFm;wDyNzX;^^5t;vAWIZ^v;ok;aR-2uA%8D``#cqGwgxw?+l_l;?^8~%qM}9 zhg3m$G>Wg}_Ac1$P6c>g;Jb??)LdXWelY$QH6rvoc+K2w)dco_R&8aL$ER#%mROyysWUu=lcnyn|VE4 z?uKwoJUyD0hV~W@w>Lwm%g}Qr+9&cUdDuDJpO7ABy?z}ecfxZZk}|PfOJ>Qm1mi%R zIdO=?)eyVFtf_yA%kv_-(v1f@9ARkX|4Gb70W5u5g!t0n5@VwW_4o%J zY>5tFu2c^6$ZTsT-V29|;av`iC~RHB{um_leI&nsdq#QePx&2f+kQ=Q@jlaZb>{k` zH?oD&UNj5))aL=GD9eQ<-o4Y$dK1<*1o>q>OOn6iBdw*6jG-f1V4J;kQ4)=^@H7Pzis|;3ANK~AkVU!E)X#b6^1ksQ<59#?T z+pCA7$KNrhX)ZP$j#gr}-P=8L=?^yoA0tdta=f&>j9Eg1p(K@HAcG-=gK6>LDvJ3) zi2x^2L12l!Pox=}Mqk-n9YM}R$yttc5K5IXd$uZWJ z>BDs=B&vyTzp`2>Y(o{@z*s4&#}_14XGW&27MLt%vm{|76GZrD_>iufhX?ecqHPo| zpWw`f0z0W2=EV`LuO^^b$p`y!vjv5au~NvhFQQef4i!=)JY)x>%7-CRS?I5VW{1Nq zVXQNUKj8W#o(}S#VzT)vLvYq-n_L-C-b~I4>Um>s#zgKt)uC=CzCchZ99`5YM&e$? z>Ho>B5uR~*k(nW8QR;|k!PFP?GKOe$XN~eZ2AOCyH&W&0C_P^N^SKHPa`KOIM<+TN z&-&Q~nK-?PGws1&ia%9mg&fI!@&2$r_eHY1wCa&yvsop%b3w<3s76bp`5)$Dr!z}g zxru*^xCd*BebZ5{qU^s@+Bvq0ax=eaui0mS13B_TPJ)yC9a{FE`S07wW@`{8uJ35iIgQey9k`;XJ%Hw zA)+xk(MFefi$zW_{{6i4?B*){#=aaa7Pp4)f};5N85abW#bAf1Y#OJ+O3r4sEYsBH zV;TSau@ls-XvdB&!aR|^V*;2S`>m@4WBK>G5aS@54OdOC4pB}{=qzhC=&6PkkQ+0x z*TNcGpm9_Pn==q0@cb1xZa-#|oA!$_7%x3wW-b}j`VvQSFigNMg>lkC%|1loxov~e zRcFA9z-rmWPFiY4io3N&(JAK{_jv4pQL?De#0I>TP{Zp{mJVeOeCyd$L~Bb>>O8Fu z^76qkSsPRh*e>W#49)7WpbYWn+Mna&?NNSxb~RD&1aGe#8C3(#9i&{E$l%srEW+e7p{}1=22;B?*CM9O8RaTu*f${a_}!F)v&y zhp;sJDhT!@X6s2nT9&QFi!^JK{qiOEWY~m#FK7wJUo_83H!V16mJGjG<|gcm zgbyf{LVZdG4Ba2gOo^+!E6UB(e1I|#C9b_T3)^(o)gT|YA7p_PMsj#&Agw%GBWtJ6G2G`!lx zpFPlzQg?dC|8&4l*B#_rIDF+F(&g`!2!Mp-|kf% zG~%b9dEI(n%}@@Ti6hQzryWZ2YF^%6?u+yV2UO9mMY6iL$PctCu-=Wf;~NFSMaUG1 zmWSo$-LZ|j?4x?vj1cqIaud=T*RcHn3SVaTp3 zIgQ|1TsOn&!Cp7J8JTPZGgQq51LILL+PYa&X#9zNnVG_->p-*VECE-j_sP)Bh?H#g z;KQ7CI9s4NI?8zV+`_GjpgfsDn!^Te*m!DWa>#e<<;Ezo6yc@!SDMH4Q@ewlcFa|m zKmF-dZy3%AT1Km*~ zQn?8Gof?kks3-1FjN(xPeckZ|di#Et*!tRy{bJy3g#~Q8G#(|<;#uP}2Ui;D2?2a5 zcc!`ErQ=@G=Hz_+a593nGq0W`6YNLX2t4v}L5sdHG9Bb8<5aDvid1G}X&Y@c1ruj= zA{p5zFh7Xl8Glv#+g#{+16;c}B*nr#>ch(DFC?fYUJ9YOz##jQxrI0@k5iYh$VM~{ zHW;P}+>4QfTZPg;$o-X#GaY5Gs^;1>RjdI~(5vLENrU2>Dc@zdW)fxmb$6`uZp?Bb z4~8(ju5$hYvd+CTrB-8{Co9DNR1(ejQJG=f+o#@o++L|aj380n7AXF0{Zjp$;w$J{ zhEky|y|v*;_t<}q(eAVG*AM2HWN@TB&UKjlL=5r zDD#vILg4j8G8mbq%+i%S;QZ}HlI8`g>~2zKPcEVZGYDi~GzES6jky1~5BA8Q>L&gNpi`xuZvNWx`2 z*72JPL1G#Qzifo+{L2>`1l=DWfj{V8-xs5V#LwyJpe3Ln$(+&9VI1K!5`wmy@j8eT zo=u{WH}}U*8xzdlZCOu>V|^>0&V42&XV>tGW^sp3f6-QS8T@Ydz>_-%ryDWCiwr!Q zgXYr1+bVxg6W|bIKfr*O>V0_M-+KRIYZu_@R`OMd5&wCO$st|nHGw}`#LQbL3Q6F( zp8?$tHT~(E-E2>A{4q5!Ir6+d$VE#-IX*kJ0Q>t<#4SKTJaZ+d+VtK;n{-4&b(TO{ zTA18W1yt&g6(dHy#>7UDjwF~=)tI~WTr)MS-V5!WDLOe;MYcVm6z78?C+0IT*r!A+ z_PlId=RMb4pYV6aK7Ahppo|yDgZM0=8n1`)R*sBl?M(KZL*RB`6>cxNtcZZ@N|S(x zHJR42=nh(Qr1!_|8NG;N{3n}7@6N>069?{$voGCtj=`UMOBsRgClT4IQ~JhOl-+LO$TR79o&Ngol-8Vpc~P7JMj%TLVH3z zOcyf(*Z<-IkZ(|wK!OgJ@yDw(90)b8mJAiQGlE;qU#w|HCez#y^bI;;$P3|WBfK1_lkbFNu z$_V0o;RdG7#>`@W@$UNA#YejWk?I>s>8KFfIwFD8Bu#fu7byqBHLqYv<0G*8JYrRL zt`2d9HYk>GmpLVPr=g5xJolZgN0H?Q@dj4AJIBlFVqk0$q>*l-Cgw{z-mS4obQH8C zqhqu0z$p;3fCx!jbYrs%xN+5a?NKPXd!mIqB#URf%IK7(c-RQ$Cc~eBAkNHR*xtj? zpN~Ay4*&3tvy)buq=Akv9b2I$u!5l*1X##}B`qzvEtQ^PAEbYB&;DHIPj8DPt}GQv z3x1SP$B)uBtpkbq75 zV>#ti*>O^ltJuB7Y$7yfXm$?70}qdy@DpPLf8#rrH-(JWl$o%wyJBQzL3k0(7!;}U_QHO2p3YJV_sTe4-%z~_ zq?V7w6ewRrYP`p6M2XLKN}7Huu^$Ryy>#qT$fjMF#@>Oq$C?Q^Xd}^ecn7sGX~GVe zGY6UYeBR4ro`1r2w~Ij5~4RWF#P& zuY9s}Y7JOI-*X@=n`>p#Jyo10 z<`_d#tzq1|_DOnTq}zZfmRbCxYWT6hEnIej+pQ8c!itX}zcXsX3;?`I zVlJFUp6JOlBx#f(cPc_hG2cI1^I-WKMM6NrK^*-IuOt$E-D&a$oTX9~HWk4dbWZQq zo#kQL5-@SG0o%2*MkbvcW43mX{4d;k%$2w=!8HjHY&;1V)1W^1qoT3QNbhsLWN9*C zC{Drcb8tFoUmU#@LN}EhjfK>Yof3EZkERRe6S~shx4_GVq6SCc1+jPHnV}&}F3G{<1$%yd13LVM8d=~mS|HQ-R~C^c zLntTm>mys!r1Lv{&O_apA;#bvz95 zK8!8uN~ok=i7$s~0KWE=qIgauFkhCke zT++x{1|EDQRxReY+ox2|d+N)kg{^DX4$Sf5`n*tTj8c>1T>p}%dhX_fbz6y48N{*X zJ-WGxtdL>soakk>%&6D;&wW@E!m)La+3xG7)1&05MS9hV?m7N-^86nUwY{($mO;ZZ zNK%;NUqQ^A#?sB**kW@k66Z>O2}gJNjCI&)UMRyd?#6MlLLd$?3yLN2+vzYmIeGz{ z$j?TXi_J@MpXGy;v_ivh-{PMtNFV<}Kv|(N6%O4PLdM&~^x0sR`ouKZG)1+%$5z=s zCCL)bAvCiMEJr8H-wmKpGI{)R5rExGPe*ZYDtJWbj5buPeA>- zNUE+90cUm;#gr9X%pjb)m{{NAEWv9@*)Sz5s`8yHQc9%=Ckk2ZyD)LEWdICo@2#$z z0lSNnop(v==QFuOz?OTOdFHQHPVmx{pPlztivINK@L$GeRy#+N#mrrC3Z)kX(?f2r zALroaW9u98XE!6WKy1U>us5yIzbNeFD8^5P9pevNr`s7}0*D(?8pEN-zl(SG;e7g& zJ3ch8!*#X0n^DAvC37M8JR~qiR+l-HZt-^)jKPtD&1_#C60-l>rVzL^4pU}BBAb4K?^>BSDp3k*nn`yj$6f8@85!dl0HbF z4;PRn1je9G+pNps9(Gr*w<)5>Y`?z{4IGT~LQ3*bHxTIBp>#ctwBS6xh{U^{D|8Ie1bGe{L+A0r5J&S)z< zI3dqBJsaGhKz<}iAi9|CU2^^<^;=y7pYg!xO^fxQ!pF7}Pe^_;%@V&+b=leT9KV}U zN{%AF$oJyNDPqaK2@5EPt)%csjNDfIE~pk2cLJkq>VgrAOq2R)6i7|rF1G&&rTc4g z&%qi{up4Nw3!!>LWdV{uOHwfpvHAfHw9HCT7!!FNo*d2?^J&6kDl04PBx_lOU7{x8 zH+wo%S>2k0KES@?jHahu#vBzK^R>CWQ6P9SAjKYaLxi3jM43aS9;8R(fP}Z;;uu=I zW29_h-H>pC22M@dlCEX~vq?DzEZvFffWFQj^9YB5P~UA=q;v41KL9uQf4I7$o=T5q^4-e6U^Neq(`-CH|pR57#bHVDc-5c}!{!x7f=a;gd%>+1eA;JXC z`_xkvsUj7Qd}`5E@~5PP95!cNr)4}LeWMmPpt7;wD;)tM18ecz_V=qmrVU87ifQ|N z>i8caRJ*pr5tR{p6`Tx1g+~t?YTyXumiHOGkyJ?S6sNWDAx471qNY*2bU?rXS-^%nK)1u} zvOWENG|#qpEPaEIEhvYF!2js;Pwk`(BND8NiHCcVt=H!S-u)WpK+o}4wxLCb8vcos zQP1>nBSd;!OGeWxiGktyq|dbJ6DKu{LZPG^yra&+i14Poxb-y5X;)|jBf1mx5iFuw zA@>6^8rJ;u(7gbhCuieFjr%6C+!KI)s5QmeRz{oZd+i&x1r4<{CCRaf&{&I5eg2;< zkeLTPdsUH0Rtt}p+4pb#Qf(?aF++CHj#Q3*PPhnxhjEIj-%@euHA&cI5mg$YFuTTWnSmBt*{#VrrZp!EbJ$eyIj zPL+2T&^i&@xDWlGvc57ZuCB?t8+X^>!CgWK?he7--GW1KY24j|1b3GX9^BpC-Q8t) z)_n8MGwbX9zwf|+tQxxPkOm3Wg# zCqNx?*s#@wk`Ogl0a3F5>pw~Zgs30!3>R_nvS&0rMD#}COdUz zv41noO)(?mp z^yC=@2exqW1OL)V4cq6kDLJfOn@Y#8b-miKGtYG3t)o3w!Rg;Ol6{-&4U(VvJW`zX626tTCNGL8X}3sM?j-xTU|{QS7nY7Ze-363P*1N_Yw z-f%z|7BV~_F7-bpP0I$k-X}4->hE%N_lT{C!zF29-&Y4DA#tM^PO7l#asS2Pl86i$ zE7x)zI7w)g+*aCBur|*{S43VbA}li2l2#6!WaT-enNFMwcKehG`?r-He(+hGy_R$o z@z1Ze6p-?=5Cr*@u;aD@ejFb6+f`mKUW2$G?tcBE%zGx^XRJ58sWcR|v{rLx<}Ar| z+;4Np~D{|wUZBJw#QUtC1pP^mK%cLleoUF-|HwLstAmYQ=OSGY9eo+Yo~OhA2M~ zyyIK3G>Yhm8IBMk(M~*0Ra-PcK&Mbhl5b;LZd`)y+~XyoaQpTSC@L3w*kLsEr?3i| z=FoX9MGEurS+5)IAO7&fkKpT?#S7#z@5;Vy*tWM34%vveIuN?WW=Q1~S^pz*QVQw! zA>wehL|H3QrXDw{HRh`%DnnGkMMNbWyI^uSVq$oOyOG-=9+B;>p1(IrkaMUvs>S5Y z>I@YqM~4^|2I?(i4$$@iqk~b6sg|lV6JrRRAfd^ZQN+mXL=Gi4Evlz!o5jfuMk;+8 z!z{`cYLJ6@6YVsc1hkkUVZyrB;bGU4ku1q!rYbKWEX|OLHcW~Cjwp5c`N~%HY|iz$ z&s&%fO6V#@vhm6W?0ufr_{r~^Ectm<4*zd_y{?zqYI#^H-e~;b=WTb7uzbNA$xnC{ z402-z{>g#^lUg&l23eeczblx0&fMhp*5_0ipx@WEawWX}UC+Gx#C}^wkcjCR&vS4e zyCr__Sjm2-+&Yw|ESWDWruvH^0T~ks_@|)`NHdu;-PJ;8r#B$kJknJJSf$iV#PpZxltb|Hsdkd?d~230|N1&tTvAe!Y07eCX}M!y zCbq*?&#mj0sMk2N&*gIvVU~;rjcch)Q8B{Qm%!<70Ufi7Op$qcAH&@Qj?S$6%jPBS zy}-+FCv%qN#jd=^mpwWbZi8ApYN;-xr_ zK&xL))MmKQ6%bl7~^hMU0G z{zhd5Ic1dLDrOUrnS*C63b_D`i{UBSgk%XX3wnzL>_lLu&KF`u52Ar#>Up6JHgIX& zmS`q%O-pOursI@rwj&E0BpbKk_5@j;m>iI?a!VJ-&5j-3YFNTR(okeVb3;&-r%jT< zKoLq%5Q)mli(dk|`g)XFK5bF^GtXnh>#qP5R-`1ko1drci8Ph8*pNE;u;Qc{IMU&% zoT^ngGDR`+t*wxnd5wPbM$!f>CsrPNX%l;Kh=#M+t5V7azU&CxX6)-RJcmp2f4oTA z^$OPVfKDv^$N0bbu&4@0{`{2HkW>W$EuP?UdZzYDI25XU0vgb^Nm`8u{B0Uqb#0&~ z=(E$97!(~i^s&E9lNNSr8>iZ5XQTzb+a~ce=nw)LhQZ;u-iw5rPpgnlNxTs_Hws*8vk- z9XlIhLnkcRP#wYax!K@VygWMfddwn9Mlutb$5%p&(CJ)5+E2$-;Bu8V0N3P>qMp%( zvS8!U+?Vf}!$Ro;=UhOZEiVf$MXt2#c$Fay9iQV!zJ>!!rkf2*OS4Bk4!v5vU{{Ca zWzQ8b*Zp{Zf}=&?(4l2Xe=9TK*28^FtE$a1$oKi&<_y)>Zo*j}GL|8Oo8Bb@HwFT=j!t`0JrZi#G-(gwp z?|U4!crXw3wC5F-XS{hFsQv*FcO12^^!4kOm3><;IKGKg=Wl3$q62KvULe*-YN~+=PHV_rIi1 z$0^1B#aS?fuSClD5m%l}dqnfZ0CPYs-bs&>GN4)Y?C8^( ze^r9VYnoSYra|1;mPTE}*0od4clHj9O?Td!p_KN=X?qBym-MdCK~6g3;U+sG_?}`J zz@HpY$Q6RU=_(e!f%DD^%_>gEv`@^_aTgKDlpoGyrv|Dmy!aefQ5qv3y8I@t<&(iT z+SxarTIQv>%Yxxy-0#_`L*0+)=0!=BP=g=q{=Io=Jya=tqxO7-^-1ZDb6ZB9l9NyW zC)4r~VkXjUpo;l%ME&-ezpP>&Q`iz0KM``>=T@fVoRowHrR*&88fG+p^)Tb#P=E9MZLLxO<(a8~P;l#Nj+0dOERBHQV?h;J)+O5F6g_^R~QFnn=8uP~E*X8jqsa-b6P4~)~ zrWUzhKhLHTI6MjKxZ!L*@jmkVyu|$R$lc#Bp_aEf_W66m0zCIzFoC_f2O=@9Mb#r+ znDf(8*mol`F3aux)>@PKJ9wNo6zu(qUvOHJUU06$*k==4zwj8~AJ|)p zq@dvQG~iJ+x{P}p{5tJ>^X=r1&qGRin5kZlExfGsr#8-=glBAf!?*R{CiN~Ne1r1U z#b!sFbqQ>eN*zgQA(i%OUY)xtz@la-SrbwgLx+)6IPOg`AI2xG@-!?R1+8WBcvP<5 zisp%w5rGH6x(2@EGP}u%{aF6|5eFoIn05u3%^o$kqEHsuvVcesu!o*kVW z;`DDS@g(vGDzZLn?NBedmkTK2sAnHqfwnJEJii!sG-W#dq%d5!lP3T&C(C z@oq$)wz9X(NnDF2V)2WO3WXvMreT%CGylBK-J&RQ4Yq5CcxAm=OK}{8`Ck?R_Nhs@*<2b_wl50seJcPAmA2Zy(u@hbed#si^qWJUL zLg@h5KAAldch(2#w4zppd8iZt{6BS*NmM31-t=3hfd^6z>1+`pHg1LHT_T*|Udc@R zI80H=R&t^bMM5cb4W7kyuvAW+{>rVW6_{RUa+7jzs))m&v`n<}N^w%Fyr^O5x^46D1XeSY^leGwBuQu5XR`BP4MqRsRyHT?8Wfl zI_-D^4nnA?$t<}IYz2~o04>U{IA@eX-@WHll7k&&Qdc;MM(L%*(?y~g9R}xLGm_rq zoA;1JO^vwL>lU`?4MPJVj7FGwsHS{diJlebt4zk(f%e|uQ1k2PwMF&OQQpwBJHZ=M zdn$5sEn__+ow=%RXku(%&fVVVNeEH^d8JSv*#IEY;}j%>7y$L%fqR)v&{n$05R3Rd z`DSywM6yUq3V~#RZdJtb`KFMVDa++4BIYZhsX~lZ5<=;SWtsdpJ|SY)t1MC7mrzO* z$pwz()4B5At~m)Gagc4y^D9OX9>8o#GT{xIHVpHd^sog9(>l(T8Zw$pNu&ql+pU-1 zM>j*lc?WbAnf(Av(aJO*xC%naSrzJa@X%yhf zb(YDpmtlFrF1B-(%enc!-)|YTFFZRDj9lLlEPw~y!q~BC>FESOeA?QCT8{5$PaKZD zHumRU;6lIf1j?)pudVsFARJq!J0WQejr!Z%+SCzR0$_P8_Ie6v^5^d$Q4fmRdNDbA z6J>3)yNe4Y_8~VVAgnG3v%U5Fa`&OiN1);TPHdLH0@sGvpiUMyBnUdiZF11kL2sso zsLPdfvWnDYR(SsX?+g7;&-bOuQKzY#lm3i`>eK0q{9nFt!?O?AfE0mm)IZ@PHTzOx zQfWoR0Gjtb3=XgSk^PaF-THkyda$ot9wZ8vnSiwfA?CCk1~_=MISM<~0} z3eDW*ki4HFe~cYnCcM!$@tu8eqT}*P*{0=Xd$YIRDwmUrvidr{eH(Oh`NQ6VxV6fI z&(LGPARN@VkEzj)eVGtKA(c&Inz__{t@!t6;Ie73BUt)9Q3}*Q*~lL{sU>(y6}i?| z+vfyPIcc?erwvy1^EohIal@6+EM6)e#d`AIS_bt(PCaJtw%N$AX1TdmSvVEbX#{+~ z1|+>|MQed7mKh|}(UGhs)?;2()U1vzdpXdULw{jUqqJFU>%T82E9Rq9}gZVs5QnCz2ggoFHDr5Adf-qYP$ zZV+%r6xgw1JH>uD5xK|vQ*+9J^%8syc)rb8p`?4xheSU-g%IF$I0Y{q0Vsq{D@$wj z6&1S2jxRnXgO|coyHOQHWn@U+r$;~T+>BR~lhygw17J}z(#g5#Q*ppGmjfPU( zi(YkRnJ7o6T+&Uot=4=u0@k*+TE@16bV+QaAr;ux_cMD|Y85Icg9+4XmG;r)YB_Jz zUv3m$Cw0(K)X#cbiB?gVRt?T8v zRJ*0Kvn)nNMpmC*hm*xF;pq=C?9n=jTomtzyub%#_9ps_WU|`bZ&nw8E6_&*9Esq?8AsGyO#)6- zwDEa9T##*_{Ca)aC($YhhL8LFzV7x*eTE5#hdrC;g4#~s)eWS zk6W(_ws!QX%F!CeUd3gsY+&`l=Vb~qXW+OgUW|a-mxkZG#0yocM~jqL4c_3?1!_-7 zPxAr;JN>-qXVYhsN)tq#6h;4sK-Se=E*bW69kB@lV<9P$G4x*sJfcS=_V6Q6JzUkj zzg!tS;vmcg{ostoKnFELRUg4T)FL<-$BIg)of8(2tXBmal7A?@d?wHyf}dZjzux{D z^p(JA0JYwGaw4UY6TuW98`f*I-ANd{8twvJy&Vo2XZLtDmU7qE@MG?{c4DOkmTA*O zqQL4DN5A`G8Q2B!@tRL{X5iI27G)YfW$4Eat@vt&*rGZhkR|BorMD z3mC%5lfB<`a*3e$yX03v>%S3%gJF%NUek zWCU7?8BDA-2L!S8N88IYtQN<~(kZi8@jxVfFrLhBua`JRU}%+2`w8J+CXk`0X9^ai zwx&)E^O=w3R|hG)I!i=vQba_s!@CR^jtg@e;tShN%AoDxu z(^9@Ccpc%L3?&x-cR`!$B~z3a~X_Xam$M^;IRM$ymr1|MqZ+u z=xoV~x&bM#Ms5(^8euSd?pkZ;l2SO6(ndKgn%Q!ltwgzi(ncB zddrjvS>s)EQtAaRT$P@d=?~a66w53z;=Nmf`O7#|1A5Ce=uLhfW81i@@p#=f_vy+! zPmA_N`wyZ1I&=M&S%Zj@pv`Xow#U198wb--59==#430yPOu>PE`Yl)78JVgr-usB{ z!Rh&)%W7b7MdW7&o3BmetCl?QX0=Gb%n3Wc9VWEi>S`lF`j)<^mhw1Mo5@kQ8GZU? zX4et^_0mR=d1la=O!R*Hs3l{j$>h8@K~n^i;}_K%c?dE#Y+W#O$2ofa1&Aw3f%g(D5@EXfv- zs)_=LZVy-zq~yn#?f)8TeEYunK65%ZN1GD{kaGNOz4lw>`i%>g={f90EK#?(6XMCE(ipz`>+QU5 zumQY#iZlwlo^hOlMh2nZM;~ZqY|+7de1)RMqq2z|g~YV6wz!S}krZ^E?LJ*TZFYUMPEfbHVDF_{cm{ss1`(4|x7U2F_(lENBg(9fT- zDB37Cv@lTUNkC>oAHVbfMWtQE{k-QPtO=({PFhIOA@69nXf0TP0`V#u) zRQrx7RN-cA{97^Bcmj|@Rxf7p(%-0GPx&3{yS$6IY7YgY*;_yEsWmudP zqka;+A#axSt1A?QVl{t-GJ5SV1VzhH+aqYf&7*{*x8qsV&gTN0FT(T_TJ-m?%K|CB zCJbLI69py}c3-M+jdnvfqG&#B-GdczxU<(^P+}BqaL$COmAO-(>mm8+IJ?1Ck(Lz#V zhDiM=)~JV>icpy(<2#0Xw{On-nWlAryK4^I`yOE&C^^4&eKo3w3zVk8%|Z~EnX5}G zwISOliWkh_ZNfqI#pg;(I;w=k8|=E_Qd{kvkr5JZv;HoIOUr`z!7j{jvV^U>YiLLn z$j(BY8=cX|ZsC7th=9aWy+njicqOaqQN$ZJ9kzBNaROtt49t+KAFL8qr-hlw!#jf< zZ&ewnAA@~jo*#Eeril907agZ-gFQ9F_n*u1{^;UVb9F4PKiPJ_QLQ9$Ma%wKV5Z6E zUTRs_KmYxWbi4UP_0Psw`I6Grf}aemajI^#KDEUUF~Zx>Iez_Tz1^8DB&+g4epNgt zL$6?S;=WYkVHy;eG_dGT<{oJ~zY(Ir}L)ZpQE1!Z@4 z4_UEK%$J8d@|echd_lT!pR|&jH#@oeL4I`)g0KX+L&}6-3LTBrc!xM#Ba<#5gr{ zKQh#i#%&z7xM>#u`}LUIn!xz7k#XlVGZn`!b9JgJUGgb6~%YAc`8f;B|d z%JgF^Q$Haf7cA8r5hldnA(h1di0pL$B%Q);0D9zD8GeMm^z12oOunI5q|`So=~sUit7!qch^~qn+cg=nUUEYuE+(+HiQ0B9bkY;}}B%gJjr* zCfo3!`~0L}h@-Xj0LY6@1k4h52|GQ8CQw|V*Z`?VO8ebkaK}SZKS7O*u&X|Sjb9y? zqDKfFzwzBnb$G``QKm#FIsziW*#={xxU}|r|4`o%5+Umj2igt&EQV6-#9>u~1o`K1 zK3mPYcsYPL!d?CMmdq1K;M&p!beWNOBp%D6p|a)B3sm5S`@Z50|_a(If_Nw4O1`^ ze1AZn5Dq*r13{qojC6>Ee&-~HUfCczxn@dEMWivF7R}Tw#yJ-%y-IWQ_MVGw&v;{_ z+?ImbsLxz>8d^NVXisGAE&sk*#{Fa0tz|~q&T8yjU7o@yol$bAh&RFDb4$7ndYF2F zNo8(y{(wFjSrqF~I-{oOMbKHZe&XD@I|%JD$&ZfWeZwVhh7^5Xw^#<3Z0yH~ZU5hK z2|q#MU5`)rzvJYZ4Rsbc;J_U}FRvC*j=JNf7gAw(5Vop`O25fV#g)kTK*nthB}vlD zt-2{^Rn@Wn% zzssji)G!28@x6RjB3ksy8bkvi20F`iN=1{JUY_SL$bC#7)BS9hpoY68qh(=l6{E%e zgx+z2jIP8?W#5;aFm&WMY6j}L(WGZ~bDW*QRZ!oodW&7jO`{QhR6_}|vSz_AZdM<9nnAk+<6)GZq7C|*B zg{lm{zrdiOFhj)O$n{p_!*llyf5{W%Xdf?s(s0P{xTIBJaxR}-o|#F$p7?rYd|KL8%!=q@9i&YJ(hzxn zKi-ixn&0QSBRIF#g!m=(tfU2-NN3=nk%1N6C;h1ZXStVYobc+Kayc4gIUB|!hGaJz zXxEE*mUVKbsN4^e_MSQB?AGTO-Y+o(S^if|Yh&x_GVu>0t=B;96aB0ml)!3m`S*|i z#pnKDbnTsOVluTx6dnts=RtF^=Z(wUHb2&uKoL%X*IH|-?h~~f4mrTUUc_53`i93 z$n)KEKD@X8B{-bXgpdHImTtdhh2S zNJ=rw5FsSSAvB~s(T(0m2^1Z+fgndA-H#e7h|rzGyC#-TItkTOkV4IvLvu>SFA20s z6dywjp5)T5WWRJ3GEtAuB8Tuoin=55k7?gCwa)gxY(1pA)}L>eRa>GccdV3*3E*u}(gWeyCTpJ@$a-NEToFn)>+@{skC)E(yrb^B~@+|)#8)V-bx3EQ{gQ4cXtzfUU zIWk-H;O?2B*2j*U2;ntZ$H>NTvh=b?>2=biG5t&z*UPj_%4j_}!?_AsTJxztXkEA_ zHBewpr_TgXwrh#3S{1^9<%!+WO7Zm!Z&!qnaxlqxAUk(S!>HwehT3l!gF51ga&Y=a zmqYxJ;Ksppw!C|}@tUSVbt`bcbYTpgCLV=9(oGvNs^?ffYr)DG`%D!Z5`@jkmIA~) z2861X8C!Zzot~a8gpjr3=vI|&;L@Lj^oOS&Dsymnj`r5ro8Jl8gyI|)IT8Umm=kd>{B&=tQ?)x6q{-Nyu9Uty~&UvGL;SUp9E()wLbTFTg}rffA=27OR6h1rC1dUoA*At2Dj-k~v(Y)p@gpF(XpcxGJrK!EtOk^lOx!p@rjGU-^YY7WSE?Sh<^qr_$|#>v{C zHQGdx(15a-i-~|<5R6BNMQYW(s#h^bAWYKuoJD4ZD`g)Dm zX>Giyy{pWL)6w#gK@zzd=41#qUN4Gj3f00Sv&I!Jpd*Ty{HAbcL6weKMgCz(O#IO7 zB5-nzRrYVn7BTfJ&c^HuxBt1lA z-PClg3)%G>RGG-5t%;Gh+Ud^zC^@YynCtmOx z;A}=2XCE;av6{iSps5c$wM~7j!dg$cAhG_uc3-XrE15IFoG#di4IFtO58agXQ;&ey zfaT&o6~Ow|+H#AeYfABs^hUcw z3I>uRKx71jiMR3D+bk<`I^|lb?p3~Uw`L|G2ZSRgPWspAv6?rmDvVnBQigd}pIsU` z;>85o*xchK`AJPeLG!P9%jNvjVu?t&68ubJ%P;!)!3qM*Kk}zFt{9}sLk++XuY~pv znGe1k2eF?3VTjCM@)J)39S|9S-;XaFabnWa7+x79(irU7%9-d9N>~&~dt;G?XNt2J za1JQ!Sx2gO3lhWw;$SI3Xi9Drj zvzdDKzh_U)b=?x9!rD#ojALsBJ?wWW3mS`YwCzMgEaPUuRk^`-H<#69$6eGn9hSu+ zphQyr?PM_=|82M@(4#8-`Ua>;LVwGCvnG`**_ogwh+31^sX`5DTZ?VO1+;UqM~S^Nuy4QKCLM+7lnU^C@lnf$M$zw(Mp@?6iqUmHGsyK8~B50+fnm%mR<# zs=&-mag>2I0Nx8*>Zf+k2@#Ck8mxlYareX4O&M-hF)5bapnSR7(yLTAtSMz+Y+VsH zwv2=LA__cI@%zp#!WjNN3~PWU+pez{I&e5I0*jLj0YnWE97|FST?94Mjevw@Lq8a` z87IP+hG3K^joy6X%!O}y!gu|^5m0zwMkt062569@ ztWPHDW7Gc|MG62yvKLaq%@sUYHcPr_S*r1P$k+~zG_@H{>b}XSXy!p$%)db4kSiEd zpKc|o4Y3q&DDUTkh|BeQe`B3|!GEDc5ep7a*iE=m_(7Oc#7%^01J&Q3lKd-6;H?!Y#{?#J&b>LP+*2H-NG9*4jO#RTBl zP&VyUQGj-Py2#2QU>+>B=x!hB>+_X*gATg}!$_$VzC8W2q5lW{xuA;x`@oAp`=AT4 z=r4qB_Izk4apZ(@R9tHC*s^??6v@Z~p%rv0hl+4XaM+ZDHqwe?y{A5Y&$ZkNG*{hp zXZnTF2!|A$%HkSD!h0Bt!_cx!Ii2F0pEtMm_Nc(?ECuw#c00ZMY^7Vss1*Nt_P!qk z1a7@DUFL3t(`RkT681|BIrxuSz%D-cOKBLGj13-6hUZm^?>r^o#0S5x9$fAAOtMu) z#VSaNevPbMl+zY$@J7KHza9_rV$jf-9_@U5e5zYoA|{t8D)KFJBt};-8x=EtM+jF3 zbL0;GS(iVIjFveps%16hVE`(dKvzmON`8zz;ttILz_QlM{*xE@U+f1#G|5%~0N>ZX z?WLw+*#BfGe+Oa?ocm#VY(NQx*`gSr*c)}=cOnN0K(g? z{@=tiaCNkb)etTJ9CrkGig(tFAz?4tN$2xYLFeZS{sI`WUBu&eGSZ=+5WE3QHhL!P zk_dp2#l*V*G3XAiJV6wLo;19UV!UsA2hI8i(a#Jw5E$M_Ja^S0c%n)=#kjm=;0SQS zlu^U4yUni9=dRsQ#02^#9)N);9V{9Irn}otca&6p5R|9H->tDRImLFuprnfz39+k& zeiewk2l-QlR2W>tMJ!A9M#^PjjL@7)QBPIlpBRxVc<5yRavx5DegK*s)ZU~H5J_ zk&_3il&SoP_iqAIEFNqD55H9=N^> zX97iw$Iy}mp1dzQVP~{y;RZs_d6)>;{?vQVZ{+lvGyBy zK-^F!SK5;i|2YOiu{f!*>;dF*aHqE{ve816e^KU&u_Y2)Av*YjWuz!ky$IVd_UKr2*$rMrT**nus&>dU0-fZj;d?fv_|yYPc| zL_wf1K$-aGL6RNtN22-RNw8i)>)jwOOCW5&a5jKrd;HQM3`A4R{qZOfHnz}W{hqfx zi~vj@dTK1_p+aG+2U?^OIw=6HRzarn*(=9ogtGV*bn9!>CSuARvD(=A%@;eb<%7A*YYc+2#7Ze?KRL5$>g6`4$#BG?z)oLtZrjR9)bGk z>q~&dAE&O){lV;v)JUV}Fe&yQcP)yLA&&qT8kihn4`2va*Z6B7OuFI;E;2}EPP@Kf~#0D#U?qCzS_qrUSH=PN#54> z8GljbjgsGo+swHG)IsyV>^XQwI>e@umdj8CW-l#@*fBB@hTM!9BRUJHa7%fCSyR+r}k8aCZyt5bWmMx~J~1 z^L^iYeoS@sRLykv>b0JJmdr$}tIA=Z5~IF*_YOlrURv|rJLIHy@8Hgm5&zyXlyRT_ z+rYSL%1OSf{z-cDw}av=|Izi`I|AT;T`*Spzy3ZV{!T$!Ldy&0(m#4O$k$XKk@Z# z!}Y9li?)?$IA+UREUbRxI`7GCqE$Q~|{gX;0ztV&%3Ox)>0eor@P#soL z{6FhZ#s!Uhx{72Wzd3=47FlM%6etkJ`h&_1_fKCWjza1Szl@ti8Z}&^4UuCCNtPet zFd7X#NsFRRp&pR(|=FB2O?X*<03!fppp@;UE*%7q7Kv;o(^#a`)$ZyV;p~W zbtTz9_3(xI9Xje&&08KzuDJd9XRH4^Qm}be(9n(z?K_uN1B_!tEb>)$HPyn$DXpnS zZYPs?FxZB6H;R%RWrL1;gB>GUMp804i66|}sLNdFZ_1lPvj0t5B_m$*ci?|2@&8_3 z5Re}c<-xDZc?+p8qtmDc!UASRQIYCPDJTcK`OSQvLa*W)=EY0q2D&wX$Wcz|-kTeR zQG!6bQb1M@K>BctTwNKvxnQ+T@j|3U^oRVfX?z_$7R{(eLV zQX}c0pS9S>^v9_>WF={3P#}mF_@#6<)DW{rYls#9eYFWL6IOv!r{{l=f zjw`5RqVV>=u?MAsWL;@3khE!(jO3d}`+qfzKtSTKv7cWDN18Vv)A@Iq2b2JRo)%2W z@ssKi)zVe~_Wj4Cew^@r(ul>-ia49$Yk7HLkddr3v*yQ-HkcExOQ1dgAYR^VzwrCW z?&mBTHXY}0xv?WtDe#us(!kvUoPUZ0n~O9i$O6*zlJJ8a^b#k%7Ts&)tfa{*qJS^* zMY_@{YQjliFqlv>C5bQPgESasOCAk2MHU2%ksJ4DUjuIgawg_CZNR(ke|2g)L06g| z^!|q|a}f?;I!cHh%#m*Kb;SX=6eYKx6>{HxbhB86=(G1vjjsoy*n{nQu^sU5XU`Gl>5GfT0dM#0&$7f$t{;;Y0K+j6U#0$w_N%*Du9o^3>&- z0c%EVZ`qaO7tU_8l`$j3;x2!2Ak%|5#ADW_Nh6&l`l+}6VDA`=%RL9dhf&v=kTx0% zo25_jaBy%~MnX-)egKlAyvR|a<-D$fo&dk)%0DD~GjTPjPk{2|Kjq0>>4lKXp_@kI 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%0A|HqBena%=@( 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

    (n9N;t7S>XrePB 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äO|f?UKO^|@#{#{w*4T9-C8>_@CgFt>HTlz|2u@pNE_6Q6~e-3 zb_Dgfs?qAp@iDd-)_G6uO`ETpMQHc^qoW)B>?Kv;S)z^GG&SHmpZ*3GU1aa}Y_&wi zEfk^(?JVzBQ{N5gDz|T28KH1|#4L`-zlBwKoExe_eo$DK+`X4fA!Y{qg+j?=>MDB4XUZp;-BkzSwI4uG~1 zyD>@+5T1D+1f?;zZru5+!H;rLZ{s+`ER=l)95mh=J+NP;w$%!hb;`_SZ$4X->DVD( zGD{C%TXH84NnL`Fpv4#yp6CJ&}IaXOy&F%B%e4RG4(PvYH()~4c%FBif6_({?P z^Pu6z0kQF=lz8od>5L{eKsrF8^#1Yz>d<9&fs=|=s5J;Bt2!J{?w~LCtdkY{ta%KV z$dTJ68D4uZx(b8@toW`*$0_~Vk2mkrwl2^~Y(NXmZ()ZPIU)P&bnC+~b%D6@fd_|Qh ze+kfGkqz!kM~#IE@PMyLfzGtIsbfnw#7^bvMz@MH3>FIw?sR;7eED`4)Fk-$_}xLi z9UblM^i4*Nj9Zmj4N`l1_#Lk;eB#W}ot?3;@J`PCnTld+QrIvAh>3{uzI=HS8R;RS zvM?4WmUP@o4qh=$TDyw#a~gokDaSqwcI7S9*zb7e{O`d`lG=adB(*XX-4eC7Y%2(l9mR^As5}lQ7R#Tb4!n98DlCb2O<&Qw6 zmC2(PuiJi4XCobv3Vwl)hHr6d(atk4iX_%Zp!dIi6q%Fe)f5)2W#*$bVlJ4o&qQLx zOOXdGQH7>{^AC%jOPNCG8240S$J6*cby#{Hwbgo$l3HCX zt+slMc5`YUpG1=R_6dQ0T|XJfxB{G&S-NWj0eeu(1YB-KhQ8nk?M=KJt3&r_raf+V zEe~7+sw19qhzjF)P2@l;rwoRKn1e}BwO(wD(&_q>&hdIqIcyN$XlhbyEN6IiM2y<9 zbPQevUdfLiU63L-Qc|3s^mEHR(-b_>=M`dIOh<}}`Q-2?F(rxCM_pMzB$;U>?%yHo zOR$IiZ;4C4pQkO)Gl8A-&zvOPrWLOCI>McO8~xzo2}@INYEC3>F_!haKVhq#V6abRnw`Q>QBt{e8hM0%AsYf z7<2rUPzF~4jJAcCqd3m+$I7u_qNMpO)w12X)wf1C`ZchYP=nxgYMP+&nx?H%W zmW0A*JHe-MfY9=4v3$NhiWR%tftolyP=y1sS5bv zVHfcdGdTz3;hhKiWM8(*K1u4b+ zq&VNe;tN6TolKd>+UHyS1Y|V_w>#~EYU6sl8ei(wR4Y+5T(Dc_mFwy5q{Uk${a=a5 zf8l&wKjaz(IS@Xj&nLa2(i@f1$%W(THT807{=VOzs%nJl^*y^7;`jZe^;;&Gbk^3Jk59wwjYvrQ4?xIr$j6PPP5zI-FWm0!2$_7vWw6tY*>Zi)X>wjmtH>CH}^p1OW z8;Iv%fvqq6mIKiCGo>DHuyua(!MH4hqw zeC8L$cZx``&YuC%HrT5h_}?1V znZSX21D7x@U^m~U*~sI68&nzkXGI=1Nrs|=Y}7hZ-aNH3PfSg37pK2TuM{(_N>D91 zh$)%(bKx$I*+I|4T?A&!uWeIrej^J{vkR%BXg?uBDsImg`3K7Wp1l57nqfi~`P{xE zu52W~z)fnVrFm`heM75$M<3Qz{uI3HSJpCRn2N|Or~4`OiP4D_OR)IuO+I5`#q0l0 zga6A;e|*eCe#(k8jpP{>^&fBWpWp=D5kI;e0UK3Wf6BM~={pp8fhd8`oC?1y|L0Tv z1D3}o31~={I%@r|{Vi6_#zWkH`5yZ(-l@m$$u?=26u&T5to z<{xV=^;AhPxe69qKjweWk3nIaChmp@&qbo5qbXhZw1xkh0bt1ZtZZyShPN+X$m1&e z#|kAelOy3^VL9XC#>2-zmqj%ykBJGG9O037GgQgOW?N3b5cns8X+$d~5TvI^v9z>g zWoMtg3o`oqg;JykPOZ6@x;xbBpMUh3sa3705$5E?`TF%MD=Vv$Kh=!SeTz8(G| z^|_$n9MFG*1kCvZ!CuJG9t8*#9X@sobyAkiz0(jkK@k%Z!{Fqxe8j+b+2dEwcYUC) zwRLe)#o=(+`GHC5%3FQoBpjq!wWseubJ-ds2rZ;Gcle=+d?IR>83x{3H*ruZ~3E;ydO{$m#VPinjkt8T$|3OJShYaKN( zG&J;4UwnYC1x*#oni%3y4gM()@CTWU8x}aXp=e{nO3%Q6PfYC23xxEP6}-Yga&>XZ zS~h<9@(F!`nFcy(aA2vtf1xevAHV+xJ44p|xl^MrW)R+D1;P5}=I5#^qT}P^Skti` zcghSqq!HXivl>KnY-}hG=hLqnK{BBaJLg_nn|}c6j~_9~ebOiDnZ}V=f`qM+kQ;80 zitYUPm;NUut<3sY=tw1v!=FFD2&w$>T||HY}2nwS!c~<{| z;WNI`X8bWoCvTGLyQWhRvzVTlvvYX?J_WfJ(-mo!vKG@HbjzQ%^#>z^M=Z;!0oVi) z=ZHy5+wZ%MiO8~LQ`ms`IQ|QYqCe^PKc3gg1`}ilH$+-r4@|OV4B2OWi(&DEv!ee=M0KLb8*USn8-CO1=s9CpqG%R5pRW zlV0f9LW#!ZuU~L@36f11L}94c*`N6k^8Wy!%HIHlwsIxtbZ+NLMP1LX`nY2))=yI% zrMh!uqv=&2q8NXtRM_LF3XE4qM=GfI?3iGLBJY_J%l!paQ%U}fQ*zv6g>>`E(&Snt zYi=rG#2u{|!3t!9NG9*d zp6fxbVNqwC|8t#xV&nh1%8~6y|5dW5aeUQ@WVaF+0AZ4)Lv_DblLWJ2k~*1rN|&AP zRbR&3^WBFhw!iQo&j>XJmUJafA1>pb(lc|DH{()J1ie8j5a8pIR1;g|b zgmnMnl!7#WJLO4B)v|FU+GbQy%}tRe4$CUs`A)QQcvp@N1AV^1pZe*k3qA>XC~*H5 zJ~e6RC*j9hl5Y~5W!aGc{-qa{4p@6P0{HfGXR@|)H70w*uO=HtI!w%|^ijHP;&t*T zDgT1YMy8(-;fgE!jGK9rASx%lW^lTbXEXbLNN$s+t)HaO@suH*epBr_8Lk$nbImIgKbuIZ8#&%}wyB=f=tw4~zLs@o#0@MS^?{4Ykxfr5rDG@vqP18smOrZomSJ zqOa-=)J8@h;7b!WG?{2F{AM#0Z~s)N_76z@=9s=^LH5wyvZNM%aJisOo_FtiDL~zT z;()8Q`Jpjp6vw!lL^b?CQD`TT1Ia7FqYUlNB^tr?@Y7f5s#|AAPR&8O#&HO?86$LM zdJ+z5F~My@>r#$TeOXA8{d^Nw;njQcrv=#0iHW1Kg1ICs}wEXk*UKQr)&zXC`m^KUyaV*V!S^D3;kyqgsXrIFqiu3l$=6q ztAyU}X&=JjNU2}HXV&F$?!S%OwXc=F%eZV7{kez8%Utg>>sP5LLVbR2{I(wX?=RZi zQ4sc4nwZ~n7P!tftCso_V(h1Yt=I_-8Lbvp55P}9JhD@hv0&@Q@2 z^E(Aa#e#9IsQGpjudBV&>*q8yk?UWS8TqcPd%tZFubWID>W3J(AL~~2Yvm6a6iwFI zw(`*6sBRf|$xEMBJ{1ySS}ya>zxM|HcV8VxRz^wd__gEoU%W+5a;_boPBygngSb4QA^A&RjW&mnX>B*J+*o*hm`b9`4 zQU`!7s$Rq?gyH2!8DOoCJpx)a5Di)K4;9Jv4Ge1Cw@J;2OTps8Cm`w0WNBjM;E;Ea zqj~JKmknDw2)#R&OclBd&P0|IN$kjEs9~fDRX}6yWow_!j)r<4qgdF_eW)x$U~6jX zzk9h_VjzreD&5HNEcVHZE2E{sz6NiuASvu8{)^i_mDVhN?Eg+Y;kpOOQXl5GP~X1u zS9F<2(~U3|MZUUuoySXMGpM(YJcVk1i`4sm&xkuNdEC~pLcKKnWWWer?8FmkP9V@- zAh7xn=`bMpYV!S2tQXbHLN}5rj_|wqV5+{kdCb1jzhU4dHZEu?7tPLI=dKQKC7Ho| z!o~OIMx|%2g?d5!T+!_v&eNG+JR&lrmUd{{=Rjk2kg4Y|Aq`DXM1(R62-Jc~cM)Sr9$^)arDkVn9sL|R?g!Z44elG)9tF>&TPq|YI8`HAc zkR^;%{yQaYGmVnG8-)Ar)uo<#Cpik&5C3RyMjm~Lf>o*fSvV;w2l+O+8~=zS6>4B} zPy{Q`P2hQ_(M}eHV=Ss?9&U74Zanp;kCC#K+_HyjWM@|bs6hfjfZUMX^KxY>k7q7% z_0fhQ%o8|af`}4u71O)z!W>U~WK_G!*;4Nc*R|F3v2urAvnt2zxVp3_7F$*ft*p6Q zZ*#}Yt%_y)YBje!?$l zK{IEZLGrHy!vzA^#2)+&>#x6lM>IoyXHJn%roWa&i%54Jt-L9!N`d+K)L1OJ?;fPK zX2TS+0Zz%MZdShl|5joLp|dQnji_8R8NGZN<}CWvcxiTUC%TDS7-51lxQ}bOGF2>Agc9ZhXc*Ecuca1W%2d}RI~WC`1h|x z6;{n+Jt#w^HOoAJNoF>B^lfLH1ZlFg3o71ow9YMu7enbhpJN^ebRT%AVASX78CpK- zEDkUgY|4Yb7G_L094$m3V}UATXHZL!lSse_jh}B{eX&luDN%CC2|5BNr5eA)MhPpQ zS*nTM{WuH^J$~gZq(`qu9(`?zWBUA24r9Egou>2U4ZyAQqGo4Boa+;|XJ)jQY}i47 zBm*3CxRNz#T#K2go|l%-M_ME{1g1T7T5FOwPOZq|A`x7zrz}+{dJ0Y#vSF<)5q6L@=Fk*?bSh*UJCN=0BO0OU7bmHHg+UPT|m4TR*R?_ z!&jMw!}vLnKhuU4>(uO~%!2RV(+vF&0{UBbcA@3S z*^_|=>4jg2n64p0)@-?&omQ_jB-;QHF!K_QQ4Cd;KzLm|T!ympCLo;W_&JeM7>+9zO-?86&(Rq}=Y}Hp;j$ueZYze*R?0wm-g} zE1gPU>=n+_l%u;=VPuwS)SGU8ydkh*4$EnI`mU8EK>sQ^a}ZudZ{m&%jpR^S9n`e0 z;T~2}{}+kU4m^=deu;%9wN_NHeWt;k!vK zif6B=oq;daQ~DhkYY7@a;Tu0|NrI$H;e$E9KeHILzb+<*0gTYZpIK&u@?H$Et@svHo@#SO=$Oh*%3HQO%|I#b3U^@Mrgd`DhpfP=d355mAAs*pKX4mvBd z2hpUYaLW$bkZMGwG}iuS%QeiKE3_(b1jm;PL&HvA&bQ=N5URkcLc2N&md6%#O=V59 zFl*tGlda@Jot)MaNnt78TvfcL(tbqpR{2zN>f?y}KnruzrYe*N?%TyUPCVzdm=!h1V~X z-X^wNg8)&MiN0ke35ph#8R0~-!AQ76Iw?g(FAF(k7`Ccr-ZMbsHWQh$%z~%Xa?8ma zKAG>kwmPoWAS#@h?s?UuwF^yw?c)&9WG~~1^JD+{$E&~jS3%w+Q184W#Iv-s4V?Al zip6nukDp&PjWPAy#GbO?ymI%puZ*AhL2)w4-S$hH3Y({e{6!^j<@N^{wkUfSc`g1! z(Z9IJve~Xtu46Puit*;866&CU?(&%)zb&~Dq_L}d7>vxfw6dix-SMf$$Soq)qBgI% zqi-q9Q^qKU7>n9jEu3+^%qXrTM!%tW6caUyExVCE{an4RCcjDW_Rb=IIOO^ewZ9PA zdI_U&W2p@HUiaN-)VnxKAkfngTyc#G6(%HgY68<94z(Th)UIRikv+^c+-+0<3N zNn|UkV&bB`CU|$x6BlYud^9K(@!Ny`WQ_c!$4RNZm};40(2o1sd22dsbG~wf*g$K&@eYIwDt;CwoebZyS7lGi5$BFlUUpsZmWe zBs{5!t3TZKMh#Nm-cTyS+nVgG-v4B?60+xh4&exJfS@H_hg%`z4WSvWa%qf8c0l!A zvj&%^G$gxU+%?kjHa?)hhF!1I4Y5B^e+Y7)c`?ynE>W;hw)d7J)^)|($hg$}8%fU^ zJ9|p??pEo!>=pz@`~#LP)pzLwApyR;%~5cX-kq3_!xljejdxmnQ?qW4_iUSB7?I}4 zDx=><5`cy{o?t_>8QQA18x{Rj1~^!D#Gj5aZdR7wo9!=KKlt#eO#MGeJO-0rfaWjaL1*w-otc%cX;{Z2D6Zyq(Tw+q~;JsPJET3VKEM>jR{+y;KO^ zU3yFQpFS^9CB4WB>*jE9 zt1iKmarlW&aoH?3wkW@1(8?4_w6Xm3))dVBH>cMOS5{?X(O_vUhEkwX;4fs-We5x< zaPsGnn9dVjxtA8A4QJFbGsXcyvHFvI)1VHw1H>I{R^i;LsZ0<`&(BLl&eLo;ajyV&ahNt62@F=arb0`P1V6PE}KUP0pGaJhe2|3Q1xTMian>i z*BkbRi~UIMlIhN?S876bEm?DsFgZ4VG$)ogO4B7z;cwv<>9 zzayJ4DTEwq87TCF>E_}v8kbFDC_V(n=6)$meWe5Rw`S<8#PuL3(Zsb5dcCn6PK+KT z$?j($<{12RKp)ba(poZ=!!={=5zD?QbQAi*NW@FkJJNie$$3Bm8!>apVGXf9_!;n% z3S|Qzwp-jJ`_<*0VZ){bhYnVJHg!|ZLKV$bKBbc|as=1K0A5oVGpgtL>Z$>A1Jc!{I&5OVQPq=HC~0o^P*Z7W zPA0bBwE+#WKkGOpYn>^o`|l$QdG~0=+}%mJ9pa73ZWPYQ+<-YsI;Nnx`@3E1O6-vC zuX$<5&x@K&pK$=yAb5^YZIW*@5F;xV4=()GDS;bAHFWwdTGK00Zyd!;u{A zByCFP`j2TueGW?LhOaSV>Q`Umm^7DaJy@cdRdfS_*3G2~Q^~I=1Fo!D%}2WT&1=78 z{TM)}c`OLZDFzpn!0Tm=Zchh(YIbtpBp^$0OC7m5&<2a%N^JuA9p`EyiLC$zPwbXS zLU@>T<>9XmwKFl$rGxO59*W5)vH;pMBbr}`rLKsgh_!{fTQ7-PrM6+i#_?h+2RWvh(gqHEu8kL#p{svX9=MUq_c1xr@U8GB zrnOA4`*mE$t=qJP)w~*qtQ`Kr^z3rogUbUH<<|$VwnVPhdo71C_hPaQ9BY1M26TE1CpoAmrCRq;=69N`;U*WwjjF4 z{L^q?5SQjig)Yj|Q`d5jLB+-N#E#`i?BjBc9v-$A9{$4WnA~x4z?iE}))+EgB#BBF zsLAiw>l-BW;@lL2nzOvT+if+fnIlcw95@mOL@&F#v<<$nr!pMP_L*-fVcQT za%U>Kx-Utx8f@L+D|rVq_d2QO(IBAd)1s@*dAND_?SXLq?KXdO9p7_ngWFV)qygKX zIoq&6to^<{ZpX8`AFj8bD=C^7GB1Ov)-DBBHVU2^&x!m84KjfmEf->Q*k_xj{4~w1IXoM z6+kJ^E3;(G%u%_3V<~bXnv00(sL z&(LUuesZ+6{-8f)|Gg>3=-;P|_A&z}P>G>mfgU!Z1P$kMTf#p~<~~HNj{}ag2`f#R z;`(($o(Z(TDi77=94vgY0`@^TVgu}~93;*ZG5Zl#&4nT~KlaD6DBDW-ls7tmDi?AK zGYX^m!DAFhFSw>Nw0guPfVA3bG3?%-2|lJ|L^!2Pczd|ss8-(88|ok3g$yT1TzO^9 zHzv2{uz?h`HV_xb)f15V$AJ`|b;x7PMt-;hfKIw+HZn=o4*kYYngZ|-Q>>AS;2@7= zcVvzs%qlxc_+a{g?9#OplW&^|(E8zZg%0vzocU4osi%14sWA%FlZVqXebX1m*O^a$ z#xSK1C$QIshldRwi~t2RdE_{k~{HRBKx>yIbZcU319xZ=K0F zw-D5jrNQ@)TzsZ)X~3co+B=jtW=D=(^6Y+bn`?S%Lr?r$BK-jB%H=F5eZLzHLW%e;JPvydk*v;BeFF!RB?Jfj9qVhubh+{ znB&o;Bfg9Z89$%tp4;<#iW(SC>o%z4RCrmmo0w5X^S9bMjCT?NpuBv3MkKx$dVUvV7nlY)G^G=+(q7lr0by@#%!;`}xJo&qDX0S{Ln$Yx z`cRY^p}q!|D%s%{X3sjj8A2JDJLzKJd(&*En`+NB&%zpci*gL?#d@^(`D1G$CsFXYVGWMA`Ykh87PzZHb~zm^+NvXo zof)tD;6r@*u!UyeZ%W?~5P)~Xp8!f5Omclk73juGIaNC}eTheNs;z(nYl4bNojDf0pK1D-(>2VjLqCa(Mk-QH~Smij{?#$Fk< z`UUICGkU_5Q!8Bbe7oEkGPeb<#nvWN$3)%U6mXMK)A&+Aw%~3t7fh=uZpd_`A4Ll- zYcfc#OvT5^K!V#k6@^sh)`q)mP;#?0f35S`J*A6i3{COnbgSEjP|#`f5Q61Y9K6f5 zS-p+$fT0;U5-hb=rA>+HWAs~=ypkDM7lKe2qtm9PHdkdvNvQq=)%f=aU`y5+g4c+Y(kGu7)a>2DxtklFzZ zS4qb*WH03RpDZH`IOPTW2Os~27}~&x{e>8MVy%zDQAsw&Vb1obVpPs=j!lsy-V>GIky^;Y{o z?7dY~T-&xbihFR^Ai>>Tf(B25I~49vxD(uiLvRR?K;iCA;Sz#7g#|4fg8i)fpVRi* z=dN}3dbw}6wfQh>&Z;?T^wDkh{*B(7nw1q~@O@pD4euZx=_XHyRT~`yBq#t`GVPCv zBd&FcJP&XyzCFbCtYflBWNx=#+~s_5S+Z;SYaOrH9D%ocCDuBgy02)tt$xD^KHe?c}L9}S)BD1X?vPx-@uCtI?lD$hWdkl(-E z=?NwD&-p`){7!f=Hy#wsDYZ)H9=SY}hE0AVb8t?c>UL6hkId^zc_Xvj=}b(lE_`sz z>~c-1(|*?oQCa$wH8%0izIsceQtwU6@we-u#ZQ|us>>Z!*>|kOO()VwFdP=;z3X*{ z<8!K7D^aX0d;36ou!zr3V^zDh`62<%TyHk-SCzl4dOb&AnzMJmrjZFu)ncXe%?(iQ zmsKXutgt5Rbj4qIbWvJBDlH)BEWSkXvb>)cIia^=EIdT6zRMWP9V*$Y-(xRpxX(YH zbZLqX(kcnnxE9mR?~NATiGVUJyjAbuI)iPFEK&)+RJt`fnyXmXA-5Qt0uQ18T?>HN z+JFbK^CZ363j~AN%+=(tXqnZmIIkK}$9)9|ebs_goH(u8aVfr2l!+Aylb~J<&t_s= zb>Qi*p^Mx#!=7vHVZRiu8MAk0_8!j3g^RyZKTaq9)k23a(bw9YwQGmvYLh1#TkC@==NTFQUn$_l5^elb{k{Wr0amZM~o082*D9GPJ_z0!x@?3ozxhDawwg96CX)dbYtyEdh~ve zqorIQL>P-dA)I#cpcfQ@H&Yp?`i9aR88+~^4;0+2vm$3W9!1({8dy>qELnS+I7C0G zd7Z=r?7w5}eDdPOLa2_X3~gN0cNz4>h7&7AT&=jp9Bt*=@&)j71Qu zupLK(q0rHm$~MitSe8|>w9AQNG0%l=psPLS$$_x8<=v&v9b%o>&d;SF5OvWtdhxUj zADpc3Vtm%#9v}j5Y_LlkKnQLJ(?R9c_?<8|?<)+#>o!?-C0N5MHU*zGCZ0c12F5sN zirkqJhPdm7vC>NLxRFs+Mb5BNS`Sw~^W2t1T6lrX815y|9~vCS*1EMk(3{2Dk%}44 zNQnmQH6uZ^vZRyumA& z20=|N;y>~XPiWD7166Ne?NV@__<%`MYB5^E*JA$!yW zq!Iiu<)2$$dWYfcvWT-+{UdRR9DVwoR^r^Dj+PcTOtUGOA4ZvOj_?Ov<7J3<<7cHk z!{72Xa5Gvj^}kl{wBj4q>ohkl1G>MoaGzxF8tNv3^HVel^~Cv4j7*L?q6ae5Q!SQ? zW6xc;f@pQ#kK{lsVq)(&gupOJ>qBT-0lO*5-u?AfEHQ^9e!j%FVHfzZRu;4@{1vdV z?k{KNRsYkck+5apt z6MLv)S?rLiCu?a&@R{cq7l3Q8Eo%8Utp2OYEx+LY$sC8B`~FuEil7-A*Atg7K?Q!&jj-rRof5c>A(k@5`aQv@SBbI%wDz1etS zi{QoiA=gp=jGz+KsmlL3n|m3254EUwU|OrDWLbNNXP9Dv4)M|AOakR$Cmqt>n(1%; zj5+NYrOHm2^*CQhH;*R|z3H_(?LiG>eCt)Nfp4*AN;DZr_z;DqBsVHmTK8-A`E#E) ze2YG3!(uU!sdA|`w75>F5{i)Rb7Hb`JK+0>Ts(wswxKWj-MO`UExnHfP$eyjstI3Q{N~!IWSPF`1D-v# zBQ}=?!Ab?x9SOVUCpnNsQ1z!2V+3(U60T-Ted}z09}dfXDD8davoZIkowD|2JMi8k z)Sik`XRFt)U3Fz8q+;X8;)ltJ21NVSCS1X^gshe^?A_^47t60+hZC&E&c{5pN71MC zv^sQmNbs0|EkHYK=-B~MWNBgdCWB}j89Nx9m5_0vv3s?LBegN`;F=g~Nbo>fx5Rz5 z--;Ma!>l3O|);(%}*E%)`DMCBs{yi)Ww!l8DGT5`Nm^fW=--d+GTSUpx{E zaj5c+6B4??Dbow=pkvhTQUht{OAV_Bu`sL;;TDT(oug=l#n)AY`j|YY-NTdA^M(y; z=0GaZ>507b21bLPjlEy2ldG%{o8hO^c=wM>U+&GssETwu$%LW5Cjr|oX?Gu0+e-1^ z10Vd8Ms`|A|Hi#~Nuf+Xxq@o>1@M4I-UxMl1`4OX2ml4jv1~C!V5#bWT3te~?7TrR zCHdYY9&Stz!!xF|ZXn+7u$0^|{g_b)PR?&kaQ7TFqv^m06tLf7XL72U>~{r+8Im&) zV&%(GU*MR%}!VK~1n3 z^_RL`(9+h#-qjiSQ`!j}Ql8FD__iD2mNsaSd0}A+Q3%8f@seFjvp?1;K9A=!lND(> zGtj1C5vXv9T#d_1ADstXs4DOHYV~WX3T0u0SHN%S1cDLUa)%X1fx5p2qk9Uko+gn{eVZ%S7`VExQ4EF+#5unKc6J=vdnqs$Dt7xV4H`$M z4RQ%mTR?Oc(kNfKVbYhPQeGmMl?Wew?Rtjv=#CdSM_$1?~1e z_p>*9HLWh?zR#M&V_BXihxnCYZ2CRFKNhdcy`buRT$?VE{Qb)q(D#>HEOrI*Odkt% ziI>_~N+yjW7n%_so)RFOCi~bE-RK`Z`1#F2@@*atE;|H7kV=u0%>iqiRyW1IPXjDm zc55H9U6+^ycfI0in;pgU9|m~5){%}yzCy4d6X4oAB`&)sIC2r&*NygTQB@3`aYi8# zv^BDI`Fs3(GPYrB2^#9zF$9RQ_HHK$@uKM(;#JFc-`s7H-PB^hW-*mV0A>KsuN1=J zh13S}^)4t!JMWpk{RGoiSQ_N?tS~9PuTH_uYc>eCsYuN}1L*kte3XN1qA~D$VA7Gl z11CxS?K_k=mum>HI0Q8;W>sqb*Oil%SZ#%Bc?6)-#VH0ed2A_3ghXZvn*zMosGp5I zZUQ^o7O{PBu%EN1tJ`iSazrlLJgrUwtU8^T)xZw9P+mv$kk!kbBUAL+#bjU6{e}GB zjR7;5CPsm7qIz^CwOmIl$Au0Pz5TXFbR9tGZwaTJRwr+J23psPsz~(B0ZaBi#p_t= z8SSEOB;_r^Z&3ot-tkxfpdtR2xFZSnbM&IbGS6EdQfN1!&$WfHVI!Wn$1xhw+E?fK zG{7Dkesx*hX0ZpVpsKsWCKx`;z$w*U~!g-n*DRzj|8-Cm9|Q+YTMhI z%HBT4RSTO3>u4ordoDV$HHZ%@Qay3A-Rw+sC_q+Q% zZ|`k<9vh>EQNIJ0fJfP0tTztpJz@MAB%_qO=Cd<*b*qkUqoWC%YX#Ut6VQPR84mS6 zy2~dGlN&WZe9Zkk!c`YU8P3uY=k4oiaNOJDh+b8cgc2F_S4Vfj8x#II=Owniv>gDC zSpGr%N!%!McAOkva`UA+ld7@!tMx!m1Y;G7m;^buLE7|2d6Z**%eD%)lYA4ryp+(H zsurXUoB5h|JC5OY*^gTZ86PsD@z^`zNHAviWpd1b_K)HM^EylKCC@@bO_=6kANEJ5 z_j`9z6dCD!+Vwfbc*qOtT^y7u`y^c2Q;^;^qQB=2dQ7a#@*;jaeUzeRLp&OhHEM`R zsBK^JBjI)ULJRmIE0o%Z9k&{;_kr)E_=peZ!# zT9-21l{AL}p3ayV&!M@bEH3cVpjdR^FavlT4J!BI*u2bLUT(L6Imgeee|T^G1lZ5 z#V*df`j_Ij@w4V_s{XlK0O4hM_>&B9^XVJQMss&d<{cM$l(|j5+begp43643UVh=2 zkLL#NU+UPLew4F^WgeMvxxC}tevpGeu0VM%exw1yE$Vq|)Qc)g<@S>z#H#Mt^J%SL z!q@MAp$-Yx9q9BP^8L0uFHEfKVd4#|V<#wGD9C@jRj@Qz{vjiqp0~sFXoKLD&PbsQ zcb&5cFbn5q$4+ms6|#LZu$fU=!DX>48qVq%d!4hubf&MZ+SHJ^9@`s1g=rx;Mc@2u zmu#wD78si)IG%~{qH@e+WaJCAPjfQ_HyJQU&iVU-_aE2t zYyH;QtApLm7^*$)qfI%wpG$EtLp=KHEnUMl99S628cbD3Ga)-VnE@V=MrEJ)QRy-~ zeA%t$f_KoiQC#jhO&3I(FXzBDJw)Tfn5$DoDtw`?9`FTSbRj{mt;LyiCoZkf(R&xjL%+g$bWTk z`hmf~J1U8@`VFEpMRh`(LwXFIwA`R|Diz^rfoYQ2q3w4$z7LeB56#l z;=AKc{iMy=#mDi<*5GT$W_N8aK*1ZP37$F?U^d0GPHAL&VUVU*J&C!Ku^kH9tr;9{ z-(+<`@uZADg8dF>1=HZaYm8mlv1)kkTy3B;77gW|-5b4Z02vJg5rFDw>0L1lM}?Qa z;+HobFMq71iGE4S*#!l!nq|ekI;0$_{nmgSt{2eASt2yYe$wb#;deodv5q3j6_f1L zJS{wKPuR+xVyZ|qRTO|Ty1Tc8;4iPZ@fwd5y@l=54l)&S%w5X?&CJ+$Iyjowe|0#c zpr%Ye&3`l0zI^v9GT#3l_|})v`b+UDIAnWH%w@AhoR$0%caGzMk_Bz4h%4@`)GKBk zHUa6ka!tPWvK z;_GG!>X6bmZ0PAWa+bisYWL3pUfHHxEu*15TK@3iqCEAQi24n^9=S&(7$Wb^IFg9Y z+dcRBq(Vvzr?xFIg0Ce`P6w_K^1?+f-um23qm1xTvn1yTI3Z5n5q1z;-`dTm&xgy& z*5UtduG(q`naZw)$p6^4LZ|o=&^mn0<-~L-@yJAqqFWkp+Pz*X;_%&rol>p-s_81al^6TT%C(b^N32+Ls1ms z(iH<*1el6V6->nm+g6c+$qyUw3|g;;HPs%T+lndA4IQgM)M+;-xF?}90|0Q|afnY@ zG=Bw=U+hlyt*q}-TYbc=?7VjRmY5w&WjQ9}s0!=a=qSrA!O*YWxBnh+w(JB{ujZrD zC95Te9V>o zYkxZUsH0Dwz>`ZAyEh?*bhRZ-9y};3bvm=>*uTJ}#2mAbE-<(5y>Q<@XN#i!i}%59 zj#TsoUWAjIeE`+p95o90ULLU5-HZ8?-CTzJ3sI`6^eAQXeVF{TNY75BdH87j*_~pw z%{UVN0Nv{-Kt>dx@zkVbqfeff>%@!X*nqH*XI6Cx%V2)tOi^GEAhf2u)oi+a7iht) z_7>gLVFzinF(+PiX0$_a!IWy6?PoF$AYCPhhUj(_sC6}0PXd$GD%L51a~WAZN`m(0x} zB%i=%6%GD;uTm)}5q}%YB`60p{@n4~$YR;wB;;E0HbCTl*RY;3Wi{u`-@7^n7^}dPWVXAC{{<4yI9UBvK-S$9FSMqbU z!rJVSOxoo1#&bF}1G>#yFS3IW+Idb}NqjD}wC+htx->>~!m87P@AR-I#=1o$R`8Yp z7@;X$m!_dO#|9o@lig3l{e_ZTaN-Jj3ZNt0tp(<{)k9926FtfqTP`;&nd z(^JDz^7n6|ZV&K03~=0=0PQze=KT{@(leOW_;)yjUAGwG61x`Jvy5Mol?9(8YWNvC z?+EFY4P-q`Uu6Jrk{jTH*~V3XbWFdSUImqpPC&~Z~!I@ zOAEp^w_bbLYo#RUnG3Fiw&DozYeDEu=2hN)3U@VIAv;aJQ%GrbI++XyAHQx%t8!*) z>l5E(dK#H;iAUS?gkVjVf3&)fa6bTB#qE7)@@89NqEHh(sq>8=l@PA#xjrpZOqR{%>Qu3Eeq(rrP~Z+FxH?i7B@{~T}Q z2r}rzZ7Ax9SDBU#X64CCYx+das#}Xe>4UuVL8@oF)N8Bcn^uz%pZXy%iH%l6L3%}t z^vhAZrBm&f?en%CtUrA6ojymqGeW%!Yo1W4pxXj-wb)n z3kN(b=8lthAT{+8!gs_c1c;-I;^#nDS~-}V8dV_zd0nrDX5QD~c_AQgEMcZrya)eD zD}v#|uW;&DK9WuP`%%ucammTnV9{3vU4e3yRX@T52>nV|P&^UTHg>$n??2BSNSeu3 zuv@+{l0Un;FJ+3aJ${rh^%63&@~IM@&j$vQsyUVH3&$I!JIz4v)J?q0qi3}78v{A6 z{dMG}ZCn}s63^~EL9SF9aP7Ypk+XurI4~ieT*uq&+S*0brb8wkG@5Qdufr8Xy9*DB__Ak zn_fqmV6OczDNb#-thf(GdhsMYdmHy>csZ7QCoAY36M{s?tv4>6r<#L>$6p-QJrCh; z1Qty+iQm5}HS(qsesrcN>GZ++%}O5AmA8ogK1*v0%n@$7)qZ6VI4MoRHf7iR0{(x5 z`1DK+gksmyrjM{I1j#_Xwp$?N%3d-evG4?{JLJNVmqNvBar;p^(JjW$SkLW` zn)Zse!4bY5a$=O0G&@o%poj|To7eZJ5opBBUw9PQ&DKvtjdsL|AdV9T2feI^Gk1%F z-|5E=z2MG)~Bth_r}=t4Ci@H6Xz*RBp*5@M<6J^5UR_E>U+A9&I}85&-z zgUXU=_RnwD-V)I}L)%lDWE{>>!ckT=caCcZzH-VO>JcGL({_@DwILt6K3Ha7acJv! zA#HrM#D_4gA@&t%v4K$y^=f(sRV#a91p*;dhkQbDW5>P|R;e!KUMh?jmbLcmYQMe` zUx5g=FKPbD)qV{ZhzVP_=hevCM^yEy-@sFQ^*CC2`G9n8drtVZ+)|*Jfmbu#nER;{ao@*B?(_!ea z7>HCn4bD1g#dROo0^@I?4y26{+(N^MIMeJ_ba>g*oA8yiL#gXsUMD<~)#o`byIQYj zLUj$q2&TF0`)W}!e7z^61gXi6i(!GiF&HY>nCtRztEaHP4TjVWd563`-Lh&P^lhN+ z>EKuz1fxhJ{I5QS?@F;r*+y@`Q;JG7$I;&c$mdt=dH~1Lsr^IV6Hh<2M6q7^_H0|; z&nuUhw4{K~n=#PL3767T$u0Px_Pl}}K&uBq6oRtp!tQ3x+38SA|{CU%Abyd$l-?%)(?beqvY$QM( zT2LL?19uksS!$1N&`%v$DSCdtlGHVSYoUMBMos~ZKpj$kjKDcD2=XruDMd*_8HQj2-`zOK}R<9Aw&J?$ckdiEE^FcfK&OpmX)8@Mc# zvUSLQ7ku1B71s?^6N`b}%ZW*8bte|9#{dRo#oat#z`6=pepJBdJG0730Q}B5YOX(3 zeW)YV&B2m^sRvX{Vmi&>opwDsiTch!h$q5;#)g7;iEiucaf-bkLrw>piKx0GXUSJG zy0T6A62x}2E+3)%u}=s72D}iWuQDy~Gdf7_;>wCVg2~7j{aPJZzs-;`H}TwtqDy4X)Rhzq2Ge?)!6e;j90)2L-T#scSbsLzSjTnm@h&BzraXclJNsf9}0qhhnV5lDH|KNDWcv;(+pIz3*&^j4X2YfEXRNREI~! z%O)Y=-RR`NlO>qT-Man;jr|Dxq&Iiw>JRl-m@2HGFCO+pc|q-*rFj`N)}NP01bX~>guUg5wG8$qPQX#c@M|^I~!T;dj!8+<)l1qRZN@l0v+g+Lma(m%8fH;~~~3J846;+3z4&7EcrZn_>Y;!VSym^pSCtJ12(er3@$pg~1NgOoHF_H;IHG2sw=!&K zvN&dgyMR6I?$h8~;q%vlaS*5u6U~%r9Oo|6aA^9CRHXMI0y7czRrEs1_zFHzUj@k1 z0BPW-CPun&4AMJCEP5Wjw6n?fw{sH(Qpu-c_8Pc|y{?vMF@O~HlX4&Lan6Gh6oq44 zc2bLwD~z<3t}6PHN=VCm1+pwmifkC?*4h(c;RA9E%=rEv{=pT)PuruzF0grlPf;P@ zvql7kstxSHTtys*#68@4pa`z%dz_b&BXTb9saqSJ!dckG;iIA+2x~81B}8^FKKc~3 zHQusk1LmoBhaBY9Oh+^JccQl9($i&0Ho6E!B-KK4K z@q7RtH8tC=8Gx4bCZ2?0n9Ue4GD{AJbDIgTuhXzKOdu>(gDa^*(C~1Y7AYR`nb+i=hL6VhQ>k_QnmmVlF>e9RXE7Z4<2I{j2h~vv8aiW` z$sqx4c+Tf<0{gtde4!CJdj+IlTj)9U_>hct1cB%Spsd|mtep&tc@Nyl<#fo@F8PK$ z|8hI{5x*>VTgUAO+HUcl9^p+faD&N2;z-P)Zda@rd(-q05<|PcCiSpGl!eo2|F$iYQ#o^+ZH=j$n&@b-+j$+ry3OI z*b?-WW}XUP9s>kcMeWQ;5u|(4iNr^&3N>PG#yQ?>A_Y8KLVhyUxw#{ zP{_65=p6}UXL}bJvLiuvRDdO`Dzl+haqHQ7LeT;J8v6rlgFgAIVBg<=>+E#htnyg^Fg# zDUz}?NXSW3$5ptq2T2qXSKbO=E&z06=(~9U!X3E6)s(C=?TF)3cgx^Q{)Qjk?S>Dw z?GU{SrvnC*%mC^Ka3eiW8ibCuteYCpRr-ra1@bqV7k0^RjdLhZmb0uI6W_*kqY(40ivCE z{+O!5zXWCKin0Xk_!(%nfnusBc5}qXOO__rN5%LEN>emNuv!&{39>QT8!5?cMQj5- z#w{?`swZ04-yMC_`J^dY?IrHlnqE*{R6i??0~t?J;RTWVkDv{2!FJ2@^%ItidwuYgxMS|FNqKZyBcHc_~F z6smB|HbM7UKM$r2Wm{ijvi%9_<<_;Ud)c1!NUKR8Alss_*7An6Z*=i>g1g9^w_2$b zod;QvX97hK%{7l(C<1i>irJ*gqAP0L(~tPy?RXepPu zuH}zO+3ed0`puVFg>KMBYijL}8f)T4^@Sm}tP&T2^41PZNq7M|=^|-d8aJf7fDX2< zm>uzTY{9x*i+WtooFm*Nf55RoaAgW$yZ-8uc?<$X9z_NCwsOx@t-Js^$q$*L8>x%d z9+XNmz)`%HxjSB9z@iK%4aXcC;>jj!ZVA3-mJ3+V)p*o@ki8aZo&_X5LEe_PckAuV zmM^~Sw5N>=i-Y}F$1NV}R5;%3FLDE*wm&cNBSk>AI9!)nU08~N^8j7JxRCZ{JDx9f z+$V)%igf;*d@(z1zME-}eKwbwo}dnuOXdwpjsfRkMNqS5gav*@h~3ty2>h#Z%)qwmcC;~xGs+0sLgXpQp$AC%47N_g zxF3}wtz}zm(57ptqUJUqZ1oA3!Fnarat{!*2;1XF){0z+F*}>Lgv2Cg9teQ6oS8cT z{Ic_TnAj>FPV2m(XNS=)N5&=1LQ{nhu4?A7`!cF~Ed4vlkJk(3L5ThdqT-S9@J!@{{g-frFmk^VI?3$+y3scSKSbG_6c|Rf4ebQ2SP;O%&PMmbHP*yES zOxn@=*qcx~zXimHlL$HN;%&cfNii$db@x6?_XG3AQ(~cHtS*+AQ$oB{U2mS~@!aOe zU@fr#zK(M5KZu1w@f8CpgVFFF^R$DXtE~86d>xNF_Z5fQ&Skt^snRtDz?c=4$&YOt zFKB0$%Mxl1u~uDwICZnMw0eedB$tGWwB@dz+rdKimNES~dJI&dNW<-LjdE4E{_8?_ zb@~yjV%?nS(7mxK-hC!|!YTO0UtC72TK(DIUa)@`AUTXv+)Mj;q~SMrAVmn!~0*aMg zepi$FTTKrX1*uxQBXDR!~Opx+{aGRy=r2 zf%(Flxa7A72orVyJHdgLEBp~T7b*^9n!Ax@WP>8&I3e%ti&pX>)Ns`zX!UW;5g3v& znY0>Vgekap`StbC4Sl7Sxb|l!I@u;~oA$iLK;(|+<5nVPP;&#Ba}hCem&tsht*NWAo0!{Q|0Nw3WYNF9i9Glqd;*121ehV&by# zrA?iAF9N##0_;Q%Ed#C2{n4H)9Y^=D*FI1C1->~HzVW22`%+2=ypK;$f}D*%=!g%7 zp%8G>xQM7Ap&;3&!$=-(z0KS4#UVCkh>W{1asNyE z4LyuroB3MN`&8=%w4um*kCb#CNDi&FlBrDysqmwd-TZith6X)o^C~+)`Kw4&Lj8JBynSG;GC+R6X)XI!sxz>Gsm%u zWp~{xIs&h}PBBQK8S5CM#i7}`a+A&JUeeI^3BJAH zH@uP)q+_l&UPpp31qEYWkVlivIWsaCD+yS?-<*i;;9ogXa$3mjR$+R){JHK_22p-a zYaH})ja~8KhxTZpeJ$cMY`huVRhk{4a)b0azoGK~U1T)y;h3FM4gR_lw#+64@wkejlhSDc(l9YflzLAmu+1~|o9;H1 zU+Oq046ASNDRoO5v&dDlkrrU?8l$^_yUgS%4u2gl>(T(68F4I-^J%D#9KF=GNx+Y{P<{A?Y)SV(eRoo%70>@ZqoP@ zezdTNIKq*3$BkCH{|eParxzbX)Pn>3y>I;c5Fyl1>XaOfF&Eq0)9mV=LoXr*Z)Y*U zo{umb8!*)6p=?;fN}W62uZ_YpZQNxolWq%NXNT&dlc&eAv>$LpxtG)GZ??9-x@{Gz zIWx|jEY>cgz1l6-BOKwHtynoQIR+qD`#zCcZ2vrHRyn_&(HxKGJFzX3Cd`EaG>rSi z1g`O!)uqf_Y}V$<*?RN*WHi+7N0|w(sR)8VESX0ZW$`ucgc9b(!+RljY>cEOuH@#r zlaFxi?_L6LX^V+FLUrvl2G;8^#6yaW<^d5Evsr<&-ko~erth&*{yN1ViGV2q3nYc| z;A>)p@#)8pCjq(&*sSE+j7?5Yp08$_@$**D;^v(lc+wh>XR1C%W|Sb7GZy{MNH(?f9gmJ7Z8HtwCf`{sPY4jX$ogB4`JK5{slu6&JuI zS~>ik*ZiD34g5|tqDJt<<#h#BU!kh0n6*7daSitwaX1OUFfGB1%$|hh5 zF)^vvg8n&Lr!#$UUNAZ!Zt`nz;&B7FN0yf=p0J2SkB{Xvwqjq2w~0=z&#XvVE~doC z=C8P!9iIkWT)Fz}bl^r$cD?e257~t`@8Kejm%CW|PL61dE>68p&Dq1BYdO?ERO~u( z{OU|CH$V=7nHOnrDxpOWHMg`3mywtEjgF3f+t=48Jvutt_f}fE&tKda;Ud$|ByjqA z&$Z=E{P9GBSnbxmmh?pv66hpOE3 zj8B0@1+mqG5UU$3x+b3FBWagNGit1En#yMBuZ{nX5~WB4>g@r=592M&=`Flrq-eewPCt zHFAx~Xp#}3GZOCtyTX3*C&=8B>T%dkG7@t4fG;v5ZH5mLmAGmmtD;yVFgq0g&f*2S zz^#2^i=En)b^G8hkFWv&TJtimeTn$sghB%Wz{L}5P>hmb{UpFuOyF5cD_ck~Tycyy zNHf65vhXN3(Wva6lfI}bTIa&he-Q9=KF)3m!n<3#!zCRkWM)=3g)TvU>FQ?9I)7Avp;o5}N!c1DyI2rbU#ZNQ9_f+yhna9|s zVd|GvOK!3l^*0cXV`mwH+<8f{Syo3TQiRS)DN=o8Bu(v=&MBI64 zabk(sB+-Q+`9Uz{d(isK_%+2^-=oQ6V%A7c`}dD$=kQH5o_)62D^*y(^QMt2vVQI$ zgsG#UvIg1apq5N@$Trbp;y_&uyHk~T&SvKUXN&vB>O<3;Wxjd6sC(Ics3;HTdP{vR z;~}g)@5SMCpQpNxSaM*8kyvwQRP7w<0#+QG`k*-*QP&(o@MI)9R_0g0gMEVpNuigv zZmW5uSwxGq#oZz-B#lYNH!szI8$0h~Wj40lHWu`bjE@ifQyAKAjwsze>|||(i?uI_ zjcT0L&iLEyEQzzYmih`e_o01L=y?zk(?{Uh*Ziwo@k;`Eqe?dDS{008?lI;6PGq+! zB*aF(O>@>i%?kY31HtSmXN!Ss{m?k0Jq@$#H9-q1ox=OP$%1zPwb!aK3GoDNQ-2%l zVf?|RsxKAlRV{=xx;8A?TpmrPQ{ES#Vb(RWJ}Y!nUr{KYW)XO>jZb0^Kg#Je?2aDH zg*AQQMDpODH@IsgAf$@xD}3Lx!~pAj3itYrRk8HD*U_O$w_==F`G)k@sTO0LkEK-5 zGEs0O601V^4wLC`{F7 z9CD)TruM$i>%Tl%=s#-Y#?K!pRJf8HYIUJPtEtHZNZcm+DzI`vVWPVmqd7?L9iBGsqnYfR$1VB&VA{k z(P^0KkKLpj$`WWT*qD7Tx`jvD&G%a>yy_vz?$BV=-ANUqCvdfYBo*R{@@&7F-=$oL z^Q3N*CRN~A#R|eiR*!-gvaE8i!60y7%sXe}t?;J#KsQ)YY#?$5FgelYRg~`z{KaYS z=y9HCr?bvL|NP9I`B3DBg1Rt2G$+WDu$!;#0Cl@wWiGhA8U4lq{dG85AQvZN;J7=URa?L3J9R(dZCQK*!u(UjKxt*ZLBciD4bDk{@JtWFmRED~Re`VIc4tqDk$nw) zN`OPJgmr|s%EKx({w|F0M{FS&o_ZrP=#qTV?}#nZ#*0Q&Vg+{o@+Nrr6z==D&F3R! zYR`y3Y-%y%ESym;#00z!J^7d11vxpym)v7q@O9 zSA8Z}D5pV|^K}RpT}Rk@Vm>wz{v45Vp7PnLH?OMNfXa<{q)fEen}ziO3CKn2(%sIi*4{nH0W$Q$JQJ9NcS(LJk;$ow*I}6b*T3Y8vif2jN87)Ru zb}0lNufn%DID`rDt3GB1azK0ndr3Jt=7TxK!L)Wizq4aO4YkTBRq&Nu+!7xS$(B4L z(FUY9LBZ*Bd|hQbp`A86cz;q{vS^NCs@||I|2mTM;tB9=2)mOx>Tkl)|Aiv&jz=JO zl3e=SG*^JF(?lZbz!6gF#bWU0&S0;?1bp=S;rUBY)~0FECVGslw>cc`&z8-?zU0s@ z+WSH!7*XYUaD8J28cucOnm(bKfG5N!^nLyP{c%%)Y#Zj#Fh_v`5j63N^Ji&Le4+~U$&Pf6il~KXy+uC&1zMuk40$LU$$h_Y?GVTh z2dsPWALJE9NJ_Rki$1LwAgTWvVtD<+kw&x^%`v5WIpwjGKk#9-S-&Kxl&2S6X{NhA z@=I8V;GH(AQF@{XyPpR8e7DKCUskps8F}mH$H)6p4(t`F#cMjcm;NeD(aT9O9j+)! zcGCqcNryjs9*h|ZsOI5bx{1iM5=f%IEBjwr?!{-hSL}|mC&CZDzIwfb2a9t%gQ5T< zI<~KZ0J6;W!iRl92v{$cu$gUbsUK8epV2&yB{G5^FPjC*6IiZAOJC?&&3&$x_T{JuM_wFs4oowt^1Pp#CytC zTYd&?<uaI5LI#)gt#Y0quC`=1XIkCF^-?5_w0IgK}PJxz1#?Kcx6xwli z@Zl!i7U=~Z75Jgyz8mYQw#^)2ED3+LdE$S_NVjo#kWd!WBMHK{!_4~h&)Eu|671Or zXcpFLSS1ghGJuwGkZ%GGaWh0|8ajD?u< z{_|)Lv#3MxP__0?jatT2J(CFSoC(MRD_1a$j>A$q2t;UZaQy_}?tf|7FGCqKKe57*U_f20iA#$-n;@2JeiI{Tap! z-@u&j{oiU*^G~M#^2ZUni}v)&i~sKR z8jxWM_Gr(5%l>(<^2D||2JOx|Cr!j@wp`@D<32tM4WyS{sTsPF%0N7$5U z>j|}=*aA0|O3PyYhYI_Df9#%?@8+c}7W?DJ-7vTkqR`{a`0IbfMDGz42{v7-<{{tk zVN^&w+E%|Ab^JDhWeWKxVw5Ot(ii?pUezLg>PvINl+Sm)KMTVDa*q6m{J~1jQ2#IA z`PVJyuedL&;HweItkSukb-7(tr1bf4jb+@Y3Z2s?fn*mi`as z{F3a4d692q7?p@W3*+COcPGBI+}lX>vC!c7M;sss^P&T=V7_4D`~#uJ4yH|gnJVqo z$Ty>Zk?YS|^naW?!~CH$V0bD11_k*)9wPrzOFc;bAoYF6zftVpsr|288!&(97#M3| znSZoQ@fv@qyPqsYKL5dy{l5&~4f}^dfSGcO{AbJb{g0`B*Ot5b&!*`Q8wdaTg$rQv ze_{W#W%_{nGSv@Nu?KJdfh~Ithb-9*gaPk=hNs&Ip)%@n%8S2lUU5E?c=L}&TcCQO z)J?=3)zD!C7VumfAoqlJYv@aOZ4i*JWFT!WGb@9#{q+vH`cVBpKTq)Bk5y7m_jCVc zS#QWm%xEyq6MnP<(trW{;H;GjBu}5RZ=x|l36t?gJwYt?_%HR-?TB*wNbcl7w|db| zzGp2VcKaAWv~rTebMJ4IlIp#Qi5_CLx7sEoLQK>>(a8~ogD}#uL4v(2M2r_A$o9RR zd?!HQC1!eEgL(g95`Mhzx7WMA<3V;PrFFr*C;2I2-p4TiHX0EE$D1FWD+(eM%`vaq z=lw8XWvG3C!M7t;VaoV=_fN0BCo&GF_E&t-X|K`VdLAZL^1vMM(p&lUhQu1*h zh*+E>5Y+13>Hk>c(=R3Ro0;zAoxtz{^usUTo)c`e zfBrDh`NfEz5j;<1IV)YuCZywqg8JghbcON%!k8!l4=g6;)WY91NYUrY;v%E?Il5m* zqndmK6OI*oY4A@i7$%>(m6^Qwxl!7|nkRaJFgSzP=zpPN`1tZRK%DwgtSj9{3MCB} zw|%|v2i(n*dN}~Bf$lzaKOb#ZTlq!UEygf3 zqaGp|mhx3`1u8!$e5wAzI7Bo}1vCC}=?V839lRbLl`I58d;}raJL-Jn39`woF4(%M zjXcqPJ~rEveS<67!di_r!)0EUMd7<7mrCS-Ezx|&#fGm2rM}{)v`mf2hIF!j`AI6V=Uzl%|8^hoX}rmyiGo`lC$6k-d{wDG7zC&OJN zeg^o*Gun`L1F((dXf0byx2foc(=|@J6&r|E^9gwnKV7|xw*P%XU!@Uu?M8M=^u<&m z=hs~X23mt|tzvruR%+A(E9WU#tWrX6%lX5`26J1Gn2$|~_`0C57b}Z*QvD)6K-=ZQ zUbxm;hHo$zTwlL0wc#*&8oP;jI_|BmH~3ms-ed-{$f522K8-9xgAov7V`M|mGA z^4xtumGXV@X3a4;h7BvE8Fu=IhucG2qjh+jsMom@qMx7=TY6Q&bni#IKdpbInfYbc-_ z2>AGd#Y%QJVLbO*Zp8Gz$EUn)9S3HtGScS2F|r+DH;YhTUpvw8p+6tb8cx|c;Ctk8 z!-oe05~|X^`n)i8ko%g!7KKw+0Q-ZU97m4}vs`3O$($i6OIvwj9wD6G8+L%knB z!50CWM-Sq?2hM6!<>w)qQFnG*p-#DU1L82fEOI-)8Fa8_!ynBYDe3cX+?vk+)Nyg9fcd2c z`<<^?Llr?t!wKI(tCr2+1a|O)gWteN@AOW=c}( zVLyNF?RP9f142k@O&GUeh|b$TODY+B8t(mzRe

  • -
    导航设置
    +
    +
    导航设置 + <%= link_to "".html_safe,new_admins_laboratory_laboratory_setting_path, remote: true, class: "btn btn-primary btn-sm"%> +
    +
    - + - + + - + <% (setting.navbar || setting.default_navbar).each do |nav| %> @@ -162,6 +167,11 @@ + <% end %> @@ -184,4 +194,9 @@ <%= link_to '取消', admins_laboratories_path, class: 'btn btn-secondary px-4' %> <% end %> - \ No newline at end of file + + \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 6c7f5d80c..3cc95eb02 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -567,7 +567,7 @@ Rails.application.routes.draw do post :update_sync_course end - resource :laboratory_setting, only: [:show, :update] + resource :laboratory_setting, only: [:show, :update, :new] resource :laboratory_user, only: [:create, :destroy] resources :carousels, only: [:index, :create, :update, :destroy] do From 32bc3fe9f56f9aee82049980aacf994f54352880 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Fri, 16 Oct 2020 16:43:57 +0800 Subject: [PATCH 255/384] FIX merge --- app/views/settings/show.json.jbuilder | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/views/settings/show.json.jbuilder b/app/views/settings/show.json.jbuilder index 939153c67..7de12345d 100644 --- a/app/views/settings/show.json.jbuilder +++ b/app/views/settings/show.json.jbuilder @@ -16,17 +16,17 @@ json.setting do # # json.footer setting.footer || default_setting.footer # - # json.main_site current_laboratory.main_site? # end nav_bar = default_setting.navbar - if User.current.logged? - nav_bar[2]["link"] = "/users/#{current_user.login}/projects" - nav_bar[2]["hidden"] = false - else - nav_bar[2]["link"] = "" - nav_bar[2]["hidden"] = true - end + + # if User.current.logged? + # nav_bar[2]["link"] = "https://forgeplus.trustie.net/users/#{current_user.login}/projects" + # nav_bar[2]["hidden"] = false + # else + # nav_bar[2]["link"] = "" + # nav_bar[2]["hidden"] = true + # end json.name default_setting.name json.nav_logo_url default_setting.nav_logo_url&.[](1..-1) @@ -48,4 +48,4 @@ json.setting do json.old_projects_url @old_projects_url -end \ No newline at end of file +end From 77de74fd4bd17ba82ac22c4bf113965b267598f7 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 16 Oct 2020 19:08:39 +0800 Subject: [PATCH 256/384] FIX unbind account bug --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index a1429078e..8cafb792e 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -1,7 +1,7 @@ class Ci::CloudAccountsController < Ci::BaseController include Ci::CloudAccountManageable - skip_before_action :connect_to_ci_database, only: %i[create bind] + skip_before_action :connect_to_ci_database, only: %i[create bind unbind] before_action :load_project, only: %i[create activate] before_action :authorize_owner!, only: %i[create activate] before_action :load_repo, only: %i[activate] From 9332750aa7345ddb38dc722e2e7001ba9e58af6d Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 16 Oct 2020 19:09:43 +0800 Subject: [PATCH 257/384] FIX --- app/controllers/ci/cloud_accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 8cafb792e..a1429078e 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -1,7 +1,7 @@ class Ci::CloudAccountsController < Ci::BaseController include Ci::CloudAccountManageable - skip_before_action :connect_to_ci_database, only: %i[create bind unbind] + skip_before_action :connect_to_ci_database, only: %i[create bind] before_action :load_project, only: %i[create activate] before_action :authorize_owner!, only: %i[create activate] before_action :load_repo, only: %i[activate] From 47f81978415be48992f95f2c21163021f9cfcef1 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 19 Oct 2020 09:27:59 +0800 Subject: [PATCH 258/384] FIX ci connect database before fiter --- app/controllers/ci/base_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index 59dc1cb84..a74ce6ab3 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -2,7 +2,7 @@ class Ci::BaseController < ApplicationController include Ci::DbConnectable before_action :require_login - before_action :connect_to_ci_database, if: -> { current_user && !current_user.is_a?(AnonymousUser) && current_user.devops_certification? } + before_action :connect_to_ci_database, if: -> { current_user && !current_user.is_a?(AnonymousUser) && !current_user.devops_uninit? } def load_repo namespace = params[:owner] From 913f4b26a4aaa0fa5254bcdb286ecaaa07c39367 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 19 Oct 2020 11:05:30 +0800 Subject: [PATCH 259/384] =?UTF-8?q?FIX=20=E8=A7=A3=E5=86=B3issue=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E6=9B=B4=E6=94=B9=E4=B8=BA=20=E2=80=98=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E2=80=99=E7=8A=B6=E6=80=81=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/issues_controller.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index c0c6b20f7..b95f422d0 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -197,10 +197,7 @@ class IssuesController < ApplicationController # end # end - if params[:status_id].to_i == 5 - @issue.issue_times.update_all(end_time: Time.now) - # @issue.update_closed_issues_count_in_project! #已经有after_update方法了,这里就不需要了 - elsif @issue.issue_type.to_s == "2" && params[:status_id].to_i == 5 && @issue.author_id != current_user.try(:id) + if @issue.issue_type.to_s == "2" && params[:status_id].to_i == 5 && @issue.author_id != current_user.try(:id) normal_status(-1, "不允许修改为关闭状态") else issue_params = issue_send_params(params).except(:issue_classify, :author_id, :project_id) From 1ac606a8aaef42dbb04f7ea9cd234352b29c6f7b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 19 Oct 2020 15:20:30 +0800 Subject: [PATCH 260/384] =?UTF-8?q?FIX=20=E5=8E=BB=E6=8E=89=E5=8C=BA?= =?UTF-8?q?=E5=9D=97=E9=93=BE=E7=9B=B8=E5=85=B3=E7=9A=84token=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/members/_member.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/members/_member.json.jbuilder b/app/views/members/_member.json.jbuilder index c2a2bb269..45a0837e8 100644 --- a/app/views/members/_member.json.jbuilder +++ b/app/views/members/_member.json.jbuilder @@ -3,4 +3,4 @@ json.name user.real_name json.login user.login json.image_url url_to_avatar(user) json.email user.try(:mail) -json.token get_user_token(user.try(:login),@project.try(:identifier)) +# json.token get_user_token(user.try(:login),@project.try(:identifier)) From 2eef143251c7150915d0e1ca264d19a522f94992 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 19 Oct 2020 22:59:41 +0800 Subject: [PATCH 261/384] =?UTF-8?q?ADD=20=E5=90=8C=E6=AD=A5educoder?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=AE=9E=E8=AE=AD=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/projects_helper.rb | 25 ++++-- app/models/project.rb | 82 +++++++++++++++++-- app/models/project_educoder.rb | 3 + app/models/repository.rb | 2 +- .../projects/_project_detail.json.jbuilder | 22 +++-- ...20201019082617_add_platform_to_projects.rb | 5 ++ ...20201019104433_create_project_educoders.rb | 12 +++ 7 files changed, 129 insertions(+), 22 deletions(-) create mode 100644 app/models/project_educoder.rb create mode 100644 db/migrate/20201019082617_add_platform_to_projects.rb create mode 100644 db/migrate/20201019104433_create_project_educoders.rb diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 3f0fa09b2..ad8447bd4 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -39,6 +39,20 @@ module ProjectsHelper first_sync: repo.first_sync? }) end + author = + if project.educoder? + { + login: project.project_educoder.owner, + name: project.project_educoder.owner, + image_url: project.project_educoder.image_url + } + else + { + login: project.owner.login, + name: project.owner.real_name, + image_url: url_to_avatar(project.owner) + } + end tmp_json = tmp_json.merge({ identifier: project.identifier, @@ -47,12 +61,13 @@ module ProjectsHelper repo_id: repo.id, open_devops: (user.blank? || user.is_a?(AnonymousUser)) ? false : project.open_devops?, type: project.numerical_for_project_type, - author: { - login: project.owner.login, - name: project.owner.real_name, - image_url: url_to_avatar(project.owner) - } + author: author }).compact + render json: tmp_json end + + def render_author(project) + + end end diff --git a/app/models/project.rb b/app/models/project.rb index 755e81b7d..119256887 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -10,16 +10,19 @@ class Project < ApplicationRecord # enum project_type: { sync_mirror: 2, mirror: 1, common: 0 } + # forge: trustie平台项目, educoder: educoder平台项目, 默认为forge平台 + enum platform: { forge: 0, educoder: 1 } + belongs_to :ignore, optional: true belongs_to :license, optional: true - belongs_to :owner, class_name: 'User', foreign_key: :user_id + belongs_to :owner, class_name: 'User', foreign_key: :user_id, optional: true belongs_to :project_category, optional: true , :counter_cache => true belongs_to :project_language, optional: true , :counter_cache => true has_many :project_trends, dependent: :destroy has_many :watchers, as: :watchable, dependent: :destroy has_many :fork_users, dependent: :destroy has_many :forked_users, class_name: 'ForkUser', foreign_key: :fork_project_id, dependent: :destroy - # has_many :commits, dependent: :destroy + has_one :project_educoder, dependent: :destroy has_one :project_score, dependent: :destroy has_one :repository, dependent: :destroy @@ -175,12 +178,16 @@ class Project < ApplicationRecord def self.find_with_namespace(namespace_path, identifier) logger.info "########namespace_path: #{namespace_path} ########identifier: #{identifier} " - user = User.find_by_login namespace_path - return nil if user.blank? - - project = user.projects.find_by(identifier: identifier) - + project = Project.find_by(identifier: identifier) return nil if project.blank? + + if project.forge? + user = User.find_by_login namespace_path + return nil if user.blank? + + project = user.projects.find_by(identifier: identifier) + return nil if project.blank? + end project end @@ -193,4 +200,65 @@ class Project < ApplicationRecord update_column(:open_devops, true) increment!(:open_devops_count) end + + def self.sync_educoder_shixun(url, private_token, page, per_page) + uri = URI("#{url}?page=#{page}&per_page=#{per_page}&private_token=#{private_token}") + puts "-------url: #{uri}" + response = Net::HTTP.get_response(uri) + + result = JSON.parse(response.body) + + if result['status'] != 0 + logger.info "======= 接口请求失败!" + return + end + + result['data']['repositories'].each do |re| + language = ProjectLanguage.find_by_name re['language'] + language = ProjectLanguage.create!(name: re['language']) if language.blank? + + category = ProjectCategory.find_by_name re['category'] + category = ProjectCategory.create!(name: re['category']) if category.blank? + + project_params = + { + name: re['name'], + # user_id: params[:user_id], + description: re['description'], + project_category_id: category.id, + project_language_id: language.id, + is_public: true, + # ignore_id: params[:ignore_id], + # license_id: params[:license_id], + identifier: re['repo_name'], + platform: Project.platforms[:educoder] + } + + project = Project.new(project_params) + + ActiveRecord::Base.transaction do + if project.save! + repo_params = + { + hidden: false, + project_id: project.id, + identifier: re['repo_name'] + } + + ProjectEducoder.create!( + project_id: project.id, + owner: re['username'], + repo_name: re['repo_name'], + image_url: re['image_url']) + + repo = Repository.new(repo_params) + repo.save! + + logger.info "项目: #{re['name']} 同步成功" + else + logger.info "项目: #{re['name']} 同步失败" + end + end + end + end end diff --git a/app/models/project_educoder.rb b/app/models/project_educoder.rb new file mode 100644 index 000000000..dcd7a2cef --- /dev/null +++ b/app/models/project_educoder.rb @@ -0,0 +1,3 @@ +class ProjectEducoder < ApplicationRecord + belongs_to :project, optional: true +end diff --git a/app/models/repository.rb b/app/models/repository.rb index 17c42a938..4c8d81111 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -1,7 +1,7 @@ class Repository < ApplicationRecord self.inheritance_column = nil # FIX The single-table inheritance mechanism failed belongs_to :project, :touch => true - belongs_to :user + belongs_to :user, optional: true has_one :mirror, foreign_key: :repo_id has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', foreign_key: :repo_id has_many :version_releases, dependent: :destroy diff --git a/app/views/projects/_project_detail.json.jbuilder b/app/views/projects/_project_detail.json.jbuilder index b14a237e7..0f655a48d 100644 --- a/app/views/projects/_project_detail.json.jbuilder +++ b/app/views/projects/_project_detail.json.jbuilder @@ -1,8 +1,4 @@ -user = project.owner -if user.blank? - nil -else - json.id project.id +json.id project.id json.repo_id project&.repository&.id json.identifier project.identifier json.name project.name @@ -18,10 +14,19 @@ json.time_ago time_from_now(project.updated_on) json.forked_from_project_id project.forked_from_project_id json.open_devops project.open_devops? json.author do - json.name user.try(:show_real_name) - json.login user.login - json.image_url url_to_avatar(project.owner) + if project.educoder? + project_educoder = project.project_educoder + json.name project_educoder&.owner + json.login project_educoder#.owner + json.image_url project_educoder.image_url + else + user = project.owner + json.name user.try(:show_real_name) + json.login user.login + json.image_url url_to_avatar(project.owner) + end end + json.category do if project.project_category.blank? json.nil! @@ -38,4 +43,3 @@ json.language do json.name project.project_language.name end end -end diff --git a/db/migrate/20201019082617_add_platform_to_projects.rb b/db/migrate/20201019082617_add_platform_to_projects.rb new file mode 100644 index 000000000..0301a13cc --- /dev/null +++ b/db/migrate/20201019082617_add_platform_to_projects.rb @@ -0,0 +1,5 @@ +class AddPlatformToProjects < ActiveRecord::Migration[5.2] + def change + add_column :projects, :platform, :integer, default: 0 + end +end diff --git a/db/migrate/20201019104433_create_project_educoders.rb b/db/migrate/20201019104433_create_project_educoders.rb new file mode 100644 index 000000000..e80d97110 --- /dev/null +++ b/db/migrate/20201019104433_create_project_educoders.rb @@ -0,0 +1,12 @@ +class CreateProjectEducoders < ActiveRecord::Migration[5.2] + def change + create_table :project_educoders do |t| + t.string :owner + t.string :repo_name + t.string :image_url + t.integer :project_id + + t.timestamps + end + end +end From 7f685e4119f43d55bc0a5e305c48a1c7c745d53b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 19 Oct 2020 23:08:17 +0800 Subject: [PATCH 262/384] =?UTF-8?q?FIX=20=E5=AE=8C=E5=96=84=E5=90=8C?= =?UTF-8?q?=E6=AD=A5educoder=E5=B9=B3=E5=8F=B0=E5=AE=9E=E8=AE=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/project.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/models/project.rb b/app/models/project.rb index 119256887..d680984dd 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -214,6 +214,7 @@ class Project < ApplicationRecord end result['data']['repositories'].each do |re| + next if re['repo_name'].blank? language = ProjectLanguage.find_by_name re['language'] language = ProjectLanguage.create!(name: re['language']) if language.blank? From a63d675a92c0117b821e15184fc1f76240b2670b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 19 Oct 2020 23:39:44 +0800 Subject: [PATCH 263/384] =?UTF-8?q?FIX=20=E5=90=8C=E6=AD=A5educoder?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=AE=9E=E8=AE=AD=E9=A1=B9=E7=9B=AE=E6=94=BE?= =?UTF-8?q?=E5=85=A5job=E4=B8=AD=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/sync_educoder_shixun_job.rb | 68 ++++++++++++++++++++++++++++ app/models/project.rb | 60 +----------------------- 2 files changed, 69 insertions(+), 59 deletions(-) create mode 100644 app/jobs/sync_educoder_shixun_job.rb diff --git a/app/jobs/sync_educoder_shixun_job.rb b/app/jobs/sync_educoder_shixun_job.rb new file mode 100644 index 000000000..d6f170ab9 --- /dev/null +++ b/app/jobs/sync_educoder_shixun_job.rb @@ -0,0 +1,68 @@ +class SyncEducoderShixunJob < ApplicationJob + queue_as :default + + def perform(url, private_token, page, per_page) + uri = URI("#{url}?page=#{page}&per_page=#{per_page}&private_token=#{private_token}") + puts "-------url: #{uri}" + response = Net::HTTP.get_response(uri) + + result = JSON.parse(response.body) + + if result['status'] != 0 + logger.info "======= 接口请求失败!" + return + end + + result['data']['repositories'].each do |re| + next if re['repo_name'].blank? + next if ProjectEducoder.exists?(repo_name: re['repo_name']) + + language = ProjectLanguage.find_by_name re['language'] + language = ProjectLanguage.create!(name: re['language']) if language.blank? + + category = ProjectCategory.find_by_name re['category'] + category = ProjectCategory.create!(name: re['category']) if category.blank? + + project_params = + { + name: re['name'], + # user_id: params[:user_id], + description: re['description'], + project_category_id: category.id, + project_language_id: language.id, + is_public: true, + # ignore_id: params[:ignore_id], + # license_id: params[:license_id], + identifier: re['repo_name'], + platform: Project.platforms[:educoder] + } + + project = Project.new(project_params) + + ActiveRecord::Base.transaction do + if project.save! + repo_params = + { + hidden: false, + project_id: project.id, + identifier: re['repo_name'] + } + + ProjectEducoder.create!( + project_id: project.id, + owner: re['username'], + repo_name: re['repo_name'], + image_url: re['image_url']) + + repo = Repository.new(repo_params) + repo.save! + + logger.info "项目: #{re['name']} 同步成功" + else + logger.info "项目: #{re['name']} 同步失败" + end + end + end + end + +end diff --git a/app/models/project.rb b/app/models/project.rb index d680984dd..38cd00316 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -202,64 +202,6 @@ class Project < ApplicationRecord end def self.sync_educoder_shixun(url, private_token, page, per_page) - uri = URI("#{url}?page=#{page}&per_page=#{per_page}&private_token=#{private_token}") - puts "-------url: #{uri}" - response = Net::HTTP.get_response(uri) - - result = JSON.parse(response.body) - - if result['status'] != 0 - logger.info "======= 接口请求失败!" - return - end - - result['data']['repositories'].each do |re| - next if re['repo_name'].blank? - language = ProjectLanguage.find_by_name re['language'] - language = ProjectLanguage.create!(name: re['language']) if language.blank? - - category = ProjectCategory.find_by_name re['category'] - category = ProjectCategory.create!(name: re['category']) if category.blank? - - project_params = - { - name: re['name'], - # user_id: params[:user_id], - description: re['description'], - project_category_id: category.id, - project_language_id: language.id, - is_public: true, - # ignore_id: params[:ignore_id], - # license_id: params[:license_id], - identifier: re['repo_name'], - platform: Project.platforms[:educoder] - } - - project = Project.new(project_params) - - ActiveRecord::Base.transaction do - if project.save! - repo_params = - { - hidden: false, - project_id: project.id, - identifier: re['repo_name'] - } - - ProjectEducoder.create!( - project_id: project.id, - owner: re['username'], - repo_name: re['repo_name'], - image_url: re['image_url']) - - repo = Repository.new(repo_params) - repo.save! - - logger.info "项目: #{re['name']} 同步成功" - else - logger.info "项目: #{re['name']} 同步失败" - end - end - end + SyncEducoderShixunJob.perform_later(uri, private_token, page, per_page) end end From 2f7b6c9b75fc5d7c8f4b4b74c9586610f7307fcd Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 19 Oct 2020 23:41:05 +0800 Subject: [PATCH 264/384] FIX bug --- app/models/project.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index 38cd00316..a0096c032 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -202,6 +202,6 @@ class Project < ApplicationRecord end def self.sync_educoder_shixun(url, private_token, page, per_page) - SyncEducoderShixunJob.perform_later(uri, private_token, page, per_page) + SyncEducoderShixunJob.perform_later(url, private_token, page, per_page) end end From 46ccbbe6994964e731ca049a11d393bf585c8549 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 20 Oct 2020 00:05:43 +0800 Subject: [PATCH 265/384] ADD console info --- app/jobs/sync_educoder_shixun_job.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/jobs/sync_educoder_shixun_job.rb b/app/jobs/sync_educoder_shixun_job.rb index d6f170ab9..e2d0a851d 100644 --- a/app/jobs/sync_educoder_shixun_job.rb +++ b/app/jobs/sync_educoder_shixun_job.rb @@ -1,3 +1,6 @@ +require 'uri' +require 'net/http' + class SyncEducoderShixunJob < ApplicationJob queue_as :default @@ -9,7 +12,7 @@ class SyncEducoderShixunJob < ApplicationJob result = JSON.parse(response.body) if result['status'] != 0 - logger.info "======= 接口请求失败!" + puts.info "======= 接口请求失败!" return end @@ -57,9 +60,9 @@ class SyncEducoderShixunJob < ApplicationJob repo = Repository.new(repo_params) repo.save! - logger.info "项目: #{re['name']} 同步成功" + puts.info "项目: #{re['name']} 同步成功" else - logger.info "项目: #{re['name']} 同步失败" + puts.info "项目: #{re['name']} 同步失败" end end end From 831aea8b7353430d69ba920b5fdbd82b8da7d0be Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 20 Oct 2020 00:10:29 +0800 Subject: [PATCH 266/384] FIX bug --- app/jobs/sync_educoder_shixun_job.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/jobs/sync_educoder_shixun_job.rb b/app/jobs/sync_educoder_shixun_job.rb index e2d0a851d..39dec0a76 100644 --- a/app/jobs/sync_educoder_shixun_job.rb +++ b/app/jobs/sync_educoder_shixun_job.rb @@ -12,7 +12,7 @@ class SyncEducoderShixunJob < ApplicationJob result = JSON.parse(response.body) if result['status'] != 0 - puts.info "======= 接口请求失败!" + puts "======= 接口请求失败!" return end @@ -60,9 +60,9 @@ class SyncEducoderShixunJob < ApplicationJob repo = Repository.new(repo_params) repo.save! - puts.info "项目: #{re['name']} 同步成功" + puts "项目: #{re['name']} 同步成功" else - puts.info "项目: #{re['name']} 同步失败" + puts "项目: #{re['name']} 同步失败" end end end From cb7d49506cb7cf83d4ab64880a2137d7e8bc37bc Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 20 Oct 2020 15:19:26 +0800 Subject: [PATCH 267/384] FIX change description 'longtext' type with projects table --- .../20201020071758_change_description_from_projects.rb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 db/migrate/20201020071758_change_description_from_projects.rb diff --git a/db/migrate/20201020071758_change_description_from_projects.rb b/db/migrate/20201020071758_change_description_from_projects.rb new file mode 100644 index 000000000..9c4e33502 --- /dev/null +++ b/db/migrate/20201020071758_change_description_from_projects.rb @@ -0,0 +1,5 @@ +class ChangeDescriptionFromProjects < ActiveRecord::Migration[5.2] + def change + change_column :projects, :description, :longtext + end +end From f5eecdffdc0a913863bb2b2a70a5a338e855e2c9 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 20 Oct 2020 17:43:03 +0800 Subject: [PATCH 268/384] ADD some columns for project_educoders table --- app/jobs/sync_educoder_shixun_job.rb | 2 ++ ...dd_forked_count_and_commit_count_to_project_educoders.rb | 6 ++++++ 2 files changed, 8 insertions(+) create mode 100644 db/migrate/20201020093834_add_forked_count_and_commit_count_to_project_educoders.rb diff --git a/app/jobs/sync_educoder_shixun_job.rb b/app/jobs/sync_educoder_shixun_job.rb index 39dec0a76..d5f78271f 100644 --- a/app/jobs/sync_educoder_shixun_job.rb +++ b/app/jobs/sync_educoder_shixun_job.rb @@ -55,6 +55,8 @@ class SyncEducoderShixunJob < ApplicationJob project_id: project.id, owner: re['username'], repo_name: re['repo_name'], + forked_count: re['forked_count'], + commit_count: re['commit_count'], image_url: re['image_url']) repo = Repository.new(repo_params) diff --git a/db/migrate/20201020093834_add_forked_count_and_commit_count_to_project_educoders.rb b/db/migrate/20201020093834_add_forked_count_and_commit_count_to_project_educoders.rb new file mode 100644 index 000000000..d49b1e39c --- /dev/null +++ b/db/migrate/20201020093834_add_forked_count_and_commit_count_to_project_educoders.rb @@ -0,0 +1,6 @@ +class AddForkedCountAndCommitCountToProjectEducoders < ActiveRecord::Migration[5.2] + def change + add_column :project_educoders, :commit_count, :integer, default: 0 + add_column :project_educoders, :forked_count, :integer, default: 0 + end +end From ca3b5f4284f09bdda1fb1760c666ae09111ae668 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 21 Oct 2020 11:43:11 +0800 Subject: [PATCH 269/384] ADD index for project_type column in projects table --- db/migrate/20201020083709_add_index_to_projects.rb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 db/migrate/20201020083709_add_index_to_projects.rb diff --git a/db/migrate/20201020083709_add_index_to_projects.rb b/db/migrate/20201020083709_add_index_to_projects.rb new file mode 100644 index 000000000..b968a17c1 --- /dev/null +++ b/db/migrate/20201020083709_add_index_to_projects.rb @@ -0,0 +1,5 @@ +class AddIndexToProjects < ActiveRecord::Migration[5.2] + def change + add_index :projects, :identifier, name: 'index_projects_on_identifier' + end +end From e3d9dae8fd9e748de4c8ed2d5336748bca5a618a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 21 Oct 2020 11:45:55 +0800 Subject: [PATCH 270/384] Update projects sime api with statics --- .../project_categories_controller.rb | 10 +++----- app/controllers/projects_controller.rb | 24 +++++++++++++------ app/models/project.rb | 11 +++++++++ app/models/project_statistic.rb | 2 ++ app/services/projects/create_service.rb | 1 + app/services/projects/migrate_service.rb | 1 + .../group_list.json.jbuilder | 10 ++++---- .../projects/group_type_list.json.jbuilder | 10 ++++---- ...0201021031915_create_project_statistics.rb | 12 ++++++++++ ..._add_index_for_project_type_to_projects.rb | 5 ++++ 10 files changed, 62 insertions(+), 24 deletions(-) create mode 100644 app/models/project_statistic.rb create mode 100644 db/migrate/20201021031915_create_project_statistics.rb create mode 100644 db/migrate/20201021033117_add_index_for_project_type_to_projects.rb diff --git a/app/controllers/project_categories_controller.rb b/app/controllers/project_categories_controller.rb index 116a79281..f468cc067 100644 --- a/app/controllers/project_categories_controller.rb +++ b/app/controllers/project_categories_controller.rb @@ -6,12 +6,8 @@ class ProjectCategoriesController < ApplicationController end def group_list - # if current_user&.logged? - # projects = Project.list_user_projects(current_user.id) - # else - # projects = Project.visible - # end - projects = Project.no_anomory_projects.visible - @category_group_list = projects.joins(:project_category).group("project_categories.id", "project_categories.name").size + @project_categories = ProjectCategory.where('projects_count > 0') + # projects = Project.no_anomory_projects.visible + # @category_group_list = projects.joins(:project_category).group("project_categories.id", "project_categories.name").size end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 9bfc60437..eba2ad1b0 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -38,13 +38,23 @@ class ProjectsController < ApplicationController end def group_type_list - # if current_user&.logged? - # projects = Project.list_user_projects(current_user.id) - # else - # projects = Project.visible - # end - projects = Project.no_anomory_projects.visible - @project_group_list = projects.group(:project_type).size + project_statics = ProjectStatistic.first + + @project_statics_list = [ + { + project_type: 'common', + name: '开源托管项目', + projects_count: project_statics&.common_projects_count || 0 + }, + { + project_type: 'mirror', + name: '开源镜像项目', + projects_count: project_statics&.mirror_projects_count || 0 + } + ] + + # projects = Project.no_anomory_projects.visible + # @project_group_list = projects.group(:project_type).size end def update diff --git a/app/models/project.rb b/app/models/project.rb index 755e81b7d..83c48a6dd 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -193,4 +193,15 @@ class Project < ApplicationRecord update_column(:open_devops, true) increment!(:open_devops_count) end + + def self.update_common_projects_count! + ps = ProjectStatistic.first + ps.increment!(:common_projects_count) unless ps.blank? + end + + def self.update_mirror_projects_count! + ps = ProjectStatistic.first + ps.increment!(:mirror_projects_count) unless ps.blank? + end + end diff --git a/app/models/project_statistic.rb b/app/models/project_statistic.rb new file mode 100644 index 000000000..3dbbf36de --- /dev/null +++ b/app/models/project_statistic.rb @@ -0,0 +1,2 @@ +class ProjectStatistic < ApplicationRecord +end diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index f4297acfe..dc14d10d0 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -12,6 +12,7 @@ class Projects::CreateService < ApplicationService @project = Project.new(project_params) ActiveRecord::Base.transaction do if @project.save! + Project.update_common_projects_count! Repositories::CreateService.new(user, @project, repository_params).call else Rails.logger.info("#############___________create_project_erros______###########{@project.errors.messages}") diff --git a/app/services/projects/migrate_service.rb b/app/services/projects/migrate_service.rb index 2eb9172cb..ff0c0643d 100644 --- a/app/services/projects/migrate_service.rb +++ b/app/services/projects/migrate_service.rb @@ -9,6 +9,7 @@ class Projects::MigrateService < ApplicationService def call @project = Project.new(project_params) if @project.save! + Project.update_mirror_projects_count! Repositories::MigrateService.new(user, @project, repository_params).call else # diff --git a/app/views/project_categories/group_list.json.jbuilder b/app/views/project_categories/group_list.json.jbuilder index 07ce8834c..f13d6ecff 100644 --- a/app/views/project_categories/group_list.json.jbuilder +++ b/app/views/project_categories/group_list.json.jbuilder @@ -1,5 +1,5 @@ -json.array! @category_group_list do |category,v| - json.id category[0] - json.name category[1] - json.projects_count v -end \ No newline at end of file +json.array! @project_categories do |category| + json.id category.id + json.name category.name + json.projects_count category.projects_count +end diff --git a/app/views/projects/group_type_list.json.jbuilder b/app/views/projects/group_type_list.json.jbuilder index 34d46894c..542c3eff0 100644 --- a/app/views/projects/group_type_list.json.jbuilder +++ b/app/views/projects/group_type_list.json.jbuilder @@ -1,5 +1,5 @@ -json.array! @project_group_list do |type,v| - json.project_type type - json.name render_zh_project_type(type) - json.projects_count v -end \ No newline at end of file +json.array! @project_statics_list do |static| + json.project_type static[:project_type] + json.name static[:name] + json.projects_count static[:projects_count] +end diff --git a/db/migrate/20201021031915_create_project_statistics.rb b/db/migrate/20201021031915_create_project_statistics.rb new file mode 100644 index 000000000..c266816d7 --- /dev/null +++ b/db/migrate/20201021031915_create_project_statistics.rb @@ -0,0 +1,12 @@ +class CreateProjectStatistics < ActiveRecord::Migration[5.2] + def change + create_table :project_statistics do |t| + t.integer :common_projects_count, :default => 0 + t.integer :mirror_projects_count, :default => 0 + t.integer :sync_mirror_projects_count, :default => 0 + t.integer :commits_total_count, :default => 0 + + t.timestamps + end + end +end diff --git a/db/migrate/20201021033117_add_index_for_project_type_to_projects.rb b/db/migrate/20201021033117_add_index_for_project_type_to_projects.rb new file mode 100644 index 000000000..f86edc38a --- /dev/null +++ b/db/migrate/20201021033117_add_index_for_project_type_to_projects.rb @@ -0,0 +1,5 @@ +class AddIndexForProjectTypeToProjects < ActiveRecord::Migration[5.2] + def change + add_index :projects, :project_type + end +end From 495dc0d2e1301828f5580de8d6c32a8a076d3124 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 21 Oct 2020 11:53:52 +0800 Subject: [PATCH 271/384] FIX query project --- app/models/project.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index a0096c032..f164968ad 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -178,7 +178,8 @@ class Project < ApplicationRecord def self.find_with_namespace(namespace_path, identifier) logger.info "########namespace_path: #{namespace_path} ########identifier: #{identifier} " - project = Project.find_by(identifier: identifier) + project = Project.find_by(identifier: identifier) || Project.find_by(identifier: "#{namespace_path}/#{identifier}") + return nil if project.blank? if project.forge? @@ -203,5 +204,6 @@ class Project < ApplicationRecord def self.sync_educoder_shixun(url, private_token, page, per_page) SyncEducoderShixunJob.perform_later(url, private_token, page, per_page) + end end From 99f67cf3a7080580dd0afa3496ea0f16fc71a793 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 21 Oct 2020 11:54:22 +0800 Subject: [PATCH 272/384] FIX merge --- app/models/project.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index f164968ad..50fbf77d7 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -204,6 +204,5 @@ class Project < ApplicationRecord def self.sync_educoder_shixun(url, private_token, page, per_page) SyncEducoderShixunJob.perform_later(url, private_token, page, per_page) - end end From a713e61437ff15a3bbf330d8c14223757be5919c Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 21 Oct 2020 11:55:03 +0800 Subject: [PATCH 273/384] FIX query branches bug --- app/controllers/projects_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 9bfc60437..777eaed73 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -34,7 +34,7 @@ class ProjectsController < ApplicationController end def branches - @branches = Gitea::Repository::Branches::ListService.new(@project.owner, @project.identifier).call + @branches = @project.forge? ? Gitea::Repository::Branches::ListService.new(@project.owner, @project.identifier).call : [] end def group_type_list From e0826da950808a1809dcad0e8e855e50e834d2e3 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 21 Oct 2020 12:13:53 +0800 Subject: [PATCH 274/384] ADD index for updated_on column with projects table --- .../20201021041202_add_index_for_updated_on_to_projects.rb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 db/migrate/20201021041202_add_index_for_updated_on_to_projects.rb diff --git a/db/migrate/20201021041202_add_index_for_updated_on_to_projects.rb b/db/migrate/20201021041202_add_index_for_updated_on_to_projects.rb new file mode 100644 index 000000000..43c223a6b --- /dev/null +++ b/db/migrate/20201021041202_add_index_for_updated_on_to_projects.rb @@ -0,0 +1,5 @@ +class AddIndexForUpdatedOnToProjects < ActiveRecord::Migration[5.2] + def change + add_index :projects, :updated_on + end +end From 6cedf3b53063f2ad863aead38cd2361be78ca3f1 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 21 Oct 2020 15:13:30 +0800 Subject: [PATCH 275/384] ADD some index to projects table --- .../20201021070524_add_some_index_to_projects.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 db/migrate/20201021070524_add_some_index_to_projects.rb diff --git a/db/migrate/20201021070524_add_some_index_to_projects.rb b/db/migrate/20201021070524_add_some_index_to_projects.rb new file mode 100644 index 000000000..47a3c2fda --- /dev/null +++ b/db/migrate/20201021070524_add_some_index_to_projects.rb @@ -0,0 +1,11 @@ +class AddSomeIndexToProjects < ActiveRecord::Migration[5.2] + def change + add_index :projects, :project_category_id + add_index :projects, :project_language_id + add_index :projects, :is_public + add_index :projects, :status + add_index :projects, :forked_from_project_id + add_index :projects, :recommend + add_index :projects, :platform + end +end From f6937d96f4125651494f98b4eda1eb4efb0b0836 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 21 Oct 2020 16:46:23 +0800 Subject: [PATCH 276/384] ADD some index --- db/migrate/20201021080638_add_user_id_index_to_projects.rb | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 db/migrate/20201021080638_add_user_id_index_to_projects.rb diff --git a/db/migrate/20201021080638_add_user_id_index_to_projects.rb b/db/migrate/20201021080638_add_user_id_index_to_projects.rb new file mode 100644 index 000000000..63edfbbcf --- /dev/null +++ b/db/migrate/20201021080638_add_user_id_index_to_projects.rb @@ -0,0 +1,6 @@ +class AddUserIdIndexToProjects < ActiveRecord::Migration[5.2] + def change + add_index :projects, :user_id + add_index :projects, :name + end +end From 0c92b571c51e304f25d58eb8dc80b7d5783f86ac Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 21 Oct 2020 18:07:18 +0800 Subject: [PATCH 277/384] FIX perfect devops languages formate --- lib/tasks/dev_ops_languages.rake | 1023 ++++++++++++++++-------------- 1 file changed, 530 insertions(+), 493 deletions(-) diff --git a/lib/tasks/dev_ops_languages.rake b/lib/tasks/dev_ops_languages.rake index 59b99413a..fdac65cae 100644 --- a/lib/tasks/dev_ops_languages.rake +++ b/lib/tasks/dev_ops_languages.rake @@ -18,697 +18,734 @@ namespace :dev_ops_languages do [ { name: "C", - content: "kind: pipeline - name: default + content: " +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: gcc - commands: - - ./configure - - make - - make test" +steps: +- name: test + image: gcc + commands: + - ./configure + - make + - make test" }, { name: "C++", - content: "kind: pipeline - name: default + content: " +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: gcc - commands: - - ./configure - - make - - make test" +steps: +- name: test + image: gcc + commands: + - ./configure + - make + - make test" }, { name: "Docker", - content: "kind: pipeline - name: default + content: " +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: docker:dind - volumes: - - name: dockersock - path: /var/run/docker.sock - commands: - - docker ps -a +steps: +- name: test + image: docker:dind + volumes: + - name: dockersock + path: /var/run/docker.sock + commands: + - docker ps -a - volumes: - - name: dockersock - host: - path: /var/run/docker.sock" +volumes: +- name: dockersock + host: + path: /var/run/docker.sock" }, { name: "Java", - content: "kind: pipeline - name: default + content: " +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: maven:3-jdk-10 - commands: - - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V - - mvn test -B" +steps: +- name: test + image: maven:3-jdk-10 + commands: + - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V + - mvn test -B" }, { name: "R", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: r-base - commands: - - R -e 'install.packages(c('package1','package2'))' - - R CMD build ." +steps: +- name: test + image: r-base + commands: + - R -e 'install.packages(c("package1","package2"))' + - R CMD build .` }, { name: "Ruby", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: ruby - commands: - - bundle install --jobs=3 --retry=3 - - rake" +steps: +- name: test + image: ruby + commands: + - bundle install --jobs=3 --retry=3 + - rake` }, { name: "PHP", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: install - image: composer - commands: - - composer install +steps: +- name: install + image: composer + commands: + - composer install - - name: test - image: php:7 - commands: - - vendor/bin/phpunit --configuration config.xml" +- name: test + image: php:7 + commands: + - vendor/bin/phpunit --configuration config.xml` }, { name: "Python", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: python - commands: - - pip install -r requirements.txt - - pytest" +steps: +- name: test + image: python + commands: + - pip install -r requirements.txt + - pytest` }, { name: "MySQL", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: mysql - commands: - - sleep 15 - - mysql -u root -h database --execute='SELECT VERSION();' +steps: +- name: test + image: mysql + commands: + - sleep 15 + - mysql -u root -h database --execute="SELECT VERSION();" - services: - - name: database - image: mysql - environment: - MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' - MYSQL_DATABASE: test" +services: +- name: database + image: mysql + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + MYSQL_DATABASE: test` }, { name: "MongoDB", - content: 'kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: ping - image: mongo:4 - commands: - - sleep 5 - - mongo --host mongo --eval "db.version()" +steps: +- name: ping + image: mongo:4 + commands: + - sleep 5 + - mongo --host mongo --eval "db.version()" - services: - - name: mongo - image: mongo:4 - command: [ --smallfiles ]' +services: +- name: mongo + image: mongo:4 + command: [ --smallfiles ]` }, { name: "Clojure", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: clojure - commands: - - lein test" +steps: +- name: test + image: clojure + commands: + - lein test` }, { name: "CouchDB", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: couchdb:2.2 - commands: - - sleep 15 - - curl http://database:5984 +steps: +- name: test + image: couchdb:2.2 + commands: + - sleep 15 + - curl http://database:5984 - services: - - name: database - image: couchdb:2.2" +services: +- name: database + image: couchdb:2.2` }, { name: "Crystal", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: crystallang/crystal - commands: - - shards install - - crystal spec.2" +steps: +- name: test + image: crystallang/crystal + commands: + - shards install + - crystal spec.2` }, { name: "D", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: dlanguage/dmd - commands: - - dub test" +steps: +- name: test + image: dlanguage/dmd + commands: + - dub test` }, { name: "Dart", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: google/dart - commands: - - pub get - - pub run test" +steps: +- name: test + image: google/dart + commands: + - pub get + - pub run test` }, { name: "Docker (dind)", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: docker:dind - volumes: - - name: dockersock - path: /var/run - commands: - - sleep 5 # give docker enough time to start - - docker ps -a +steps: +- name: test + image: docker:dind + volumes: + - name: dockersock + path: /var/run + commands: + - sleep 5 # give docker enough time to start + - docker ps -a - services: - - name: docker - image: docker:dind - privileged: true - volumes: - - name: dockersock - path: /var/run +services: +- name: docker + image: docker:dind + privileged: true + volumes: + - name: dockersock + path: /var/run - volumes: - - name: dockersock - temp: {}" +volumes: +- name: dockersock + temp: {}` }, { name: "Elasticsearch", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: alpine:3.8 - commands: - - apk add curl - - sleep 45 - - curl http://database:9200 +steps: +- name: test + image: alpine:3.8 + commands: + - apk add curl + - sleep 45 + - curl http://database:9200 - services: - - name: database - image: elasticsearch:5-alpine" +services: +- name: database + image: elasticsearch:5-alpine` }, { name: "Elixir", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: elixir:1.5 - commands: - - mix local.rebar --force - - mix local.hex --force - - mix deps.get - - mix test" +steps: +- name: test + image: elixir:1.5 + commands: + - mix local.rebar --force + - mix local.hex --force + - mix deps.get + - mix test` }, { name: "Erlang", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: erlang:21 - commands: - - rebar get-deps - - rebar compile - - rebar skip_deps=true eunit" +steps: +- name: test + image: erlang:21 + commands: + - rebar get-deps + - rebar compile + - rebar skip_deps=true eunit` }, { name: "20.Go (with Gopath)", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - workspace: - base: /go - path: src/hello-world +workspace: + base: /go + path: src/hello-world - steps: - - name: test - image: golang - commands: - - go get - - go test" +steps: +- name: test + image: golang + commands: + - go get + - go test` }, { name: "21.Go (with Modules)", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: golang - commands: - - go test - - go build" +steps: +- name: test + image: golang + commands: + - go test + - go build` }, { name: "Gradle", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: gradle:jdk10 - commands: - - gradle assemble - - gradle check" +steps: +- name: test + image: gradle:jdk10 + commands: + - gradle assemble + - gradle check` }, { name: "Groovy", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: gradle:2.5-jdk8 - commands: - - ./gradlew assemble - - ./gradlew check" +steps: +- name: test + image: gradle:2.5-jdk8 + commands: + - ./gradlew assemble + - ./gradlew check` }, { name: "Haskell", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: haskell - commands: - - cabal install --only-dependencies --enable-tests - - cabal configure --enable-tests - - cabal build - - cabal test" +steps: +- name: test + image: haskell + commands: + - cabal install --only-dependencies --enable-tests + - cabal configure --enable-tests + - cabal build + - cabal test` }, { name: "Haxe", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: haxe - commands: - - haxelib install build.hxml - - haxe build.hxml" +steps: +- name: test + image: haxe + commands: + - haxelib install build.hxml + - haxe build.hxml` }, { name: "MariaDB", - content: 'kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: mariadb - commands: - - sleep 15 - - mysql -u root -h database --execute="SELECT VERSION();" +steps: +- name: test + image: mariadb + commands: + - sleep 15 + - mysql -u root -h database --execute="SELECT VERSION();" - services: - - name: database - image: mariadb - environment: - MYSQL_ALLOW_EMPTY_PASSWORD: "yes" - MYSQL_DATABASE: test' +services: +- name: database + image: mariadb + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + MYSQL_DATABASE: test` }, { name: "Maven", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: maven:3-jdk-10 - commands: - - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V - - mvn test -B" +steps: +- name: test + image: maven:3-jdk-10 + commands: + - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V + - mvn test -B` }, { name: "Memcached", - content: 'kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: ubuntu - commands: - - apt-get update -qq - - apt-get install -y -qq telnet > /dev/null - - (sleep 1; echo "stats"; sleep 2; echo "quit";) | telnet cache 11211 || true +steps: +- name: test + image: ubuntu + commands: + - apt-get update -qq + - apt-get install -y -qq telnet > /dev/null + - (sleep 1; echo "stats"; sleep 2; echo "quit";) | telnet cache 11211 || true - services: - - name: cache - image: memcached:alpine - command: [ -vv ]' +services: +- name: cache + image: memcached:alpine + command: [ -vv ]` }, { name: "Nats", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: ruby:2 - commands: - - gem install nats - - nats-pub -s tcp://nats:4222 greeting 'hello' - - nats-pub -s tcp://nats:4222 greeting 'world' +steps: +- name: test + image: ruby:2 + commands: + - gem install nats + - nats-pub -s tcp://nats:4222 greeting 'hello' + - nats-pub -s tcp://nats:4222 greeting 'world' - services: - - name: nats - image: nats:1.3.0" +services: +- name: nats + image: nats:1.3.0` }, { name: "Node", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: node - commands: - - npm install - - npm test" +steps: +- name: test + image: node + commands: + - npm install + - npm test` }, { name: "Perl", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: perl - commands: - - cpanm --quiet --installdeps --notest . - - perl Build.PL - - ./Build test" +steps: +- name: test + image: perl + commands: + - cpanm --quiet --installdeps --notest . + - perl Build.PL + - ./Build test` }, { name: "Postgres", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: postgres:9-alpine - commands: - - psql -U postgres -d test -h database +steps: +- name: test + image: postgres:9-alpine + commands: + - psql -U postgres -d test -h database - services: - - name: database - image: postgres:9-alpine - environment: - POSTGRES_USER: postgres - POSTGRES_DB: test" +services: +- name: database + image: postgres:9-alpine + environment: + POSTGRES_USER: postgres + POSTGRES_DB: test` }, { name: "Redis", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: redis - commands: - - sleep 5 - - redis-cli -h redis ping - - redis-cli -h redis set FOO bar - - redis-cli -h redis get FOO +steps: +- name: test + image: redis + commands: + - sleep 5 + - redis-cli -h redis ping + - redis-cli -h redis set FOO bar + - redis-cli -h redis get FOO - services: - - name: redis - image: redis" +services: +- name: redis + image: redis` }, { name: "RethinkDB", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: node:9 - commands: - - npm install -s -g recli - - recli -h database -j" + 'r.db("rethinkdb").table("stats")' + +steps: +- name: test + image: node:9 + commands: + - npm install -s -g recli + - recli -h database -j 'r.db("rethinkdb").table("stats")' - "services: - - name: database - image: rethinkdb:2 - command: [ rethinkdb, --bind, all ]" +services: +- name: database + image: rethinkdb:2 + command: [ rethinkdb, --bind, all ]` }, { name: "Rust", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: rust:1.30 - commands: - - cargo build --verbose --all - - cargo test --verbose --all" +steps: +- name: test + image: rust:1.30 + commands: + - cargo build --verbose --all + - cargo test --verbose --all` }, { name: "Swift", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: swift:4 - commands: - - swift build - - swift test" +steps: +- name: test + image: swift:4 + commands: + - swift build + - swift test` }, { name: "Vault", - content: "kind: pipeline - name: default + content: ` +kind: pipeline +name: default - platform: - os: linux - arch: arm64 +platform: + os: linux + arch: arm64 - steps: - - name: test - image: vault:1.0.0-beta2 - environment: - VAULT_ADDR: http://vault:8200 - VAULT_TOKEN: dummy - commands: - - sleep 5 - - vault kv put secret/my-secret my-value=s3cr3t - - vault kv get secret/my-secret +steps: +- name: test + image: vault:1.0.0-beta2 + environment: + VAULT_ADDR: http://vault:8200 + VAULT_TOKEN: dummy + commands: + - sleep 5 + - vault kv put secret/my-secret my-value=s3cr3t + - vault kv get secret/my-secret - services: - - name: vault - image: vault:1.0.0-beta2 - environment: - VAULT_DEV_ROOT_TOKEN_ID: dummy" +services: +- name: vault + image: vault:1.0.0-beta2 + environment: + VAULT_DEV_ROOT_TOKEN_ID: dummy` } ] end From 84854e5c0c1708e3162034b0e7289ba414947580 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 21 Oct 2020 18:12:58 +0800 Subject: [PATCH 278/384] FIX code bug --- lib/tasks/dev_ops_languages.rake | 144 +++++++++++++++---------------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/lib/tasks/dev_ops_languages.rake b/lib/tasks/dev_ops_languages.rake index fdac65cae..f1110ffd1 100644 --- a/lib/tasks/dev_ops_languages.rake +++ b/lib/tasks/dev_ops_languages.rake @@ -95,7 +95,7 @@ steps: }, { name: "R", - content: ` + content: " kind: pipeline name: default @@ -107,12 +107,12 @@ steps: - name: test image: r-base commands: - - R -e 'install.packages(c("package1","package2"))' - - R CMD build .` + - R -e 'install.packages(c('package1','package2'))' + - R CMD build ." }, { name: "Ruby", - content: ` + content: " kind: pipeline name: default @@ -125,11 +125,11 @@ steps: image: ruby commands: - bundle install --jobs=3 --retry=3 - - rake` + - rake" }, { name: "PHP", - content: ` + content: " kind: pipeline name: default @@ -146,11 +146,11 @@ steps: - name: test image: php:7 commands: - - vendor/bin/phpunit --configuration config.xml` + - vendor/bin/phpunit --configuration config.xml" }, { name: "Python", - content: ` + content: " kind: pipeline name: default @@ -163,11 +163,11 @@ steps: image: python commands: - pip install -r requirements.txt - - pytest` + - pytest" }, { name: "MySQL", - content: ` + content: " kind: pipeline name: default @@ -180,18 +180,18 @@ steps: image: mysql commands: - sleep 15 - - mysql -u root -h database --execute="SELECT VERSION();" + - mysql -u root -h database --execute='SELECT VERSION();' services: - name: database image: mysql environment: MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' - MYSQL_DATABASE: test` + MYSQL_DATABASE: test" }, { name: "MongoDB", - content: ` + content: " kind: pipeline name: default @@ -204,16 +204,16 @@ steps: image: mongo:4 commands: - sleep 5 - - mongo --host mongo --eval "db.version()" + - mongo --host mongo --eval 'db.version()' services: - name: mongo image: mongo:4 - command: [ --smallfiles ]` + command: [ --smallfiles ]" }, { name: "Clojure", - content: ` + content: " kind: pipeline name: default @@ -225,11 +225,11 @@ steps: - name: test image: clojure commands: - - lein test` + - lein test" }, { name: "CouchDB", - content: ` + content: " kind: pipeline name: default @@ -246,11 +246,11 @@ steps: services: - name: database - image: couchdb:2.2` + image: couchdb:2.2" }, { name: "Crystal", - content: ` + content: " kind: pipeline name: default @@ -263,11 +263,11 @@ steps: image: crystallang/crystal commands: - shards install - - crystal spec.2` + - crystal spec.2" }, { name: "D", - content: ` + content: " kind: pipeline name: default @@ -279,11 +279,11 @@ steps: - name: test image: dlanguage/dmd commands: - - dub test` + - dub test" }, { name: "Dart", - content: ` + content: " kind: pipeline name: default @@ -296,11 +296,11 @@ steps: image: google/dart commands: - pub get - - pub run test` + - pub run test" }, { name: "Docker (dind)", - content: ` + content: " kind: pipeline name: default @@ -328,11 +328,11 @@ services: volumes: - name: dockersock - temp: {}` + temp: {}" }, { name: "Elasticsearch", - content: ` + content: " kind: pipeline name: default @@ -350,11 +350,11 @@ steps: services: - name: database - image: elasticsearch:5-alpine` + image: elasticsearch:5-alpine" }, { name: "Elixir", - content: ` + content: " kind: pipeline name: default @@ -369,11 +369,11 @@ steps: - mix local.rebar --force - mix local.hex --force - mix deps.get - - mix test` + - mix test" }, { name: "Erlang", - content: ` + content: " kind: pipeline name: default @@ -387,11 +387,11 @@ steps: commands: - rebar get-deps - rebar compile - - rebar skip_deps=true eunit` + - rebar skip_deps=true eunit" }, { name: "20.Go (with Gopath)", - content: ` + content: " kind: pipeline name: default @@ -408,11 +408,11 @@ steps: image: golang commands: - go get - - go test` + - go test" }, { name: "21.Go (with Modules)", - content: ` + content: " kind: pipeline name: default @@ -425,11 +425,11 @@ steps: image: golang commands: - go test - - go build` + - go build" }, { name: "Gradle", - content: ` + content: " kind: pipeline name: default @@ -442,11 +442,11 @@ steps: image: gradle:jdk10 commands: - gradle assemble - - gradle check` + - gradle check" }, { name: "Groovy", - content: ` + content: " kind: pipeline name: default @@ -459,11 +459,11 @@ steps: image: gradle:2.5-jdk8 commands: - ./gradlew assemble - - ./gradlew check` + - ./gradlew check" }, { name: "Haskell", - content: ` + content: " kind: pipeline name: default @@ -478,11 +478,11 @@ steps: - cabal install --only-dependencies --enable-tests - cabal configure --enable-tests - cabal build - - cabal test` + - cabal test" }, { name: "Haxe", - content: ` + content: " kind: pipeline name: default @@ -495,11 +495,11 @@ steps: image: haxe commands: - haxelib install build.hxml - - haxe build.hxml` + - haxe build.hxml" }, { name: "MariaDB", - content: ` + content: " kind: pipeline name: default @@ -512,18 +512,18 @@ steps: image: mariadb commands: - sleep 15 - - mysql -u root -h database --execute="SELECT VERSION();" + - mysql -u root -h database --execute='SELECT VERSION();' services: - name: database image: mariadb environment: MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' - MYSQL_DATABASE: test` + MYSQL_DATABASE: test" }, { name: "Maven", - content: ` + content: " kind: pipeline name: default @@ -536,11 +536,11 @@ steps: image: maven:3-jdk-10 commands: - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V - - mvn test -B` + - mvn test -B" }, { name: "Memcached", - content: ` + content: " kind: pipeline name: default @@ -554,16 +554,16 @@ steps: commands: - apt-get update -qq - apt-get install -y -qq telnet > /dev/null - - (sleep 1; echo "stats"; sleep 2; echo "quit";) | telnet cache 11211 || true + - (sleep 1; echo 'stats'; sleep 2; echo 'quit';) | telnet cache 11211 || true services: - name: cache image: memcached:alpine - command: [ -vv ]` + command: [ -vv ]" }, { name: "Nats", - content: ` + content: " kind: pipeline name: default @@ -581,11 +581,11 @@ steps: services: - name: nats - image: nats:1.3.0` + image: nats:1.3.0" }, { name: "Node", - content: ` + content: " kind: pipeline name: default @@ -598,11 +598,11 @@ steps: image: node commands: - npm install - - npm test` + - npm test" }, { name: "Perl", - content: ` + content: " kind: pipeline name: default @@ -616,11 +616,11 @@ steps: commands: - cpanm --quiet --installdeps --notest . - perl Build.PL - - ./Build test` + - ./Build test" }, { name: "Postgres", - content: ` + content: " kind: pipeline name: default @@ -639,11 +639,11 @@ services: image: postgres:9-alpine environment: POSTGRES_USER: postgres - POSTGRES_DB: test` + POSTGRES_DB: test" }, { name: "Redis", - content: ` + content: " kind: pipeline name: default @@ -662,11 +662,11 @@ steps: services: - name: redis - image: redis` + image: redis" }, { name: "RethinkDB", - content: ` + content: " kind: pipeline name: default @@ -679,16 +679,16 @@ steps: image: node:9 commands: - npm install -s -g recli - - recli -h database -j 'r.db("rethinkdb").table("stats")' + - recli -h database -j 'r.db('rethinkdb').table('stats')' services: - name: database image: rethinkdb:2 - command: [ rethinkdb, --bind, all ]` + command: [ rethinkdb, --bind, all ]" }, { name: "Rust", - content: ` + content: " kind: pipeline name: default @@ -701,11 +701,11 @@ steps: image: rust:1.30 commands: - cargo build --verbose --all - - cargo test --verbose --all` + - cargo test --verbose --all" }, { name: "Swift", - content: ` + content: " kind: pipeline name: default @@ -718,11 +718,11 @@ steps: image: swift:4 commands: - swift build - - swift test` + - swift test" }, { name: "Vault", - content: ` + content: " kind: pipeline name: default @@ -745,7 +745,7 @@ services: - name: vault image: vault:1.0.0-beta2 environment: - VAULT_DEV_ROOT_TOKEN_ID: dummy` + VAULT_DEV_ROOT_TOKEN_ID: dummy" } ] end From 0192fa9f8596636f568f9fab7c0e4be6f5f05fcf Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 21 Oct 2020 18:14:06 +0800 Subject: [PATCH 279/384] FIX bug --- lib/tasks/dev_ops_languages.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/dev_ops_languages.rake b/lib/tasks/dev_ops_languages.rake index f1110ffd1..348fb932d 100644 --- a/lib/tasks/dev_ops_languages.rake +++ b/lib/tasks/dev_ops_languages.rake @@ -10,7 +10,7 @@ namespace :dev_ops_languages do languages.each do |l| content = Base64.encode64 l[:content] - DevOps::Language.create!(name: l[:name], content: content) + Ci::Language.create!(name: l[:name], content: content) end end From 1feb238e8046de3544b9c57c3fe90aac3d389c21 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 22 Oct 2020 17:59:07 +0800 Subject: [PATCH 280/384] ADD educode repo api --- app/services/educoder/client_service.rb | 112 ++++++++++++++++++ .../repository/commits/list_service.rb | 29 +++++ .../repository/entries/get_service.rb | 30 +++++ .../repository/entries/list_service.rb | 39 ++++++ 4 files changed, 210 insertions(+) create mode 100644 app/services/educoder/client_service.rb create mode 100644 app/services/educoder/repository/commits/list_service.rb create mode 100644 app/services/educoder/repository/entries/get_service.rb create mode 100644 app/services/educoder/repository/entries/list_service.rb diff --git a/app/services/educoder/client_service.rb b/app/services/educoder/client_service.rb new file mode 100644 index 000000000..6c5c10d99 --- /dev/null +++ b/app/services/educoder/client_service.rb @@ -0,0 +1,112 @@ +class Educoder::ClientService < ApplicationService + attr_reader :url, :params + + PAGINATE_DEFAULT_PAGE = 1 + PAGINATE_DEFAULT_LIMIT = 20 + + def initialize(options={}) + @url = options[:url] + @params = options[:params] + end + + def post(url, params={}) + puts "[educoder] request params: #{params}" + auth_token = authen_params(params[:token]) + response = conn(auth_token).post do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + render_status(response) + end + + def get(url, params={}) + puts "[educoder] params: #{params}" + conn(api_url(url), params) + end + + def delete(url, params={}) + auth_token = authen_params(params[:token]) + conn(auth_token).delete do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + end + + def patch(url, params={}) + puts "[educoder] request params: #{params}" + auth_token = authen_params(params[:token]) + conn(auth_token).patch do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + end + + def put(url, params={}) + puts "[educoder] put request params: #{params}" + conn(authen_params(params[:token])).put do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + end + + private + def conn(url, hash={}) + par = [] + hash.each do |k,v| + par << "#{k}=#{v}" + end + + uri = URI("#{url}.json?#{par.join('&')}&private_token=#{private_token}") + puts "[educoder] request_url: #{uri}" + response = Net::HTTP.get_response(uri) + puts "[educoder] response code: #{response.code.to_i}" + if response.code.to_i != 200 + puts "======= 接口请求失败!" + raise '接口请求失败.' + return nil + end + JSON.parse(response.body) + end + + def base_url + Rails.application.config_for(:configuration)['educoder']['base_url'] + end + + def domain + Rails.application.config_for(:configuration)['educoder']['main_site'] + end + + def private_token + Rails.application.config_for(:configuration)['educoder']['token'] + end + + def access_key_secret + Gitea.gitea_config[:access_key_secret] + end + + def api_url(url) + [domain, base_url, url].join('/') + end + + def full_url(api_rest, action='post') + url = [api_url, api_rest].join('').freeze + url = action === 'get' ? url : URI.escape(url) + puts "[gitea] request url: #{url}" + return url + end + + + + def authen_params(token) + (token.is_a? String) ? {token: token} : Hash(token) + end + + def render_data(response) + case response.status + when 201, 200 + JSON.parse(response.body) + else + nil + end + end +end diff --git a/app/services/educoder/repository/commits/list_service.rb b/app/services/educoder/repository/commits/list_service.rb new file mode 100644 index 000000000..1a83c2600 --- /dev/null +++ b/app/services/educoder/repository/commits/list_service.rb @@ -0,0 +1,29 @@ +class Educoder::Repository::Commits::ListService < Educoder::ClientService + attr_reader :repo_name, :args + + # ref: The name of the commit/branch/tag. Default the repository’s default branch (usually master) + # repo_name: the name of repository + # Educoder::Repository::Commits::ListService.call('fessf/6hiwcb7o20200917174054') + def initialize(repo_name, **args) + @repo_name = repo_name + @args = {ref: 'master'}.merge(args.compact) + end + + def call + response = get(url, params) + render_result(response) + end + + private + def params + @args.merge(repo_name: repo_name) + end + + def url + "commits".freeze + end + + def render_result(response) + response['commits'] || [] + end +end diff --git a/app/services/educoder/repository/entries/get_service.rb b/app/services/educoder/repository/entries/get_service.rb new file mode 100644 index 000000000..9c4fed92e --- /dev/null +++ b/app/services/educoder/repository/entries/get_service.rb @@ -0,0 +1,30 @@ +class Educoder::Repository::Entries::GetService < Educoder::ClientService + attr_reader :repo_name, :filepath + + # filepath: path of the dir, file, symlink or submodule in the repo + # repo_name: the name of repository + def initialize(repo_name, filepath) + @repo_name = repo_name + @filepath = filepath + end + + def call + get(url, params) + end + + private + def params + Hash.new.merge(repo_name: repo_name, path: filepath) + end + + def url + "file_content".freeze + end + + def render_result(response) + body = JSON.parse(response.body) + if body['status'].to_i === -1 + raise '无权限访问.' + end + end +end diff --git a/app/services/educoder/repository/entries/list_service.rb b/app/services/educoder/repository/entries/list_service.rb new file mode 100644 index 000000000..dd3abea77 --- /dev/null +++ b/app/services/educoder/repository/entries/list_service.rb @@ -0,0 +1,39 @@ +class Educoder::Repository::Entries::ListService < Educoder::ClientService + attr_reader :repo_name, :args + + # ref: The name of the commit/branch/tag. Default the repository’s default branch (usually master) + # repo_name: the name of repository + # args: + # { + # "repo_name": "wmov43ez8/5xahe2t7nv20191022173304", + # "path": 'src' + # } + # Educoder::Repository::Entries::ListService.new('wmov43ez8/5xahe2t7nv20191022173304', {path: 'src'}).call + def initialize(repo_name, args={}) + @repo_name = repo_name + @args = args.compact + end + + def call + get(url, params) + end + + private + def params + @args.merge(repo_name: repo_name) + end + + def url + "repository".freeze + end + + def render_result(response) + body = JSON.parse(response.body) + case response.status + when 200 + body + else + [] + end + end +end From 58f8d606461ba80908f217cfbe02dba0b6d0c459 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 22 Oct 2020 18:00:31 +0800 Subject: [PATCH 281/384] =?UTF-8?q?FIX=20=E7=89=88=E6=9C=AC=E5=BA=93?= =?UTF-8?q?=E5=85=BC=E5=AE=B9euducoder=E5=B9=B3=E5=8F=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/projects_controller.rb | 5 +- app/controllers/repositories_controller.rb | 48 +++++---- app/helpers/projects_helper.rb | 21 +++- app/models/concerns/matchable.rb | 1 + app/queries/projects/list_query.rb | 11 ++- .../projects/_project_detail.json.jbuilder | 8 +- app/views/repositories/_author.json.jbuilder | 12 ++- app/views/repositories/_commit.json.jbuilder | 44 ++++++--- .../repositories/_simple_entry.json.jbuilder | 56 +++++++---- app/views/repositories/entries.json.jbuilder | 97 +++++++++++++------ app/views/repositories/show.json.jbuilder | 6 +- .../repositories/sub_entries.json.jbuilder | 42 +++++--- 12 files changed, 240 insertions(+), 111 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 207dd8ee4..f2bb28ff1 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -10,8 +10,9 @@ class ProjectsController < ApplicationController def index scope = Projects::ListQuery.call(params) - @projects = kaminari_paginate(scope) - @total_count = @projects.total_count + # @projects = kaminari_paginate(scope) + @projects = paginate scope.includes(:project_category, :project_language, :repository, :project_educoder, owner: :user_extension) + @total_count = scope.size end def create diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 6a57ef299..2b35313dc 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -13,7 +13,7 @@ class RepositoriesController < ApplicationController def show @user = current_user @repo = @project.repository - @result = Gitea::Repository::GetService.new(@project.owner, @project.identifier).call + @result = @project.forge? ? Gitea::Repository::GetService.new(@project.owner, @project.identifier).call : nil @project_fork_id = @project.try(:forked_from_project_id) if @project_fork_id.present? @fork_project = Project.find_by(id: @project_fork_id) @@ -27,26 +27,40 @@ class RepositoriesController < ApplicationController def entries @project.increment!(:visits) @project_owner = @project.owner - @entries = Gitea::Repository::Entries::ListService.new(@project_owner, @project.identifier, ref: @ref).call - @entries = @entries.present? ? @entries.sort_by{ |hash| hash['type'] } : [] - @path = Gitea.gitea_config[:domain]+"/#{@project.owner.login}/#{@project.identifier}/raw/branch/#{@ref}/" + + if @project.educoder? + @entries = Educoder::Repository::Entries::ListService.call(@project&.project_educoder.repo_name) + else + @entries = Gitea::Repository::Entries::ListService.new(@project_owner, @project.identifier, ref: @ref).call + @entries = @entries.present? ? @entries.sort_by{ |hash| hash['type'] } : [] + @path = Gitea.gitea_config[:domain]+"/#{@project.owner.login}/#{@project.identifier}/raw/branch/#{@ref}/" + end end def top_counts - @result = Gitea::Repository::GetService.new(@project.owner, @project.identifier).call + @result = @project.educoder? ? nil : Gitea::Repository::GetService.new(@project.owner, @project.identifier).call end def sub_entries file_path_uri = URI.parse(URI.encode(params[:filepath].to_s.strip)) - interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: @ref) - if interactor.success? - result = interactor.result - return @sub_entries = [] if result.is_a?(Hash) && result[:status] == -1 - @sub_entries = result.is_a?(Array) ? result : [result] - @sub_entries = @sub_entries.sort_by{ |hash| hash['type'] } + if @project.educoder? + if params[:type] === 'file' + @sub_entries = Educoder::Repository::Entries::GetService.call(@project&.project_educoder&.repo_name, file_path_uri) + return render_error('该文件暂未开放,敬请期待.') if @sub_entries['status'].to_i === -1 + end + @sub_entries = Educoder::Repository::Entries::ListService.call(@project&.project_educoder&.repo_name, {path: file_path_uri}) else - render_error(interactor.error) + interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: @ref) + if interactor.success? + result = interactor.result + return @sub_entries = [] if result.is_a?(Hash) && result[:status] == -1 + + @sub_entries = result.is_a?(Array) ? result : [result] + @sub_entries = @sub_entries.sort_by{ |hash| hash['type'] } + else + render_error(interactor.error) + end end end @@ -135,8 +149,8 @@ class RepositoriesController < ApplicationController end def get_statistics - @branches_count = Gitea::Repository::Branches::ListService.new(@project.owner, @project.identifier).call&.size - @tags_count = Gitea::Repository::Tags::ListService.new(current_user&.gitea_token, @project.owner.login, @project.identifier).call&.size + @branches_count = @project.educoder? ? 0 : Gitea::Repository::Branches::ListService.new(@project.owner, @project.identifier).call&.size + @tags_count = @project.educoder? ? 0 : Gitea::Repository::Tags::ListService.new(current_user&.gitea_token, @project.owner.login, @project.identifier).call&.size end def get_ref @@ -144,9 +158,9 @@ class RepositoriesController < ApplicationController end def get_latest_commit - latest_commit = project_commits - @latest_commit = latest_commit[:body][0] if latest_commit.present? - @commits_count = latest_commit[:total_count] if latest_commit.present? + latest_commit = @project.educoder? ? nil : project_commits + @latest_commit = latest_commit.present? ? latest_commit[:body][0] : nil + @commits_count = latest_commit.present? ? latest_commit[:total_count] : 0 end def content_params diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index ad8447bd4..625bdfecd 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -29,7 +29,9 @@ module ProjectsHelper end def json_response(project, user) - repo = project.repository + # repo = project.repository + repo = Repository.select(:id).find_by(project: project) + tmp_json = {} unless project.common? tmp_json = tmp_json.merge({ @@ -55,8 +57,9 @@ module ProjectsHelper end tmp_json = tmp_json.merge({ - identifier: project.identifier, + identifier: render_identifier(project), name: project.name, + platform: project.platform, id: project.id, repo_id: repo.id, open_devops: (user.blank? || user.is_a?(AnonymousUser)) ? false : project.open_devops?, @@ -67,7 +70,19 @@ module ProjectsHelper render json: tmp_json end - def render_author(project) + def render_identifier(project) + project.educoder? ? project.project_educoder&.repo_name&.split('/')[1] : project.identifier + end + def render_author(project) + project.educoder? ? project.project_educoder&.repo_name&.split('/')[0] : project.owner.login + end + + def render_educoder_avatar_url(project_educoder) + [Rails.application.config_for(:configuration)['educoder']['main_site'], project_educoder&.image_url].join('/') + end + + def render_avatar_url(owner) + [Rails.application.config_for(:configuration)['platform_url'], 'images', url_to_avatar(owner)].join('/') end end diff --git a/app/models/concerns/matchable.rb b/app/models/concerns/matchable.rb index 943fb5ec4..5c013f951 100644 --- a/app/models/concerns/matchable.rb +++ b/app/models/concerns/matchable.rb @@ -5,6 +5,7 @@ module Matchable scope :with_project_category, ->(category_id) { where(project_category_id: category_id) unless category_id.blank? } scope :with_project_language, ->(language_id) { where(project_language_id: language_id) unless language_id.blank? } scope :with_project_type, ->(project_type) { where(project_type: project_type) if Project.project_types.include?(project_type) } + scope :by_name_or_identifier, ->(search) { where("name like :search or identifier LIKE :search", :search => "%#{search.split(" ").join('|')}%") unless search.blank? } end end diff --git a/app/queries/projects/list_query.rb b/app/queries/projects/list_query.rb index 91a2a7627..04f1d168b 100644 --- a/app/queries/projects/list_query.rb +++ b/app/queries/projects/list_query.rb @@ -10,10 +10,9 @@ class Projects::ListQuery < ApplicationQuery end def call - q = Project.visible.search_project(params[:search]) + q = Project.visible.by_name_or_identifier(params[:search]) - scope = q.result(distinct: true) - .includes(:project_category, :project_language, :repository, owner: :user_extension) + scope = q .with_project_type(params[:project_type]) .with_project_category(params[:category_id]) .with_project_language(params[:language_id]) @@ -21,7 +20,9 @@ class Projects::ListQuery < ApplicationQuery sort = params[:sort_by] || "updated_on" sort_direction = params[:sort_direction] || "desc" - scope = scope.no_anomory_projects.reorder("projects.#{sort} #{sort_direction}") - scope + custom_sort(scope, sort, sort_direction) + + # scope = scope.reorder("projects.#{sort} #{sort_direction}") + # scope end end diff --git a/app/views/projects/_project_detail.json.jbuilder b/app/views/projects/_project_detail.json.jbuilder index 0f655a48d..ed12602ae 100644 --- a/app/views/projects/_project_detail.json.jbuilder +++ b/app/views/projects/_project_detail.json.jbuilder @@ -1,6 +1,6 @@ json.id project.id json.repo_id project&.repository&.id -json.identifier project.identifier +json.identifier render_identifier(project) json.name project.name json.description Nokogiri::HTML(project.description).text json.visits project.visits @@ -17,13 +17,13 @@ json.author do if project.educoder? project_educoder = project.project_educoder json.name project_educoder&.owner - json.login project_educoder#.owner - json.image_url project_educoder.image_url + json.login project_educoder&.repo_name.split('/')[0] + json.image_url render_educoder_avatar_url(project.project_educoder) else user = project.owner json.name user.try(:show_real_name) json.login user.login - json.image_url url_to_avatar(project.owner) + json.image_url render_avatar_url(user) end end diff --git a/app/views/repositories/_author.json.jbuilder b/app/views/repositories/_author.json.jbuilder index 0c2a177c0..326920223 100644 --- a/app/views/repositories/_author.json.jbuilder +++ b/app/views/repositories/_author.json.jbuilder @@ -1,5 +1,11 @@ json.author do - json.login user.login - json.name user.real_name - json.image_url url_to_avatar(user) + if @project.forge? + json.login user.login + json.name user.real_name + json.image_url url_to_avatar(user) + else + json.login @project.project_educoder&.repo_name&.split('/')[0] + json.name @project.project_educoder&.owner + json.image_url @project.project_educoder&.image_url + end end diff --git a/app/views/repositories/_commit.json.jbuilder b/app/views/repositories/_commit.json.jbuilder index 888508839..079473b3d 100644 --- a/app/views/repositories/_commit.json.jbuilder +++ b/app/views/repositories/_commit.json.jbuilder @@ -1,16 +1,34 @@ -json.commit do - json.sha commit['sha'] - # json.url EduSetting.get('host_name') + commit_repository_path(project.repository, commit['sha']) - json.message commit['commit']['message'] - json.author commit['commit']['author'] - json.committer commit['commit']['committer'] - json.timestamp render_unix_time(commit['commit']['committer']['date']) - json.time_from_now time_from_now(commit['commit']['committer']['date']) +if @project.educoder? + json.commit do + json.sha commit[0]['id'] + json.message commit[0]['title'] + json.author {} + json.committer {} + json.timestamp 0 + json.time_from_now commit[0]['time'] + end + json.author do + {} + # json.partial! '/projects/author', user: render_commit_author(commit['author']) + end + json.committer {} end -json.author do - json.partial! 'commit_author', user: render_commit_author(commit['author']) -end -json.committer do - json.partial! 'commit_author', user: render_commit_author(commit['committer']) +if @project.forge? + json.commit do + json.sha commit['sha'] + # json.url EduSetting.get('host_name') + commit_repository_path(project.repository, commit['sha']) + json.message commit['commit']['message'] + json.author commit['commit']['author'] + json.committer commit['commit']['committer'] + json.timestamp render_unix_time(commit['commit']['committer']['date']) + json.time_from_now time_from_now(commit['commit']['committer']['date']) + end + + json.author do + json.partial! 'commit_author', user: render_commit_author(commit['author']) + end + json.committer do + json.partial! 'commit_author', user: render_commit_author(commit['committer']) + end end diff --git a/app/views/repositories/_simple_entry.json.jbuilder b/app/views/repositories/_simple_entry.json.jbuilder index be603d91b..50001d4df 100644 --- a/app/views/repositories/_simple_entry.json.jbuilder +++ b/app/views/repositories/_simple_entry.json.jbuilder @@ -1,18 +1,40 @@ -file_name = entry['name'] -file_type = file_name.to_s.split(".").last -direct_download = download_type(file_type) -image_type = image_type?(file_type) -json.name file_name -json.sha entry['sha'] -json.path entry['path'] -json.type entry['type'] -json.size entry['size'] -json.content entry['content'].present? && !direct_download ? render_decode64_content(entry['content']) : "" -json.target entry['target'] -json.download_url entry['download_url'] -json.direct_download direct_download -json.image_type image_type -json.is_readme_file is_readme_type?(file_name) -if entry['latest_commit'] - json.partial! 'last_commit', entry: entry +if @project.forge? + file_name = entry['name'] + file_type = file_name.to_s.split(".").last + direct_download = download_type(file_type) + image_type = image_type?(file_type) + json.name file_name + json.sha entry['sha'] + json.path entry['path'] + json.type entry['type'] + json.size entry['size'] + json.content entry['content'].present? && !direct_download ? render_decode64_content(entry['content']) : "" + json.target entry['target'] + json.download_url entry['download_url'] + json.direct_download direct_download + json.image_type image_type + json.is_readme_file is_readme_type?(file_name) + if entry['latest_commit'] + json.partial! 'last_commit', entry: entry + end +end + +if @project.educoder? + file_path = params[:filepath].present? ? [params[:filepath], entry['name']].join('/') : entry['name'] + + json.name entry['name'] + json.sha nil + json.path file_path + json.type entry['type'] === 'blob'? 'file' : 'dir' + json.size 0 + json.content nil + json.target nil + json.download_url nil + json.direct_download false + json.image_type false + json.is_readme_file false + if entry['latest_commit'] + # json.partial! 'last_commit', entry: entry + json.partial! 'repositories/simple_entry', locals: { entry: entry } + end end diff --git a/app/views/repositories/entries.json.jbuilder b/app/views/repositories/entries.json.jbuilder index 636845efd..2513294d3 100644 --- a/app/views/repositories/entries.json.jbuilder +++ b/app/views/repositories/entries.json.jbuilder @@ -1,36 +1,71 @@ -json.last_commit do - if @latest_commit - json.partial! 'commit', commit: @latest_commit, project: @project - else - json.nil! +if @project.educoder? + json.last_commit do + if @entries['commits'] + json.partial! 'commit', commit: @entries['commits'], project: @project + else + json.nil! + end end -end -#json.tags_count @tags_count -#json.branches_count @branches_count -#json.commits_count @commits_count -json.zip_url render_zip_url(@project, @ref) -json.tar_url render_tar_url(@project, @ref) -json.entries do - json.array! @entries do |entry| - json.name entry['name'] - json.path entry['path'] - json.sha entry['sha'] - json.type entry['type'] - json.size entry['size'] - content = - if is_readme_type?(entry['name']) - is_readme_file = true - content = Gitea::Repository::Entries::GetService.call(@project_owner, @project.identifier, entry['name'], ref: @ref)['content'] - readme_render_decode64_content(content, @path) - else - is_readme_file = false - entry['content'] + json.commits_count @entries['commit_count'] + json.zip_url @entries['git_url'] + json.tar_url '' + json.entries do + json.array! @entries['trees'] do |entry| + json.name entry['name'] + json.path entry['name'] + json.sha nil + json.type entry['type'] === 'blob'? 'file' : 'dir' + json.size 0 + json.is_readme_file false + json.content nil + json.target nil + json.commit do + json.message entry['title'] + json.time_from_now entry['time'] + json.sha nil + json.created_at_unix nil + json.created_at nil + end + end + end +end + + +if @project.forge? + json.last_commit do + if @latest_commit + json.partial! 'commit', commit: @latest_commit, project: @project + else + json.nil! + end + end + #json.tags_count @tags_count + #json.branches_count @branches_count + #json.commits_count @commits_count + json.zip_url render_zip_url(@project, @ref) + json.tar_url render_tar_url(@project, @ref) + json.entries do + json.array! @entries do |entry| + json.name entry['name'] + json.path entry['path'] + json.sha entry['sha'] + json.type entry['type'] + json.size entry['size'] + content = + if is_readme_type?(entry['name']) + is_readme_file = true + content = Gitea::Repository::Entries::GetService.call(@project_owner, @project.identifier, entry['name'], ref: @ref)['content'] + readme_render_decode64_content(content, @path) + else + is_readme_file = false + entry['content'] + end + json.is_readme_file is_readme_file + json.content content + json.target entry['target'] + if entry['latest_commit'] + json.partial! 'last_commit', entry: entry end - json.is_readme_file is_readme_file - json.content content - json.target entry['target'] - if entry['latest_commit'] - json.partial! 'last_commit', entry: entry end end end diff --git a/app/views/repositories/show.json.jbuilder b/app/views/repositories/show.json.jbuilder index fca2ad5bd..6993abad8 100644 --- a/app/views/repositories/show.json.jbuilder +++ b/app/views/repositories/show.json.jbuilder @@ -1,10 +1,10 @@ -json.identifier @project.identifier +json.identifier render_identifier(@project) json.name @project.name json.project_id @project.id json.repo_id @repo.id json.issues_count @project.issues_count.to_i - @project.pull_requests_count.to_i json.pull_requests_count @project.pull_requests_count -json.project_identifier @project.identifier +json.project_identifier render_identifier(@project) json.praises_count @project.praises_count.to_i json.forked_count @project.forked_count.to_i json.watchers_count @project.watchers_count.to_i @@ -47,4 +47,4 @@ if @result json.private @result['private'] end -json.partial! 'author', locals: { user: @project.owner } +json.partial! 'author' diff --git a/app/views/repositories/sub_entries.json.jbuilder b/app/views/repositories/sub_entries.json.jbuilder index 2032df857..5d94f5d60 100644 --- a/app/views/repositories/sub_entries.json.jbuilder +++ b/app/views/repositories/sub_entries.json.jbuilder @@ -1,16 +1,32 @@ +if @project.forge? + json.last_commit do + if @latest_commit + json.partial! 'commit', commit: @latest_commit, project: @project + else + json.nil! + end + end + #json.tags_count @tags_count + #json.branches_count @branches_count + #json.commits_count @commits_count + json.entries do + json.array! @sub_entries do |entry| + json.partial! 'repositories/simple_entry', locals: { entry: entry } + end + end +end -json.last_commit do - if @latest_commit - json.partial! 'commit', commit: @latest_commit, project: @project - else - json.nil! - end -end -#json.tags_count @tags_count -#json.branches_count @branches_count -#json.commits_count @commits_count -json.entries do - json.array! @sub_entries do |entry| - json.partial! 'repositories/simple_entry', locals: { entry: entry } +if @project.educoder? + json.last_commit do + if @sub_entries['commits'] + json.partial! 'commit', commit: @sub_entries['commits'], project: @project + else + json.nil! + end + end + json.entries do + json.array! @sub_entries['trees'] do |entry| + json.partial! 'repositories/simple_entry', locals: { entry: entry } + end end end From 91c9423c7205be8fd7fca54893cdbae8cfd4c6d2 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 22 Oct 2020 20:12:28 +0800 Subject: [PATCH 282/384] add platform column for projects api --- .../projects/_project_detail.json.jbuilder | 1 + app/views/projects/index.json.jbuilder | 48 ++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/app/views/projects/_project_detail.json.jbuilder b/app/views/projects/_project_detail.json.jbuilder index ed12602ae..fdbd05dfb 100644 --- a/app/views/projects/_project_detail.json.jbuilder +++ b/app/views/projects/_project_detail.json.jbuilder @@ -13,6 +13,7 @@ json.last_update_time render_unix_time(project.updated_on) json.time_ago time_from_now(project.updated_on) json.forked_from_project_id project.forked_from_project_id json.open_devops project.open_devops? +json.platform project.platform json.author do if project.educoder? project_educoder = project.project_educoder diff --git a/app/views/projects/index.json.jbuilder b/app/views/projects/index.json.jbuilder index 28b7df1b3..5556cfe27 100644 --- a/app/views/projects/index.json.jbuilder +++ b/app/views/projects/index.json.jbuilder @@ -1,4 +1,50 @@ json.total_count @total_count json.projects @projects do |project| - json.partial! "/projects/project_detail", project: project + # json.partial! "/projects/project_detail", project: project + json.id project.id + json.repo_id project&.repository&.id + json.identifier render_identifier(project) + json.name project.name + json.description Nokogiri::HTML(project.description).text + json.visits project.visits + json.praises_count project.praises_count.to_i + json.forked_count project.forked_count.to_i + json.is_public project.is_public + json.mirror_url project.repository&.mirror_url + json.type project&.numerical_for_project_type + json.last_update_time render_unix_time(project.updated_on) + json.time_ago time_from_now(project.updated_on) + json.forked_from_project_id project.forked_from_project_id + json.open_devops project.open_devops? + json.platform project.platform + json.author do + if project.educoder? + project_educoder = project.project_educoder + json.name project_educoder&.owner + json.login project_educoder&.repo_name.split('/')[0] + json.image_url render_educoder_avatar_url(project.project_educoder) + else + user = project.owner + json.name user.try(:show_real_name) + json.login user.login + json.image_url render_avatar_url(user) + end + end + + json.category do + if project.project_category.blank? + json.nil! + else + json.id project.project_category.id + json.name project.project_category.name + end + end + json.language do + if project.project_language.blank? + json.nil! + else + json.id project.project_language.id + json.name project.project_language.name + end + end end From bfbe1fdce563892d667e319766fe9ae2aa712579 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 22 Oct 2020 22:16:55 +0800 Subject: [PATCH 283/384] FIX bug --- app/controllers/repositories_controller.rb | 13 ++++++++++++- app/helpers/projects_helper.rb | 4 ++-- app/views/repositories/_simple_entry.json.jbuilder | 2 +- app/views/repositories/show.json.jbuilder | 2 +- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 2b35313dc..ce8de3bfb 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -47,9 +47,20 @@ class RepositoriesController < ApplicationController if @project.educoder? if params[:type] === 'file' @sub_entries = Educoder::Repository::Entries::GetService.call(@project&.project_educoder&.repo_name, file_path_uri) + logger.info "######### sub_entries: #{@sub_entries}" return render_error('该文件暂未开放,敬请期待.') if @sub_entries['status'].to_i === -1 + + tmp_entries = [{ + "content" => @sub_entries['data']['content'], + "type" => "blob" + }] + @sub_entries = { + "trees"=>tmp_entries, + "commits" => [{}] + } + else + @sub_entries = Educoder::Repository::Entries::ListService.call(@project&.project_educoder&.repo_name, {path: file_path_uri}) end - @sub_entries = Educoder::Repository::Entries::ListService.call(@project&.project_educoder&.repo_name, {path: file_path_uri}) else interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: @ref) if interactor.success? diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 625bdfecd..0516b76d8 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -30,7 +30,7 @@ module ProjectsHelper def json_response(project, user) # repo = project.repository - repo = Repository.select(:id).find_by(project: project) + repo = Repository.select(:id, :mirror_url).find_by(project: project) tmp_json = {} unless project.common? @@ -83,6 +83,6 @@ module ProjectsHelper end def render_avatar_url(owner) - [Rails.application.config_for(:configuration)['platform_url'], 'images', url_to_avatar(owner)].join('/') + ['images', url_to_avatar(owner)].join('/') end end diff --git a/app/views/repositories/_simple_entry.json.jbuilder b/app/views/repositories/_simple_entry.json.jbuilder index 50001d4df..91b0e6301 100644 --- a/app/views/repositories/_simple_entry.json.jbuilder +++ b/app/views/repositories/_simple_entry.json.jbuilder @@ -27,7 +27,7 @@ if @project.educoder? json.path file_path json.type entry['type'] === 'blob'? 'file' : 'dir' json.size 0 - json.content nil + json.content entry['content'] json.target nil json.download_url nil json.direct_download false diff --git a/app/views/repositories/show.json.jbuilder b/app/views/repositories/show.json.jbuilder index 6993abad8..80e833ed4 100644 --- a/app/views/repositories/show.json.jbuilder +++ b/app/views/repositories/show.json.jbuilder @@ -47,4 +47,4 @@ if @result json.private @result['private'] end -json.partial! 'author' +json.partial! 'author', locals: { user: @project.owner } From 3f29c09b1bc251164c7669d431dfb6ae36f350c8 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 22 Oct 2020 22:45:05 +0800 Subject: [PATCH 284/384] FIX project category order positoin --- app/controllers/project_categories_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/project_categories_controller.rb b/app/controllers/project_categories_controller.rb index f468cc067..106ff7f22 100644 --- a/app/controllers/project_categories_controller.rb +++ b/app/controllers/project_categories_controller.rb @@ -6,7 +6,7 @@ class ProjectCategoriesController < ApplicationController end def group_list - @project_categories = ProjectCategory.where('projects_count > 0') + @project_categories = ProjectCategory.where('projects_count > 0').order(projects_count: :desc) # projects = Project.no_anomory_projects.visible # @category_group_list = projects.joins(:project_category).group("project_categories.id", "project_categories.name").size end From bf056a15314a08be6689505b9617365008103f1b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 23 Oct 2020 00:07:26 +0800 Subject: [PATCH 285/384] FIX projects page count --- app/controllers/projects_controller.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index f2bb28ff1..7148d53bc 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -12,7 +12,16 @@ class ProjectsController < ApplicationController # @projects = kaminari_paginate(scope) @projects = paginate scope.includes(:project_category, :project_language, :repository, :project_educoder, owner: :user_extension) - @total_count = scope.size + + category_id = params[:category_id] + @total_count = + if category_id.blank? + ps = ProjectStatistic.first + ps.common_projects_count + ps.mirror_projects_count + else + cate = ProjectCategory.find_by(id: category_id) + cate&.projects_count || 0 + end end def create From af6c8efb2b4afd4160c180de9c0445d4f4ed130f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 23 Oct 2020 00:16:41 +0800 Subject: [PATCH 286/384] =?UTF-8?q?FIX=20=E6=9B=B4=E6=94=B9=20educoder?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=A4=B4=E5=83=8F=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/projects_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 0516b76d8..c67af18f5 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -79,7 +79,7 @@ module ProjectsHelper end def render_educoder_avatar_url(project_educoder) - [Rails.application.config_for(:configuration)['educoder']['main_site'], project_educoder&.image_url].join('/') + [Rails.application.config_for(:configuration)['educoder']['cdn_url'], project_educoder&.image_url].join('/') end def render_avatar_url(owner) From abcff440e7e624930db02033bc78af1c2d4b5962 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 23 Oct 2020 00:50:02 +0800 Subject: [PATCH 287/384] ADD index for project_educodes table --- ...2164823_add_index_for_project_id_to_project_educoders.rb | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 db/migrate/20201022164823_add_index_for_project_id_to_project_educoders.rb diff --git a/db/migrate/20201022164823_add_index_for_project_id_to_project_educoders.rb b/db/migrate/20201022164823_add_index_for_project_id_to_project_educoders.rb new file mode 100644 index 000000000..232c80551 --- /dev/null +++ b/db/migrate/20201022164823_add_index_for_project_id_to_project_educoders.rb @@ -0,0 +1,6 @@ +class AddIndexForProjectIdToProjectEducoders < ActiveRecord::Migration[5.2] + def change + add_index :project_educoders, :repo_name + add_index :project_educoders, :project_id + end +end From b784bb97fd684f2c008e408785cf7bab7ae97d4e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 23 Oct 2020 12:25:08 +0800 Subject: [PATCH 288/384] FIX delet some index with projects table --- db/migrate/20201023025821_remove_index_from_projects.rb | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 db/migrate/20201023025821_remove_index_from_projects.rb diff --git a/db/migrate/20201023025821_remove_index_from_projects.rb b/db/migrate/20201023025821_remove_index_from_projects.rb new file mode 100644 index 000000000..783b9587d --- /dev/null +++ b/db/migrate/20201023025821_remove_index_from_projects.rb @@ -0,0 +1,7 @@ +class RemoveIndexFromProjects < ActiveRecord::Migration[5.2] + def change + remove_index :projects, :project_language_id + remove_index :projects, :project_category_id + remove_index :projects, :user_id + end +end From ece6cba4a4e944d35a06c085e0165b0f7772b6e0 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 28 Oct 2020 17:39:00 +0800 Subject: [PATCH 289/384] FIX skip some action --- app/controllers/main_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/main_controller.rb b/app/controllers/main_controller.rb index 965ef7604..7b7468f93 100644 --- a/app/controllers/main_controller.rb +++ b/app/controllers/main_controller.rb @@ -2,7 +2,7 @@ class MainController < ApplicationController protect_from_forgery except: :index skip_before_action :check_sign skip_before_action :user_setup - # skip_before_action :setup_laboratory + skip_before_action :setup_laboratory def first_stamp render :json => { status: 0, message: Time.now.to_i } From 1bc935ffd562a553734ab7ddc8b4f79f17969afd Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 30 Oct 2020 15:47:09 +0800 Subject: [PATCH 290/384] FIX code review and user cache --- app/controllers/application_controller.rb | 8 +- app/controllers/issues_controller.rb | 16 +-- app/controllers/projects_controller.rb | 2 +- app/helpers/projects_helper.rb | 34 +++--- app/helpers/tag_chosen_helper.rb | 141 +++++++++++++++++++++- app/models/project.rb | 13 +- app/views/issues/new.json.jbuilder | 3 +- 7 files changed, 167 insertions(+), 50 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 79ce88d32..a4c17e90d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -385,11 +385,7 @@ class ApplicationController < ActionController::Base end def current_user - if Rails.env.development? - User.current = User.find 1 - else - User.current - end + User.current end ## 默认输出json @@ -745,7 +741,7 @@ class ApplicationController < ActionController::Base namespace = params[:owner] id = params[:repo] || params[:id] - @project = Project.find_with_namespace(namespace, id) + @project, @owner = Project.find_with_namespace(namespace, id) if @project and current_user.can_read_project?(@project) logger.info "###########: has project and can read project" diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index b95f422d0..d6ee5a56a 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -6,7 +6,6 @@ class IssuesController < ApplicationController before_action :check_project_public, only: [:index ,:show, :copy, :index_chosen, :close_issue] before_action :set_issue, only: [:edit, :update, :destroy, :show, :copy, :close_issue, :lock_issue] - before_action :get_branches, only: [:new, :edit] before_action :check_token_enough, only: [:create, :update] include ApplicationHelper @@ -97,8 +96,7 @@ class IssuesController < ApplicationController end def new - @all_branches = get_branches - @issue_chosen = issue_left_chosen(@project, nil) + @issue_chosen = get_associated_data(@project) end def create @@ -150,7 +148,6 @@ class IssuesController < ApplicationController end def edit - # @all_branches = get_branches # @issue_chosen = issue_left_chosen(@project, @issue.id) @cannot_edit_tags = @issue.issue_type=="2" && @issue.status_id == 5 #悬赏任务已解决且关闭的状态下,不能修改 @issue_attachments = @issue.attachments @@ -439,17 +436,6 @@ class IssuesController < ApplicationController tracker_array end - def get_branches - all_branches = [] - get_all_branches = Gitea::Repository::Branches::ListService.new(@user, @project&.repository.try(:identifier)).call - if get_all_branches && get_all_branches.size > 0 - get_all_branches.each do |b| - all_branches.push(b["name"]) - end - end - all_branches - end - def issue_send_params(params) { subject: params[:subject], diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 7148d53bc..4e13539c3 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -44,7 +44,7 @@ class ProjectsController < ApplicationController end def branches - @branches = @project.forge? ? Gitea::Repository::Branches::ListService.new(@project.owner, @project.identifier).call : [] + @branches = @project.forge? ? Gitea::Repository::Branches::ListService.new(@owner, @project.identifier).call : [] end def group_type_list diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index c67af18f5..c00010b2b 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -30,7 +30,7 @@ module ProjectsHelper def json_response(project, user) # repo = project.repository - repo = Repository.select(:id, :mirror_url).find_by(project: project) + repo = Repository.includes(:mirror).select(:id, :mirror_url).find_by(project: project) tmp_json = {} unless project.common? @@ -41,20 +41,6 @@ module ProjectsHelper first_sync: repo.first_sync? }) end - author = - if project.educoder? - { - login: project.project_educoder.owner, - name: project.project_educoder.owner, - image_url: project.project_educoder.image_url - } - else - { - login: project.owner.login, - name: project.owner.real_name, - image_url: url_to_avatar(project.owner) - } - end tmp_json = tmp_json.merge({ identifier: render_identifier(project), @@ -64,12 +50,28 @@ module ProjectsHelper repo_id: repo.id, open_devops: (user.blank? || user.is_a?(AnonymousUser)) ? false : project.open_devops?, type: project.numerical_for_project_type, - author: author + author: render_owner(project) }).compact render json: tmp_json end + def render_owner(project) + if project.educoder? + { + login: project.project_educoder.owner, + name: project.project_educoder.owner, + image_url: project.project_educoder.image_url + } + else + { + login: @owner.login, + name: @owner.real_name, + image_url: url_to_avatar(@owner) + } + end + end + def render_identifier(project) project.educoder? ? project.project_educoder&.repo_name&.split('/')[1] : project.identifier end diff --git a/app/helpers/tag_chosen_helper.rb b/app/helpers/tag_chosen_helper.rb index 75be474f2..afd51170d 100644 --- a/app/helpers/tag_chosen_helper.rb +++ b/app/helpers/tag_chosen_helper.rb @@ -1,4 +1,143 @@ module TagChosenHelper + def get_associated_data(project) + issue_comment_users_array = [] + cost_time_array = [] + all_issues = [] + { + "assign_user": render_cache_collaborators(project), + "tracker": render_cache_trackers, + "issue_status": render_cache_issue_statuses, + "priority": render_cache_issue_priorities, + "issue_version": render_cache_milestones(project), + "start_date": "", + "due_date": "", + "joins_users": issue_comment_users_array, + "cost_time_users": cost_time_array, + # "total_cost_time": Time.at(all_cost_time).utc.strftime('%H h %M min %S s'), + # "be_depended_issues": be_depended_issues_array, + # "depended_issues":depended_issues_array, + # "estimated_hours": issue_info[7], + "done_ratio": render_complete_percentage, + "issue_tag": render_issue_tags(project), + "issue_type": render_issue_species, + "all_issues": all_issues + } + end + + def render_cache_trackers + cache_key = "all_trackers/#{Tracker.maximum('id')}" + + Rails.cache.fetch(cache_key) do + Tracker.select(:id, :name, :position).collect do |event| + { + id: event.id, + name: event.name, + position: event.position, + is_chosen: '0' + } + end + end + end + + def render_cache_issue_statuses + cache_key = "all_issue_statuses/#{IssueStatus.maximum('id')}" + + Rails.cache.fetch(cache_key) do + IssueStatus.select(:id, :name, :position).collect do |event| + { + id: event.id, + name: event.name, + position: event.position, + is_chosen: '0' + } + end + end + end + + def render_cache_issue_priorities + cache_key = "all_issue_priorities/#{IssuePriority.maximum('id')}" + + Rails.cache.fetch(cache_key) do + IssuePriority.select(:id, :name, :position).collect do |event| + { + id: event.id, + name: event.name, + position: event.position, + is_chosen: '0' + } + end + end + end + + def render_complete_percentage + completion_nums = %w(0 10 20 30 40 50 60 70 80 90 100) + completion_nums.collect do |event| + { + id: event.to_i, + name: event + "%", + is_chosen: '0' + } + end + end + + def render_issue_species + species = %W(普通 悬赏) + + species.collect do |event| + { + id: event.to_i + 1, + token: nil, + is_chosen: '0' + } + end + end + + def render_issue_tags(project) + # project.issue_tags.last&.cache_key + cache_key = "all_issue_tags/#{project.issue_tags.maximum('updated_at')}" + + Rails.cache.fetch(cache_key) do + project.issue_tags.select(:id, :name, :color).collect do |event| + { + id: event.id, + name: event.name, + color: event.color, + is_chosen: '0' + } + end + end + end + + def render_cache_milestones(project) + cache_key = "all_milestones/#{project.versions.maximum('updated_on')}" + + Rails.cache.fetch(cache_key) do + project.versions.select(:id, :name, :status).collect do |event| + { + id: event.id, + name: event.name, + status: event.status, + is_chosen: '0' + } + end + end + end + + def render_cache_collaborators(project) + cache_key = "all_collaborators/#{project.members.maximum('created_on')}" + + Rails.cache.fetch(cache_key) do + project.members.includes(:user).collect do |event| + { + id: event.user&.id, + name: event.user&.show_real_name, + avatar_url: url_to_avatar(event.user), + is_chosen: '0' + } + end + end + end + def issue_left_chosen(project,issue_id) issue_info = Array.new(11) @@ -205,4 +344,4 @@ module TagChosenHelper # be_depended_issues_array # end -end \ No newline at end of file +end diff --git a/app/models/project.rb b/app/models/project.rb index 36a7867f5..096466ab9 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -178,18 +178,13 @@ class Project < ApplicationRecord def self.find_with_namespace(namespace_path, identifier) logger.info "########namespace_path: #{namespace_path} ########identifier: #{identifier} " - project = Project.find_by(identifier: identifier) || Project.find_by(identifier: "#{namespace_path}/#{identifier}") + user = User.find_by_login namespace_path + return nil if user.blank? + project = user.projects.find_by(identifier: identifier) || Project.find_by(identifier: "#{namespace_path}/#{identifier}") return nil if project.blank? - if project.forge? - user = User.find_by_login namespace_path - return nil if user.blank? - - project = user.projects.find_by(identifier: identifier) - return nil if project.blank? - end - project + [project, user] end def ci_reactivate? diff --git a/app/views/issues/new.json.jbuilder b/app/views/issues/new.json.jbuilder index f47ce3e79..03c7608ac 100644 --- a/app/views/issues/new.json.jbuilder +++ b/app/views/issues/new.json.jbuilder @@ -1,3 +1,2 @@ json.partial! "commons/success" -json.branches @all_branches -json.issue_chosen @issue_chosen \ No newline at end of file +json.issue_chosen @issue_chosen From 70f7b59349fea0871dfb4b3b29ca70fc4373be83 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 30 Oct 2020 17:20:06 +0800 Subject: [PATCH 291/384] Update search projects api --- app/models/concerns/matchable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/concerns/matchable.rb b/app/models/concerns/matchable.rb index 5c013f951..aa9fbe817 100644 --- a/app/models/concerns/matchable.rb +++ b/app/models/concerns/matchable.rb @@ -5,7 +5,7 @@ module Matchable scope :with_project_category, ->(category_id) { where(project_category_id: category_id) unless category_id.blank? } scope :with_project_language, ->(language_id) { where(project_language_id: language_id) unless language_id.blank? } scope :with_project_type, ->(project_type) { where(project_type: project_type) if Project.project_types.include?(project_type) } - scope :by_name_or_identifier, ->(search) { where("name like :search or identifier LIKE :search", :search => "%#{search.split(" ").join('|')}%") unless search.blank? } + scope :by_name_or_identifier, ->(search) { where("name like :search or identifier LIKE :search", :search => "#{search.split(" ").join('|')}%") unless search.blank? } end end From 2347697e93fc9b2d6de2ee0bc8a6e947027cee1a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 3 Nov 2020 18:37:47 +0800 Subject: [PATCH 292/384] ADD some api * api/v1/repos/{owner}/{repo}/pulls/{number}/commits * api/v1/repos/{owner}/{repo}/pulls/{number}/files * api/v1/repos/{owner}/{repo}/compare/{base}...{head} --- README.md | 329 ++++++++++++++++++ app/controllers/application_controller.rb | 2 +- app/controllers/compare_controller.rb | 15 + app/controllers/pull_requests_controller.rb | 34 +- app/helpers/compare_helper.rb | 2 + .../gitea/pull_request/commits_service.rb | 40 +++ .../gitea/pull_request/files_service.rb | 40 +++ .../repository/commits/compare_service.rb | 38 ++ app/views/compare/index.json.jbuilder | 0 app/views/compare/show.json.jbuilder | 9 + app/views/pull_requests/_commit.json.jbuilder | 13 + .../pull_requests/_diff_file.json.jbuilder | 40 +++ app/views/pull_requests/commits.json.jbuilder | 2 + app/views/pull_requests/files.json.jbuilder | 4 + config/routes.rb | 9 +- 15 files changed, 559 insertions(+), 18 deletions(-) create mode 100644 app/controllers/compare_controller.rb create mode 100644 app/helpers/compare_helper.rb create mode 100644 app/services/gitea/pull_request/commits_service.rb create mode 100644 app/services/gitea/pull_request/files_service.rb create mode 100644 app/services/gitea/repository/commits/compare_service.rb create mode 100644 app/views/compare/index.json.jbuilder create mode 100644 app/views/compare/show.json.jbuilder create mode 100644 app/views/pull_requests/_commit.json.jbuilder create mode 100644 app/views/pull_requests/_diff_file.json.jbuilder create mode 100644 app/views/pull_requests/commits.json.jbuilder create mode 100644 app/views/pull_requests/files.json.jbuilder diff --git a/README.md b/README.md index fae9bdf96..afc548a3d 100644 --- a/README.md +++ b/README.md @@ -2542,6 +2542,335 @@ http://localhost:3000/api//api/repositories/3868/delete_file | jq ``` --- +### 获取pull request文件列表 +``` +GET /api/:owner/:repo/pulls/:id/files.json +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/Jason/repo/1/files.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | +|id |是|int |pull request's id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|files_count |int|文件更改的总数量| +|total_addition |int|添加代码总行数| +|total_deletion |int|删除代码总行数| +|files |array|| +|-- name |string|当前文件名| +|-- old_name |string| 修改之前的文件名称,与name相同的话,说明文件名未更改| +|-- addition |int|文件添加的行数| +|-- deletion |int|文件删除的行数| +|-- type |int|文件类型, 1: 表示该文件只添加了内容,2: 表示该文件内容有修改, 3: 表示文件被删除或者改文件只删除了内容| +|-- isCreated |boolean|当前文件是否为新增文件, true: 是, false: 否| +|-- isDeleted |boolean|当前文件是否被删除, true: 是,false: 否| +|-- isBin |boolean|当前文件是否为二进制文件,true: 是,false: 否| +|-- isLFSFile |boolean|当前文件是否为LFS文件,true: 是,false: 否| +|-- isRenamed |boolean|当前文件是否被重命名,true: 是,false: 否| +|-- sections |array|| +|---- fileName |string|文件名称| +|---- lines |array|| +|------ leftIdx |string|文件变动之前所在行数| +|------ rightIdx |string|文件更改后所在行数| +|------ type |string|文件变更类型,1: 新增,2: 修改, 3: 删除, 4: diff统计信息| +|------ content |string|文件变更的内容| +|------ sectionInfo |object|| +|-------- path |string|文件相对仓库的路径| +|-------- lastLeftIdx |int|| +|-------- lastRightIdx |int|| +|-------- leftHunkSize |int|文件变更之前的行数| +|-------- rightHunkSize |int|文件变更之后的行数(及当前页面编辑器显示的总行数)| +|-------- leftIdx |int|文件变更之前所在行数| +|-------- rightIdx |int|文件变更之后所在行数(即:页面编辑器开始显示的行数)| + + +返回值 +```json +{ + "files_count": 6, + "total_addition": 447, + "total_deletion": 0, + "files": [ + { + "name": "文件.txt", + "old_name": "文件.txt", + "index": 6, + "addition": 2, + "deletion": 0, + "type": 1, + "isCreated": true, + "isDeleted": false, + "isBin": false, + "isLFSFile": false, + "isRenamed": false, + "isSubmodule": false, + "sections": [ + { + "fileName": "文件.txt", + "name": "", + "lines": [ + { + "leftIdx": 0, + "rightIdx": 0, + "type": 4, + "content": "@@ -0,0 +1,2 @@", + "sectionInfo": { + "path": null, + "lastLeftIdx": null, + "lastRightIdx": null, + "leftIdx": 0, + "rightIdx": 0, + "leftHunkSize": null, + "rightHunkSize": null + } + }, + { + "leftIdx": 0, + "rightIdx": 1, + "type": 2, + "content": "+用例图一致性更新", + "sectionInfo": null + }, + { + "leftIdx": 0, + "rightIdx": 2, + "type": 2, + "content": "+工程文件直接上传会有文件缺失,现在压缩后上传", + "sectionInfo": null + } + ] + } + ] + } + ] +} +``` +--- + +### 获取pull request的commits列表 +``` +GET /api/:owner/:repo/pulls/:id/commits.json +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/Jason/repo/1/commits.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | +|id |是|int |pull request's id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|commits_count |int|commits总数量| +|commits |array|| +|-- author |object|项目作者| +|---- login |string|用户login| +|---- name |string|用户姓名| +|---- image_url |string|用户头像| +|-- committer |object|commit提交用户| +|---- login |string|用户login| +|---- name |string|用户姓名| +|---- image_url |string|用户头像| +|-- timestamp |int|commit的unix时间戳| +|-- time_from_now|string|commit’s 提交时间距当前时间的时间值| +|-- message |string|commit说明信息| +|-- sha |string|commit’s sha值| + +返回值 +```json +{ + "commits_count": 1, + "commits": [ + { + "author": { + "id": 36480, + "login": "jasder", + "name": "段甲生", + "image_url": "avatars/User/b" + }, + "committer": { + "id": 36480, + "login": "jasder", + "name": "段甲生", + "image_url": "avatars/User/b" + }, + "timestamp": 1604382982, + "time_from_now": "3小时前", + "message": "add some file\n* Add the tag list page to the release page\n* Apply suggestions from code review\n* Add the tags list view\n* Add the delete tag way on ui\n* Not delete tag and clear message when delete a release\n", + "sha": "8f5faee0d3b3be1b8063e84da0c79dd75327b968" + } + ] +} +``` +--- + +### compare two commits +``` +GET /api/:owner/:repo/compare/{base}...{head}.json +``` +*示例* +``` +curl -X GET \ +http://localhost:3003/api/v1/repos/Jason/test-txt/compare/master...develop | jq + +curl -X GET \ +http://localhost:3003/api/v1/repos/jasder/test-txt/compare/master...Jason/test-txt:develop +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | +|base |是|string |pull request's id | +|head |是|string |pull request's id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|commits_count |int|commits总数量| +|commits |array|| +|-- author |object|项目作者| +|---- login |string|用户login| +|---- name |string|用户姓名| +|---- image_url |string|用户头像| +|-- committer |object|commit提交用户| +|---- login |string|用户login| +|---- name |string|用户姓名| +|---- image_url |string|用户头像| +|-- timestamp |int|commit的unix时间戳| +|-- time_from_now|string|commit’s 提交时间距当前时间的时间值| +|-- message |string|commit说明信息| +|-- sha |string|commit’s sha值| +|diff |array|| +|-- files_count |int|文件更改的总数量| +|-- total_addition |int|添加代码总行数| +|-- total_deletion |int|删除代码总行数| +|-- name |string|当前文件名| +|-- old_name |string| 修改之前的文件名称,与name相同的话,说明文件名未更改| +|-- addition |int|文件添加的行数| +|-- deletion |int|文件删除的行数| +|-- type |int|文件类型, 1: 表示该文件只添加了内容,2: 表示该文件内容有修改, 3: 表示文件被删除或者改文件只删除了内容| +|-- isCreated |boolean|当前文件是否为新增文件, true: 是, false: 否| +|-- isDeleted |boolean|当前文件是否被删除, true: 是,false: 否| +|-- isBin |boolean|当前文件是否为二进制文件,true: 是,false: 否| +|-- isLFSFile |boolean|当前文件是否为LFS文件,true: 是,false: 否| +|-- isRenamed |boolean|当前文件是否被重命名,true: 是,false: 否| +|-- sections |array|| +|---- fileName |string|文件名称| +|---- lines |array|| +|------ leftIdx |string|文件变动之前所在行数| +|------ rightIdx |string|文件更改后所在行数| +|------ type |string|文件变更类型,1: 新增,2: 修改, 3: 删除, 4: diff统计信息| +|------ content |string|文件变更的内容| +|------ sectionInfo |object|| +|-------- path |string|文件相对仓库的路径| +|-------- lastLeftIdx |int|| +|-------- lastRightIdx |int|| +|-------- leftHunkSize |int|文件变更之前的行数| +|-------- rightHunkSize |int|文件变更之后的行数(及当前页面编辑器显示的总行数)| +|-------- leftIdx |int|文件变更之前所在行数| +|-------- rightIdx |int|文件变更之后所在行数(即:页面编辑器开始显示的行数)| + +返回值 +```json +{ + "commits_count": 1, + "commits": [ + { + "author": { + "id": 36480, + "login": "jasder", + "name": "段甲生", + "image_url": "avatars/User/b" + }, + "committer": { + "id": 36480, + "login": "jasder", + "name": "段甲生", + "image_url": "avatars/User/b" + }, + "timestamp": 1604382982, + "time_from_now": "4小时前", + "message": "add some file\n* Add the tag list page to the release page\n* Apply suggestions from code review\n* Add the tags list view\n* Add the delete tag way on ui\n* Not delete tag and clear message when delete a release\n", + "sha": "8f5faee0d3b3be1b8063e84da0c79dd75327b968" + } + ], + "diff": { + "files_count": 6, + "total_addition": 447, + "total_deletion": 0, + "files": [ + { + "name": "build.go", + "old_name": "build.go", + "index": 1, + "addition": 33, + "deletion": 0, + "type": 1, + "isCreated": true, + "isDeleted": false, + "isBin": false, + "isLFSFile": false, + "isRenamed": false, + "isSubmodule": false, + "sections": [ + { + "fileName": "build.go", + "name": "", + "lines": [ + { + "leftIdx": 0, + "rightIdx": 0, + "type": 4, + "content": "@@ -0,0 +1,33 @@", + "sectionInfo": { + "path": "build.go", + "lastLeftIdx": 0, + "lastRightIdx": 0, + "leftIdx": 0, + "rightIdx": 1, + "leftHunkSize": 0, + "rightHunkSize": 33 + } + }, + { + "leftIdx": 0, + "rightIdx": 1, + "type": 2, + "content": "+// Copyright 2020 The Gitea Authors. All rights reserved.", + "sectionInfo": null + } + ] + } + ] + } + ] + } +} +``` +--- ### DevOps相关api diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a4c17e90d..9d6efdcb6 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -759,7 +759,7 @@ class ApplicationController < ActionController::Base end def load_repository - @repository ||= load_project.repository + @repository ||= load_project&.repository end private diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb new file mode 100644 index 000000000..a67dbd92b --- /dev/null +++ b/app/controllers/compare_controller.rb @@ -0,0 +1,15 @@ +class CompareController < ApplicationController + # skip_before_action :require_login + before_action :load_repository + + def index + end + + def show + base_ref = Addressable::URI.unescape(params[:base]) + @ref = head_ref = Addressable::URI.unescape(params[:head]) + @compare_result = Gitea::Repository::Commits::CompareService.call(@owner.login, @project.identifier, base_ref, head_ref) + + # render json: @compare_result + end +end diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index a5a4d81bb..d233fdfce 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -1,9 +1,8 @@ class PullRequestsController < ApplicationController - before_action :require_login, except: [:index, :show] + before_action :require_login, except: [:index, :show, :files, :commits] before_action :load_repository - before_action :set_user, only: [:new, :get_branches] - before_action :find_pull_request, except: [:index, :new, :create, :check_can_merge,:get_branches,:create_merge_infos] - # before_action :get_relatived, only: [:edit] + before_action :find_pull_request, except: [:index, :new, :create, :check_can_merge,:get_branches,:create_merge_infos, :files, :commits] + before_action :load_pull_request, only: [:files, :commits] include TagChosenHelper include ApplicationHelper @@ -24,11 +23,11 @@ class PullRequestsController < ApplicationController end def new - @all_branches = PullRequests::BranchesService.new(@user, @project).call + @all_branches = PullRequests::BranchesService.new(@owner, @project).call @is_fork = @project.forked_from_project_id.present? @projects_names = [{ - project_user_login: @user.try(:login), - project_name: "#{@user.try(:show_real_name)}/#{@repository.try(:identifier)}", + project_user_login: @owner.try(:login), + project_name: "#{@owner.try(:show_real_name)}/#{@repository.try(:identifier)}", project_id: @project.identifier, id: @project.id }] @@ -45,7 +44,7 @@ class PullRequestsController < ApplicationController end def get_branches - branch_result = PullRequests::BranchesService.new(@user, @project).call + branch_result = PullRequests::BranchesService.new(@owner, @project).call render json: branch_result # return json: branch_result end @@ -235,16 +234,19 @@ class PullRequestsController < ApplicationController end - private - def set_user - @user = @project.owner + def files + @files_result = Gitea::PullRequest::FilesService.call(@owner.login, @project.identifier, @pull_request.gpid) + # render json: @files_result end - def set_repository - @repository = @project.repository - @user = @project.owner - normal_status(-1, "仓库不存在") unless @repository.present? - normal_status(-1, "用户不存在") unless @user.present? + def commits + @commits_result = Gitea::PullRequest::CommitsService.call(@owner.login, @project.identifier, @pull_request.gpid) + # render json: @commits_result + end + + private + def load_pull_request + @pull_request = PullRequest.find params[:id] end def find_pull_request diff --git a/app/helpers/compare_helper.rb b/app/helpers/compare_helper.rb new file mode 100644 index 000000000..d920da301 --- /dev/null +++ b/app/helpers/compare_helper.rb @@ -0,0 +1,2 @@ +module CompareHelper +end diff --git a/app/services/gitea/pull_request/commits_service.rb b/app/services/gitea/pull_request/commits_service.rb new file mode 100644 index 000000000..aca2067cc --- /dev/null +++ b/app/services/gitea/pull_request/commits_service.rb @@ -0,0 +1,40 @@ +# List commits on a pull request +class Gitea::PullRequest::CommitsService < Gitea::ClientService + attr_reader :owner, :repo, :pull_number, :token + + # GET /repos/{owner}/{repo}/pulls/{pull_number}/commits + # owner: 用户 + # repo: 仓库名称/标识 + # pull_number: pull request主键id + # eg: + # Gitea::PullRequest::FilesService.call('jasder', 'repo_identifier', 1) + def initialize(owner, repo, pull_number, token=nil) + @owner = owner + @repo = repo + @token = token + @pull_number = pull_number + end + + def call + response = get(url, params) + render_result(response) + end + + private + def params + Hash.new.merge(token: owner) + end + + def url + "/repos/#{owner}/#{repo}/pulls/#{pull_number}/commits".freeze + end + + def render_result(response) + case response.status + when 200 + JSON.parse(response.body) + else + nil + end + end +end diff --git a/app/services/gitea/pull_request/files_service.rb b/app/services/gitea/pull_request/files_service.rb new file mode 100644 index 000000000..9785588e2 --- /dev/null +++ b/app/services/gitea/pull_request/files_service.rb @@ -0,0 +1,40 @@ +# List pull requests files +class Gitea::PullRequest::FilesService < Gitea::ClientService + attr_reader :owner, :repo, :pull_number, :token + + # GET /repos/{owner}/{repo}/pulls/{pull_number}/files + # owner: 用户 + # repo: 仓库名称/标识 + # pull_number: pull request主键id + # eg: + # Gitea::PullRequest::FilesService.call('jasder', 'repo_identifier', 1) + def initialize(owner, repo, pull_number, token=nil) + @owner = owner + @repo = repo + @token = token + @pull_number = pull_number + end + + def call + response = get(url, params) + render_result(response) + end + + private + def params + Hash.new.merge(token: token) + end + + def url + "/repos/#{owner}/#{repo}/pulls/#{pull_number}/files".freeze + end + + def render_result(response) + case response.status + when 200 + JSON.parse(response.body) + else + nil + end + end +end diff --git a/app/services/gitea/repository/commits/compare_service.rb b/app/services/gitea/repository/commits/compare_service.rb new file mode 100644 index 000000000..ea0c648ce --- /dev/null +++ b/app/services/gitea/repository/commits/compare_service.rb @@ -0,0 +1,38 @@ +# Compare two commits +class Gitea::Repository::Commits::CompareService < Gitea::ClientService + attr_reader :owner, :repo, :base, :head, :token + + # sha: the commit hash + # ex: + # Gitea::Repository::Commits::CompareService.call('owner', 'repo_identifier', 'master', 'jasder/repo_identifier:develop') + def initialize(owner, repo, base, head, token=nil) + @token = token + @owner = owner + @base = base + @repo = repo + @head = head + end + + def call + response = get(url, params) + render_result(response) + end + + private + def params + Hash.new.merge(token: token) + end + + def url + "/repos/#{owner}/#{repo}/compare/#{base}...#{head}".freeze + end + + def render_result(response) + case response.status + when 200 + JSON.parse(response.body) + else + {status: -1, message: "#{body['message']}"} + end + end +end diff --git a/app/views/compare/index.json.jbuilder b/app/views/compare/index.json.jbuilder new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/compare/show.json.jbuilder b/app/views/compare/show.json.jbuilder new file mode 100644 index 000000000..2db2a6da0 --- /dev/null +++ b/app/views/compare/show.json.jbuilder @@ -0,0 +1,9 @@ +json.commits_count @compare_result['Commits']&.size +json.commits @compare_result['Commits'], partial: 'pull_requests/commit', as: :commit + +json.diff do + json.files_count @compare_result['Diff']['NumFiles'] + json.total_addition @compare_result['Diff']['TotalAddition'] + json.total_deletion @compare_result['Diff']['TotalDeletion'] + json.files @compare_result['Diff']['Files'], partial: 'pull_requests/diff_file', as: :file +end diff --git a/app/views/pull_requests/_commit.json.jbuilder b/app/views/pull_requests/_commit.json.jbuilder new file mode 100644 index 000000000..023c2f302 --- /dev/null +++ b/app/views/pull_requests/_commit.json.jbuilder @@ -0,0 +1,13 @@ +json.author do + author = User.find_by(login: commit['Author']['Name']) + json.partial! 'repositories/commit_author', locals: { user: author } +end + +json.committer do + author = User.find_by(login: commit['Committer']['Name']) + json.partial! 'repositories/commit_author', locals: { user: author } +end +json.timestamp render_unix_time(commit['Committer']['When']) +json.time_from_now time_from_now(commit['Committer']['When']) +json.message commit['CommitMessage'] +json.sha commit['Sha'] diff --git a/app/views/pull_requests/_diff_file.json.jbuilder b/app/views/pull_requests/_diff_file.json.jbuilder new file mode 100644 index 000000000..6efea4382 --- /dev/null +++ b/app/views/pull_requests/_diff_file.json.jbuilder @@ -0,0 +1,40 @@ +json.name file['Name'] +json.old_name file['OldName'] +json.index file['Index'] +json.addition file['Addition'] +json.deletion file['Deletion'] +json.type file['Type'] +json.isCreated file['IsCreated'] +json.isDeleted file['IsDeleted'] +json.isBin file['IsBin'] +json.isLFSFile file['IsLFSFile'] +json.isRenamed file['IsRenamed'] +json.isSubmodule file['IsSubmodule'] +json.isLFSFile file['IsLFSFile'] +json.sections do + json.array! file['Sections'] do |section| + json.fileName section['FileName'] + json.name section['Name'] + json.lines do + json.array! section['Lines'] do |line| + json.leftIdx line['LeftIdx'] + json.rightIdx line['RightIdx'] + json.type line['Type'] + json.content line['Content'] + json.sectionInfo do + if line['SectionInfo'].blank? + json.nil! + else + json.path line['SectionInfo']['Path'] + json.lastLeftIdx line['SectionInfo']['LastLeftIdx'] + json.lastRightIdx line['SectionInfo']['LastRightIdx'] + json.leftIdx line['SectionInfo']['LeftIdx'] + json.rightIdx line['SectionInfo']['RightIdx'] + json.leftHunkSize line['SectionInfo']['LeftHunkSize'] + json.rightHunkSize line['SectionInfo']['RightHunkSize'] + end + end + end + end + end +end diff --git a/app/views/pull_requests/commits.json.jbuilder b/app/views/pull_requests/commits.json.jbuilder new file mode 100644 index 000000000..57ffa726e --- /dev/null +++ b/app/views/pull_requests/commits.json.jbuilder @@ -0,0 +1,2 @@ +json.commits_count @commits_result.size +json.commits @commits_result, partial: 'commit', as: :commit diff --git a/app/views/pull_requests/files.json.jbuilder b/app/views/pull_requests/files.json.jbuilder new file mode 100644 index 000000000..744f70c6c --- /dev/null +++ b/app/views/pull_requests/files.json.jbuilder @@ -0,0 +1,4 @@ +json.files_count @files_result['NumFiles'] +json.total_addition @files_result['TotalAddition'] +json.total_deletion @files_result['TotalDeletion'] +json.files @files_result['Files'], partial: 'diff_file', as: :file diff --git a/config/routes.rb b/config/routes.rb index caa931c31..163eb2d2e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,5 @@ Rails.application.routes.draw do - + require 'sidekiq/web' require 'admin_constraint' @@ -337,11 +337,18 @@ Rails.application.routes.draw do end end + # compare + resources :compare, only: [:index, :create] + get '/compare/:base...:head' => 'compare#show', :as => 'compare', + :constraints => { base: /.+/, head: /.+/ } + resources :pull_requests, :path => :pulls, except: [:destroy] do member do post :pr_merge # post :check_merge post :refuse_merge + get :files + get :commits end collection do post :check_can_merge From cfb794c94fb8814b608835ae9372acd93f9d986f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 4 Nov 2020 10:09:49 +0800 Subject: [PATCH 293/384] FIX bug --- app/views/compare/show.json.jbuilder | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/views/compare/show.json.jbuilder b/app/views/compare/show.json.jbuilder index 2db2a6da0..775efa757 100644 --- a/app/views/compare/show.json.jbuilder +++ b/app/views/compare/show.json.jbuilder @@ -2,8 +2,12 @@ json.commits_count @compare_result['Commits']&.size json.commits @compare_result['Commits'], partial: 'pull_requests/commit', as: :commit json.diff do - json.files_count @compare_result['Diff']['NumFiles'] - json.total_addition @compare_result['Diff']['TotalAddition'] - json.total_deletion @compare_result['Diff']['TotalDeletion'] - json.files @compare_result['Diff']['Files'], partial: 'pull_requests/diff_file', as: :file + if @compare_result['Diff'].blank? + json.nil! + else + json.files_count @compare_result['Diff']['NumFiles'] + json.total_addition @compare_result['Diff']['TotalAddition'] + json.total_deletion @compare_result['Diff']['TotalDeletion'] + json.files @compare_result['Diff']['Files'], partial: 'pull_requests/diff_file', as: :file + end end From 58d8c911a8603a3b4e10389f6e2b56999f20c649 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 4 Nov 2020 11:21:51 +0800 Subject: [PATCH 294/384] ADD format time method --- app/helpers/repositories_helper.rb | 10 ++++++++++ app/views/pull_requests/_commit.json.jbuilder | 1 + app/views/repositories/_last_commit.json.jbuilder | 3 +-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index a845b70c5..10ad1377e 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -62,4 +62,14 @@ module RepositoriesHelper return content end + + # unix_time values for example: 1604382982 + def render_format_time_with_unix(unix_time) + Time.at(unix_time).strftime("%Y-%m-%d %H:%M") + end + + # date for example: 2020-11-01T19:57:27+08:00 + def render_format_time_with_date(date) + date.to_time.strftime("%Y-%m-%d %H:%M") + end end diff --git a/app/views/pull_requests/_commit.json.jbuilder b/app/views/pull_requests/_commit.json.jbuilder index 023c2f302..0b7db5893 100644 --- a/app/views/pull_requests/_commit.json.jbuilder +++ b/app/views/pull_requests/_commit.json.jbuilder @@ -9,5 +9,6 @@ json.committer do end json.timestamp render_unix_time(commit['Committer']['When']) json.time_from_now time_from_now(commit['Committer']['When']) +json.created_at render_format_time_with_date(commit['Committer']['When']) json.message commit['CommitMessage'] json.sha commit['Sha'] diff --git a/app/views/repositories/_last_commit.json.jbuilder b/app/views/repositories/_last_commit.json.jbuilder index 9d6bbe345..56823b770 100644 --- a/app/views/repositories/_last_commit.json.jbuilder +++ b/app/views/repositories/_last_commit.json.jbuilder @@ -1,8 +1,7 @@ -created_at = Time.at(entry['latest_commit']['created_at'].to_i).strftime("%Y-%m-%d %H:%M") json.commit do json.message entry['latest_commit']['message'] json.sha entry['latest_commit']['sha'] - json.created_at created_at + json.created_at render_format_time_with_unix(entry['latest_commit']['created_at'].to_i) json.time_from_now time_from_now(created_at) json.created_at_unix entry['latest_commit']['created_at'] end From 5d84df064a9ceb643c66dfe77bf1fc8176a0876a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 4 Nov 2020 14:07:53 +0800 Subject: [PATCH 295/384] ADD some columns for pull --- ...8_add_commits_count_and_files_count_to_pull_requests.rb | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 db/migrate/20201104034658_add_commits_count_and_files_count_to_pull_requests.rb diff --git a/db/migrate/20201104034658_add_commits_count_and_files_count_to_pull_requests.rb b/db/migrate/20201104034658_add_commits_count_and_files_count_to_pull_requests.rb new file mode 100644 index 000000000..f84da29fe --- /dev/null +++ b/db/migrate/20201104034658_add_commits_count_and_files_count_to_pull_requests.rb @@ -0,0 +1,7 @@ +class AddCommitsCountAndFilesCountToPullRequests < ActiveRecord::Migration[5.2] + def change + add_column :pull_requests, :comments_count, :integer, default: 0, comment: 'number of comments for pull request' + add_column :pull_requests, :commits_count, :integer, default: 0, comment: 'number of git commits for pull request' + add_column :pull_requests, :files_count, :integer, default: 0, comment: 'number of git change files for pull request' + end +end From 0fe0f8a38bbe71f8e1f58354daf534fdd7d91420 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 4 Nov 2020 14:08:34 +0800 Subject: [PATCH 296/384] ADD some fileds for pull api --- app/controllers/pull_requests_controller.rb | 4 +++- app/views/pull_requests/edit.json.jbuilder | 3 +++ app/views/pull_requests/show.json.jbuilder | 8 +++----- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index d233fdfce..1d89a2031 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -65,7 +65,9 @@ class PullRequestsController < ApplicationController project_id: @project.id, issue_id: pull_issue.id, fork_project_id: params[:fork_project_id], - is_original: params[:is_original] + is_original: params[:is_original], + files_count: params[:files_count] || 0, + commits_count: params[:commits_count] || 0 } local_requests = PullRequest.new(@local_params.merge(pr_params)) if local_requests.save diff --git a/app/views/pull_requests/edit.json.jbuilder b/app/views/pull_requests/edit.json.jbuilder index 2e91aa530..c6f41559c 100644 --- a/app/views/pull_requests/edit.json.jbuilder +++ b/app/views/pull_requests/edit.json.jbuilder @@ -9,3 +9,6 @@ json.project_login @project.owner.try(:login) json.extract! @pull_request, :id, :title, :body, :milestone,:head,:base,:is_original json.extract! @issue, :assigned_to_id, :fixed_version_id, :priority_id json.issue_tag_ids @issue&.issue_tags_value&.split(",") +json.commits_count @pull_request.commits_count +json.files_count @pull_request.files_count +json.comments_count @pull_request.comments_count diff --git a/app/views/pull_requests/show.json.jbuilder b/app/views/pull_requests/show.json.jbuilder index b525d5438..61bbc9159 100644 --- a/app/views/pull_requests/show.json.jbuilder +++ b/app/views/pull_requests/show.json.jbuilder @@ -1,6 +1,9 @@ json.partial! "commons/success" json.project_name @project.name json.pr_time time_from_now(@pull_request.updated_at) +json.commits_count @pull_request.commits_count +json.files_count @pull_request.files_count +json.comments_count @pull_request.comments_count json.pull_request do json.extract! @pull_request, :id,:base, :head, :status,:fork_project_id, :is_original @@ -24,8 +27,3 @@ json.issue do json.version @issue.version.try(:name) json.issue_tags @issue.get_issue_tags end - - - - - From c85ad6444da03f1dcaaeb700134ad6574b2c1c1f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 4 Nov 2020 15:03:21 +0800 Subject: [PATCH 297/384] FIX code bug --- app/views/repositories/_last_commit.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/repositories/_last_commit.json.jbuilder b/app/views/repositories/_last_commit.json.jbuilder index 56823b770..3c2184637 100644 --- a/app/views/repositories/_last_commit.json.jbuilder +++ b/app/views/repositories/_last_commit.json.jbuilder @@ -2,6 +2,6 @@ json.commit do json.message entry['latest_commit']['message'] json.sha entry['latest_commit']['sha'] json.created_at render_format_time_with_unix(entry['latest_commit']['created_at'].to_i) - json.time_from_now time_from_now(created_at) + json.time_from_now time_from_now(render_format_time_with_unix(entry['latest_commit']['created_at'].to_i)) json.created_at_unix entry['latest_commit']['created_at'] end From 9438bf5cd134f5e9521cc55cf3c80c3d04726fd0 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 6 Nov 2020 11:01:29 +0800 Subject: [PATCH 298/384] FIX routes bug --- app/controllers/compare_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index a67dbd92b..e5e61598e 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -7,7 +7,7 @@ class CompareController < ApplicationController def show base_ref = Addressable::URI.unescape(params[:base]) - @ref = head_ref = Addressable::URI.unescape(params[:head]) + @ref = head_ref = Addressable::URI.unescape(params[:head]&.split('.json')[0]) @compare_result = Gitea::Repository::Commits::CompareService.call(@owner.login, @project.identifier, base_ref, head_ref) # render json: @compare_result From 181bb05d4a280329e2971cb38caa1d9169224374 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 6 Nov 2020 15:21:27 +0800 Subject: [PATCH 299/384] FIX check pr can merge --- app/controllers/pull_requests_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 1d89a2031..45b52c7b1 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -223,11 +223,11 @@ class PullRequestsController < ApplicationController elsif target_head === target_base && !is_original normal_status(-2, "分支内容相同,无需创建合并请求") else - can_merge = @project&.pull_requests.where(user_id: current_user&.id, head: target_head, base: target_base, status: 0, is_original: is_original, fork_project_id: params[:fork_project_id]) + can_merge = @project&.pull_requests.where(head: target_head, base: target_base, status: 0, is_original: is_original, fork_project_id: params[:fork_project_id]) if can_merge.present? render json: { status: -2, - message: "在这些分支之间的合并请求已存在:#{can_merge.first.try(:title)}", + message: "在这些分支之间的合并请求已存在:#{can_merge.first.try(:title)}", } else normal_status(0, "可以合并") From a8c3328bd668f2e92bef515e699db2e65c022c39 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 6 Nov 2020 17:23:14 +0800 Subject: [PATCH 300/384] ADD get a commit api --- README.md | 201 +++++------------- app/controllers/repositories_controller.rb | 5 +- .../gitea/repository/commits/get_service.rb | 10 +- app/views/repositories/commit.json.jbuilder | 30 +-- 4 files changed, 74 insertions(+), 172 deletions(-) diff --git a/README.md b/README.md index afc548a3d..3a9b40389 100644 --- a/README.md +++ b/README.md @@ -1825,18 +1825,19 @@ http://localhost:3000/api/repositories/89/commits.json | jq ## 获取某个提交记录(包含diff) ``` -GET /api/repositories/:id/commits/:sha +GET /api/:owner/:repo/commits/:sha ``` *示例* ``` curl -X GET \ -http://localhost:3000/api/repositories/5845/commits/b0c4a4a1487d53acebf2addc544b29938cad12df.json | jq +http://localhost:3000/api/jasder/repo/commits/b0c4a4a1487d53acebf2addc544b29938cad12df.json | jq ``` *请求参数说明:* |参数名|必选|类型|说明| |-|-|-|-| -|id |是|int |仓库repository的id | +|owner |是|string |仓库拥有者 | +|repo |是|string |仓库的identifier值 | |sha |否|string |git的ref或者是提交记录commit的sha标识 | @@ -1909,161 +1910,77 @@ http://localhost:3000/api/repositories/5845/commits/b0c4a4a1487d53acebf2addc544b 返回值 ``` { - "additions": 243, - "deletions": 32, - "sha": "c6c17ad47d6dbe4369d559847197b37b4090a46e", - "url": "http://localhost:3000/api/repositories/5845/commits/c6c17ad47d6dbe4369d559847197b37b4090a46e.json", + "files_count": 6, + "total_addition": 447, + "total_deletion": 0, "commit": { + "sha": "8f5faee0d3b3be1b8063e84da0c79dd75327b968", + "message": "add some file\n* Add the tag list page to the release page\n* Apply suggestions from code review\n* Add the tags list view\n* Add the delete tag way on ui\n* Not delete tag and clear message when delete a release\n", "author": { - "name": "GitHub", - "email": "noreply@github.com", - "date": "2020-05-20T20:15:27+08:00" + "name": "Jasder", + "email": "2053003901@@qq.com", + "date": "2020-11-03T13:56:22+08:00" }, "committer": { - "name": "GitHub", - "email": "noreply@github.com", - "date": "2020-05-20T20:15:27+08:00" - } + "name": "Jasder", + "email": "2053003901@@qq.com", + "date": "2020-11-03T13:56:22+08:00" + }, + "timestamp": 1604382982, + "time_from_now": "3天前" }, "author": null, "committer": null, "parents": [ { - "sha": "c8b8cfd85e375ad376833d04b9ca499bf9da355b", - "url": "http://localhost:3003//api/repositories/intelligent-test-platform/commits/c8b8cfd85e375ad376833d04b9ca499bf9da355b" + "sha": "c7f5b90725f30d8ad840a026773f9df92debc3af" }, - { - "sha": "b0c4a4a1487d53acebf2addc544b29938cad12df", - "url": "http://localhost:3003//api/repositories/intelligent-test-platform/commits/b0c4a4a1487d53acebf2addc544b29938cad12df" - } - ], "files": [ { - "Name": "Dockerfile", - "OldName": "Dockerfile", - "Index": 1, - "Addition": 11, - "Deletion": 0, - "Type": 1, - "IsCreated": true, - "IsDeleted": false, - "IsBin": false, - "IsLFSFile": false, - "IsRenamed": false, - "IsSubmodule": false, - "Sections": [ + "name": "build.go", + "old_name": "build.go", + "index": 1, + "addition": 33, + "deletion": 0, + "type": 1, + "isCreated": true, + "isDeleted": false, + "isBin": false, + "isLFSFile": false, + "isRenamed": false, + "isSubmodule": false, + "sections": [ { - "Name": "", - "Lines": [ + "fileName": "build.go", + "name": "", + "lines": [ { - "LeftIdx": 0, - "RightIdx": 0, - "Type": 4, - "Content": "@@ -0,0 +1,11 @@", - "Comments": null, - "SectionInfo": { - "Path": "Dockerfile", - "LastLeftIdx": 0, - "LastRightIdx": 0, - "LeftIdx": 0, - "RightIdx": 1, - "LeftHunkSize": 0, - "RightHunkSize": 11 + "leftIdx": 0, + "rightIdx": 0, + "type": 4, + "content": "@@ -0,0 +1,33 @@", + "sectionInfo": { + "path": "build.go", + "lastLeftIdx": 0, + "lastRightIdx": 0, + "leftIdx": 0, + "rightIdx": 1, + "leftHunkSize": 0, + "rightHunkSize": 33 } }, { - "LeftIdx": 0, - "RightIdx": 1, - "Type": 2, - "Content": "+FROM adoptopenjdk/maven-openjdk8:latest", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 2, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 3, - "Type": 2, - "Content": "+ADD ./target/markov-demo-0.0.1-SNAPSHOT.jar /usr/local/markov-demo-0.0.1-SNAPSHOT.jar", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 4, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 5, - "Type": 2, - "Content": "+# Add docker-compose-wait tool -------------------", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 6, - "Type": 2, - "Content": "+ENV WAIT_VERSION 2.7.2", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 7, - "Type": 2, - "Content": "+ADD https://github.com/ufoscout/docker-compose-wait/releases/download/$WAIT_VERSION/wait /wait", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 8, - "Type": 2, - "Content": "+RUN chmod +x /wait", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 9, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 10, - "Type": 2, - "Content": "+EXPOSE 8080", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 11, - "Type": 2, - "Content": "+ENTRYPOINT [ \"java\", \"-jar\", \"/usr/local/markov-demo-0.0.1-SNAPSHOT.jar\" ]", - "Comments": null, - "SectionInfo": null + "leftIdx": 0, + "rightIdx": 1, + "type": 2, + "content": "+// Copyright 2020 The Gitea Authors. All rights reserved.", + "sectionInfo": null } ] } - ], - "IsIncomplete": false + ] } + ] } ``` --- @@ -2549,7 +2466,7 @@ GET /api/:owner/:repo/pulls/:id/files.json *示例* ``` curl -X GET \ -http://localhost:3000/api/Jason/repo/1/files.json | jq +http://localhost:3000/api/Jason/repo/pulls/1/files.json | jq ``` *请求参数说明:* @@ -2730,10 +2647,10 @@ GET /api/:owner/:repo/compare/{base}...{head}.json *示例* ``` curl -X GET \ -http://localhost:3003/api/v1/repos/Jason/test-txt/compare/master...develop | jq +http://localhost:3000/api/Jason/test-txt/compare/master...develop | jq curl -X GET \ -http://localhost:3003/api/v1/repos/jasder/test-txt/compare/master...Jason/test-txt:develop +http://localhost:3000/api/ysfns/test-txt/compare/master...Jason/test-txt:develop ``` *请求参数说明:* @@ -2782,7 +2699,7 @@ http://localhost:3003/api/v1/repos/jasder/test-txt/compare/master...Jason/test-t |---- lines |array|| |------ leftIdx |string|文件变动之前所在行数| |------ rightIdx |string|文件更改后所在行数| -|------ type |string|文件变更类型,1: 新增,2: 修改, 3: 删除, 4: diff统计信息| +|------ type |string|文件变更类型,1: 内容未改动,2: 添加, 3: 删除, 4: diff统计信息| |------ content |string|文件变更的内容| |------ sectionInfo |object|| |-------- path |string|文件相对仓库的路径| @@ -2791,7 +2708,7 @@ http://localhost:3003/api/v1/repos/jasder/test-txt/compare/master...Jason/test-t |-------- leftHunkSize |int|文件变更之前的行数| |-------- rightHunkSize |int|文件变更之后的行数(及当前页面编辑器显示的总行数)| |-------- leftIdx |int|文件变更之前所在行数| -|-------- rightIdx |int|文件变更之后所在行数(即:页面编辑器开始显示的行数)| +|-------- rightIdx |int|文件变更之后所在行数| 返回值 ```json diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index ce8de3bfb..e44f4f24b 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -82,11 +82,12 @@ class RepositoriesController < ApplicationController end def commit - @commit = Gitea::Repository::Commits::GetService.new(@repository.user.login, @repository.identifier, params[:sha], current_user.gitea_token).call + @commit = Gitea::Repository::Commits::GetService.call(@owner.login, @repository.identifier, params[:sha], current_user.gitea_token) + @commit_diff = Gitea::Repository::Commits::GetService.call(@owner.login, @repository.identifier, params[:sha], current_user.gitea_token, {diff: true}) end def tags - @tags = Gitea::Repository::Tags::ListService.new(current_user&.gitea_token, @project.owner.login, @project.identifier, {page: params[:page], limit: params[:limit]}).call + @tags = Gitea::Repository::Tags::ListService.call(current_user&.gitea_token, @project.owner.login, @project.identifier, {page: params[:page], limit: params[:limit]}) end def edit diff --git a/app/services/gitea/repository/commits/get_service.rb b/app/services/gitea/repository/commits/get_service.rb index 019658d1f..caee29f55 100644 --- a/app/services/gitea/repository/commits/get_service.rb +++ b/app/services/gitea/repository/commits/get_service.rb @@ -1,16 +1,16 @@ # Get a single commit from a repository class Gitea::Repository::Commits::GetService < Gitea::ClientService - attr_reader :token, :owner, :repo, :sha, :custom + attr_reader :token, :owner, :repo, :sha, :hash # sha: the commit hash # ex: Gitea::Repository::Commits::GetService.new(@repo.user.login, repo.identifier, params[:sha], current_user.gitea_token) # TODO custom参数用于判断调用哪个api - def initialize(owner, repo, sha, token, custom=false) + def initialize(owner, repo, sha, token, hash={}) @token = token @owner = owner @sha = sha @repo = repo - @custom = custom + @hash = hash end def call @@ -24,10 +24,10 @@ class Gitea::Repository::Commits::GetService < Gitea::ClientService end def url - if custom + if hash[:diff] # TODO # 平台自己编写的gitea接口,后续可能会通过提交pr的形式合并到gitea原有的接口上 - "/repos/#{owner}/#{repo}/commits/diff/#{sha}".freeze + "/repos/#{owner}/#{repo}/commits/#{sha}/diff".freeze else "/repos/#{owner}/#{repo}/git/commits/#{sha}".freeze end diff --git a/app/views/repositories/commit.json.jbuilder b/app/views/repositories/commit.json.jbuilder index 8901cad3c..469357367 100644 --- a/app/views/repositories/commit.json.jbuilder +++ b/app/views/repositories/commit.json.jbuilder @@ -1,27 +1,11 @@ -json.key_format! camelize: :lower -json.additions @commit['commit_diff']['TotalAddition'] -json.deletions @commit['commit_diff']['TotalDeletion'] -json.sha @commit['sha'] -json.url request.url -json.commit do - @commit['commit'].delete('url') - json.author @commit['commit']['author'] - json.committer @commit['commit']['committer'] - json.message @commit['commit']['message'] - json.tree do - @commit['commit']['tree']['sha'] - end -end -json.author do - json.partial! 'commit_author', user: render_commit_author(@commit['author']) -end -json.committer do - json.partial! 'commit_author', user: render_commit_author(@commit['committer']) -end +# json.key_format! camelize: :lower +json.files_count @commit_diff['NumFiles'] +json.total_addition @commit_diff['TotalAddition'] +json.total_deletion @commit_diff['TotalDeletion'] +json.files @commit_diff['Files'], partial: 'pull_requests/diff_file', as: :file +json.partial! 'commit', commit: @commit, project: @project json.parents @commit['parents'] do |parent| json.sha parent['sha'] - json.url EduSetting.get('host_name') + commit_repository_path(@repo, parent['sha']) + # json.url EduSetting.get('host_name') + commit_repository_path(@repo, parent['sha']) end - -json.files @commit['commit_diff']['Files'] From 6b505a34cba446172cbfedaa5f752afc317421a4 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 6 Nov 2020 17:29:44 +0800 Subject: [PATCH 301/384] Update README.md --- README.md | 65 +------------------------------------------------------ 1 file changed, 1 insertion(+), 64 deletions(-) diff --git a/README.md b/README.md index 3a9b40389..e1ab5933d 100644 --- a/README.md +++ b/README.md @@ -1841,70 +1841,7 @@ http://localhost:3000/api/jasder/repo/commits/b0c4a4a1487d53acebf2addc544b29938c |sha |否|string |git的ref或者是提交记录commit的sha标识 | -*返回参数说明:* - -|参数名|类型|说明| -|-|-|-| -|additions |int|该commit下所有文件增加的总行数| -|deletions |int|该commit下所有文件删除的总行数| -|sha |string|提交记录sha标识| -|url |string|该commit的api访问地址| -|commit |object| | -|-- author |object| commit的作者用户| -|---- login |string|提交commit的用户名称| -|---- email |string|提交commit的用户邮箱| -|---- date |string|提交commit的时间| -|-- committer |object|提交者用户信息| -|---- login |string|committer的用户名称| -|---- email |string|committer的用户邮箱| -|---- date |string|committer的时间| -|-- message |string|提交信息| -|-- tree |object| | -|---- sha |string| tree结构的sha标识| -|author |object|forge平台的提交用户信息| -|-- id |int|用户id| -|-- login |string|用户登录名| -|-- name |string|用户名称| -|-- image_url |string|用户头像| -|committer |object|forge平台的committer用户信息| -|-- id |int|用户id| -|-- login |string|用户登录名| -|-- name |string|用户名称| -|-- image_url |string|用户头像| -|parents |array|父节点| -|-- sha |int|commit父节点的sha标识| -|-- url |string|commit父节点api访问地址| -|author |object|提交用户| -|-- login |string|用户名称| -|-- image_url |string|用户头像| -|files |array|文件数组| -|-- Name |string|文件名称| -|-- OldName |string|旧文件名称| -|-- Addition |string|增加的行数| -|-- Deletion |string|删除的行数| -|-- Type |string|1: 表示是新增加的文件,2:表示是修改的文件, 3: 表示该文件已经被删除| -|-- IsCreated |boolean|是否为新添加的文件,true:是; false:否| -|-- IsDeleted |boolean|是否为删除的文件,true:是;false:否| -|-- IsRenamed |boolean|是否为重命名的文件,true:是,false:否| -|-- IsBin |boolean|是否为二进制文件,true:是,false:否| -|-- IsLFSFile |boolean|是否git lfs操作的大文件,true:是,false:否| -|-- IsSubmodule |boolean|收否为子模块,true:是;false:否| -|-- Sections |array| | -|---- Name |string|文件名称| -|------ Lines |array|行数| -|-------- LeftIdx |int|分列视图时用,左侧开始行号, 0:表示没有行号| -|-------- RightIdx |int|分列视图时用,右侧开始行号| -|-------- Type |int|1: 表示未做修改的源代码,2: 表示增加的代码,3: 表示删除的代码,4: 统计说明,如:@@ -0,0 +1,11 @@| -|-------- Content |string|一行的文件内容| -|-------- Comments |string|评论信息| -|-------- SectionInfo |string|用户头像| -|---------- Path |string|文件路径| -|---------- LastLeftIdx |string| | -|---------- LastRightIdx |string| | -|---------- LeftIdx |string| | -|---------- RightIdx |string| | -|---------- LeftHunkSize |string| | -|---------- RightHunkSize |string| | +*返回参数说明: 请参考compare接口* 返回值 From 97973b95bf070d1692709dd8f191545a878911f3 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 6 Nov 2020 22:03:12 +0800 Subject: [PATCH 302/384] ADD sha column ro pull request's files compare api --- README.md | 8 ++++++-- app/views/compare/show.json.jbuilder | 2 +- app/views/pull_requests/_diff_file.json.jbuilder | 1 + app/views/pull_requests/files.json.jbuilder | 2 +- app/views/repositories/commit.json.jbuilder | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e1ab5933d..10ac15e8b 100644 --- a/README.md +++ b/README.md @@ -2403,7 +2403,7 @@ GET /api/:owner/:repo/pulls/:id/files.json *示例* ``` curl -X GET \ -http://localhost:3000/api/Jason/repo/pulls/1/files.json | jq +http://localhost:3000/api/Jason/test-txt/pulls/1/files.json | jq ``` *请求参数说明:* @@ -2422,6 +2422,7 @@ http://localhost:3000/api/Jason/repo/pulls/1/files.json | jq |total_addition |int|添加代码总行数| |total_deletion |int|删除代码总行数| |files |array|| +|-- sha |string|commit's sha value| |-- name |string|当前文件名| |-- old_name |string| 修改之前的文件名称,与name相同的话,说明文件名未更改| |-- addition |int|文件添加的行数| @@ -2457,6 +2458,7 @@ http://localhost:3000/api/Jason/repo/pulls/1/files.json | jq "total_deletion": 0, "files": [ { + "sha": "xefenisnii", "name": "文件.txt", "old_name": "文件.txt", "index": 6, @@ -2617,10 +2619,12 @@ http://localhost:3000/api/ysfns/test-txt/compare/master...Jason/test-txt:develop |-- time_from_now|string|commit’s 提交时间距当前时间的时间值| |-- message |string|commit说明信息| |-- sha |string|commit’s sha值| -|diff |array|| +|diff |object|| |-- files_count |int|文件更改的总数量| |-- total_addition |int|添加代码总行数| |-- total_deletion |int|删除代码总行数| +|-- files |Array|| +|-- sha |string|commit's sha | |-- name |string|当前文件名| |-- old_name |string| 修改之前的文件名称,与name相同的话,说明文件名未更改| |-- addition |int|文件添加的行数| diff --git a/app/views/compare/show.json.jbuilder b/app/views/compare/show.json.jbuilder index 775efa757..8f95bbcb5 100644 --- a/app/views/compare/show.json.jbuilder +++ b/app/views/compare/show.json.jbuilder @@ -8,6 +8,6 @@ json.diff do json.files_count @compare_result['Diff']['NumFiles'] json.total_addition @compare_result['Diff']['TotalAddition'] json.total_deletion @compare_result['Diff']['TotalDeletion'] - json.files @compare_result['Diff']['Files'], partial: 'pull_requests/diff_file', as: :file + json.files @compare_result['Diff']['Files'], partial: 'pull_requests/diff_file', as: :file, locals: {sha: @compare_result['LatestSha']} end end diff --git a/app/views/pull_requests/_diff_file.json.jbuilder b/app/views/pull_requests/_diff_file.json.jbuilder index 6efea4382..faec9065d 100644 --- a/app/views/pull_requests/_diff_file.json.jbuilder +++ b/app/views/pull_requests/_diff_file.json.jbuilder @@ -1,3 +1,4 @@ +json.sha sha json.name file['Name'] json.old_name file['OldName'] json.index file['Index'] diff --git a/app/views/pull_requests/files.json.jbuilder b/app/views/pull_requests/files.json.jbuilder index 744f70c6c..b40fe6068 100644 --- a/app/views/pull_requests/files.json.jbuilder +++ b/app/views/pull_requests/files.json.jbuilder @@ -1,4 +1,4 @@ json.files_count @files_result['NumFiles'] json.total_addition @files_result['TotalAddition'] json.total_deletion @files_result['TotalDeletion'] -json.files @files_result['Files'], partial: 'diff_file', as: :file +json.files @files_result['Files'], partial: 'diff_file', as: :file, locals: {sha: @files_result['LatestSha']} diff --git a/app/views/repositories/commit.json.jbuilder b/app/views/repositories/commit.json.jbuilder index 469357367..af5b3192b 100644 --- a/app/views/repositories/commit.json.jbuilder +++ b/app/views/repositories/commit.json.jbuilder @@ -2,7 +2,7 @@ json.files_count @commit_diff['NumFiles'] json.total_addition @commit_diff['TotalAddition'] json.total_deletion @commit_diff['TotalDeletion'] -json.files @commit_diff['Files'], partial: 'pull_requests/diff_file', as: :file +json.files @commit_diff['Files'], partial: 'pull_requests/diff_file', as: :file, locals: {sha: ""} json.partial! 'commit', commit: @commit, project: @project json.parents @commit['parents'] do |parent| From 939f33a8a2a96abc1c3e8f09b274145f3eeb1bf2 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 9 Nov 2020 17:23:19 +0800 Subject: [PATCH 303/384] FIX sha value bug --- app/controllers/repositories_controller.rb | 5 +++-- app/views/repositories/commit.json.jbuilder | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index e44f4f24b..fb2c2e5e9 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -82,8 +82,9 @@ class RepositoriesController < ApplicationController end def commit - @commit = Gitea::Repository::Commits::GetService.call(@owner.login, @repository.identifier, params[:sha], current_user.gitea_token) - @commit_diff = Gitea::Repository::Commits::GetService.call(@owner.login, @repository.identifier, params[:sha], current_user.gitea_token, {diff: true}) + @sha = params[:sha] + @commit = Gitea::Repository::Commits::GetService.call(@owner.login, @repository.identifier, @sha, current_user.gitea_token) + @commit_diff = Gitea::Repository::Commits::GetService.call(@owner.login, @repository.identifier, @sha, current_user.gitea_token, {diff: true}) end def tags diff --git a/app/views/repositories/commit.json.jbuilder b/app/views/repositories/commit.json.jbuilder index af5b3192b..77f6e3f1b 100644 --- a/app/views/repositories/commit.json.jbuilder +++ b/app/views/repositories/commit.json.jbuilder @@ -2,7 +2,7 @@ json.files_count @commit_diff['NumFiles'] json.total_addition @commit_diff['TotalAddition'] json.total_deletion @commit_diff['TotalDeletion'] -json.files @commit_diff['Files'], partial: 'pull_requests/diff_file', as: :file, locals: {sha: ""} +json.files @commit_diff['Files'], partial: 'pull_requests/diff_file', as: :file, locals: {sha: @sha} json.partial! 'commit', commit: @commit, project: @project json.parents @commit['parents'] do |parent| From 1c386e0ab3b62a771be2f87c1cd72af5e1332ada Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 10 Nov 2020 10:03:30 +0800 Subject: [PATCH 304/384] FIX coder review --- app/controllers/repositories_controller.rb | 16 +++++++--------- app/views/repositories/entries.json.jbuilder | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index fb2c2e5e9..a54b17ffe 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -13,7 +13,7 @@ class RepositoriesController < ApplicationController def show @user = current_user @repo = @project.repository - @result = @project.forge? ? Gitea::Repository::GetService.new(@project.owner, @project.identifier).call : nil + @result = @project.forge? ? Gitea::Repository::GetService.new(@owner, @project.identifier).call : nil @project_fork_id = @project.try(:forked_from_project_id) if @project_fork_id.present? @fork_project = Project.find_by(id: @project_fork_id) @@ -26,12 +26,11 @@ class RepositoriesController < ApplicationController def entries @project.increment!(:visits) - @project_owner = @project.owner if @project.educoder? @entries = Educoder::Repository::Entries::ListService.call(@project&.project_educoder.repo_name) else - @entries = Gitea::Repository::Entries::ListService.new(@project_owner, @project.identifier, ref: @ref).call + @entries = Gitea::Repository::Entries::ListService.new(@owner, @project.identifier, ref: @ref).call @entries = @entries.present? ? @entries.sort_by{ |hash| hash['type'] } : [] @path = Gitea.gitea_config[:domain]+"/#{@project.owner.login}/#{@project.identifier}/raw/branch/#{@ref}/" end @@ -76,8 +75,7 @@ class RepositoriesController < ApplicationController end def commits - @project_owner = @project.owner - @hash_commit = Gitea::Repository::Commits::ListService.new(@project_owner.login, @project.identifier, + @hash_commit = Gitea::Repository::Commits::ListService.new(@owner.login, @project.identifier, sha: params[:sha], page: params[:page], limit: params[:limit], token: current_user&.gitea_token).call end @@ -88,14 +86,14 @@ class RepositoriesController < ApplicationController end def tags - @tags = Gitea::Repository::Tags::ListService.call(current_user&.gitea_token, @project.owner.login, @project.identifier, {page: params[:page], limit: params[:limit]}) + @tags = Gitea::Repository::Tags::ListService.call(current_user&.gitea_token, @owner.login, @project.identifier, {page: params[:page], limit: params[:limit]}) end def edit end def create_file - interactor = Gitea::CreateFileInteractor.call(current_user.gitea_token, @project.owner.login, content_params) + interactor = Gitea::CreateFileInteractor.call(current_user.gitea_token, @owner.login, content_params) if interactor.success? @file = interactor.result create_new_pr(params) @@ -105,7 +103,7 @@ class RepositoriesController < ApplicationController end def update_file - interactor = Gitea::UpdateFileInteractor.call(current_user.gitea_token, @project.owner.login, params.merge(identifier: @project.identifier)) + interactor = Gitea::UpdateFileInteractor.call(current_user.gitea_token, @owner.login, params.merge(identifier: @project.identifier)) if interactor.success? @file = interactor.result create_new_pr(params) @@ -116,7 +114,7 @@ class RepositoriesController < ApplicationController end def delete_file - interactor = Gitea::DeleteFileInteractor.call(current_user.gitea_token, @project.owner.login, params.merge(identifier: @project.identifier)) + interactor = Gitea::DeleteFileInteractor.call(current_user.gitea_token, @owner.login, params.merge(identifier: @project.identifier)) if interactor.success? @file = interactor.result render_result(1, "文件删除成功") diff --git a/app/views/repositories/entries.json.jbuilder b/app/views/repositories/entries.json.jbuilder index 2513294d3..20fecec32 100644 --- a/app/views/repositories/entries.json.jbuilder +++ b/app/views/repositories/entries.json.jbuilder @@ -54,7 +54,7 @@ if @project.forge? content = if is_readme_type?(entry['name']) is_readme_file = true - content = Gitea::Repository::Entries::GetService.call(@project_owner, @project.identifier, entry['name'], ref: @ref)['content'] + content = Gitea::Repository::Entries::GetService.call(@owner, @project.identifier, entry['name'], ref: @ref)['content'] readme_render_decode64_content(content, @path) else is_readme_file = false From 36e6f7cea0c107263a97c310ba29f9c73d2f3a4b Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Tue, 10 Nov 2020 15:19:42 +0800 Subject: [PATCH 305/384] Add '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .trustie-pipeline.yml diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml new file mode 100644 index 000000000..9c50f2397 --- /dev/null +++ b/.trustie-pipeline.yml @@ -0,0 +1,14 @@ + +kind: pipeline +name: default + +platform: + os: linux + arch: arm64 + +steps: +- name: test + image: ruby + commands: + - bundle install --jobs=3 --retry=3 + - rake \ No newline at end of file From 228585c8f06866b2f2bbf5d54fea7845ed9dedaa Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Tue, 10 Nov 2020 15:20:36 +0800 Subject: [PATCH 306/384] add --- test_pr.rb | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 test_pr.rb diff --git a/test_pr.rb b/test_pr.rb new file mode 100644 index 000000000..2a860219b --- /dev/null +++ b/test_pr.rb @@ -0,0 +1,2 @@ +def test +end \ No newline at end of file From 1fa878f119627e59560c4b4d6a55d63971ebf2c4 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Tue, 10 Nov 2020 15:40:56 +0800 Subject: [PATCH 308/384] add --- test_pr.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/test_pr.rb b/test_pr.rb index 2a860219b..3fd4f2c40 100644 --- a/test_pr.rb +++ b/test_pr.rb @@ -1,2 +1,3 @@ def test + puts "test" end \ No newline at end of file From 3e250890665ac69d9f5d9e1bbcbb8c33eba897ca Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Tue, 10 Nov 2020 16:23:30 +0800 Subject: [PATCH 309/384] Delete 'test_pr.rb' --- test_pr.rb | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 test_pr.rb diff --git a/test_pr.rb b/test_pr.rb deleted file mode 100644 index 3fd4f2c40..000000000 --- a/test_pr.rb +++ /dev/null @@ -1,3 +0,0 @@ -def test - puts "test" -end \ No newline at end of file From cc19783651b1094ab7834f5ae27d65b7341c13f1 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 10 Nov 2020 18:17:46 +0800 Subject: [PATCH 310/384] FIX code bug --- app/controllers/repositories_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index a54b17ffe..4df823131 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -81,8 +81,8 @@ class RepositoriesController < ApplicationController def commit @sha = params[:sha] - @commit = Gitea::Repository::Commits::GetService.call(@owner.login, @repository.identifier, @sha, current_user.gitea_token) - @commit_diff = Gitea::Repository::Commits::GetService.call(@owner.login, @repository.identifier, @sha, current_user.gitea_token, {diff: true}) + @commit = Gitea::Repository::Commits::GetService.call(@owner.login, @repository.identifier, @sha, current_user&.gitea_token) + @commit_diff = Gitea::Repository::Commits::GetService.call(@owner.login, @repository.identifier, @sha, current_user&.gitea_token, {diff: true}) end def tags From b5d3f32d6860fed7062272cd3706909001c0f534 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 10 Nov 2020 18:18:08 +0800 Subject: [PATCH 311/384] FIX code review --- app/services/gitea/client_service.rb | 3 ++- .../gitea/repository/commits/compare_service.rb | 11 +---------- app/services/gitea/repository/commits/get_service.rb | 12 +----------- 3 files changed, 4 insertions(+), 22 deletions(-) diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index f2581b724..5d3150e21 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -131,7 +131,6 @@ class Gitea::ClientService < ApplicationService {status: 200} end when 401 - "" raise Error, mark + "401" when 422 result = JSON.parse(response&.body) @@ -147,6 +146,8 @@ class Gitea::ClientService < ApplicationService raise Error, mark + message when 403 {status: 403, message: '你没有权限操作!'} + when 404 + {status: 404, message: '你访问的链接不存在!'} else if response&.body.blank? message = "请求失败" diff --git a/app/services/gitea/repository/commits/compare_service.rb b/app/services/gitea/repository/commits/compare_service.rb index ea0c648ce..502f6ce90 100644 --- a/app/services/gitea/repository/commits/compare_service.rb +++ b/app/services/gitea/repository/commits/compare_service.rb @@ -15,7 +15,7 @@ class Gitea::Repository::Commits::CompareService < Gitea::ClientService def call response = get(url, params) - render_result(response) + render_status(response) end private @@ -26,13 +26,4 @@ class Gitea::Repository::Commits::CompareService < Gitea::ClientService def url "/repos/#{owner}/#{repo}/compare/#{base}...#{head}".freeze end - - def render_result(response) - case response.status - when 200 - JSON.parse(response.body) - else - {status: -1, message: "#{body['message']}"} - end - end end diff --git a/app/services/gitea/repository/commits/get_service.rb b/app/services/gitea/repository/commits/get_service.rb index caee29f55..d497f1e4f 100644 --- a/app/services/gitea/repository/commits/get_service.rb +++ b/app/services/gitea/repository/commits/get_service.rb @@ -15,7 +15,7 @@ class Gitea::Repository::Commits::GetService < Gitea::ClientService def call response = get(url, params) - render_result(response) + render_status(response) end private @@ -32,14 +32,4 @@ class Gitea::Repository::Commits::GetService < Gitea::ClientService "/repos/#{owner}/#{repo}/git/commits/#{sha}".freeze end end - - def render_result(response) - body = JSON.parse(response.body) - case response.status - when 200 - JSON.parse(response.body) - else - {status: -1, message: "#{body['message']}"} - end - end end From 0ca699cc496b56ab6b2a3746d2d2fd1f9d3544a7 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 11 Nov 2020 10:14:41 +0800 Subject: [PATCH 312/384] FIX find educoder project's bug --- app/models/project.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 096466ab9..b29295c22 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -179,9 +179,7 @@ class Project < ApplicationRecord logger.info "########namespace_path: #{namespace_path} ########identifier: #{identifier} " user = User.find_by_login namespace_path - return nil if user.blank? - - project = user.projects.find_by(identifier: identifier) || Project.find_by(identifier: "#{namespace_path}/#{identifier}") + project = user&.projects&.find_by(identifier: identifier) || Project.find_by(identifier: "#{namespace_path}/#{identifier}") return nil if project.blank? [project, user] From 74493512705ad50947f5a6e215506868b925db88 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 16 Nov 2020 15:34:16 +0800 Subject: [PATCH 313/384] FIX sub entries api return hash object when entries is file --- app/controllers/repositories_controller.rb | 7 ++----- app/services/gitea/repository/entries/get_service.rb | 4 +++- app/views/repositories/sub_entries.json.jbuilder | 9 ++++----- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 4df823131..c7f8539e5 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -61,13 +61,10 @@ class RepositoriesController < ApplicationController @sub_entries = Educoder::Repository::Entries::ListService.call(@project&.project_educoder&.repo_name, {path: file_path_uri}) end else - interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: @ref) + interactor = Repositories::EntriesInteractor.call(@owner, @project.identifier, file_path_uri, ref: @ref) if interactor.success? result = interactor.result - return @sub_entries = [] if result.is_a?(Hash) && result[:status] == -1 - - @sub_entries = result.is_a?(Array) ? result : [result] - @sub_entries = @sub_entries.sort_by{ |hash| hash['type'] } + @sub_entries = result.is_a?(Array) ? result.sort_by{ |hash| hash['type'] } : result else render_error(interactor.error) end diff --git a/app/services/gitea/repository/entries/get_service.rb b/app/services/gitea/repository/entries/get_service.rb index f0236a07d..f8ac27543 100644 --- a/app/services/gitea/repository/entries/get_service.rb +++ b/app/services/gitea/repository/entries/get_service.rb @@ -31,8 +31,10 @@ class Gitea::Repository::Entries::GetService < Gitea::ClientService case response.status when 200 body + when 404 + raise '你访问的文件不存在' else - {status: -1, message: "#{body['message']}"} + raise body['message'] end end end diff --git a/app/views/repositories/sub_entries.json.jbuilder b/app/views/repositories/sub_entries.json.jbuilder index 5d94f5d60..3276ed0dd 100644 --- a/app/views/repositories/sub_entries.json.jbuilder +++ b/app/views/repositories/sub_entries.json.jbuilder @@ -6,12 +6,11 @@ if @project.forge? json.nil! end end - #json.tags_count @tags_count - #json.branches_count @branches_count - #json.commits_count @commits_count json.entries do - json.array! @sub_entries do |entry| - json.partial! 'repositories/simple_entry', locals: { entry: entry } + if @sub_entries.is_a?(Array) + json.partial! 'repositories/simple_entry', collection: @sub_entries, as: :entry + elsif @sub_entries.is_a?(Hash) + json.partial! 'repositories/simple_entry', locals: { entry: @sub_entries } end end end From fa6b25a22d8ca8be76c820677c66d5421c3863f1 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 16 Nov 2020 16:03:41 +0800 Subject: [PATCH 314/384] FIX render commit bug for sub entries api --- app/views/repositories/_simple_entry.json.jbuilder | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/views/repositories/_simple_entry.json.jbuilder b/app/views/repositories/_simple_entry.json.jbuilder index 91b0e6301..ab9910dd1 100644 --- a/app/views/repositories/_simple_entry.json.jbuilder +++ b/app/views/repositories/_simple_entry.json.jbuilder @@ -15,7 +15,11 @@ if @project.forge? json.image_type image_type json.is_readme_file is_readme_type?(file_name) if entry['latest_commit'] - json.partial! 'last_commit', entry: entry + if entry['type'] != 'file' + json.partial! 'last_commit', entry: entry + else + json.commit nil + end end end From 66407eefe13e0096e94dc97ad734808ece9d9126 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 18 Nov 2020 10:17:40 +0800 Subject: [PATCH 315/384] FIX only email register --- app/controllers/accounts_controller.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 3625a0a3f..293af1386 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -121,7 +121,9 @@ class AccountsController < ApplicationController pre = 'p' email = nil phone = params[:login] - verifi_code = VerificationCode.where(phone: phone, code: code, code_type: 1).last + # verifi_code = VerificationCode.where(phone: phone, code: code, code_type: 1).last + # TODO: 暂时限定邮箱注册 + return normal_status(-1, '只支持邮箱注册') else uid_logger("start register by email: type is #{type}") pre = 'm' @@ -132,11 +134,8 @@ class AccountsController < ApplicationController uid_logger("start register: verifi_code is #{verifi_code}, code is #{code}, time is #{Time.now.to_i - verifi_code.try(:created_at).to_i}") # check_code = (verifi_code.try(:code) == code.strip && (Time.now.to_i - verifi_code.created_at.to_i) <= 10*60) # todo 上线前请删除万能验证码"513231" - unless code == "513231" && request.subdomain == "test-newweb" - return normal_status(-2, "验证码不正确") if verifi_code.try(:code) != code.strip - return normal_status(-2, "验证码已失效") if !verifi_code&.effective? - end + return normal_status(-1, "邮箱格式错误") unless params[:login] =~ CustomRegexp::EMAIL return normal_status(-1, "8~16位密码,支持字母数字和符号") unless params[:password] =~ CustomRegexp::PASSWORD code = generate_identifier User, 8, pre From f1e3e935af74435f565c41a459b5b459ba9d18aa Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 18 Nov 2020 10:25:44 +0800 Subject: [PATCH 316/384] FIX check email exists for register --- app/controllers/accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 293af1386..a4f5872a9 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -134,7 +134,7 @@ class AccountsController < ApplicationController uid_logger("start register: verifi_code is #{verifi_code}, code is #{code}, time is #{Time.now.to_i - verifi_code.try(:created_at).to_i}") # check_code = (verifi_code.try(:code) == code.strip && (Time.now.to_i - verifi_code.created_at.to_i) <= 10*60) # todo 上线前请删除万能验证码"513231" - + return normal_status(-1, "该邮箱已注册") if User.exists?(mail: params[:login]) return normal_status(-1, "邮箱格式错误") unless params[:login] =~ CustomRegexp::EMAIL return normal_status(-1, "8~16位密码,支持字母数字和符号") unless params[:password] =~ CustomRegexp::PASSWORD From a54613752edaf1bd1f3a37904452b0f8bfd4672d Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 18 Nov 2020 10:35:56 +0800 Subject: [PATCH 317/384] FIX code bug when user register --- app/controllers/accounts_controller.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index a4f5872a9..a27e28b81 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -114,7 +114,7 @@ class AccountsController < ApplicationController begin # 查询验证码是否正确;type只可能是1或者8 type = phone_mail_type(params[:login].strip) - code = params[:code].strip + # code = params[:code].strip if type == 1 uid_logger("start register by phone: type is #{type}") @@ -129,9 +129,9 @@ class AccountsController < ApplicationController pre = 'm' email = params[:login] phone = nil - verifi_code = VerificationCode.where(email: email, code: code, code_type: 8).last + # verifi_code = VerificationCode.where(email: email, code: code, code_type: 8).last end - uid_logger("start register: verifi_code is #{verifi_code}, code is #{code}, time is #{Time.now.to_i - verifi_code.try(:created_at).to_i}") + # uid_logger("start register: verifi_code is #{verifi_code}, code is #{code}, time is #{Time.now.to_i - verifi_code.try(:created_at).to_i}") # check_code = (verifi_code.try(:code) == code.strip && (Time.now.to_i - verifi_code.created_at.to_i) <= 10*60) # todo 上线前请删除万能验证码"513231" return normal_status(-1, "该邮箱已注册") if User.exists?(mail: params[:login]) From 558abb71bb3666b7a4a41da588cdf4d6e0ceb17b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 19 Nov 2020 10:30:18 +0800 Subject: [PATCH 318/384] Update repository with default branch params --- README.md | 1 + app/controllers/projects_controller.rb | 6 +++++- app/services/gitea/repository/update_service.rb | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 10ac15e8b..7354ec82d 100644 --- a/README.md +++ b/README.md @@ -676,6 +676,7 @@ http://localhost:3000/api/projects/3263.json | jq |description |否|string |项目描述 | |project_category_id|否|int |项目类别id | |project_language_id|否|int |项目语言id | +|default_branch |否|string |默认分支名称 | |private |否|boolean|项目是否私有, true:为私有,false: 公开,默认为公开 | diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 4e13539c3..4a5889fa1 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -71,9 +71,13 @@ class ProjectsController < ApplicationController ActiveRecord::Base.transaction do # Projects::CreateForm.new(project_params).validate! private = params[:private] + gitea_params = { + private: private, + default_branch: params[:default_branch] + } if [true, false].include? private new_project_params = project_params.merge(is_public: !private) - Gitea::Repository::UpdateService.new(@project.owner, @project.repository.identifier, {private: private}).call + Gitea::Repository::UpdateService.call(@owner, @project.identifier, gitea_params) @project.repository.update_column(:hidden, private) end @project.update_attributes!(new_project_params) diff --git a/app/services/gitea/repository/update_service.rb b/app/services/gitea/repository/update_service.rb index 37903ec9b..0d27922b8 100644 --- a/app/services/gitea/repository/update_service.rb +++ b/app/services/gitea/repository/update_service.rb @@ -28,6 +28,6 @@ class Gitea::Repository::UpdateService < Gitea::ClientService end def data_params - Hash.new.merge(token: user.gitea_token, data: params) + Hash.new.merge(token: user.gitea_token, data: params).compact end end From ba1115f1f3e6451483c4cafff3d4433452628c59 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 23 Nov 2020 10:53:59 +0800 Subject: [PATCH 319/384] ADD annotate for models and migration with auto generate --- Gemfile | 3 +-- Gemfile.lock | 20 ++++---------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/Gemfile b/Gemfile index 491b512c2..219c5c426 100644 --- a/Gemfile +++ b/Gemfile @@ -19,8 +19,6 @@ gem 'kaminari', '~> 1.1', '>= 1.1.1' gem 'bootsnap', '>= 1.1.0', require: false -gem 'gitlab', path: 'lib/gitlab-cli' - gem 'chinese_pinyin' gem 'rack-cors' @@ -74,6 +72,7 @@ group :development do gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' + gem "annotate", "~> 2.6.0" end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index c67bcd22d..db7daf602 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,10 +1,3 @@ -PATH - remote: lib/gitlab-cli - specs: - gitlab (3.2.0) - httparty - terminal-table - GEM remote: https://gems.ruby-china.com/ specs: @@ -61,6 +54,9 @@ GEM public_suffix (>= 2.0.2, < 5.0) ancestry (3.0.7) activerecord (>= 3.2.0) + annotate (2.6.5) + activerecord (>= 2.3.0) + rake (>= 0.8.7) archive-zip (0.12.0) io-like (~> 0.3.0) arel (9.0.0) @@ -138,9 +134,6 @@ GEM harmonious_dictionary (0.0.1) hashie (3.6.0) htmlentities (4.3.4) - httparty (0.18.0) - mime-types (~> 3.0) - multi_xml (>= 0.5.2) i18n (1.8.2) concurrent-ruby (~> 1.0) io-like (0.3.1) @@ -177,9 +170,6 @@ GEM mimemagic (~> 0.3.2) maruku (0.7.3) method_source (0.9.2) - mime-types (3.3.1) - mime-types-data (~> 3.2015) - mime-types-data (3.2019.1009) mimemagic (0.3.4) mini_mime (1.0.2) mini_portile2 (2.4.0) @@ -402,8 +392,6 @@ GEM actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) thor (1.0.1) thread_safe (0.3.6) tilt (2.0.10) @@ -437,6 +425,7 @@ DEPENDENCIES acts-as-taggable-on (~> 6.0) acts_as_list ancestry + annotate (~> 2.6.0) awesome_print axlsx (~> 3.0.0.pre) axlsx_rails (~> 0.5.2) @@ -452,7 +441,6 @@ DEPENDENCIES enumerize faraday (~> 0.15.4) font-awesome-sass (= 4.7.0) - gitlab! grape-entity (~> 0.7.1) groupdate (~> 4.1.0) harmonious_dictionary (~> 0.0.1) From 60ac66ebe328a19c8c1552e2f9c19e75d936f019 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 23 Nov 2020 15:35:03 +0800 Subject: [PATCH 320/384] ADD db schema in models --- app/models/applied_message.rb | 20 ++++++- app/models/applied_project.rb | 11 ++++ app/models/apply_action.rb | 25 ++++++++- app/models/apply_user_authentication.rb | 20 +++++++ app/models/attachment.rb | 33 ++++++++++++ app/models/attachment_group_setting.rb | 19 +++++++ app/models/attachment_history.rb | 28 ++++++++++ app/models/bidding_user.rb | 19 ++++++- app/models/ci/cloud_account.rb | 18 +++++++ app/models/ci/language.rb | 13 +++++ app/models/ci/user.rb | 64 ++++++++++++++++++++++ app/models/compose.rb | 20 +++++++ app/models/compose_project.rb | 17 ++++++ app/models/compose_user.rb | 16 ++++++ app/models/coo_img.rb | 15 +++++- app/models/diff_record.rb | 20 ++++++- app/models/diff_record_content.rb | 15 +++++- app/models/edu_setting.rb | 16 ++++++ app/models/fork_user.rb | 17 ++++++ app/models/ignore.rb | 11 ++++ app/models/issue.rb | 50 +++++++++++++++++ app/models/issue_depend.rb | 16 ++++++ app/models/issue_priority.rb | 17 +++++- app/models/issue_status.rb | 20 ++++++- app/models/issue_tag.rb | 21 ++++++++ app/models/issue_tags_relate.rb | 15 ++++++ app/models/issue_time.rb | 18 +++++++ app/models/journal.rb | 25 ++++++++- app/models/journal_detail.rb | 18 ++++++- app/models/journals_for_message.rb | 29 ++++++++++ app/models/laboratory.rb | 19 +++++++ app/models/laboratory_setting.rb | 15 +++++- app/models/laboratory_user.rb | 16 +++++- app/models/license.rb | 11 ++++ app/models/member.rb | 22 ++++++++ app/models/member_role.rb | 16 ++++++ app/models/mirror.rb | 14 +++++ app/models/oauth.rb | 25 +++++++++ app/models/onclick_time.rb | 15 ++++++ app/models/open_user.rb | 20 ++++++- app/models/open_users/cas.rb | 20 ++++++- app/models/open_users/educoder.rb | 18 +++++++ app/models/open_users/qq.rb | 20 ++++++- app/models/open_users/wechat.rb | 20 ++++++- app/models/praise_tread.rb | 13 +++++ app/models/praise_tread_cache.rb | 13 +++++ app/models/private_message.rb | 20 +++++++ app/models/project.rb | 71 +++++++++++++++++++++++++ app/models/project_category.rb | 17 ++++++ app/models/project_detail.rb | 15 ++++++ app/models/project_educoder.rb | 20 +++++++ app/models/project_language.rb | 12 +++++ app/models/project_package.rb | 28 ++++++++++ app/models/project_package_apply.rb | 19 ++++++- app/models/project_package_category.rb | 11 +++- app/models/project_score.rb | 21 ++++++++ app/models/project_statistic.rb | 13 +++++ app/models/project_trend.rb | 19 +++++++ app/models/pull_request.rb | 43 +++++++++++++++ app/models/pull_request_assign.rb | 16 ++++++ app/models/pull_request_tag.rb | 15 ++++++ app/models/repository.rb | 40 ++++++++++++++ app/models/role.rb | 15 +++++- app/models/system_update_notice.rb | 14 +++++ app/models/tiding.rb | 29 +++++++++- app/models/token.rb | 16 ++++++ app/models/tracker.rb | 14 ++++- app/models/user.rb | 64 ++++++++++++++++++++++ app/models/user_action.rb | 17 ++++++ app/models/user_agent.rb | 18 +++++++ app/models/user_day_certification.rb | 15 ++++++ app/models/user_extension.rb | 32 +++++++++++ app/models/user_grade.rb | 18 +++++++ app/models/user_interest.rb | 16 +++++- app/models/verification_code.rb | 19 +++++++ app/models/version.rb | 25 +++++++++ app/models/version_release.rb | 25 +++++++++ app/models/watcher.rb | 17 ++++++ app/models/weapp_setting.rb | 15 +++++- app/models/weapp_settings/advert.rb | 15 +++++- app/models/weapp_settings/carousel.rb | 15 +++++- lib/tasks/auto_annotate_models.rake | 34 ++++++++++++ 82 files changed, 1711 insertions(+), 25 deletions(-) create mode 100644 lib/tasks/auto_annotate_models.rake diff --git a/app/models/applied_message.rb b/app/models/applied_message.rb index ed02a5445..8098e6e07 100644 --- a/app/models/applied_message.rb +++ b/app/models/applied_message.rb @@ -1,5 +1,23 @@ +# == Schema Information +# +# Table name: applied_messages +# +# id :integer not null, primary key +# user_id :integer +# applied_id :integer +# applied_type :string(255) +# viewed :integer default("0") +# status :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# name :string(255) +# applied_user_id :integer +# role :integer +# project_id :integer +# + class AppliedMessage < ApplicationRecord belongs_to :user belongs_to :applied, polymorphic: true -end \ No newline at end of file +end diff --git a/app/models/applied_project.rb b/app/models/applied_project.rb index 901443e81..68095d0ea 100644 --- a/app/models/applied_project.rb +++ b/app/models/applied_project.rb @@ -1,3 +1,14 @@ +# == Schema Information +# +# Table name: applied_projects +# +# id :integer not null, primary key +# project_id :integer not null +# user_id :integer not null +# role :integer default("0") +# status :integer default("0") +# + class AppliedProject < ApplicationRecord belongs_to :user belongs_to :project diff --git a/app/models/apply_action.rb b/app/models/apply_action.rb index 53fc8d4ca..02a14211a 100644 --- a/app/models/apply_action.rb +++ b/app/models/apply_action.rb @@ -1,3 +1,26 @@ +# == Schema Information +# +# Table name: apply_actions +# +# id :integer not null, primary key +# user_id :integer +# reason :string(255) +# container_id :integer +# container_type :string(255) +# dealer_id :integer +# created_at :datetime not null +# updated_at :datetime not null +# status :integer default("0") +# apply_reason :text(65535) +# noticed :boolean default("0") +# ip_addr :string(255) +# reject_description :string(255) +# +# Indexes +# +# index_apply_actions_on_user_id (user_id) +# + # 申请消息 class ApplyAction < ApplicationRecord belongs_to :user @@ -27,4 +50,4 @@ class ApplyAction < ApplicationRecord belong_container_id: container_id, belong_container_type: belong_container_type) end end -end \ No newline at end of file +end diff --git a/app/models/apply_user_authentication.rb b/app/models/apply_user_authentication.rb index ad74b0261..10522a94a 100644 --- a/app/models/apply_user_authentication.rb +++ b/app/models/apply_user_authentication.rb @@ -1,3 +1,23 @@ +# == Schema Information +# +# Table name: apply_user_authentications +# +# id :integer not null, primary key +# user_id :integer +# status :integer +# auth_type :integer +# remarks :string(255) +# dealer :integer +# deal_time :datetime +# created_at :datetime not null +# updated_at :datetime not null +# is_delete :boolean default("0") +# +# Indexes +# +# index_apply_user_authentications_on_user_id (user_id) +# + # status:0 审核中 1 同意 2 拒绝 3 撤销 # auth_type:1 实名认证, 2 职业认证 class ApplyUserAuthentication < ApplicationRecord diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 4057e7b97..9368d2d72 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -1,3 +1,36 @@ +# == Schema Information +# +# Table name: attachments +# +# id :integer not null, primary key +# container_id :integer +# container_type :string(30) +# filename :string(255) default(""), not null +# disk_filename :string(255) default(""), not null +# filesize :integer default("0"), not null +# content_type :string(255) default("") +# digest :string(40) default(""), not null +# downloads :integer default("0"), not null +# author_id :integer default("0"), not null +# created_on :datetime +# description :text(65535) +# disk_directory :string(255) +# attachtype :integer default("1") +# is_public :integer default("1") +# copy_from :integer +# quotes :integer +# is_publish :integer default("1") +# publish_time :datetime +# memo_image :boolean default("0") +# extra_type :integer default("0") +# +# Indexes +# +# index_attachments_on_author_id (author_id) +# index_attachments_on_container_id_and_container_type (container_id,container_type) +# index_attachments_on_created_on (created_on) +# + class Attachment < ApplicationRecord include BaseModel include Publicable diff --git a/app/models/attachment_group_setting.rb b/app/models/attachment_group_setting.rb index b7eb707f4..3eaecf2b2 100644 --- a/app/models/attachment_group_setting.rb +++ b/app/models/attachment_group_setting.rb @@ -1,3 +1,22 @@ +# == Schema Information +# +# Table name: attachment_group_settings +# +# id :integer not null, primary key +# attachment_id :integer +# course_group_id :integer +# course_id :integer +# publish_time :datetime +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_attachment_group_settings_on_attachment_id (attachment_id) +# index_attachment_group_settings_on_course_group_id (course_group_id) +# index_attachment_group_settings_on_course_id (course_id) +# + class AttachmentGroupSetting < ActiveRecord::Base belongs_to :attachment # belongs_to :course_group diff --git a/app/models/attachment_history.rb b/app/models/attachment_history.rb index c19146b95..86b672def 100644 --- a/app/models/attachment_history.rb +++ b/app/models/attachment_history.rb @@ -1,3 +1,31 @@ +# == Schema Information +# +# Table name: attachment_histories +# +# id :integer not null, primary key +# container_id :integer +# container_type :string(255) +# filename :string(255) default("") +# disk_filename :string(255) default("") +# filesize :integer default("0") +# content_type :string(255) default("") +# digest :string(60) default("") +# downloads :integer default("0") +# author_id :integer +# created_on :datetime +# description :text(65535) +# disk_directory :string(255) +# attachtype :integer +# is_public :integer +# copy_from :integer +# quotes :integer +# version :integer +# attachment_id :integer +# is_publish :integer default("1") +# publish_time :date +# cloud_url :string(255) default("") +# + class AttachmentHistory < ApplicationRecord include Publishable include Publicable diff --git a/app/models/bidding_user.rb b/app/models/bidding_user.rb index 3a427a011..9609e9e60 100644 --- a/app/models/bidding_user.rb +++ b/app/models/bidding_user.rb @@ -1,3 +1,20 @@ +# == Schema Information +# +# Table name: bidding_users +# +# id :integer not null, primary key +# project_package_id :integer +# user_id :integer +# status :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_bidding_users_on_project_package_id (project_package_id) +# index_bidding_users_on_user_id (user_id) +# + class BiddingUser < ApplicationRecord include AASM @@ -21,4 +38,4 @@ class BiddingUser < ApplicationRecord def status_text I18n.t("bidding_user.status.#{status}") end -end \ No newline at end of file +end diff --git a/app/models/ci/cloud_account.rb b/app/models/ci/cloud_account.rb index b10ca7118..253017dc5 100644 --- a/app/models/ci/cloud_account.rb +++ b/app/models/ci/cloud_account.rb @@ -1,3 +1,21 @@ +# == Schema Information +# +# Table name: ci_cloud_accounts +# +# id :integer not null, primary key +# user_id :integer not null +# ip_num :integer +# account :string(255) +# secret :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# ci_user_id :integer +# +# Indexes +# +# dev_ops_cloud_accounts_p_u_ip (user_id,ip_num) +# + class Ci::CloudAccount < Ci::LocalBase belongs_to :user belongs_to :ci_user, class_name: 'Ci::User', foreign_key: :ci_user_id, optional: true diff --git a/app/models/ci/language.rb b/app/models/ci/language.rb index edbdeb0b7..3db42f35a 100644 --- a/app/models/ci/language.rb +++ b/app/models/ci/language.rb @@ -1,3 +1,16 @@ +# == Schema Information +# +# Table name: ci_languages +# +# id :integer not null, primary key +# name :string(255) not null +# content :text(65535) not null +# usage_amount :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# cover_id :integer +# + class Ci::Language < Ci::LocalBase # before_save :encode_content diff --git a/app/models/ci/user.rb b/app/models/ci/user.rb index 6f077b330..fd17adce7 100644 --- a/app/models/ci/user.rb +++ b/app/models/ci/user.rb @@ -1,3 +1,67 @@ +# == Schema Information +# +# Table name: users +# +# id :integer not null +# login :string(255) default(""), not null +# hashed_password :string(40) default(""), not null +# firstname :string(30) default(""), not null +# lastname :string(255) default(""), not null +# mail :string(60) +# admin :boolean default("0"), not null +# status :integer default("1"), not null +# last_login_on :datetime +# language :string(5) default("") +# auth_source_id :integer +# created_on :datetime +# updated_on :datetime +# type :string(255) +# identity_url :string(255) +# mail_notification :string(255) default(""), not null +# salt :string(64) +# gid :integer +# visits :integer default("0") +# excellent_teacher :integer default("0") +# excellent_student :integer default("0") +# phone :string(255) +# authentication :boolean default("0") +# grade :integer default("0") +# experience :integer default("0") +# nickname :string(255) +# show_realname :boolean default("1") +# professional_certification :boolean default("0") +# ID_number :string(255) +# certification :integer default("0") +# homepage_teacher :boolean default("0") +# homepage_engineer :boolean default("0") +# is_test :integer default("0") +# ecoder_user_id :integer default("0") +# business :boolean default("0") +# profile_completed :boolean default("0") +# laboratory_id :integer +# platform :string(255) default("0") +# gitea_token :string(255) +# gitea_uid :integer +# is_shixun_marker :boolean default("0") +# is_sync_pwd :boolean default("1") +# watchers_count :integer default("0") +# visibility :string(255) default("public") +# repo_admin_change_team_access :boolean default("1") +# is_org :boolean default("0") +# website :string(255) +# devops_step :integer default("0") +# +# Indexes +# +# index_users_on_ecoder_user_id (ecoder_user_id) +# index_users_on_homepage_engineer (homepage_engineer) +# index_users_on_homepage_teacher (homepage_teacher) +# index_users_on_laboratory_id (laboratory_id) +# index_users_on_login (login) +# index_users_on_mail (mail) +# index_users_on_type (type) +# + class Ci::User < Ci::RemoteBase self.primary_key = 'user_id' diff --git a/app/models/compose.rb b/app/models/compose.rb index 0b3733943..8d9467dd8 100644 --- a/app/models/compose.rb +++ b/app/models/compose.rb @@ -1,3 +1,23 @@ +# == Schema Information +# +# Table name: composes +# +# id :integer not null, primary key +# user_id :integer +# title :string(255) +# description :text(65535) +# show_mode :integer default("0") +# compose_mode :boolean default("0") +# compose_users_count :integer default("0") +# compose_projects_count :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_composes_on_user_id_and_show_mode_and_compose_mode (user_id,show_mode,compose_mode) +# + class Compose < ApplicationRecord #组织 belongs_to :user diff --git a/app/models/compose_project.rb b/app/models/compose_project.rb index 3c2d099e1..1468fb050 100644 --- a/app/models/compose_project.rb +++ b/app/models/compose_project.rb @@ -1,3 +1,20 @@ +# == Schema Information +# +# Table name: compose_projects +# +# id :integer not null, primary key +# user_id :integer +# project_id :integer +# compose_id :integer +# position :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_compose_projects_on_user_id_and_project_id_and_compose_id (user_id,project_id,compose_id) +# + class ComposeProject < ApplicationRecord #组织的项目记录表 belongs_to :compose diff --git a/app/models/compose_user.rb b/app/models/compose_user.rb index e3b514b3e..a4d334407 100644 --- a/app/models/compose_user.rb +++ b/app/models/compose_user.rb @@ -1,3 +1,19 @@ +# == Schema Information +# +# Table name: compose_users +# +# id :integer not null, primary key +# user_id :integer +# compose_id :integer +# is_manager :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_compose_users_on_user_id_and_compose_id (user_id,compose_id) +# + class ComposeUser < ApplicationRecord belongs_to :compose belongs_to :user diff --git a/app/models/coo_img.rb b/app/models/coo_img.rb index 0766c0727..db96ecbd2 100644 --- a/app/models/coo_img.rb +++ b/app/models/coo_img.rb @@ -1,5 +1,18 @@ +# == Schema Information +# +# Table name: coo_imgs +# +# id :integer not null, primary key +# src_states :string(255) +# url_states :string(255) +# img_type :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# position :integer +# + class CooImg < ApplicationRecord extend Enumerize enumerize :img_type, in: %i[com_coop edu_coop alliance_coop] -end \ No newline at end of file +end diff --git a/app/models/diff_record.rb b/app/models/diff_record.rb index afbb9dd9c..4b40372a7 100644 --- a/app/models/diff_record.rb +++ b/app/models/diff_record.rb @@ -1,3 +1,21 @@ +# == Schema Information +# +# Table name: diff_records +# +# id :integer not null, primary key +# user_id :integer +# container_type :string(255) +# container_id :integer +# column_name :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_diff_records_on_container_type_and_container_id (container_type,container_id) +# index_diff_records_on_user_id (user_id) +# + class DiffRecord < ApplicationRecord belongs_to :user belongs_to :container, polymorphic: true @@ -5,4 +23,4 @@ class DiffRecord < ApplicationRecord has_one :diff_record_content, dependent: :destroy delegate :content, to: :diff_record_content -end \ No newline at end of file +end diff --git a/app/models/diff_record_content.rb b/app/models/diff_record_content.rb index ce5e1d354..c479469e3 100644 --- a/app/models/diff_record_content.rb +++ b/app/models/diff_record_content.rb @@ -1,3 +1,16 @@ +# == Schema Information +# +# Table name: diff_record_contents +# +# id :integer not null, primary key +# diff_record_id :integer +# content :text(65535) +# +# Indexes +# +# index_diff_record_contents_on_diff_record_id (diff_record_id) +# + class DiffRecordContent < ApplicationRecord belongs_to :diff_record -end \ No newline at end of file +end diff --git a/app/models/edu_setting.rb b/app/models/edu_setting.rb index 835aaec76..6968b008e 100644 --- a/app/models/edu_setting.rb +++ b/app/models/edu_setting.rb @@ -1,3 +1,19 @@ +# == Schema Information +# +# Table name: edu_settings +# +# id :integer not null, primary key +# name :string(255) +# value :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# description :string(255) +# +# Indexes +# +# index_edu_settings_on_name (name) UNIQUE +# + class EduSetting < ApplicationRecord after_commit :expire_value_cache diff --git a/app/models/fork_user.rb b/app/models/fork_user.rb index 749f74980..d0915f152 100644 --- a/app/models/fork_user.rb +++ b/app/models/fork_user.rb @@ -1,3 +1,20 @@ +# == Schema Information +# +# Table name: fork_users +# +# id :integer not null, primary key +# project_id :integer +# fork_project_id :integer +# user_id :integer +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_fork_users_on_project_id (project_id) +# index_fork_users_on_user_id (user_id) +# + class ForkUser < ApplicationRecord belongs_to :project belongs_to :user diff --git a/app/models/ignore.rb b/app/models/ignore.rb index bd75ed08c..a6dc9a5ac 100644 --- a/app/models/ignore.rb +++ b/app/models/ignore.rb @@ -1,3 +1,14 @@ +# == Schema Information +# +# Table name: ignores +# +# id :integer not null, primary key +# name :string(255) +# content :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + class Ignore < ApplicationRecord include Projectable end diff --git a/app/models/issue.rb b/app/models/issue.rb index d7dd3bbbd..934e1d314 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1,3 +1,53 @@ +# == Schema Information +# +# Table name: issues +# +# id :integer not null, primary key +# tracker_id :integer not null +# project_id :integer not null +# subject :string(255) default(""), not null +# description :text(4294967295) +# due_date :date +# category_id :integer +# status_id :integer not null +# assigned_to_id :integer +# priority_id :integer not null +# fixed_version_id :integer +# author_id :integer not null +# created_on :datetime +# updated_on :datetime +# start_date :date +# done_ratio :integer default("0"), not null +# estimated_hours :float(24) +# parent_id :integer +# root_id :integer +# lft :integer +# rgt :integer +# is_private :boolean default("0"), not null +# closed_on :datetime +# project_issues_index :integer +# issue_type :string(255) +# token :integer default("0") +# issue_tags_value :string(255) +# is_lock :boolean default("0") +# issue_classify :string(255) +# ref_name :string(255) +# branch_name :string(255) +# +# Indexes +# +# index_issues_on_assigned_to_id (assigned_to_id) +# index_issues_on_author_id (author_id) +# index_issues_on_category_id (category_id) +# index_issues_on_created_on (created_on) +# index_issues_on_fixed_version_id (fixed_version_id) +# index_issues_on_priority_id (priority_id) +# index_issues_on_root_id_and_lft_and_rgt (root_id,lft,rgt) +# index_issues_on_status_id (status_id) +# index_issues_on_tracker_id (tracker_id) +# issues_project_id (project_id) +# + class Issue < ApplicationRecord #issue_type 1为普通,2为悬赏 belongs_to :project, :counter_cache => true diff --git a/app/models/issue_depend.rb b/app/models/issue_depend.rb index 14686e86d..8b64dc1f1 100644 --- a/app/models/issue_depend.rb +++ b/app/models/issue_depend.rb @@ -1,3 +1,19 @@ +# == Schema Information +# +# Table name: issue_depends +# +# id :integer not null, primary key +# user_id :integer +# issue_id :integer +# depend_issue_id :integer +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_issue_depends_on_user_id_and_issue_id_and_depend_issue_id (user_id,issue_id,depend_issue_id) +# + class IssueDepend < ApplicationRecord belongs_to :issue end diff --git a/app/models/issue_priority.rb b/app/models/issue_priority.rb index 6b815f420..27865a70f 100644 --- a/app/models/issue_priority.rb +++ b/app/models/issue_priority.rb @@ -1,3 +1,18 @@ +# == Schema Information +# +# Table name: issue_priorities +# +# id :integer not null, primary key +# name :string(255) +# position :integer +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_issue_priorities_on_name (name) +# + class IssuePriority < ApplicationRecord has_many :issues -end \ No newline at end of file +end diff --git a/app/models/issue_status.rb b/app/models/issue_status.rb index 82bc62abf..a7ec34f8a 100644 --- a/app/models/issue_status.rb +++ b/app/models/issue_status.rb @@ -1,4 +1,22 @@ +# == Schema Information +# +# Table name: issue_statuses +# +# id :integer not null, primary key +# name :string(30) default(""), not null +# is_closed :boolean default("0"), not null +# is_default :boolean default("0"), not null +# position :integer default("1") +# default_done_ratio :integer +# +# Indexes +# +# index_issue_statuses_on_is_closed (is_closed) +# index_issue_statuses_on_is_default (is_default) +# index_issue_statuses_on_position (position) +# + class IssueStatus < ApplicationRecord has_many :issues belongs_to :project, optional: true -end \ No newline at end of file +end diff --git a/app/models/issue_tag.rb b/app/models/issue_tag.rb index 7b61f4016..bf2368654 100644 --- a/app/models/issue_tag.rb +++ b/app/models/issue_tag.rb @@ -1,3 +1,24 @@ +# == Schema Information +# +# Table name: issue_tags +# +# id :integer not null, primary key +# name :string(255) +# description :string(255) +# color :string(255) +# user_id :integer +# project_id :integer +# issues_count :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# gid :integer +# gitea_url :string(255) +# +# Indexes +# +# index_issue_tags_on_user_id_and_name_and_project_id (user_id,name,project_id) +# + class IssueTag < ApplicationRecord has_many :issue_tags_relates, dependent: :destroy diff --git a/app/models/issue_tags_relate.rb b/app/models/issue_tags_relate.rb index bab48d409..df9fd81ae 100644 --- a/app/models/issue_tags_relate.rb +++ b/app/models/issue_tags_relate.rb @@ -1,3 +1,18 @@ +# == Schema Information +# +# Table name: issue_tags_relates +# +# id :integer not null, primary key +# issue_id :integer +# issue_tag_id :integer +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_issue_tags_relates_on_issue_id_and_issue_tag_id (issue_id,issue_tag_id) +# + class IssueTagsRelate < ApplicationRecord belongs_to :issue belongs_to :issue_tag, counter_cache: :issues_count diff --git a/app/models/issue_time.rb b/app/models/issue_time.rb index 10d7af7b6..24425d1e0 100644 --- a/app/models/issue_time.rb +++ b/app/models/issue_time.rb @@ -1,3 +1,21 @@ +# == Schema Information +# +# Table name: issue_times +# +# id :integer not null, primary key +# issue_id :integer +# user_id :integer +# start_time :datetime +# end_time :datetime +# cost_time :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_issue_times_on_issue_id_and_user_id (issue_id,user_id) +# + class IssueTime < ApplicationRecord belongs_to :issue belongs_to :user diff --git a/app/models/journal.rb b/app/models/journal.rb index f730878df..a1834ae2a 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -1,3 +1,26 @@ +# == Schema Information +# +# Table name: journals +# +# id :integer not null, primary key +# journalized_id :integer default("0"), not null +# journalized_type :string(30) default(""), not null +# user_id :integer default("0"), not null +# notes :text(65535) +# created_on :datetime not null +# private_notes :boolean default("0"), not null +# parent_id :integer +# comments_count :integer default("0") +# reply_id :integer +# +# Indexes +# +# index_journals_on_created_on (created_on) +# index_journals_on_journalized_id (journalized_id) +# index_journals_on_user_id (user_id) +# journals_journalized_id (journalized_id,journalized_type) +# + class Journal < ApplicationRecord belongs_to :user belongs_to :issue, foreign_key: :journalized_id, :touch => true @@ -150,4 +173,4 @@ class Journal < ApplicationRecord end -end \ No newline at end of file +end diff --git a/app/models/journal_detail.rb b/app/models/journal_detail.rb index c97bdf378..f5f21260d 100644 --- a/app/models/journal_detail.rb +++ b/app/models/journal_detail.rb @@ -1,3 +1,19 @@ +# == Schema Information +# +# Table name: journal_details +# +# id :integer not null, primary key +# journal_id :integer default("0"), not null +# property :string(30) default(""), not null +# prop_key :string(30) default(""), not null +# old_value :text(65535) +# value :text(65535) +# +# Indexes +# +# journal_details_journal_id (journal_id) +# + class JournalDetail < ApplicationRecord belongs_to :journal -end \ No newline at end of file +end diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb index 3d0189c91..090edcb81 100644 --- a/app/models/journals_for_message.rb +++ b/app/models/journals_for_message.rb @@ -1,3 +1,32 @@ +# == Schema Information +# +# Table name: journals_for_messages +# +# id :integer not null, primary key +# jour_id :integer +# jour_type :string(255) +# user_id :integer +# notes :text(65535) +# status :integer +# reply_id :integer +# created_on :datetime not null +# updated_on :datetime not null +# m_parent_id :string(255) +# is_readed :boolean +# m_reply_count :integer +# m_reply_id :integer +# is_comprehensive_evaluation :integer +# private :integer default("0") +# root_id :integer +# hidden :boolean default("0") +# praises_count :integer default("0") +# +# Indexes +# +# index_journals_for_messages_on_jour_id (jour_id) +# index_journals_for_messages_on_root_id (root_id) +# + class JournalsForMessage < ApplicationRecord belongs_to :jour, :polymorphic => true belongs_to :user diff --git a/app/models/laboratory.rb b/app/models/laboratory.rb index f53a2afee..699800c92 100644 --- a/app/models/laboratory.rb +++ b/app/models/laboratory.rb @@ -1,3 +1,22 @@ +# == Schema Information +# +# Table name: laboratories +# +# id :integer not null, primary key +# school_id :integer +# identifier :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# sync_course :boolean default("0") +# sync_subject :boolean default("0") +# sync_shixun :boolean default("0") +# +# Indexes +# +# index_laboratories_on_identifier (identifier) UNIQUE +# index_laboratories_on_school_id (school_id) +# + class Laboratory < ApplicationRecord belongs_to :school, optional: true diff --git a/app/models/laboratory_setting.rb b/app/models/laboratory_setting.rb index 5b406f444..61c677def 100644 --- a/app/models/laboratory_setting.rb +++ b/app/models/laboratory_setting.rb @@ -1,3 +1,16 @@ +# == Schema Information +# +# Table name: laboratory_settings +# +# id :integer not null, primary key +# laboratory_id :integer +# config :text(65535) +# +# Indexes +# +# index_laboratory_settings_on_laboratory_id (laboratory_id) +# + class LaboratorySetting < ApplicationRecord belongs_to :laboratory @@ -72,4 +85,4 @@ class LaboratorySetting < ApplicationRecord footer: nil } end -end \ No newline at end of file +end diff --git a/app/models/laboratory_user.rb b/app/models/laboratory_user.rb index be6c0c4dd..8658e410d 100644 --- a/app/models/laboratory_user.rb +++ b/app/models/laboratory_user.rb @@ -1,4 +1,18 @@ +# == Schema Information +# +# Table name: laboratory_users +# +# id :integer not null, primary key +# laboratory_id :integer +# user_id :integer +# +# Indexes +# +# index_laboratory_users_on_laboratory_id (laboratory_id) +# index_laboratory_users_on_user_id (user_id) +# + class LaboratoryUser < ApplicationRecord belongs_to :laboratory belongs_to :user -end \ No newline at end of file +end diff --git a/app/models/license.rb b/app/models/license.rb index 952c4a13d..0a14fb85e 100644 --- a/app/models/license.rb +++ b/app/models/license.rb @@ -1,3 +1,14 @@ +# == Schema Information +# +# Table name: licenses +# +# id :integer not null, primary key +# name :string(255) +# content :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + class License < ApplicationRecord include Projectable end diff --git a/app/models/member.rb b/app/models/member.rb index 054a072b6..e72ae7c6b 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -1,3 +1,25 @@ +# == Schema Information +# +# Table name: members +# +# id :integer not null, primary key +# user_id :integer default("0"), not null +# project_id :integer default("0") +# created_on :datetime +# mail_notification :boolean default("0"), not null +# course_id :integer default("-1") +# course_group_id :integer default("0") +# is_collect :integer default("1") +# graduation_group_id :integer default("0") +# +# Indexes +# +# index_members_on_course_id (course_id) +# index_members_on_project_id (project_id) +# index_members_on_user_id (user_id) +# index_members_on_user_id_and_project_id (user_id,project_id,course_id) UNIQUE +# + class Member < ApplicationRecord belongs_to :user # belongs_to :course, optional: true diff --git a/app/models/member_role.rb b/app/models/member_role.rb index 6e51e7011..a2011067d 100644 --- a/app/models/member_role.rb +++ b/app/models/member_role.rb @@ -1,3 +1,19 @@ +# == Schema Information +# +# Table name: member_roles +# +# id :integer not null, primary key +# member_id :integer not null +# role_id :integer not null +# inherited_from :integer +# is_current :integer default("1") +# +# Indexes +# +# index_member_roles_on_member_id (member_id) +# index_member_roles_on_role_id (role_id) +# + class MemberRole < ApplicationRecord belongs_to :role belongs_to :member diff --git a/app/models/mirror.rb b/app/models/mirror.rb index a534adf96..67ef73775 100644 --- a/app/models/mirror.rb +++ b/app/models/mirror.rb @@ -1,3 +1,17 @@ +# == Schema Information +# +# Table name: mirrors +# +# id :integer not null, primary key +# repo_id :integer +# status :integer default("0"), not null +# interval :integer +# next_update_time :datetime +# created_at :datetime not null +# updated_at :datetime not null +# sync_num :integer default("1") +# + class Mirror < ApplicationRecord # 0 - succeeded, 1 - waiting, 2 - failed diff --git a/app/models/oauth.rb b/app/models/oauth.rb index bf7860515..90d8b61b3 100644 --- a/app/models/oauth.rb +++ b/app/models/oauth.rb @@ -1,3 +1,28 @@ +# == Schema Information +# +# Table name: oauths +# +# id :integer not null, primary key +# client_id :string(255) +# client_secret :string(255) +# code :string(255) +# redirect_uri :string(255) +# scope :string(255) +# access_token :string(255) +# refresh_token :string(255) +# token_created_at :integer +# token_expires_in :integer +# created_at :datetime not null +# updated_at :datetime not null +# user_id :integer default("0") +# gitea_oauth_id :integer +# project_id :integer +# +# Indexes +# +# index_oauths_on_user_id (user_id) +# + # for oauth2 application class Oauth < ApplicationRecord belongs_to :user diff --git a/app/models/onclick_time.rb b/app/models/onclick_time.rb index 588da23f5..ac064327e 100644 --- a/app/models/onclick_time.rb +++ b/app/models/onclick_time.rb @@ -1,3 +1,18 @@ +# == Schema Information +# +# Table name: onclick_times +# +# id :integer not null, primary key +# user_id :integer +# onclick_time :datetime +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_onclick_times_on_user_id (user_id) +# + class OnclickTime < ApplicationRecord belongs_to :user diff --git a/app/models/open_user.rb b/app/models/open_user.rb index 45c4ee6ba..b7d90e713 100644 --- a/app/models/open_user.rb +++ b/app/models/open_user.rb @@ -1,3 +1,21 @@ +# == Schema Information +# +# Table name: open_users +# +# id :integer not null, primary key +# user_id :integer +# type :string(255) +# uid :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# extra :text(65535) +# +# Indexes +# +# index_open_users_on_type_and_uid (type,uid) UNIQUE +# index_open_users_on_user_id (user_id) +# + class OpenUser < ApplicationRecord belongs_to :user @@ -8,4 +26,4 @@ class OpenUser < ApplicationRecord def can_bind_cache_key "open_user:#{type}:#{uid}:can_bind" end -end \ No newline at end of file +end diff --git a/app/models/open_users/cas.rb b/app/models/open_users/cas.rb index 301a197a0..df7fb5150 100644 --- a/app/models/open_users/cas.rb +++ b/app/models/open_users/cas.rb @@ -1,3 +1,21 @@ +# == Schema Information +# +# Table name: open_users +# +# id :integer not null, primary key +# user_id :integer +# type :string(255) +# uid :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# extra :text(65535) +# +# Indexes +# +# index_open_users_on_type_and_uid (type,uid) UNIQUE +# index_open_users_on_user_id (user_id) +# + class OpenUsers::Cas < OpenUser def nickname extra&.[]('nickname') @@ -6,4 +24,4 @@ class OpenUsers::Cas < OpenUser def en_type 'cas' end -end \ No newline at end of file +end diff --git a/app/models/open_users/educoder.rb b/app/models/open_users/educoder.rb index 9277b2a1d..310cf9512 100644 --- a/app/models/open_users/educoder.rb +++ b/app/models/open_users/educoder.rb @@ -1,3 +1,21 @@ +# == Schema Information +# +# Table name: open_users +# +# id :integer not null, primary key +# user_id :integer +# type :string(255) +# uid :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# extra :text(65535) +# +# Indexes +# +# index_open_users_on_type_and_uid (type,uid) UNIQUE +# index_open_users_on_user_id (user_id) +# + class OpenUsers::Educoder < OpenUser def nickname extra&.[]('nickname') diff --git a/app/models/open_users/qq.rb b/app/models/open_users/qq.rb index 9e7827128..ef1a4b470 100644 --- a/app/models/open_users/qq.rb +++ b/app/models/open_users/qq.rb @@ -1,3 +1,21 @@ +# == Schema Information +# +# Table name: open_users +# +# id :integer not null, primary key +# user_id :integer +# type :string(255) +# uid :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# extra :text(65535) +# +# Indexes +# +# index_open_users_on_type_and_uid (type,uid) UNIQUE +# index_open_users_on_user_id (user_id) +# + class OpenUsers::QQ < OpenUser def nickname extra&.[]('nickname') @@ -6,4 +24,4 @@ class OpenUsers::QQ < OpenUser def en_type 'qq' end -end \ No newline at end of file +end diff --git a/app/models/open_users/wechat.rb b/app/models/open_users/wechat.rb index 9e7e032b4..5cb221260 100644 --- a/app/models/open_users/wechat.rb +++ b/app/models/open_users/wechat.rb @@ -1,3 +1,21 @@ +# == Schema Information +# +# Table name: open_users +# +# id :integer not null, primary key +# user_id :integer +# type :string(255) +# uid :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# extra :text(65535) +# +# Indexes +# +# index_open_users_on_type_and_uid (type,uid) UNIQUE +# index_open_users_on_user_id (user_id) +# + class OpenUsers::Wechat < OpenUser def nickname extra&.[]('nickname') @@ -6,4 +24,4 @@ class OpenUsers::Wechat < OpenUser def en_type 'wechat' end -end \ No newline at end of file +end diff --git a/app/models/praise_tread.rb b/app/models/praise_tread.rb index cdfdbea28..123bbbdc0 100644 --- a/app/models/praise_tread.rb +++ b/app/models/praise_tread.rb @@ -1,3 +1,16 @@ +# == Schema Information +# +# Table name: praise_treads +# +# id :integer not null, primary key +# user_id :integer not null +# praise_tread_object_id :integer +# praise_tread_object_type :string(255) +# praise_or_tread :integer +# created_at :datetime not null +# updated_at :datetime not null +# + class PraiseTread < ApplicationRecord belongs_to :user belongs_to :praise_tread_object, polymorphic: true, counter_cache: :praises_count diff --git a/app/models/praise_tread_cache.rb b/app/models/praise_tread_cache.rb index 5544d1854..b6fe0887e 100644 --- a/app/models/praise_tread_cache.rb +++ b/app/models/praise_tread_cache.rb @@ -1,2 +1,15 @@ +# == Schema Information +# +# Table name: praise_tread_caches +# +# id :integer not null, primary key +# object_id :integer not null +# object_type :string(255) +# praise_num :integer +# tread_num :integer +# created_at :datetime not null +# updated_at :datetime not null +# + class PraiseTreadCache < ApplicationRecord end diff --git a/app/models/private_message.rb b/app/models/private_message.rb index 640e48db7..bb6d1679e 100644 --- a/app/models/private_message.rb +++ b/app/models/private_message.rb @@ -1,3 +1,23 @@ +# == Schema Information +# +# Table name: private_messages +# +# id :integer not null, primary key +# user_id :integer +# target_id :integer +# sender_id :integer +# receiver_id :integer +# content :text(65535) +# send_time :datetime +# status :integer +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_private_messages_on_user_id (user_id) +# + class PrivateMessage < ApplicationRecord belongs_to :user belongs_to :target, class_name: "User" diff --git a/app/models/project.rb b/app/models/project.rb index b29295c22..887a6952c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,3 +1,73 @@ +# == Schema Information +# +# Table name: projects +# +# id :integer not null, primary key +# name :string(255) default(""), not null +# description :text(4294967295) +# homepage :string(255) default("") +# is_public :boolean default("1"), not null +# parent_id :integer +# created_on :datetime +# updated_on :datetime +# identifier :string(255) +# status :integer default("1"), not null +# lft :integer +# rgt :integer +# inherit_members :boolean default("0"), not null +# project_type :integer default("0") +# hidden_repo :boolean default("0"), not null +# attachmenttype :integer default("1") +# user_id :integer +# dts_test :integer default("0") +# enterprise_name :string(255) +# organization_id :integer +# project_new_type :integer +# gpid :integer +# forked_from_project_id :integer +# forked_count :integer default("0") +# publish_resource :integer default("0") +# visits :integer default("0") +# hot :integer default("0") +# invite_code :string(255) +# qrcode :string(255) +# qrcode_expiretime :integer default("0") +# script :text(65535) +# training_status :integer default("0") +# rep_identifier :string(255) +# project_category_id :integer +# project_language_id :integer +# license_id :integer +# ignore_id :integer +# praises_count :integer default("0") +# watchers_count :integer default("0") +# issues_count :integer default("0") +# pull_requests_count :integer default("0") +# language :string(255) +# versions_count :integer default("0") +# issue_tags_count :integer default("0") +# closed_issues_count :integer default("0") +# open_devops :boolean default("0") +# gitea_webhook_id :integer +# open_devops_count :integer default("0") +# recommend :boolean default("0") +# platform :integer default("0") +# +# Indexes +# +# index_projects_on_forked_from_project_id (forked_from_project_id) +# index_projects_on_identifier (identifier) +# index_projects_on_is_public (is_public) +# index_projects_on_lft (lft) +# index_projects_on_name (name) +# index_projects_on_platform (platform) +# index_projects_on_project_type (project_type) +# index_projects_on_recommend (recommend) +# index_projects_on_rgt (rgt) +# index_projects_on_status (status) +# index_projects_on_updated_on (updated_on) +# + class Project < ApplicationRecord include Matchable include Publicable @@ -208,4 +278,5 @@ class Project < ApplicationRecord ps = ProjectStatistic.first ps.increment!(:mirror_projects_count) unless ps.blank? end + end diff --git a/app/models/project_category.rb b/app/models/project_category.rb index ff9c0a849..3a9819816 100644 --- a/app/models/project_category.rb +++ b/app/models/project_category.rb @@ -1,3 +1,20 @@ +# == Schema Information +# +# Table name: project_categories +# +# id :integer not null, primary key +# name :string(255) +# position :integer +# projects_count :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# ancestry :string(255) +# +# Indexes +# +# index_project_categories_on_ancestry (ancestry) +# + class ProjectCategory < ApplicationRecord include Projectable has_ancestry diff --git a/app/models/project_detail.rb b/app/models/project_detail.rb index a2d088ba4..b7ae215c9 100644 --- a/app/models/project_detail.rb +++ b/app/models/project_detail.rb @@ -1,3 +1,18 @@ +# == Schema Information +# +# Table name: project_details +# +# id :integer not null, primary key +# project_id :integer +# content :text(4294967295) +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_project_details_on_project_id (project_id) +# + class ProjectDetail < ApplicationRecord belongs_to :project, optional: true has_many :attachments, as: :container, dependent: :destroy diff --git a/app/models/project_educoder.rb b/app/models/project_educoder.rb index dcd7a2cef..a8146af4c 100644 --- a/app/models/project_educoder.rb +++ b/app/models/project_educoder.rb @@ -1,3 +1,23 @@ +# == Schema Information +# +# Table name: project_educoders +# +# id :integer not null, primary key +# owner :string(255) +# repo_name :string(255) +# image_url :string(255) +# project_id :integer +# created_at :datetime not null +# updated_at :datetime not null +# commit_count :integer default("0") +# forked_count :integer default("0") +# +# Indexes +# +# index_project_educoders_on_project_id (project_id) +# index_project_educoders_on_repo_name (repo_name) +# + class ProjectEducoder < ApplicationRecord belongs_to :project, optional: true end diff --git a/app/models/project_language.rb b/app/models/project_language.rb index 386c274e8..ced6c5f9e 100644 --- a/app/models/project_language.rb +++ b/app/models/project_language.rb @@ -1,3 +1,15 @@ +# == Schema Information +# +# Table name: project_languages +# +# id :integer not null, primary key +# name :string(255) +# position :integer +# projects_count :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# + class ProjectLanguage < ApplicationRecord include Projectable end diff --git a/app/models/project_package.rb b/app/models/project_package.rb index a8e134918..e6584264f 100644 --- a/app/models/project_package.rb +++ b/app/models/project_package.rb @@ -1,3 +1,31 @@ +# == Schema Information +# +# Table name: project_packages +# +# id :integer not null, primary key +# creator_id :integer +# status :string(255) +# title :string(255) +# content :text(65535) +# contact_name :string(255) +# contact_phone :string(255) +# min_price :decimal(10, ) +# max_price :decimal(10, ) +# visit_count :integer default("0") +# bidding_users_count :integer default("0") +# deadline_at :datetime +# published_at :datetime +# bidding_finished_at :datetime +# created_at :datetime not null +# updated_at :datetime not null +# project_package_category_id :integer +# +# Indexes +# +# index_project_packages_on_creator_id (creator_id) +# index_project_packages_on_published_at (published_at) +# + class ProjectPackage < ApplicationRecord include AASM diff --git a/app/models/project_package_apply.rb b/app/models/project_package_apply.rb index 0dd69c0cf..9f0c2b01a 100644 --- a/app/models/project_package_apply.rb +++ b/app/models/project_package_apply.rb @@ -1,3 +1,20 @@ +# == Schema Information +# +# Table name: project_package_applies +# +# id :integer not null, primary key +# project_package_id :integer +# status :string(255) +# reason :string(255) +# refused_at :datetime +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_project_package_applies_on_project_package_id (project_package_id) +# + class ProjectPackageApply < ApplicationRecord include AASM @@ -16,4 +33,4 @@ class ProjectPackageApply < ApplicationRecord transitions from: :pending, to: :agreed end end -end \ No newline at end of file +end diff --git a/app/models/project_package_category.rb b/app/models/project_package_category.rb index 403fdf4cb..9db319ddd 100644 --- a/app/models/project_package_category.rb +++ b/app/models/project_package_category.rb @@ -1,3 +1,12 @@ +# == Schema Information +# +# Table name: project_package_categories +# +# id :integer not null, primary key +# name :string(255) +# position :integer +# + class ProjectPackageCategory < ApplicationRecord default_scope { order(position: :asc) } @@ -20,4 +29,4 @@ class ProjectPackageCategory < ApplicationRecord def reset_cache_data Rails.cache.delete(self.class.data_cache_key) end -end \ No newline at end of file +end diff --git a/app/models/project_score.rb b/app/models/project_score.rb index 51ed29a67..24124265b 100644 --- a/app/models/project_score.rb +++ b/app/models/project_score.rb @@ -1,3 +1,24 @@ +# == Schema Information +# +# Table name: project_scores +# +# id :integer not null, primary key +# project_id :string(255) +# score :integer +# created_at :datetime not null +# updated_at :datetime not null +# issue_num :integer default("0") +# issue_journal_num :integer default("0") +# news_num :integer default("0") +# documents_num :integer default("0") +# changeset_num :integer default("0") +# board_message_num :integer default("0") +# board_num :integer default("0") +# attach_num :integer default("0") +# commit_time :datetime +# pull_request_num :integer default("0") +# + class ProjectScore < ApplicationRecord belongs_to :project diff --git a/app/models/project_statistic.rb b/app/models/project_statistic.rb index 3dbbf36de..10eb14a46 100644 --- a/app/models/project_statistic.rb +++ b/app/models/project_statistic.rb @@ -1,2 +1,15 @@ +# == Schema Information +# +# Table name: project_statistics +# +# id :integer not null, primary key +# common_projects_count :integer default("0") +# mirror_projects_count :integer default("0") +# sync_mirror_projects_count :integer default("0") +# commits_total_count :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# + class ProjectStatistic < ApplicationRecord end diff --git a/app/models/project_trend.rb b/app/models/project_trend.rb index 28fd0ffad..5858768b9 100644 --- a/app/models/project_trend.rb +++ b/app/models/project_trend.rb @@ -1,3 +1,22 @@ +# == Schema Information +# +# Table name: project_trends +# +# id :integer not null, primary key +# user_id :integer +# project_id :integer +# trend_type :string(255) +# trend_id :integer +# action_type :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_project_trends_on_trend_type_and_trend_id (trend_type,trend_id) +# index_project_trends_on_user_id_and_project_id (user_id,project_id) +# + class ProjectTrend < ApplicationRecord belongs_to :project belongs_to :trend, polymorphic: true, optional: true diff --git a/app/models/pull_request.rb b/app/models/pull_request.rb index d752bb859..8a5e19272 100644 --- a/app/models/pull_request.rb +++ b/app/models/pull_request.rb @@ -1,3 +1,28 @@ +# == Schema Information +# +# Table name: pull_requests +# +# id :integer not null, primary key +# pull_request_id :integer +# gpid :integer +# user_id :integer +# created_at :datetime not null +# updated_at :datetime not null +# status :integer default("0") +# project_id :integer +# title :string(255) +# milestone :integer +# body :text(65535) +# head :string(255) +# base :string(255) +# issue_id :integer +# fork_project_id :integer +# is_original :boolean default("0") +# comments_count :integer default("0") +# commits_count :integer default("0") +# files_count :integer default("0") +# + class PullRequest < ApplicationRecord #status 0 默认未合并, 1表示合并, 2表示请求拒绝 belongs_to :issue @@ -12,4 +37,22 @@ class PullRequest < ApplicationRecord def fork_project Project.find_by(id: self.fork_project_id) end + + # TODO: sync educoder platform repo's for update some statistics count + def self.update_some_count + PullRequest.includes(:user, :project).select(:id, :user_id, :gpid, :project_id, :fork_project_id).each do |pr| + puts pr.id + next if pr.gpid.blank? + project = pr.project + + next if project.blank? + user = project.owner + next if pr.gpid === 6 || pr.gpid === 7 + files_result = Gitea::PullRequest::FilesService.call(user.login, project.identifier, pr.gpid) + pr.update_column(:files_count, files_result['NumFiles']) unless files_result.blank? + + commits_result = Gitea::PullRequest::CommitsService.call(user.login, project.identifier, pr.gpid) + pr.update_column(:commits_count, commits_result.size) unless commits_result.blank? + end + end end diff --git a/app/models/pull_request_assign.rb b/app/models/pull_request_assign.rb index 0c47cc88d..c8e6489ba 100644 --- a/app/models/pull_request_assign.rb +++ b/app/models/pull_request_assign.rb @@ -1,3 +1,19 @@ +# == Schema Information +# +# Table name: pull_request_assigns +# +# id :integer not null, primary key +# pull_request_id :integer +# created_at :datetime not null +# updated_at :datetime not null +# user_login :string(255) +# +# Indexes +# +# index_pull_request_assigns_on_user_id_and_pull_request_id (pull_request_id) +# index_pull_request_assigns_on_user_login (user_login) +# + class PullRequestAssign < ApplicationRecord belongs_to :user belongs_to :pull_request diff --git a/app/models/pull_request_tag.rb b/app/models/pull_request_tag.rb index 589530624..7f2b6d1e2 100644 --- a/app/models/pull_request_tag.rb +++ b/app/models/pull_request_tag.rb @@ -1,3 +1,18 @@ +# == Schema Information +# +# Table name: pull_request_tags +# +# id :integer not null, primary key +# issue_tag_id :integer +# pull_request_id :integer +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_pull_request_tags_on_issue_tag_id_and_pull_request_id (issue_tag_id,pull_request_id) +# + class PullRequestTag < ApplicationRecord belongs_to :issue_tag belongs_to :pull_request diff --git a/app/models/repository.rb b/app/models/repository.rb index 4c8d81111..65b4316ed 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -1,3 +1,35 @@ +# == Schema Information +# +# Table name: repositories +# +# id :integer not null, primary key +# project_id :integer default("0"), not null +# url :string(255) default(""), not null +# login :string(60) default("") +# password :string(255) default("") +# root_url :string(255) default("") +# type :string(255) +# path_encoding :string(64) +# log_encoding :string(64) +# extra_info :text(65535) +# identifier :string(255) +# is_default :boolean default("0") +# hidden :boolean default("0") +# shixun_id :integer +# myshixun_id :integer +# user_id :integer +# mirror_url :string(255) +# version_releases_count :integer default("0") +# fork_url :string(255) +# is_mirror :boolean default("0") +# +# Indexes +# +# index_repositories_on_identifier (identifier) +# index_repositories_on_project_id (project_id) +# index_repositories_on_user_id (user_id) +# + class Repository < ApplicationRecord self.inheritance_column = nil # FIX The single-table inheritance mechanism failed belongs_to :project, :touch => true @@ -34,4 +66,12 @@ class Repository < ApplicationRecord repo_mirror.set_status!(Mirror.statuses[:waiting]) repo_mirror.increment!(:sync_num) end + + def generate_hex(column) + loop do + hex = SecureRandom.hex + break hex unless self.class.where(column => hex).any? + end + end + end diff --git a/app/models/role.rb b/app/models/role.rb index e60606ffa..0767adecd 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -1,3 +1,16 @@ +# == Schema Information +# +# Table name: roles +# +# id :integer not null, primary key +# name :string(30) default(""), not null +# position :integer default("1") +# assignable :boolean default("1") +# builtin :integer default("0"), not null +# permissions :text(65535) +# issues_visibility :string(30) default("default"), not null +# + class Role < ApplicationRecord has_many :member_roles, dependent: :destroy -end \ No newline at end of file +end diff --git a/app/models/system_update_notice.rb b/app/models/system_update_notice.rb index 44589a405..de4bebfbf 100644 --- a/app/models/system_update_notice.rb +++ b/app/models/system_update_notice.rb @@ -1,2 +1,16 @@ +# == Schema Information +# +# Table name: system_update_notices +# +# id :integer not null, primary key +# subject :string(255) +# notes :text(65535) +# start_time :datetime +# end_time :datetime +# created_at :datetime not null +# updated_at :datetime not null +# notice_type :integer +# + class SystemUpdateNotice < ApplicationRecord end diff --git a/app/models/tiding.rb b/app/models/tiding.rb index aa570f5c0..01daeb964 100644 --- a/app/models/tiding.rb +++ b/app/models/tiding.rb @@ -1,3 +1,30 @@ +# == Schema Information +# +# Table name: tidings +# +# id :integer not null, primary key +# user_id :integer +# trigger_user_id :integer +# container_id :integer +# container_type :string(255) +# parent_container_id :integer +# parent_container_type :string(255) +# belong_container_id :integer +# belong_container_type :string(255) +# status :integer default("0") +# viewed :boolean +# created_at :datetime not null +# updated_at :datetime not null +# tiding_type :string(255) +# extra :string(255) +# is_delete :boolean default("0") +# +# Indexes +# +# index_tidings_on_container_id (container_id) +# index_tidings_on_user_id (user_id) +# + class Tiding < ApplicationRecord belongs_to :user belongs_to :trigger_user, class_name: 'User', optional: true @@ -29,4 +56,4 @@ class Tiding < ApplicationRecord (container_type == 'StudentWorksScore' && extra.to_i == 3) || (container_type == 'StudentWorksScoresAppeal' && parent_container_type == 'StudentWork' && tiding_type == 'System') end -end \ No newline at end of file +end diff --git a/app/models/token.rb b/app/models/token.rb index d40388440..c71a860af 100644 --- a/app/models/token.rb +++ b/app/models/token.rb @@ -1,3 +1,19 @@ +# == Schema Information +# +# Table name: tokens +# +# id :integer not null, primary key +# user_id :integer default("0"), not null +# action :string(30) default(""), not null +# value :string(40) default(""), not null +# created_on :datetime not null +# +# Indexes +# +# index_tokens_on_user_id (user_id) +# tokens_value (value) UNIQUE +# + # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License diff --git a/app/models/tracker.rb b/app/models/tracker.rb index a5202b26e..c3ceca62f 100644 --- a/app/models/tracker.rb +++ b/app/models/tracker.rb @@ -1,4 +1,16 @@ +# == Schema Information +# +# Table name: trackers +# +# id :integer not null, primary key +# name :string(30) default(""), not null +# is_in_chlog :boolean default("0"), not null +# position :integer default("1") +# is_in_roadmap :boolean default("1"), not null +# fields_bits :integer default("0") +# + class Tracker < ApplicationRecord has_many :issues has_and_belongs_to_many :projects -end \ No newline at end of file +end diff --git a/app/models/user.rb b/app/models/user.rb index 93c8d3357..a8fd4ac1a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,3 +1,67 @@ +# == Schema Information +# +# Table name: users +# +# id :integer not null, primary key +# login :string(255) default(""), not null +# hashed_password :string(40) default(""), not null +# firstname :string(30) default(""), not null +# lastname :string(255) default(""), not null +# mail :string(60) +# admin :boolean default("0"), not null +# status :integer default("1"), not null +# last_login_on :datetime +# language :string(5) default("") +# auth_source_id :integer +# created_on :datetime +# updated_on :datetime +# type :string(255) +# identity_url :string(255) +# mail_notification :string(255) default(""), not null +# salt :string(64) +# gid :integer +# visits :integer default("0") +# excellent_teacher :integer default("0") +# excellent_student :integer default("0") +# phone :string(255) +# authentication :boolean default("0") +# grade :integer default("0") +# experience :integer default("0") +# nickname :string(255) +# show_realname :boolean default("1") +# professional_certification :boolean default("0") +# ID_number :string(255) +# certification :integer default("0") +# homepage_teacher :boolean default("0") +# homepage_engineer :boolean default("0") +# is_test :integer default("0") +# ecoder_user_id :integer default("0") +# business :boolean default("0") +# profile_completed :boolean default("0") +# laboratory_id :integer +# platform :string(255) default("0") +# gitea_token :string(255) +# gitea_uid :integer +# is_shixun_marker :boolean default("0") +# is_sync_pwd :boolean default("1") +# watchers_count :integer default("0") +# visibility :string(255) default("public") +# repo_admin_change_team_access :boolean default("1") +# is_org :boolean default("0") +# website :string(255) +# devops_step :integer default("0") +# +# Indexes +# +# index_users_on_ecoder_user_id (ecoder_user_id) +# index_users_on_homepage_engineer (homepage_engineer) +# index_users_on_homepage_teacher (homepage_teacher) +# index_users_on_laboratory_id (laboratory_id) +# index_users_on_login (login) +# index_users_on_mail (mail) +# index_users_on_type (type) +# + class User < ApplicationRecord extend Enumerize diff --git a/app/models/user_action.rb b/app/models/user_action.rb index d3d70a66d..3ad8010ea 100644 --- a/app/models/user_action.rb +++ b/app/models/user_action.rb @@ -1,2 +1,19 @@ +# == Schema Information +# +# Table name: user_actions +# +# id :integer not null, primary key +# user_id :integer +# action_type :string(255) +# action_id :integer +# created_at :datetime not null +# updated_at :datetime not null +# ip :string(255) +# +# Indexes +# +# index_user_actions_on_ip (ip) +# + class UserAction < ApplicationRecord end diff --git a/app/models/user_agent.rb b/app/models/user_agent.rb index ebe7ed03c..49d7b35a1 100644 --- a/app/models/user_agent.rb +++ b/app/models/user_agent.rb @@ -1,3 +1,21 @@ +# == Schema Information +# +# Table name: user_agents +# +# id :integer not null, primary key +# agent_type :string(255) +# key :string(255) +# ip :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# register_status :integer default("0") +# action_status :integer default("0") +# +# Indexes +# +# index_user_agents_on_ip (ip) UNIQUE +# + class UserAgent < ApplicationRecord has_many :user_actions, :foreign_key => "ip", :primary_key => "ip" USER_AD = 1 # 广告宣传的引流 diff --git a/app/models/user_day_certification.rb b/app/models/user_day_certification.rb index 18da0fd12..ccf26a2fe 100644 --- a/app/models/user_day_certification.rb +++ b/app/models/user_day_certification.rb @@ -1,2 +1,17 @@ +# == Schema Information +# +# Table name: user_day_certifications +# +# id :integer not null, primary key +# user_id :integer +# status :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_user_day_certifications_on_user_id (user_id) +# + class UserDayCertification < ApplicationRecord end diff --git a/app/models/user_extension.rb b/app/models/user_extension.rb index 0a3c73686..20e2b5c4f 100644 --- a/app/models/user_extension.rb +++ b/app/models/user_extension.rb @@ -1,3 +1,35 @@ +# == Schema Information +# +# Table name: user_extensions +# +# id :integer not null, primary key +# user_id :integer not null +# birthday :date +# brief_introduction :string(255) +# gender :integer +# location :string(255) +# occupation :string(255) +# work_experience :integer +# zip_code :integer +# created_at :datetime not null +# updated_at :datetime not null +# technical_title :string(255) +# identity :integer +# student_id :string(255) +# teacher_realname :string(255) +# student_realname :string(255) +# location_city :string(255) +# school_id :integer +# description :string(255) default("") +# department_id :integer +# +# Indexes +# +# index_user_extensions_on_department_id (department_id) +# index_user_extensions_on_school_id_and_user_id (school_id,user_id) +# index_user_extensions_on_user_id (user_id) +# + class UserExtension < ApplicationRecord # identity 0: 教师教授 1: 学生, 2: 专业人士, 3: 开发者 enum identity: { teacher: 0, student: 1, professional: 2, developer: 3, enterprise: 4, unselect: -1 } diff --git a/app/models/user_grade.rb b/app/models/user_grade.rb index af7490edf..970392b13 100644 --- a/app/models/user_grade.rb +++ b/app/models/user_grade.rb @@ -1,3 +1,21 @@ +# == Schema Information +# +# Table name: user_grades +# +# id :integer not null, primary key +# user_id :integer not null +# project_id :integer not null +# grade :float(24) default("0") +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_user_grades_on_grade (grade) +# index_user_grades_on_project_id (project_id) +# index_user_grades_on_user_id (user_id) +# + class UserGrade < ApplicationRecord # belongs_to :project # belongs_to :user diff --git a/app/models/user_interest.rb b/app/models/user_interest.rb index 1c2d8bc84..ae5538124 100644 --- a/app/models/user_interest.rb +++ b/app/models/user_interest.rb @@ -1,4 +1,18 @@ +# == Schema Information +# +# Table name: user_interests +# +# id :integer not null, primary key +# user_id :integer +# repertoire_id :integer +# +# Indexes +# +# index_user_interests_on_repertoire_id (repertoire_id) +# index_user_interests_on_user_id (user_id) +# + class UserInterest < ApplicationRecord belongs_to :user # belongs_to :repertoire -end \ No newline at end of file +end diff --git a/app/models/verification_code.rb b/app/models/verification_code.rb index 452e637a7..a71d9018d 100644 --- a/app/models/verification_code.rb +++ b/app/models/verification_code.rb @@ -1,3 +1,22 @@ +# == Schema Information +# +# Table name: verification_codes +# +# id :integer not null, primary key +# code :string(255) +# code_type :integer +# status :integer +# phone :string(255) +# email :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# by_email (email) +# by_phone (phone) +# + class VerificationCode < ApplicationRecord def effective? created_at + 10.minute > Time.current diff --git a/app/models/version.rb b/app/models/version.rb index 18996d6c7..bee22cd5c 100644 --- a/app/models/version.rb +++ b/app/models/version.rb @@ -1,3 +1,28 @@ +# == Schema Information +# +# Table name: versions +# +# id :integer not null, primary key +# project_id :integer default("0"), not null +# name :string(255) default(""), not null +# description :text(65535) +# effective_date :date +# created_on :datetime +# updated_on :datetime +# wiki_page_title :string(255) +# status :string(255) default("open") +# sharing :string(255) default("none"), not null +# user_id :integer +# issues_count :integer default("0") +# closed_issues_count :integer default("0") +# percent :float(24) default("0") +# +# Indexes +# +# index_versions_on_sharing (sharing) +# versions_project_id (project_id) +# + class Version < ApplicationRecord belongs_to :project, counter_cache: true has_many :issues, class_name: "Issue", foreign_key: "fixed_version_id" diff --git a/app/models/version_release.rb b/app/models/version_release.rb index 7d733fb1f..16b823a78 100644 --- a/app/models/version_release.rb +++ b/app/models/version_release.rb @@ -1,3 +1,28 @@ +# == Schema Information +# +# Table name: version_releases +# +# id :integer not null, primary key +# user_id :integer +# name :string(255) +# body :text(65535) +# tag_name :string(255) +# target_commitish :string(255) +# draft :boolean default("0") +# prerelease :boolean default("0") +# tarball_url :string(255) +# zipball_url :string(255) +# url :string(255) +# version_gid :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# repository_id :integer +# +# Indexes +# +# index_version_releases_on_repository_id (repository_id) +# + class VersionRelease < ApplicationRecord belongs_to :repository, counter_cache: true belongs_to :user diff --git a/app/models/watcher.rb b/app/models/watcher.rb index 50bd75809..76a82702b 100644 --- a/app/models/watcher.rb +++ b/app/models/watcher.rb @@ -1,3 +1,20 @@ +# == Schema Information +# +# Table name: watchers +# +# id :integer not null, primary key +# watchable_type :string(255) default(""), not null +# watchable_id :integer default("0"), not null +# user_id :integer +# created_at :datetime +# +# Indexes +# +# index_watchers_on_user_id (user_id) +# index_watchers_on_watchable_id_and_watchable_type (watchable_id,watchable_type) +# watchers_user_id_type (user_id,watchable_type) +# + class Watcher < ApplicationRecord belongs_to :user diff --git a/app/models/weapp_setting.rb b/app/models/weapp_setting.rb index a4ef86eb1..ed80acd09 100644 --- a/app/models/weapp_setting.rb +++ b/app/models/weapp_setting.rb @@ -1,3 +1,16 @@ +# == Schema Information +# +# Table name: weapp_settings +# +# id :integer not null, primary key +# type :string(255) +# link :string(255) +# online :boolean default("0") +# position :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# + class WeappSetting < ApplicationRecord scope :only_online, -> { where(online: true) } -end \ No newline at end of file +end diff --git a/app/models/weapp_settings/advert.rb b/app/models/weapp_settings/advert.rb index 993b1fd85..209b144e3 100644 --- a/app/models/weapp_settings/advert.rb +++ b/app/models/weapp_settings/advert.rb @@ -1,3 +1,16 @@ +# == Schema Information +# +# Table name: weapp_settings +# +# id :integer not null, primary key +# type :string(255) +# link :string(255) +# online :boolean default("0") +# position :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# + class WeappSettings::Advert < WeappSetting default_scope { order(position: :asc) } -end \ No newline at end of file +end diff --git a/app/models/weapp_settings/carousel.rb b/app/models/weapp_settings/carousel.rb index 71445fd3f..4f9148821 100644 --- a/app/models/weapp_settings/carousel.rb +++ b/app/models/weapp_settings/carousel.rb @@ -1,3 +1,16 @@ +# == Schema Information +# +# Table name: weapp_settings +# +# id :integer not null, primary key +# type :string(255) +# link :string(255) +# online :boolean default("0") +# position :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# + class WeappSettings::Carousel < WeappSetting default_scope { order(position: :asc) } -end \ No newline at end of file +end diff --git a/lib/tasks/auto_annotate_models.rake b/lib/tasks/auto_annotate_models.rake new file mode 100644 index 000000000..356d43fcb --- /dev/null +++ b/lib/tasks/auto_annotate_models.rake @@ -0,0 +1,34 @@ +# NOTE: only doing this in development as some production environments (Heroku) +# NOTE: are sensitive to local FS writes, and besides -- it's just not proper +# NOTE: to have a dev-mode tool do its thing in production. +if Rails.env.development? + task :set_annotation_options do + # You can override any of these by setting an environment variable of the + # same name. + Annotate.set_defaults({ + 'position_in_routes' => "before", + 'position_in_class' => "before", + 'position_in_test' => "before", + 'position_in_fixture' => "before", + 'position_in_factory' => "before", + 'show_indexes' => "true", + 'simple_indexes' => "false", + 'model_dir' => "app/models", + 'include_version' => "false", + 'require' => "", + 'exclude_tests' => "true", + 'exclude_fixtures' => "true", + 'exclude_factories' => "false", + 'ignore_model_sub_dir' => "false", + 'skip_on_db_migrate' => "false", + 'format_bare' => "true", + 'format_rdoc' => "false", + 'format_markdown' => "false", + 'sort' => "false", + 'force' => "false", + 'trace' => "false", + }) + end + + Annotate.load_tasks +end From 69f2fd2fbb5191ccbfaec42d31e9ab7d0d8890c9 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 23 Nov 2020 15:52:00 +0800 Subject: [PATCH 321/384] FIX code review --- app/views/users/projects.json.jbuilder | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/views/users/projects.json.jbuilder b/app/views/users/projects.json.jbuilder index 822402a23..d00ec68b0 100644 --- a/app/views/users/projects.json.jbuilder +++ b/app/views/users/projects.json.jbuilder @@ -1,6 +1,4 @@ json.count @total_count json.projects do - json.array! @projects do |project| - json.partial! "/projects/project_detail", project: project - end + json.partial! '/projects/project_detail', collection: @projects, as: :project end From 8f9e12a5e09bd5ff13a49265a865091bcee3cfaf Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 24 Nov 2020 11:22:32 +0800 Subject: [PATCH 322/384] Update local register method --- app/controllers/accounts_controller.rb | 32 ++++++++++++-------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index a27e28b81..a4b1d35ec 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -110,6 +110,7 @@ class AccountsController < ApplicationController # params[:login] 邮箱或者手机号 # params[:code] 验证码 # code_type 1:注册手机验证码 8:邮箱注册验证码 + # 本地forge注册入口 def register begin # 查询验证码是否正确;type只可能是1或者8 @@ -145,23 +146,20 @@ class AccountsController < ApplicationController # 现在因为是验证码,所以在注册的时候就可以激活 @user.activate # 必须要用save操作,密码的保存是在users中 - if @user.save! - # todo user_extension - UserExtension.create!(user_id: @user.id) - # 注册完成,手机号或邮箱想可以奖励500金币 - # RewardGradeService.call( - # @user, - # container_id: @user.id, - # container_type: pre == 'p' ? 'Phone' : 'Mail', - # score: 500 - # ) - # 注册时,记录是否是引流用户 - ip = request.remote_ip - ua = UserAgent.find_by_ip(ip) - ua.update_column(:agent_type, UserAgent::USER_REGISTER) if ua - successful_authentication(@user) - # session[:user_id] = @user.id - normal_status("注册成功") + + interactor = Gitea::RegisterInteractor.call({username: login, email: email, password: params[:password]}) + if interactor.success? + gitea_user = interactor.result + result = Gitea::User::GenerateTokenService.new(username, params[:password]).call + @user.gitea_token = result['sha1'] + @user.gitea_uid = gitea_user['id'] + if user.save! + UserExtension.create!(user_id: user.id) + successful_authentication(@user) + normal_status("注册成功") + end + else + tip_exception(-1, interactor.error) end rescue Exception => e uid_logger_error(e.message) From 5d5f0f42c0b701c2e4a3c53fc49254e1a76c615c Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 24 Nov 2020 11:30:01 +0800 Subject: [PATCH 323/384] FIX local register bug --- app/controllers/accounts_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index a4b1d35ec..03d81d5c9 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -130,13 +130,13 @@ class AccountsController < ApplicationController pre = 'm' email = params[:login] phone = nil + return normal_status(-1, "该邮箱已注册") if User.exists?(mail: params[:login]) + return normal_status(-1, "邮箱格式错误") unless params[:login] =~ CustomRegexp::EMAIL # verifi_code = VerificationCode.where(email: email, code: code, code_type: 8).last end # uid_logger("start register: verifi_code is #{verifi_code}, code is #{code}, time is #{Time.now.to_i - verifi_code.try(:created_at).to_i}") # check_code = (verifi_code.try(:code) == code.strip && (Time.now.to_i - verifi_code.created_at.to_i) <= 10*60) # todo 上线前请删除万能验证码"513231" - return normal_status(-1, "该邮箱已注册") if User.exists?(mail: params[:login]) - return normal_status(-1, "邮箱格式错误") unless params[:login] =~ CustomRegexp::EMAIL return normal_status(-1, "8~16位密码,支持字母数字和符号") unless params[:password] =~ CustomRegexp::PASSWORD code = generate_identifier User, 8, pre From 75202b1fc306ff41074c4cf869b6cad74bf49ec6 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 24 Nov 2020 11:32:03 +0800 Subject: [PATCH 324/384] FIX code bug --- app/controllers/accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 03d81d5c9..732ac0af1 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -150,7 +150,7 @@ class AccountsController < ApplicationController interactor = Gitea::RegisterInteractor.call({username: login, email: email, password: params[:password]}) if interactor.success? gitea_user = interactor.result - result = Gitea::User::GenerateTokenService.new(username, params[:password]).call + result = Gitea::User::GenerateTokenService.new(login, params[:password]).call @user.gitea_token = result['sha1'] @user.gitea_uid = gitea_user['id'] if user.save! From 146c21648bfa4b95a4d9bc81b48f8af0e235efcf Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 24 Nov 2020 11:33:23 +0800 Subject: [PATCH 325/384] FIX . --- app/controllers/accounts_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 732ac0af1..afa35a6ac 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -153,8 +153,8 @@ class AccountsController < ApplicationController result = Gitea::User::GenerateTokenService.new(login, params[:password]).call @user.gitea_token = result['sha1'] @user.gitea_uid = gitea_user['id'] - if user.save! - UserExtension.create!(user_id: user.id) + if @user.save! + UserExtension.create!(user_id: @user.id) successful_authentication(@user) normal_status("注册成功") end From d7e04316065a5060b53c9bee79ee4b3885eb6ef8 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 24 Nov 2020 16:58:39 +0800 Subject: [PATCH 326/384] Upate database.yml.example --- config/database.yml.example | 1 + 1 file changed, 1 insertion(+) diff --git a/config/database.yml.example b/config/database.yml.example index 42dc3df24..26e752e45 100644 --- a/config/database.yml.example +++ b/config/database.yml.example @@ -19,6 +19,7 @@ default: &default development: <<: *default + host: 127.0.0.1 database: forge_development # Warning: The database defined as "test" will be erased and From 225bb9f7b7677eed64310a5deef8253afeacd176 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 24 Nov 2020 17:00:42 +0800 Subject: [PATCH 327/384] Update table structure's rake task --- lib/tasks/sync_table_structure.rake | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/tasks/sync_table_structure.rake b/lib/tasks/sync_table_structure.rake index e1a775c5f..026d52140 100644 --- a/lib/tasks/sync_table_structure.rake +++ b/lib/tasks/sync_table_structure.rake @@ -4,7 +4,17 @@ namespace :sync_table_structure do task import_csv: :environment do puts "init table structure......." - system "mysql -uroot -poracle10g -h127.0.0.1 forge_development < #{Rails.root}/db/structure.sql" + database_config = Rails.configuration.database_configuration + + database = database_config[Rails.env]["database"] + database_username = database_config[Rails.env]["username"] + database_password = database_config[Rails.env]["password"] + database_host = database_config[Rails.env]["host"] + database_port = database_config[Rails.env]["port"] || 3306 + + puts "bash: mysql -u#{database_username} -p#{database_password} -P#{database_port} -h#{database_host} #{database}" + + system "mysql -u#{database_username} -p#{database_password} -P#{database_port} -h#{database_host} #{database} < #{Rails.root}/db/structure.sql" puts "init success" end From 17e182788ffb7da7e0834a8d406386b17c579621 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 24 Nov 2020 17:55:12 +0800 Subject: [PATCH 328/384] FIX bug --- app/models/user.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index a8fd4ac1a..f8f672fe5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -576,7 +576,7 @@ class User < ApplicationRecord def self.anonymous anonymous_user = AnonymousUser.unscoped.take if anonymous_user.nil? - anonymous_user = AnonymousUser.unscoped.create(lastname: 'Anonymous', firstname: '', login: '', mail: '358551897@qq.com', phone: '13333333333', status: 0, platform: User.platform[:forge]) + anonymous_user = AnonymousUser.unscoped.create(lastname: 'Anonymous', firstname: '', login: '', mail: '358551897@qq.com', phone: '13333333333', status: 0, platform: User.platform.forge) raise "Unable to create the anonymous user: error_info:#{anonymous_user.errors.messages}" if anonymous_user.new_record? end anonymous_user From 58a80af9293ff59499c256c6057f5ee93d152914 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 24 Nov 2020 17:56:30 +0800 Subject: [PATCH 329/384] FIX bug --- app/controllers/projects_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 4a5889fa1..0a26110d6 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -17,7 +17,7 @@ class ProjectsController < ApplicationController @total_count = if category_id.blank? ps = ProjectStatistic.first - ps.common_projects_count + ps.mirror_projects_count + ps.common_projects_count + ps.mirror_projects_count unless ps.blank? else cate = ProjectCategory.find_by(id: category_id) cate&.projects_count || 0 From 9a27b26cef92084c41201a18dc56351b195b0fcd Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 26 Nov 2020 15:15:15 +0800 Subject: [PATCH 330/384] FIX local bug --- app/controllers/concerns/login_helper.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/concerns/login_helper.rb b/app/controllers/concerns/login_helper.rb index 233aac0a1..d8f2445fb 100644 --- a/app/controllers/concerns/login_helper.rb +++ b/app/controllers/concerns/login_helper.rb @@ -127,6 +127,8 @@ module LoginHelper token = config[:sync_token] api_host = config[:sync_url] + return if api_host.blank? + url = "#{api_host}/api/v1/users/sync_user_token" sync_json = { "token": token, From 0f81caefdf2ad4516f66bf406b8eff054fd5df8b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 26 Nov 2020 15:15:51 +0800 Subject: [PATCH 331/384] FIX register api for platform default forge --- app/controllers/concerns/register_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/register_helper.rb b/app/controllers/concerns/register_helper.rb index a5a5652ba..a229ef42f 100644 --- a/app/controllers/concerns/register_helper.rb +++ b/app/controllers/concerns/register_helper.rb @@ -1,7 +1,7 @@ module RegisterHelper extend ActiveSupport::Concern - def autologin_register(username, email, password, platform= '') + def autologin_register(username, email, password, platform= 'forge') result = {message: nil, user: nil} user = User.new(admin: false, login: username, mail: email, type: "User") From 21169b45239604775da86a2eef04b2c4d83d9586 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 26 Nov 2020 15:16:23 +0800 Subject: [PATCH 332/384] ADD api document --- api_document.md | 3601 +++++++++++++++++++++++++++++++++++++++++++++++ deploy.md | 81 ++ 2 files changed, 3682 insertions(+) create mode 100644 api_document.md create mode 100644 deploy.md diff --git a/api_document.md b/api_document.md new file mode 100644 index 000000000..23a7c022b --- /dev/null +++ b/api_document.md @@ -0,0 +1,3601 @@ +--- + + +# API文档 + +## 基本介绍 + +### 开发API服务地址: + +**https://testgitea.trustie.net/** + + +响应状态说明: + +|字段|类型|说明| +|-|-|-| +|status |int |响应状态码,0:请求成功,-1: 请求失败| +|message |string |响应说明 | + + +### API接口 +--- + +#### 用户注册(通过其他平台) +``` +POST accounts/remote_register +``` +*示例* +``` +curl -X POST \ +-d "email=2456233122@qq.com" \ +-d "password=djs_D_00001" \ +-d "username=16895620" \ +-d "platform=forge" \ +http://localhost:3000/api/accounts/remote_register | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|email |是|string |邮箱 | +|username |是|string |登录名 | +|password |是|string |秘密 | +|platform |否|string |用户来源的相关平台,取值范围['educoder', 'trustie', 'forge'], 默认值为forge | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|user|json object |返回数据| +|-- id |int |用户id | +|-- token |string|用户token| + + +返回值 +``` +{ + "status": 0, + "message": "success", + "user": { + "id": 36400, + "token": "8c87a80d9cfacc92fcb2451845104f35119eda96" + } +} +``` +--- + +#### 获取当前登录用户信息 +``` +GET api/users/me +``` +*示例* +``` +curl -X GET http://localhost:3000/api/users/me | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|user_id |int |用户id | +|username |string|用户名称| +|admin |boolean|是否为管理用户| +|login |string|登录名| +|image_url |string|用户头像| + + +返回值 +``` +{ + "username": "18816895620", + "login": "18816895620", + "user_id": 36401, + "image_url": "avatars/User/b", + "admin": false +} +``` +--- + +#### 用户列表(带搜索功能) +``` +GET api/users/list +``` +*示例* +``` +curl -X GET \ +-d "limit=10" \ +-d "search=18816895620" +http://localhost:3000/api/users/list | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|page |否|int |页数,第几页 | +|limit |否|int |每页多少条数据,默认15条 | +|search |否|string |用户名、登录名匹配搜索 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int |总用户条数 | +|users |array| | +|-- username |string|用户全名| +|-- login |string|用户登录名| +|-- user_id |int|用户id| +|-- image_url |string|用户头像| + +返回值 +``` +{ + "total_count": 1, + "users": [ + { + "username": "18816895620", + "login": "18816895620", + "user_id": 36401, + "image_url": "avatars/User/b" + } + ] +} +``` +--- + +#### 获取项目类别列表(可根据名称搜素) +``` +GET api/project_categories +``` +*示例* +``` +curl -X GET \ +-d "name=大数据" \ +http://localhost:3000/api/project_categories/ | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|name |否|string |类别名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|project_categories|array |返回数据| +|-- id |int |类别id | +|-- name |string|类别名称| + + +返回值 +``` +{ + "project_categories": [ + { + "id": 1, + "name": "大数据" + } + ] +} +``` +--- + +#### 获取项目语言列表(可根据名称搜素) +``` +GET api/project_languages +``` +*示例* +``` +curl -X GET \ +-d "name=Ruby" \ +http://localhost:3000/api/project_languages/ | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|name |否|string |类别名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|project_languages|array |返回数据| +|-- id |int |语言id | +|-- name |string|语言名称| + + +返回值 +``` +{ + "project_languages": [ + { + "id": 1, + "name": "Ruby" + } + ] +} +``` +--- + +#### 获取.gitignore模板列表(可根据名称搜素) +``` +GET api/ignores +``` +*示例* +``` +curl -X GET \ +-d "name=Ada" \ +http://localhost:3000/api/ignores/ | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|name |否|string |gitignore名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|ignores|array |返回数据| +|-- id |int |id | +|-- name |string|gitignore名称| + + +返回值 +``` +{ + "ignores": [ + { + "id": 1, + "name": "Ada" + } + ] +} +``` +--- + +#### 获取开源许可证列表(可根据名称搜素) +``` +GET api/licenses +``` +*示例* +``` +curl -X GET \ +-d "name=AFL" \ +http://localhost:3000/api/licenses/ | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|name |否|string |开源许可证名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|licenses|array |返回数据| +|-- id |int |id | +|-- name |string|开源许可证名称| + + +返回值 +``` +{ + "licenses": [ + { + "id": 57, + "name": "AFL-1.2" + }, + { + "id": 76, + "name": "AFL-3.0" + }, + { + "id": 214, + "name": "AFL-1.1" + }, + { + "id": 326, + "name": "AFL-2.1" + }, + { + "id": 350, + "name": "AFL-2.0" + } + ] +} +``` +--- + +#### 创建项目 +``` +POST api/projects +``` +*示例* +``` +curl -X POST \ +-d "user_id=36401" \ +-d "name=hnfl_demo" \ +-d "description=my first project" \ +-d "repository_name=hnfl_demo" \ +-d "project_category_id=1" \ +-d "project_language_id=2" \ +-d "ignore_id=2" \ +-d "license_id=1" \ +http://localhost:3000/api/projects/ | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|user_id |是|int |用户id或者组织id | +|name |是|string |项目名称 | +|description |是|string |项目描述 | +|repository_name |是|string |仓库名称, 只含有数字、字母、下划线不能以下划线开头和结尾,且唯一 | +|project_category_id|是|int |项目类别id | +|project_language_id|是|int |项目语言id | +|ignore_id |否|int |gitignore相关id | +|license_id |否|int |开源许可证id | +|private |否|boolean|项目是否私有, true:为私有,false: 公开,默认为公开 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |id | +|name |string|项目名称| + + +返回值 +``` +{ + "id": 3240, + "name": "好项目" +} +``` +--- + +#### 新建镜像项目 +``` +POST api/projects/migrate +``` +*示例* +``` +curl -X POST \ +-d "user_id=36408" \ +-d "clone_addr=https://gitea.com/mx8090alex/golden.git" \ +-d "name=golden_mirror1" \ +-d "description=golden_mirror" \ +-d "project_category_id=1" \ +-d "project_language_id=2" \ +http://localhost:3000/api/projects/migrate.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|user_id |是|int |用户id或者组织id | +|name |是|string |项目名称 | +|clone_addr |是|string |镜像项目clone地址 | +|description |否|string |项目描述 | +|repository_name |是|string |仓库名称, 只含有数字、字母、下划线不能以下划线开头和结尾,且唯一 | +|project_category_id|是|int |项目类别id | +|project_language_id|是|int |项目语言id | +|is_mirror |否|boolean|是否设置为镜像, true:是, false:否,默认为否 | +|auth_username |否|string|镜像源仓库的登录用户名 | +|auth_password |否|string|镜像源仓库的登录秘密 | +|private |否|boolean|项目是否私有, true:为私有,false: 非私有,默认为公开 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |id | +|name |string|项目名称| + + +返回值 +``` +{ + "id": 3263, + "name": "ni项目" +} +``` + +--- +#### 手动同步镜像 +``` +POST api/repositories/:id/sync_mirror +``` +*示例* +``` +curl -X POST http://localhost:3000/api/repositories/1244/sync_mirror | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |仓库id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int |状态码, 0:标识请求成功 | +|message |string|服务端返回的信息说明| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` + +--- + +#### 项目详情 +``` +GET /api/:namespace_id/:id +``` +*示例* +``` +curl -X GET http://localhost:3000/api/jasder/jasder_test | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|namespace_id |是|string |用户登录名 | +|id |是|string |项目标识identifier | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |id | +|name |string|项目名称| +|identifier |string|项目标识| +|is_public |boolean|项目是否公开, true:公开,false:私有| +|description |string|项目简介| +|repo_id |int|仓库id| +|repo_identifier|string|仓库标识| + + +返回值 +``` +{ + "name": "ni项目", + "identifier": "mirror_demo", + "is_public": true, + "description": "my first project mirror_demo", + "repo_id": 75073, + "repo_identifier": "mirror_demo" +} +``` +--- + +#### 项目详情(简版) +``` +GET /api/:namespace_id/:id/simple +``` +*示例* +``` +curl -X GET http://localhost:3000/api/jasder/jasder_test/simple | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |id | +|name |string|项目名称| +|identifier |string|项目标识| +|is_public |boolean|项目是否公开, true:公开,false:私有| +|description |string|项目简介| +|repo_id |int|仓库id| +|repo_identifier|string|仓库标识| + + +返回值 +``` +{ + "identifier": "jasder_test", + "name": "jasder的测试项目", + "id": 4967, + "type": 0, + "author": { + "login": "jasder", + "name": "姓名", + "image_url": "avatars/User/b" + } +} +``` +--- + +#### 编辑仓库信息 +``` +GET /api/repositories/:id/edit.json +``` +*示例* +``` +curl -X GET http://localhost:3000/api/repositories/:id/edit.json | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|identifier |string |仓库标识 | +|project_id |int|项目id| +|project_name |string|项目名称| +|project_identifier |string|项目标识| +|project_description |string|项目简介| +|project_category_id |int|项目类别id| +|project_language_id |int|项目语言id| +|private |boolean|项目是否私有, true:为私有,false: 公开 | + + +返回值 +``` +{ + "identifier": "mirror_demo", + "project_id": 3263, + "project_name": "ni项目", + "project_identifier": "mirror_demo", + "project_description": "my first project mirror_demo", + "project_category_id": 1, + "project_language_id": 2, + "private": false +} +``` +--- + +#### 修改项目信息 +``` +PATCH api/projects/:id +``` +*示例* +``` +curl -X PATCH \ +-d "name=hnfl_demo" \ +-d "description=my first project" \ +-d "project_category_id=1" \ +-d "project_language_id=2" \ +-d "private=true" \ +http://localhost:3000/api/projects/3263.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|name |否|string |项目名称 | +|description |否|string |项目描述 | +|project_category_id|否|int |项目类别id | +|project_language_id|否|int |项目语言id | +|default_branch |否|string |默认分支名称 | +|private |否|boolean|项目是否私有, true:为私有,false: 公开,默认为公开 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|id | +|identifier |string|项目标识| +|name |string|项目名称| +|description |string|项目简介| +|project_category_id|int|项目类别id| +|project_language_id|int|项目语言id| +|private |否|boolean|项目是否私有, true:为私有,false: 公开,默认为公开 | + + +返回值 +``` +{ + "id": 3263, + "identifier": "mirror_demo", + "name": "hnfl_demo", + "description": "my first project", + "project_category_id": 1, + "project_language_id": 2, + "is_public": true +} +``` +--- + +#### 删除项目 +``` +DELETE api/projects/:id +``` +*示例* +``` +curl -X DELETE http://localhost:3000/api/projects/3263.json | jq +``` + +注:只有超级管理员和项目拥有者才能删除仓库 + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|返回状态, 0: 表示操作成功 | +|message |string|返回信息说明| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +#### 项目添加成员 +``` +POST api/projects/:id/members +``` +*示例* +``` +curl -X POST \ +-d "user_id=36406" \ +http://localhost:3000/api/projects/3297/members | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|user_id |是|int |用户id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int |0:添加成功, -1: 添加失败, 1: 表示已经是项目成员 | +|message |string|返回信息说明| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +#### 项目删除成员 +``` +DELETE api/projects/:id/members/remove +``` +*示例* +``` +curl -X DELETE \ +-d "user_id=36400" \ +http://localhost:3000/api/projects/3263/members/remove | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|user_id |是|int |用户id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int |0:移除成功, -1: 移除失败, 1: 表示还不是项目成员 | +|message |string|返回信息说明| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +#### 更改项目成员角色/权限 +``` +PUT api/projects/:id/members/change_role +``` +*示例* +``` +curl -X PUT \ +-d "user_id=36400" \ +-d "role=Developer" \ +http://localhost:3000/api/projects/3263/members/change_role | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|user_id |是|int |用户id | +|role |是|string |取值范围:"Manager", "Developer", "Reporter";分别为项目管理人员(拥有所有操作权限)、项目开发人员(只拥有读写权限)、项目报告人员(只拥有读权限) | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int |0:角色更改成功, -1: 更改失败失败, 1: 表示还不是项目成员 | +|message |string|返回信息说明| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + + +#### 项目成员列表 +``` +GET api/projects/:id/members +``` +*示例* +``` +curl -X GET \ +-d "page=1" \ +-d "limit=5" \ +http://localhost:3000/api/projects/3263/members | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认15条 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int |返回记录总条数 | +|members |array|项目成员信息| +|-- id |int|用户id| +|-- name |string|用户名称| +|-- login |string|用户登录名/标识| +|-- image_url |string|用户头像| +|-- is_owner |boolean|是否是项目的拥有者,true:是, false:不是| +|-- role |string|该用户在项目中的角色, Manager: 管理员(拥有操作权限); Developer:开发人员(只拥有读写权限); Reporter:报告人员(只拥有读权限)| + + +返回值 +``` +{ + "total_count": 2, + "members": [ + { + "id": 36401, + "name": "18816895620", + "login": "18816895620", + "image_url": "avatars/User/b", + "is_owner": true, + "role": "Manager" + }, + { + "id": 36399, + "name": "18816365620", + "login": "18816365620", + "image_url": "avatars/User/b", + "is_owner": false, + "role": "Developer" + } + ] +} +``` +--- + +#### Fork项目 +``` +POST /api/projects/:project_id/forks +``` +*示例* +``` +curl -X POST http://localhost:3000/api/projects/3297/forks | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|project_id |是|int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |项目id | +|identifier |string|项目标识| + + +返回值 +``` +{ + "id": 3290, + "identifier": "newadm" +} +``` +--- + +#### 获取代码目录列表 +``` +POST /api/:namespace_id/:project_id/repository/entries +``` +*示例* +``` +curl -X GET \ +-d "ref=develop" \ +http://localhost:3000//api/jasder/jasder_test/repository/entries | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|last_commit |object | | +|-- commit |object | | +|id |int |id | +|name |string|文件夹或文件名称| +|path |string|文件夹或文件相对路径| +|type |string|文件类型, file:文件,dir:文件目录| +|size |int|文件夹或文件大小 单位B| +|content |string|文件内容,| +|target |string|标签| + +返回值 +```json +{ + "last_commit": { + "commit": { + "sha": "3f2de4f78d2d7050486535082cd11cdfc9f3679e", + "url": "http://localhost:3003//api/repositories/api-cloud-platform/commits/3f2de4f78d2d7050486535082cd11cdfc9f3679e", + "message": "update README.md.", + "author": { + "name": "Gitee", + "email": "noreply@gitee.com", + "date": "2020-03-02T20:23:18+08:00" + }, + "committer": { + "name": "Gitee", + "email": "noreply@gitee.com", + "date": "2020-03-02T20:23:18+08:00" + }, + "timestamp": 1583151798, + "time_from_now": "3个月前" + }, + "author": null, + "committer": null + }, + "entries": [ + { + "name": "ace-gate", + "path": "ace-gate", + "sha": "c83f85fc63b14edcd6fc502eee9996f5a9993eca", + "type": "dir", + "size": 0, + "content": null, + "target": null, + "commit": { + "message": "v2.9 升级alibaba组件release版本\n", + "sha": "6117eaab86f71115f42f2a46ff1683015cda798d", + "created_at": "1970-01-01 08:00", + "time_from_now": "51年前", + "created_at_unix": null + } + }, + { + "name": "ace-sidecar", + "path": "ace-sidecar", + "sha": "38e41d7810876b464f8f1adcbf998e1b04f710a7", + "type": "dir", + "size": 0, + "content": null, + "target": null, + "commit": { + "message": "[Feature] 升级spring 版本&consul注册中心\n", + "sha": "c0a5dde35cfc87f7dbaf676aac397b184ba0e55b", + "created_at": "1970-01-01 08:00", + "time_from_now": "51年前", + "created_at_unix": null + } + }, + ... + ] +} +``` +--- + +#### 获取子目录代码列表/编辑某个具体的文件 +``` +GET /api/repositories/:id/sub_entries +``` +*示例* +``` +curl -X GET \ +-d "ref=master" \ +-d "filepath=test1_create_file.rb" \ +http://localhost:3000/api/repositories/87/sub_entries.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|filepath |是|string |文件夹、文件的相对路径 | +|ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |id | +|name |string|文件夹或文件名称| +|path |string|文件夹或文件相对路径| +|type |string|文件类型, file:文件,dir:文件目录| +|size |int|文件夹或文件大小 单位KB| +|content |string|文件内容,| +|target |string|标签| +|url |string|文件访问链接,带分支| +|html_url |string|文件访问链接,未标识分支| +|git_url |string|文件夹或文件的git仓库访问链接| +|download_url |string|文件下载、文件内容访问链接| + +返回值 +```json +[ + { + "name": "build.rc", + "path": "lib/build.rc", + "type": "", + "size": 1268, + "content": null, + "target": null, + "url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/contents/lib/build.rc?ref=master", + "html_url": "http://localhost:3003/18816895620/mirror_demo/src/branch/master/lib/build.rc", + "git_url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/git/blobs/191fcf1a63b3777e2977fcede7dd5309efdd70fe", + "download_url": null + }, + { + "name": "cfg.rc", + "path": "lib/cfg.rc", + "type": "file", + "size": 107, + "content": null, + "target": null, + "url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/contents/lib/cfg.rc?ref=master", + "html_url": "http://localhost:3003/18816895620/mirror_demo/src/branch/master/lib/cfg.rc", + "git_url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/git/blobs/0b91ba0ed1c00e130c77bb9058af3787fea986a0", + "download_url": "http://localhost:3003/18816895620/mirror_demo/raw/branch/master/lib/cfg.rc" + }, + { + "name": "fn", + "path": "lib/fn", + "type": "dir", + "size": 0, + "content": null, + "target": null, + "url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/contents/lib/fn?ref=master", + "html_url": "http://localhost:3003/18816895620/mirror_demo/src/branch/master/lib/fn", + "git_url": "http://localhost:3003/api/v1/repos/18816895620/mirror_demo/git/blobs/e33bd45949ef8f804471d0b6b2c59728eb445989", + "download_url": null + } +] +``` +--- + +#### 项目类别列表(用于项目列表左侧导航中的项目类别列表) +``` +GET api/project_categories/group_list +``` +*示例* +``` +curl -X GET http://localhost:3000/api/project_categories/group_list | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int |项目分类id | +|name |string|项目分类名称| +|projects_count |int |项目数量| + + +返回值 +``` +[ + { + "id": 1, + "name": "大数据", + "projects_count": 30 + }, + { + "id": 2, + "name": "机器学习", + "projects_count": 1 + }, + { + "id": 3, + "name": "深度学习", + "projects_count": 1 + } +] +``` +--- + +#### 项目类型列表(用于项目列表左侧导航上方中的项目类型列表) +``` +GET api/projects/group_type_list +``` +*示例* +``` +curl -X GET http://localhost:3000/api/projects/group_type_list | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|project_type |string|项目类型 | +|name |string|项目类型名称| +|projects_count |int |项目数量| + + +返回值 +``` +[ + { + "project_type": "common", + "name": "开源托管项目", + "projects_count": 2106 + }, + { + "project_type": "mirror", + "name": "开源镜像项目", + "projects_count": 1 + } +] +``` +--- + +#### 项目列表 +``` +GET api/projects +``` +*示例* +``` +curl -X GET \ +-d "page=1" \ +-d "limit=5" \ +http://localhost:3000/api/projects | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认15条 | +|sort_by |否|string |排序类型, 取值:updated_on \| created_on \| forked_count \| praises_count, updated_on: 更新时间排序,created_on: 创建时间排序,forked_count: fork数据排序,praises_count: 点赞数量排序,默认为updated_on更新时间排序 | +|sort_direction|否|string |排序方式,取值为: desc \| asc; desc: 降序排序, asc: 升序排序, 默认为:desc | +|search |否|string |按照项目名称搜索 | +|category_id |否|int |项目类别id | +|language_id |否|int |项目语言id | +|project_type |否|string |项目类型, 取值为:common \| mirror; common:开源托管项目, mirror:开源镜像项目 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int |项目总条数 | +|id |string |项目id | +|name |string|项目名称| +|description |string|项目简介| +|visits |int|流量数| +|forked_count |int|被fork的数量| +|praises_count |int|star数量| +|is_public |boolean|是否公开, true:公开,false:未公开| +|mirror_url |string|镜像url| +|last_update_time|int|最后更新时间,为UNIX格式的时间戳| +|author |object|项目创建者| +|-- name |string|用户名,也是用户标识| +|category |object|项目类别| +|-- id |int|项目类型id| +|-- name |string|项目类型名称| +|language |object|项目语言| +|-- id |int|项目语言id| +|-- name |string|项目语言名称| + + +返回值 +``` +{ + "total_count": 3096, + "projects": [ + { + "id": 1, + "name": "hnfl_demo1", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": true, + "mirror_url": null, + "last_update_time": 1577697461, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + }, + { + "id": 2, + "name": "hnfl_demo", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": true, + "mirror_url": null, + "last_update_time": 1577697403, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + }, + { + "id": 3, + "name": "统计局", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": true, + "mirror_url": null, + "last_update_time": 1577415173, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + }, + { + "id": 5, + "name": "开源同名", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": false, + "mirror_url": "https://gitea.com/CasperVector/slew.git", + "last_update_time": 1577346228, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + }, + { + "id": 7, + "name": "开源支持", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": true, + "mirror_url": null, + "last_update_time": 1577341572, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + } + ] +} +``` +--- + +#### 推荐项目 +``` +GET api/projects/recommend +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/projects/recommend | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int |项目总条数 | +|id |string |项目id | +|name |string|项目名称| +|description |string|项目简介| +|visits |int|流量数| +|forked_count |int|被fork的数量| +|praises_count |int|star数量| +|is_public |boolean|是否公开, true:公开,false:未公开| +|mirror_url |string|镜像url| +|last_update_time|int|最后更新时间,为UNIX格式的时间戳| +|author |object|项目创建者| +|-- name |string|用户名,也是用户标识| +|category |object|项目类别| +|-- id |int|项目类型id| +|-- name |string|项目类型名称| +|language |object|项目语言| +|-- id |int|项目语言id| +|-- name |string|项目语言名称| + + +返回值 +``` +[ + { + "id": 20, + "repo_id": null, + "identifier": "PNAekinmH", + "name": "FNILL", + "visits": 13567, + "author": { + "name": "王一达", + "login": "wangyida", + "image_url": "avatars/User/b" + }, + "category": { + "id": 8, + "name": "其他" + } + }, + ... +] + +``` +--- + +#### 项目主页 +``` +GET api/:namespace_id/:id/about +``` + +*示例* +``` +curl -X GET \ +http://localhost:3000/api/:jason/forgeplus/about | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|namespace_id |是|string |用户登录名 | +|id |是|string |项目标识identifier | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|identifier |string|project's identifier| +|content |string|主页内容| +|attachments |array|附件| +|-- name |string|用户名,也是用户标识| + + +返回值 +``` +{ + "content": "", + "identifier": "forgeplus", + attachments: [ + + ] +} + +``` +--- + +#### 修改项目主页内容 +``` +POST api/:namespace_id/:id/about +``` + +*示例* +``` +curl -X POST \ +-d "content=内容" \ +-d "attachment_ids=[1, 2, 2]" \ +http://localhost:3000/api/:jasder/forgeplus/about | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|namespace_id |是|string |用户登录名 | +|id |是|string |项目标识identifier | +|content |是|string |内容信息 | +|attachment_ids |是|array |附件id | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|identifier |string|project's identifier| +|content |string|主页内容| +|attachments |array|附件| +|-- name |string|用户名,也是用户标识| + +返回值 +``` +{ + "content": "", + "identifier": "forgeplus", + attachments: [ + + ] +} + +``` +--- + +### 获取分支列表 +``` +GET /api/:namespace_id/:id/branches +``` +*示例* +``` +curl -X GET http://localhost:3000/api/jasder/jasder_test/branches | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|id |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|name |string|分支名称| +|user_can_push |boolean|用户是否可push| +|user_can_merge |boolean|用户是否客merge| +|protected |boolean|是否为保护分支| +|http_url |boolean|http链接| +|zip_url |boolean|zip包下载链接| +|tar_url |boolean|tar.gz下载链接| +|last_commit |object|最后提交记录| +|-- id |string|提交记录id| +|-- message |string|提交的说明信息| +|-- timestamp |int|提交时间,为UNIX时间戳| +|-- time_from_now|string|转换后的时间| +|author |object|提交用户| +|-- login |string|用户名称| +|-- image_url |string|用户头像| + + +返回值 +``` +[ + { + "name": "develop", + "user_can_push": true, + "user_can_merge": true, + "protected": false, + "http_url": "http://localhost:3003/18816895620/mirror_demo.git", + "zip_url": "http://localhost:3003/18816895620/mirror_demo/develop.zip", + "tar_url": "http://localhost:3003/18816895620/mirror_demo/develop.tar.gz", + "last_commit": { + "id": "735674d6696bddbafa993db9c67b40c41246c77f", + "message": "FIX test branch content\n", + "timestamp": 1577694074, + "time_from_now": "1天前" + }, + "author": { + "login": "18816895620", + "image_url": "avatars/User/b" + } + }, + { + "name": "master", + "user_can_push": true, + "user_can_merge": true, + "protected": false, + "http_url": "http://localhost:3003/18816895620/mirror_demo.git", + "zip_url": "http://localhost:3003/18816895620/mirror_demo/master.zip", + "tar_url": "http://localhost:3003/18816895620/mirror_demo/master.tar.gz", + "last_commit": { + "id": "19ac3bc45f62cc87a94b8ecce61101d8fd2dafd2", + "message": "合并pull request测试\n\n该功能很不错,感谢你的建议\n", + "timestamp": 1577244567, + "time_from_now": "6天前" + }, + "author": { + "login": "18816895620", + "image_url": "avatars/User/b" + } + } +] +``` +--- + +### 获取代码库标签列表 +``` +GET /api/repositories/:id/tags +``` +*示例* +``` +curl -X GET \ +-d "limit=20" \ +-d "page=1" \ +http://localhost:3000/api/repositories/5836/tags.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |仓库id | +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认20条 | + + +*返回参数说明:* + +|参数名|类型|说明| +-|-|- +|name |string|分支名称| +|user_can_push |boolean|用户是否可push| +|user_can_merge |boolean|用户是否客merge| +|protected |boolean|是否为保护分支| +|http_url |boolean|http链接| +|zip_url |boolean|zip包下载链接| +|tar_url |boolean|tar.gz下载链接| +|last_commit |object|最后提交记录| +|-- id |string|提交记录id| +|-- message |string|提交的说明信息| +|-- timestamp |int|提交时间,为UNIX时间戳| +|-- time_from_now|string|转换后的时间| +|author |object|提交用户| +|-- login |string|用户名称| +|-- image_url |string|用户头像| + + +返回值 +``` +[ + { + "name": "develop", + "user_can_push": true, + "user_can_merge": true, + "protected": false, + "http_url": "http://localhost:3003/18816895620/mirror_demo.git", + "zip_url": "http://localhost:3003/18816895620/mirror_demo/develop.zip", + "tar_url": "http://localhost:3003/18816895620/mirror_demo/develop.tar.gz", + "last_commit": { + "id": "735674d6696bddbafa993db9c67b40c41246c77f", + "message": "FIX test branch content\n", + "timestamp": 1577694074, + "time_from_now": "1天前" + }, + "author": { + "login": "18816895620", + "image_url": "avatars/User/b" + } + }, + { + "name": "master", + "user_can_push": true, + "user_can_merge": true, + "protected": false, + "http_url": "http://localhost:3003/18816895620/mirror_demo.git", + "zip_url": "http://localhost:3003/18816895620/mirror_demo/master.zip", + "tar_url": "http://localhost:3003/18816895620/mirror_demo/master.tar.gz", + "last_commit": { + "id": "19ac3bc45f62cc87a94b8ecce61101d8fd2dafd2", + "message": "合并pull request测试\n\n该功能很不错,感谢你的建议\n", + "timestamp": 1577244567, + "time_from_now": "6天前" + }, + "author": { + "login": "18816895620", + "image_url": "avatars/User/b" + } + } +] +``` +--- + +## 仓库详情 +``` +GET /api/:namespace_id/:project_id/repository +``` +*示例* +``` +curl -X GET \ +http://192.168.2.230:3000/api/jasder/forgeplus/repository | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|namespace_id |是|string |用户登录名 | +|project_id |是|string |项目标识identifier | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|identifier |string|仓库标识| +|project_id |int|项目id| +|project_identifier|string|项目标识| +|praises_count |int|点赞数量| +|forked_count |int|fork数量| +|watchers_count |int|关注数量| +|branches_count |int|分支数量| +|commits_count |int|总提交记录数量| +|issues_count |int|总提交记录数量| +|pull_requests_count |int|总提交记录数量| +|praised |boolean|当前登录用户是否已点赞,true:已点赞,fasle:未点赞, 用户未登录状态为null| +|watched |boolean|当前登录用户是否已关注,true:已关注,fasle:未关注, 用户未登录状态为null| +|permission |string|当前登录用户对该仓库的操作权限, Manager:管理员,可以在线编辑文件、在线新建文件、可以设置仓库的基本信息; Developer:开发人员,可在线编辑文件、在线新建文件、不能设置仓库信息; Reporter: 报告人员,只能查看信息,不能设置仓库信息、不能在线编辑文件、不能在线新建文件;用户未登录时也会返回Reporter, 说明也只有读取文件的权限 | +|size |int|仓库文件大小,单位:KB| +|type |int|项目类型; 2: 表示是一个镜像(具备同步功能), 1: 普通镜像项目(不具同步功能), 0: 普通托管项目, 3: fork项目| +|mirror_status |int|该字段在type字段为2(一个镜像)时才会出现; 0: 表示同步镜像成功;1: 表示正在同步镜像;2: 同步失败| +|mirror_url |string|镜像地址, 只有通过镜像过来的项目才会有这个地址| +|ssh_url |string|仓库ssh地址| +|clone_url |string|仓库克隆地址| +|empty |boolean|仓库是否为空,true: 空仓库;false: 非空仓库| +|private |boolean|仓库是否私有,true: 私有仓库;fasle: 非私有的| +|default_branch |string|仓库默认分支| +|full_name |string|仓库全名(带用户名)| +|author |object|提交用户| +|-- login |string|用户login| +|-- name |string|用户姓名| +|-- image_url |string|用户头像| + + +返回值 +``` +{ + "identifier": "mirror_demo", + "project_id": 3263, + "project_identifier": "mirror_demo", + "praises_count": 1, + "forked_count": 0, + "watchers_count": 1, + "branches_count": 6, + "commits_count": 107, + "issues_count": 0, + "pull_requests_count": 0, + "permission": "Manager", + "mirror_url": "https://gitea.com/CasperVector/slew.git", + "watched": true, + "praised": true, + "size": 446, + "ssh_url": "jasder@localhost:18816895620/mirror_demo.git", + "clone_url": "http://localhost:3003/18816895620/mirror_demo.git", + "default_branch": "master", + "empty": false, + "full_name": "18816895620/mirror_demo", + "mirror": false, + "private": false, + "author": { + "login": "18816895620", + "name": "美女", + "image_url": "avatars/User/b" + } +} +``` +--- + +## 获取提交记录列表 +``` +GET /api/repositories/:id/commits +``` +*示例* +``` +curl -X GET \ +-d "sha=develop" \ +-d "page=1" \ +http://localhost:3000/api/repositories/89/commits.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|sha |否|string |分支名称、提交记录的sha标识,默认为master分支 | +|page |否|int |页数, 默认为1 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count|int|总记录条数| +|commits |array|提交记录的数组| +|-- sha |string|提交记录sha标识| +|-- message |string|提交的备注说明| +|-- timestamp |int|提交UNIX时间戳| +|-- time_from_now|string|提交距离当前的时间| +|author |object|提交用户| +|-- login |string|用户名称| +|-- image_url |string|用户头像| + + +返回值 +``` +{ + "total_count": 63, + "commits": [ + { + "sha": "19ac3bc45f62cc87a94b8ecce61101d8fd2dafd2", + "message": "合并pull request测试", + "timestamp": 1577244567, + "time_from_now": "7天前", + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + } + }, + { + "sha": "2b33c5f55214db41879936312ee43611406c4dbd", + "message": "FIX .", + "timestamp": 1577244474, + "time_from_now": "7天前", + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + } + } + ] +} +``` +--- + +## 获取某个提交记录(包含diff) +``` +GET /api/:owner/:repo/commits/:sha +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/jasder/repo/commits/b0c4a4a1487d53acebf2addc544b29938cad12df.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |仓库拥有者 | +|repo |是|string |仓库的identifier值 | +|sha |否|string |git的ref或者是提交记录commit的sha标识 | + + +*返回参数说明: 请参考compare接口* + + +返回值 +``` +{ + "files_count": 6, + "total_addition": 447, + "total_deletion": 0, + "commit": { + "sha": "8f5faee0d3b3be1b8063e84da0c79dd75327b968", + "message": "add some file\n* Add the tag list page to the release page\n* Apply suggestions from code review\n* Add the tags list view\n* Add the delete tag way on ui\n* Not delete tag and clear message when delete a release\n", + "author": { + "name": "Jasder", + "email": "2053003901@@qq.com", + "date": "2020-11-03T13:56:22+08:00" + }, + "committer": { + "name": "Jasder", + "email": "2053003901@@qq.com", + "date": "2020-11-03T13:56:22+08:00" + }, + "timestamp": 1604382982, + "time_from_now": "3天前" + }, + "author": null, + "committer": null, + "parents": [ + { + "sha": "c7f5b90725f30d8ad840a026773f9df92debc3af" + }, + "files": [ + { + "name": "build.go", + "old_name": "build.go", + "index": 1, + "addition": 33, + "deletion": 0, + "type": 1, + "isCreated": true, + "isDeleted": false, + "isBin": false, + "isLFSFile": false, + "isRenamed": false, + "isSubmodule": false, + "sections": [ + { + "fileName": "build.go", + "name": "", + "lines": [ + { + "leftIdx": 0, + "rightIdx": 0, + "type": 4, + "content": "@@ -0,0 +1,33 @@", + "sectionInfo": { + "path": "build.go", + "lastLeftIdx": 0, + "lastRightIdx": 0, + "leftIdx": 0, + "rightIdx": 1, + "leftHunkSize": 0, + "rightHunkSize": 33 + } + }, + { + "leftIdx": 0, + "rightIdx": 1, + "type": 2, + "content": "+// Copyright 2020 The Gitea Authors. All rights reserved.", + "sectionInfo": null + } + ] + } + ] + } + ] +} +``` +--- + +### 点赞 +``` +POST /api/projects/:id/praise_tread/like +``` +*示例* +``` +curl -X POST http://localhost:3000/api/projects/3263/praise_tread/like | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是 |int |项目id | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:点赞成功,-1:操作失败,2:表示已经点过赞了| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +### 取消点赞 +``` +DELETE /api/projects/:id/praise_tread/unlike +``` +*示例* +``` +curl -X DELETE http://localhost:3000/api/projects/3263/praise_tread/unlike | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是 |int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:点赞成功,-1:操作失败,2:表示还未点赞| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +### 用户是否点过赞 +``` +GET /api/projects/:id/praise_tread/check_like +``` +*示例* +``` +curl -X GET http://localhost:3000/api/projects/3263/praise_tread/check_like | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是 |int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|1:已点过赞,0:未点过赞, -1:请求操作失败| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +### 项目的点赞者列表 +``` +GET /api/projects/:id/praise_tread +``` +*示例* +``` +curl -X GET \ +-d "page=1" \ +-d "limit=5" \ +http://localhost:3000/api/projects/3263/praise_tread | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认15条 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int|总条数| +|praises |array|点赞数据| +|-- name |string|用户名称| +|-- login |string|用户标识/登录名(login)| +|-- image_url |string|用户头像| + + + +返回值 +``` +{ + "total_count": 1, + "praises": [ + { + "name": "18816895620", + "login": "18816895620", + "image_url": "avatars/User/b" + } + ] +} +``` +--- + +### 关注(项目) +``` +POST /api/projects/:id/watchers/follow +``` +*示例* +``` +curl -X POST http://localhost:3000/api/projects/3263/watchers/follow | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:点赞成功,-1:操作失败,2:表示已经点过赞了| + + +返回值 +``` +{ + "status": 0, + "message": "响应成功" +} +``` +--- + +### 取消关注 +``` +DELETE /api/projects/:id/watchers/unfollow +``` +*示例* +``` +curl -X DELETE http://localhost:3000//api/projects/3263/watchers/unfollow | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:点赞成功,-1:操作失败,2:表示还未点赞| + + +返回值 +``` +{ + "status": 0, + "message": "响应成功" +} +``` +--- + +### 用户是否关注过项目 +``` +GET /api/projects/:id/watchers/check_watch +``` +*示例* +``` +curl -X GET http://localhost:3000/api/projects/3263/watchers/check_watch | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是 |int |项目id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|1:已关注,0:未关注, -1:请求操作失败| + + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +### 项目的关注者列表 +``` +GET /api/projects/:id/watchers +``` +*示例* +``` +curl -X GET \ +-d "page=1" \ +-d "limit=5" \ +http://localhost:3000//api/projects/3263/watchers | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认15条 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int|总条数| +|watchers |array|关注数据| +|-- name |string|用户名称| +|-- login |string|用户标识/登录名(login)| +|-- image_url |string|用户头像| + + +返回值 +``` +{ + "total_count": 1, + "watchers": [ + { + "name": "18816895620", + "login": "18816895620", + "image_url": "avatars/User/b" + } + ] +} +``` +--- + +### 仓库新建文件 +``` +POST /api/repositories/:id/create_file +``` +*示例* +``` +curl -X POST \ +-d 'filepath=test1_create_file1.rb' \ +-d 'branch=master' \ +-d 'content=提交的内容' \ +-d 'message=test commit ' \ +http://localhost:3000/api/18816895620/mirror_demo/contents.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|string |项目id | +|filepath |是|string |文件相对于仓库的路径 | +|content |否|string |内容 | +|message |否|string |提交说明 | +|branch |否|string |分支名称, branch和new_branch必须存在一个 | +|new_branch |否|string |新的分支名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|name |string|文件名| +|sha |string|提交文件的sha值| +|size |int|文件大小, 单位:B| +|content |string|base64编码后的文件内容| +|encoding |string|编码方式| +|commit |object|| +|-- message |string|提交备注说明信息| +|-- committer|object|| +|---- name |string|用户名| +|---- email |string|用户邮箱| +|---- date |string|文件创建时间| + + + +返回值 +``` +{ + "name": "test1_create_file12.rb", + "sha": "7b70509105b587e71f5692b9e8ab70851e321f64", + "size": 12, + "content": "Wm5ObWMyRmtaZz09", + "encoding": "base64", + "commit": { + "message": "good luck\n", + "author": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-07T03:31:20Z" + }, + "committer": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-07T03:31:20Z" + } + } +} +``` +--- + +### 更新仓库中的文件 +``` +PUT /api/repositories/:id/update_file.json +``` +*示例* +``` +curl -X PUT \ +-d 'filepath=text1.rb' \ +-d 'branch=master' \ +-d 'content=ruby code' \ +-d 'message=更改提交信息' \ +-d 'from_path=text.rb' \ +-d "sha=57426eb21e4ceabdf4b206f022077e0040" \ +http://localhost:3000/api/repositories/3938/update_file.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|filepath |是|string |文件相对于仓库的路径(或修改后的文件路径) | +|from_path |是|string |原文件相对于仓库的路径, 只有当需要修改原文件名称时,才需要该参数 | +|sha |是|string |文件的sha标识值 | +|content |是|string |内容 | +|message |否|string |提交说明 | +|branch |否|string |分支名称, branch和new_branch必须存在一个,且只能存在一个 | +|new_branch |否|string |新的分支名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|name |string|文件名| +|sha |string|提交文件的sha值| +|size |int|文件大小, 单位:B| +|content |string|base64编码后的文件内容| +|encoding |string|编码方式| +|commit |object|| +|-- message |string|提交备注说明信息| +|-- committer|object|| +|---- name |string|用户名| +|---- email |string|用户邮箱| +|---- date |string|文件创建时间| + + +返回值 +``` +{ + "name": "test1_create_file6.rb", + "sha": "57426eb21e4ceabdf4b206f022257e08077e0040", + "size": 16, + "content": "5o+Q5Lqk55qE5YaF5a65MQ==", + "encoding": "base64", + "commit": { + "message": "更改提交信息\n", + "author": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-08T07:05:15Z" + }, + "committer": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-08T07:05:15Z" + } + } +} +``` +--- + +### 删除仓库中的文件 +``` +DELETE /api/repositories/:id/delete_file +``` +*示例* +``` +curl -X DELETE \ +-d 'filepath=test1_create_file12.rb' \ +-d 'test delete file' \ +-d 'sha=7b70509105b587e71f5692b9e8ab70851e321f64' \ +http://localhost:3000/api//api/repositories/3868/delete_file | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |项目id | +|filepath |是|string |文件相对于仓库的路径 | +|message |否|string |提交说明 | +|branch |否|string |分支名称, 默认为master分支| +|new_branch |否|string |新的分支名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|sha |string|提交文件的sha值| +|commit |object|| +|-- message |string|提交备注说明信息| +|-- committer|object|| +|---- name |string|用户名| +|---- email |string|用户邮箱| +|---- date |string|文件创建时间| + + +返回值 +```json +{ + "commit": { + "sha": "7b70509105b587e71f5692b9e8ab70851e321f64", + "message": "Delete 'test1_create_file11.rb'\n", + "author": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-08T07:57:34Z"`` + }, + "committer": { + "name": "18816895620", + "email": "2456233122@qq.com", + "date": "2020-01-08T07:57:34Z" + } + } +} +``` +--- + +### 获取pull request文件列表 +``` +GET /api/:owner/:repo/pulls/:id/files.json +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/Jason/test-txt/pulls/1/files.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | +|id |是|int |pull request's id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|files_count |int|文件更改的总数量| +|total_addition |int|添加代码总行数| +|total_deletion |int|删除代码总行数| +|files |array|| +|-- sha |string|commit's sha value| +|-- name |string|当前文件名| +|-- old_name |string| 修改之前的文件名称,与name相同的话,说明文件名未更改| +|-- addition |int|文件添加的行数| +|-- deletion |int|文件删除的行数| +|-- type |int|文件类型, 1: 表示该文件只添加了内容,2: 表示该文件内容有修改, 3: 表示文件被删除或者改文件只删除了内容| +|-- isCreated |boolean|当前文件是否为新增文件, true: 是, false: 否| +|-- isDeleted |boolean|当前文件是否被删除, true: 是,false: 否| +|-- isBin |boolean|当前文件是否为二进制文件,true: 是,false: 否| +|-- isLFSFile |boolean|当前文件是否为LFS文件,true: 是,false: 否| +|-- isRenamed |boolean|当前文件是否被重命名,true: 是,false: 否| +|-- sections |array|| +|---- fileName |string|文件名称| +|---- lines |array|| +|------ leftIdx |string|文件变动之前所在行数| +|------ rightIdx |string|文件更改后所在行数| +|------ type |string|文件变更类型,1: 新增,2: 修改, 3: 删除, 4: diff统计信息| +|------ content |string|文件变更的内容| +|------ sectionInfo |object|| +|-------- path |string|文件相对仓库的路径| +|-------- lastLeftIdx |int|| +|-------- lastRightIdx |int|| +|-------- leftHunkSize |int|文件变更之前的行数| +|-------- rightHunkSize |int|文件变更之后的行数(及当前页面编辑器显示的总行数)| +|-------- leftIdx |int|文件变更之前所在行数| +|-------- rightIdx |int|文件变更之后所在行数(即:页面编辑器开始显示的行数)| + + +返回值 +```json +{ + "files_count": 6, + "total_addition": 447, + "total_deletion": 0, + "files": [ + { + "sha": "xefenisnii", + "name": "文件.txt", + "old_name": "文件.txt", + "index": 6, + "addition": 2, + "deletion": 0, + "type": 1, + "isCreated": true, + "isDeleted": false, + "isBin": false, + "isLFSFile": false, + "isRenamed": false, + "isSubmodule": false, + "sections": [ + { + "fileName": "文件.txt", + "name": "", + "lines": [ + { + "leftIdx": 0, + "rightIdx": 0, + "type": 4, + "content": "@@ -0,0 +1,2 @@", + "sectionInfo": { + "path": null, + "lastLeftIdx": null, + "lastRightIdx": null, + "leftIdx": 0, + "rightIdx": 0, + "leftHunkSize": null, + "rightHunkSize": null + } + }, + { + "leftIdx": 0, + "rightIdx": 1, + "type": 2, + "content": "+用例图一致性更新", + "sectionInfo": null + }, + { + "leftIdx": 0, + "rightIdx": 2, + "type": 2, + "content": "+工程文件直接上传会有文件缺失,现在压缩后上传", + "sectionInfo": null + } + ] + } + ] + } + ] +} +``` +--- + +### 获取pull request的commits列表 +``` +GET /api/:owner/:repo/pulls/:id/commits.json +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/Jason/repo/1/commits.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | +|id |是|int |pull request's id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|commits_count |int|commits总数量| +|commits |array|| +|-- author |object|项目作者| +|---- login |string|用户login| +|---- name |string|用户姓名| +|---- image_url |string|用户头像| +|-- committer |object|commit提交用户| +|---- login |string|用户login| +|---- name |string|用户姓名| +|---- image_url |string|用户头像| +|-- timestamp |int|commit的unix时间戳| +|-- time_from_now|string|commit’s 提交时间距当前时间的时间值| +|-- message |string|commit说明信息| +|-- sha |string|commit’s sha值| + +返回值 +```json +{ + "commits_count": 1, + "commits": [ + { + "author": { + "id": 36480, + "login": "jasder", + "name": "段甲生", + "image_url": "avatars/User/b" + }, + "committer": { + "id": 36480, + "login": "jasder", + "name": "段甲生", + "image_url": "avatars/User/b" + }, + "timestamp": 1604382982, + "time_from_now": "3小时前", + "message": "add some file\n* Add the tag list page to the release page\n* Apply suggestions from code review\n* Add the tags list view\n* Add the delete tag way on ui\n* Not delete tag and clear message when delete a release\n", + "sha": "8f5faee0d3b3be1b8063e84da0c79dd75327b968" + } + ] +} +``` +--- + +### compare two commits +``` +GET /api/:owner/:repo/compare/{base}...{head}.json +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/Jason/test-txt/compare/master...develop | jq + +curl -X GET \ +http://localhost:3000/api/ysfns/test-txt/compare/master...Jason/test-txt:develop +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | +|base |是|string |pull request's id | +|head |是|string |pull request's id | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|commits_count |int|commits总数量| +|commits |array|| +|-- author |object|项目作者| +|---- login |string|用户login| +|---- name |string|用户姓名| +|---- image_url |string|用户头像| +|-- committer |object|commit提交用户| +|---- login |string|用户login| +|---- name |string|用户姓名| +|---- image_url |string|用户头像| +|-- timestamp |int|commit的unix时间戳| +|-- time_from_now|string|commit’s 提交时间距当前时间的时间值| +|-- message |string|commit说明信息| +|-- sha |string|commit’s sha值| +|diff |object|| +|-- files_count |int|文件更改的总数量| +|-- total_addition |int|添加代码总行数| +|-- total_deletion |int|删除代码总行数| +|-- files |Array|| +|-- sha |string|commit's sha | +|-- name |string|当前文件名| +|-- old_name |string| 修改之前的文件名称,与name相同的话,说明文件名未更改| +|-- addition |int|文件添加的行数| +|-- deletion |int|文件删除的行数| +|-- type |int|文件类型, 1: 表示该文件只添加了内容,2: 表示该文件内容有修改, 3: 表示文件被删除或者改文件只删除了内容| +|-- isCreated |boolean|当前文件是否为新增文件, true: 是, false: 否| +|-- isDeleted |boolean|当前文件是否被删除, true: 是,false: 否| +|-- isBin |boolean|当前文件是否为二进制文件,true: 是,false: 否| +|-- isLFSFile |boolean|当前文件是否为LFS文件,true: 是,false: 否| +|-- isRenamed |boolean|当前文件是否被重命名,true: 是,false: 否| +|-- sections |array|| +|---- fileName |string|文件名称| +|---- lines |array|| +|------ leftIdx |string|文件变动之前所在行数| +|------ rightIdx |string|文件更改后所在行数| +|------ type |string|文件变更类型,1: 内容未改动,2: 添加, 3: 删除, 4: diff统计信息| +|------ content |string|文件变更的内容| +|------ sectionInfo |object|| +|-------- path |string|文件相对仓库的路径| +|-------- lastLeftIdx |int|| +|-------- lastRightIdx |int|| +|-------- leftHunkSize |int|文件变更之前的行数| +|-------- rightHunkSize |int|文件变更之后的行数(及当前页面编辑器显示的总行数)| +|-------- leftIdx |int|文件变更之前所在行数| +|-------- rightIdx |int|文件变更之后所在行数| + +返回值 +```json +{ + "commits_count": 1, + "commits": [ + { + "author": { + "id": 36480, + "login": "jasder", + "name": "段甲生", + "image_url": "avatars/User/b" + }, + "committer": { + "id": 36480, + "login": "jasder", + "name": "段甲生", + "image_url": "avatars/User/b" + }, + "timestamp": 1604382982, + "time_from_now": "4小时前", + "message": "add some file\n* Add the tag list page to the release page\n* Apply suggestions from code review\n* Add the tags list view\n* Add the delete tag way on ui\n* Not delete tag and clear message when delete a release\n", + "sha": "8f5faee0d3b3be1b8063e84da0c79dd75327b968" + } + ], + "diff": { + "files_count": 6, + "total_addition": 447, + "total_deletion": 0, + "files": [ + { + "name": "build.go", + "old_name": "build.go", + "index": 1, + "addition": 33, + "deletion": 0, + "type": 1, + "isCreated": true, + "isDeleted": false, + "isBin": false, + "isLFSFile": false, + "isRenamed": false, + "isSubmodule": false, + "sections": [ + { + "fileName": "build.go", + "name": "", + "lines": [ + { + "leftIdx": 0, + "rightIdx": 0, + "type": 4, + "content": "@@ -0,0 +1,33 @@", + "sectionInfo": { + "path": "build.go", + "lastLeftIdx": 0, + "lastRightIdx": 0, + "leftIdx": 0, + "rightIdx": 1, + "leftHunkSize": 0, + "rightHunkSize": 33 + } + }, + { + "leftIdx": 0, + "rightIdx": 1, + "type": 2, + "content": "+// Copyright 2020 The Gitea Authors. All rights reserved.", + "sectionInfo": null + } + ] + } + ] + } + ] + } +} +``` +--- + + +### DevOps相关api +--- + +#### 获取devops流程步骤 +``` +GET /api/:owner/:repo/ci_authorize +``` + +*示例* +``` +curl -X GET \ +http://localhost:3000/api/jasder/forgeplus/ci_authorize.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|step |int|初始化devops流程步骤; 0: 标识未开启devops,1: 标识用户已填写了云服务器相关信息,但并未开启认证, 2: 标识用户已开启了CI服务端的认证| +|account |string|你的云服务器帐号| +|ip |string|你的云服务器帐号ip| +|secret |string|你的云服务器登录密码| +|authenticate_url |string|devops授权认证地址, 只有填写了服务器相关信息后才会有该地址| +|get_drone_token_url |string|获取CI服务端token地址, 只有认证成功后才会有该地址| + +返回值 +```json +{ + "step": 0, + "cloud_account": { + "id": 1, + "account": "xxx", + "ip": "xxx.xxx.xxx.x", + "secret": "11111", + "authenticate_url": "http://localhost:3000/login", + "get_drone_token_url": "http://localhost:3000/account" + } +} +``` +--- + +#### 初始化DevOps流程 +``` +POST /api/:owner/:repo/cloud_accounts +``` + +*示例* +``` +curl -X POST \ +-d "account=xx" \ +-d "secret=xxx" \ +-d "ip_num=xx.xx.xx.xx" \ +https://localhost:3000/api/jasder/forgeplus/cloud_accounts.json | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | +|account |是|string |云服务器ssh连接登录用户名 | +|secret |是|string |云服务器ssh连接登录秘密 | +|ip_num |否|string |云服务器公网IP | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |string|服务端返回状态,0: 表示请求成功, -1: 标识请求失败| +|message |string|服务端返回信息说明| +|redirect_url |string|重定向地址,请求成功后,需要调整到该地址进行认证| + +返回值 +```json +{ + "status": 0, + "message": "success", + "redirect_url": "http://192.168.2.59:3003/login/oauth/authorize?client_id=f0c58484-d0f7-46c0-9efd-de3e3218e723&redirect_uri=http://121.36.81.172:80/login&response_type=code" +} +``` +--- + +#### devops用户认证授权 +``` +GET /api/users/ci/oauth_grant +``` +*示例* +``` +curl -X GET \ +-d "password=123456" \ +http://localhost:3000/api/users/ci/oauth_grant.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|password |是|string |用户密码 | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:成功, -1: 失败| + +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +#### 激活项目 +``` +POST /api/:owner/:repo/activate +``` +*示例* +``` +curl -X POST \ +http://localhost:3000/api/jasder/forgeplus/activate.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:成功, -1: 失败| + +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +#### 取消激活项目 +``` +DELETE /api/:owner/:repo/deactivate +``` +*示例* +``` +curl -X POST \ +http://localhost:3000/api/jasder/forgeplus/deactivate.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|0:成功, -1: 失败| + +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +#### 获取仓库的.trustie-pipeline.yml +``` +GET /api/:owner/:repo/get_trustie_pipeline +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/jasder/forge/get_trustie_pipeline.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | +|ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|name |string|文件夹或文件名称| +|path |string|文件夹或文件相对路径| +|content |string|文件内容,| + +``` +{ + "name": ".trustie-pipeline.yml", + "path": ".trustie-pipeline.yml", + "sha": "548sfefsafef48sf485s4f", + "content": "..jsaf" +} +``` +--- + +#### 更新'.trustie-pipeline.yml'文件 +``` +PUT /api/:owner/:repo/update_trustie_pipeline +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/jasder/forge/update_trustie_pipeline.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |用户登录名 | +|repo |是|string |project's identifier | +|ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 | +|filepath |是|string |文件相对于仓库的路径(或修改后的文件路径) | +|from_path |是|string |原文件相对于仓库的路径, 只有当需要修改原文件名称时,才需要该参数 | +|sha |是|string |文件的sha标识值 | +|content |是|string |内容 | +|message |否|string |提交说明 | +|branch |否|string |分支名称, branch和new_branch必须存在一个,且只能存在一个 | +|new_branch |否|string |新的分支名称 | +|ci_language_id |否|string |新的分支名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|接口返回状态, 1: 请求成功, -1: 请求失败| +|message |string|文件夹或文件相对路径| + +``` +{ + "status": 1, + "message": ".trustie-pipeline.yml" +} +``` +--- + +#### 获取语言列表 +``` +GET /api/ci/languages +``` + +*示例* +``` +curl -X GET http://localhost:3000/api/ci/languages.json | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|id值| +|name |string|语言名称| +|content |string|语言内容| +|cover_url |string|语言的logo链接| + +返回值 +```json +[ + { + "id": 114, + "name": "C", + "cover_url": null, + "content": "kind: pipeline\n name: default\n\n platform:\n os: linux\n arch: arm64\n\n steps:\n - name: test\n image: gcc\n commands:\n - ./configure\n - make\n - make test", + } +] +``` +--- + +#### 获取常用的6大语言 +``` +GET /api/ci/languages/common +``` + +*示例* +``` +curl -X GET http://localhost:3000/api/ci/languages/common.json | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|id值| +|name |string|语言名称| +|content |string|语言内容| +|cover_url |string|语言的logo链接| + +返回值 +```json +[ + { + "id": 114, + "name": "C", + "cover_url": null, + "content": "kind: pipeline\n name: default\n\n platform:\n os: linux\n arch: arm64\n\n steps:\n - name: test\n image: gcc\n commands:\n - ./configure\n - make\n - make test", + } +] +``` +--- + +#### 获取语言详情 +``` +GET /api/ci/languages/:id +``` + +*示例* +``` +curl -X GET http://localhost:3000/api/ci/languages/114.json | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|id |是|int |language's id | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|id值| +|name |string|语言名称| +|content |string|语言内容| +|cover_url |string|语言的logo链接| + +返回值 +```json +[ + { + "id": 114, + "name": "C", + "cover_url": null, + "content": "kind: pipeline\n name: default\n\n platform:\n os: linux\n arch: arm64\n\n steps:\n - name: test\n image: gcc\n commands:\n - ./configure\n - make\n - make test", + } +] +``` +--- + +#### 获取构建列表 +``` +GET /api/:owner/:repo/builds +``` + +*示例* +``` +curl -X GET \ +http://localhost:3000/api/Jason/forge/builds | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |项目拥有者 | +|repo |是|string |项目identifier | +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认20条 | +|search |是|string |构建状态条件过滤; 值说明:pending: 准备中,failure: 构建失败,running: 运行中,error:构建失败(.trustie-pipeline.yml文件错误),success: 构建成功,killed: 撤销构建 | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|build's id| +|number |string|build's number| +|status |string|build's result| +|event |string|build's event| + +返回值 +```json +[ + { + "id": 1, + "repo_id": 8, + "trigger": "@hook", + "number": 1, + "status": "success", + "event": "push", + "action": "", + "link": "", + "timestamp": 0, + "message": "更新 '.trustie-pipeline.yml'\n", + "before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324", + "after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4", + "ref": "refs/heads/master", + "source_repo": "", + "source": "master", + "target": "master", + "author_login": "jasder", + "author_name": "jasder", + "author_email": "email.com", + "author_avatar": "", + "sender": "jasder", + "started": "2020-08-19 06:22", + "finished": "2020-08-19 06:22", + "created": "2020-08-19 06:22", + "updated": "2020-08-19 06:22", + "duration_time": 0, + "version": 3 + } +] +``` +--- + +#### 获取某条构建详情信息 +``` +GET /api/:owner/:repo/builds/:build +``` + +*示例* +``` +curl -X GET \ +http://ocalhost:3000/api/jasder/forge/builds/1 | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|build |是|int |build's number | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|build's id| +|status |string|build's status| +|event |string|build's event| + +返回值 +```json +{ + "id": 1, + "repo_id": 8, + "trigger": "@hook", + "number": 1, + "status": "success", + "event": "push", + "action": "", + "link": "http://localhost:3000/jasder/forgeplus/compare/5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324...5e52ce51a239f5c8dd0b489a8a71e94f976179b4", + "timestamp": 0, + "message": "更新 '.trustie-pipeline.yml'\n", + "before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324", + "after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4", + "ref": "refs/heads/master", + "source_repo": "", + "source": "master", + "target": "master", + "author_login": "jasder", + "author_name": "jasder", + "author_email": "2053003901@qq.com", + "author_avatar": "http://localhost:3000/user/avatar/jasder/-1", + "sender": "jasder", + "started": 1595317786, + "finished": 1595318426, + "created": 1595317786, + "updated": 1595317786, + "version": 3, + "stages": [ + { + "id": 1, + "repo_id": 8, + "build_id": 1, + "number": 1, + "name": "default", + "kind": "pipeline", + "type": "docker", + "status": "success", + "errignore": false, + "exit_code": 0, + "machine": "121.36.81.172", + "os": "linux", + "arch": "arm64", + "started": 1595317786, + "stopped": 1595318426, + "created": 1595317786, + "updated": 1595318426, + "version": 4, + "on_success": true, + "on_failure": false, + "steps": [ + { + "id": 1, + "step_id": 1, + "number": 1, + "name": "clone", + "status": "success", + "exit_code": 0, + "started": 1595317786, + "stopped": 1595318373, + "version": 4 + }, + { + "id": 2, + "step_id": 1, + "number": 2, + "name": "test", + "status": "success", + "exit_code": 0, + "started": 1595318373, + "stopped": 1595318426, + "version": 4 + } + ] + } + ] +} +``` +--- + +#### 重启构建/重新构建 +``` +POST /api/:owner/:repo/builds/:build/restart +``` + +*示例* +``` +curl -X POST \ +http://localhost:3000/api/jasder/forgeplus/builds/1 | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|build |是|int |build's number | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|build's id| +|status |string|build's status| +|event |string|build's event| + +返回值 +```json +{ + "id": 2, + "repo_id": 8, + "trigger": "jasder", + "number": 2, + "status": "pending", + "event": "push", + "action": "", + "link": "http://localhost:3000/jasder/forgeplus/compare/5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324...5e52ce51a239f5c8dd0b489a8a71e94f976179b4", + "timestamp": 0, + "message": "更新 '.trustie-pipeline.yml'\n", + "before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324", + "after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4", + "ref": "refs/heads/master", + "source_repo": "", + "source": "master", + "target": "master", + "author_login": "jasder", + "author_name": "jasder", + "author_email": "2053003901@qq.com", + "author_avatar": "http://localhost:3000/user/avatar/jasder/-1", + "sender": "jasder", + "started": 0, + "finished": 0, + "created": 1595321350, + "updated": 1595321350, + "version": 1 +} +``` +--- + +#### 关闭构建 +``` +DELETE /api/:owner/:repo/builds/:build/stop +``` + +*示例* +``` +curl -X DELETE \ +http://localhost:3000/api/jaser/forge/builds/2 | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|build |是|int |build's number | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|build's id| +|status |string|build's status| +|event |string|build's event| + +返回值 +```json +{ + "id": 2, + "repo_id": 8, + "trigger": "jasder", + "number": 2, + "status": "killed", + "event": "push", + "action": "", + "link": "http://localhost:3000/jasder/forgeplus/compare/5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324...5e52ce51a239f5c8dd0b489a8a71e94f976179b4", + "timestamp": 0, + "message": "更新 '.trustie-pipeline.yml'\n", + "before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324", + "after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4", + "ref": "refs/heads/master", + "source_repo": "", + "source": "master", + "target": "master", + "author_login": "jasder", + "author_name": "jasder", + "author_email": "2053003901@qq.com", + "author_avatar": "http://localhost:3000/user/avatar/jasder/-1", + "sender": "jasder", + "started": 1595321352, + "finished": 1595321590, + "created": 1595321350, + "updated": 1595321352, + "version": 3, + "stages": [ + { + "id": 2, + "repo_id": 8, + "build_id": 2, + "number": 1, + "name": "default", + "kind": "pipeline", + "type": "docker", + "status": "killed", + "errignore": false, + "exit_code": 0, + "machine": "121.36.81.172", + "os": "linux", + "arch": "arm64", + "started": 1595321352, + "stopped": 1595321590, + "created": 1595321350, + "updated": 1595321352, + "version": 4, + "on_success": true, + "on_failure": false, + "steps": [ + { + "id": 3, + "step_id": 2, + "number": 1, + "name": "clone", + "status": "killed", + "exit_code": 130, + "started": 1595321353, + "stopped": 1595321590, + "version": 3 + }, + { + "id": 4, + "step_id": 2, + "number": 2, + "name": "test", + "status": "skipped", + "exit_code": 130, + "started": 1595321590, + "stopped": 1595321590, + "version": 2 + } + ] + } + ] +} +``` +--- + +#### 获取某条构建的log信息 +``` +GET /api/:owner/:repo/builds/:build/logs/:stage/:step +``` + +*示例* +``` +curl -X GET \ +http://localhost:3000/api/dev_ops/builds/2/logs/1/1 | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|build |是|int |build's number | +|stage |是|int |build's stage number | +|step |是|int |build's step number | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|build's id| +|status |string|build's status| +|event |string|build's event| + +返回值 +```json +[ + { + "pos": 0, + "out": "+ git fetch origin +refs/heads/master:\n", + "time": 1 + }, + { + "pos": 1, + "out": "Initialized empty Git repository in /drone/src/.git/\n", + "time": 1 + }, + { + "pos": 2, + "out": "warning: redirecting to https://testgitea2.trustie.net/jasder/forgeplus.git/\n", + "time": 1 + }, + { + "pos": 3, + "out": "From http://testgitea2.trustie.net/jasder/forgeplus\n", + "time": 493 + }, + { + "pos": 4, + "out": " * branch master -> FETCH_HEAD\n", + "time": 493 + }, + { + "pos": 5, + "out": " * [new branch] master -> origin/master\n", + "time": 493 + }, + { + "pos": 6, + "out": "+ git checkout 5e52ce51a239f5c8dd0b489a8a71e94f976179b4 -b master\n", + "time": 493 + }, + { + "pos": 7, + "out": "Already on 'master'\n", + "time": 496 + } +] +``` +--- + +#### 获取CI服务器配置信息 +``` +GET /api/users/ci/cloud_account +``` + +*示例* +``` +curl -X GET \ +http://localhost:3000/api/users/ci/cloud_account | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|step |int|0: 未绑定;1: 未认证(已绑定)| +|ci_certification |boolean|true: 已认证, false: 未认证| +|ip |string|ci服务器ip| +|redirect_url |string|认证地址| + +返回值 +```json +{ + "step": 0, + "ci_certification": false, + "cloud_account": { + "ip": "xxx.xxx.xxx.x", + "redirect_url": "http://localhost:3000/login", + } +} +``` +--- + +#### 绑定CI服务器 +``` +POST /api/users/ci/cloud_account/bind +``` + +*示例* +``` +curl -X POST \ +-d "account=xx" \ +-d "secret=xxx" \ +-d "ip_num=xx.xx.xx.xx" \ +https://localhost:3000/api/users/ci/cloud_account/bind.json | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|account |是|string |云服务器ssh连接登录用户名 | +|secret |是|string |云服务器ssh连接登录秘密 | +|ip_num |否|string |云服务器公网IP | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|step |int|0: 未绑定;1: 未认证(已绑定),2: 已认证| +|ip |string|ci服务器ip| +|redirect_url |string|认证地址| + +返回值 +```json +{ + "step": 0, + "cloud_account": { + "ip": "xxx.xxx.xxx.x", + "redirect_url": "http://localhost:3000/login", + } +} +``` +--- + + +### 解除CI服务器绑定 +``` +DELETE /api/users/ci/cloud_account/unbind +``` + +*示例* +``` +curl -X DELETE \ +http://localhost:3000/api/users/ci/cloud_account/unbind.json | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|状态码, 0: 成功,-1: 失败| +|message |string|返回信息说明| + +返回值 +```json +{ + "status": 0, + "message": "success" +} +``` +--- + +### 项目列表 +``` +GET /api/users/:login/projects +``` + +*示例* +``` +curl -X GET \ +-d "page=1" \ +-d "limit=20" \ +http://localhost:3000/api/users/Jason/projects.json | jq +``` + +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|page |否|int |页数,第几页 | +|limit |否|int |每页多少条数据,默认20条 | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int |项目总条数 | +|id |string |项目id | +|name |string|项目名称| +|description |string|项目简介| +|open_devops |boolean|激活状态,true: 激活; false:未激活| +|visits |int|流量数| +|forked_count |int|被fork的数量| +|praises_count |int|star数量| +|is_public |boolean|是否公开, true:公开,false:未公开| +|mirror_url |string|镜像url| +|last_update_time|int|最后更新时间,为UNIX格式的时间戳| +|author |object|项目创建者| +|-- name |string|用户名,也是用户标识| +|category |object|项目类别| +|-- id |int|项目类型id| +|-- name |string|项目类型名称| +|language |object|项目语言| +|-- id |int|项目语言id| +|-- name |string|项目语言名称| + + +返回值 +``` +{ + "total_count": 3096, + "projects": [ + { + "id": 1, + "name": "hnfl_demo1", + "description": "my first project", + "visits": 0, + "praises_count": 0, + "forked_count": 0, + "is_public": true, + "mirror_url": null, + "last_update_time": 1577697461, + "author": { + "name": "18816895620", + "image_url": "avatars/User/b" + }, + "category": { + "id": 1, + "name": "大数据" + }, + "language": { + "id": 2, + "name": "C" + } + } + ] +} +``` +--- diff --git a/deploy.md b/deploy.md new file mode 100644 index 000000000..81dd69ba4 --- /dev/null +++ b/deploy.md @@ -0,0 +1,81 @@ +# 本地开发部署步骤 + +### 1. 安装依赖包 + +```bash +bundle install +``` + +### 2. 配置初始化文件 +进入项目根目录执行一下命令: + +```bash +cp config/configuration.yml.example config/configuration.yml +cp config/database.yml.example config/database.yml +touch config/redis.yml +touch config/elasticsearch.yml +``` + +### 3. 配置gitea服务(可选) +**如需要部署自己的gitea平台,请参考gitea官方平台:https://docs.gitea.io/zh-cn/install-from-binary/** + +**因目前gitea平台api受限,暂时推荐从forge平台获取gitea部署文件进行部署:https://forgeplus.trustie.net/projects/6070/coders** + +#### 配置gitea服务步骤 +1. 部署gitea服务,并注册root账户 +2. 修改forge平台的 config/configuration.yml中的gitea服务指向地址,如: + +```ruby +gitea: + access_key_id: 'root' + access_key_secret: 'password' + domain: 'http://www.gitea.example.com' + base_url: '/api/v1' +``` + +### 4. 安装redis环境 +**请自行搜索各平台如何安装部署redis环境** + + +### 5. 创建数据库 + +```bash +rails db:create +``` + +### 6. 导入数据表结构 + +```bash +bundle exec rake sync_table_structure:import_csv +``` + +### 7. 执行migrate迁移文件 +**开发环境为development, 生成环境为production** +```bash +rails db:migrate RAILS_ENV=development +``` + +### 8. 启动redis(此处已mac系统为例) +```bash +redis-server& +``` + +### 9. 启动sidekiq +**开发环境为development, 生成环境为production** +```bash +bundle exec sidekiq -C config/sidekiq.yml -e production -d +``` + +### 10. 启动rails服务 +```bash +rails s +``` + +### 11. 浏览器访问 +在浏览器中输入如下地址访问: +```bash +http://localhost:3000/ +``` + + +--- From a8cbe566cbabbbe652c17cd211df3124fb8170f9 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 27 Nov 2020 09:39:46 +0800 Subject: [PATCH 333/384] FIX delete Chain job when create repo --- app/services/repositories/create_service.rb | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/services/repositories/create_service.rb b/app/services/repositories/create_service.rb index 219c2db33..9458e513f 100644 --- a/app/services/repositories/create_service.rb +++ b/app/services/repositories/create_service.rb @@ -14,18 +14,18 @@ class Repositories::CreateService < ApplicationService gitea_repository = Gitea::Repository::CreateService.new(user.gitea_token, gitea_repository_params).call sync_project(@repository, gitea_repository) sync_repository(@repository, gitea_repository) - if project.project_type == "common" - chain_params = { - type: "create", - chain_params:{ - username: user.try(:login), - reponame: @repository.try(:identifier), - token_name: @repository.try(:identifier), - total_supply: 1000000 - } - } - PostChainJob.perform_later(chain_params) #创建上链操作 - end + # if project.project_type == "common" + # chain_params = { + # type: "create", + # chain_params:{ + # username: user.try(:login), + # reponame: @repository.try(:identifier), + # token_name: @repository.try(:identifier), + # total_supply: 1000000 + # } + # } + # PostChainJob.perform_later(chain_params) #创建上链操作 + # end else Rails.logger.info("#############___________create_repository_erros______###########{@repository.errors.messages}") end @@ -38,7 +38,7 @@ class Repositories::CreateService < ApplicationService private - def sync_project(repository, gitea_repository) + def sync_project(repository, gitea_repository) if gitea_repository project.update_columns( gpid: gitea_repository["id"], From 1daf8591cafc14216f41b1a7c76de13d40010e70 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 27 Nov 2020 10:18:31 +0800 Subject: [PATCH 334/384] FIX Adjust call gitea api for security --- app/interactors/gitea/register_interactor.rb | 9 ++++++++- app/services/gitea/client_service.rb | 17 +++++------------ app/services/gitea/user/register_service.rb | 3 +-- app/services/gitea/user/update_service.rb | 2 +- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/app/interactors/gitea/register_interactor.rb b/app/interactors/gitea/register_interactor.rb index 909a67911..d8dbc6cad 100644 --- a/app/interactors/gitea/register_interactor.rb +++ b/app/interactors/gitea/register_interactor.rb @@ -22,7 +22,7 @@ module Gitea def run Gitea::UserForm.new(params).validate! - response = Gitea::User::RegisterService.new(params).call + response = Gitea::User::RegisterService.call(params.merge(token: token)) render_result(response) rescue Exception => exception Rails.logger.info "Exception ===========> #{exception.message}" @@ -41,5 +41,12 @@ module Gitea def render_result(response) @result = response end + + def token + { + username: Gitea.gitea_config[:access_key_id], + password: Gitea.gitea_config[:access_key_secret] + } + end end end diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 5d3150e21..1ccd33508 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -69,9 +69,10 @@ class Gitea::ClientService < ApplicationService private def conn(auth={}) - username = auth[:username] || access_key_id - secret = auth[:password] || access_key_secret + username = auth[:username] + secret = auth[:password] token = auth[:token] + puts "[gitea] username: #{username}" puts "[gitea] secret: #{secret}" puts "[gitea] token: #{token}" @@ -101,14 +102,6 @@ class Gitea::ClientService < ApplicationService Gitea.gitea_config[:domain] end - def access_key_id - Gitea.gitea_config[:access_key_id] - end - - def access_key_secret - Gitea.gitea_config[:access_key_secret] - end - def api_url [domain, base_url].join('') end @@ -134,9 +127,9 @@ class Gitea::ClientService < ApplicationService raise Error, mark + "401" when 422 result = JSON.parse(response&.body) - puts "[gitea] parse body: #{result}" + puts "[gitea] parse body: #{result['message']}" # return {status: -1, message: result[0]} - raise Error, result[0] + raise Error, result['message'] when 204 puts "[gitea] " diff --git a/app/services/gitea/user/register_service.rb b/app/services/gitea/user/register_service.rb index 4b014de69..ec5729306 100644 --- a/app/services/gitea/user/register_service.rb +++ b/app/services/gitea/user/register_service.rb @@ -7,8 +7,7 @@ class Gitea::User::RegisterService < Gitea::ClientService end def call - params = {} - params = params.merge(data: user_params) + params = Hash.new.merge(data: user_params, token: @token) post(API_REST, params) end diff --git a/app/services/gitea/user/update_service.rb b/app/services/gitea/user/update_service.rb index ead483a25..5e6108a9b 100644 --- a/app/services/gitea/user/update_service.rb +++ b/app/services/gitea/user/update_service.rb @@ -17,7 +17,7 @@ class Gitea::User::UpdateService < Gitea::ClientService # source_id integer($int64) # website string - def initialize(edit_username, params={}, token=nil) + def initialize(edit_username, params={}, token={username: Gitea.gitea_config[:access_key_id], password: Gitea.gitea_config[:access_key_secret]}) @token = token @params = params @edit_username = edit_username From ba14fce0bd416dac0d28197a65d18205b572feb8 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 27 Nov 2020 10:19:11 +0800 Subject: [PATCH 335/384] ADD string to strip when crate ci cloud account --- app/controllers/concerns/ci/cloud_account_manageable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index d97bab309..5931b31c9 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -6,7 +6,7 @@ module Ci::CloudAccountManageable def bind_account! # 1. 保存华为云服务器帐号 - create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: Ci::CloudAccount.encrypted_secret(devops_params[:secret])) + create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num].strip).to_i, secret: Ci::CloudAccount.encrypted_secret(devops_params[:secret])) cloud_account = Ci::CloudAccount.new(create_params) cloud_account.user = current_user From 2cf1b2b744c2ea52d2c0619c32508123265483e5 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Fri, 27 Nov 2020 11:47:33 +0800 Subject: [PATCH 337/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 97919f8a6..de4a3c8a6 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -8,7 +8,7 @@ platform: steps: - name: test - image: ruby + image: ruby:2.3.7 commands: - bundle install --jobs=3 --retry=3 - rake From 7805e8d47131af4684b6387de85af057271792c0 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Fri, 27 Nov 2020 11:51:02 +0800 Subject: [PATCH 338/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index de4a3c8a6..875826edc 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -1,6 +1,6 @@ kind: pipeline -name: default +name: ruby-2-3-7 platform: os: linux From c2f71c35c2d6d57a9a3ad20bb8db8fc43ade863e Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Fri, 27 Nov 2020 13:45:57 +0800 Subject: [PATCH 339/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 875826edc..de4a3c8a6 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -1,6 +1,6 @@ kind: pipeline -name: ruby-2-3-7 +name: default platform: os: linux From dc8e44b5537b836a646cb1e1a73465a6f008eedb Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Fri, 27 Nov 2020 13:48:17 +0800 Subject: [PATCH 340/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index de4a3c8a6..8fba6286d 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -7,8 +7,16 @@ platform: arch: arm64 steps: -- name: test +- name: install image: ruby:2.3.7 commands: - bundle install --jobs=3 --retry=3 - rake + +- name: test + image: ruby:2.3.7 + volumes: + - name: bundle + path: /usr/local/bundle + commands: + - rake From dfeb053b30e8bec5a4f505aea688e3d52c9eaf18 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Fri, 27 Nov 2020 14:58:45 +0800 Subject: [PATCH 341/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 8fba6286d..77558ff70 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -10,6 +10,7 @@ steps: - name: install image: ruby:2.3.7 commands: + - bundle -v - bundle install --jobs=3 --retry=3 - rake From 1f35d8ba530ca352f64ce9b30564b146102b4d56 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Fri, 27 Nov 2020 15:22:11 +0800 Subject: [PATCH 342/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 77558ff70..1c7dd7d2f 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -10,6 +10,7 @@ steps: - name: install image: ruby:2.3.7 commands: + - gem install bundler --default -v "2.1.4" - bundle -v - bundle install --jobs=3 --retry=3 - rake From c865c948e73cb36b0627c1b4eaac4d2c234784e8 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Fri, 27 Nov 2020 15:46:51 +0800 Subject: [PATCH 343/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 1c7dd7d2f..f69e2003e 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -11,7 +11,7 @@ steps: image: ruby:2.3.7 commands: - gem install bundler --default -v "2.1.4" - - bundle -v + - gem list bunder - bundle install --jobs=3 --retry=3 - rake From a0cd50ffe6bf12fa9e43e826538f9dbce448c6ad Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 27 Nov 2020 16:46:12 +0800 Subject: [PATCH 344/384] Delete create pr when create or update repo file --- app/controllers/repositories_controller.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index c7f8539e5..781ac2033 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -93,7 +93,7 @@ class RepositoriesController < ApplicationController interactor = Gitea::CreateFileInteractor.call(current_user.gitea_token, @owner.login, content_params) if interactor.success? @file = interactor.result - create_new_pr(params) + # create_new_pr(params) else render_error(interactor.error) end @@ -103,7 +103,8 @@ class RepositoriesController < ApplicationController interactor = Gitea::UpdateFileInteractor.call(current_user.gitea_token, @owner.login, params.merge(identifier: @project.identifier)) if interactor.success? @file = interactor.result - create_new_pr(params) + # TODO: 是否创建pr + # create_new_pr(params) render_result(1, "更新成功") else render_error(interactor.error) From d3a088e5b69d4c05f8527e91683c89952e1a02aa Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 27 Nov 2020 16:50:00 +0800 Subject: [PATCH 345/384] Update ci yml --- .trustie-pipeline.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index f69e2003e..97d39d249 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -12,7 +12,8 @@ steps: commands: - gem install bundler --default -v "2.1.4" - gem list bunder - - bundle install --jobs=3 --retry=3 + - bundle -v + - bundle _2.1.4_ install --jobs=1 --retry=1 - rake - name: test From 5cfff14cf11c293e3a8e73e5cd68306646fc8e96 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Fri, 27 Nov 2020 17:34:52 +0800 Subject: [PATCH 346/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 97d39d249..99167e81b 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -10,8 +10,9 @@ steps: - name: install image: ruby:2.3.7 commands: + - gem update --system - gem install bundler --default -v "2.1.4" - - gem list bunder + - bundle update --bundler - bundle -v - bundle _2.1.4_ install --jobs=1 --retry=1 - rake From c634f7dfeb5037825b59f41422cebd43ab4f8fb8 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Fri, 27 Nov 2020 17:56:33 +0800 Subject: [PATCH 347/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 99167e81b..98a8b3b8d 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -12,7 +12,6 @@ steps: commands: - gem update --system - gem install bundler --default -v "2.1.4" - - bundle update --bundler - bundle -v - bundle _2.1.4_ install --jobs=1 --retry=1 - rake From a74dd6605bca1b193198c5a46ba94116cb2aa823 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 27 Nov 2020 18:09:12 +0800 Subject: [PATCH 348/384] FIX connection ci db when find repo --- app/controllers/ci/base_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index a74ce6ab3..6f18db045 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -3,6 +3,7 @@ class Ci::BaseController < ApplicationController before_action :require_login before_action :connect_to_ci_database, if: -> { current_user && !current_user.is_a?(AnonymousUser) && !current_user.devops_uninit? } + before_action :connect_to_ci_database, only: :load_repo def load_repo namespace = params[:owner] From 0089c1b8bac3cb928df31ec3ff76aaca30000520 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 30 Nov 2020 10:27:49 +0800 Subject: [PATCH 349/384] Update ruby version to 2.4.5 * delete ruby 2.3.7 version in Gemfile * delete .ruby-version for local file with development --- Gemfile | 2 -- Gemfile.lock | 3 --- 2 files changed, 5 deletions(-) diff --git a/Gemfile b/Gemfile index 219c5c426..cd6c4b917 100644 --- a/Gemfile +++ b/Gemfile @@ -1,8 +1,6 @@ source 'https://gems.ruby-china.com' git_source(:github) { |repo| "https://github.com/#{repo}.git" } -ruby '2.3.7' - gem 'rails', '~> 5.2.0' gem 'mysql2', '>= 0.4.4', '< 0.6.0' gem 'puma', '~> 3.11' diff --git a/Gemfile.lock b/Gemfile.lock index db7daf602..a6beea407 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -490,8 +490,5 @@ DEPENDENCIES web-console (>= 3.3.0) wkhtmltopdf-binary -RUBY VERSION - ruby 2.3.7p456 - BUNDLED WITH 2.1.4 From 40cb8d7e681096bddabc4d065db833a976a7e61b Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 11:21:21 +0800 Subject: [PATCH 350/384] Update ruby --- .trustie-pipeline.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 98a8b3b8d..9d2d5bd77 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -8,16 +8,14 @@ platform: steps: - name: install - image: ruby:2.3.7 + image: ruby:2.4.5 commands: - - gem update --system - - gem install bundler --default -v "2.1.4" - bundle -v - - bundle _2.1.4_ install --jobs=1 --retry=1 + - bundle install --jobs=1 --retry=1 - rake - name: test - image: ruby:2.3.7 + image: ruby:2.4.5 volumes: - name: bundle path: /usr/local/bundle From 8ee5bdbb5b62e271bb4402914c48396a22d295f4 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 30 Nov 2020 11:39:28 +0800 Subject: [PATCH 351/384] Update deploy file --- deploy.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/deploy.md b/deploy.md index 81dd69ba4..ccfd5aa36 100644 --- a/deploy.md +++ b/deploy.md @@ -1,5 +1,19 @@ + # 本地开发部署步骤 +## Depends Versions + +* Ruby 2.4.5 + +* Rails ~> 5.2 + +* MySql ~> 5.6 + +* Redis 5+ + + +## Steps + ### 1. 安装依赖包 ```bash From e6e616a0375e4d190167006163fec60709a71cf3 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 11:47:48 +0800 Subject: [PATCH 352/384] FIX update bunlder version --- .trustie-pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 9d2d5bd77..916fadf6d 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -10,6 +10,7 @@ steps: - name: install image: ruby:2.4.5 commands: + - gem install bundler - bundle -v - bundle install --jobs=1 --retry=1 - rake From a24f0f8b459493e0d40607fe4da804ad9e093b50 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 30 Nov 2020 11:50:41 +0800 Subject: [PATCH 353/384] FIX . --- deploy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy.md b/deploy.md index ccfd5aa36..3eebaace3 100644 --- a/deploy.md +++ b/deploy.md @@ -1,5 +1,5 @@ -# 本地开发部署步骤 +# 本地开发部署 ## Depends Versions From c4651fd578d1dfa268723cbf902501fa1213b700 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 13:47:27 +0800 Subject: [PATCH 354/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 916fadf6d..a7c7d968d 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -13,7 +13,6 @@ steps: - gem install bundler - bundle -v - bundle install --jobs=1 --retry=1 - - rake - name: test image: ruby:2.4.5 From e40eeaef35a0d340014172066c91fa4160d4c08e Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 16:50:46 +0800 Subject: [PATCH 355/384] test the ci --- .trustie-pipeline.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index a7c7d968d..8f326548f 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -1,4 +1,3 @@ - kind: pipeline name: default From 4305842a7de3ac92a789b100ace815fde6b0c8bb Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 16:59:22 +0800 Subject: [PATCH 356/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 45 ++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 8f326548f..fcd9b3532 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -1,22 +1,23 @@ -kind: pipeline -name: default - -platform: - os: linux - arch: arm64 - -steps: -- name: install - image: ruby:2.4.5 - commands: - - gem install bundler - - bundle -v - - bundle install --jobs=1 --retry=1 - -- name: test - image: ruby:2.4.5 - volumes: - - name: bundle - path: /usr/local/bundle - commands: - - rake +kind: pipeline +name: default + +platform: + os: linux + arch: arm64 + +steps: +- name: install + image: ruby:2.4.5 + commands: + - gem install bundler + - bundle -v + - bundle -v + - bundle install --jobs=1 --retry=1 + +- name: test + image: ruby:2.4.5 + volumes: + - name: bundle + path: /usr/local/bundle + commands: + - rake From 0e8467987fc87cee6b31e77bc3bc604e364c4ec9 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 17:12:17 +0800 Subject: [PATCH 357/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index fcd9b3532..48be3d179 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -11,7 +11,6 @@ steps: commands: - gem install bundler - bundle -v - - bundle -v - bundle install --jobs=1 --retry=1 - name: test From ec3c64dc040c518755ac17e170ef8d0bb5f68c85 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 17:17:12 +0800 Subject: [PATCH 358/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 48be3d179..fcd9b3532 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -11,6 +11,7 @@ steps: commands: - gem install bundler - bundle -v + - bundle -v - bundle install --jobs=1 --retry=1 - name: test From 38873b25f7ae33d054ae8f4c3377d19f2e7497ac Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 17:19:21 +0800 Subject: [PATCH 359/384] Update '.trustie-pipeline.yml' --- .trustie-pipeline.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index fcd9b3532..48be3d179 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -11,7 +11,6 @@ steps: commands: - gem install bundler - bundle -v - - bundle -v - bundle install --jobs=1 --retry=1 - name: test From d6f57786ba80c544cf45f296f035b376cdd2f609 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 17:20:03 +0800 Subject: [PATCH 360/384] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'.trustie-pipeline?= =?UTF-8?q?.yml'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .trustie-pipeline.yml | 45 ++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 48be3d179..434840846 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -1,22 +1,23 @@ -kind: pipeline -name: default - -platform: - os: linux - arch: arm64 - -steps: -- name: install - image: ruby:2.4.5 - commands: - - gem install bundler - - bundle -v - - bundle install --jobs=1 --retry=1 - -- name: test - image: ruby:2.4.5 - volumes: - - name: bundle - path: /usr/local/bundle - commands: - - rake +kind: pipeline +name: default + +platform: + os: linux + arch: arm64 + +steps: +- name: install + image: ruby:2.4.5 + commands: + - gem install bundler + - bundle -v + - bundle -v + - bundle install --jobs=1 --retry=1 + +- name: test + image: ruby:2.4.5 + volumes: + - name: bundle + path: /usr/local/bundle + commands: + - rake From 6bc9ca50ee7af3af0337abbb93a97323416cd7d6 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 17:23:19 +0800 Subject: [PATCH 361/384] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'.trustie-pipeline?= =?UTF-8?q?.yml'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .trustie-pipeline.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.trustie-pipeline.yml b/.trustie-pipeline.yml index 434840846..8f326548f 100644 --- a/.trustie-pipeline.yml +++ b/.trustie-pipeline.yml @@ -11,7 +11,6 @@ steps: commands: - gem install bundler - bundle -v - - bundle -v - bundle install --jobs=1 --retry=1 - name: test From bb93fde1f7be317d0528a6eee9f4cf90c9a7e6bd Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 17:29:13 +0800 Subject: [PATCH 362/384] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'README.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f8fc270a..10600ca66 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Trustie (确实)是一个以大众化协同开发、开放式资源共享、持续性可信评估为核心机理,面向高校创新实践的在线协作平台 +Trustie (确实)是一个以大众化协同开发、开放式资源共享、持续性可信评估为核心机理,面向高校创新实践的在线协作平台。 ## 特性 From 1f804ceee7e183b49a4f238857d83f5db8d068eb Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 17:46:06 +0800 Subject: [PATCH 363/384] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'README.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 10600ca66..6f8fc270a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Trustie (确实)是一个以大众化协同开发、开放式资源共享、持续性可信评估为核心机理,面向高校创新实践的在线协作平台。 +Trustie (确实)是一个以大众化协同开发、开放式资源共享、持续性可信评估为核心机理,面向高校创新实践的在线协作平台 ## 特性 From c27ff021684b83782fe92c8592c4e611d71f3550 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 17:59:36 +0800 Subject: [PATCH 364/384] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'README.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f8fc270a..10600ca66 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Trustie (确实)是一个以大众化协同开发、开放式资源共享、持续性可信评估为核心机理,面向高校创新实践的在线协作平台 +Trustie (确实)是一个以大众化协同开发、开放式资源共享、持续性可信评估为核心机理,面向高校创新实践的在线协作平台。 ## 特性 From 6743f9c74cec8e8e2cfd24bd5eed869a47dae053 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 18:27:21 +0800 Subject: [PATCH 365/384] test --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 10600ca66..6f8fc270a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Trustie (确实)是一个以大众化协同开发、开放式资源共享、持续性可信评估为核心机理,面向高校创新实践的在线协作平台。 +Trustie (确实)是一个以大众化协同开发、开放式资源共享、持续性可信评估为核心机理,面向高校创新实践的在线协作平台 ## 特性 From e8b581115126ea27cf5d750cff0505bf6fd2cc14 Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Mon, 30 Nov 2020 18:37:52 +0800 Subject: [PATCH 366/384] test --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f8fc270a..10600ca66 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Trustie (确实)是一个以大众化协同开发、开放式资源共享、持续性可信评估为核心机理,面向高校创新实践的在线协作平台 +Trustie (确实)是一个以大众化协同开发、开放式资源共享、持续性可信评估为核心机理,面向高校创新实践的在线协作平台。 ## 特性 From 6a8ae5234b77e2c0ef52064f87225ffe613a2a5a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 3 Dec 2020 15:24:40 +0800 Subject: [PATCH 367/384] ADD protected branch Features --- api_document.md | 277 ++++++++++++++++++ .../protected_branches_controller.rb | 34 +++ app/forms/protected_branches/create_form.rb | 19 ++ app/helpers/protected_branches_helper.rb | 2 + .../protected_branches/delete_interactor.rb | 44 +++ app/models/concerns/project_operable.rb | 1 + app/models/protected_branch.rb | 65 ++++ app/models/repository.rb | 1 + app/services/gitea/client_service.rb | 85 +++++- app/services/gitea/hooks/create_service.rb | 3 +- app/services/gitea/oauth2/create_service.rb | 3 +- .../gitea/repository/branches/get_service.rb | 2 +- .../gitea/repository/branches/list_service.rb | 2 +- .../gitea/repository/create_service.rb | 3 +- .../repository/entries/create_service.rb | 4 +- app/services/gitea/repository/fork_service.rb | 4 +- .../gitea/repository/migrate_service.rb | 4 +- .../protected_branches/create_service.rb | 76 +++++ .../protected_branches/destroy_service.rb | 39 +++ .../protected_branches/update_service.rb | 78 +++++ .../gitea/repository/sync_mirrored_service.rb | 4 +- .../protected_branches/base_service.rb | 266 +++++++++++++++++ .../protected_branches/create_service.rb | 22 ++ .../protected_branches/destroy_service.rb | 26 ++ .../protected_branches/update_service.rb | 31 ++ .../_protected_branch.json.jbuilder | 16 + .../protected_branches/create.json.jbuilder | 1 + .../protected_branches/index.json.jbuilder | 2 + .../protected_branches/update.json.jbuilder | 1 + config/application.rb | 4 + config/routes.rb | 28 ++ ...0201130081039_create_protected_branches.rb | 31 ++ .../protected_branches_controller_spec.rb | 40 +++ .../helpers/protected_branches_helper_spec.rb | 15 + spec/models/protected_branch_spec.rb | 5 + .../create.html.erb_spec.rb | 5 + .../destroy.html.erb_spec.rb | 5 + .../protected_branches/edit.html.erb_spec.rb | 5 + .../protected_branches/index.html.erb_spec.rb | 5 + .../update.html.erb_spec.rb | 5 + 40 files changed, 1252 insertions(+), 11 deletions(-) create mode 100644 app/controllers/protected_branches_controller.rb create mode 100644 app/forms/protected_branches/create_form.rb create mode 100644 app/helpers/protected_branches_helper.rb create mode 100644 app/interactors/repositories/protected_branches/delete_interactor.rb create mode 100644 app/models/protected_branch.rb create mode 100644 app/services/gitea/repository/protected_branches/create_service.rb create mode 100644 app/services/gitea/repository/protected_branches/destroy_service.rb create mode 100644 app/services/gitea/repository/protected_branches/update_service.rb create mode 100644 app/services/protected_branches/base_service.rb create mode 100644 app/services/protected_branches/create_service.rb create mode 100644 app/services/protected_branches/destroy_service.rb create mode 100644 app/services/protected_branches/update_service.rb create mode 100644 app/views/protected_branches/_protected_branch.json.jbuilder create mode 100644 app/views/protected_branches/create.json.jbuilder create mode 100644 app/views/protected_branches/index.json.jbuilder create mode 100644 app/views/protected_branches/update.json.jbuilder create mode 100644 db/migrate/20201130081039_create_protected_branches.rb create mode 100644 spec/controllers/protected_branches_controller_spec.rb create mode 100644 spec/helpers/protected_branches_helper_spec.rb create mode 100644 spec/models/protected_branch_spec.rb create mode 100644 spec/views/protected_branches/create.html.erb_spec.rb create mode 100644 spec/views/protected_branches/destroy.html.erb_spec.rb create mode 100644 spec/views/protected_branches/edit.html.erb_spec.rb create mode 100644 spec/views/protected_branches/index.html.erb_spec.rb create mode 100644 spec/views/protected_branches/update.html.erb_spec.rb diff --git a/api_document.md b/api_document.md index 23a7c022b..8d245b76f 100644 --- a/api_document.md +++ b/api_document.md @@ -2650,6 +2650,283 @@ http://localhost:3000/api/ysfns/test-txt/compare/master...Jason/test-txt:develop ``` --- +### 创建保护分支 +``` +POST /api/:owner/:repo/protected_branches +``` +*示例* +``` +curl -X POST \ +-d 'branch_name=master' \ +-d 'enable_push=true' \ +-d 'enable_push_whitelist=true' \ +-d 'enable_push_whitelist=["demo1", "demo1"]' \ +-d 'enable_merge_whitelist=true' \ +http://localhost:3000/api/trustie/truesite/protected_branches.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |项目拥有者登录名 | +|repo |否|boolean |仓库名称 | +|branch_name |是|string |保护分支名称 | +|enable_push |否|boolean |是否启用推送, true: 启用; false: 不启用, 默认为false | +|enable_push_whitelist |否|boolean |是否启用白名单推送, true: 启用; false: 不启用, 默认为false, 该参数与enable_push参数为单选项,只能选择| +|push_whitelist_usernames |否|array |推送白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_push_whitelist参数配合使用 | +|enable_merge_whitelist |否|boolean |是否启用合并白名单, true: 启用, false: 不启用, 默认为false | +|merge_whitelist_usernames |否|array |合并白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_merge_whitelist配合使用 | +|enable_status_check |否|boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | +|required_approvals |否|int |所需的批准数, 默认为0 | +|enable_approvals_whitelist |否|boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | +|approvals_whitelist_username |否|array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|block_on_rejected_reviews |否|boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | +|dismiss_stale_approvals |否|boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | +|require_signed_commits |否|boolean |是否需要签名提交, true: 是, false: 否, 默认为false | +|block_on_outdated_branch |否|boolean |如果拉取请求已经过时,是否阻止合并, true: 是, false: 否, 默认为false | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|branch_name |string |保护分支名称 | +|enable_push |boolean |是否启用推送, true: 启用; false: 不启用, 默认为false | +|enable_push_whitelist |boolean |是否启用白名单推送, true: 启用; false: 不启用, 默认为false, 该参数与enable_push参数为单选项,只能选择| +|push_whitelist_usernames |array |推送白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_push_whitelist参数配合使用 | +|enable_merge_whitelist |boolean |是否启用合并白名单, true: 启用, false: 不启用, 默认为false | +|merge_whitelist_usernames |array |合并白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_merge_whitelist配合使用 | +|enable_status_check |boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | +|required_approvals |int |所需的批准数, 默认为0 | +|enable_approvals_whitelist |boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | +|approvals_whitelist_username |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|block_on_rejected_reviews |boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | +|dismiss_stale_approvals |boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | +|require_signed_commits |boolean |是否需要签名提交, true: 是, false: 否, 默认为false | +|block_on_outdated_branch |boolean |如果拉取请求已经过时,是否阻止合并, true: 是, false: 否, 默认为false | +|created_at |string|创建时间| +|updated_at |string|更新时间| + + +返回值 +``` +{ + "branch_name": "develop", + "enable_push": true, + "required_approvals": 0, + "enable_status_check": true, + "enable_push_whitelist": true, + "enable_merge_whitelist": true, + "enable_approvals_whitelist": false, + "dismiss_stale_approvals": false, + "block_on_rejected_reviews": false, + "block_on_outdated_branch": false, + "require_signed_commits": false, + "merge_whitelist_usernames": [ + "jasder" + ], + "push_whitelist_usernames": [ + "jasder" + ], + "approvals_whitelist_usernames": [], + "created_at": "2020-12-02 17:40", + "updated_at": "2020-12-03 11:29" +} +``` +--- + +### 修改保护分支参数 +``` +PATCH /api/:owner/:repo/protected_branches/:branch_name +``` +*示例* +``` +curl -X PATCH \ +-d 'branch_name=master' \ +-d 'enable_push=true' \ +-d 'enable_push_whitelist=true' \ +-d 'enable_push_whitelist=["demo1", "demo1"]' \ +-d 'enable_merge_whitelist=true' \ +http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |项目拥有者登录名 | +|repo |否|boolean |仓库名称 | +|branch_name |是|string |保护分支名称 | +|enable_push |否|boolean |是否启用推送, true: 启用; false: 不启用, 默认为false | +|enable_push_whitelist |否|boolean |是否启用白名单推送, true: 启用; false: 不启用, 默认为false, 该参数与enable_push参数为单选项,只能选择| +|push_whitelist_usernames |否|array |推送白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_push_whitelist参数配合使用 | +|enable_merge_whitelist |否|boolean |是否启用合并白名单, true: 启用, false: 不启用, 默认为false | +|merge_whitelist_usernames |否|array |合并白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_merge_whitelist配合使用 | +|enable_status_check |否|boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | +|required_approvals |否|int |所需的批准数, 默认为0 | +|enable_approvals_whitelist |否|boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | +|approvals_whitelist_username |否|array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|block_on_rejected_reviews |否|boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | +|dismiss_stale_approvals |否|boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | +|require_signed_commits |否|boolean |是否需要签名提交, true: 是, false: 否, 默认为false | +|block_on_outdated_branch |否|boolean |如果拉取请求已经过时,是否阻止合并, true: 是, false: 否, 默认为false | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|branch_name |string |保护分支名称 | +|enable_push |boolean |是否启用推送, true: 启用; false: 不启用, 默认为false | +|enable_push_whitelist |boolean |是否启用白名单推送, true: 启用; false: 不启用, 默认为false, 该参数与enable_push参数为单选项,只能选择| +|push_whitelist_usernames |array |推送白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_push_whitelist参数配合使用 | +|enable_merge_whitelist |boolean |是否启用合并白名单, true: 启用, false: 不启用, 默认为false | +|merge_whitelist_usernames |array |合并白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_merge_whitelist配合使用 | +|enable_status_check |boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | +|required_approvals |int |所需的批准数, 默认为0 | +|enable_approvals_whitelist |boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | +|approvals_whitelist_username |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|block_on_rejected_reviews |boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | +|dismiss_stale_approvals |boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | +|require_signed_commits |boolean |是否需要签名提交, true: 是, false: 否, 默认为false | +|block_on_outdated_branch |boolean |如果拉取请求已经过时,是否阻止合并, true: 是, false: 否, 默认为false | +|created_at |string|创建时间| +|updated_at |string|更新时间| + + +返回值 +``` +{ + "branch_name": "develop", + "enable_push": true, + "required_approvals": 0, + "enable_status_check": true, + "enable_push_whitelist": true, + "enable_merge_whitelist": true, + "enable_approvals_whitelist": false, + "dismiss_stale_approvals": false, + "block_on_rejected_reviews": false, + "block_on_outdated_branch": false, + "require_signed_commits": false, + "merge_whitelist_usernames": [ + "jasder" + ], + "push_whitelist_usernames": [ + "jasder" + ], + "approvals_whitelist_usernames": [], + "created_at": "2020-12-02 17:40", + "updated_at": "2020-12-03 11:29" +} +``` +--- + +### 删除保护分支 +``` +DELETE /api/:owner/:repo/protected_branches/:branch_name +``` +*示例* +``` +curl -X DELETE \ +-d 'branch_name=master' \ +http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |项目拥有者登录名 | +|repo |否|boolean |仓库名称 | +|branch_name |是|string |保护分支名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |int|状态值,0: 请求成功; -1: 请求失败| +|message |string|信息说明| + +返回值 +``` +{ + "status": 0, + "message": "success" +} +``` +--- + +### 获取保护分支列表 +``` +GET /api/:owner/:repo/protected_branches/ +``` +*示例* +``` +curl -X GET \ +-d "page=1" \ +-d "limit=5" \ +http://localhost:3000/api/trustie/truesite/protected_branches.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |项目拥有者登录名 | +|repo |否|boolean |仓库名称 | +|page |否|string |页数,第几页 | +|limit |否|string |每页多少条数据,默认15条 | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|total_count |int | 总记录数 | +|branch_name |string |保护分支名称 | +|enable_push |boolean |是否启用推送, true: 启用; false: 不启用, 默认为false | +|enable_push_whitelist |boolean |是否启用白名单推送, true: 启用; false: 不启用, 默认为false, 该参数与enable_push参数为单选项,只能选择| +|push_whitelist_usernames |array |推送白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_push_whitelist参数配合使用 | +|enable_merge_whitelist |boolean |是否启用合并白名单, true: 启用, false: 不启用, 默认为false | +|merge_whitelist_usernames |array |合并白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_merge_whitelist配合使用 | +|enable_status_check |boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | +|required_approvals |int |所需的批准数, 默认为0 | +|enable_approvals_whitelist |boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | +|approvals_whitelist_username |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|block_on_rejected_reviews |boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | +|dismiss_stale_approvals |boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | +|require_signed_commits |boolean |是否需要签名提交, true: 是, false: 否, 默认为false | +|block_on_outdated_branch |boolean |如果拉取请求已经过时,是否阻止合并, true: 是, false: 否, 默认为false | +|created_at |string|创建时间| +|updated_at |string|更新时间| + + +返回值 +``` +{ + "total_count": 1, + "protected_branches": [ + { + "branch_name": "develop", + "enable_push": true, + "required_approvals": 0, + "enable_status_check": true, + "enable_push_whitelist": true, + "enable_merge_whitelist": true, + "enable_approvals_whitelist": false, + "dismiss_stale_approvals": false, + "block_on_rejected_reviews": false, + "block_on_outdated_branch": false, + "require_signed_commits": false, + "merge_whitelist_usernames": [ + "jasder" + ], + "push_whitelist_usernames": [ + "jasder" + ], + "approvals_whitelist_usernames": [], + "created_at": "2020-12-02 17:40", + "updated_at": "2020-12-03 11:29" + } + ] +} +``` +--- ### DevOps相关api --- diff --git a/app/controllers/protected_branches_controller.rb b/app/controllers/protected_branches_controller.rb new file mode 100644 index 000000000..9b111c789 --- /dev/null +++ b/app/controllers/protected_branches_controller.rb @@ -0,0 +1,34 @@ +class ProtectedBranchesController < ApplicationController + before_action :require_login + before_action :load_repository + + def index + scope = ProtectedBranch.all + @total_count = scope.size + @protected_branches = paginate(scope) + end + + def create + @protected_branch = ProtectedBranches::CreateService.call(@repository, @owner, params) + end + + def update + @protected_branch = ProtectedBranches::UpdateService.call(@repository, @owner, params) + end + + def destroy + ProtectedBranches::DestroyService.call(@repository, @owner, params[:branch_name]) + + render_ok + end + + private + def render_protected_branch_json + if @protected_branch.persisted? + render json: Jbuilder.new { |json| json.extract! @protected_branch, :can_push }.target! + else + render_error('创建失败!') + end + end + +end diff --git a/app/forms/protected_branches/create_form.rb b/app/forms/protected_branches/create_form.rb new file mode 100644 index 000000000..ec4d87717 --- /dev/null +++ b/app/forms/protected_branches/create_form.rb @@ -0,0 +1,19 @@ +class ProtectedBranches::CreateForm < BaseForm + attr_accessor :repository, :branch_name, :can_push, :enable_whitelist, :whitelist_user_i_ds, + :whitelist_team_i_ds, :enable_merge_whitelist, :whitelist_deploy_keys, :merge_whitelist_user_i_ds, + :merge_whitelist_team_i_ds, :enable_status_check, :status_check_contexts, :approvals_whitelist_user_i_ds, + :approvals_whitelist_team_i_ds, :required_approvals, :enable_approvals_whitelist, :block_on_rejected_reviews, + :dismiss_stale_approvals, :require_signed_commits, :protected_file_patterns, :block_on_outdated_branch + + validates :repo_id, :branch_name, presence: true + + validate do + check_branch_name! + end + + + def check_branch_name! + protected_branch_exists = repository.protected_branches.exists?(branch_name) + raise "Protected branch '#{branch_name}' already exists" if protected_branch_exists + end +end diff --git a/app/helpers/protected_branches_helper.rb b/app/helpers/protected_branches_helper.rb new file mode 100644 index 000000000..dce9506fa --- /dev/null +++ b/app/helpers/protected_branches_helper.rb @@ -0,0 +1,2 @@ +module ProtectedBranchesHelper +end diff --git a/app/interactors/repositories/protected_branches/delete_interactor.rb b/app/interactors/repositories/protected_branches/delete_interactor.rb new file mode 100644 index 000000000..990440b50 --- /dev/null +++ b/app/interactors/repositories/protected_branches/delete_interactor.rb @@ -0,0 +1,44 @@ +module Repositories::ProtectedBranches + class DeleteInteractor + def self.call(user, identifier, filepath, **args) + interactor = new(user, identifier, filepath, **args) + interactor.run + interactor + end + + attr_reader :error, :result + + def initialize(user, identifier, filepath, **args) + @user = user + @identifier = identifier + @filepath = filepath + @args = args + end + + def success? + @error.nil? + end + + def result + end + + def run + + rescue Exception => exception + fail!(exception.message) + end + + + private + + attr_reader :user, :identifier, :filepath, :args + + def fail!(error) + @error = error + end + + def render_result(response) + @result = response + end + end +end diff --git a/app/models/concerns/project_operable.rb b/app/models/concerns/project_operable.rb index bba65e74c..f05ed164e 100644 --- a/app/models/concerns/project_operable.rb +++ b/app/models/concerns/project_operable.rb @@ -7,6 +7,7 @@ module ProjectOperable has_many :managers, -> { joins(:roles).where(roles: { name: 'Manager' }) }, class_name: 'Member' has_many :developers, -> { joins(:roles).where(roles: { name: 'Developer' }) }, class_name: 'Member' has_many :reporters, -> { joins(:roles).where(roles: { name: 'Reporter' }) }, class_name: 'Member' + has_many :writable_members, -> { joins(:roles).where.not(roles: {name: 'Reporter'}) }, class_name: 'Member' end def add_member!(user_id, role_name='Developer') diff --git a/app/models/protected_branch.rb b/app/models/protected_branch.rb new file mode 100644 index 000000000..da35f6e77 --- /dev/null +++ b/app/models/protected_branch.rb @@ -0,0 +1,65 @@ +# == Schema Information +# +# Table name: protected_branches +# +# id :integer not null, primary key +# repo_id :integer +# branch_name :string(255) default("") +# can_push :boolean default("0"), not null +# enable_whitelist :boolean default("0") +# whitelist_user_i_ds :text(65535) +# whitelist_team_i_ds :text(65535) +# enable_merge_whitelist :boolean default("0"), not null +# whitelist_deploy_keys :boolean default("0"), not null +# merge_whitelist_user_i_ds :text(65535) +# merge_whitelist_team_i_ds :text(65535) +# enable_status_check :boolean default("0"), not null +# status_check_contexts :text(65535) +# approvals_whitelist_user_i_ds :text(65535) +# approvals_whitelist_team_i_ds :text(65535) +# required_approvals :integer default("0") +# enable_approvals_whitelist :boolean default("0"), not null +# block_on_rejected_reviews :boolean default("0"), not null +# dismiss_stale_approvals :boolean default("0"), not null +# require_signed_commits :boolean default("0"), not null +# protected_file_patterns :text(65535) +# block_on_outdated_branch :boolean default("0"), not null +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_protected_branches_on_repo_id (repo_id) +# + +class ProtectedBranch < ApplicationRecord + serialize :whitelist_user_i_ds, Array + serialize :merge_whitelist_user_i_ds, Array + serialize :approvals_whitelist_user_i_ds, Array + + belongs_to :repo, class_name: 'Repository', foreign_key: :repo_id + validates :branch_name, presence: true + validates :repo, presence: true + + def to_param + self.branch_name.parameterize + end + + + def push_whitelist_usernames + get_logins_by_ids(whitelist_user_i_ds) + end + + def merge_whitelist_usernames + get_logins_by_ids(merge_whitelist_user_i_ds) + end + + def approvals_whitelist_usernames + get_logins_by_ids(approvals_whitelist_user_i_ds) + end + + def get_logins_by_ids(ids) + User.where(id: ids).map(&:login) + end + +end diff --git a/app/models/repository.rb b/app/models/repository.rb index 65b4316ed..be6afcb10 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -37,6 +37,7 @@ class Repository < ApplicationRecord has_one :mirror, foreign_key: :repo_id has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', foreign_key: :repo_id has_many :version_releases, dependent: :destroy + has_many :protected_branches, class_name: 'ProtectedBranch', foreign_key: :repo_id, dependent: :destroy validates :identifier, presence: true diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 1ccd33508..7639e694c 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -21,11 +21,10 @@ class Gitea::ClientService < ApplicationService def post(url, params={}) puts "[gitea] request params: #{params}" auth_token = authen_params(params[:token]) - response = conn(auth_token).post do |req| + conn(auth_token).post do |req| req.url full_url(url) req.body = params[:data].to_json end - render_status(response) end def get(url, params={}) @@ -164,4 +163,86 @@ class Gitea::ClientService < ApplicationService nil end end + + def render_response(response) + status = response.status + body = response&.body + + body, message = + if body.present? + body = JSON.parse(body) + fix_body(body) + else + nil + end + puts "[gitea] status: #{status}" + puts "[gitea] message: #{message}" + puts "[gitea] body: #{body}" + [status, message, body] + end + + def fix_body(body) + return [body, nil] if body.is_a? Array + + body['message'].blank? ? [body, nil] : [nil, body['message']] + end + + def render_json_data(status, message, body, success=true) + if success + success(body) + else + error(message, status) + end + end + + def error(message, http_status = nil) + result = { + message: message, + status: :error + } + + result[:http_status] = http_status if http_status + result + end + + def success(body=nil) + { + status: :success, + body: body + } + end + + def render_body(body) + success(body)[:body] + end + + def render_200_response(response) + extract_statuses(response) + end + + def render_200_no_body(response) + response.status + case response.status + when 200 + {status: 200} + else + end + end + + def render_201_response(response) + extract_statuses(response) + end + + def render_202_response(response) + extract_statuses(response) + end + + def extract_statuses(response) + success_statuses = [200, 201, 202, 204] + status, message, body = render_response(response) + + error(message, status) unless success_statuses.include? status + + render_body(body) + end end diff --git a/app/services/gitea/hooks/create_service.rb b/app/services/gitea/hooks/create_service.rb index 711427e27..6b65a6860 100644 --- a/app/services/gitea/hooks/create_service.rb +++ b/app/services/gitea/hooks/create_service.rb @@ -24,7 +24,8 @@ class Gitea::Hooks::CreateService < Gitea::ClientService end def call - post(url, params) + response = post(url, params) + render_201_response(response) end private diff --git a/app/services/gitea/oauth2/create_service.rb b/app/services/gitea/oauth2/create_service.rb index ba87e960c..1fa93b7a8 100644 --- a/app/services/gitea/oauth2/create_service.rb +++ b/app/services/gitea/oauth2/create_service.rb @@ -27,7 +27,8 @@ class Gitea::Oauth2::CreateService < Gitea::ClientService end def call - post(url, request_params) + response = post(url, request_params) + render_201_response(response) end private diff --git a/app/services/gitea/repository/branches/get_service.rb b/app/services/gitea/repository/branches/get_service.rb index d833b86bb..0e84e15d1 100644 --- a/app/services/gitea/repository/branches/get_service.rb +++ b/app/services/gitea/repository/branches/get_service.rb @@ -13,7 +13,7 @@ class Gitea::Repository::Branches::GetService < Gitea::ClientService def call response = get(url, params) - render_data(response) + render_200_response(response) end private diff --git a/app/services/gitea/repository/branches/list_service.rb b/app/services/gitea/repository/branches/list_service.rb index 17702259c..f42965098 100644 --- a/app/services/gitea/repository/branches/list_service.rb +++ b/app/services/gitea/repository/branches/list_service.rb @@ -8,7 +8,7 @@ class Gitea::Repository::Branches::ListService < Gitea::ClientService def call response = get(url, params) - render_data(response) + render_200_response(response) end private diff --git a/app/services/gitea/repository/create_service.rb b/app/services/gitea/repository/create_service.rb index 80d8b440d..168aaab24 100644 --- a/app/services/gitea/repository/create_service.rb +++ b/app/services/gitea/repository/create_service.rb @@ -18,7 +18,8 @@ class Gitea::Repository::CreateService < Gitea::ClientService end def call - post(url, request_params) + response = post(url, request_params) + render_201_response(response) end private diff --git a/app/services/gitea/repository/entries/create_service.rb b/app/services/gitea/repository/entries/create_service.rb index 7f1a6b529..9f5abad2a 100644 --- a/app/services/gitea/repository/entries/create_service.rb +++ b/app/services/gitea/repository/entries/create_service.rb @@ -29,7 +29,9 @@ class Gitea::Repository::Entries::CreateService < Gitea::ClientService end def call - post(url, params) + response = post(url, params) + + render_201_response(response) end private diff --git a/app/services/gitea/repository/fork_service.rb b/app/services/gitea/repository/fork_service.rb index dce925b8a..c43a9ddf2 100644 --- a/app/services/gitea/repository/fork_service.rb +++ b/app/services/gitea/repository/fork_service.rb @@ -14,7 +14,9 @@ class Gitea::Repository::ForkService < Gitea::ClientService end def call - post(url, request_params) + response = post(url, request_params) + + render_202_response(response) end private diff --git a/app/services/gitea/repository/migrate_service.rb b/app/services/gitea/repository/migrate_service.rb index 568e4d5c5..508812087 100644 --- a/app/services/gitea/repository/migrate_service.rb +++ b/app/services/gitea/repository/migrate_service.rb @@ -31,7 +31,9 @@ class Gitea::Repository::MigrateService < Gitea::ClientService end def call - post(url, request_params) + response = post(url, request_params) + + render_201_response(response) end private diff --git a/app/services/gitea/repository/protected_branches/create_service.rb b/app/services/gitea/repository/protected_branches/create_service.rb new file mode 100644 index 000000000..79415e09c --- /dev/null +++ b/app/services/gitea/repository/protected_branches/create_service.rb @@ -0,0 +1,76 @@ +# Create a branch protections for a repository + +class Gitea::Repository::ProtectedBranches::CreateService < Gitea::ClientService + attr_reader :owner, :repo, :body, :token + + # owner: owner of the repo + # repo: name of the repo + # body: + # { + # "approvals_whitelist_teams": [ + # "string" + # ], + # "approvals_whitelist_username": [ + # "string" + # ], + # "block_on_outdated_branch": true, + # "block_on_rejected_reviews": true, + # "branch_name": "string", + # "dismiss_stale_approvals": true, + # "enable_approvals_whitelist": true, + # "enable_merge_whitelist": true, + # "enable_push": true, + # "enable_push_whitelist": true, + # "enable_status_check": true, + # "merge_whitelist_teams": [ + # "string" + # ], + # "merge_whitelist_usernames": [ + # "string" + # ], + # "protected_file_patterns": "string", + # "push_whitelist_deploy_keys": true, + # "push_whitelist_teams": [ + # "string" + # ], + # "push_whitelist_usernames": [ + # "string" + # ], + # "require_signed_commits": true, + # "required_approvals": 0, + # "status_check_contexts": [ + # "string" + # ] + # } + + def initialize(owner, repo, body={}, token=nil) + @owner = owner + @repo = repo + @body = body + @token = token + end + + def call + response = post(url, params) + status, message, body = render_response(response) + json_format(status, message, body) + end + + private + def params + Hash.new.merge(token: token, data: body) + end + + def url + "/repos/#{owner}/#{repo}/branch_protections".freeze + end + + def json_format(status, message, body) + case status + when 201 then success(body) + else + error(message, status) + end + end + +end diff --git a/app/services/gitea/repository/protected_branches/destroy_service.rb b/app/services/gitea/repository/protected_branches/destroy_service.rb new file mode 100644 index 000000000..b0e5f0cf2 --- /dev/null +++ b/app/services/gitea/repository/protected_branches/destroy_service.rb @@ -0,0 +1,39 @@ +# Delete a specific branch protection for the repository + +class Gitea::Repository::ProtectedBranches::DestroyService < Gitea::ClientService + attr_reader :owner, :repo, :name, :token + + # owner: owner of the repo + # repo: name of the repo + # name: name of protected branch + # eg: + # Gitea::Repository::ProtectedBranches::DestroyService.call(user.login, repo.identifier, branch_name, user.gitea_token) + def initialize(owner, repo, name, token=nil) + @owner = owner + @repo = repo + @name = name + @token = token + end + + def call + response = delete(url, params) + status, message = render_response(response) + json_format(status, message) + end + + private + def params + Hash.new.merge(token: token, data: name) + end + + def url + "/repos/#{owner}/#{repo}/branch_protections/#{name}".freeze + end + + def json_format(status, message) + case status + when 204 then success + when 404 then error(message, 404) + end + end +end diff --git a/app/services/gitea/repository/protected_branches/update_service.rb b/app/services/gitea/repository/protected_branches/update_service.rb new file mode 100644 index 000000000..2f25d9a23 --- /dev/null +++ b/app/services/gitea/repository/protected_branches/update_service.rb @@ -0,0 +1,78 @@ +# Edit a branch protections for a repository. Only fields that are set will be changed + +class Gitea::Repository::ProtectedBranches::UpdateService < Gitea::ClientService + attr_reader :owner, :repo, :name, :body, :token + + # owner: owner of the repo + # repo: name of the repo + # nmae: name of protected branch + # body: + # { + # "approvals_whitelist_teams": [ + # "string" + # ], + # "approvals_whitelist_username": [ + # "string" + # ], + # "block_on_outdated_branch": true, + # "block_on_rejected_reviews": true, + # "branch_name": "string", + # "dismiss_stale_approvals": true, + # "enable_approvals_whitelist": true, + # "enable_merge_whitelist": true, + # "enable_push": true, + # "enable_push_whitelist": true, + # "enable_status_check": true, + # "merge_whitelist_teams": [ + # "string" + # ], + # "merge_whitelist_usernames": [ + # "string" + # ], + # "protected_file_patterns": "string", + # "push_whitelist_deploy_keys": true, + # "push_whitelist_teams": [ + # "string" + # ], + # "push_whitelist_usernames": [ + # "string" + # ], + # "require_signed_commits": true, + # "required_approvals": 0, + # "status_check_contexts": [ + # "string" + # ] + # } + # eq: + # Gitea::Repository::ProtectedBranches::UpdateService.call(user.login, repo.identifier, branch_name, body, user.gitea_token) + def initialize(owner, repo, name, body, token=nil) + @owner = owner + @repo = repo + @name = name + @body = body + @token = token + end + + def call + response = patch(url, params) + status, message, body = render_response(response) + json_format(status, message, body) + end + + private + def params + Hash.new.merge(token: token, data: body) + end + + def url + "/repos/#{owner}/#{repo}/branch_protections/#{name}".freeze + end + + def json_format(status, message, body) + case status + when 200 then success(body) + else + error(message, status) + end + end +end diff --git a/app/services/gitea/repository/sync_mirrored_service.rb b/app/services/gitea/repository/sync_mirrored_service.rb index 6918a6ec2..8d1673143 100644 --- a/app/services/gitea/repository/sync_mirrored_service.rb +++ b/app/services/gitea/repository/sync_mirrored_service.rb @@ -15,7 +15,9 @@ class Gitea::Repository::SyncMirroredService < Gitea::ClientService end def call - post(url, request_params) + response = post(url, request_params) + + render_200_no_body(response) end private diff --git a/app/services/protected_branches/base_service.rb b/app/services/protected_branches/base_service.rb new file mode 100644 index 000000000..3fa866afb --- /dev/null +++ b/app/services/protected_branches/base_service.rb @@ -0,0 +1,266 @@ +module ProtectedBranches + class BaseService < ApplicationService + attr_accessor :repository, :owner, :params + + def initialize(repository, user = nil, params = {}) + @repository, @owner, @params = repository, user, params.dup + end + + # delegate :repository, to: :project + + def protected_branch_params + # { + # "approvals_whitelist_teams": [ + # "string" + # ], //批准团队(或审查团队)白名单 + # "approvals_whitelist_username": [ + # "string" + # ], // 批准用户(或审查者)白名单 + # "block_on_outdated_branch": true, // 如果拉取过时,阻止合并 + # "block_on_rejected_reviews": true, // 拒绝审核,阻止合并请求 + # "branch_name": "string", //分支名称 + # "dismiss_stale_approvals": true, // 取消过时的批准 + # "enable_approvals_whitelist": true, //是否批准仅限列入白名单的用户或者团队, 主要用户pr的审核批准计数功能 + # "enable_merge_whitelist": true, // 是否启用合并请求白名单 + # "enable_push": true, //启用、禁止推送 + # "enable_push_whitelist": true, // 是否启动推送白名单 + # "enable_status_check": true, //是否启用状态检查 + # "merge_whitelist_teams": [ + # "string" + # ], // 合并请求团队白名单 + # "merge_whitelist_usernames": [ + # "string" + # ], // 合并请求用户白名单 + # "protected_file_patterns": "string", //保护文件模式 + # "push_whitelist_deploy_keys": true, // 具有推送权限的部署密钥白名单 + # "push_whitelist_teams": [ + # "string" + # ], //推送团队白名单 + # "push_whitelist_usernames": [ + # "string" + # ], //推送用户白名单 + # "require_signed_commits": true, //是否需要签名提交 + # "required_approvals": 0, // 所需批准数 + # "status_check_contexts": [ + # "string" + # ] // 状态检查规则 + # } + + + # branch_name :string(255) default("") + # can_push :boolean default("0"), not null + # enable_whitelist :boolean default("0") + # whitelist_user_i_ds :text(65535) + # whitelist_team_i_ds :text(65535) + # enable_merge_whitelist :boolean default("0"), not null + # whitelist_deploy_keys :boolean default("0"), not null + # merge_whitelist_user_i_ds :text(65535) + # merge_whitelist_team_i_ds :text(65535) + # enable_status_check :boolean default("0"), not null + # status_check_contexts :text(65535) + # approvals_whitelist_user_i_ds :text(65535) + # approvals_whitelist_team_i_ds :text(65535) + # required_approvals :integer default("0") + # enable_approvals_whitelist :boolean default("0"), not null + # block_on_rejected_reviews :boolean default("0"), not null + # dismiss_stale_approvals :boolean default("0"), not null + # require_signed_commits :boolean default("0"), not null + # protected_file_patterns :text(65535) + # block_on_outdated_branch :boolean default("0"), not null + + { + branch_name: params[:branch_name], + can_push: can_push_params, + enable_whitelist: enable_whitelist_params, + whitelist_user_i_ds: whitelist_user_i_ds_params, + # whitelist_team_i_ds: whitelist_team_i_ds_params, + enable_merge_whitelist: enable_merge_whitelist_params, + merge_whitelist_user_i_ds: merge_whitelist_user_i_ds_params, + # merge_whitelist_team_i_ds: merge_whitelist_team_i_ds_params, + enable_status_check: enable_status_check_params, + required_approvals: params[:required_approvals] || 0, + enable_approvals_whitelist: enable_approvals_whitelist_params, + approvals_whitelist_user_i_ds: approvals_whitelist_user_i_ds_params, + # approvals_whitelist_team_i_ds: approvals_whitelist_team_i_ds_params, + block_on_rejected_reviews: block_on_rejected_reviews_params, + dismiss_stale_approvals: dismiss_stale_approvals_params, + require_signed_commits: require_signed_commits_params, + block_on_outdated_branch: block_on_outdated_branch_params + } + end + + def enable_status_check_params + params[:enable_status_check] || false + end + + def enable_approvals_whitelist_params + params[:enable_approvals_whitelist] || false + end + def block_on_rejected_reviews_params + params[:block_on_rejected_reviews] || false + end + + def dismiss_stale_approvals_params + params[:dismiss_stale_approvals] || false + end + + def require_signed_commits_params + params[:require_signed_commits] || false + end + + def block_on_outdated_branch_params + params[:block_on_outdated_branch] || false + end + + def can_push_params + return false if !can_push? + return true if enable_whitelist? + params[:enable_push] + end + + def enable_whitelist_params + return false if !can_push? + params[:enable_push_whitelist] + end + + def whitelist_user_i_ds_params + return [] if !can_push? + user_ids(get_push_whitelist_usernames) + end + + def whitelist_team_i_ds_params + # params[:push_whitelist_usernames] + end + + def enable_merge_whitelist_params + params[:enable_merge_whitelist] || false + end + + def merge_whitelist_user_i_ds_params + returtn [] if !enable_merge_whitelist? + user_ids(get_merge_whitelist_usernames) + end + + def merge_whitelist_team_i_ds_params + params[:merge_whitelist_teams] + end + + def approvals_whitelist_user_i_ds_params + return [] if !enable_approvals_whitelist? + user_ids(get_approvals_whitelist_username) + end + + def approvals_whitelist_team_i_ds_params + params[:approvals_whitelist_teams] + end + + def user_ids(names) + member_ids & names_by_params(names) + end + + def member_ids + @repository.project.writable_members.map(&:user_id) + end + + def names_by_params(names) + User.where(login: names.to_a).ids + end + + def get_push_whitelist_usernames + return [] if !can_push? || !enable_whitelist? + filter_empty_element Array(params[:push_whitelist_usernames]) + end + + def get_merge_whitelist_usernames + return [] if !enable_merge_whitelist? + filter_empty_element Array(params[:merge_whitelist_usernames]) + end + + def get_approvals_whitelist_username + return [] if !enable_approvals_whitelist? + filter_empty_element Array(params[:approvals_whitelist_username]) + end + + def check_users!(names) + names.each {|name| + check_user!(name) + break + } + end + + def check_user!(name) + user_exist = User.exists?(login: name) + raise Error, "user '#{name}' does not exist" if !user_exist + end + + def can_push? + params[:enable_push] === true + end + + def enable_whitelist? + params[:enable_push_whitelist] === true + end + + def enable_merge_whitelist? + params[:enable_merge_whitelist] === true + end + + def enable_approvals_whitelist? + params[:enable_approvals_whitelist] === true + end + + def filter_empty_element(array) + array.reject { |e| e.to_s.empty? } + end + + def save_gitea_protected_branch! + @gitea_protected_branch ||= Gitea::Repository::ProtectedBranches::CreateService.call(@owner.login, + @repository.identifier,gitea_protected_branch_params, @owner.gitea_token) + + raise Error, @gitea_protected_branch[:message] if @gitea_protected_branch[:status] != :success + end + + def gitea_protected_branch_saved? + @gitea_protected_branch[:status] === success + end + + def gitea_protected_branch + @gitea_protected_branch[:body] + end + + def gitea_protected_branch_params + { + approvals_whitelist_username: get_approvals_whitelist_username, + branch_name: params[:branch_name], + enable_approvals_whitelist: enable_approvals_whitelist_params, + enable_merge_whitelist: enable_merge_whitelist_params, + enable_push: can_push_params, + enable_push_whitelist: enable_whitelist_params, + enable_status_check: enable_status_check_params, + # merge_whitelist_teams: [], + merge_whitelist_usernames: get_merge_whitelist_usernames, + # protected_file_patterns: string, + # push_whitelist_deploy_keys: true, + # push_whitelist_teams: [], + push_whitelist_usernames: get_push_whitelist_usernames, + block_on_rejected_reviews: block_on_rejected_reviews_params, + dismiss_stale_approvals: dismiss_stale_approvals_params, + require_signed_commits: require_signed_commits_params, + block_on_outdated_branch: block_on_outdated_branch_params + + } + end + + def validate! + protected_branch_exists = repository.protected_branches.exists?(params[:branch_name]) + raise Error, "Protected branch '#{branch_name}' already exists" if protected_branch_exists + + check_users!(get_push_whitelist_usernames) if get_push_whitelist_usernames.any? + check_users!(get_merge_whitelist_usernames) if get_merge_whitelist_usernames.any? + check_users!(get_approvals_whitelist_username) if get_approvals_whitelist_username.any? + + raise Error, '分支名称不能为空' if params[:branch_name].blank? + + end + end +end diff --git a/app/services/protected_branches/create_service.rb b/app/services/protected_branches/create_service.rb new file mode 100644 index 000000000..d235a89aa --- /dev/null +++ b/app/services/protected_branches/create_service.rb @@ -0,0 +1,22 @@ +module ProtectedBranches + class CreateService < ProtectedBranches::BaseService + def call + validate! + + save_gitea_protected_branch! + + save_protected_branch! + + protected_branch + end + + private + def protected_branch + @protected_branch ||= repository.protected_branches.new(protected_branch_params) + end + + def save_protected_branch! + protected_branch.save + end + end +end diff --git a/app/services/protected_branches/destroy_service.rb b/app/services/protected_branches/destroy_service.rb new file mode 100644 index 000000000..503adf9ae --- /dev/null +++ b/app/services/protected_branches/destroy_service.rb @@ -0,0 +1,26 @@ +module ProtectedBranches + class DestroyService < ProtectedBranches::BaseService + def call + protected_branch.destroy! if success? + rescue ActiveRecord::RecordNotFound + raise Error, '404' + rescue => ex + Rails.logger.info ex + raise Error, ex + end + + private + def protected_branch + @protected_branch ||= @repository.protected_branches.find_by!(branch_name: @params) + end + + def success? + result = Gitea::Repository::ProtectedBranches::DestroyService.call(@owner.login, + @repository.identifier, protected_branch.branch_name, @owner.gitea_token) + + return true if result[:status] === :success + raise Error, result[:message] + end + + end +end diff --git a/app/services/protected_branches/update_service.rb b/app/services/protected_branches/update_service.rb new file mode 100644 index 000000000..53cc56b55 --- /dev/null +++ b/app/services/protected_branches/update_service.rb @@ -0,0 +1,31 @@ +module ProtectedBranches + class UpdateService < ProtectedBranches::BaseService + def call + validate! + protected_branch.update(protected_branch_params) if success? + + protected_branch + + rescue ActiveRecord::RecordNotFound + raise Error, '404' + rescue => ex + Rails.logger.info ex + raise Error, ex + end + + private + def protected_branch + @protected_branch ||= @repository.protected_branches.find_by!(branch_name: params[:branch_name]) + end + + def success? + result = Gitea::Repository::ProtectedBranches::UpdateService.call(@owner.login, @repository.identifier, + protected_branch.branch_name, gitea_protected_branch_params, @owner.gitea_token) + + + return true if result[:status] === :success + raise Error, result[:message] + end + + end +end diff --git a/app/views/protected_branches/_protected_branch.json.jbuilder b/app/views/protected_branches/_protected_branch.json.jbuilder new file mode 100644 index 000000000..5f1f0428a --- /dev/null +++ b/app/views/protected_branches/_protected_branch.json.jbuilder @@ -0,0 +1,16 @@ +json.branch_name protected_branch.branch_name +json.enable_push protected_branch.can_push +json.required_approvals protected_branch.required_approvals +json.enable_status_check protected_branch.enable_status_check +json.enable_push_whitelist protected_branch.enable_whitelist +json.enable_merge_whitelist protected_branch.enable_merge_whitelist +json.enable_approvals_whitelist protected_branch.enable_approvals_whitelist +json.dismiss_stale_approvals protected_branch.dismiss_stale_approvals +json.block_on_rejected_reviews protected_branch.block_on_rejected_reviews +json.block_on_outdated_branch protected_branch.block_on_outdated_branch +json.require_signed_commits protected_branch.require_signed_commits +json.merge_whitelist_usernames protected_branch.merge_whitelist_usernames +json.push_whitelist_usernames protected_branch.push_whitelist_usernames +json.approvals_whitelist_usernames protected_branch.approvals_whitelist_usernames +json.created_at protected_branch.created_at.strftime("%Y-%m-%d %H:%M") +json.updated_at protected_branch.updated_at.strftime("%Y-%m-%d %H:%M") diff --git a/app/views/protected_branches/create.json.jbuilder b/app/views/protected_branches/create.json.jbuilder new file mode 100644 index 000000000..5354db7c3 --- /dev/null +++ b/app/views/protected_branches/create.json.jbuilder @@ -0,0 +1 @@ +json.partial! @protected_branch, as: :protected_branch diff --git a/app/views/protected_branches/index.json.jbuilder b/app/views/protected_branches/index.json.jbuilder new file mode 100644 index 000000000..eed1eb5a6 --- /dev/null +++ b/app/views/protected_branches/index.json.jbuilder @@ -0,0 +1,2 @@ +json.total_count @total_count +json.protected_branches @protected_branches, partial: 'protected_branches/protected_branch', as: :protected_branch diff --git a/app/views/protected_branches/update.json.jbuilder b/app/views/protected_branches/update.json.jbuilder new file mode 100644 index 000000000..5354db7c3 --- /dev/null +++ b/app/views/protected_branches/update.json.jbuilder @@ -0,0 +1 @@ +json.partial! @protected_branch, as: :protected_branch diff --git a/config/application.rb b/config/application.rb index fece76ebb..f9a4333f1 100644 --- a/config/application.rb +++ b/config/application.rb @@ -19,6 +19,10 @@ module Educoderplus # # config.educoder = config_for(:configuration) + # Custom directories with classes and modules you want to be autoloadable. + # config.eager_load_paths << Rails.root.join('lib') + config.eager_load_paths += %W(#{config.root}/lib) + config.active_record.default_timezone = :utc config.time_zone = 'Beijing' diff --git a/config/routes.rb b/config/routes.rb index 163eb2d2e..58b2ddebe 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -323,6 +323,34 @@ Rails.application.routes.draw do end end + # protected_branches + scope do + # get ':protected_branches/:action/:id/:user_id', constraints: { branch_name: Forgeplus::Regex.git_reference_regex } + # post '/protected_branches' => 'protected_branches#create' + # delete '/protected_branches/:branch_name' => 'protected_branches#destroy', + # constraints: { branch_name: Forgeplus::Regex.git_reference_regex } + # patch '/protected_branches/:branch_name' => 'protected_branches#update', + # constraints: { branch_name: Forgeplus::Regex.git_reference_regex } + get( + '/protected_branches/', + to: 'protected_branches#index' + ) + delete( + '/protected_branches/:branch_name', + to: 'protected_branches#destroy', + constraints: { branch_name: Forgeplus::Regex.git_reference_regex } + ) + post( + '/protected_branches', + to: 'protected_branches#create' + ) + patch( + '/protected_branches/:branch_name', + to: 'protected_branches#update', + constraints: { branch_name: Forgeplus::Regex.git_reference_regex } + ) + end + resources :issues do collection do get :commit_issues diff --git a/db/migrate/20201130081039_create_protected_branches.rb b/db/migrate/20201130081039_create_protected_branches.rb new file mode 100644 index 000000000..26ce2b1b1 --- /dev/null +++ b/db/migrate/20201130081039_create_protected_branches.rb @@ -0,0 +1,31 @@ +class CreateProtectedBranches < ActiveRecord::Migration[5.2] + def change + create_table :protected_branches do |t| + t.integer :repo_id + t.string :branch_name, default: "" + t.boolean :can_push, default: false, null: false + t.boolean :enable_whitelist, default: false + t.text :whitelist_user_i_ds + t.text :whitelist_team_i_ds + t.boolean :enable_merge_whitelist, default: false, null: false + t.boolean :whitelist_deploy_keys, default: false, null: false + t.text :merge_whitelist_user_i_ds + t.text :merge_whitelist_team_i_ds + t.boolean :enable_status_check, default: false, null: false + t.text :status_check_contexts + t.text :approvals_whitelist_user_i_ds + t.text :approvals_whitelist_team_i_ds + t.integer :required_approvals, default: 0 + t.boolean :enable_approvals_whitelist, default: false, null: false + t.boolean :block_on_rejected_reviews, default: false, null: false + t.boolean :dismiss_stale_approvals, default: false, null: false + t.boolean :require_signed_commits, default: false, null: false + t.text :protected_file_patterns + t.boolean :block_on_outdated_branch, default: false, null: false + + t.timestamps + end + + add_index :protected_branches, :repo_id + end +end diff --git a/spec/controllers/protected_branches_controller_spec.rb b/spec/controllers/protected_branches_controller_spec.rb new file mode 100644 index 000000000..086b746b0 --- /dev/null +++ b/spec/controllers/protected_branches_controller_spec.rb @@ -0,0 +1,40 @@ +require 'rails_helper' + +RSpec.describe ProtectedBranchesController, type: :controller do + + describe "GET #index" do + it "returns http success" do + get :index + expect(response).to have_http_status(:success) + end + end + + describe "GET #create" do + it "returns http success" do + get :create + expect(response).to have_http_status(:success) + end + end + + describe "GET #edit" do + it "returns http success" do + get :edit + expect(response).to have_http_status(:success) + end + end + + describe "GET #update" do + it "returns http success" do + get :update + expect(response).to have_http_status(:success) + end + end + + describe "GET #destroy" do + it "returns http success" do + get :destroy + expect(response).to have_http_status(:success) + end + end + +end diff --git a/spec/helpers/protected_branches_helper_spec.rb b/spec/helpers/protected_branches_helper_spec.rb new file mode 100644 index 000000000..54c22c2f3 --- /dev/null +++ b/spec/helpers/protected_branches_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the ProtectedBranchesHelper. For example: +# +# describe ProtectedBranchesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe ProtectedBranchesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/protected_branch_spec.rb b/spec/models/protected_branch_spec.rb new file mode 100644 index 000000000..751a60c2e --- /dev/null +++ b/spec/models/protected_branch_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe ProtectedBranch, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/protected_branches/create.html.erb_spec.rb b/spec/views/protected_branches/create.html.erb_spec.rb new file mode 100644 index 000000000..f3c375336 --- /dev/null +++ b/spec/views/protected_branches/create.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "protected_branches/create.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/protected_branches/destroy.html.erb_spec.rb b/spec/views/protected_branches/destroy.html.erb_spec.rb new file mode 100644 index 000000000..c6570af3d --- /dev/null +++ b/spec/views/protected_branches/destroy.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "protected_branches/destroy.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/protected_branches/edit.html.erb_spec.rb b/spec/views/protected_branches/edit.html.erb_spec.rb new file mode 100644 index 000000000..c4d008460 --- /dev/null +++ b/spec/views/protected_branches/edit.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "protected_branches/edit.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/protected_branches/index.html.erb_spec.rb b/spec/views/protected_branches/index.html.erb_spec.rb new file mode 100644 index 000000000..e99ac1f03 --- /dev/null +++ b/spec/views/protected_branches/index.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "protected_branches/index.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/protected_branches/update.html.erb_spec.rb b/spec/views/protected_branches/update.html.erb_spec.rb new file mode 100644 index 000000000..80aa6baae --- /dev/null +++ b/spec/views/protected_branches/update.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "protected_branches/update.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end From 23a28cd1a94600913b1e1bd87729fe7810e95d7e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 3 Dec 2020 16:06:15 +0800 Subject: [PATCH 368/384] FIX delete route regx --- config/application.rb | 2 -- config/routes.rb | 12 ++---------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/config/application.rb b/config/application.rb index f9a4333f1..a09b08def 100644 --- a/config/application.rb +++ b/config/application.rb @@ -20,8 +20,6 @@ module Educoderplus # config.educoder = config_for(:configuration) # Custom directories with classes and modules you want to be autoloadable. - # config.eager_load_paths << Rails.root.join('lib') - config.eager_load_paths += %W(#{config.root}/lib) config.active_record.default_timezone = :utc config.time_zone = 'Beijing' diff --git a/config/routes.rb b/config/routes.rb index 58b2ddebe..2010e614a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -325,20 +325,13 @@ Rails.application.routes.draw do # protected_branches scope do - # get ':protected_branches/:action/:id/:user_id', constraints: { branch_name: Forgeplus::Regex.git_reference_regex } - # post '/protected_branches' => 'protected_branches#create' - # delete '/protected_branches/:branch_name' => 'protected_branches#destroy', - # constraints: { branch_name: Forgeplus::Regex.git_reference_regex } - # patch '/protected_branches/:branch_name' => 'protected_branches#update', - # constraints: { branch_name: Forgeplus::Regex.git_reference_regex } get( '/protected_branches/', to: 'protected_branches#index' ) delete( '/protected_branches/:branch_name', - to: 'protected_branches#destroy', - constraints: { branch_name: Forgeplus::Regex.git_reference_regex } + to: 'protected_branches#destroy' ) post( '/protected_branches', @@ -346,8 +339,7 @@ Rails.application.routes.draw do ) patch( '/protected_branches/:branch_name', - to: 'protected_branches#update', - constraints: { branch_name: Forgeplus::Regex.git_reference_regex } + to: 'protected_branches#update' ) end From b3649f03e7fd2839fcc599bc4ed867a25c288421 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Dec 2020 11:06:12 +0800 Subject: [PATCH 369/384] ADD get protected branch api --- api_document.md | 67 ++++++++++++++++++- .../protected_branches_controller.rb | 15 +++-- .../protected_branches/get_service.rb | 23 +++++++ .../protected_branches/show.json.jbuilder | 1 + config/routes.rb | 4 ++ 5 files changed, 104 insertions(+), 6 deletions(-) create mode 100644 app/services/protected_branches/get_service.rb create mode 100644 app/views/protected_branches/show.json.jbuilder diff --git a/api_document.md b/api_document.md index 8d245b76f..61589b93e 100644 --- a/api_document.md +++ b/api_document.md @@ -2825,7 +2825,6 @@ DELETE /api/:owner/:repo/protected_branches/:branch_name *示例* ``` curl -X DELETE \ --d 'branch_name=master' \ http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq ``` *请求参数说明:* @@ -2928,6 +2927,72 @@ http://localhost:3000/api/trustie/truesite/protected_branches.json | jq ``` --- +### 获取某个具体的保护分支 +``` +GET /api/:owner/:repo/protected_branches/:branch_name +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |项目拥有者登录名 | +|repo |否|boolean |仓库名称 | +|branch_name |是|string |保护分支名称 | + + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|branch_name |string |保护分支名称 | +|enable_push |boolean |是否启用推送, true: 启用; false: 不启用, 默认为false | +|enable_push_whitelist |boolean |是否启用白名单推送, true: 启用; false: 不启用, 默认为false, 该参数与enable_push参数为单选项,只能选择| +|push_whitelist_usernames |array |推送白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_push_whitelist参数配合使用 | +|enable_merge_whitelist |boolean |是否启用合并白名单, true: 启用, false: 不启用, 默认为false | +|merge_whitelist_usernames |array |合并白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_merge_whitelist配合使用 | +|enable_status_check |boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | +|required_approvals |int |所需的批准数, 默认为0 | +|enable_approvals_whitelist |boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | +|approvals_whitelist_username |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|block_on_rejected_reviews |boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | +|dismiss_stale_approvals |boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | +|require_signed_commits |boolean |是否需要签名提交, true: 是, false: 否, 默认为false | +|block_on_outdated_branch |boolean |如果拉取请求已经过时,是否阻止合并, true: 是, false: 否, 默认为false | +|created_at |string|创建时间| +|updated_at |string|更新时间| + +返回值 +``` +{ + "branch_name": "develop", + "enable_push": true, + "required_approvals": 0, + "enable_status_check": true, + "enable_push_whitelist": true, + "enable_merge_whitelist": true, + "enable_approvals_whitelist": false, + "dismiss_stale_approvals": false, + "block_on_rejected_reviews": false, + "block_on_outdated_branch": false, + "require_signed_commits": false, + "merge_whitelist_usernames": [ + "jasder" + ], + "push_whitelist_usernames": [ + "jasder" + ], + "approvals_whitelist_usernames": [], + "created_at": "2020-12-02 17:40", + "updated_at": "2020-12-03 11:29" +} +``` +--- + ### DevOps相关api --- diff --git a/app/controllers/protected_branches_controller.rb b/app/controllers/protected_branches_controller.rb index 9b111c789..3c532270c 100644 --- a/app/controllers/protected_branches_controller.rb +++ b/app/controllers/protected_branches_controller.rb @@ -1,6 +1,9 @@ class ProtectedBranchesController < ApplicationController + include OperateProjectAbilityAble + before_action :require_login before_action :load_repository + before_action :authorizate_user_can_edit_project! def index scope = ProtectedBranch.all @@ -10,6 +13,8 @@ class ProtectedBranchesController < ApplicationController def create @protected_branch = ProtectedBranches::CreateService.call(@repository, @owner, params) + + render_protected_branch_json end def update @@ -22,13 +27,13 @@ class ProtectedBranchesController < ApplicationController render_ok end + def show + @protected_branch = ProtectedBranches::GetService.call(@repository, @owner, params) + end + private def render_protected_branch_json - if @protected_branch.persisted? - render json: Jbuilder.new { |json| json.extract! @protected_branch, :can_push }.target! - else - render_error('创建失败!') - end + @protected_branch.persisted? ? @protected_branch : render_error('创建失败!') end end diff --git a/app/services/protected_branches/get_service.rb b/app/services/protected_branches/get_service.rb new file mode 100644 index 000000000..7dcfe9a65 --- /dev/null +++ b/app/services/protected_branches/get_service.rb @@ -0,0 +1,23 @@ +module ProtectedBranches + class GetService < ProtectedBranches::BaseService + def call + validate_branch_name! + + protected_branch + rescue ActiveRecord::RecordNotFound + raise Error, '404' + rescue => ex + Rails.logger.info ex + raise Error, ex + end + + private + def protected_branch + @protected_branch ||= @repository.protected_branches.find_by!(branch_name: params[:branch_name]) + end + + def validate_branch_name! + raise Error, '分支名称不能为空' if params[:branch_name].blank? + end + end +end diff --git a/app/views/protected_branches/show.json.jbuilder b/app/views/protected_branches/show.json.jbuilder new file mode 100644 index 000000000..5354db7c3 --- /dev/null +++ b/app/views/protected_branches/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! @protected_branch, as: :protected_branch diff --git a/config/routes.rb b/config/routes.rb index 2010e614a..e2f28baeb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -329,6 +329,10 @@ Rails.application.routes.draw do '/protected_branches/', to: 'protected_branches#index' ) + get( + '/protected_branches/:branch_name', + to: 'protected_branches#show' + ) delete( '/protected_branches/:branch_name', to: 'protected_branches#destroy' From 3f60dd3f83acc670f51b1b35360098362d4d4729 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Dec 2020 16:18:27 +0800 Subject: [PATCH 370/384] ADD edit protected branch api --- api_document.md | 69 +++++++++++++++++++ .../protected_branches_controller.rb | 4 ++ app/services/gitea/client_service.rb | 38 +++++++--- .../protected_branches/base_service.rb | 12 +++- .../protected_branches/create_service.rb | 7 +- .../protected_branches/edit_service.rb | 35 ++++++++++ .../protected_branches/edit.json.jbuilder | 9 +++ config/routes.rb | 4 ++ 8 files changed, 163 insertions(+), 15 deletions(-) create mode 100644 app/services/protected_branches/edit_service.rb create mode 100644 app/views/protected_branches/edit.json.jbuilder diff --git a/api_document.md b/api_document.md index 61589b93e..cf720e0d1 100644 --- a/api_document.md +++ b/api_document.md @@ -2734,6 +2734,75 @@ http://localhost:3000/api/trustie/truesite/protected_branches.json | jq ``` --- +### 编辑保护分支参数 +``` +GET /api/:owner/:repo/protected_branches/:branch_name/edit +``` +*示例* +``` +curl -X GET \ +http://localhost:3000/api/trustie/truesite/protected_branches/master/edit.json | jq +``` +*请求参数说明:* + +|参数名|必选|类型|说明| +|-|-|-|-| +|owner |是|string |项目拥有者登录名 | +|repo |否|boolean |仓库名称 | +|branch_name |是|string |保护分支名称 | + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|protected |boolean |是否为保护分支, true: 是; false: 不是 | +|branch_name |string |保护分支名称 | +|enable_push |boolean |是否启用推送, true: 启用; false: 不启用, 默认为false | +|enable_push_whitelist |boolean |是否启用白名单推送, true: 启用; false: 不启用, 默认为false, 该参数与enable_push参数为单选项,只能选择| +|push_whitelist_usernames |array |推送白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_push_whitelist参数配合使用 | +|enable_merge_whitelist |boolean |是否启用合并白名单, true: 启用, false: 不启用, 默认为false | +|merge_whitelist_usernames |array |合并白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_merge_whitelist配合使用 | +|enable_status_check |boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | +|required_approvals |int |所需的批准数, 默认为0 | +|enable_approvals_whitelist |boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | +|approvals_whitelist_username |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|block_on_rejected_reviews |boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | +|dismiss_stale_approvals |boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | +|require_signed_commits |boolean |是否需要签名提交, true: 是, false: 否, 默认为false | +|block_on_outdated_branch |boolean |如果拉取请求已经过时,是否阻止合并, true: 是, false: 否, 默认为false | +|created_at |string|创建时间| +|updated_at |string|更新时间| + + +返回值 +``` +{ + "branch_name": "master", + "protected": true, + "protected_branch": { + "branch_name": "master", + "enable_push": false, + "required_approvals": 0, + "enable_status_check": true, + "enable_push_whitelist": false, + "enable_merge_whitelist": true, + "enable_approvals_whitelist": false, + "dismiss_stale_approvals": false, + "block_on_rejected_reviews": false, + "block_on_outdated_branch": false, + "require_signed_commits": false, + "merge_whitelist_usernames": [ + "jasder" + ], + "push_whitelist_usernames": [], + "approvals_whitelist_usernames": [], + "created_at": "2020-12-03 12:00", + "updated_at": "2020-12-04 10:50" + } +} +``` +--- + ### 修改保护分支参数 ``` PATCH /api/:owner/:repo/protected_branches/:branch_name diff --git a/app/controllers/protected_branches_controller.rb b/app/controllers/protected_branches_controller.rb index 3c532270c..364433d78 100644 --- a/app/controllers/protected_branches_controller.rb +++ b/app/controllers/protected_branches_controller.rb @@ -31,6 +31,10 @@ class ProtectedBranchesController < ApplicationController @protected_branch = ProtectedBranches::GetService.call(@repository, @owner, params) end + def edit + @branch, @protected_branch = ProtectedBranches::EditService.call(@repository, @owner, params[:branch_name]) + end + private def render_protected_branch_json @protected_branch.persisted? ? @protected_branch : render_error('创建失败!') diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 7639e694c..bb75fde62 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -168,19 +168,35 @@ class Gitea::ClientService < ApplicationService status = response.status body = response&.body - body, message = - if body.present? - body = JSON.parse(body) - fix_body(body) - else - nil - end - puts "[gitea] status: #{status}" - puts "[gitea] message: #{message}" - puts "[gitea] body: #{body}" + log_error(status, body) + + body, message = get_body_by_status(status, body) + [status, message, body] end + def get_body_by_status(status, body) + body, message = + case status + when 404 then [nil, "404"] + when 403 then [nil, "403"] + else + if body.present? + body = JSON.parse(body) + fix_body(body) + else + nil + end + end + + [body, message] + end + + def log_error(status, body) + puts "[gitea] status: #{status}" + puts "[gitea] body: #{body}" + end + def fix_body(body) return [body, nil] if body.is_a? Array @@ -241,7 +257,7 @@ class Gitea::ClientService < ApplicationService success_statuses = [200, 201, 202, 204] status, message, body = render_response(response) - error(message, status) unless success_statuses.include? status + return error(message, status) unless success_statuses.include? status render_body(body) end diff --git a/app/services/protected_branches/base_service.rb b/app/services/protected_branches/base_service.rb index 3fa866afb..306f3fab4 100644 --- a/app/services/protected_branches/base_service.rb +++ b/app/services/protected_branches/base_service.rb @@ -1,5 +1,6 @@ module ProtectedBranches class BaseService < ApplicationService + Error = Class.new(StandardError) attr_accessor :repository, :owner, :params def initialize(repository, user = nil, params = {}) @@ -250,7 +251,7 @@ module ProtectedBranches } end - + def validate! protected_branch_exists = repository.protected_branches.exists?(params[:branch_name]) raise Error, "Protected branch '#{branch_name}' already exists" if protected_branch_exists @@ -263,4 +264,13 @@ module ProtectedBranches end end + + def error(errors, award: nil, status: nil) + errors = Array.wrap(errors) + + super(errors.to_sentence.presence, status).merge({ + award: award, + errors: errors + }) + end end diff --git a/app/services/protected_branches/create_service.rb b/app/services/protected_branches/create_service.rb index d235a89aa..02112a188 100644 --- a/app/services/protected_branches/create_service.rb +++ b/app/services/protected_branches/create_service.rb @@ -3,9 +3,10 @@ module ProtectedBranches def call validate! - save_gitea_protected_branch! - - save_protected_branch! + ProtectedBranch.transaction do + save_gitea_protected_branch! + save_protected_branch! + end protected_branch end diff --git a/app/services/protected_branches/edit_service.rb b/app/services/protected_branches/edit_service.rb new file mode 100644 index 000000000..a6373a86a --- /dev/null +++ b/app/services/protected_branches/edit_service.rb @@ -0,0 +1,35 @@ +module ProtectedBranches + class EditService < ProtectedBranches::BaseService + def call + validate_branch_name! + + protected_branch + rescue => ex + Rails.logger.info ex + raise Error, ex + end + + private + def protected_branch + branch = get_common_branch + protected_branch ||= @repository.protected_branches.find_by(branch_name: branch_name) + [branch, protected_branch] + end + + def get_common_branch + result = Gitea::Repository::Branches::GetService.call(@owner.login, + @repository.identifier, branch_name, @owner.gitea_token) + + raise Error, '404' if result[:status] == :error + result + end + + def validate_branch_name! + raise Error, '分支名称不能为空' if branch_name.blank? + end + + def branch_name + params + end + end +end diff --git a/app/views/protected_branches/edit.json.jbuilder b/app/views/protected_branches/edit.json.jbuilder new file mode 100644 index 000000000..fc5e137d9 --- /dev/null +++ b/app/views/protected_branches/edit.json.jbuilder @@ -0,0 +1,9 @@ +json.branch_name @branch['name'] +json.protected @branch['protected'] +json.protected_branch do + if @protected_branch + json.partial! @protected_branch, as: :protected_branch + else + json.nil! + end +end diff --git a/config/routes.rb b/config/routes.rb index e2f28baeb..145c20a7d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -333,6 +333,10 @@ Rails.application.routes.draw do '/protected_branches/:branch_name', to: 'protected_branches#show' ) + get( + '/protected_branches/:branch_name/edit', + to: 'protected_branches#edit' + ) delete( '/protected_branches/:branch_name', to: 'protected_branches#destroy' From 7c0c90b9bf841b831f286f19c80af9160900e4c7 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Dec 2020 16:31:52 +0800 Subject: [PATCH 371/384] Update api document --- api_document.md | 246 ++++++++++++++++++++++++------------------------ 1 file changed, 125 insertions(+), 121 deletions(-) diff --git a/api_document.md b/api_document.md index cf720e0d1..59139cb73 100644 --- a/api_document.md +++ b/api_document.md @@ -26,7 +26,7 @@ POST accounts/remote_register ``` *示例* -``` +```bash curl -X POST \ -d "email=2456233122@qq.com" \ -d "password=djs_D_00001" \ @@ -54,7 +54,7 @@ http://localhost:3000/api/accounts/remote_register | jq 返回值 -``` +```json { "status": 0, "message": "success", @@ -71,7 +71,7 @@ http://localhost:3000/api/accounts/remote_register | jq GET api/users/me ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/users/me | jq ``` @@ -87,7 +87,7 @@ curl -X GET http://localhost:3000/api/users/me | jq 返回值 -``` +```json { "username": "18816895620", "login": "18816895620", @@ -103,7 +103,7 @@ curl -X GET http://localhost:3000/api/users/me | jq GET api/users/list ``` *示例* -``` +```bash curl -X GET \ -d "limit=10" \ -d "search=18816895620" @@ -130,7 +130,7 @@ http://localhost:3000/api/users/list | jq |-- image_url |string|用户头像| 返回值 -``` +```json { "total_count": 1, "users": [ @@ -150,7 +150,7 @@ http://localhost:3000/api/users/list | jq GET api/project_categories ``` *示例* -``` +```bash curl -X GET \ -d "name=大数据" \ http://localhost:3000/api/project_categories/ | jq @@ -172,7 +172,7 @@ http://localhost:3000/api/project_categories/ | jq 返回值 -``` +```json { "project_categories": [ { @@ -189,7 +189,7 @@ http://localhost:3000/api/project_categories/ | jq GET api/project_languages ``` *示例* -``` +```bash curl -X GET \ -d "name=Ruby" \ http://localhost:3000/api/project_languages/ | jq @@ -211,7 +211,7 @@ http://localhost:3000/api/project_languages/ | jq 返回值 -``` +```json { "project_languages": [ { @@ -228,7 +228,7 @@ http://localhost:3000/api/project_languages/ | jq GET api/ignores ``` *示例* -``` +```bash curl -X GET \ -d "name=Ada" \ http://localhost:3000/api/ignores/ | jq @@ -250,7 +250,7 @@ http://localhost:3000/api/ignores/ | jq 返回值 -``` +```json { "ignores": [ { @@ -267,7 +267,7 @@ http://localhost:3000/api/ignores/ | jq GET api/licenses ``` *示例* -``` +```bash curl -X GET \ -d "name=AFL" \ http://localhost:3000/api/licenses/ | jq @@ -289,7 +289,7 @@ http://localhost:3000/api/licenses/ | jq 返回值 -``` +```json { "licenses": [ { @@ -322,7 +322,7 @@ http://localhost:3000/api/licenses/ | jq POST api/projects ``` *示例* -``` +```bash curl -X POST \ -d "user_id=36401" \ -d "name=hnfl_demo" \ @@ -358,7 +358,7 @@ http://localhost:3000/api/projects/ | jq 返回值 -``` +```json { "id": 3240, "name": "好项目" @@ -371,7 +371,7 @@ http://localhost:3000/api/projects/ | jq POST api/projects/migrate ``` *示例* -``` +```bash curl -X POST \ -d "user_id=36408" \ -d "clone_addr=https://gitea.com/mx8090alex/golden.git" \ @@ -407,7 +407,7 @@ http://localhost:3000/api/projects/migrate.json | jq 返回值 -``` +```json { "id": 3263, "name": "ni项目" @@ -420,7 +420,7 @@ http://localhost:3000/api/projects/migrate.json | jq POST api/repositories/:id/sync_mirror ``` *示例* -``` +```bash curl -X POST http://localhost:3000/api/repositories/1244/sync_mirror | jq ``` *请求参数说明:* @@ -439,7 +439,7 @@ curl -X POST http://localhost:3000/api/repositories/1244/sync_mirror | jq 返回值 -``` +```json { "status": 0, "message": "success" @@ -453,7 +453,7 @@ curl -X POST http://localhost:3000/api/repositories/1244/sync_mirror | jq GET /api/:namespace_id/:id ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/jasder/jasder_test | jq ``` *请求参数说明:* @@ -478,7 +478,7 @@ curl -X GET http://localhost:3000/api/jasder/jasder_test | jq 返回值 -``` +```json { "name": "ni项目", "identifier": "mirror_demo", @@ -495,7 +495,7 @@ curl -X GET http://localhost:3000/api/jasder/jasder_test | jq GET /api/:namespace_id/:id/simple ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/jasder/jasder_test/simple | jq ``` *请求参数说明:* @@ -519,7 +519,7 @@ curl -X GET http://localhost:3000/api/jasder/jasder_test/simple | jq 返回值 -``` +```json { "identifier": "jasder_test", "name": "jasder的测试项目", @@ -539,7 +539,7 @@ curl -X GET http://localhost:3000/api/jasder/jasder_test/simple | jq GET /api/repositories/:id/edit.json ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/repositories/:id/edit.json | jq ``` @@ -558,7 +558,7 @@ curl -X GET http://localhost:3000/api/repositories/:id/edit.json | jq 返回值 -``` +```json { "identifier": "mirror_demo", "project_id": 3263, @@ -577,7 +577,7 @@ curl -X GET http://localhost:3000/api/repositories/:id/edit.json | jq PATCH api/projects/:id ``` *示例* -``` +```bash curl -X PATCH \ -d "name=hnfl_demo" \ -d "description=my first project" \ @@ -613,7 +613,7 @@ http://localhost:3000/api/projects/3263.json | jq 返回值 -``` +```json { "id": 3263, "identifier": "mirror_demo", @@ -631,7 +631,7 @@ http://localhost:3000/api/projects/3263.json | jq DELETE api/projects/:id ``` *示例* -``` +```bash curl -X DELETE http://localhost:3000/api/projects/3263.json | jq ``` @@ -652,7 +652,7 @@ curl -X DELETE http://localhost:3000/api/projects/3263.json | jq 返回值 -``` +```json { "status": 0, "message": "success" @@ -665,7 +665,7 @@ curl -X DELETE http://localhost:3000/api/projects/3263.json | jq POST api/projects/:id/members ``` *示例* -``` +```bash curl -X POST \ -d "user_id=36406" \ http://localhost:3000/api/projects/3297/members | jq @@ -687,7 +687,7 @@ http://localhost:3000/api/projects/3297/members | jq 返回值 -``` +```json { "status": 0, "message": "success" @@ -700,7 +700,7 @@ http://localhost:3000/api/projects/3297/members | jq DELETE api/projects/:id/members/remove ``` *示例* -``` +```bash curl -X DELETE \ -d "user_id=36400" \ http://localhost:3000/api/projects/3263/members/remove | jq @@ -722,7 +722,7 @@ http://localhost:3000/api/projects/3263/members/remove | jq 返回值 -``` +```json { "status": 0, "message": "success" @@ -735,7 +735,7 @@ http://localhost:3000/api/projects/3263/members/remove | jq PUT api/projects/:id/members/change_role ``` *示例* -``` +```bash curl -X PUT \ -d "user_id=36400" \ -d "role=Developer" \ @@ -759,7 +759,7 @@ http://localhost:3000/api/projects/3263/members/change_role | jq 返回值 -``` +```json { "status": 0, "message": "success" @@ -773,7 +773,7 @@ http://localhost:3000/api/projects/3263/members/change_role | jq GET api/projects/:id/members ``` *示例* -``` +```bash curl -X GET \ -d "page=1" \ -d "limit=5" \ @@ -803,7 +803,7 @@ http://localhost:3000/api/projects/3263/members | jq 返回值 -``` +```json { "total_count": 2, "members": [ @@ -833,7 +833,7 @@ http://localhost:3000/api/projects/3263/members | jq POST /api/projects/:project_id/forks ``` *示例* -``` +```bash curl -X POST http://localhost:3000/api/projects/3297/forks | jq ``` *请求参数说明:* @@ -852,7 +852,7 @@ curl -X POST http://localhost:3000/api/projects/3297/forks | jq 返回值 -``` +```json { "id": 3290, "identifier": "newadm" @@ -865,7 +865,7 @@ curl -X POST http://localhost:3000/api/projects/3297/forks | jq POST /api/:namespace_id/:project_id/repository/entries ``` *示例* -``` +```bash curl -X GET \ -d "ref=develop" \ http://localhost:3000//api/jasder/jasder_test/repository/entries | jq @@ -960,7 +960,7 @@ http://localhost:3000//api/jasder/jasder_test/repository/entries | jq GET /api/repositories/:id/sub_entries ``` *示例* -``` +```bash curl -X GET \ -d "ref=master" \ -d "filepath=test1_create_file.rb" \ @@ -1039,7 +1039,7 @@ http://localhost:3000/api/repositories/87/sub_entries.json | jq GET api/project_categories/group_list ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/project_categories/group_list | jq ``` @@ -1053,7 +1053,7 @@ curl -X GET http://localhost:3000/api/project_categories/group_list | jq 返回值 -``` +```json [ { "id": 1, @@ -1079,7 +1079,7 @@ curl -X GET http://localhost:3000/api/project_categories/group_list | jq GET api/projects/group_type_list ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/projects/group_type_list | jq ``` @@ -1093,7 +1093,7 @@ curl -X GET http://localhost:3000/api/projects/group_type_list | jq 返回值 -``` +```json [ { "project_type": "common", @@ -1114,7 +1114,7 @@ curl -X GET http://localhost:3000/api/projects/group_type_list | jq GET api/projects ``` *示例* -``` +```bash curl -X GET \ -d "page=1" \ -d "limit=5" \ @@ -1159,7 +1159,7 @@ http://localhost:3000/api/projects | jq 返回值 -``` +```json { "total_count": 3096, "projects": [ @@ -1288,7 +1288,7 @@ http://localhost:3000/api/projects | jq GET api/projects/recommend ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/projects/recommend | jq ``` @@ -1318,7 +1318,7 @@ http://localhost:3000/api/projects/recommend | jq 返回值 -``` +```json [ { "id": 20, @@ -1348,7 +1348,7 @@ GET api/:namespace_id/:id/about ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/:jason/forgeplus/about | jq ``` @@ -1371,7 +1371,7 @@ http://localhost:3000/api/:jason/forgeplus/about | jq 返回值 -``` +```json { "content": "", "identifier": "forgeplus", @@ -1389,7 +1389,7 @@ POST api/:namespace_id/:id/about ``` *示例* -``` +```bash curl -X POST \ -d "content=内容" \ -d "attachment_ids=[1, 2, 2]" \ @@ -1415,7 +1415,7 @@ http://localhost:3000/api/:jasder/forgeplus/about | jq |-- name |string|用户名,也是用户标识| 返回值 -``` +```json { "content": "", "identifier": "forgeplus", @@ -1432,7 +1432,7 @@ http://localhost:3000/api/:jasder/forgeplus/about | jq GET /api/:namespace_id/:id/branches ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/jasder/jasder_test/branches | jq ``` *请求参数说明:* @@ -1464,7 +1464,7 @@ curl -X GET http://localhost:3000/api/jasder/jasder_test/branches | jq 返回值 -``` +```json [ { "name": "develop", @@ -1513,7 +1513,7 @@ curl -X GET http://localhost:3000/api/jasder/jasder_test/branches | jq GET /api/repositories/:id/tags ``` *示例* -``` +```bash curl -X GET \ -d "limit=20" \ -d "page=1" \ @@ -1550,7 +1550,7 @@ http://localhost:3000/api/repositories/5836/tags.json | jq 返回值 -``` +```json [ { "name": "develop", @@ -1599,7 +1599,7 @@ http://localhost:3000/api/repositories/5836/tags.json | jq GET /api/:namespace_id/:project_id/repository ``` *示例* -``` +```bash curl -X GET \ http://192.168.2.230:3000/api/jasder/forgeplus/repository | jq ``` @@ -1645,7 +1645,7 @@ http://192.168.2.230:3000/api/jasder/forgeplus/repository | jq 返回值 -``` +```json { "identifier": "mirror_demo", "project_id": 3263, @@ -1683,7 +1683,7 @@ http://192.168.2.230:3000/api/jasder/forgeplus/repository | jq GET /api/repositories/:id/commits ``` *示例* -``` +```bash curl -X GET \ -d "sha=develop" \ -d "page=1" \ @@ -1714,7 +1714,7 @@ http://localhost:3000/api/repositories/89/commits.json | jq 返回值 -``` +```json { "total_count": 63, "commits": [ @@ -1748,7 +1748,7 @@ http://localhost:3000/api/repositories/89/commits.json | jq GET /api/:owner/:repo/commits/:sha ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/jasder/repo/commits/b0c4a4a1487d53acebf2addc544b29938cad12df.json | jq ``` @@ -1847,7 +1847,7 @@ http://localhost:3000/api/jasder/repo/commits/b0c4a4a1487d53acebf2addc544b29938c POST /api/projects/:id/praise_tread/like ``` *示例* -``` +```bash curl -X POST http://localhost:3000/api/projects/3263/praise_tread/like | jq ``` *请求参数说明:* @@ -1864,7 +1864,7 @@ curl -X POST http://localhost:3000/api/projects/3263/praise_tread/like | jq 返回值 -``` +```json { "status": 0, "message": "success" @@ -1877,7 +1877,7 @@ curl -X POST http://localhost:3000/api/projects/3263/praise_tread/like | jq DELETE /api/projects/:id/praise_tread/unlike ``` *示例* -``` +```bash curl -X DELETE http://localhost:3000/api/projects/3263/praise_tread/unlike | jq ``` *请求参数说明:* @@ -1895,7 +1895,7 @@ curl -X DELETE http://localhost:3000/api/projects/3263/praise_tread/unlike | jq 返回值 -``` +```json { "status": 0, "message": "success" @@ -1908,7 +1908,7 @@ curl -X DELETE http://localhost:3000/api/projects/3263/praise_tread/unlike | jq GET /api/projects/:id/praise_tread/check_like ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/projects/3263/praise_tread/check_like | jq ``` *请求参数说明:* @@ -1926,7 +1926,7 @@ curl -X GET http://localhost:3000/api/projects/3263/praise_tread/check_like | jq 返回值 -``` +```json { "status": 0, "message": "success" @@ -1939,7 +1939,7 @@ curl -X GET http://localhost:3000/api/projects/3263/praise_tread/check_like | jq GET /api/projects/:id/praise_tread ``` *示例* -``` +```bash curl -X GET \ -d "page=1" \ -d "limit=5" \ @@ -1967,7 +1967,7 @@ http://localhost:3000/api/projects/3263/praise_tread | jq 返回值 -``` +```json { "total_count": 1, "praises": [ @@ -1986,7 +1986,7 @@ http://localhost:3000/api/projects/3263/praise_tread | jq POST /api/projects/:id/watchers/follow ``` *示例* -``` +```bash curl -X POST http://localhost:3000/api/projects/3263/watchers/follow | jq ``` *请求参数说明:* @@ -2004,7 +2004,7 @@ curl -X POST http://localhost:3000/api/projects/3263/watchers/follow | jq 返回值 -``` +```json { "status": 0, "message": "响应成功" @@ -2017,7 +2017,7 @@ curl -X POST http://localhost:3000/api/projects/3263/watchers/follow | jq DELETE /api/projects/:id/watchers/unfollow ``` *示例* -``` +```bash curl -X DELETE http://localhost:3000//api/projects/3263/watchers/unfollow | jq ``` *请求参数说明:* @@ -2035,7 +2035,7 @@ curl -X DELETE http://localhost:3000//api/projects/3263/watchers/unfollow | jq 返回值 -``` +```json { "status": 0, "message": "响应成功" @@ -2048,7 +2048,7 @@ curl -X DELETE http://localhost:3000//api/projects/3263/watchers/unfollow | jq GET /api/projects/:id/watchers/check_watch ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/projects/3263/watchers/check_watch | jq ``` *请求参数说明:* @@ -2066,7 +2066,7 @@ curl -X GET http://localhost:3000/api/projects/3263/watchers/check_watch | jq 返回值 -``` +```json { "status": 0, "message": "success" @@ -2079,7 +2079,7 @@ curl -X GET http://localhost:3000/api/projects/3263/watchers/check_watch | jq GET /api/projects/:id/watchers ``` *示例* -``` +```bash curl -X GET \ -d "page=1" \ -d "limit=5" \ @@ -2106,7 +2106,7 @@ http://localhost:3000//api/projects/3263/watchers | jq 返回值 -``` +```json { "total_count": 1, "watchers": [ @@ -2125,7 +2125,7 @@ http://localhost:3000//api/projects/3263/watchers | jq POST /api/repositories/:id/create_file ``` *示例* -``` +```bash curl -X POST \ -d 'filepath=test1_create_file1.rb' \ -d 'branch=master' \ @@ -2164,7 +2164,7 @@ http://localhost:3000/api/18816895620/mirror_demo/contents.json | jq 返回值 -``` +```json { "name": "test1_create_file12.rb", "sha": "7b70509105b587e71f5692b9e8ab70851e321f64", @@ -2193,7 +2193,7 @@ http://localhost:3000/api/18816895620/mirror_demo/contents.json | jq PUT /api/repositories/:id/update_file.json ``` *示例* -``` +```bash curl -X PUT \ -d 'filepath=text1.rb' \ -d 'branch=master' \ @@ -2235,7 +2235,7 @@ http://localhost:3000/api/repositories/3938/update_file.json | jq 返回值 -``` +```json { "name": "test1_create_file6.rb", "sha": "57426eb21e4ceabdf4b206f022257e08077e0040", @@ -2264,7 +2264,7 @@ http://localhost:3000/api/repositories/3938/update_file.json | jq DELETE /api/repositories/:id/delete_file ``` *示例* -``` +```bash curl -X DELETE \ -d 'filepath=test1_create_file12.rb' \ -d 'test delete file' \ @@ -2321,7 +2321,7 @@ http://localhost:3000/api//api/repositories/3868/delete_file | jq GET /api/:owner/:repo/pulls/:id/files.json ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/Jason/test-txt/pulls/1/files.json | jq ``` @@ -2439,7 +2439,7 @@ http://localhost:3000/api/Jason/test-txt/pulls/1/files.json | jq GET /api/:owner/:repo/pulls/:id/commits.json ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/Jason/repo/1/commits.json | jq ``` @@ -2504,7 +2504,7 @@ http://localhost:3000/api/Jason/repo/1/commits.json | jq GET /api/:owner/:repo/compare/{base}...{head}.json ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/Jason/test-txt/compare/master...develop | jq @@ -2655,7 +2655,7 @@ http://localhost:3000/api/ysfns/test-txt/compare/master...Jason/test-txt:develop POST /api/:owner/:repo/protected_branches ``` *示例* -``` +```bash curl -X POST \ -d 'branch_name=master' \ -d 'enable_push=true' \ @@ -2739,7 +2739,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches.json | jq GET /api/:owner/:repo/protected_branches/:branch_name/edit ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/trustie/truesite/protected_branches/master/edit.json | jq ``` @@ -2775,7 +2775,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches/master/edit.json | 返回值 -``` +```json { "branch_name": "master", "protected": true, @@ -2808,7 +2808,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches/master/edit.json | PATCH /api/:owner/:repo/protected_branches/:branch_name ``` *示例* -``` +```bash curl -X PATCH \ -d 'branch_name=master' \ -d 'enable_push=true' \ @@ -2861,7 +2861,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq 返回值 -``` +```json { "branch_name": "develop", "enable_push": true, @@ -2892,7 +2892,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq DELETE /api/:owner/:repo/protected_branches/:branch_name ``` *示例* -``` +```bash curl -X DELETE \ http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq ``` @@ -2913,7 +2913,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq |message |string|信息说明| 返回值 -``` +```json { "status": 0, "message": "success" @@ -2926,7 +2926,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq GET /api/:owner/:repo/protected_branches/ ``` *示例* -``` +```bash curl -X GET \ -d "page=1" \ -d "limit=5" \ @@ -3001,7 +3001,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches.json | jq GET /api/:owner/:repo/protected_branches/:branch_name ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq ``` @@ -3036,7 +3036,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq |updated_at |string|更新时间| 返回值 -``` +```json { "branch_name": "develop", "enable_push": true, @@ -3071,7 +3071,7 @@ GET /api/:owner/:repo/ci_authorize ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/jasder/forgeplus/ci_authorize.json | jq ``` @@ -3115,7 +3115,7 @@ POST /api/:owner/:repo/cloud_accounts ``` *示例* -``` +```bash curl -X POST \ -d "account=xx" \ -d "secret=xxx" \ @@ -3156,7 +3156,7 @@ https://localhost:3000/api/jasder/forgeplus/cloud_accounts.json | jq GET /api/users/ci/oauth_grant ``` *示例* -``` +```bash curl -X GET \ -d "password=123456" \ http://localhost:3000/api/users/ci/oauth_grant.json | jq @@ -3173,7 +3173,8 @@ http://localhost:3000/api/users/ci/oauth_grant.json | jq |-|-|-| |status |int|0:成功, -1: 失败| -``` +返回值 +```json { "status": 0, "message": "success" @@ -3186,7 +3187,7 @@ http://localhost:3000/api/users/ci/oauth_grant.json | jq POST /api/:owner/:repo/activate ``` *示例* -``` +```bash curl -X POST \ http://localhost:3000/api/jasder/forgeplus/activate.json | jq ``` @@ -3203,7 +3204,8 @@ http://localhost:3000/api/jasder/forgeplus/activate.json | jq |-|-|-| |status |int|0:成功, -1: 失败| -``` +返回值 +```json { "status": 0, "message": "success" @@ -3216,7 +3218,7 @@ http://localhost:3000/api/jasder/forgeplus/activate.json | jq DELETE /api/:owner/:repo/deactivate ``` *示例* -``` +```bash curl -X POST \ http://localhost:3000/api/jasder/forgeplus/deactivate.json | jq ``` @@ -3233,7 +3235,8 @@ http://localhost:3000/api/jasder/forgeplus/deactivate.json | jq |-|-|-| |status |int|0:成功, -1: 失败| -``` +返回值 +```json { "status": 0, "message": "success" @@ -3246,7 +3249,7 @@ http://localhost:3000/api/jasder/forgeplus/deactivate.json | jq GET /api/:owner/:repo/get_trustie_pipeline ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/jasder/forge/get_trustie_pipeline.json | jq ``` @@ -3267,7 +3270,8 @@ http://localhost:3000/api/jasder/forge/get_trustie_pipeline.json | jq |path |string|文件夹或文件相对路径| |content |string|文件内容,| -``` +返回值 +```json { "name": ".trustie-pipeline.yml", "path": ".trustie-pipeline.yml", @@ -3282,7 +3286,7 @@ http://localhost:3000/api/jasder/forge/get_trustie_pipeline.json | jq PUT /api/:owner/:repo/update_trustie_pipeline ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/jasder/forge/update_trustie_pipeline.json | jq ``` @@ -3324,7 +3328,7 @@ GET /api/ci/languages ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/ci/languages.json | jq ``` @@ -3356,7 +3360,7 @@ GET /api/ci/languages/common ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/ci/languages/common.json | jq ``` @@ -3388,7 +3392,7 @@ GET /api/ci/languages/:id ``` *示例* -``` +```bash curl -X GET http://localhost:3000/api/ci/languages/114.json | jq ``` @@ -3426,7 +3430,7 @@ GET /api/:owner/:repo/builds ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/Jason/forge/builds | jq ``` @@ -3492,7 +3496,7 @@ GET /api/:owner/:repo/builds/:build ``` *示例* -``` +```bash curl -X GET \ http://ocalhost:3000/api/jasder/forge/builds/1 | jq ``` @@ -3598,7 +3602,7 @@ POST /api/:owner/:repo/builds/:build/restart ``` *示例* -``` +```bash curl -X POST \ http://localhost:3000/api/jasder/forgeplus/builds/1 | jq ``` @@ -3656,7 +3660,7 @@ DELETE /api/:owner/:repo/builds/:build/stop ``` *示例* -``` +```bash curl -X DELETE \ http://localhost:3000/api/jaser/forge/builds/2 | jq ``` @@ -3762,7 +3766,7 @@ GET /api/:owner/:repo/builds/:build/logs/:stage/:step ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/dev_ops/builds/2/logs/1/1 | jq ``` @@ -3836,7 +3840,7 @@ GET /api/users/ci/cloud_account ``` *示例* -``` +```bash curl -X GET \ http://localhost:3000/api/users/ci/cloud_account | jq ``` @@ -3869,7 +3873,7 @@ POST /api/users/ci/cloud_account/bind ``` *示例* -``` +```bash curl -X POST \ -d "account=xx" \ -d "secret=xxx" \ @@ -3912,7 +3916,7 @@ DELETE /api/users/ci/cloud_account/unbind ``` *示例* -``` +```bash curl -X DELETE \ http://localhost:3000/api/users/ci/cloud_account/unbind.json | jq ``` @@ -3939,7 +3943,7 @@ GET /api/users/:login/projects ``` *示例* -``` +```bash curl -X GET \ -d "page=1" \ -d "limit=20" \ @@ -3979,7 +3983,7 @@ http://localhost:3000/api/users/Jason/projects.json | jq 返回值 -``` +```json { "total_count": 3096, "projects": [ From aaf3661fd6385bcb3982499097e21478c822b375 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Dec 2020 17:13:58 +0800 Subject: [PATCH 372/384] FIX Forces conversion str to boolean --- app/services/application_service.rb | 6 ++++- .../protected_branches/base_service.rb | 26 +++++++++---------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/app/services/application_service.rb b/app/services/application_service.rb index 81c48de95..2fa59ed29 100644 --- a/app/services/application_service.rb +++ b/app/services/application_service.rb @@ -14,4 +14,8 @@ class ApplicationService def strip(str) str.to_s.strip.presence end -end \ No newline at end of file + + def str_to_boolean str + ActiveModel::Type::Boolean.new.cast str + end +end diff --git a/app/services/protected_branches/base_service.rb b/app/services/protected_branches/base_service.rb index 306f3fab4..ad49bb8d1 100644 --- a/app/services/protected_branches/base_service.rb +++ b/app/services/protected_branches/base_service.rb @@ -91,37 +91,37 @@ module ProtectedBranches end def enable_status_check_params - params[:enable_status_check] || false + str_to_boolean(params[:enable_status_check] || false) end def enable_approvals_whitelist_params - params[:enable_approvals_whitelist] || false + str_to_boolean(params[:enable_approvals_whitelist] || false) end def block_on_rejected_reviews_params - params[:block_on_rejected_reviews] || false + str_to_boolean(params[:block_on_rejected_reviews] || false) end def dismiss_stale_approvals_params - params[:dismiss_stale_approvals] || false + str_to_boolean(params[:dismiss_stale_approvals] || false) end def require_signed_commits_params - params[:require_signed_commits] || false + str_to_boolean(params[:require_signed_commits] || false) end def block_on_outdated_branch_params - params[:block_on_outdated_branch] || false + str_to_boolean(params[:block_on_outdated_branch] || false) end def can_push_params return false if !can_push? return true if enable_whitelist? - params[:enable_push] + str_to_boolean(params[:enable_push]) end def enable_whitelist_params return false if !can_push? - params[:enable_push_whitelist] + str_to_boolean(params[:enable_push_whitelist]) end def whitelist_user_i_ds_params @@ -134,7 +134,7 @@ module ProtectedBranches end def enable_merge_whitelist_params - params[:enable_merge_whitelist] || false + str_to_boolean(params[:enable_merge_whitelist] || false) end def merge_whitelist_user_i_ds_params @@ -195,19 +195,19 @@ module ProtectedBranches end def can_push? - params[:enable_push] === true + str_to_boolean(params[:enable_push]) === true end def enable_whitelist? - params[:enable_push_whitelist] === true + str_to_boolean(params[:enable_push_whitelist]) === true end def enable_merge_whitelist? - params[:enable_merge_whitelist] === true + str_to_boolean(params[:enable_merge_whitelist]) === true end def enable_approvals_whitelist? - params[:enable_approvals_whitelist] === true + str_to_boolean(params[:enable_approvals_whitelist]) === true end def filter_empty_element(array) From 539b4a10a0256eafa0b8c9f1cccdadf6e95c1e1f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Dec 2020 18:15:19 +0800 Subject: [PATCH 373/384] Upate README.md --- README.md | 13 +++++++++++++ api_document.md | 16 ++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6f8fc270a..d6b0abc93 100644 --- a/README.md +++ b/README.md @@ -110,3 +110,16 @@ http://localhost:3000/ - 里程碑 ![](docs/figs/milestone.png) + +### API +- [API](api_document.md) + +## 贡献代码 + +1. Fork 项目 +2. 创建本地分支(git checkout -b my-new-feature) +3. 提交更改 (git commit -am 'Add some feature') +4. 推送到分支 (git push origin my-new-feature) +5. 向源项目的 **develop** 分支发起 Pull Request + +## License diff --git a/api_document.md b/api_document.md index 59139cb73..50a45573c 100644 --- a/api_document.md +++ b/api_document.md @@ -7,7 +7,7 @@ ### 开发API服务地址: -**https://testgitea.trustie.net/** +**** 响应状态说明: @@ -2679,7 +2679,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches.json | jq |enable_status_check |否|boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | |required_approvals |否|int |所需的批准数, 默认为0 | |enable_approvals_whitelist |否|boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | -|approvals_whitelist_username |否|array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|approvals_whitelist_usernames |否|array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | |block_on_rejected_reviews |否|boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | |dismiss_stale_approvals |否|boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | |require_signed_commits |否|boolean |是否需要签名提交, true: 是, false: 否, 默认为false | @@ -2698,7 +2698,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches.json | jq |enable_status_check |boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | |required_approvals |int |所需的批准数, 默认为0 | |enable_approvals_whitelist |boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | -|approvals_whitelist_username |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|approvals_whitelist_usernames |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | |block_on_rejected_reviews |boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | |dismiss_stale_approvals |boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | |require_signed_commits |boolean |是否需要签名提交, true: 是, false: 否, 默认为false | @@ -2765,7 +2765,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches/master/edit.json | |enable_status_check |boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | |required_approvals |int |所需的批准数, 默认为0 | |enable_approvals_whitelist |boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | -|approvals_whitelist_username |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|approvals_whitelist_usernames |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | |block_on_rejected_reviews |boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | |dismiss_stale_approvals |boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | |require_signed_commits |boolean |是否需要签名提交, true: 是, false: 否, 默认为false | @@ -2832,7 +2832,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq |enable_status_check |否|boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | |required_approvals |否|int |所需的批准数, 默认为0 | |enable_approvals_whitelist |否|boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | -|approvals_whitelist_username |否|array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|approvals_whitelist_usernames |否|array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | |block_on_rejected_reviews |否|boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | |dismiss_stale_approvals |否|boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | |require_signed_commits |否|boolean |是否需要签名提交, true: 是, false: 否, 默认为false | @@ -2851,7 +2851,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq |enable_status_check |boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | |required_approvals |int |所需的批准数, 默认为0 | |enable_approvals_whitelist |boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | -|approvals_whitelist_username |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|approvals_whitelist_usernames |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | |block_on_rejected_reviews |boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | |dismiss_stale_approvals |boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | |require_signed_commits |boolean |是否需要签名提交, true: 是, false: 否, 默认为false | @@ -2955,7 +2955,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches.json | jq |enable_status_check |boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | |required_approvals |int |所需的批准数, 默认为0 | |enable_approvals_whitelist |boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | -|approvals_whitelist_username |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|approvals_whitelist_usernames |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | |block_on_rejected_reviews |boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | |dismiss_stale_approvals |boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | |require_signed_commits |boolean |是否需要签名提交, true: 是, false: 否, 默认为false | @@ -3027,7 +3027,7 @@ http://localhost:3000/api/trustie/truesite/protected_branches/master.json | jq |enable_status_check |boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false | |required_approvals |int |所需的批准数, 默认为0 | |enable_approvals_whitelist |boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false | -|approvals_whitelist_username |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | +|approvals_whitelist_usernames |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 | |block_on_rejected_reviews |boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false | |dismiss_stale_approvals |boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false | |require_signed_commits |boolean |是否需要签名提交, true: 是, false: 否, 默认为false | From 4c980b57740ba9df6fbe3f3b5a4928beb52cdb6e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Dec 2020 18:15:48 +0800 Subject: [PATCH 374/384] FIX create protected branch params --- app/services/protected_branches/base_service.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/services/protected_branches/base_service.rb b/app/services/protected_branches/base_service.rb index ad49bb8d1..bfa3a432a 100644 --- a/app/services/protected_branches/base_service.rb +++ b/app/services/protected_branches/base_service.rb @@ -148,7 +148,7 @@ module ProtectedBranches def approvals_whitelist_user_i_ds_params return [] if !enable_approvals_whitelist? - user_ids(get_approvals_whitelist_username) + user_ids(get_approvals_whitelist_usernames) end def approvals_whitelist_team_i_ds_params @@ -177,9 +177,9 @@ module ProtectedBranches filter_empty_element Array(params[:merge_whitelist_usernames]) end - def get_approvals_whitelist_username + def get_approvals_whitelist_usernames return [] if !enable_approvals_whitelist? - filter_empty_element Array(params[:approvals_whitelist_username]) + filter_empty_element Array(params[:approvals_whitelist_usernames]) end def check_users!(names) @@ -231,7 +231,7 @@ module ProtectedBranches def gitea_protected_branch_params { - approvals_whitelist_username: get_approvals_whitelist_username, + approvals_whitelist_username: get_approvals_whitelist_usernames, branch_name: params[:branch_name], enable_approvals_whitelist: enable_approvals_whitelist_params, enable_merge_whitelist: enable_merge_whitelist_params, @@ -258,7 +258,7 @@ module ProtectedBranches check_users!(get_push_whitelist_usernames) if get_push_whitelist_usernames.any? check_users!(get_merge_whitelist_usernames) if get_merge_whitelist_usernames.any? - check_users!(get_approvals_whitelist_username) if get_approvals_whitelist_username.any? + check_users!(get_approvals_whitelist_usernames) if get_approvals_whitelist_usernames.any? raise Error, '分支名称不能为空' if params[:branch_name].blank? From 07caa77f97e9270427d61916589e6a06e298a12b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 7 Dec 2020 10:06:08 +0800 Subject: [PATCH 375/384] FIX code review --- .../concerns/protected_branch_params_able.rb | 248 +++++++++++++++++ .../protected_branches/base_service.rb | 257 +----------------- .../protected_branches/create_service.rb | 8 + 3 files changed, 258 insertions(+), 255 deletions(-) create mode 100644 app/services/concerns/protected_branch_params_able.rb diff --git a/app/services/concerns/protected_branch_params_able.rb b/app/services/concerns/protected_branch_params_able.rb new file mode 100644 index 000000000..aeb62e646 --- /dev/null +++ b/app/services/concerns/protected_branch_params_able.rb @@ -0,0 +1,248 @@ +module ProtectedBranchParamsAble + extend ActiveSupport::Concern + + private + + # { + # "approvals_whitelist_teams": [ + # "string" + # ], //批准团队(或审查团队)白名单 + # "approvals_whitelist_username": [ + # "string" + # ], // 批准用户(或审查者)白名单 + # "block_on_outdated_branch": true, // 如果拉取过时,阻止合并 + # "block_on_rejected_reviews": true, // 拒绝审核,阻止合并请求 + # "branch_name": "string", //分支名称 + # "dismiss_stale_approvals": true, // 取消过时的批准 + # "enable_approvals_whitelist": true, //是否批准仅限列入白名单的用户或者团队, 主要用户pr的审核批准计数功能 + # "enable_merge_whitelist": true, // 是否启用合并请求白名单 + # "enable_push": true, //启用、禁止推送 + # "enable_push_whitelist": true, // 是否启动推送白名单 + # "enable_status_check": true, //是否启用状态检查 + # "merge_whitelist_teams": [ + # "string" + # ], // 合并请求团队白名单 + # "merge_whitelist_usernames": [ + # "string" + # ], // 合并请求用户白名单 + # "protected_file_patterns": "string", //保护文件模式 + # "push_whitelist_deploy_keys": true, // 具有推送权限的部署密钥白名单 + # "push_whitelist_teams": [ + # "string" + # ], //推送团队白名单 + # "push_whitelist_usernames": [ + # "string" + # ], //推送用户白名单 + # "require_signed_commits": true, //是否需要签名提交 + # "required_approvals": 0, // 所需批准数 + # "status_check_contexts": [ + # "string" + # ] // 状态检查规则 + # } + + + # branch_name :string(255) default("") + # can_push :boolean default("0"), not null + # enable_whitelist :boolean default("0") + # whitelist_user_i_ds :text(65535) + # whitelist_team_i_ds :text(65535) + # enable_merge_whitelist :boolean default("0"), not null + # whitelist_deploy_keys :boolean default("0"), not null + # merge_whitelist_user_i_ds :text(65535) + # merge_whitelist_team_i_ds :text(65535) + # enable_status_check :boolean default("0"), not null + # status_check_contexts :text(65535) + # approvals_whitelist_user_i_ds :text(65535) + # approvals_whitelist_team_i_ds :text(65535) + # required_approvals :integer default("0") + # enable_approvals_whitelist :boolean default("0"), not null + # block_on_rejected_reviews :boolean default("0"), not null + # dismiss_stale_approvals :boolean default("0"), not null + # require_signed_commits :boolean default("0"), not null + # protected_file_patterns :text(65535) + # block_on_outdated_branch :boolean default("0"), not null + def protected_branch_params + { + branch_name: params[:branch_name], + can_push: can_push_params, + enable_whitelist: enable_whitelist_params, + whitelist_user_i_ds: whitelist_user_i_ds_params, + # whitelist_team_i_ds: whitelist_team_i_ds_params, + enable_merge_whitelist: enable_merge_whitelist_params, + merge_whitelist_user_i_ds: merge_whitelist_user_i_ds_params, + # merge_whitelist_team_i_ds: merge_whitelist_team_i_ds_params, + enable_status_check: enable_status_check_params, + required_approvals: params[:required_approvals] || 0, + enable_approvals_whitelist: enable_approvals_whitelist_params, + approvals_whitelist_user_i_ds: approvals_whitelist_user_i_ds_params, + # approvals_whitelist_team_i_ds: approvals_whitelist_team_i_ds_params, + block_on_rejected_reviews: block_on_rejected_reviews_params, + dismiss_stale_approvals: dismiss_stale_approvals_params, + require_signed_commits: require_signed_commits_params, + block_on_outdated_branch: block_on_outdated_branch_params + } + end + + def enable_status_check_params + str_to_boolean(params[:enable_status_check] || false) + end + + def enable_approvals_whitelist_params + str_to_boolean(params[:enable_approvals_whitelist] || false) + end + def block_on_rejected_reviews_params + str_to_boolean(params[:block_on_rejected_reviews] || false) + end + + def dismiss_stale_approvals_params + str_to_boolean(params[:dismiss_stale_approvals] || false) + end + + def require_signed_commits_params + str_to_boolean(params[:require_signed_commits] || false) + end + + def block_on_outdated_branch_params + str_to_boolean(params[:block_on_outdated_branch] || false) + end + + def can_push_params + return false if !can_push? + return true if enable_whitelist? + str_to_boolean(params[:enable_push]) + end + + def enable_whitelist_params + return false if !can_push? + str_to_boolean(params[:enable_push_whitelist]) + end + + def whitelist_user_i_ds_params + return [] if !can_push? + user_ids(get_push_whitelist_usernames) + end + + def whitelist_team_i_ds_params + # params[:push_whitelist_usernames] + end + + def enable_merge_whitelist_params + str_to_boolean(params[:enable_merge_whitelist] || false) + end + + def merge_whitelist_user_i_ds_params + return [] if !enable_merge_whitelist? + user_ids(get_merge_whitelist_usernames) + end + + def merge_whitelist_team_i_ds_params + params[:merge_whitelist_teams] + end + + def approvals_whitelist_user_i_ds_params + return [] if !enable_approvals_whitelist? + user_ids(get_approvals_whitelist_usernames) + end + + def approvals_whitelist_team_i_ds_params + params[:approvals_whitelist_teams] + end + + def user_ids(names) + member_ids & names_by_params(names) + end + + def member_ids + @repository.project.writable_members.map(&:user_id) + end + + def names_by_params(names) + User.where(login: names.to_a).ids + end + + def get_push_whitelist_usernames + return [] if !can_push? || !enable_whitelist? + filter_empty_element Array(params[:push_whitelist_usernames]) + end + + def get_merge_whitelist_usernames + return [] if !enable_merge_whitelist? + filter_empty_element Array(params[:merge_whitelist_usernames]) + end + + def get_approvals_whitelist_usernames + return [] if !enable_approvals_whitelist? + filter_empty_element Array(params[:approvals_whitelist_usernames]) + end + + def check_users!(names) + names.each {|name| + check_user!(name) + break + } + end + + def check_user!(name) + user_exist = User.exists?(login: name) + raise Error, "user '#{name}' does not exist" if !user_exist + end + + def can_push? + str_to_boolean(params[:enable_push]) === true + end + + def enable_whitelist? + str_to_boolean(params[:enable_push_whitelist]) === true + end + + def enable_merge_whitelist? + str_to_boolean(params[:enable_merge_whitelist]) === true + end + + def enable_approvals_whitelist? + str_to_boolean(params[:enable_approvals_whitelist]) === true + end + + def filter_empty_element(array) + array.reject { |e| e.to_s.empty? } + end + + def gitea_protected_branch_saved?(protected_branch) + protected_branch[:status] === success + end + + def gitea_protected_branch_params + { + approvals_whitelist_username: get_approvals_whitelist_usernames, + branch_name: params[:branch_name], + enable_approvals_whitelist: enable_approvals_whitelist_params, + enable_merge_whitelist: enable_merge_whitelist_params, + enable_push: can_push_params, + enable_push_whitelist: enable_whitelist_params, + enable_status_check: enable_status_check_params, + # merge_whitelist_teams: [], + merge_whitelist_usernames: get_merge_whitelist_usernames, + # protected_file_patterns: string, + # push_whitelist_deploy_keys: true, + # push_whitelist_teams: [], + push_whitelist_usernames: get_push_whitelist_usernames, + block_on_rejected_reviews: block_on_rejected_reviews_params, + dismiss_stale_approvals: dismiss_stale_approvals_params, + require_signed_commits: require_signed_commits_params, + block_on_outdated_branch: block_on_outdated_branch_params + + } + end + + def validate! + protected_branch_exists = repository.protected_branches.exists?(params[:branch_name]) + raise Error, "Protected branch '#{branch_name}' already exists" if protected_branch_exists + + check_users!(get_push_whitelist_usernames) if get_push_whitelist_usernames.any? + check_users!(get_merge_whitelist_usernames) if get_merge_whitelist_usernames.any? + check_users!(get_approvals_whitelist_usernames) if get_approvals_whitelist_usernames.any? + + raise Error, '分支名称不能为空' if params[:branch_name].blank? + + end +end diff --git a/app/services/protected_branches/base_service.rb b/app/services/protected_branches/base_service.rb index bfa3a432a..f56a4e33c 100644 --- a/app/services/protected_branches/base_service.rb +++ b/app/services/protected_branches/base_service.rb @@ -1,5 +1,7 @@ module ProtectedBranches class BaseService < ApplicationService + include ProtectedBranchParamsAble + Error = Class.new(StandardError) attr_accessor :repository, :owner, :params @@ -8,261 +10,6 @@ module ProtectedBranches end # delegate :repository, to: :project - - def protected_branch_params - # { - # "approvals_whitelist_teams": [ - # "string" - # ], //批准团队(或审查团队)白名单 - # "approvals_whitelist_username": [ - # "string" - # ], // 批准用户(或审查者)白名单 - # "block_on_outdated_branch": true, // 如果拉取过时,阻止合并 - # "block_on_rejected_reviews": true, // 拒绝审核,阻止合并请求 - # "branch_name": "string", //分支名称 - # "dismiss_stale_approvals": true, // 取消过时的批准 - # "enable_approvals_whitelist": true, //是否批准仅限列入白名单的用户或者团队, 主要用户pr的审核批准计数功能 - # "enable_merge_whitelist": true, // 是否启用合并请求白名单 - # "enable_push": true, //启用、禁止推送 - # "enable_push_whitelist": true, // 是否启动推送白名单 - # "enable_status_check": true, //是否启用状态检查 - # "merge_whitelist_teams": [ - # "string" - # ], // 合并请求团队白名单 - # "merge_whitelist_usernames": [ - # "string" - # ], // 合并请求用户白名单 - # "protected_file_patterns": "string", //保护文件模式 - # "push_whitelist_deploy_keys": true, // 具有推送权限的部署密钥白名单 - # "push_whitelist_teams": [ - # "string" - # ], //推送团队白名单 - # "push_whitelist_usernames": [ - # "string" - # ], //推送用户白名单 - # "require_signed_commits": true, //是否需要签名提交 - # "required_approvals": 0, // 所需批准数 - # "status_check_contexts": [ - # "string" - # ] // 状态检查规则 - # } - - - # branch_name :string(255) default("") - # can_push :boolean default("0"), not null - # enable_whitelist :boolean default("0") - # whitelist_user_i_ds :text(65535) - # whitelist_team_i_ds :text(65535) - # enable_merge_whitelist :boolean default("0"), not null - # whitelist_deploy_keys :boolean default("0"), not null - # merge_whitelist_user_i_ds :text(65535) - # merge_whitelist_team_i_ds :text(65535) - # enable_status_check :boolean default("0"), not null - # status_check_contexts :text(65535) - # approvals_whitelist_user_i_ds :text(65535) - # approvals_whitelist_team_i_ds :text(65535) - # required_approvals :integer default("0") - # enable_approvals_whitelist :boolean default("0"), not null - # block_on_rejected_reviews :boolean default("0"), not null - # dismiss_stale_approvals :boolean default("0"), not null - # require_signed_commits :boolean default("0"), not null - # protected_file_patterns :text(65535) - # block_on_outdated_branch :boolean default("0"), not null - - { - branch_name: params[:branch_name], - can_push: can_push_params, - enable_whitelist: enable_whitelist_params, - whitelist_user_i_ds: whitelist_user_i_ds_params, - # whitelist_team_i_ds: whitelist_team_i_ds_params, - enable_merge_whitelist: enable_merge_whitelist_params, - merge_whitelist_user_i_ds: merge_whitelist_user_i_ds_params, - # merge_whitelist_team_i_ds: merge_whitelist_team_i_ds_params, - enable_status_check: enable_status_check_params, - required_approvals: params[:required_approvals] || 0, - enable_approvals_whitelist: enable_approvals_whitelist_params, - approvals_whitelist_user_i_ds: approvals_whitelist_user_i_ds_params, - # approvals_whitelist_team_i_ds: approvals_whitelist_team_i_ds_params, - block_on_rejected_reviews: block_on_rejected_reviews_params, - dismiss_stale_approvals: dismiss_stale_approvals_params, - require_signed_commits: require_signed_commits_params, - block_on_outdated_branch: block_on_outdated_branch_params - } - end - - def enable_status_check_params - str_to_boolean(params[:enable_status_check] || false) - end - - def enable_approvals_whitelist_params - str_to_boolean(params[:enable_approvals_whitelist] || false) - end - def block_on_rejected_reviews_params - str_to_boolean(params[:block_on_rejected_reviews] || false) - end - - def dismiss_stale_approvals_params - str_to_boolean(params[:dismiss_stale_approvals] || false) - end - - def require_signed_commits_params - str_to_boolean(params[:require_signed_commits] || false) - end - - def block_on_outdated_branch_params - str_to_boolean(params[:block_on_outdated_branch] || false) - end - - def can_push_params - return false if !can_push? - return true if enable_whitelist? - str_to_boolean(params[:enable_push]) - end - - def enable_whitelist_params - return false if !can_push? - str_to_boolean(params[:enable_push_whitelist]) - end - - def whitelist_user_i_ds_params - return [] if !can_push? - user_ids(get_push_whitelist_usernames) - end - - def whitelist_team_i_ds_params - # params[:push_whitelist_usernames] - end - - def enable_merge_whitelist_params - str_to_boolean(params[:enable_merge_whitelist] || false) - end - - def merge_whitelist_user_i_ds_params - returtn [] if !enable_merge_whitelist? - user_ids(get_merge_whitelist_usernames) - end - - def merge_whitelist_team_i_ds_params - params[:merge_whitelist_teams] - end - - def approvals_whitelist_user_i_ds_params - return [] if !enable_approvals_whitelist? - user_ids(get_approvals_whitelist_usernames) - end - - def approvals_whitelist_team_i_ds_params - params[:approvals_whitelist_teams] - end - - def user_ids(names) - member_ids & names_by_params(names) - end - - def member_ids - @repository.project.writable_members.map(&:user_id) - end - - def names_by_params(names) - User.where(login: names.to_a).ids - end - - def get_push_whitelist_usernames - return [] if !can_push? || !enable_whitelist? - filter_empty_element Array(params[:push_whitelist_usernames]) - end - - def get_merge_whitelist_usernames - return [] if !enable_merge_whitelist? - filter_empty_element Array(params[:merge_whitelist_usernames]) - end - - def get_approvals_whitelist_usernames - return [] if !enable_approvals_whitelist? - filter_empty_element Array(params[:approvals_whitelist_usernames]) - end - - def check_users!(names) - names.each {|name| - check_user!(name) - break - } - end - - def check_user!(name) - user_exist = User.exists?(login: name) - raise Error, "user '#{name}' does not exist" if !user_exist - end - - def can_push? - str_to_boolean(params[:enable_push]) === true - end - - def enable_whitelist? - str_to_boolean(params[:enable_push_whitelist]) === true - end - - def enable_merge_whitelist? - str_to_boolean(params[:enable_merge_whitelist]) === true - end - - def enable_approvals_whitelist? - str_to_boolean(params[:enable_approvals_whitelist]) === true - end - - def filter_empty_element(array) - array.reject { |e| e.to_s.empty? } - end - - def save_gitea_protected_branch! - @gitea_protected_branch ||= Gitea::Repository::ProtectedBranches::CreateService.call(@owner.login, - @repository.identifier,gitea_protected_branch_params, @owner.gitea_token) - - raise Error, @gitea_protected_branch[:message] if @gitea_protected_branch[:status] != :success - end - - def gitea_protected_branch_saved? - @gitea_protected_branch[:status] === success - end - - def gitea_protected_branch - @gitea_protected_branch[:body] - end - - def gitea_protected_branch_params - { - approvals_whitelist_username: get_approvals_whitelist_usernames, - branch_name: params[:branch_name], - enable_approvals_whitelist: enable_approvals_whitelist_params, - enable_merge_whitelist: enable_merge_whitelist_params, - enable_push: can_push_params, - enable_push_whitelist: enable_whitelist_params, - enable_status_check: enable_status_check_params, - # merge_whitelist_teams: [], - merge_whitelist_usernames: get_merge_whitelist_usernames, - # protected_file_patterns: string, - # push_whitelist_deploy_keys: true, - # push_whitelist_teams: [], - push_whitelist_usernames: get_push_whitelist_usernames, - block_on_rejected_reviews: block_on_rejected_reviews_params, - dismiss_stale_approvals: dismiss_stale_approvals_params, - require_signed_commits: require_signed_commits_params, - block_on_outdated_branch: block_on_outdated_branch_params - - } - end - - def validate! - protected_branch_exists = repository.protected_branches.exists?(params[:branch_name]) - raise Error, "Protected branch '#{branch_name}' already exists" if protected_branch_exists - - check_users!(get_push_whitelist_usernames) if get_push_whitelist_usernames.any? - check_users!(get_merge_whitelist_usernames) if get_merge_whitelist_usernames.any? - check_users!(get_approvals_whitelist_usernames) if get_approvals_whitelist_usernames.any? - - raise Error, '分支名称不能为空' if params[:branch_name].blank? - - end end def error(errors, award: nil, status: nil) diff --git a/app/services/protected_branches/create_service.rb b/app/services/protected_branches/create_service.rb index 02112a188..3b3eca9a9 100644 --- a/app/services/protected_branches/create_service.rb +++ b/app/services/protected_branches/create_service.rb @@ -19,5 +19,13 @@ module ProtectedBranches def save_protected_branch! protected_branch.save end + + def save_gitea_protected_branch! + @gitea_protected_branch ||= Gitea::Repository::ProtectedBranches::CreateService.call(@owner.login, + @repository.identifier, gitea_protected_branch_params, @owner.gitea_token) + + raise Error, @gitea_protected_branch[:message] unless gitea_protected_branch_saved?(@gitea_protected_branch) + end + end end From a4a315ea327378552d50e0adfbe154f0610405a7 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 7 Dec 2020 10:29:18 +0800 Subject: [PATCH 376/384] FIX bug --- app/services/concerns/protected_branch_params_able.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/concerns/protected_branch_params_able.rb b/app/services/concerns/protected_branch_params_able.rb index aeb62e646..3ab0de0bb 100644 --- a/app/services/concerns/protected_branch_params_able.rb +++ b/app/services/concerns/protected_branch_params_able.rb @@ -208,7 +208,7 @@ module ProtectedBranchParamsAble end def gitea_protected_branch_saved?(protected_branch) - protected_branch[:status] === success + protected_branch[:status] == :success end def gitea_protected_branch_params From 61c8e41136552550a4eb777f8fb41221c67dd3a7 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 7 Dec 2020 16:04:13 +0800 Subject: [PATCH 377/384] FIX log writing failed. xE6 from ASCII-8BIT to UTF-8 --- app/services/gitea/client_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index bb75fde62..728a98098 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -194,7 +194,7 @@ class Gitea::ClientService < ApplicationService def log_error(status, body) puts "[gitea] status: #{status}" - puts "[gitea] body: #{body}" + puts "[gitea] body: #{body&.force_encoding('UTF-8')}" end def fix_body(body) From 5a25ffe1017f523c2abdb43f0aa432e31e108d76 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 8 Dec 2020 16:48:28 +0800 Subject: [PATCH 378/384] FIX get repository protected branches bug --- app/controllers/protected_branches_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/protected_branches_controller.rb b/app/controllers/protected_branches_controller.rb index 364433d78..123004a4d 100644 --- a/app/controllers/protected_branches_controller.rb +++ b/app/controllers/protected_branches_controller.rb @@ -6,7 +6,7 @@ class ProtectedBranchesController < ApplicationController before_action :authorizate_user_can_edit_project! def index - scope = ProtectedBranch.all + scope = @repository.protected_branches @total_count = scope.size @protected_branches = paginate(scope) end From 6cbaf410b20f5a63209db2e07677eda68911b4a5 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 10 Dec 2020 18:05:33 +0800 Subject: [PATCH 379/384] FIX Grammatical errors --- app/controllers/concerns/ci/db_connectable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index a4de9c4ba..2aaff87bf 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -1,7 +1,7 @@ module Ci::DbConnectable extend ActiveSupport::Concern - include do + included do end # Dynamically sets the database connection. From ffb71512fcaa8584a1db2f50ed6b9f71bc07815e Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Dec 2020 15:46:06 +0800 Subject: [PATCH 380/384] FIX code review for create pull request --- app/controllers/praise_tread_controller.rb | 3 - app/controllers/pull_requests_controller.rb | 66 ++------ app/controllers/repositories_controller.rb | 4 +- .../list_service.rb} | 4 +- .../gitea/pull_request/create_service.rb | 23 ++- app/services/pull_requests/create_service.rb | 146 ++++++++++++++++++ 6 files changed, 175 insertions(+), 71 deletions(-) rename app/services/{pull_requests/branches_service.rb => branches/list_service.rb} (93%) create mode 100644 app/services/pull_requests/create_service.rb diff --git a/app/controllers/praise_tread_controller.rb b/app/controllers/praise_tread_controller.rb index 47ea64225..983697e08 100644 --- a/app/controllers/praise_tread_controller.rb +++ b/app/controllers/praise_tread_controller.rb @@ -40,8 +40,5 @@ class PraiseTreadController < ApplicationController end private - def render_result - - end end diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 45b52c7b1..1699cf608 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -23,7 +23,7 @@ class PullRequestsController < ApplicationController end def new - @all_branches = PullRequests::BranchesService.new(@owner, @project).call + @all_branches = Branches::ListService.call(@owner, @project) @is_fork = @project.forked_from_project_id.present? @projects_names = [{ project_user_login: @owner.try(:login), @@ -44,66 +44,20 @@ class PullRequestsController < ApplicationController end def get_branches - branch_result = PullRequests::BranchesService.new(@owner, @project).call + branch_result = Branches::ListService.call(@owner, @project) render json: branch_result # return json: branch_result end def create - if params[:title].nil? - normal_status(-1, "名称不能为空") - elsif params[:issue_tag_ids].nil? - normal_status(-1, "标签不能为空") - else - ActiveRecord::Base.transaction do - begin - merge_params - pull_issue = Issue.new(@issue_params) - if pull_issue.save! - pr_params = { - user_id: current_user.try(:id), - project_id: @project.id, - issue_id: pull_issue.id, - fork_project_id: params[:fork_project_id], - is_original: params[:is_original], - files_count: params[:files_count] || 0, - commits_count: params[:commits_count] || 0 - } - local_requests = PullRequest.new(@local_params.merge(pr_params)) - if local_requests.save - remote_pr_params = @local_params - remote_pr_params = remote_pr_params.merge(head: "#{params[:merge_user_login]}:#{params[:head]}").compact if local_requests.is_original && params[:merge_user_login] - gitea_request = Gitea::PullRequest::CreateService.call(current_user.try(:gitea_token), @project.owner, @repository.try(:identifier), remote_pr_params.except(:milestone)) - if gitea_request && local_requests.update_attributes(gpid: gitea_request["number"]) - if params[:issue_tag_ids].present? - params[:issue_tag_ids].each do |tag| - IssueTagsRelate.create!(issue_id: pull_issue.id, issue_tag_id: tag) - end - end - - if params[:assigned_to_id].present? - Tiding.create!(user_id: params[:assigned_to_id], trigger_user_id: current_user.id, - container_id: local_requests.id, container_type: 'PullRequest', - parent_container_id: @project.id, parent_container_type: "Project", - tiding_type: 'pull_request', status: 0) - end - local_requests.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") - if params[:title].to_s.include?("WIP:") - pull_issue.custom_journal_detail("WIP", "", "这个合并请求被标记为尚未完成的工作。完成后请从标题中移除WIP:前缀。", current_user&.id) - end - # render :json => { status: 0, message: "PullRequest创建成功", id: pull_issue.id} - normal_status(0, "PullRequest创建成功") - else - normal_status(-1, "PullRequest创建失败") - end - else - normal_status(-1, "PullRequest创建失败") - end - end - rescue => e - normal_status(-1, e.message) - raise ActiveRecord::Rollback - end + ActiveRecord::Base.transaction do + @pull_request, @gitea_pull_request = PullRequests::CreateService.call(current_user, @owner, @project, params) + if @gitea_pull_request[:status] == :success + @pull_request.bind_gitea_pull_request!(@gitea_pull_request[:body]["number"]) + render_ok + else + render_error("create pull request error: #{@gitea_pull_request[:status]}") + raise ActiveRecord::Rollback end end end diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 781ac2033..b4d142282 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -243,8 +243,8 @@ class RepositoriesController < ApplicationController if @pull_issue.save! local_requests = PullRequest.new(local_params.merge(user_id: current_user.try(:id), project_id: @project.id, issue_id: @pull_issue.id)) if local_requests.save - gitea_request = Gitea::PullRequest::CreateService.new(current_user.try(:gitea_token), @project.owner, @project.try(:identifier), requests_params).call - if gitea_request && local_requests.update_attributes(gpid: gitea_request["number"]) + gitea_request = Gitea::PullRequest::CreateService.new(current_user.try(:gitea_token), @owner.login, @project.try(:identifier), requests_params).call + if gitea_request[:status] == :success && local_requests.update_attributes(gpid: gitea_request["body"]["number"]) local_requests.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") end end diff --git a/app/services/pull_requests/branches_service.rb b/app/services/branches/list_service.rb similarity index 93% rename from app/services/pull_requests/branches_service.rb rename to app/services/branches/list_service.rb index 117f17729..a3b77a7b0 100644 --- a/app/services/pull_requests/branches_service.rb +++ b/app/services/branches/list_service.rb @@ -1,4 +1,4 @@ -class PullRequests::BranchesService < ApplicationService +class Branches::ListService < ApplicationService attr_reader :user, :project @@ -31,4 +31,4 @@ class PullRequests::BranchesService < ApplicationService return branches_array end -end \ No newline at end of file +end diff --git a/app/services/gitea/pull_request/create_service.rb b/app/services/gitea/pull_request/create_service.rb index 3cf8dde0a..a911feaea 100644 --- a/app/services/gitea/pull_request/create_service.rb +++ b/app/services/gitea/pull_request/create_service.rb @@ -1,9 +1,9 @@ class Gitea::PullRequest::CreateService < Gitea::ClientService - attr_reader :token, :user, :repo, :params + attr_reader :token, :owner, :repo, :params # 同一个项目下发送pr例子,如下: # 参数说明: - # user: 项目拥有者 + # owner: 项目拥有者 # repo: 项目名称 # params: # { @@ -17,7 +17,7 @@ class Gitea::PullRequest::CreateService < Gitea::ClientService # fork的项目,向源项目发送pr例子,如下: # 参数说明: - # user:源项目拥有者 + # owner:源项目拥有者 # repo:源项目仓库名称 # params: # { @@ -28,24 +28,31 @@ class Gitea::PullRequest::CreateService < Gitea::ClientService # } # 以上例子说明:jasder用户fork的项目master分支向源项目的develop分支发送pr # Gitea::PullRequest::CreateService.call('token', '源项目拥有者', '源项目名称', params) - def initialize(token, user, repo, params={}) - @token = token - @user = user + def initialize(token, owner, repo, params={}) + @token = token + @owner = owner @repo = repo @params = params end def call - post(url, request_params) + response = post(url, request_params) + json_format(response) end private def url - "/repos/#{@user.login}/#{@repo}/pulls".freeze + "/repos/#{@owner}/#{@repo}/pulls".freeze end def request_params Hash.new.merge(token: token, data: @params) end + + def json_format(response) + status, message, body = render_response(response) + + status === 201 ? success(body) : error(message, status) + end end diff --git a/app/services/pull_requests/create_service.rb b/app/services/pull_requests/create_service.rb new file mode 100644 index 000000000..0d41c3402 --- /dev/null +++ b/app/services/pull_requests/create_service.rb @@ -0,0 +1,146 @@ +class PullRequests::CreateService < ApplicationService + + attr_reader :current_user, :owner, :project, :params + + def initialize(current_user, owner, project, params) + @owner = owner + @project = project + @params = params + @current_user = current_user + end + + def call + validate! + save_pull_issue! + save_pull_request! + save_issue_tags_relates! + save_tiding! + save_project_trend! + save_custom_journal_detail! + + [pull_request, gitea_pull_request] + end + + def pull_issue_params + { + user: @current_user, + project: @project, + subject: @params[:title], + description: @params[:body], + assigned_to_id: @params[:assigned_to_id], + fixed_version_id: @params[:fixed_version_id], + issue_tags_value: @params[:issue_tag_ids].present? ? @params[:issue_tag_ids].join(",") : "", + priority_id: @params[:priority_id] || "2", + issue_classify: "pull_request", + issue_type: @params[:issue_type] || "1", + tracker_id: 2, + status_id: 1, + } + end + + def pull_issue + @pull_issue ||= Issue.new(pull_issue_params.compact) + end + + def save_pull_issue! + pull_issue.save + end + + def pull_request + @pull_request ||= @project.pull_requests.new(pull_request_params.compact) + end + + def save_pull_request! + pull_request.save + end + + def save_issue_tags_relates! + issue_tag_ids.each do |tag| + IssueTagsRelate.create!(issue_id: pull_issue.id, issue_tag_id: tag) + end + end + + def issue_tag_ids + Array(@params[:issue_tag_ids]) + end + + def save_tiding! + if @params[:assigned_to_id].present? + Tiding.create!(user_id: @params[:assigned_to_id], + trigger_user: @current_user, + container: pull_request, + parent_container: @project, + tiding_type: 'pull_request', + status: 0) + end + end + + def save_project_trend! + project_trend.save + end + + def project_trend + @project_trend ||= pull_request.project_trends.new( + user: @current_user, + project: @project, + action_type: "create") + end + + def pull_request_params + base_pull_params.merge({ + user: @current_user, + issue: pull_issue, + fork_project_id: @params[:fork_project_id], + is_original: @params[:is_original], + files_count: @params[:files_count] || 0, + commits_count: @params[:commits_count] || 0 + }) + end + + def save_custom_journal_detail! + if @params[:title].to_s.include?("WIP:") + pull_issue.custom_journal_detail("WIP", "", "这个合并请求被标记为尚未完成的工作。完成后请从标题中移除WIP:前缀。", @current_user&.id) + end + end + + def gitea_pull_request + @gitea_pull_request ||= create_gitea_pull_request! + end + + def create_gitea_pull_request! + @gitea_pull_request = + Gitea::PullRequest::CreateService.call( + @current_user&.gitea_token, + @owner.login, + @project&.identifier, + gitea_pull_request_params.compact) + end + + def gitea_pull_request_params + merge_original_pull_params.except(:milestone) + end + + def merge_original_pull_params + if pull_request.is_original && @params[:merge_user_login] + base_pull_params.merge(head: "#{@params[:merge_user_login]}:#{@params[:head]}") + else + base_pull_params + end + end + + def base_pull_params + { + title: @params[:title], #标题 + body: @params[:body], #内容 + head: @params[:head], #源分支 + base: @params[:base], #目标分支 + milestone: 0, #里程碑,未与本地的里程碑关联 + } + end + + def validate! + raise "title参数不能为空" if @params[:title].blank? + raise "head参数不能为空" if @params[:head].blank? + raise "base参数不能为空" if @params[:base].blank? + end +end From 01f79c81cc3a507c4e0bbf48aaeac295f6e29251 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Dec 2020 15:47:08 +0800 Subject: [PATCH 381/384] FIX code review for create pull request --- app/models/pull_request.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/models/pull_request.rb b/app/models/pull_request.rb index 8a5e19272..046e9a0a4 100644 --- a/app/models/pull_request.rb +++ b/app/models/pull_request.rb @@ -38,6 +38,10 @@ class PullRequest < ApplicationRecord Project.find_by(id: self.fork_project_id) end + def bind_gitea_pull_request!(gitea_pull_number) + update_column(:gpid, gitea_pull_number) + end + # TODO: sync educoder platform repo's for update some statistics count def self.update_some_count PullRequest.includes(:user, :project).select(:id, :user_id, :gpid, :project_id, :fork_project_id).each do |pr| From 32a52a5c7ab7701aefc3f21dcb00a2ec56b87692 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 23 Dec 2020 15:48:07 +0800 Subject: [PATCH 382/384] Update model schemas --- app/models/attachment.rb | 48 +++++++++-------- app/models/ci/user.rb | 92 +++++++++++++++----------------- app/models/laboratory.rb | 5 -- app/models/laboratory_setting.rb | 4 -- app/models/praise_tread.rb | 6 ++- app/models/user.rb | 92 +++++++++++++++----------------- 6 files changed, 120 insertions(+), 127 deletions(-) diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 9368d2d72..461c835fe 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -2,33 +2,39 @@ # # Table name: attachments # -# id :integer not null, primary key -# container_id :integer -# container_type :string(30) -# filename :string(255) default(""), not null -# disk_filename :string(255) default(""), not null -# filesize :integer default("0"), not null -# content_type :string(255) default("") -# digest :string(40) default(""), not null -# downloads :integer default("0"), not null -# author_id :integer default("0"), not null -# created_on :datetime -# description :text(65535) -# disk_directory :string(255) -# attachtype :integer default("1") -# is_public :integer default("1") -# copy_from :integer -# quotes :integer -# is_publish :integer default("1") -# publish_time :datetime -# memo_image :boolean default("0") -# extra_type :integer default("0") +# id :integer not null, primary key +# container_id :integer +# container_type :string(30) +# filename :string(255) default(""), not null +# disk_filename :string(255) default(""), not null +# filesize :integer default("0"), not null +# content_type :string(255) default("") +# digest :string(60) default(""), not null +# downloads :integer default("0"), not null +# author_id :integer default("0"), not null +# created_on :datetime +# description :text(65535) +# disk_directory :string(255) +# attachtype :integer default("1") +# is_public :integer default("1") +# copy_from :integer +# quotes :integer default("0") +# is_publish :integer default("1") +# publish_time :datetime +# resource_bank_id :integer +# unified_setting :boolean default("1") +# cloud_url :string(255) default("") +# course_second_category_id :integer default("0") +# delay_publish :boolean default("0") # # Indexes # # index_attachments_on_author_id (author_id) # index_attachments_on_container_id_and_container_type (container_id,container_type) +# index_attachments_on_course_second_category_id (course_second_category_id) # index_attachments_on_created_on (created_on) +# index_attachments_on_is_public (is_public) +# index_attachments_on_quotes (quotes) # class Attachment < ApplicationRecord diff --git a/app/models/ci/user.rb b/app/models/ci/user.rb index fd17adce7..cd6246753 100644 --- a/app/models/ci/user.rb +++ b/app/models/ci/user.rb @@ -2,54 +2,50 @@ # # Table name: users # -# id :integer not null -# login :string(255) default(""), not null -# hashed_password :string(40) default(""), not null -# firstname :string(30) default(""), not null -# lastname :string(255) default(""), not null -# mail :string(60) -# admin :boolean default("0"), not null -# status :integer default("1"), not null -# last_login_on :datetime -# language :string(5) default("") -# auth_source_id :integer -# created_on :datetime -# updated_on :datetime -# type :string(255) -# identity_url :string(255) -# mail_notification :string(255) default(""), not null -# salt :string(64) -# gid :integer -# visits :integer default("0") -# excellent_teacher :integer default("0") -# excellent_student :integer default("0") -# phone :string(255) -# authentication :boolean default("0") -# grade :integer default("0") -# experience :integer default("0") -# nickname :string(255) -# show_realname :boolean default("1") -# professional_certification :boolean default("0") -# ID_number :string(255) -# certification :integer default("0") -# homepage_teacher :boolean default("0") -# homepage_engineer :boolean default("0") -# is_test :integer default("0") -# ecoder_user_id :integer default("0") -# business :boolean default("0") -# profile_completed :boolean default("0") -# laboratory_id :integer -# platform :string(255) default("0") -# gitea_token :string(255) -# gitea_uid :integer -# is_shixun_marker :boolean default("0") -# is_sync_pwd :boolean default("1") -# watchers_count :integer default("0") -# visibility :string(255) default("public") -# repo_admin_change_team_access :boolean default("1") -# is_org :boolean default("0") -# website :string(255) -# devops_step :integer default("0") +# id :integer not null +# login :string(255) default(""), not null +# hashed_password :string(40) default(""), not null +# firstname :string(30) default(""), not null +# lastname :string(255) default(""), not null +# mail :string(60) +# admin :boolean default("0"), not null +# status :integer default("1"), not null +# last_login_on :datetime +# language :string(5) default("") +# auth_source_id :integer +# created_on :datetime +# updated_on :datetime +# type :string(255) +# identity_url :string(255) +# mail_notification :string(255) default(""), not null +# salt :string(64) +# gid :integer +# visits :integer default("0") +# excellent_teacher :integer default("0") +# excellent_student :integer default("0") +# phone :string(255) +# authentication :boolean default("0") +# grade :integer default("0") +# experience :integer default("0") +# nickname :string(255) +# show_realname :boolean default("1") +# professional_certification :boolean default("0") +# ID_number :string(255) +# certification :integer default("0") +# homepage_teacher :boolean default("0") +# homepage_engineer :boolean default("0") +# is_test :integer default("0") +# ecoder_user_id :integer default("0") +# business :boolean default("0") +# profile_completed :boolean default("0") +# laboratory_id :integer +# platform :string(255) default("0") +# gitea_token :string(255) +# gitea_uid :integer +# is_shixun_marker :boolean default("0") +# is_sync_pwd :boolean default("1") +# watchers_count :integer default("0") +# devops_step :integer default("0") # # Indexes # diff --git a/app/models/laboratory.rb b/app/models/laboratory.rb index 699800c92..73002a841 100644 --- a/app/models/laboratory.rb +++ b/app/models/laboratory.rb @@ -11,11 +11,6 @@ # sync_subject :boolean default("0") # sync_shixun :boolean default("0") # -# Indexes -# -# index_laboratories_on_identifier (identifier) UNIQUE -# index_laboratories_on_school_id (school_id) -# class Laboratory < ApplicationRecord belongs_to :school, optional: true diff --git a/app/models/laboratory_setting.rb b/app/models/laboratory_setting.rb index 61c677def..5013dd547 100644 --- a/app/models/laboratory_setting.rb +++ b/app/models/laboratory_setting.rb @@ -6,10 +6,6 @@ # laboratory_id :integer # config :text(65535) # -# Indexes -# -# index_laboratory_settings_on_laboratory_id (laboratory_id) -# class LaboratorySetting < ApplicationRecord belongs_to :laboratory diff --git a/app/models/praise_tread.rb b/app/models/praise_tread.rb index 123bbbdc0..d13c17ddd 100644 --- a/app/models/praise_tread.rb +++ b/app/models/praise_tread.rb @@ -6,10 +6,14 @@ # user_id :integer not null # praise_tread_object_id :integer # praise_tread_object_type :string(255) -# praise_or_tread :integer +# praise_or_tread :integer default("1") # created_at :datetime not null # updated_at :datetime not null # +# Indexes +# +# praise_tread (praise_tread_object_id,praise_tread_object_type) +# class PraiseTread < ApplicationRecord belongs_to :user diff --git a/app/models/user.rb b/app/models/user.rb index f8f672fe5..5ea57880d 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,54 +2,50 @@ # # Table name: users # -# id :integer not null, primary key -# login :string(255) default(""), not null -# hashed_password :string(40) default(""), not null -# firstname :string(30) default(""), not null -# lastname :string(255) default(""), not null -# mail :string(60) -# admin :boolean default("0"), not null -# status :integer default("1"), not null -# last_login_on :datetime -# language :string(5) default("") -# auth_source_id :integer -# created_on :datetime -# updated_on :datetime -# type :string(255) -# identity_url :string(255) -# mail_notification :string(255) default(""), not null -# salt :string(64) -# gid :integer -# visits :integer default("0") -# excellent_teacher :integer default("0") -# excellent_student :integer default("0") -# phone :string(255) -# authentication :boolean default("0") -# grade :integer default("0") -# experience :integer default("0") -# nickname :string(255) -# show_realname :boolean default("1") -# professional_certification :boolean default("0") -# ID_number :string(255) -# certification :integer default("0") -# homepage_teacher :boolean default("0") -# homepage_engineer :boolean default("0") -# is_test :integer default("0") -# ecoder_user_id :integer default("0") -# business :boolean default("0") -# profile_completed :boolean default("0") -# laboratory_id :integer -# platform :string(255) default("0") -# gitea_token :string(255) -# gitea_uid :integer -# is_shixun_marker :boolean default("0") -# is_sync_pwd :boolean default("1") -# watchers_count :integer default("0") -# visibility :string(255) default("public") -# repo_admin_change_team_access :boolean default("1") -# is_org :boolean default("0") -# website :string(255) -# devops_step :integer default("0") +# id :integer not null, primary key +# login :string(255) default(""), not null +# hashed_password :string(40) default(""), not null +# firstname :string(30) default(""), not null +# lastname :string(255) default(""), not null +# mail :string(60) +# admin :boolean default("0"), not null +# status :integer default("1"), not null +# last_login_on :datetime +# language :string(5) default("") +# auth_source_id :integer +# created_on :datetime +# updated_on :datetime +# type :string(255) +# identity_url :string(255) +# mail_notification :string(255) default(""), not null +# salt :string(64) +# gid :integer +# visits :integer default("0") +# excellent_teacher :integer default("0") +# excellent_student :integer default("0") +# phone :string(255) +# authentication :boolean default("0") +# grade :integer default("0") +# experience :integer default("0") +# nickname :string(255) +# show_realname :boolean default("1") +# professional_certification :boolean default("0") +# ID_number :string(255) +# certification :integer default("0") +# homepage_teacher :boolean default("0") +# homepage_engineer :boolean default("0") +# is_test :integer default("0") +# ecoder_user_id :integer default("0") +# business :boolean default("0") +# profile_completed :boolean default("0") +# laboratory_id :integer +# platform :string(255) default("0") +# gitea_token :string(255) +# gitea_uid :integer +# is_shixun_marker :boolean default("0") +# is_sync_pwd :boolean default("1") +# watchers_count :integer default("0") +# devops_step :integer default("0") # # Indexes # From 9e5cf6c2f6ac45c71fd89f0aba3ba0d7065d572b Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Thu, 24 Dec 2020 10:00:39 +0800 Subject: [PATCH 383/384] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 17672c5df..8f5a897e0 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ touch config/elasticsearch.yml ### 3. 配置gitea服务(可选) **如需要部署自己的gitea平台,请参考gitea官方平台:https://docs.gitea.io/zh-cn/install-from-binary/** -**因目前gitea平台api受限,暂时推荐从forge平台获取gitea部署文件进行部署:https://forgeplus.trustie.net/projects/6070/coders** +**因目前gitea平台api受限,暂时推荐从forge平台获取gitea部署文件进行部署:https://forgeplus.trustie.net/projects/jasder/gitea-binary #### 配置gitea服务步骤 1. 部署gitea服务,并注册root账户 From e370c4df1b7ab40d7daa987c70bdf569dd557eba Mon Sep 17 00:00:00 2001 From: jasder <2053003901@qq.com> Date: Thu, 24 Dec 2020 10:07:36 +0800 Subject: [PATCH 384/384] Update deploy file --- deploy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy.md b/deploy.md index 3eebaace3..ae644121f 100644 --- a/deploy.md +++ b/deploy.md @@ -33,7 +33,7 @@ touch config/elasticsearch.yml ### 3. 配置gitea服务(可选) **如需要部署自己的gitea平台,请参考gitea官方平台:https://docs.gitea.io/zh-cn/install-from-binary/** -**因目前gitea平台api受限,暂时推荐从forge平台获取gitea部署文件进行部署:https://forgeplus.trustie.net/projects/6070/coders** +**因目前gitea平台api受限,暂时推荐从forge平台获取gitea部署文件进行部署:https://forgeplus.trustie.net/projects/jasder/gitea-binary** #### 配置gitea服务步骤 1. 部署gitea服务,并注册root账户
    导航名称导航名称 导航链接是否展示是否展示操作
    <%= text_field_tag('navbar[][name]', nav['name'], id: nil, class: 'form-control') %> <%= check_box_tag('navbar[][hidden]', 0, !nav['hidden'], id: nil, class: 'font-16') %> +
    + +
    +

    J&IpN%2K^3(956OWS;OWq2%KdpuHLQQsH{B&8&gstDF$Qe z1O4vVbSVti>W2NFQtps9iM>-&EW!Vfd^{pex!VIpswRvQQoce?xsbRN%cYJ*m%zad zq(CNLbPHvRQg+x8xhA;&$ex7aFj+0ht07C$Y={V)TiUi*wkXwiRew4<-MK{bkh1l} z+V=A!PJ~~#C#7trU{9)Nds6B)W`(^MxjDr_uRAhaR0gBC_-^rb1x(W1_EzRqS+1#H zU|*s1oj@TrSz}nB@rX%iUpQMdHa|-oN(fk*N?2hHpWzc#!`7$NvHiHYyjj~vD8cpi zXhX{6q=)IinxtxKi&#V+^AW0!e8aAyY7-ksMNT-qZ99%FL?=dzL&!0Z6h{w@uMZMt&XSVp>jSBlLsd$8}@=$t~w@B(V{^!h-%e; z3kn_LlFA)q0y#`y+JmhYhu0*|EA|}wFF`GH(`=-+2e(hrwqs=rbHF#GKu31^sf7}S zVuAF;=MRBEYNT+TOrV8Kd#ySh5g-uNC7QXL;pi@-1V^hBnTFS+#7|9SgzRiV46t3; zne1Pc(2KX9GwdDKhm7!a7vJMwgl<<$a}-OF2WWwn41+W(F^AOIPxFj6S9?!V28|3T zs-EvjzGaUJ&-*DFS2|pYmKbPkv2w$)dVTzTgTI(LhVLJIQH0{e``AQmH;AF|%m#Tf zj=GP3jaoe{mSpKi&_c0u3VolDUx&C|zoMMK>^0{t9i1hq`iO%}Z{u%Y#a{Nj!`g8R7=$30J56W^0Rji zb;OEwRI#{DQpA$Yqz)YSCh{IBb96H7qjr;S+P~9nd-XPITjf|O>?{e#>q+DQYpl~W&4kIDqU4uN4y4n`1K)!AA`ks5*M@>_NZteZm$|biD5hc>HU}%kbp=zbLQmQi#Cwd$CVNt z8?R4VBhfwUPDqMfLbYtpuQEiDDm;)hl`T;hBa{b}dG!<88k12s;VPxPT5+b~$kl7-hun&rvJ=U#=o0G`{g(~cay93CeMsyaI{RDoF;_+ zo3|e{Ub)H)9B_mvYTg~7w7ebqarzqEU!y(db(8+}#Q4fV`5XU1IYPf$7?1nRmfS&i z>D@&q=BxQ7y`=D7?TYs^M&K6>{aIVaJUnR8499KmY~0YLa~3^@`>Xk{_xm?_cVpWx z%~cQ4&C*4IG})D2$RRykBTppHy)_x_>*s`f1nG5aEopnbOHJ;hhe&{@``A z-Y9GZI*b0>Oys>H1@sJh^~06EbHAnXP7%+X_o~h7(}2Efa8k=buw~L>(a7RONq1l;fOLH;l7I>%sqii_j+5S%Z zZ^-<6*U!wqe}ak)Io35Oi3ON~$xjxZpFIyHzU&I#zvY28J(%1UB8_S?vhqR-Yq z19x^!b0xJSD3e`7)IKu}0s26?W)sfgKpWJt`y z#X)_%j4k!LWLBd?p80;zg8M$z&h2on_d>EOR|BF0MW$HTUEaN{9_1df|1S4H{Yfx2 z)c*bdq8<=ZP7H(M^?pEg_Rrfrb{c+c_uz_hQynM?yg|DM`wBpUP)pzu02bF<0&|L7 z`+lq2!&^uPJls9hDfRY?RJHw8wv|?^{nQUQJU8*ZNeLi|N(aP{7&94&_}uqxlyw;r;3yUsK~{>MrfZ zF!xBP3iSgd>L@+Xuyc?m29SgDR(@pIShu4-=tYo@7MbJy(L#aebIi64P z&E=!2GMxzsP&)?|B3suqhygs&lry4wh~@(bu~(9}yv1~`nvIqis|Tpj7wCfK zDlg_xSCONXpGOH|EG1}nDgxV=YF^42PI>aPFkx`Wj$-5}NwSoc*wySp&%Q$okWtJHceth%yC-qNm;4SEzPD(@B733M zLy?xqJ`$DUjR8ewXrTBgV1mc+(HdW3Pg2=SOC1aJ&NA+lr;q0`&q};cOLcDYEOLzo z|KL%orvcGd4y1(2{zT{Rc9t6FG_X4m@N0k8uQ*FjyqCO#z$wBuCs8Sqa;oDcDe_DF zR#FU5O|;xgipz+T29TLAQR7GtabQCyZJa&}p6H$NpRoVpPZjCK=cMotS`{UlyDUq-}j z_WKxFgxuWA_lRG4pQnfO3W`+H*{`8ev~p*xF3d%8q- zcb{WVC`XpebC>3oCr-x&fF@uKQcxTPhkns1a;y?iVAUX4p|`IXyf46UA~)`*x^>U+;3 zb=*beAb<28`i?T~YKq|Br?QC26(iaudb?+j)Ya}gBt_bNy+ph3IX`pRGlSJq!pOsp z<;-aNsC;`}(Riwf{ls&OU8P-CNkxN+lc~mFP^7)u@gTdigGgh04^`7ZP~Xtqp7RAG zCqU$$g^_)G;^$xwhiF%`2kZ`D*3${aj4v&o;hB@T-HUL7x-DvbM5ta5z#97|8Tc`^ zPGZ*KgO=UYX7Iv-)FkF|Hj}myEqB5eyzUQX@69-smF*<`&E4|s=BsBpK5jnZhpbLTQf0d zZYw>}6V;-cjVeR(Hoh4gB~jTl$@0BG_KT0mVUH=jR0v%SEMCh#!7j;Rc}7w_CF7%P zG931ZT+`-~9NAqk!cLw3gnpI%7Ws{*$>Vr5so8 zC@s(ZVsJj&pU$6|xUz{N=2q%`@*v$-pZjgDMty}w^g)E^lN9%9L_(>?I0{C(3&|Zs zPokNz$bTT6_$6RwV#MCUEYjK6$2Yri1^G)!n?$#BV)B`SGh|(U7JS8lu*vbGT6vEql4ifg&~sg~%SA1QJ#QeS}%=b z(xg|w!y{l}srUxlRo}$wO;=N5*paMbL@&z5ck|BE-pBWL-siW^J z4Ia&z+!Aq@c%J==KE0kFRXmNL>9qS7Oqf6HWxw)@B8d#hn=9t~Z@nf(8yg;2x_8+o zaZD%?&hQ|$oO@gBSsle6qQzyTn-y%Rn8d~gP%iP;(Z@L>F2_~VoVz4N&*rEWdZ^Yy z7st0m-pUW5gk-Jfap0Gua#Z%Kj-l!vcmaAeooA_+6A=N-fBONEqjGd$M>U8 zZ87hJpRY0$^695GlG~ah?)wUXbo~HacQxO{XM{tIQim$I>OWQRVEP2oMwjOLN+K7WfA_6y_%|3?qTqAVi)#&;n$MzyP>m{N7lQWlTo!7ZXI( z>!_xYTSZ+JFGUscec98D8h(1Vm0g-{<i1_xI^b%wl~d_XhK7gy}&^0``b>)OY} z@ob!Cg?%Hvb+5My=Y>`_jvH<2${xX|7u~5IX??9YNwZen;HQs^M`cg`m zk6GSLKFz+2eQXu?sO-UScmW?!KiwD(ok1wFauB11cW-r#w%02c9dKbz=@h7cRe=0|P@b@FE`=>>L z=J)QtC`a|6C({IH#fERMB^rCNJG7g=p^mf5F*vE!?9*8j``vY7AHP+MPQnMBh zOk+a7TsU!fE6*f+jqkK>`A0_6{|;8|avfIvNuFW`#(J|gtsv9sfY%RUis>#3iUSI> zyf>CS%Nkc$-Yq|IMRe&vRjnzoAR}-s;}@`M?XOggdwv5}ed2$DRnyYV<{OsGY>{CT zsJ1iHD_(nYYX~+OcH*8tNr@K1(F##Zmh8?j$^u8XIXM%Fbjfa;qW}WZbfzHPSonX3 zO;Ai~G5;(y?YD|aspMvg??kBy1^tiQof2x*;=6VT9^n{9=okijS;&a1Mg6k26%E30 z$6QCG5UAcSLk&AlL3D_z4{-pY8Z5{jiJ_Z3SflMBD1ne81y-&?Ag&l48&X!t8p&Xs zJ>Uzzgm^=F0A;F>aI(28rRJwgk#4@P*j=LL+!U&x39Q&JcU9I@Upk9(om@>LJ_6VN z!H{tuDoT>US1Ciu)6wJy-|MUUW5(8*KN-)HYWEXGi9E4fgwu+Yk;WGp? z|EaS2F{mg#*qnl$Vf-`UhfiJ#MvxH_hf!A6S_bpMg4}B*a=G9egiSiI=%H4oM%8E)#%Skw_vb+ku zQ8d6V!7>5Rz-rRJH{9k( zqkzn@ZR;s?%U)_Y09S3ON6h|`6^}t?A-5i!Q$QyvMzD-R$RNUc#~`E&?Ulu< z)0F`^AAyU4VC>v4<(vhEpqw*3-GpQWZnrv8V%{Rt{me&vjHGyuoUQDI=L~%y_Yj)b zj^oITgt@@^8WIN$pO5S2r&UpCV}qPCnA2nb2YuoM_c%XJ864_ZRE?ip%;u3A6fv&l zdn%Vzx9_Ybud}l?bI2v~lJ9x`FnvFfn5|*tenRAq-E$;Ty@d*BrYXcT#Mg;#+9P%n z)1UmDr|_zUHB(a07!i-1O*lCx(LxS)P?a)n*gg3~h@tYF8>3Q24I4e>PW#9^@&(=l z%9^%Mz;xO?%+;46_X|Y3A0gu|-NV9YNtGe>8%+yj=Pmpg-%@@nKMK>Mq!`IR?$b#T zTX`Rlp@%r0UB(`fkFhM0ndw1uO47n4z2x~CS;Y}Cv6NyeUm=e4%MF{!wL;?hg+$#3cEyt_15v6W2$1Yb; zY=(j$ATH4YR)|GpyT3>19QDKo>_*0Hi^*!tTP1X*^OGedN2Lm^>;*Rx zZJuBc(=DXb)jyEA@k+j{?xVpz-KmJ*MQ#Ms zm5(pUjc*Juo{E|ScglT32H^N!tNuIJ8YKjKiwv@aj9g^VPSMVaqIG;5E>~ADBGc_81Aae83 z2BrO!-=+-exWsR;I86R7w<26Q)KDua=gU~CeGq?dINGPCIi|XadW55#O2I$<`QALE zK!kv91V#AdPALdno}Mz!<(N6sT`FL8_EDC*=a;AWm3IpqHA^>LQS2hcAKPtGRqjiM8`V)xtjb_(mgB96aY1Meppan?U1so^V#{T~mW;nG?>1sb?q4#V!-j+! zVo|!wi%JT}V0w;IybE?%Nx3PU6clE|FiRw5HwM01HFruei8BZ%c&qPY1u1h0DZUtm ze%u09&CEzCMvAn7DkwOO&qxn?R$&X(o605`bjnP&XO#{n-ToRIG$fa)7n`@>-pf*L zEzt)h<<6GA`^5=V1s^6T+0XcB^}zT7xh`Vk?)@zxgK|htdhq(J@^ImF;a#$Sd5ghX8y_^1#qnu zn$rqgGEe6;W)xcBS#h~0T%lYG!hc@OC1_$>aC39N>n2yIw=&XANXL!{nOxC> znz}MGJ?gs26_)>$*C`j-#mF4_*iZgNp(e28USgz1XS6|GoR@T=gBmZsPJJP}8=O3u zCj6>h-Y9IQ(^B|dinPp%FyoRAX8cd%YV4lwLhGrV^yESgwrpd|NX|6cNMw{Ttw1hI zLNTN1_t=({85y=ej0!bdk=UDQD|BbN-07AA8yrl=0@N~+C9yvz#^n?+@_o1^B@IPc zX49{!P}vb}w)}1%TPXI+jIgoHbX;L>;98QYP?Ob)Wm!?3ySQUHD0BWKuEu_a2!t+l zIo-)dhdCW4S2)<FIo`1^v=Gt)Ewu=U`EpE}KKE=)Iq6t|cyP8YcS zf z7IzvVGH@r9h%4^hE^>&S>u6wHn|F|6^8z@M#pzkj6Bd%W6u?Ac{z9hTCLD z*NF=Uh#OxY(o-ODg6rQzIzlq8JK?S9+(6dGFOw1e&&y%zk0(kLmY_@F*VhN%234j> zuGQ#rIxDmqhE2cw{r}Fj;dgqTZB9IAx4RG+AWjh0LR=J_1%L#N5Zq-JxNMBE5L@bh zqNKtVJmYsNsbFM15U4&TcE1_Ap3BwC(Z?=hfy47g$T%JcsvuK|M8GX4NMZ++$9Kcr zWb6m%KIrv19B8ZrZr2e7h(^wnKEP&|H^l56Hok2M0H4D$G6+bl>;Gf#y~Cn9)BpeH z%$cDoc8UEyX9_dG05fzIeJJ)CON_CdVHgmV5{in(>=`;L_Ff0EH%#o2w{ZFl|MX9inhKD(dt{ayP1(fZ^&3gFZmdc};&}oh^ z#YLdR6})|-Bg|pB*%@>6bScS)BBn5xPVQzzevo0y4_lCF$t%7@ zG_n#xy;dTK%|GBNoThQ~`I+6NJQvoa|_&8xg|yw-d1k^7EPID|}+gTm|~< z_=PYTq9Ij*;y=0cwY<97cOi5W&47wN6%tIe)Iw-!vkJZCuJcd9W~XWnqU|afD2DlX zicitRtQ}kYoH!ook76n2pVmGvo+hX0HsBMFhT^CYj?+D%biBf~{~~-TzC6-jeUaT!+IB^= zjXj6h6yCP?f~lDG3sp2n6tu5<30Vu%GV?%~K_8-Q@hzAwzM+2CP9*Xc^mRui>^*?S zHDR0As*bKx5#B5gbIhlcSb63Lf_G-PrJw-aAQ@M^!f|~OV=}qO3{Inc7$!lM_-4&+ z=E6ztA7CMEjfxR+e?|pMb1gsHyGx3EcR9+B;u!k^euXSMN(^MNIpt8$KgeNNV4p0J z_ap^n1i{k97xfQdT()#^I_R!@8{-O1u_oi9Q45sDr7=-q$cMu+meD3AYcU1962yf? z%mXzEw>(TAa*U#WVv|!bE%8qhS#F;w9#e@rRf7ZdL!XgK4AN=3!D z=$)762DAjlCB({gFOFB6O2W8Ej6>w#7Ds|1@f$gz@>$t)qkfilOP|em()Lz6Sn&&Yq&%8FpjzyKm-k~xY8?|$ zO~wbv@~m__lJg*xat1ua#$e`@lRVT&-jnerj!F0cRl6vnzSMDojx4(gGrWZSoWeY- zO;VkN@A1;I0~FkD@${%(%;riOkCLq=Tv11SynOJ84;NS26U0F!aZWZ%gQ6NNpO_JZ zKGBtX9oxho=%z8V6<}N(@|6->-~@n6No|&HDr_m1TQmY?ZH?rYOjkMs)M%@YZDS;8 zAZl)toCd7TL;XOSQRNwL>pO*n2A`6HfL$jwMP%LBd7rY_soJZVd`q$3`Pd2?${boH z?&k68g>B`@%8VSy$#%5gxOJ8rlNj=+aWw-H$8dZ2R5hdR$|ce6lnshyCn29(xPcD6 z(epxs{>H6K#-DFEE?vKLzXo*usDOj=SG(q;BH0|A>WGx)rtRaTr5|%Pd@YMMYyYS#)ZYF*4E; zA8)pq{Nj=6@f~eu$M0z~D`DMjW~$1&ZDu;y*3o9R8|%%@IGld)!mD#AZ!{Wb=grQZ zHEmMz9O^?^M-S>pem#%%XxQieUuf9>Wr3AAUd)9agFGv)7DuIkc;C8E=$P@!iR+~< zlmT|$a^jAh8<$!%wTIjDCo9m`9dxa}i0eaKz)7q+0Be#xLO}O4Zk5;f@%c1Ui;_~!V#T(o_HI1VnuTmGoXmxHg}p&HPQX*uIby0n zlhna-CwC8K;w0ML-*d;27aTRKYu=;fYQ|RzkhvfWf+5^K-tOmVpmG3IIiR^sPw^gs60G&Tug3KxlZ!(S+C-am~z;|6q-^zm^ z*XSQ4zp30c*R7xNMf-E_JNJzH8&bzl{>42bbb|Yy5qfFSg}~HkQ#!Vgn$s|&5@{2< z_R?b05dQ1N6Khs@Z_iERp1Kdz{zRLiLYLu?GHXZ!+}@`nO2Iw>Gn$@!@7y#jp?kUx z=I@#Q*wVlXhdd8L z|5?RHbbR!^cZ`2k@zJ5yY5qN)?Du%G-{Z-Ck0<**p6vH{vfty$evc>nJ)Z3Mc(UK) z$$pO~`#qlQ_joe#_jt13%HC&Q$%|KH=udd8Zpm_LQ-J#w#*1qThW@u*x2NYMV4 zjSdrDacXdnjqYwaKqL&r_~BoO=pGO_^cya^XMXLXTL35gB4aSX6JZ~YxE;TuaM-kq zMIv(d!d0@Ocf@56hD-X75nvCBNQ+L7OSMH}t&Az%7!{33E*|@2j8;pWDJIp7a=Liy z|0=e4 zGO#GeYFR`}Rm8Sp~K9u-)YkXRIy6v}n zWnv>D`ACVfDs<1`G z{cl=^l-T3)|3*%Sl~bme==9j=D3oAZqvKQ4aO$2KAD?b{u$nF&b9ZB+QRW(bM@{E{ zC&myZn!xF|+9qSEAN7D%KSH zz*3p5D87!w#u>B8ykh6e(>=#S^1+db{}Dr*^jM7gOGTY+WPE%Sdali~JHr%bG{@L1 zCR3b^HCxjE2LemL#J#XfRsf0{!5{FiTse+b zW3)EHa)msH$I+!XS_gBB(4;4HBFV7aD>FN{ut0C1{TMaCIUh8KVmOOyr9)gm1G!`t z6(S?4A7Fc9kKkYwX`u%0EN9?NAkl%`{(vQNA@8C+?Zp z3(%=tmWR3rz?kI%{yrE$=MfP?EoYL;C1{EqR(Bl+Fd!rjWaGo5gSlQTM4AP_>fE~B zFa|Q1=1W{(Y>HO&Y_8wmT)zQRmOTDp)G45Z47PI7;w=n$+lblSXdx~+4GN$3ttYYD zM;_RJu5xWWinR{TjL)36{^orAZ~pfVTQ&X~FQxmYo-*_ovsO*K`>w7zl(s)GE-nJK zpb<87&tQ3=IVQpqi$*JR1fNK(wtm01*+rngBHC@Uv*{WJDexi=4=GV1Z;GY*`v$F= zl@A!S9%KqE>hfmxglK+#E}5wL**#}nb$ib05$8mN#bJ*Cs^adh@KBu7-XYF`ODgnj z#F|$uH>Y?`*>U!H)&Ci%tO=ufqfHo&kY<+k@g}^0;{Y3d6Q*=D{lu`?6c+v8*F*=H zLSy6aJ!5B~$SHr}yxhc)9-+J%JYr|G>|@5AeA3C1;a!JOr_o%$n)bn{FY1q_G~ho7 zkE#wuvpd)Z6|J5m$98+QYfX9UjzOgu1BAwCPfTLVjx$*9)9N^bDoQ-f_k;`y*SywxqcPObn(I=_bWZ3a@Cb%;v=X7@r**T31))HVpF$u-c#K} z7b-WOl4}-bQj9rQxUOt;jAt%Xi(|x*n7&5kZYY#Vpq3V+2=GE68hp@F?U7E4*Hu_N zC6@{40E2B%$GYmcL{d;%SPl6!P}mKRG#D^~J5X3f?4WYTHTrbJFh_Ltqv8Zp0o%4; zK?$*)_hJrf=!O^;9J^VxEI)50IvY^8*9<(u|&wM!4 zh|yekZXnkkz{mBJh{E6&@sN}4A{>PEDp%PBY>`1JXBZ@KANgUdesld!*RJ}O?a-55 z)w1&pSH+3kMHp{CEvCUFNjb{W9ko9f&`#c5U(frgnlCz9O6s5pgB`D;bRA_O;Szbe zCe!jyyb2!S!^Ai+h;criPAyc2!wNoDL@_9KGL2HYh0uv7F(+dUrVU^j0A4t0U*_5| zQHLRed-=}z;8(0g-@20|!EB~=CtVHKlCX+bwqH{()Wu^JJCymkFQ?hEl=ni?L{_e5 z7QaGqPc2>|xe&exM7*-9pj;f9__7xUZOY;z{t{Wo#fpYbxl7VUqJC3u|9Yy120OYc z0DER0>w-RMYfhTYZD)@PPs`NQ`sZX@@`~i5XEaY!oC7rMg2yGYM4SR|Xtt=*auU^iB0w9~F`VEIpg?*r zXZOKOh!*U3zr2=L5uqWKE+TIsI&teFgMYy7lh-4RT5%HvIp4p#=RY z3>Z;UsKAG4ABRU=?c1sAu%jWG2sLTSHJ32WPGW*kkVF?SW#=T{S(YB~T%)3$Kj7!q zb9tm%iIXVHPu4yQhsFN*q|1pbT!5&>5|QmBh2QRzjDCcLVYx*DKa2k!W+qWJT1O3r8A>jRJhJeYl>OYH5!qN0PIsv1{(itHJma#`$ z>#uP=F>D`m9Rs+pRBdPWww3KO>FmGOZVL@S@ZQeYspvD8&UX&Q?CXE>xPNnz~{xsM!w0Mtb-HW+ZQBgS0K-I45_f2BHat#= zS7tiM#Rc${GAuKHstsBs)y0qmAsGV8$NOT)pe5g$nHgkArwwBo z$o1CXt{5A*N^EnI&+MOq)5(6uPv(a6HuZVQzZSxnu>8aT$-lqUHQQI#guC3yq>_IO zN!6_+3$X-1X|MD-7;?K8#%QWA_Gb;(xp)-bJy7zuwvnA6u?g6)ZJkdvd6<+2}sJp?p*6;t9=_GR*Hnps}iAa}w5T~68L2`wb3iHt3& z&G@L1Ij?VL>dtG%1;53#oYz$m$EZI`%=6r%>6b^WE?1_nQZ$O&UYJe_GKc7<>-LVE z7F3=#9NwcVX&s~lnL^KCJD$$c?&|}=6_3*4s1($;i%BU)a%o(F#Eh;i3I5jpBm|fL z2uT%JNI|nAMeNI;gTl|eyy(M}rF$qz+RtuuRi6?c(T&oEkNXY z=K<>-{Xf68>GM&WYUYx#zpZF0crV}=+Q&&nDilrQb?P7N&!YL`V`Sp6(Vita>gA(vpXeVux7vtf=4g@L@r~!JcUL$klAd^mwy56*EEDv^1OPzrPxnh4OLHzmfH>kk{j6kSPpfr|-s; z$%}H&A|3b8SX9}}ToA!O0Iz+`moK|Fy0SbP`gTH7;6hv4cwCj>f|+uC(1zqr^upyU z#ww#D5ZB=yyUduL7;P&jm#xRWpqysy3F(!5&0y$^Hwg@(BWREeLU7H{{}9@Et%zduroNSPg_ z5|4MLb13Y-DH~WI9WRMxxSpmjDNmK4F-&5ffqw9qDi@QuGObRw8@%MMY&>g6aW!6V zonB)(mE2TFFG;FQM>=z%9^RD0yqBu>tQ%Z3gGeM2vwocvI{7T_9AVveeGdGqrP%jsbGj@20#Z~9C;t}_!NhGY(f zzMaD|Yz0#@m)S6CCnO|O)MJVd7+A>3ABvlKOMyPqFm&i_9^0DrRNQk#y($am#>QpxwT;rTi*)5Ep>k?W>A=%Ymx= z=jtFIRCr@c7;c$(wqxt=4vxg`$VzOV6}zSS`fqBzRF2B}mc0io1;y=H$A?1lI{sY+ zZl_7{r`j z9?xB)?^1CL9D;EW%3B+mhsh!>N0uhm_A`Z;Lom)MBs-x4&X{mhy&_wm9U@1KanDjO zIk1cypnjEU*_Jo}qnFoXOdS@0VzVy@Vy1{se*Gp~?!g~f+zw{LGj501FwJy1UaMp< z`n2jWVXpKTTor?1hva)59t*%NoeYllSGVjgM!Y1>fycZxno0U>gGK`sw?$o*xW{ts z*EDeF$Wc2k!m7{UZcfk4HA670hJnzX8v`0e+nK{KPo0nP%+)YL2=uL%8*8ssyVh=n zz7VcHjCX9P(u;9z(D<@4u98SM$WF|Z zGt=M|h_PGcNHtBX76atAoZ|iDB&{aqW5|FYPH->4-^UKVoe~*O+TlfJ?NM>4eK*PG z_7vMyat2}fX>m_O0kkp~PH=&mC-_gfqxQ}29f@!%$vz zq)skP)YfvnWjluXg`3HPNHq68R`trZScnzhL9;6p$%M`4+R*8E26u0Lx!vl?a*?3K zs4*;d30gIG;I4#nmj3ulJ`ZoW*sm*8_8x$Nq)!GQ25fc53}WCqHYs2{FIm0MTk;7^ zT+C}56+HU$s^D3P*}_c9mAYMqt&N=yNMuK=@(YmogGqmoRHq#~UsBQ&jjCGc*5rFY zJe0UsVvdn8?GJpT#B@cYNcY6$^Pj~3Ow$j85YHDMR^sjx7w~)S1+Z6zd5YNO$N5l! zl|#-Pqu>C9ilZC@Bqj@gEs4Ze%+SoG!!@r$8TDn=nd#ZVegQCV{FsU3Mx=}%Gj-a$ z(enh{qbP7oDf#sg2KZvT@S?&r8w|}nw3G~^y;X(S{Fwn`-uKDJ2r?Vw7o=r8wBV6e z#rllZl|#s28XL4w0pa0lF0l_&y}6`|s%>R4+Irx+kGo}|6uCu1u%37qS_@zzZghn) zkRT9}8T1aDW+|`;`9e1!RI7sEY+T$*KE3CAvzCO2P*KgKCXC&y%q_^nHTMWsZ!v_@ z7^ObduzW?sGO|KQp`C+IlEu1V61gTOd(FqDfgxBeaUCwHtr*DnA~i#`P)qXlS!4+P zvcvbN+pK#ALNQMgVFo|P?yG)9{Q^FWTjkofzM!Tl=$G^vtZKist?lG~PK$KFQJM-P z!~k)Gs$IN<#!KDb-DQKB;$AuyHaHdA3~WPB@9^-JRp;Bz>=s8zJ*S1tVlg(d7;1|T zjxA!=t(JPEw|CknDVE8h)VL3Z$;dBDrS77b4J+{7?V7_#Gy1GZ3KH$CW!9Wf+L>fa z$|scA8B$gz^<7NrM~lkEmPNR{>v2PvC)k8wiOoc!x(?EvWEOW6p4Yz7%qqB-a2tIP zK}*UpjfxLfx;Ks250NLEm@jIsH1vUaO6Xy{@ zh7hh&xo?lF(qXvDv}|f5&#>-TxRHu{Tb}q=k{gmwr%PTR3p!<{$t@vXm6em0nO@Yu2?C2@aE~NrNz6#Wz@}y9=Q>^ylIWEt@7J?L}Jx?C0T4Hc@P*>Nk^*()_$O}q%F2&TP5a?5_6gcHTi64 z@%pg5m>OVmlj8B4iWis!XzCs4WZH3cO+uueF%7xAzy8mys+p2%1GiFAOjlr@-SuTo zCQJBI>aG_CIY}|Jz~Xi`uqw1+gDO2Q)0Um)m?kkFe8#*(LY#hGm__qH3;0BVZ6%V| zqpX~~DKXjJ-k^`@6({qszMw6{hnY0Ft(%`j`q9ib(g{PoC8mH4n~!gm{o7Oq+L!NtQ`Nb6 zUCQ5>m5y;wWUBGbxhF&~n`%Qh(P*c4k&|g`)P-|ST&9$@t3JZ$$H11=Rjp-*5FE;g zt$uAs#3?3Q`-fH1A&siujlrpsZwlcW4Ttb;qrrjBTWLro8P=pXNWS=1GFEE7{3@W7 z7qG5EJT#Fxd2z$xpyeT>5s}rcH5BT{8glTsT7#nq{z(i0?`asKz*1RSv$8GtV`lK+ z+SgMjIsBVKKBUu|I=$VbTu}QV4gHf+zif2x8{Hd2p1k3ER3g2bdYyqrHZvz|{*9g= z>Ea2{YNFpbL>oO)t^eANxIzWi%Nfkhb z;^U03RQ>UH#`lH^{k1#EBFWE6tdhzqDdq1_b-wrOlD`%IJ=L98%KP8zY9$t_QxSek zr(XDPc=bAJBN3Lq3)1(!`u(kIKd`GJc8-5hx7~RB2QL46)pT?E`A6d_3p1LSLU}#7 z^6Z!FA0tvsBV1huhkh;pg;_g&$lSuYvvf!H;M~i`8%7)#D{OHA68GnFE%U6zvq^G zt2*|rf#dA&b^hAif}eFNpKDV1eis_9TV&GvoW9ht#`gSU_C#rSs zJzt-WG0ei-cDLvV?8Jgq!h2-i;E5!g-eY%@GZnC?+NfH-DH~WW>oSdf-yySu;u&{zscXj1T&a&7WT=@3u#KW-tnL zOj9q)5;goXwE91^=u4g&wQM~gw>#sK^9)j)6BrZhsKli`LT9YEr(?U;uWGG2g1gZ6 z{p(z7%8p58b%UF&GwxeZsYvX%JqMNHC=gEQh_7+Q!$oLnMD6$j9naDpkTqyfm8 z0P~Z@xTR`2y%P(Q#ANIvn2N(h9aai> z#!@g0>F@zK27T$@jj!#uAO}Vi z>#)EDm*VhbM{C!!+#B2$WTD%O1L;O3MvHGg1J!b87iUkJnmV@lk^36EU~KVhXqFz> z*kv(#yJLsi#4<5hjxWJtt(EeY&=CQXn6^4@B-#9n!Y=+x$vd*ce~sZW!;=E}kM2}< z+1ElA_u$Gdei`2AJe6H(IMcaZ*~LE&FY;e8t-H8(vRcrQqjc2uqoC&g2z%{C#h5l@ z-;vnP>^@+PPkfb=6lyhaKhsX&MW4d5Wyr&@Wz5uB$IV9OuoVYnbh)zr8cxah-QGBa zldbk;>Lzl5>xJ8%0o3ewtgd71xOM|S6Zd8OHr63m?~IbjpQw)AcdYdgzcZ--Yj@5; z0j(!>ymxXJz%-7v2SrRh(cuVaGbG}HwI8yJF*e7&d*a{l5^@Xk=L>o$gn`5WMXZpE zIZa(s-@y;&$<1Qim+%41_QzeGXFkxf=_+3dCMXfR;dXJYMgX%9j!AJ4fwYAlB3qK` z&=Ail)n7==R7sH{ev7HoRbmPT6`g~R6z#>AFc8Kjb(soMVmThi|G+11Iz;hZR4t`z z(ciBAk@ov##P^6j?(zq0r^Hy5cgu9}g_mFgGeipZKK3q>dJ1F0PN6C4bES_b{*BpR z-$(-J#Ab!M^c8$?Wmi5ooLdT@S&iG&6O!T+zOZ-+^q1J_^b>>@@}^xJ1qC&Jwn$%L z>MRrP`LpK;{Btl(OC1BXPx@kx^~sB^^{0hwtqS+t3+UVwCtEDfagunWXl8^0o>#b@ z+QYxa9hNtvn34}8xlfC)!C*Y45+GUos62|ru@=^l@qv!DFou~UKnnLM=x9%H@C&)e znflFQ3La>N?349<#?xRzle6*;+j(BMVEvp$C)iDW2*NE~X#L$S&; zF~)0P^QCI=(G=MS>0)4ppG}FWDw1%6(?MmxyB@;eJ?*;fyFia zG!ohns$9FS`RY!nP|0~Xb?c!*|8j<-Q59 zaX>H6SasU{Npr9Xiu*$RKpf>rrwceEkcL)f%SEWBy|K8D#+1CkkJarm92b*<#woCd zf!`F=E_TDSVgodaLt(oPPtyH+N3=4V&u|)8X9ynM+52|CqKH8`n|5G|Q*sV=3F$sW zfV5dWBR&h}gH^(8`Uq2ZK%Wdc^)O8oUN-i&p4ik zB&Aw`fHkCa+`#9D+jEP1Gz>7jr_T1N#38Kf)RvZ2+(2?3x+!sr`^Du^ouN_c63t8Y zm{M<1S3VqXI|IaPnx8`Q)P>k5BMcoeOf!X4Ihx^YJDFD^6o2Qy+JmwN`v!y|TXZHJ zRy&4rtHo&d)UqejF6#e@|NK?CZU$_QI7<^MBEr>U)rQJLA~Z}^U?fx0GA<9sj;qt9 za?2~;7g8JsW?ePj@&2qmIkq=e9>PLko*N#o2h7K1!>YOSSq4tp+aQC>P+Uc0UZ@`YYY-Re0gRUhjjQ1f;e?sNiXG zKo)GpVu+D`{9m2S=ZP5fUJLK={r6pGkqs{}cBX2Qi>(xyR>(Qt4My284L;L4!5!8< z&6Zz4IkKE8l>o?WB;_{*!mVD}1?~z#ygGI!j(CUFlL^1TcPNa&2S!E!k|N1V4^O~fbLzasg z$tx0w-_#;Z?#~Lt4O*BWd8O--FKhEbNkSzumN5*Gl$m6Or0gttQ^lfe%*+oLgB!w~ zsz6IOZ+DVEOfBGMF&PkX7IW@;UH5ac{+7;4x7b2GovlW)TpVZb!@2xmOm=}S!sx_d%?&Q^o7xkU(C5qOa8+5N4-ZQjnyH`#z@Kmic zkc)ph!Y1V`72pxzO%2-BVt=h6sHfVW&W7sdPG7>{Cgu^oA6XpL`s|a6oYV!4<~-R-mt~0iGDtp~`~!nfYPhuU3MJ45@7a;)rn=Ne0Bxu#VAzqzJY|!9IFqY=E(! z@zk4pBDMs_!$*i39OofGmu2UauH9>0`^W#)!XEk_iiuD@8%E=eZ+YS%p2gcIjuH0k zvX8_2&Pqe7{o(K*g?MCD+zO^%*pHeM-L&%8IRPjX6~6&vd@x(j)7z4`)_d(i*ZwUy zGioO{FgHf4lN6}P3Ywd8NLhIb**mV(0vF6E-*;5UT&*|&TFVmd3fN$zlgxJlsqyC zrBY)#N2Bi-d?OiJ^C}sZ^3}-R(1SmwK&F;VBr@ROVL+Nu)<}l!-wNF%MVJG}%f@0W z8OG&}JTIw?j(!d!cRev%6F}4@@A5-Jzob3B^^3RuD01JDc;klDpTl~RrhlMaT2f|L_O3c&FrgSG1sW*EGo_aRp23EjGqU1y4sQNi; zKU$M^-XS)#=kYEgKC&)cF%2^HyCSNx$I;lVli~BiFKyWaJt?YmVsokF9g+Wo7*YEe zjl%ezDjfC)?~fax8HhjfiEtTgZssp*kK!oS?kg8;aM()ws;`In3loZ_My_BMh9%dH z-6ei%e_T>J`EFEAm*X`vLSf0U@go(sT$6PR?d8>>S)rPaYK@6GQwy#0M^wG*GeQ|0>>~riUQLhwFvTy78d4X1|7(uq2Z=*b4-}1A>q`k_QzF9$Hivl zB#%Q98$n1sFS-FNI z@+c5}glUwjwXVW-u?&ow?@UhzwC=K_{sNP|5LV;dQ$G$2KuEYyCnkZNK*LQGmjpwx z&$^Q^R{NKv@a=`LgRi0@MInn_O$i$eG&eYqWTnoMm_fpPI;f_f`tfORhZI00fk-PXX;a7rXLQe7!|nJ6b9!ixbj4WRvC!7w~*V$+2 z?XD$oA`SK(nY2_f6e4WT(^U<`zEz3Bph8=t@;I>#=_8S12XTa;GywWxc4H$kQM}JN z6)O+7m^Ue_j<}xMtiC?+v~s^(>@ATQlCrs^l(Aa0s$tllEQl)AuXEtu61P3B0-h@7c3k7Pn5 z6EOt5n4t**-gPrWLL{#z@iCt*&toBkOa(7VImQxAc}nmD4uT~DLVrP-sM3La)6ho~ zb@?j2Dl&)mX!DK1?R*=F(d7q!7y6iE0M@9^s$zCk#jM6{{jpUFahmSsBL$K943=ch z69e^L+P~=j8SDx=0y_SJ)>iqL!d2nmJ`rbE=u;Qa8WAzcwTeYAkR24W7yXQIClqY$ zOCf>sP^;pLQA>jPgR92sutN7rv<~vbVVeWRp4i^Hp*Y;-NmK9Bk|DCD;_rfXLwINVmKS~8IBC=slW1y1EujHD>}knLk|sGf}O~5nQT?dzJnq2 z;B6Kc|C>O84T;q?u2Y+yIp0=YizHo`#9S6feMGJ-o4UXs55-v~Pr_KpaYOou<)OkaLu$C!VE`;wxh|ZFk#`{J5>$Kx~JM8=nd>F2Iw)SbDJtKx2Wtrj1{ zU+?K#-d~cHhC%8{Xb3r*nmF(=k}uo&)Cs%Ao9s1~2sdCw-|s1Bx-rX;^r_S3?nFeSDd0x$&vu<8F0 z`a%)K%u+idFura0tN84!xeLIyuZLT8Nx~iMMJ@(clJiNU8EnHt?4_=fvDb~xxA?9^ zJ%Q(|iHCEod;sSP|6ZnC{8i4)xQwaANVu4jt0VJCQ>=mU5H6*A^8G8yRo(8UTng-^ zA9WV@g@=ZQ;tgzLNCKXo!)3MeZ$qxE$tZmgZ&%X03D;2B5mAkRD=R5bdEg2P57jUH z$mCcMZfR!Vo@FJS5y|k6TTX0b@UU@nEtCiVE(A}8Cc#GjF4h{a=2|>Z>(Q`h*B1{q z8}0#GQ!5!qCB4hD@VZQvYYnGl;Ka(n zX}CaEhn&L;k_?=ldk}CUV-tMe+sT|1e@&doiG-u-IWS!&PN7NseY`1ZATBZ8xG8!Y z<2o5Tnw5c5sGLO}k~qRU$<3QqO?C&BzWzYgRPj$(8$q7H<63?GX|BtCsA*9z zaiWZw;%9tvSiFZZ6_n84@fX0um!35ow+{#!S6EDT1a;7*(9sW|OU4nSJ1?{1W#DN< zP>7bIhjx&qkotecl_oFHwrXtlPkw_cF{gLZGZx>JnviqTNioKA|&n2N!*(>b3Dn@D_>WO_@d6mtLU*^Y=^Skee1M z-L&ZATdXB7<1Q%L=*8o;92pVFjEKPH>r5!@S|Q`1PJokOkLs_$mgi(c93ima`kE-A z>#qROHzb=9aXKQRvSP0XA|kdFhfS9yCgA~yC`n?^IQ=rX{VipMB8geMdhmW6?HpA9*}mS5h{pdC5e<3(B5FlMlqoN4QCdOvCnuc@ ze^c{y2O^5l>_$Y?-;Ib~)%WN?L~j~CHhiXisPa*R9uZMEBBHwCBd33leCP%32INEG zL4DQTJbdVTnGen8`>~5H1-55PJ%H%P+EdmeZa}p680BOC6g^TQ` zbcYJ{K`QiE`P+%-xht^7w&H#&q;ylE*e}}2mu@K3;)X(LDJSlMLUYPz91WGBP&b4^ zueqVnwV;t5Q0Sk^QhaEpjVy2jq0V=JP|RcZ0->Pkx&!|b2~|2DfP^#)-xDFWko&^} zh!88|&HJIyNsytC>p@T`=pB;rD=Y+;Lcf=>&~OhH8gAT%Sg0>zp|>7@h5o){*~4q@ zM?$k7-%4a4lyCsFJjOc>I1G)FA== za4nHZ(7yXfP{Ql%!uvoFD}$hf-BhFURIJ|Wd>y&Z$1|0|kep}JzV@5cht9ehiOk3E z@)$SsN%%VhcaYDJ6(3@!DL36T+Rb~?qi-VbdC|jr@{#w<^6;KhZr(HDUfy#-<>5WC zTTzgBFYkG>N#;Gbyho<`tUJ>|dX{@g55(N+G?|9D=?>^!%HDaG_LWt{cEBCQB3t$Y z@lIsxFY(T`6U5A2MY5yH$m%ivCTYGxPrx=oCH}=uGpMfzF2efKJiB1Ud#+=$ron>Adzpq!a2! zIs<-*bYw;TFQCqI9Z+XALY<1=ggP0&fI5C2sDo3d|3j$r^>0C)6*APx`S+pDOb^tF zy#sZ&J`n0`8gl5jpw5w))_bAOcW$WDA+$5Z1>V;me4o%x^ByY;?M5h-q5Oi(H0a+i zGD#+Of-za`-V7sW*>ihgv4S|DX>DtpZ=$i5*8l>b{7uxbX zm20xW>fj)`oXR7GK{u1DqTIE=qS>8JP?(Bt?!wm2Zm$)#J9q*(!0hia&!F-OqYcn) zkK=DomzCrdr}7lHff)tE$k~F0py4_RYIoC2MJ<&)#|@cqqLo6rL3WQHorL-5_E( znlmn2Xi%f|M{eMQEV!QJk8SoYx0ubz zzAv_c+UfPa0%H)6dLh1+h1X}`6WPJfjR4dgEkY&Ld0wNy+yvpLMy4M`H@r$#!CP>DEh?W zhA)$TKn{3;e(Q0&H3V{(i^FLYb8;IuSsaPlxs9&+jbh(@V*@2Rn2`PKBmkn%71*3M8d?GsvLLoAO1Bq&z6>n zUKf}F_2P`Aw@JNbyi?f(4t4=n8%ka&Doi3cxa9v^xo#d68Iu!~w(K4ucQ-Prk{5~++hoPgV(#gEbecc^x`6#ZG z`v&u|aBzNMYFJv@KfT?BgYd;=E|F9^RUaga{;rA>xJp5jpX_FQjI)7S&5Bl)+{1IJ zo_}+MNqKdrYt?>0+04q*npyli+VRlHwAAt15y>JV+R_j3P^^cilBX$4_qLtd2QwSV zqY^t))0J?r_nAN9VO|a*=T(-WP7-I1c+sZi9!9(3DNrA{k#x=4vx7i-RI%f*<6hdOL9TGY9fpM_yu zqIio4_9q$04eI43xZK5av>&;w%_eKOlj?nNTzo&Vo&U2M57$%W;+)bFTwt6MZ^By= z$w^-={uO_;mfbbtY?z?Lv4`t2yiRsBgeXwBB3fuy%%kv!S(7GD8#8I*)HyJ;lxJP* zs)s?G_s|wcMeB*H!)Q1Rm3OdiUEwacN;~1eSW@Ccgd3+c@w9jitI)P+j;h)>oouVC zb_|wC5hDy10hh{E?KKx210=GVJ|dA$FkbwCpU<>aswXPyg`v6`@*s+yW5b8GUD3Ub zgExN+n9!?(bdQT05@*6WUdbO%`cjE9zmq#8G6YZ1%I)^+bh_7~%+x$g>wqWN)o4<* z9}r)M8IFB+4tTOd^yMp1NLD|}J7Ybh;dN_uYgHw80nWoyx_ERTRqHf5j2nPiL~tq! z$l&XFMBw`}u1!IKMAU6U)us=P7p9>eMX}%T1B2q7cDkOjWy|5wQXA5e<~DY?_@aG+ zy;hvX2-D}AyugGe=O_W62)&pG6S!|x=rwe$J-`i1eLr;u-`hTm7B#X{%RVN9#R;@O z801G&J(N*nC{?KaCq-MyYV{j*sjVAD%XYDoik5TULV+biKmioz&>Tf|TlMLZAMLN& z%V{7^A-Lp{74|S;F!YfX$k3lVa(yWDzyJVJEiv<8)PmvSJlHFY;!5dmoX546@>yd} ziRn$szjM#OxH@TtI#%VXyVO#3mEQvv-DI>C<>pKb8K^VDWA-f)St|xWbx`~>1~#hE23mRCNv^;X;8b5hp|&TrK_YYH`2)-p`@$$O z5oXgAgNqx36-#&;_qC%M6NfIFo|4E4v9E|ioJ*xai7?DyV$p#qi2Z7Z>aR(pD-#o@ z-buSQbZhuweyTWLcZB{E5Bio}V)1r(xfsPC&n5*i#fMwS6bLN-MCEo(o#cDa;rL`8 zYf>Hu1Gc(55kip?DVUFZwD5!({yxs#ChdNDd7o;bIfj`P(8e z&C6^xTT;{0#885^Lsjk~TY(MeApaEoDFtR4hse@Ak zta3akx<@QAmb5f1MM_OgjY_v*)Sd~m4AY@k*Yt=uti80v#H8EOA|oQA)9GKlrXo)* z%pa`(+J8y*q8v*aHZ!68hgbNx`)1`ho*HZI5gO_2wgV?0&&g-=h>TXYo}XHr$PZA9 zO~g+<(-?8pNaPLB083p(@(ggOkp;EmQBmCBTMi6rGNsZ1IMxjd(vfDa+N3u;%Iw=7 z6iR)VHG4JdxGCIXrE4cnKaDd#RUCDa&&8P#L1!}c2TkW9ytxzJ9&=nvnaQAepAJ7b zhpAt`HUKMP%Z-I=-bj2h{cjSf5!En6+rS5@+P7UpFNbb+7`olIZ7iQcnw-o5?p-o| z(kmOfG3{j|gTzS4K`FL&E=+`J#Pyde#H9~<{W?*Fx>9_0qA0+rmR zc##k4scNe^fI@C4WOL2oxg&>+=!scW^HIZP+{b?cxA<=(H*-IWQ%K75%WzRXuX9G8;ktq?MZ1^iNMcx$OrG<?AWEoBqW;yt$%1?UlP%6T`m2N%Nc;`WX2rgWF#(Gv`+xr6w< z+LsI;n7!2*nk;OQ9m;v@W~&>8iDWYuZ0GTC=w|N^Go8MJ=u$l3&x>K_5}oW7tSuDR zZ}gTrk0fTPhk8;s-o{TI8=+o;L0QosspK??vIC|}Q?Ih_4!aOYx01+)X^+1rc`bEJ zgH{?rDn?DH{z3Cect0OZ-Duxein#^ifU+Ibo_#jxl%lQTOvD^94^7WIuzr-ke7YKyHqf1gmaPst zRbqP6>+BB5FKi)i(}7A9WxEa~{u5@DJTLd?!SgZ@N$L??OjgEz{OB2K6j-m>!4T}a zR-)a_n-wjk*T5L3LCOCSJ%{o<2nOHs__?nQuKGO*6z5-DIa9xj3Y2aL$kz z;4f5A^cdHZP)&BAvHbkfM&Xm+TqUuz!-Az0Ar^_me_Zv_(C=Qfz#c|cuS^M?BF@)Y~9 z&AB;R(B_osI!L3P)8V@utO`+!i9?eP9*z;yq9N1HX{Ny{Dw{5=H0{BHBVSg*bV)p9 z$M?|9&#Bq(%!N9VX%Sy+0+ciG0X@x=RL||9Y+`o`xE;{VHK3c@ZPv1+r=JQ>g+{NM z6u2X%LS8F!1PvC8-fDCk^}w?OYHe{^^+3r3d2aG4!Q%NZ(3gPi7)`c+V=9D_F(gx? zwBK=C4hi#dFx@}}+FHLjxZ^ZXwenPGd4rZEjz+S!{G8~F(4wz z-O)K>WPo8tn}2O+lEAq@w2_~r2qJ|QQiPZU`m$A*URsYrc%leb8N7#Z`mI<@#sYtU z+8HwlsLNV+FAtvCPee7yCm0}*jJU8<2Xmk>Lnk~zK+EXkevJxvFIh}d0>OUk4?uYb zwx>M#sM*qXpgN4YE#O5fncE|j@>&OnC1yZjf(NNUzrRN$frl6y#BWUsfH_GHHzU*#i09?{rGs?Z9hU>vUMJc#XxG@s^zV_4kA1@xVc&euB<%9C&9F( z6T1Xb=;}3GKYA!1@HM0`4{?j>mE~+#ViF^nNI2s$aDrPfkl{x3=-$0d0^L?e5)kaZ zshpKpSuJ(j$YwQU22gk~c(%gilL67?CM3`U^MFeTIL!!T|899fmcwNC;@c@cQvec? zxhbbsPUX3*?gy*U<%QcUsJ~$oV}bU3?gTdqHzw~-kXuP0Y=n_C&)5Bh(=tPqByV1U zZX|H|SzbDch<~O@GM_4YOMo=coW?$wbCCWGcJ;K9dHJQjK%5k{hwDd5pr6E)ik-ke zN_vzRaecWeMd=Km_Fd=+k^mSfmQ+tg*UAXB=2HP&Xqk!UawKXoZ{w^$Zmbi_xh}*j zmk{h4cu`M1r%hr@L3p{S?j`oSNcWEo)ed|~u_wgTG>U4aOl4%EF=l*)?M`Yc_Oji@ ziOlaX6I_8SQ{2f8gpfx^#je5}GK_h~ay?k1yNg;O#^47ShAVFyBlSzfb5;oB%>Sd}Q#Iu0kjs-%W6v~F{a`ul zB2z8NpBpKL8yl`tG$f?5zo|-55tJ!Jiq@8Ev7(MoH|1e`mozGg6jR9(b!cl6tJSop z_g99rV>A21CCtpu z`a=ZLibI-eF&m@T(ecklqJn5wi| zm*t_Nwie;gmo`-kJH@Wtb`%xodD>`jk5Pwf7H$BwxQTi~X*Hx9#6ePwgEEN&@Q$`Q z8XVm5oV}`DOPfyz1O+=-StpkoUxjxs+7Su8@ssm&xIA4?cfnM;ranCPZrw84i~csi zS|ec`#MBSoEG9l)jJdRK4<^=^#4VUu;$he~U}fg0PM&P3U7k1}T*IZ>XT)L5gtlt~ z@oPr1_I>Tw_+X5xRkfu}{b4J$7Qf3r+%^yYcnC+~jr=QdNJPhVJudym)cA>;Iw5#z zPgBK)^&u#=Q8QQB*C1H)%s!9J>9!iYHmk{j1Yobn?no-4Jad0`O8~IVo^D4EiG2we zcyp_644SZ*(6n+lBJd1tw<7RT4=X_s6ZC^VQ^ts<-<_t$8y}+hJw3!_aaH-1drI_j17iZk(hDU_no12zR{eUvtDDR!>kKslM z59=^EM=?P5lW7qxhcL_qb($!Y%jEsf{?J{u5*Xljl>l(3j4Wi@8RYmK{ z0P&Fo49K2EF+!e)GvTD9tR+8FV5!A9uxn1%ybvxHNK02>>QI8hxYaO^3e;y;G5uqTB6y~Lod@h10<(rRF$+iP^lu(-1B<@UxOAV95 zPom^__`P*lgv=ru=5-fQZmbM0XXB{l%tg|VAy_8?qql>|xRINRP%^mr_7}>+Vf1}*>0bNx> z&1$5UiMz>+P|Y?&iMw(ZYOg2Q1m+tq58sMhN_#QFf$zh`E;hX747cvSJQw8Mm&0x_ z0GwChRscl7{(}@zb1teyrdRnF^3#+2Q`ROjD`UeqBObaku@3di30GIDO8bU#dCRe5 z%#bi21E{y-%UL+jmIRm*SfpV+eu)fX-zV>6c2iZnj1twg$!m~lNkDX*t-4fKk1=el zSWq4S{A+*9+7o0LytQnz22?w7AF5Gkgy6~T)(to7P@71iYd-K!y4Q6RwG{IQGASm! z)|J^J`?irS+Ph-HwINnHZA%Yv3DMZWl%EJw<59~XZ~=8k{2VpbTUh3hY}ZU?3i*>N z#17Ua$Z#@omRxjK{E8&#i1t+WiH11xSv#Jd8zwxWn}snz4KtX_z%qqYM*_L5#Z&d#9#LsdH#2I6P$>R9b1ev5oQLVpX%ga?rCNUa=?a?Jws?K~?wT&-_iP?~ zrp(Sp%EbOt8xax0!nGbbz@WTHRDnIhRFtdv{;q%FylT(M8)LSYSj=S#Uy`Y^O}^?g zR;7md8YQOg6Lc0w&=UlX)7wuF@W8j0)78t#X7)1M#3YJ4m~WHj5v|x)^a02Pc@P=5 z{X@mU>fz*7DvjSv-JLm=$DaM&Flj49tQi7Lv`dM*Kkx?$@Ix( zWLb+w!QG|Z8EH%&Q!w9GT;d~xQ=Um&#Py4rA$SW5i{!rR_)Zp(F1CszbqaJ*WCJOZ z6nnroIT?RaacOISIl$dR1lp9W8>EE@m{TM$|5OwfXWeU+R5O`j2 z&zn=#NFg6EU@$^>x$@t>0E!9+`xhzF2#&$pjBX-<6rF; z-#|A^p%#$Ys`G&n=L7ex!ESSq)XRfEkvR`RW=w`+l21r`AOAmkHy^=`rhN;fh#}eE z;1k^2Vg{AO{}v4dnL{s_k>jG0Bx;X1hf3!(N-X_-y33050fzgT{=vrniBbejm85*^ zDrWZN9Om;RW)nun;~RSc(-rFxNK)m>`Lqi#Q($GjK<1sPysY)TJ|q!86Ikh^3)F)!2^#svWru`sr+pAuckP zP4~^6C(JHcoR{crVq!IO@(ZRF%$wuB5U-~(D;GR#NEdPZ^rMaa<~PuqcD_Nv+x~iJ z(#0IIR_d1}Y?8Xtt`$;5e?C3*HDl(e$jAuBs~Q#ia$cs_p3%M3rW&a`qz+agt>7go zVkG-U(sU|4{wz~kXHev_Y2*_xk{hO*6%+Dc8`m~*W$Xy~Z>@Jx+D{`Gu5a??Rng+W z6{i!P!+hZ0DLumG>+o2nwRSNkGo%i$%^o?IR8_|?Cui5BUzF|Kt7autVqcilYx;b{ zxroiXA%MYnDD|8I0(!nV`q*JiSdhK|BFf@*?P`0f~DjoYRwRO}V zRUj3%thnbgcaG<|hed$|xZ%{XiKo%VVYZY33B{SJWtS6@6qr@KQAyP#csdL@24us`w|ojKTn)bwfW&;-Mwp( zYT3!)3ok5w#Q!qWk~Et5lK+7+=(zwrvK3Y5yLP73gMAtEzUO zB{e?JK#a0{f7)Zrr>-gV=DnO+Q@0It{!*iBjA0Xrrc7Kk_aLW~Gz>c0HvK7Tf6Ckp z&h6xqx)4$-%=QrhzVO)?T_}-v;1l~PWg{`)KO(=Bc!UDtZs@Ca`-FL=i;St1_kL78 zREZS5kY6eFT1fd)GF4>eypmErhbpn81{U!B$ZFc{i+`*kPU=<4*^_oX^9%B|Uc=to z6fuXxB7(~2_Zt7ebrIhsZ*W~WWtz>Hn*Mu5aNjDf8>d9&I%|Y6b^5X~xJ55*O&CDE z;M!sI@I?x&@vO656^*g^v?bT_8*Z4wlv~O*2BO6eB)W@#tiqUE>MG;=M(@_1SQ?>ZijkwRySqm-Iz3 zYm{uHviuT{)^%i^c0y&Zw7E+YmhJ$&MWmYVq5 zdoKotrOug~IDR%&sXZ#GN2qI@hLYeh!+h#x-7d>(<%o6A9BUI-VfjElj5m`0<^|TD zkF(Lo4v|<}7LKoIc)_%j9i#igGC6(bq|3_fdzw#hChf4s?ytJmiHL&)Dv1_k zZcV}{GLj6gJ|(Y6m_gyWg}4iQOh2bg*l3I={gHG*KBm^qO=spm98>vJd=+l75goga zF-%X=BYslCJ92WE@qjEF4JzWlxc1GBzeXt%{;yVT`WKWQ|HvAXa3uUEtj$Ta zhD`m@XU7(PiqBAIAF0R|>>Kf6TB7#ulwJ6sfwsPdcT#T}Z;yQ=FG;?*c8$mHu6?0u z#dCJls)la(&BME_rMB1P&tALsju?JF@0CXy!ylFR|KexY;yMN)auHP0fr}g#5p^Rj z5}RdQSM1O!)(#nKU!&9JHk$1onkF&NZgWh$eY9RgI)WC_?mJ0g$KHZ; z@FK10W~&n`el%#&Azozr>Y_%0)y42fBHMY9SY7P?p4G*xG&_FymC%HwL(-XG1CmTt=Cl8s0ZH6spHS?XF)QCQ zYv|BPzWf5OZ{b5Gl1g;cTy7%tNvMBW0K8z2A`3KAo?vGdx~DZ%NjcSe#bZ!-HQzRE%D?M?*L?^fgh8pC0|3p#T| z5Y}t8Ic>&U4#W?n_1+Z6NoqO{M0mStMBpakOiZTlo(KcK9w)+VwIHy!?3+CgwVw!O z<}-K7Bf=zSh}e93vl*Iqi`j0{3wZ{EUa&g^v)67^B0SspqfUg`Z2KRdi0~8QQ~qy# ztu~Wjkw@xAlMgY}1}Cy$%@&9E_IbU)=cePFJD}w!g;asCuz}nV-)uFTEoAUbPl*5c zK;(tvn~k_LkniQZU3~L%3Y-V#F@?ci_RmKjynY_;l=Nm3^aF_JH6x$b=tjPbQ_h#M zIQ0g%AlSWjhY||``+svDvI^(P6N87;CUYpS_b0hB;>;$G2j|)AcAJf6p9zl%v%yYi zvh)@Pwasd`In8zy4rZ$fH3gO|I1WRUvJiswBSTck*F^~E%@@WG9EY!QVeG+$kttso zozI6bbJ~z@21v?4rt|N%-x#}YyfJL)7Lx;yh_dXNcZJVG_E+QF|C{GSx2%u?Bs)JZ zZ<5bbSnS1&Xb7r@d&wY;*Ow>En_WtJgbIkl>jgxa)O9$=pn#Y%1Pdyw$!oMj_8{2x z7L!4cQ$W3XpWEqmI4xeK-C_CfY%xZY^Lv2Pz0+94*M^K15D;LdmXac`S;QVl`mC2{ zmhfGK>?D}ZW6KTI13-K&D|QE~y6nXw96JzflmROyago8(Yr--K5*Lf%a@(<^*xjRV zzO-kVq#Q(C&@Y^kBT%rAp4}jJEOEqW>}s3q$zuRAgKm~FTBzrxv>bEle195 z(gY+I&P7AElei`7SvkWO6IBd^NgRHQ@R9IviMV3gmoLYc%4xu7WteGeeMR$$Kwypd z9QOY55{FTQcM)Vwth^`=&GN&#VB#QO5)iIVx*{<8e^JgOQqE;mF<37IPn3s2@8^s? zHtKZ3;{_vx6yfnF3iQS@olc6JkHMYfm=6%}s+O0x!u%85v6^9+LP=4M<-k%*clR+! z^CRzKLD5D&Q_4X*l4hu+*rLQNcD8l^B6Wx+FW-$Mn-N@e-`w2UzP!@h+$VB#-M;Dh z1y9ToFnL{A#@!WR#L+4kVaO#gluC3r$_Ox1E*Hz^DD}qVR521WKX9DxHgW@0xw$?l z?x?Yv+~WM{GfLCBex!=i)YVb7jn0&aL*>oKx63A<#L$9d`z{7#xRX0cEYr79>1>RR zR!{eMljfu~4(LM7;Xd+r;m&dP2&`o03@lAs$YP>{WjWMQn<_3|G%-2*I6Q>w| zx53rDvG3nGt^ae_rzOXiYOEtL8sFW$99k+t( zN|`dx(IZB=UspVC0-=v+B;{ab@(2LddXrE1fpl^T>7qbPQ1IGQ;a|E^`Tc$Poj=}x zQ~Ggg`t`K6d#80Snw4^Qm6{v67E|At^;$2hNif?yR*M0}o*U|CgWWBpzE0)EzfE~& z-+h}+GxCxxX89pFdrW7QWJz~GQD%1Dl(v?-_jUous!-h8UzKl(reFK1@o9rYoz(SR zb98%(y%VcuQp>;J{uF$%<0+WVZvc58PilkNRJL|!uj_U5ozh6T4Ni;2A~^L$nU!gW{1%uNAG#v zusV92w%b=pPLmwJU^bXcrj9D9vyn0(l)+@bBw#K>R?V^gWFfZE%p6)y8xuq76wN|4#c8VrSeIjumLBSo%?C@Rh`ECz(2A(;eJ^XB*pO1T{o?BsbNTqHTBH2$wU>&`wZ&jRI) z)#ULxjYhlO;Wp*@aCx|`r1o~_!ESP+X`yUYW*P`M2 zq$QIqX@5ZEcRV0W76U5v!1Ws=5E2b%1U6`#&^S9CWvQo5gpWcdeWx6S!Gh6X^m)A| zJ%m%ZExbO5-XXY6dY>873oF_YDB=F|M?>dPcv$%pw$vt{&+f^~vs(qUQi92bCd!I) z;rsrhU^SrWzRjZnYyqnSTJnFhrKZ2aQRwKQGD*i>F(W)xKf->izFz zYR*oTnvYCTmkK4brWLtT!!orYH+E2R{{(RI{r91FLZ^WmKe)foR`_M1l+Rc*0T0M%Q8Rbk(BR6LXZcA zpPVm}AuG5gYCOKuP0*={Pa*k*nMqYLfxusH657l@+azisRB)gbKyJq@MyD#P*qP1rr9I5+)JAR!MF<5;zDN{NNzf<-51fMR znwu_SkT@x=*7q!1o?UX4RY?pRX z7rV4FO-v@EE7QmdNVsasZFO!{*km{NBJ~fUugu4&dPQ5RdxLR6lJ_ievw2&2n)mpA zOB1iQfpTllDtT;aB#nz{24MA|D$l&uJzz;uLpIKEN0 zQ57=z#ebglsH8y%N|T~lxl9)LjfH{wgf50v<6He4)C<~|8lI#xQbejl)-HCTG8zVv zO#&AIB*bJ-aefiEMVZUyvKOfq5H~}Hyolkl#DzQ|QDb1@gD&MVmE1@}K;a(`PB0Bh zI3YJrL^kS^VX)xP82eDdS=)9>Z;s1?AuteuPkS<;r$JC7LD|? z+k3tGWs`CVN${WN9&6J4%rjTlm8$~JBovONyV$jl|F@A)Cx#Uql~ajcgqx<^F?`CH=Mpk=fjd7nNu zZK{ZA4e{}x(2aLb+IC^)N{Td7)3}cTFb`;Tk5Q!;E-Pi=B71@zuAGjbkQ5hH(xiDb zIwJ$(;4mv9VQbRk_~E`H+aEqg>e!z!`&!5CVb}1KVzNg_HYj)%!iMZ59gOcc%&e67HKUcm7B_c(a^t1 zag768{yAN#Dx^qmqBfWRT2ivXE(_5e6e!c7$&+ZH)x=)h@`!2Klg2!hGbt^Qpw7;m z29s<pm<^eHN>QJE`6K0zO>xaSK=o#$_^?9LYlqo0$ao~rzNgV;j-Qc~13 zs#+vnP0m7S608ac1afPiFA>Y}u+ z7pWs5gX!Xvy4mV5!yV5uSU{4xK?t-VX`iG?pj)=2sFX5Pzirs+__>|#kE%?J=>E(p z_x2*J_#8yEx}J(6W4h0oXS^Rxz>EJo-tH4H7TCXbmMnvRpZ{J)*g5$p{z2?rS&^> zv+&9AFY5WcXTu-m|MAKL_+;zkt+n_}>oafR4Sp4Q@MdBj-aPfi%Zomv4*Z?|_{;u_ zCcKKzd}{Ox?xBTZdHEfyq z$=p;`Pwl9x_5XGZCQ8yNp29iYl&Gmg$?&^L5-3iRGQKaMP2u7f6`XA8Sh6Hsp_7=t zFhXL5fLQ5p#=5-GShpXW4)Jjk8!LMRcARdO<0#=N*&_ChYB^rjvI8>zjmg}T;(cNf z>D5;*xewJtC<{S7$~D@k!pb1X1I>xi)TfQ;rI zN9IX+XPsm}Q zlF|WV*$W&A1%`&>1#QfuJy0r!yP0sifQl3nHQ9x^L|iN;!x~zN-a=B|AM)6SYyl{N z(5rAuRAI)=5;Yow=CernA&7%Ma70ofIu!lQ1~v{Mj3BZ!pV)b6XEjliH1;*}N3wuj zi+XvF7z?n@3A9sU4@o&%F8)tH(^~n8q>PJ1EsKr>k8E;HMzxVz?kdw$rPZQ6U=on0 z#tndyb|9fJPm>e0$kXgOu6OwdXiLzs0R0|EdWbrbE5>qCJc>zXKEMxQCFxiBDLIO-bPSn8-o$xp zTUHU=bOatH?8eZ$Lgc^FwahP)0sJ-bO@)kigI~AiIhdBY80eBomN+T!4CkjxT#vz% zguNB}EzlRTCs$qo8pL~>74N_{!jICOa`~u@@V-7x>>3E0d9#Uk<@*vzK6zd@Obv$@ zWQWWrnbGu1>zON}ncYi9;=8zstH#grQFV6VJc!|$1}X9}h0VfC%7@D*i=WfMGur4t z8@_&zSV&Gwlu3J;EF{axJhai<#rGN&8WyPNNJ~0_X##mAS~il;L=?JDDB!t`c)b%+ zUL9ay(O`e4x+K=OozeEmtj0AXh;|5j8^lqMu(5rsQ5gntX*BGnv0YueoB6iI`kFvb>wX_mF5k+o-)F{T}%8D z^=IuK@;79Vw);)VLh%=znt&)xS;>{W*C{^nO*!c;={-qt8Kfmo!d={ps(tHP4lE~c zRP-XVbuG+Z4WG;A<53h4z^bBb4bu{nG<>)PlHpbNkx`_7KtS+|m~NS?_|fHP+OfqcJOt8G!9=XX%G3CUz7H-`NSp=f9Nxu=nXvRm7o z>o5P+*}r)1sZI|Sn9IcZ#49dh{#Fr4xGG!sM2-Y95Az!(3@+9xg3s)UzgOHqT=7w4 zB3a^J1=9j%3Ux8$39ekj1MWnG5!z884YGd{YsgxvIr%RBC1wQoh-Z-2!9 z^eEu8FcC}qoRpKdQm&|4f*C9x;#e{$c_<3!#p2!U z3+!gP`AnlaPF%sNo2UfUe4&^K>|UkC1V%KzoWft8-cO<+D?_r<5s!D{I=wA??+36O@<^2xPUQt^5Gv3Ov9cXR}D(s&^Ga@EA#Q zNn#$ktL`yA+ws5hp zdk5Gk)cStT*r2?8?ZScccvCdLJd-`g4qsA^-^icrkzIgyi9W3{=^PV>4=3DJ$t{07 z{TM!+A-=Wsa>4~!;C%VoFYs$zKlweqBVo7vo0zmehd+J!_%E(Ix*z!DMo0J5OSdfA zN3=XteD?!S-5(3knAc{pd5z{gY}kz%c}j!ev_F+Yd7gT`*Uiiogx#aG&sZ++&z^dx zbH$FD-v)&egoshsD|_K?TjWr-y|lM{)6QJk8D6p5mi~)+R5X1YLyf`XjXv)=9XVw>jmm`o0jN8xsRx!K|M+1?x0XBFY~nYyNPeU?Dhx3AB(gh(qU+l_oF2hPX^^ud)VSmlK6?r<%i+K4I?Q)$eP z<-#n5VBE8_Ja`r*(~wQi!^#`n{|damZD(JS%fppR;HE*H54QliT)3OhqJkIiR>_=} zYR(0=)1Gh*Po}{p`+|)5tW>ulhW>aB=ZHACGF*}3AIeIl(*X#C7R0n2JtmiB2Tq~1 ztdl;f`|$-DY>6G zQ$rATdFm7?M^zVqoaV$U{ zAnMTb$VVq`GAlGJ%@)f-GnY`VHtJt_#vgjtkPI<_jD-(bgvDrG00kgsT7-?jNEp5) zn6-1btuk_VF;y^Nz*cc00g*j_1E)(Pk5^Scn_N zwc>Gt4FqcK17b;F0;R9}d5`ckFHF>hV2h;BWcO(Zx~bs7Gh}LDFnxR<*(1i_yR*DW z`2>lTH1`u!{`=OkFirzlW|9N>vk4q6*?9XITQPh|^9Y#~+U&0@hGH3>T<kP)yW1{%8<$b6L?D2>YsrFgD*yo4B@Q5Cr9QjrHVf-BUvL3fYnp8f%^-S zp#6&4+(hrGn7}ROcUL?o#x+tg;%G6BPaaj{FVOxn=WYI*z=d;{cl?2@s2<1l6){@x zS#?gk7`DIU&v5B@e3|d5s$NDV8()u3Wg}l^7&Sh5I*l?; zD{rU*iQU8CA~|uF%n3zWbMcC#^RvXx zE$6=^0}^7O6y<)ORL(yxmJn~vA|?s7e!@LR`S;=jb<^8aPu7iMP0BeSkj}C;Db13y zpiyz2X>QVttf8r_`zkVf;0HvHZ_-c1w}CCe1}1Q>QPGq9!_`}GyDTIDqx1Ci^oCgX zVqQgdadEI)m&ET(O<{6?M9MEq38MTSFZO%sZ@O=zLtv!#ok9{i>5wJ#iC8{F3*r$t zFK6=dQ1rqkPF!LFGruZP^w7bbDU+$CjS4%SW}{P({a*ejZN9p=P==EDKjDU}mQ?{~ zB@WWA<`J(MGP9$3W2v^;2;dEzO57!{GQvv>c5lkZ%(vVnN$pimE}iGq$1wk=yCgoU zdBBH(k*}ERDLf)+76(RgV_g=!j4F9AbtL5+*DLmVYN%`z$H-@B!q;_1P~;m`(e#N| zX77(&)wXm;@WkQPdhs63v+eZoUjbv-x<$m08uHKeX&1=dq67`BJfIfinAPli>M)#0 zQfy8=%}gZ&`RD7Djf&Y~A8tILLxDcaIqv5j%%OppIR^%U6TO<;$FM0+oLkn^C<%D1;1t>T8!{=H;$!d2wR`_}|F?2#MKRn^G{#5g>}4`Y+U<52VIud0HX$q&&T*b-!*6bp$tcM&{pC*!b)}f%~d; z?`r)Y7>?~l2Dv~;-G7w|kiivC$|HGlPq<2F9Z3aD#g%J2vsSby9e6)FLHBFc(Gr!8 zkF{6u2ES$vlWXuRyqy zyt8z--A5IVJUXP^OO)@0JJIOLGv`6bZZI2d2D9DkunU6H=S1LxQsF7~ITzeIp|_{Q zdjtyLZNoIoCggG0{{L#1?-&qEKO`F;_&~1ZJJU2eVH$q|7hbORH8<&&+641oj$OcFtFDH$SlBAV)jB+uArX`3Y$J}5$%(&HdX#GLkVdX8h!>7VxxGVf8eLZG}(<&I8 zRyQ!xkZ~FWpV4Ztc)x2Rfl0(_GF#FuRvD5dH+RDPh9L@=ND!)Gu;RE_&8C0bWfu5S z)Suf46Up5;3?oT(dt>Jd9|qY(V!}xcyxqR8+0oJ1Ju7<-9l%~W%ien|K71BnLcLQQ zW?rDW4Fcqlc@8r?hc+iv)E2>_H@S@vNP3(~kI`rS&(DH}y{?@${e;R$1Cn6`NWCHU zHF)eEryY8FgAbOtCAYUJYtrq|P_`e28-}#QwQI12f|~N#m6>}9{hB;lAU&|-U)9ve1~qI)8q9hO>k5Gr~_ei zn0_+pwAGFmy$yatALM&ZyU*q@T0Mfz`TYk10#=6=mj<2=Hy;Rt(*(ZXk3A3_9y1x! zXCaGk?=i!Hz{TY-mz514*nS|?cZyzih}niUxk>N>;^*~2FYC7G-9EDwHgy|d`xXJW z1zu49@omxhgivGXWx%lazk)_|~Q#ZntY_Wyy z6*u|RF%5(t`<5f|{pxAzCZGCs$?SEXI)-XahvU1h5KY3UCiMVrI z$+kSWGY!Bx8Vq^Z@Z0Pjy~7H#I#_fLyUm`b^mxs_A9Es9z+V1jj|d~8Aq1=2p zP+nR+cAv>-&oh0GyFwlgn_$-Zj+$P!spBz!tKH^5cUN?jlW;NN7P_4)IdmQjc8Aqb z_SAp@?dL&p$8ZavNVodzK7$^jf4J10ctSW}^VLI6je6Z{Q~L12`ESlchbviOG#kj& zpXLEUJM+l9Jxws#V_{%7GF^xcBej++I3k#r+ow@yds%781mQw9XOg57$H zNxdreMj23u&mP_tNVk*_i`xszyr_2l4_X$Y2zyL*! z#iZ`FIDB54$*Bj`1LiBx;~@ZYTF`CS0Xgw_aU6W+|K>P!l$5m5L~{ADH?$XqTiXlU z54IOox3m{ecY1ALyz_xR;jsg?fdEICsx1Z|I)(2qAdGkxS}fl!AkcgKTP^49kHd9{ zMMr-jucC~m&Zh%e$OWlTv$+oE!DP0Ytp;ORQul7x9}jm*i{Z$#3i4}8ZvswPZ*e<( zI1e7^!w?k&8n996c3{W$;|d7VPsX{4@PJy7=R-sMK@6A#g2`xr|Hfl>J$$?ThLAlI zu3S5r6DlYNcbYTd=W~3gdiZxA4@|H2$HVk+l&2}(X&|Mv)zNt%t{ZOn^?+CyNfd1< z>oT&-^~b}VavW^VJevs!2))mO#0EGU4SJxaP+sDQXFR2F`}Y!TFPFFZ9flLACDgWznMn;NQMP&Oc-;`2Al?~ z0T3*MPw%i8Y>8DjRNrzuCAr><`-KSF-e7;?MAK*lu1&$D81Cj1w8dZ@)1^K0q%KK2%}D(jm17GY^MTBFj%#Nnc#nf`~?{gOb)e5 ziu#n?9RtN2wgRAcwC-QWJ&WD;2C7K-74jst*oRHvVkv>_if+$gAj61TqPx<=h|3%p z01+d$;15QTg+_u!H(6-ndb2zYp=3`<5yST-C0x&FAV^lOf=&;MXIB>1gXhU7Y695B z3_^h21~ubq(>Dc8!{=i6)^x43sb}d;poaJ!*FgV2>29<|J(=WVm2+^Uja|fs4I`Ph7w_0W5-F0PnLIl^YBH0vWgGt-sgp;wX zH0s)$A!Rtcw|7cu=rB113z$B7w-dMqixngzNWyJ;quFfsA%H?@@%~6(zQZ9`0zXM@ z*vIC>kJ4(y$kYy(s2xsRx7}!Wx*odSvp-Y`7!gExeYO-8%5j2WH{C*#N%}1`#2=U= z+=OXh;@T^L86AD20|N`|Z7~h&!R>IuL;&yY{xSb*KMk79=l(ZO{vW-Eu((0zK;DL4 zuwnph!L6znYu|H^&f{Q%=^Qi2n{D|u-{~B8ceDyO50*M?`7<=_AQ!SyVE_hX zM&}cvvo@4bE>0`P<)*UFBfh=f90>beY50+)p~r|^w>-G<^Q;JtL1+x%hi->ek9<5IUTsz-V0izXk;v$DSZ`Dvc9w>> zHxk8awOaU+VZ;vy%Wyr1gh^lgy@jQ-^9y*?hEU|ShJ;wqC?lH`+J$9-*oY7(thMG9 zLI%izPN4`9*2q>Zhi>cubYu|c0pSe+B#Db5e1~3(CuBC4M#H@_LG-Ipd!oXH zMsFP15EC}7gtdMmA=X&fdEn(~uV{}iN4ggT&vFdQFj5;4u7g{SF~ed51WJ5g0WVwE zQG+r=h&T39{ra~3+vP&~_)b*7q=ZZnA0)>ib=W}=GZbDjl+WbSIUUJTlR^L!irKTW7|R&ApCkNuvV@C)sPIE*u7{HIr3L3QRnid zg_Gf^mhIs%=^Q7EsXgU{Jev6)UH_bmXU3; z-Vzeo@)=r2d;p=>q5@hQ?M`hMVj>w8Bh@hPfQ`q#iQ;-mc_}21p?JU@Bmtbbz_-NV z?J0Hr$URkTq9(?#(I9UFu^A-$xAaire~3!sy3@jR(oIf|NN%F;M<`CojKT%ub^nBM zobJO>x^LxZx?Fb7BK{r~$uA)~?tYlq+yxx#F6LECzRQ5VsRgo@72-#c!Rj?I7r|`> zB^81|$d&C4s)L8%>(PxCKVU|PUotA)AMu5*)q0SUvRO=HheNVk-|~DV)R&c!jLb#f z!lgyPTO3ZYSpePVDkjPQxGad>egsB9W(8!h?NI)U1CP*2MSdOf5i^j(qmlCn7xOVx z2B!{uN;FMsVcV&OtP8JFMUr})xSJa-j^m=pSWY8;UIjVdRrqLN>5y$~2UcbgdT(8$ zvWH)dqjFZORPZJ963bv=xuOn-8a7fCJFen=_5>N9^RQ~y+Lqe&@x?ekJ1f4GR1awU z8=+NhJDW2^mcO#dOFZ!c%np(UuLz;CqJ}&~Us{*7+Esb(3BQZLnKrGl>#Fi!s>dyQ zDBrh$aq*fa>afC7SddWCeVzxF-y~1z!l5#b1DPqpEdFz@cf7}SUlX;Ri3AO4a7Mv8c#Df+8djk>GNl!g2I^p(1nb}4Z@6kLI0?E39v8mV1! z-cI7DmG3~4G=SLXON&SUnK@YQAX6o35Sc1Iz?25^gj($kivLB1MDtvxXR3d>Y{$r6 zKm9G;`CSh)LD%pGCA(fZqjb(}F19&pdUlUy%F`UpE8yX%yqg-qYp7vdj%(TW6{L?2 zy2jqkL!sf~cQ)KhyQVky`~!K?`+E}6+~tGvTKeI_Mv4^DlEK6H}HL3Z{`oJUWYV`gbgH~N+-RTG>QHdpO%@c>z8mzN#LhXb}2>> zBlkYv#6^leDwEwr4drGLrkP4_ROOPXWG-iPC2|!1PkvtNA8|ua(^L30WD-A+tZ5*8 zDHq?+U7`djdZ+lfVj)SDGzaU}ahVCNRlD#as!I5C!l&7>ehBlV(q7tKwG?@JXYZKXDH6}YF?w5Y!(|7;vM zUY(Ib5Vu7X?7~KRP-Cy&lz}U3RAwsj3kouSJAMP1PyMWsKFv{?DJi2QbsWC-W{M*_ zU0bu5@{^e~+WN~(wCid^K?8N}V~OSxc&$(Yq4r36A>ne^1x$vdyr+qZ;9FU))?Q-A8t5Ob#6h(xu@Z;!0sF_DN9~^E}Je@+=K9WYql~HpN z5~w7@ER87sC51?cR;+0-^Eoi zR{2(9|Ifb_59A|hJ-MC@%0ORTJ+-?@UEC>14c2S|XDH?WQ0N@n7Q_5Q_pU^(9f!(? z9d5Y9dK#v%$Er{9{RqCB{%PV~if^Kxk?4$cpCMNrPS7N)6v(?H*7C#G#i`mGqBENm zg@!7vgA5ekEnj(2G5WeXwL_WO6UtPiZa5*4KE!9hD zz2qBEc<)TE zD8)O6gg1%*hc`QSFL`s;m-yh`U2F>8;nzJ+O-OBsxJ12w;RdGq(l?6Ob)a!}1Zfrz<%!)>7v;Q<>I`MCP zJcu%P+dY`M;wNe~dZ73N1TXIg5P4>7tFLcxJGyWgu#3c#f4d96WkYj)fg6$pmTS@> zG{cUzb6-amU0>j8tk~ZeoMpd#dU^XqMsdf;zd-P}xG|O03uY^}`DSCD-r?{;{)NmB zuh-&MIx+wHQD;FRi@$yvu`sepEDqo^?FOS=$n(i)mpmKfOFyu#lQkS6*s?4Z?ik|Z z;ef}e+337wM)&f{iV{qk5bVv)-NuGARH$O1I5s{m-{`-Hd5g;|;OCKGK=% zd%KAYr6p9%O#>Np?*oD0;KO@8KJ386gai0>_}O9OATpqSAGj;nXTc&42N~>1n9-oi zm(!@_8l&gQ@JuCmsvNA24vXY~V2D5$o`i&ncQVl=6rLMM2Dn6=7>V&uxC4NHu7DFG z4pw6ngknvsmPsZ6Z?tD}lNpj`G)(E6$jhQzQjDbzal2HZoM93t#)fiEw+CK{2Co7B zEeyeD@!Sx)>J{!XEI`3kFL7SF3eBFE>{Y{37hJuBtaTy(5v~(ac3u8Og~?L$amGXK z7Ow_I@Sl^R64eSeNz1caF|1%_`PDIK;$;rUs(ly_ks1&XH=tYd$C4tVWk3iy9ViIX z^u$@Pufpyk7Z;JRRP8~;Yh8=~05`6eC{yGx+`$9@mYm?GgDn-SF$Yk5BPriPY#aGf zwnGBvNQy-p9I*AEaWEHR0n^<0~rV{Wdk6b7(&N_lia29Ql*fC7HA}Z1!inW+?q|>on0n zm+6IUhB^%CCjh!Vvs~WP?g!oDlGNo9QlvEmCVTpbOB?TczOmc0a2D-?jh7UhuO(G3 z1f4QwTB{`k8l$?%Q-E+H0ha*(9EMZcL=x~%Ebook16I1?fsnT@5m+ItT#Gzcxh`ZX z8nXzB5K31nPc=*#$mi|h7bVTWF1hT(J~@gmv6Oi8v)_s)?nUHhzT!d#lng7$NXk$x%f+6H;M<~FNz1{2B4vqwP%=j>vlEat31mnkeybO6{IU) z$-0LTyj%TGiz7H~L@4QT!N%pL|E~& z^26d6l?TNqx%sM^4Qjt5u6KNU?^L@2O$dGiU^FPLO$(A4ruNj24XN{XC{LiTyt z$tydNs+peJLMbjjzL^;o3PkpZeC7QNas3em{^Q(>Qp7Li;f?OMIQ;8<*-F_Y>hDe# z_=hlW2bE2vZ{6~pwW?4acGeLwy-GnItT^KOhZIpPY5p89_Xo8kNm3psc~yHc4LJ~h zSW^1M>5}3P+WFdrO5f}fUn3phJ_F*Y#|Hls{?97=A;LJkN!M13^F^(sc}!BCq0%n= z@?zKhN`Z_ZS=%-33usR<<(8s*T~xlW77G3!d+!0=#F@7JKQoeCFc3@+^`4Pz%T2aq z%LPIh7kUYyCSbzIk_@KUV4If2$;jP+4I!aJ5FJ8*kPv!t%I>D`re{mujBVsX+9r_x zZunng8A#pl&6hXlMkG??}*Emp7IQ7jCd!llNykq z+##1X@}J{+-h-Y;&m>SX_D3uL)e`6Y>0{7fh*NlTycTx@*U6Z#Auh}vIXQcT;(4z= zWL5(^3B^o13|E7PgipuAmiO#zwkmv|I9rKB_RODCHYEkL#eP@I$~hBrC6v6#vZ-@s z4@p9SuNt(%bFO5HXfcJDW$$s%lm;%2rV)6Gr<}ONSFdTUSX(;E7s^p_GkcOs|9CU7 zM^v2lf~33HeWh|#i07Mk97ZcM1S7eT0gBXASJ$BbNY$MYMm`m*{88nLY5N}^#;JdB z8dtl0)MfqdeJz#81c%YEvqRY)8dM(`SCUlE?38HARxD*z!uq-+Edk^ipmvo!29=jo z{Xf;gX8^ibbyjFVO??)JIv^n*-XCnQ~!)Gj0-?oe6Q;+?!xo zxLo$f#L4Qz;JrNhTj@0vxypu7lrb{x zp9kJ<2#l7!5xwYN5y9S!Xft=TgpNdioW2z4MpDX>4t^YX>IqHS_ns07eaZ8vIz7%f zPvv7MjYn$GG+!b-wkED2WUz2mO2(ks$ZhCQR%JVJZ=b~^{f?ybY`Uffyy1!P+*=>AUgbo;2tfDM8}h@7Te(*| z8lCwrsLVqa7hxkO&F_%AU}1hiQJZ-}>MZG)QQC$d-ZPdtq|m02JEUI5T|V|%xix&G zG+JkYcO;y5|4TA+MoMq#fF_hfyPHnnWW=kykycoe?rCtmF2}Jbm9c9$QI*|W>qtUNt_>rDdN2QA`3$^zlY zxB9Vhupb2=P%$fe`-;ET$GrMqERVNtt3bIz9rkSlzzdDXc2TxG?M2ibbd zKiF#Yq5=%;Ey;dGTq2EQ2`U@MYE4ral=X2^IIE19Crt`F8hN)83Zb~Rb!S=A*6m7X z<5(W3DRCveZj2t?A#AJoq{GU?_d=gYnV7;=)*Wi`(UxQ2<4VB(DACew(gx?}oSf*m zA9zb?g>o~GenPpgdQ&Q%RiT4EV5Y{96>9g%ELHBWhScH*=~aubtNm+_76w650Br)2 zg1D&sZcS1U?&O;H#GYYZ(Hu5L%fhDhz~d7Y<}~+42Wu_p$dWDYAa|iW?YZb6wspja zvHb$8YnqODnmvbvRS3@;iSI-$PaXtX%6H-za{o~hAaFbW5qQq)S0!SDg_hy#!k(UQ z5Cf?H@C*8rhkYv!pe*z}h0+4kjOaQ8bY`d$G+P=k={~(WeeIr6Uwztrx+WyFqAPr+ zu{PZCX~RraceQ~Zwx{gVtMaFY#`K6!ZjUplBxNkVJ9{PGMLrc{{xsIv zr0Zu=8`+;4_#@#P8+xz*^lDDR{BgJ3?P?5Y@XRbZwX(Wi=UlKBU&fp9&9yK4Z%sKi zafJWYr%&c+ph)qJzJStxw-NIPS_5d2mdC$Oi|mC|2)t?usE|Olk~<;C74OVRai-dB zCw?w#W=B~U!iG1rhHK-5-GYH674gyk^EmONK&s9;-%&`<7{u|81@7<0Qs-Se?zN&- zFCo$UPJ0sZ;Puf0g_tRpWaKB|1pIJJ+zWnpP{8kJ)C7_~$%aU3lFJF%!3rB-b|T39 z8k$q9@zf;(cmK;r&FiQCQ}s!|;psmb`d}`I&w=caooaQ#w+NSTq8-t*pE86b;q)I? z0VqyC(c_W?KNK=+-}i?8{H)2oXAt^f(8y{*;wc&A(yAX<`}hkG6Jb?PPAq=s@;{#U zUlM`o8~%63&0niT_0CC7al##Bi^c2>4?v;|xkQH*SpqTyrnq6vb|n2@h!5YnA`*W) zzgRC@yc^X`xF8TGK`Exg9j|2zvVW%8N4p|4QNWsb-6C{jz0lML)PVkAz4+x8p=)ad zY)h~JQT0z+gtUAKQl2OhDemyp8~$rz{F!;>|2x;juaqEi;*;z!4#vmYQe0YVF8pFC z2(HIw!~EnzU_<9b9OIWu5E@=KB?;)@c5!#Mn|{s}f?c2&EGkWe=t$pFA-WIr%LEV= z+AO~C39r%sQOC|ed(b>0XKvC^J<#@{A84d0*ne^69HNDzLS!uz!DtU!ml z)?WY%1=NQ_yP+a90Ze-VB@U4^sf(sloWm3kRMo*ra~zbvXG* zbLn2dBmillx!5;g`@Gja=@^WE?q2rq!Pl{Xunfp85mt?G;+*zmNR zFZHe7(yCNQ{q>v9X~*mfIutBK)i&T+z5^B5moA5*u&JfwadHVfCZc1I9h83>G;qj? zqv$Tcb{E|J49yJT4G(NP{(!v%aLtqSd5~sK@ee{Q#Q-&;dEb#VgD^O7Pu0a!D=|^a zB_U1K=W)snkwrURxdYq16BN`P6Te@4X_s~$SfR~?3kmAVJ1X-keUxqFN_$Sy{iwmg zh6V?`+}iAs5{}eFeV~#2v8Qd12a z3t%E3O0MUdR~}Y?sXcm1<&3NZ@4Pj*8dcq3nk03u3&$3@%4kt;RaurdMLLwhxQDkI zO~OC{aH+%R#lG2J2S5qYXl9;CRExu~O_-&{TROuRf$g+k!tx#3NP`Wnl{GLZNk;vV zvzP&uKAl=CSL0X`rizxz(v}h_4M*O4a9m372R5HM*0f@G6X1@zn%09Gr4&zzVNES| z(5=Q5fe@rF97f-Oa;GxEfXNx68yrZF9mTaqZkneUrT!fbpK98u5s@LwseFq@(vQqz%0+udKUE<-XQG1{rQM-LJTW0qJXDwh_DY@NS5a z+BEE2y`Bm)`fz8;(gv6Ynfh~8$AuSFzFa(+ep+LS4N~sH>EKzIWE?AWcp8otPcoue zp?+UGSXb_4MW{h6jEWL%JTOXPDBB>E)AInnJpo^pHwXWSctt~~wy{7l3@8p>18}Y9 zHkS$gsE+{(mhaq7DipppHtl>;Qg|pt87WeSoZA>F=QZk5s6ML*a3Lv(fv%(s6d$I$ z8F_c9T`hE{WXDij4$*YYFBLu$Y^aJVP5`gBW}Om3+rv&vp^gTzkVYzf=oXcQi(bfv zFNlu1m)Il5jY_1_OSuOZ_ZC%`sia75?)*yOUo1^kp_gX(YGFp6BLiFk#`xI&r|_SF2K{3 zz9DkC_GF$S28O-Q1Fq&NmTa0-hd!ImDx2V0YrM&LhsvMAzb{-B>hZx?oBkHJdgJhp z!f_`8Ln_;%yf^G#&iAnCbGAzD(wBC5hdb^j=$YZGXbFXQ7`-u~d{+E$M_^!XEq*=SIGY=Y!N$JlLXdrt;iQ z=(?yko*y=vUdc6>gJ@>ObQ&7oJ^D^an;Y?x7vp`9TU`^rjQYT(gvn_!FW6K9XO9R#}=7$N9>mve<*vUztEkW(o%!btsK4 zTLwgKJ>OH%WzNvIA;H7CvO`rTA_iZF)-~wPQ(;LLRW}OjU!_JZUnq`yYNoIvV@b(m zZq<5~Jyi)v0@;;U^zJQI7t!)n3K||6Bm#DpgC70}$dhB>4`W3G9iR#a3qmZY(DlCGV?`aD1 zob~qNs!xTT5!RX;HLAKY9#5kX>f?Ei{x)I&_t4SkJEZQj|DkDjLNY=AD%lm*fr?A_ z3C~mv6E2k6>276$G1oI(>0HlKeW&`!4fF?PYRO(@0-lAWsCYqqUDY)zb7DWI@KLuc zxK-(nr!BrdSm{r1gfU$D;WRkvMdPMx&cYMhJwu|R@LF<$!fC1~8*2VMoK}Nr*v3 z65BiMS>^8y%v`VQPnSHc!YdNZ9z&liMhf+Q&SG!7ge}Cnk}xH_{QZ)iqNLb7v(QlO z2Yf51!xnHYr$z5hSO}*|drDWSx*;@H4W3P2Wd^{!zBPNpOUXsumB`@}6r)TlcfNGdV5LLS zMM-D87}q1O)jSs5H@SCAbHuAOR_T3og1Gd%+_zQu9jhzH)(4$D)Q)|NeMJ8Q?3;9+ zl@HsmI7KdUX@j9V_gF>zU~3G$?Ce>ui=|uZ`q4x^9A9Zp+sACSxY<*z2fw|g)_9Js z&$xx{i#oV#x{6ga-21uc!C!s=(DYCE*?9fGSLGLaHc(kcHCJ`81P4q5>vbq2-b&V> zmJ1L006JY$CN7}U%664iauY_;6F~_UYogVjYD@Bh4!I7SxiScH)?-lx62vWy*8Uis zp)uwNVT&fa?ZB&SEzPXw=E31KAvdt99SS!-OB%`6*$(hcHHT@v=`J3w-|??gSz;=Wb+1J^!)-DjX{}hdRGvHmQ!ck(Nn= z7#H`LG(cm+4G6ZPXAW+4V7?^c;h@m`Lx95-z8yBtIM8H6n^O(Fr9p|?1Y=Q^R&nRN zX!{IZ-kxoB*gCWmd@o^80O?$-plD_5)WmUI^HhQ;_l0m##ZTU9eXJ^Wu_ zW%F;(O&huKN~c>3FHgMP{8`f2xE>`Fqf0+vp6Fn&Ig(dHN3#O_;hL+Fm+`@V@z@NZ z`xBqxX3PxJGN)NC=^TJ>W z`qp)va`JJ?{ZYUdyi54^lHD&rak_2ov5slmJ+^0VY?xBZAS3b1`miexj4Mx zW&a$T_Cfmp(j2RAqf<~)SC>XwL?38ITbcW`{DOIfWThy!NSaFKAN082eZ9xMO6@&D zib0S2qJij_bK9&r?pSM%9lBSN4Lp@pYf>y4my@zn6S8%nPFTt9&%i$Y9lUa_uC1Na z@Zfjx%DcG53+NSTKOQ*LrObe3Cq7~3cOQJ}dp-Urjr~FVkw*DZ2q#dW=S)p?+Y!%7 zpd%qbA!R$Xj%Bo{(thT2SbJT2;E|3*A~8Wrq$3`OD0DuO@9A}PBkF8L7AE0`Rg*s} zXVv$Rxj}=JfwWq=?WqlHyby`U-Ep11SLv59;w@-NwjOWmgbsn{WN_t^ zQi|*47uz5BtLeX!kkd`>LUiF^T;(TtZqry02$X(kcpNAieM@KV|x|*w;`u^ z3#b9s6zh$U6K#+#w(&8%>jP4d(@(Y+4`s>i*TTPkHB)d3z=0-o{7T6ek2o)hap zklE38&6EBQ98qq+~4b)syZ3-Q#LtD30 zfNiZQm-|=3LaptERtIZ+L=ZML+&s!g`KJ9lD7+V>N~n_9fWbNieaRn!gKX(_^@B`v za<8Uo?%tNC#QWsbm4sLAPe9X6EOSAVFv>!;M zP3x+fYbzm(9G2idf1C=j*L#3wNVB=^+i9;d)*xe#Jb8}rSG^0Iahdjq_)S0Uokf2( zKt4q!fHb{B^*$KFAZUQBKr;PVgZa02&-PcwwgJS0czIMN-O+Is3}rA&!A5lP%x*I9 zt!t~K?tw?jppYTQk(S;?51sULs$8ssiuEc}iDnke+31>VQA zKZnlt2*hm+b{P|9fFN``elzH{wCLc=B;$hN38EwGJrE*V)R1w0_1fIrIh3&<@*?e9Q=frb~z_ zzI%-YVpLg5$*YE@jpt#D5vOMMK$Cq->h~RtUHAaX_`w7Op$J(lR`vTV2J-1 z!XM`px@x8c@qT@)r^Z*C@!wjB1O$4m%;K?aV3b_cJ!qIdYJ#tJrBJ7D^TVY7E3;dd zw%*{jg9)@cX@>%)uY?n6dpKniy-a6HvJFjV54NtmKz*Lx%T~c5C}`bNl0g}vKeP+3 zK>>|YsWLM~1g!F>-;`14bwhShf|=>D%$G4p?wsOIq!=ZLT;)TIswQa~E6@OXnBEum zrFD>W<&{F4Z-Z{8JA@WYUp1I_b6rm{jEBcj8R_{_ zGZqRtQmOksN>+N&TV+d>!C^>%oY*sLI~{Uw65cIeqiju^sjseSuC5Z7lTl1oMxc5Q zhZN~|d7kNTb|cguDEA0yDik(GWkup!CEbFwOs(Imi5||)!eX{n3etOaLMEpmTE&BT zE({dWOSa`aJtBmLUljY3O2xZIhE?W3o01y2C(e}hr{dVqrIW8sWiVrqz+up#laA-gZpwrXRU*7DMR?1ZEZVd`Qr30?$5 zkr#^1pJm=9;JjmyPHQxY2vGwh$ueh^CqlVz-vKD`B{~XH*!q(kAZUg+;nG zM|>-G-Y)g#i{@CeCo{7{L(ViX#dASBe8?zxdWNA@QE(#RO-}n*N%GF5?R?YrHNs8G z&PX(dtk|xo;uLx{jYBq9>5ucZ8et9YQ_b<~xksX$+rsB6|HU<(F!$uW7f(|RJ6@GR zIJP-_K-G;1@t+K~c^y})xRJqcoiK@m&Fprtz;uVjNY+o&#ii-h5q zJ7*cwwZdmwrMRS5Sb04+1k2lQ(l6NT^VW>>l$?DtXH_Ld zNOw{Xs4CU^8Sydpc!}v|#?TBUn8oB=@F$~%EsrQ2vkfNdrmmd(4Pb*wDv2$q)P#eO79aHu=i8SaY}=wZj;3v@`~fY_u@^-JFdQ4h+iX3WJn>E9x_zmBYfG z57L}~8L(QmgYQtI(NU=9R`AL{nD?3&UU7 zv0>*@93#d?#ga201$%@1X1XrY&R#hM`3rE4G%IIu(c%L4tXb6Vud^)H5Jo*%UR*xQ zmtPXEa!1aF?>6mXIc}GaZHibgjrOLh!2_j!0zvgPTcUC@KFwAHH6kl&O!~L%@R+5h zxxy2rvm15Q#@_TLs?>_Ht{pP|4M!UuDT@X)c3DoxbN@_>ch%?Sm)|Vp2#I0$O2gv5 zVdT?&-PCzJ8ze=GDLTr@FKA+Oc*@OFS;+7rm6;?)CC*wptCT2D<0)`H@+GB~-iJ~{XAUB8d@{5Q*edaS&KM#NTSv9De#Bf*d{uthOl*8bt zGwuz(<=msDFn#uNxGfb3?(^!H@Y;xJI&^{;iI1|P_yrxz3pHlbkO+$N1=8K(50{5P91bg679OAbV2fZwyLHbzwEtaK13b$=%^uY9?+~HNG9;|h2Qu_FY zfOLte?2Wp4@QRt3A&(}bWHINc)Jr`1;@zH|QumDTi~NR0E{x?p+g0bxU!2#-N9c^y zvO_q}_LuFJ9(8@Ivgs8|r0HB%k+8FsU%TRKR@BP38vkH`P>bXA(hHTZDpL8(y5U#^ z9}z!j32c?VqHJp@SM!+X-mr#Fg zCY?Dl*4n`4(~>!Jl<9T1W=0reOoGa#bMCx^XIMdERb#+;Gy!*nHt9>V}H7&YQ+xL3I#GNfY zeoETZl+C08`Zi?~A7jM1xh^Q1?s#j0BR&T+D-ifL@I^p}j?Z!AB+h5f#IrxrHZi^? zCBTOBU2XG*$b|`3<6wW^vsKaYJNZGkYw|yDJ*>wvkTEBv8uvblbvDj9KV=zh)?at? zaXF4bhw4`7v>s?G4~(~@*plGH@xHz81^R9WG^~6HP&QMn#eKW|^$%^nt+9Vv5dFIt zW>b-SbSEZ(^XYQIwUwNWrZ^jUN*P?SHCd6ygEbIHj zc@`U3oJnXeC7a8XkWQFVaqz4SfLa%@)GG*cEU*liT&3>%wmx5U7&mR(p~NAu{}?*G zFu|fC1~a0!J59j4jE!74hrYK-ZFOTIN(^52waHJKs&A|P^>)XmL$U|%dkjF0<^!iG z1kQ||lCH<7@soy4oJ^y}Pri+`RQ%Mmu~UXkqNyR1ZXb(-N^Hp6I54m-to4=ep?Zx6 z(Q>4QvUv?Xa+&%l=@f%yU=J0w50Q1%Y_sIjN0DZ~NmKqncB)VV`cQYhuWEyD4P^zR zoJ*@s#XzhE8ypjGtv`oFk{bvGb=q#YV>>p8loPc@x*JVL`u2J-Ncz~ zYF~#Mbcfnw5?sz9lhnw~EKv;^t~Ho`qXeq@9r8EKD*w0Mnh*&u{7uXzclZBS*PSKc zcH4i{UCaeNB!=a|z|{7i_kA4A9v7YyWpv*>Dr_)libKUF;du8}rNpe@w zO`DEr{k%rb7D;h%n>4U4q1eM+JiP@SZ!n_xy*i~lrq+irC!wBHi7dTa2~RIW-L4W& zA?>r5cMg93KpZY+YI{QwFCCe<|Izqe18)F+C2q8F9vX+lGa0Woup@*at<4Qz`mVCC z^cCUevP9!&s;*a%CW)+kR69~N7_=(DZF{6hw$4@V8U=>ON^K+!$CS2#!u8k+`Ob=u zTx1>UuP&>fvn+hb-dn|YvFqHCX%CwoHed88T}6{N)kYUYHm+DzDI8P&C<*J>PB7+)Xk~XR^}0a=XC{{zslW;xiq9 zm`;^-=n;dhK@sJ;V#wdtOGUXw^W7@zWN<77HnTuwodes96NPi!ctRuvEq6N#B9Wyy zWjrU&#zEm8tyu4|3bjLB_*;M$Y{G^XyLj<<=|i-KLPm_tep-4*Uyg3X2k~oTtLxK0 z-!@{rlXeR%F`%p{K|Dp#aFJV8N!EIuMVSHug+W^AC~z!Ld7M2fC;~tIAU2&q;ZQBt za@4Vjk@kXY<#Jt8XPGHG>8N&dn%qrg5sqZJD6wNZ!R#Js zneYHHZclrG-OjhvgaIOoOGvmVS`H3~6| z4%maaVS#r~S?Cf5F_gz`tc#RZ1QjElR^*&RW}%aQn6_bZzQnmBRYNi7wnVjRJJ|UF z&Uuryc%sS{$QjBBIY4{l0)8d#hb=^vXS-k_*>8*ScPX%oPxH^^$^jHn{?6` z(}&*=eMsG~TTyy@?MSvLdCXGsuf#c~ZUGavoLUG+QUG&&U|AxiJIx2Nop(o7uRyoiLd(My34?&09T~ zbyhC*3@!iKGt6|W8o;EQI-PVU_P#S?PKLm2<`)`K3mW|qaw8be%~s`!3Nw!p-nfMN zWYm^#Y2quCP-&(#MPmFUrz89hT>%w3y$#+jym``cVV`b+B{#3+87UgyUpgn3zG*v( zE3-=7>evn^dZORXSQ}jEwB%v`JT^D4J}?GDb* zb}aIRo^Hbui8DQsRwFSMSH81R7tJ^AQjBKPEch_@`YJ2nfvLF7^jM>AP)2gyD0ir= zmqM9b-iIilXUSxsw_4#o^;BTY<-ErM@jZS*%EjC2gSzf0hwQ-zds*5xIJCTyuEEl*ToM;G z7#fAYshxH;1U9POhI%3!`fb3E^`g>>tDpn%Qn0G)fSWxfo<0}QSkISC@b;r1nMo0K zowT1??kTtZ)N1f>@%p#CohT6B>Vdx*BJpZaW`l9!QxPhAfr7*ks%Q{zukZ9|Lx%~{ zVQ-!GC#63sZT|?pB8(YkJFC-?0qD>aP3<^bssg{a(e^)rgt>kEP?HvqA&XYZKZ+;Cx5bkZU{|mw7dHs+_-C34GZ&5hUCcD7ut);)9pemgK7iFH zSYsV1yNPw948We?aOrGzQ2&4N0iD)?osj&!q2}ju2YhU7tQ5eE^h5SRC%<5bDF%az zOhWH|?Y4ed6M7#m!#+zpuhS}_cVQG#B04p1KLBqsh8rmOzO~f9>p3W}7>;CY{AAL~ zrO{~HzZcB^NNqy`f(ahm?(0ZAg10aQ30pme9BVu!OY0>a9qMTOZliTwH)d4XW<&E~ zzzJ4Lm_0g=$fq_>rs6kQE0sNQ&;wZ?M|Y0-xsF0ALh)=N#uYlQa>Fo4(JP@iLh{!b zYdh$w6HrAweU#yFuK8_%2ta6Y-KyhI`VV`$1>vNzz0!J|%I<`pZ5{M@A(;m&TnX=t zy)yRt{#OKT+=`JpbJ&B9P?=pAg)k=~6;(<$oe9FL<-+{J+#A90dB$rf79N zd%DghJftfH6%C^pUiL9TGB$ z#oa_UG>0C=2_E*!I0O|$l^v4$bOmsJ#ftWk)w5YUeBGKJ1uE1D>Ftt$E^P;cevTZ@ z%P`3(anh}Hr+&{lU+HRT1oltxlx{IJuY9!m;7U(Fsvzyh*pDQFG~ww@ZAVmb(!T5h zX|#Te7dujAUWp-)u<60x_nfpK5C=m31Idi^IHZX~Rd%~FlJYgnsg^Uw>7BSafc)c= zPy7<;dgtr%fOMhh# zrFEnlnj<|b=~R|XJ=?PvG?8mLCuD^j$5{=A8=RRnZAdQ%!tIE$vv@>DX_=GhI8qoI z1vM>@UXvdV)j*-`ZPb+MD00wbV}D~mf*PkM_{B+BE4V>-+(=!dy?X7O>>9X@l2)WJcjZE$7Zai^t&* z&j0#zP2P07@O)ZPBYPeH9L|qK;QT2;`I;7UP1Poz?V)?5C^FTvfl`znMY&s!(Qt^! zHO2@6$6_lGt2Ojq+Gt5<8h4Sut#p*s3mXxoD-EJeZ3K*CCNoBJ<7a8N;_qXdJv(0t z%0$_A*tb?{L zmDb^QBs{1yrps+olj|PSPLBoR^d^Ts1ERx@RZws|*DL)jWug;y-aTP-}XJyuxWPVK?K9kXF)r zG&b{DBn6az!O?wAav5JSy})Lv{Ce?fqmE-$`*ur5!}ifZ<4EjIcSFJ0`Hf>Nrc{-^ zN%>kb!dJU}#6{Q3`qmw%eW%T{*%ra2vN&<;@VO=D)X;F1_tFR4hGs#qb>s8dA5CzX!0D zu0XNGkS!sG?AYhTl$CS$q*5@4k{=zPQd~@Lsd{Y!6u;#WQt{-l)`pO8q*Ba;6-j48lOb{|&BRXq^?rSU#-o$*78i)b`X z$C=~f6e@k-I#Z74(&{zT-B?dHIgOQ3TB&W#!UcWG+f;f)!AX8mnved&`XmU#ev3JM zG-?!g;&D|+w1j#I0raGDD;6gQlOt5RVEQNZqeNb&$&!~k60(fZU80{=xuxzR8f^-o zR9YnTFg+gA(R9UZr#@Wkmgp<&EV-q>NV<;5>}W)58RS>^TV^pDp0DLpUZc*cZYSlN zCo4l^FRAPuEqF-tg@>fQ^C#AwR*HCevP^jng~TRqLAXj2Sy9;iy3H^u4gZIJ-(x<{ zW^ZD|qtYeiUt^>B^DE`3R;*TqmOn7(=ogqA`{at%I4TC>*`h|(OY^-iaZ!`Scb?j* zKU973%n5P1Fx3?5?LiyUbdpZVEtw)j)U(M^A)o|6{qQ z!zk>QPGX5~f_3L@v7~gosj8k`Ho&CiJH2=GTrjCb5hq935cY>B#uhb@YdI3}0jm&u zulbW{Z`paSdEMwLFo&k11|7~H(|Md&?xJzp%SM>MjE9CtpJPYmUikMPrC4eFf>}pj zHNJpMo?IZlx2P__GCLpAVx^_0F@5(gm+6zS7mqZ45`Rf~?HcXmovK3Q>10R3ap`4j zN=xrxgVF{drE;jT`^1(m<>}A+WjG-v%v7&4U1ovx?9U?aj=FraA^mS<+jsm)p3S1_ z*fp`Ot}_Rv@0mKC8W7c{rv;cBJDyhc&)W8}HKtG0;HQM4%?w9x(n5JYiwip(6Mt}M z*b52qD>I`bhab^xKhU~yxaBf?9IgZ$sWR36nsl3Ui4=q%=`T`%_?5xf7PE*?W5>da zC6LQXqKz^17r7r>S7J7D4Tf*i9_PwWBxEUJle@D0Bi=SH^zrKgtrmYEV^n9vvWye4 zw|xLIg)mIzuTfC$#S4BccVSJ;n`(eyeGlSyf@S4$HK6~hd!>i4`++2D4^=|3YX{@R zdWeB>BAn5|-7`qMXnEK8I3m2qkO@_ujxf+4r1bAGPIk_d05us0G>o@Jw#}(8mYPh+rJa`9yMiUH-kCLPcqzjPp+*FicE>YhHqVEj0=H*$NVN#C?# zPs;-nhnmOI3iG;9#EzRD_W0JEY?-N3s*&U`nVuEpwHTDa&K$9B2xVktxs;Fc7fCknbdVTk> zEpZzkJKn529lopjvjrl)o%?!G>_m6Ob~Zb0Ds{vc*8B_az6jjfs=G_Oadq*h+?@5h zA6WZM&%>F;A9Z|uiGAY2lbrus|LRaak%7I0&n%zES@Gc$!+V(}mspJd`^h5`N8%O_ zF&Q7$ze8;4!z~@3_J8vW_KbF8#$rukNZs;(K%rby8E$>+26i>uo|BZ5fHOQR3NCW2 zb}QJVEjSu4Jc(__rIew{95Y8Kv$04iGo^?Pm)p)5I{#>tOFJD8h=$o$~tvP+3sIg zu$yX2{ml{rj%>8#IUye5tQUbHAR2O#`yu1lfA$t-)p~=O|!gjY`5W3&Z1z~lkpy(b@ z92=UIaT&N0V^Na>J}(-|;^Dv7B{|>@{}m|#eS-bB>&;3;U7|hJ>agS32q=b>REIU& zo#Ljl{-U!jGj%OWlwwOxNlHSKnoXltU%w!}gF&&Qc^7i!ue~C!VNl}HWuKVjyj4V{x*-9fP9-f` zw(PsnGJ8TI`j&q1;_-`Dh#QscNKU0D+_)ZYWXiM(Zgig86RgDv3m$C0Ah`73OQ~vt zHQtevkeG}}St{Zq33jN{ZaWM(N%8T3btmYOlM;U2D+UnRztsiN%blEQpG&(2PA z#k;cY4p)jR)d@G%&!V$XatO52PoT4~7fHa%@qHWCFTWt#pxv^;f>&F6(hX*}e|@mX z>#;r{qqmhyDXv&sbA5UEz3d+x+I9?eim_-UMVk+n2-Zv7Fr^K#7aeO*ya2;0C#kZTNC}z?xo-D*iA@6aQ26* zL&cBt#_hd&+*eBcQ;#54mX5=#?{w^5+dtTW{zJ9qPwpS|Nfw0Qgr`~Y_|A8=Ul8nf zvpk@dEZ@p^%aBQ`t5hULNTLZUYby_?qLoL_fAShbkpZ_ul!eAvUOrJ>y* z`eQKzRL_dgVN!C!PuFh3Dv4K%WFY^qZ6|M7G=cd~LI2|S*M|S;<#4@$drsTh;4)Zj zX!x_Xm>zrFTrLlzWk?|*Iz4sC-LKfZt$jn@JGjTiW92?s#jyPldO(d zSF$6;=1fe~p>f&v%P)rSY#ywMzuD^0GcmO09QN`N{&s&#O6ekiq45$+AlXbz_^_lZ~JNE_V@c8xc_I^iqHT5fvsr$4_om+Y{lOb zTX8(B;r|X-UHaiDrA&_PvYox-i z58WsU*t%?80#eDpO4h)`^_$5WsMJhMNW_sZ*m|h$NOsv1oyiF~Zd%dvr%p_9LMDVF zH-sw#y2ke;aP*1-jQ2m*JlR(us~vy@o`&lojjorN`eiPg#cEBm*=#=+J>%L$Pg@cW z=@N=xO26HIJxtOmj7h(b{05qV6I0z<2ptL_RL>+Fp~vGyJvrWyfWF&oU2=-c_RFOW zEx(ZxpZr~Ik<35%xMol^fkTEE$0tun%o zOVeWNrB49U=3BE$3N@U06oCx6E~%r8jDc2^(3bp=GPpx~C^fX@@NV=PXq6GQsHIz} zWsQfSm{FPD2L>=?F`CcR_$%3b6*CDO!znSt2!YRTrYp@z@M4W5a(-Q z5=62d1RVN1ve4UM00hvV<{8>}{u`C)h}%Ejbh5l@&t~}#0Sfq0@OvqrYT*%}+Q5i| zy&Nt|YVGLfg2f=B0+%xVcQCyB{u0YbX@{g!7Au?D+7-IuHev;<*P!>So=xl^PjwXJ zYT0L*=yqO9x6JL>-nG|O0w~j3x?pHJS_0^=VC^cWYcbgI`2`ECF4>=oQ1%<-L&d>4Z?J(=s!{NUnK1{fkvd-Rgs@a2MjeXNiaNY@-)Jrj|A-lQlFLzJ+BK^RhQj0Hz!srO4LyK zRmc6wAQEUO{Qd~-D^Z5lz3TzKq7{6r=Rt2g-3EuD#wCzq(bu3v&@NTiq8t(DsDTMP zuQmis<|=AnFh<_RbCebc<8b%E4vfr(G)?Q!TkP%6?LI9QP=ES{a;SUB-$C(fF9v-O zuJa@Gr?fzB>q@~ahqFhd5l=m$5t2&J(RR=BlC=Q-Y!k>qMWP_K7KIFcJY9y3JAEW$ zbl_vFFP>g?@zh4oW;$!yX=qxxU5osL(!0VWv{|;SDA8g;BY@6(AhYx$%c$D|uGcB! zTuSpK!>#-=D(_YtKyCm#r`C-ycxF+!GK+$M9@{5~G$$Q4S{M^AN>j@bCpxpoXRro%Hn$vs^M9|mf$v`ONjtjA z#~=GsAhXo-lMLp(#S3QTm=|;f4GB~*_rk&;ktVZ^p8j#rI@op@6XH9?>Lq=A*N+XiE3o`JfgQ zXJtjrb|By!o$W4im`v%20R(Ao*=?0bU4=cK*(tEH!sl5HxSXk*4gm|fo{M0zj|~u1 zj%0aEc{6FuEDPsbojEM5lXx@m9{VyL2Q5*~kfqMfk18^;tW<@Yjk{1;U@yr~;_!L3 zFiPo9F0WHRM7GK?iklxI$LA~pfs0ZzYxQmD5t7S03Lk25FyFbgCSUl@@LtN_q)Iu( z_znFHkp*j$Zj&i>_$d6+UWEmj^&_nJ#h ze?&gxF(SI4bmp6sGi3DM%EK&;98xfkkcasSSP}b8-%@m%2U#2ePnI%D2mf+AC==3s z!wv>NA{Q*q%R?ZC(o`;PNygW@Jf~YWW|c&S%y(LNgRP`>;b>4iz1AN=qXHdiDYVsu#JM|GdBGA`Vtr%y+CR}BjBjg1k zd4~R8d9r($g>%ergSQINAD49)*nC#jeFsm^4ZZ}1# z`dI3$Tbk=Cdb$-q|Az4Q7)co{He;(CER7R~ipz{(#_xZ^*b+4txVETS%o}CJiU#Tm z%*=Kv+Ve4OWwP;a%r2i|v5oA%5Q+2r`Kb@sth5iD(|7!f%@V$B~1tn$_C%bQZz5hVL=*56#YBR=bV9=lXWs8fcO=WmZ6V%q!Y!@8+9-0FP^#J zdn{_~Xig1UCN1WMJ0g3@OQm~+Z$vBgk~(su@}lnPFvw&g^Z1yIn6Z&%OZnRt7fC&N zGMQA?lOwZO;Mr9cVtks1i~Az`xZ?Jzm%KB=|GSx=B+Us6HGMfRfSJn|22OV873LS1 zXT$~>Y%vKlV`h*+ACow9W~9pQ2r<&MTu=bUg6EMpW~h!PI0|AN<3ZzR3uuxr;7MRv z2D5zm8D!rUnB{xq?y)NnL^CUWS(PNCr4_fmQ9i zm|11Bv_u%7EoEub5Rsqz1lzjf7OCe4EWrShT3(SOqK?m-JxERrl4F7K#c@ATpbnBMw*7IjU04Iml-+3ICM@4djwA|WG2Toaw{J->&*kHPq^dKq%7$x)NpiZ zRX*i59FNQjFv}Jyja^>=WvxlPyIBVPDhI>;clfl$7}mclLCAOYL*|Hri6&D<7~Z zdAjgu+E__fHL$hoN*zc@51LzAuT}|aYh#t60Dy`-v*jhryUf-aSZsc~H59?d+&&ir zzGU_}O_UsY6H)7cQe0%CCPhreMb^qn#~=<@AX!>_mK?aRHS+F2b3DaZVl0vL*6e4Q z+{yy?e<}k-u`OW=+J5=s}iG zNuHY^1Kk51+7iOF;Ck^&L&iPpu#XC(F4K8bSUvW&O+Kf!lW;W*JgQF>hJ8lVO| zlX)t#FE)2)*T;RCa1xavu2(7$r^5zUFq@FF;L{gm)OU13Q&z-%wZ zE|RBbTw$k@ZW%WxZd}Y8SQK_Od-K=nc2qPyJg&kVhZS*!61Q$0@7r-O=>=&LSF(%p z!UM8bNN1F#eADr2f;Cnd=cl+@9o%VoWPS*u)pt9zvQr=qqxRl;mqtxgURn2?bxcT0 zTQ9Po)uLp^J|LN^tfTekB_3bWn zn{4c+Ocw5}+(Pg8$vP=Rr1`>^!kx5E3)hPMC|o!$6qk%O_$s~Nb17NMg$7QP-&p(C z9UG;S_-Pvg1}hN_++e*{1Z^p?DTjq=cxgIOvMMdkdbWcfcHP!k605y{9--~tEY5ps z(k84v`?2HPn;eYy2TMXJCgB;|Date^^8j|$1f`5s#vvOIR2N_+bSW)U8O^OZC=C9T zTNWM6Cq~A+JdlFM6|tBps!d@DrAl|HkWMBp z(688oVl?X9qb<+*m^>-JpkTRxAcWgF4`JHKp@Fn;zS~jg7T%aD-1U03@SIj|CB{YW zwzWilBrdVf&@zmJpN)SFIp1?g+tW;CzU^PwL~K?Hyhqa}A$;7I_6zzQk7ggJ=ig9z zN@rR5kWqPqRKuU;t~wcXsFd6JqQ&!Fy_n!ml^9x9#wciO1;?LN>{J?$pGt(qmMd1aaJ{E6ms z8>DH0$nmrxK&DdJ^0pXHYC8cWN~>}~&59I-*Ncx(e?>PVI#wN5wYUpY#8|25;SSu9 zQy^gmKirK*33pJauuup~du8zJ+>;O2^BLb>{RD5rCgB}x#k>2*`@eF&rgA!N?c2vy zo}1D6TN!`q%DQ2A=YJdeng3(nl9NAA;PrRZ-8kfe+ z#zqA@V>x)_JE?ygw@9y?#jYfFX=e=Hew-LG{MeSn-0a_$uvSO8{VSb}jr5j*!Lis$ zFF^gs;sw~9B>%k|#*=Fsyjj}DS(`ak)`drG()*Ay^Qk{ax)qrgNlqR+?Kypk2*Cl+fEMeJJqZHI*OPo6)QeFwhef2&@PkC}7Ng#f>K>zMG(66Wk78zC;- zGK@7njpr1;&7FVHTrj3d`wQp3_@A}T+|*7o`EKouGu7!z0Y4|zooYuK#)ZxqM+)E} zLq~GXf~Y5Z{h)ZJtxngfRVv>QN3S{m65$9$w`T$k)M>>tQFC;Kg^t-$1zQ}otV3>5 zuC_w@Ge$qsMt?qJ6w($d(fX4hk<#2B7pca{n_=~VZymdrVtdx`>&~y=O^6^nHQttL zv&BMzj*m@DO-PMJ$jBX=gJ6Nnkz>`lkcas-5~)Ee{`miW$!4ZTzyoW#c~Hhk736t9yGqOr^^D96%*{=} zW26-a#( Date: Wed, 10 Jun 2020 16:04:14 +0800 Subject: [PATCH 005/384] =?UTF-8?q?=E4=BF=AE=E6=94=B9chain=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/issues_controller.rb | 147 ++++++++++-------- app/views/issues/edit.json.jbuilder | 2 + app/views/issues/show.json.jbuilder | 2 +- ...71625_remove_issues_lock_version_column.rb | 5 + dump.rdb | Bin 589 -> 662 bytes 5 files changed, 94 insertions(+), 62 deletions(-) create mode 100644 db/migrate/20200610071625_remove_issues_lock_version_column.rb diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 174c6b17b..e15256d31 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -7,6 +7,7 @@ class IssuesController < ApplicationController before_action :set_issue, only: [:edit, :update, :destroy, :show, :copy, :close_issue, :lock_issue] before_action :get_branches, only: [:new, :edit] + before_action :check_token_enough, only: [:create, :update] include ApplicationHelper include TagChosenHelper @@ -105,20 +106,6 @@ class IssuesController < ApplicationController elsif params[:subject].to_s.size > 255 normal_status(-1, "标题不能超过255个字符") else - if params[:issue_type].to_s == "2" - return normal_status(-1, "悬赏的奖金必须大于0") if params[:token].to_i == 0 - query_params = { - type: "query", - chain_params: { - reponame: @project.try(:identifier), - username: current_user.try(:login) - } - } - response = Gitea::Chain::ChainGetService.new(query_params).call - return normal_status(-1, "获取token失败,请稍后重试") if response.status != 200 - return normal_status(-1, "您的token值不足") if JSON.parse(response.body)["balance"].to_i < params[:token].to_i - end - issue_params = issue_send_params(params) @issue = Issue.new(issue_params) @@ -171,12 +158,13 @@ class IssuesController < ApplicationController def edit # @all_branches = get_branches # @issue_chosen = issue_left_chosen(@project, @issue.id) + @cannot_edit_tags = @issue.issue_type=="2" && @issue.status_id == 5 #悬赏任务已解决且关闭的状态下,不能修改 @issue_attachments = @issue.attachments end def update - issue_params = issue_send_params(params).except(:issue_classify, :author_id, :project_id) - return normal_status(-1, "您没有权限修改token") if @issue.will_save_change_to_token? && @issue.user_id != current_user&.id + last_token = @issue.token + last_status_id = @issue.status_id if params[:issue_tag_ids].present? && !@issue&.issue_tags_relates.where(issue_tag_id: params[:issue_tag_ids]).exists? @issue&.issue_tags_relates&.destroy_all params[:issue_tag_ids].each do |tag| @@ -184,50 +172,61 @@ class IssuesController < ApplicationController end end - if @issue.update_attributes(issue_params) - issue_files = params[:attachment_ids] - change_files = false - issue_file_ids = [] + issue_files = params[:attachment_ids] + change_files = false + issue_file_ids = [] - if issue_files.present? - change_files = true - issue_files.each do |id| - attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) - unless attachment.blank? - attachment.container = @issue - attachment.author_id = current_user.id - attachment.description = "" - attachment.save - end + if issue_files.present? + change_files = true + issue_files.each do |id| + attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) + unless attachment.blank? + attachment.container = @issue + attachment.author_id = current_user.id + attachment.description = "" + attachment.save end end - - if params[:status_id].to_i == 5 - @issue.issue_times.update_all(end_time: Time.now) - @issue.update_closed_issues_count_in_project! - if @issue.issue_type.to_s == "2" && @issue.saved_change_to_attribute("status_id") - if @issue.status_id_was == 3 - post_to_chain("add", @issue.token, @issue.get_assign_user.try(:login)) - else - post_to_chain("add", @issue.token, @issue.user.try(:login)) - end - end - end - - if @issue.issue_type.to_s == "2" && ![3,5].include?(@issue.status_id) && @issue.saved_change_to_attribute("token") - #表示修改token值 - last_token = @issue.token_was - change_token = last_token - @issue.token - change_type = change_token > 0 ? "add" : "minus" - post_to_chain(change_type, change_token.abs, current_user.try(:login)) - end - - @issue.create_journal_detail(change_files, issue_files, issue_file_ids, current_user&.id) - normal_status(0, "更新成功") - else - normal_status(-1, "更新失败") end + if @issue.issue_type.to_s == "2" && @issue.status_id == 5 #已关闭的情况下,只能更新标题和内容,附件 + new_issue_params = { + subject: params[:subject], + description: params[:description], + } + if @issue.update_attributes(new_issue_params) + normal_status(0, "更新成功") + else + normal_status(-1, "更新失败") + end + else + issue_params = issue_send_params(params).except(:issue_classify, :author_id, :project_id) + + if @issue.update_attributes(issue_params) + if params[:status_id].to_i == 5 #任务由非关闭状态到关闭状态时 + @issue.issue_times.update_all(end_time: Time.now) + @issue.update_closed_issues_count_in_project! + if @issue.issue_type.to_s == "2" && last_status_id != 5 + if @issue.assigned_to_id.present? && last_status_id == 3 #只有当用户完成100%时,才给token + post_to_chain("add", @issue.token, @issue.get_assign_user.try(:login)) + else + post_to_chain("add", @issue.token, @issue.user.try(:login)) + end + end + end + + if @issue.issue_type.to_s == "2" && @issue.status_id != 5 && @issue.saved_change_to_attribute("token") + #表示修改token值 + change_token = last_token - @issue.token + change_type = change_token > 0 ? "add" : "minus" + post_to_chain(change_type, change_token.abs, current_user.try(:login)) + end + @issue.create_journal_detail(change_files, issue_files, issue_file_ids, current_user&.id) + normal_status(0, "更新成功") + else + normal_status(-1, "更新失败") + end + end end def show @@ -247,15 +246,25 @@ class IssuesController < ApplicationController end def destroy - if @issue.destroy - if @issue.issue_type == "2" && @issue.status_id != 5 - post_to_chain("add", @issue.token, current_user.try(:login)) + begin + issue_type = @issue.issue_type + status_id = @issue.status_id + token = @issue.token + login = @issue.user.try(:login) + if @issue.destroy + if issue_type == "2" && status_id != 5 + post_to_chain("add", token, login) + end + normal_status(0, "删除成功") + else + normal_status(-1, "删除失败") end - - normal_status(0, "删除成功") - else + rescue => exception + Rails.logger.info("#########_______exception.message_________##########{exception.message}") normal_status(-1, "删除失败") + else end + end def clean @@ -470,4 +479,20 @@ class IssuesController < ApplicationController } PostChainJob.perform_later(change_params) end + + def check_token_enough + if params[:issue_type].to_s == "2" + return normal_status(-1, "悬赏的奖金必须大于0") if params[:token].to_i == 0 + query_params = { + type: "query", + chain_params: { + reponame: @project.try(:identifier), + username: current_user.try(:login) + } + } + response = Gitea::Chain::ChainGetService.new(query_params).call + return normal_status(-1, "获取token失败,请稍后重试") if response.status != 200 + return normal_status(-1, "您的token值不足") if JSON.parse(response.body)["balance"].to_i < params[:token].to_i + end + end end diff --git a/app/views/issues/edit.json.jbuilder b/app/views/issues/edit.json.jbuilder index 382dab1ba..eae63c3c7 100644 --- a/app/views/issues/edit.json.jbuilder +++ b/app/views/issues/edit.json.jbuilder @@ -3,6 +3,8 @@ json.extract! @issue, :id,:subject,:description,:is_private,:assigned_to_id,:tra :start_date,:due_date,:estimated_hours, :issue_type, :token,:issue_classify, :branch_name json.done_ratio @issue.done_ratio.to_s + "%" json.issue_tags @issue.get_issue_tags +json.cannot_edit_tags @cannot_edit_tags +json.issue_current_user @issue.author_id == current_user.try(:id) # json.issue_chosen @issue_chosen # json.branches @all_branches json.attachments do diff --git a/app/views/issues/show.json.jbuilder b/app/views/issues/show.json.jbuilder index 156031f71..be6de14e0 100644 --- a/app/views/issues/show.json.jbuilder +++ b/app/views/issues/show.json.jbuilder @@ -1,5 +1,5 @@ json.partial! "commons/success" -json.extract! @issue, :id,:subject,:is_lock,:description,:is_private, :start_date,:due_date,:estimated_hours +json.extract! @issue, :id,:subject,:is_lock,:description,:is_private, :start_date,:due_date,:estimated_hours, :status_id json.user_permission @user_permission json.closed_on @issue.closed_on.present? ? format_time(@issue.closed_on) : "" diff --git a/db/migrate/20200610071625_remove_issues_lock_version_column.rb b/db/migrate/20200610071625_remove_issues_lock_version_column.rb new file mode 100644 index 000000000..ffe1a0f96 --- /dev/null +++ b/db/migrate/20200610071625_remove_issues_lock_version_column.rb @@ -0,0 +1,5 @@ +class RemoveIssuesLockVersionColumn < ActiveRecord::Migration[5.2] + def change + remove_column :issues, :lock_version + end +end diff --git a/dump.rdb b/dump.rdb index c96e57e865b64c9f889a66aa66b0bd1657c0f7f2..e7d3633d3885b2825b171176f927f6428e135054 100644 GIT binary patch delta 181 zcmX@hGL3bDfo|O72XVhRN{drdbaPX44=JQcF#O_4%umxTC`wJtP0C3{kUHorNyZ!y1A*jhaOB3W%$LDn4hLwP?VaOo0OA!fZ-p*Z+2z| z?&6Zf605Yt%$(Ge0}Ov0ckB31jFl5(Vk<07Eln+EWKT&=ODxSP`LpQc_8Ajjx$zhn z7#JDq8JJoaSeQ(c!ZDL$}~1x5MEsl`AC9AN#=+jW0?BX8eI E0KP&z-2eap From 844699dd1bb88e6f4f9bef91b3b54277a661175f Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Wed, 10 Jun 2020 16:34:34 +0800 Subject: [PATCH 006/384] change --- dump.rdb | Bin 662 -> 661 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/dump.rdb b/dump.rdb index e7d3633d3885b2825b171176f927f6428e135054..96e309a5a2dbabeaa83261b7620588212dd4d900 100644 GIT binary patch delta 92 zcmV-i0Hgnw1(gMmFcNH<;9mL&b#rB8Ep26O!r)vQkwQ8H0t(TQe<1-ek)cHcVi;VJ y=|K??F*P|cH#avpIX5mjI5sshlRN?U1Of`tQ;}U7lTiXY3O4_^v<8U9ZvhP41RnMP delta 93 zcmV-j0HXhu1(pSnFcMyq;9mL&b#rB8Ep26O!XRcCkwQ8H&vvzue<1-dk)cHcFoi&o z=|K_^F*P|cH#asgIWR6bGch?hHj_I6_XN*&wNsH@8k0~0I|?=b(fel-C+@+nBlsdS From 6b296214856e34211c41873e3dcd5a9277c497f9 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Wed, 10 Jun 2020 18:33:23 +0800 Subject: [PATCH 007/384] change token issue bug --- app/controllers/issues_controller.rb | 2 ++ dump.rdb | Bin 662 -> 662 bytes 2 files changed, 2 insertions(+) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index fd3f39a32..3bd483dc4 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -199,6 +199,8 @@ class IssuesController < ApplicationController else normal_status(-1, "更新失败") end + elsif @issue.issue_type.to_s == "2" && params[:status_id].to_i == 5 && @issue.author_id !== current_user.try(:id) + normal_status(-1, "不允许修改为关闭状态") else issue_params = issue_send_params(params).except(:issue_classify, :author_id, :project_id) diff --git a/dump.rdb b/dump.rdb index 388301ac5e8666183794e066ec614610aa93be64..9915154ed6c32ece8f637625c6ea4a9aa5656281 100644 GIT binary patch delta 78 zcmbQnI*oOLfzXm|58{4tloqF^=;o&89@?NUJJHFC`Ix=^#QJn*b-z;+UwUwv8X6hs inHw4!T28iR{J{d044D`!H93&UmgCIYfcCnEP4xho2OVVq delta 78 zcmbQnI*oOLfsogh2XVhRN{drdbaPX44{dOioaki5d`Z-7VtqQZvC6@TFFm+SOpOfm i3{A|;jVD_({$K%0hD?l=njFYv%dy0aM Date: Wed, 10 Jun 2020 18:47:03 +0800 Subject: [PATCH 008/384] change --- app/controllers/issues_controller.rb | 2 +- dump.rdb | Bin 662 -> 663 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 3bd483dc4..f2b4850c9 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -199,7 +199,7 @@ class IssuesController < ApplicationController else normal_status(-1, "更新失败") end - elsif @issue.issue_type.to_s == "2" && params[:status_id].to_i == 5 && @issue.author_id !== current_user.try(:id) + elsif @issue.issue_type.to_s == "2" && params[:status_id].to_i == 5 && @issue.author_id != current_user.try(:id) normal_status(-1, "不允许修改为关闭状态") else issue_params = issue_send_params(params).except(:issue_classify, :author_id, :project_id) diff --git a/dump.rdb b/dump.rdb index 9915154ed6c32ece8f637625c6ea4a9aa5656281..c2f4527b399f4ed946768e5db0d13d51260d2654 100644 GIT binary patch delta 87 zcmbQnI-PZbfzZDl58{4tloqF^=;o&89%3jGo9JZ4d?M3hVtqQZM#bfcFCB%23{5Q! r%`HsLjSTgSEG*27%`GR}Fn(tNstTDHD>XTg$(G~h4aMI_wTwCdmx>>? delta 86 zcmbQvI*oOLfzXm|58{4tloqF^=;o&89@?NUJJHFC`Ix=^#QJn*b-z;+Upfj28k$-f qnp>C}8X4%B8yXr~8cw!l{LTVY6f!YZYH|>hEytO)0qu1So9Y2yWghAP From 77b995e9586c137e0f766183344bbe94c4f0aeed Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Thu, 11 Jun 2020 11:46:58 +0800 Subject: [PATCH 009/384] remove dump.mb --- dump.rdb | Bin 663 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dump.rdb diff --git a/dump.rdb b/dump.rdb deleted file mode 100644 index c2f4527b399f4ed946768e5db0d13d51260d2654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcma))O>5LZ7{`;csk^pT=%L_gD|lgxHzB3+8$ zQSbwJ@-v7xk6}gdt_QvKsvlvyRMTCw7Akms`170pJiq7u%^SBK*tQ)_TLMxlt!E$% zziW5>>G{PVp-NW$sX-LYVRH2T;K{UEN=U67@`)xkwCO75nKcrC^MpaA9chOxWA^sP zS*(bXFa2~ldkBkH-AZzlUlw()UQtS6z>YD?Z z!fi~hb3U~03f^U$U>1kA*9+pzb%>MsX%e_ZTlwqJN}p}+eSRbAGL8QxG>qMnf-*A9 zBs3DhYTfZ8CkXw(b-HdC_O^nkk(6>=X$@Lr{6qgs|9g8M4Y*VV&H=^fjJ9pePzTlJ zgo5-bRwzEE_QJ^Xy>8@1!MYcA(1@mJ@v9C}c*opsW?byRh?Ua3)+W3lr4Ue%F{)S9 zLAxcCAW{4XrI6uLXUe?Nl7Iyn3@I6!t46^U&BkW)Vt%YaNc6aa7*2roJ#%H5rcfxV z%sU4c-o1FWc50L8`O@-&ub-RKnL6=yrrKJXeq#S$YU=|qw6)XTtKQFVUoRhiyz0LE E1^$uU@Bjb+ From 9d7e7b2eb7cd7d38130e6532dae43156cd4c72be Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Fri, 12 Jun 2020 18:28:20 +0800 Subject: [PATCH 010/384] change --- app/controllers/repositories_controller.rb | 2 +- dump.rdb | Bin 808 -> 809 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 75e409e66..33b84af2c 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -193,7 +193,7 @@ class RepositoriesController < ApplicationController issue_type: "1", tracker_id: 2, status_id: 1, - priority_id: 1 + priority_id: params[:priority_id] || "2" } @pull_issue = Issue.new(issue_params) if @pull_issue.save! diff --git a/dump.rdb b/dump.rdb index 3bcfe7a80bf9bf205f88e2c792e8182b68a9ba9f..8f85f550fce638596a9e142fb08898c097d8e096 100644 GIT binary patch delta 87 zcmZ3%wvugvfuKvouLp=)%OH%{O&8ry87&+>;zCF|SqRJltPIn$% delta 86 zcmZ3 Date: Fri, 12 Jun 2020 18:48:32 +0800 Subject: [PATCH 011/384] change --- dump.rdb | Bin 809 -> 809 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/dump.rdb b/dump.rdb index 8f85f550fce638596a9e142fb08898c097d8e096..f32855aa2218c0b6fabc47c634896f23703b1770 100644 GIT binary patch delta 82 zcmZ3e_-;$8p_8Xe34 delta 82 zcmZ3 Date: Thu, 18 Jun 2020 15:59:37 +0800 Subject: [PATCH 012/384] change --- app/queries/projects/list_my_query.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/queries/projects/list_my_query.rb b/app/queries/projects/list_my_query.rb index 1f07787d9..b0522e680 100644 --- a/app/queries/projects/list_my_query.rb +++ b/app/queries/projects/list_my_query.rb @@ -17,7 +17,7 @@ class Projects::ListMyQuery < ApplicationQuery projects = Project.visible end - if params[:is_public].present? && !params[:is_public] + if params[:is_public].present? && params[:is_public] == "private" projects = projects.is_private.joins(:members).where(members: { user_id: user.id }) else projects = projects.visible.joins(:members).where(members: { user_id: user.id }) From c6f4d7157f34b6ebfac0a192046de96bdb226e13 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 30 Jun 2020 11:15:03 +0800 Subject: [PATCH 013/384] ADD mirror_url to simpe project api --- app/helpers/projects_helper.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 139255c81..2db8101ed 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -35,7 +35,8 @@ module ProjectsHelper tmp_json = tmp_json.merge({ mirror_status: repo.mirror_status, mirror_num: repo.mirror_num, - first_sync: repo.first_sync? + mirror_url: repo.mirror_url, + first_sync: repo.first_sync?, }) end From 73d3715ccaffbf36d6b01bac891c08437c69b266 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Fri, 3 Jul 2020 16:17:06 +0800 Subject: [PATCH 014/384] change --- app/controllers/repositories_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 79cd30f7c..de5cf4d8f 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -8,8 +8,8 @@ class RepositoriesController < ApplicationController before_action :find_repository_by_id, only: %i[commit sync_mirror tags] before_action :authorizate_user_can_edit_repo!, only: %i[sync_mirror] before_action :get_ref, only: %i[entries sub_entries top_counts] - before_action :get_statistics, only: %i[top_counts] before_action :get_latest_commit, %i[entries sub_entries top_counts] + before_action :get_statistics, only: %i[top_counts] def show @user = current_user From 8a1abaed8af4ecb6d8371e32daf5adc9798e9837 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Mon, 6 Jul 2020 16:35:03 +0800 Subject: [PATCH 015/384] change --- app/controllers/repositories_controller.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index ccc49574e..957856cdd 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -53,8 +53,6 @@ class RepositoriesController < ApplicationController @project_owner = @project.owner @hash_commit = Gitea::Repository::Commits::ListService.new(@project_owner.login, @project.identifier, sha: params[:sha], page: params[:page], limit: params[:limit], token: current_user&.gitea_token).call - Rails.logger.info("#####################_______hash_commit______############{@hash_commit}") - Rails.logger.info("#####################_______hash_commit_size______############{@hash_commit.size}") end def commit From 265562a260fdecbc67cbd656c3669df552099d8b Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Thu, 9 Jul 2020 20:33:18 +0800 Subject: [PATCH 016/384] change bugs --- app/controllers/sync_forge_controller.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/sync_forge_controller.rb b/app/controllers/sync_forge_controller.rb index 51193a0ca..532d69ebd 100644 --- a/app/controllers/sync_forge_controller.rb +++ b/app/controllers/sync_forge_controller.rb @@ -6,16 +6,17 @@ class SyncForgeController < ApplicationController sync_params = params[:sync_params] #以前已同步的项目,那么肯定存在仓库 if Project.exists?(id: sync_params[:id], identifier: sync_params[:identifier]) - Rails.logger.info("=================begin_to_update_project========") + SyncLog.sync_log("=================begin_to_update_project========") project = Project.find_by(id: sync_params[:id]) check_sync_project(project, sync_params) else #新建项目 - Rails.logger.info("=================begin_to_create_new_project========") + SyncLog.sync_log("=================begin_to_create_new_project========") project_user = User.where(login: sync_params[:owner_login]).first project_params = { identifier: sync_params[:identifier], user_id: project_user.id, - is_public: sync_params[:is_public] + private: !sync_params[:is_public], + name: sync_params[:name] } project = Projects::CreateService.new(project_user, project_params).call if project.present? @@ -194,7 +195,6 @@ class SyncForgeController < ApplicationController def check_token sync_params = params[:sync_params] - Rails.logger.info("=======is_token:#{sync_params[:token] == get_token}=====================") unless sync_params[:token] && sync_params[:token] == get_token render json: {message: "token_errors"} end From c6c7f0968b5d553c37ce77f5905544a5770f7677 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Thu, 9 Jul 2020 20:37:43 +0800 Subject: [PATCH 017/384] change bugs --- app/controllers/sync_forge_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/sync_forge_controller.rb b/app/controllers/sync_forge_controller.rb index b51b0880b..dc8aac612 100644 --- a/app/controllers/sync_forge_controller.rb +++ b/app/controllers/sync_forge_controller.rb @@ -6,11 +6,11 @@ class SyncForgeController < ApplicationController sync_params = params[:sync_params] #以前已同步的项目,那么肯定存在仓库 if Project.exists?(id: sync_params[:id], identifier: sync_params[:identifier]) - SyncLog.sync_log("=================begin_to_update_project========") + Rails.logger.info("=================begin_to_update_project========") project = Project.find_by(id: sync_params[:id]) check_sync_project(project, sync_params) else #新建项目 - SyncLog.sync_log("=================begin_to_create_new_project========") + Rails.logger.info("=================begin_to_create_new_project========") project_user = User.where(login: sync_params[:owner_login]).first project_params = { identifier: sync_params[:identifier], From 66beab34570ae587ea92d0acb62afceb68ac28a1 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Fri, 10 Jul 2020 11:54:30 +0800 Subject: [PATCH 018/384] s --- app/services/repositories/create_service.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/services/repositories/create_service.rb b/app/services/repositories/create_service.rb index b9005db55..866251900 100644 --- a/app/services/repositories/create_service.rb +++ b/app/services/repositories/create_service.rb @@ -15,6 +15,19 @@ class Repositories::CreateService < ApplicationService gitea_repository = Gitea::Repository::CreateService.new(user.gitea_token, gitea_repository_params).call sync_project(@repository, gitea_repository) sync_repository(@repository, gitea_repository) + if project.project_type == "common" + chain_params = { + type: "create", + chain_params:{ + username: user.try(:login), + reponame: @repository.try(:identifier), + token_name: @repository.try(:identifier), + total_supply: 1000000 + } + } + PostChainJob.perform_later(chain_params) #创建上链操作 + end + else Rails.logger.info("#############___________create_repository_erros______###########{@repository.errors.messages}") end @repository From e74bba9092ade45135373a9519ba6018bbc1f81a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 10 Jul 2020 14:08:16 +0800 Subject: [PATCH 019/384] ADD test devops --- .../dev_ops/cloud_accounts_controller.rb | 64 +++++++++++++++++++ .../dev_ops/create_cloud_account_form.rb | 9 +++ app/helpers/dev_ops_helper.rb | 2 + app/libs/custom_regexp.rb | 3 +- app/libs/dev_ops/drone/ci.rb | 23 +++++++ app/libs/dev_ops/drone/client.rb | 39 +++++++++++ app/libs/dev_ops/drone/server.rb | 59 +++++++++++++++++ app/libs/dev_ops/drone/start.rb | 22 +++++++ app/models/devops_cloud_account.rb | 25 ++++++++ app/models/oauth.rb | 5 ++ app/models/project.rb | 2 +- app/services/gitea/client_service.rb | 3 - app/services/gitea/oauth2/create_service.rb | 41 ++++++++++++ config/routes.rb | 6 +- ...0708114354_create_devops_cloud_accounts.rb | 14 ++++ ...gitea_oauth_id_and_project_id_to_oauths.rb | 6 ++ 16 files changed, 317 insertions(+), 6 deletions(-) create mode 100644 app/controllers/dev_ops/cloud_accounts_controller.rb create mode 100644 app/forms/dev_ops/create_cloud_account_form.rb create mode 100644 app/helpers/dev_ops_helper.rb create mode 100644 app/libs/dev_ops/drone/ci.rb create mode 100644 app/libs/dev_ops/drone/client.rb create mode 100644 app/libs/dev_ops/drone/server.rb create mode 100644 app/libs/dev_ops/drone/start.rb create mode 100644 app/models/devops_cloud_account.rb create mode 100644 app/models/oauth.rb create mode 100644 app/services/gitea/oauth2/create_service.rb create mode 100644 db/migrate/20200708114354_create_devops_cloud_accounts.rb create mode 100644 db/migrate/20200709061656_add_gitea_oauth_id_and_project_id_to_oauths.rb diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb new file mode 100644 index 000000000..0cc63ced8 --- /dev/null +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -0,0 +1,64 @@ +class DevOps::CloudAccountsController < ApplicationController + before_action :require_login + before_action :find_project + + def create + ActiveRecord::Base.transaction do + DevOps::CreateCloudAccountForm.new(devops_params).validate! + logger.info "######### devops_params: #{devops_params}" + logger.info "######### ......: #{(IPAddr.new devops_params[:ip_num]).to_i}" + logger.info "######### ......: #{DevopsCloudAccount.encrypted_secret(devops_params[:secret])}" + # 1. 保存华为云服务器帐号 + logger.info "######### ......ff: #{devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevopsCloudAccount.encrypted_secret(devops_params[:secret]))}" + create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevopsCloudAccount.encrypted_secret(devops_params[:secret])) + logger.info "######### create_params: #{create_params}" + cloud_account = DevopsCloudAccount.new(create_params) + cloud_account.user = current_user + cloud_account.save + # 2. 生成oauth2应用程序的client_id和client_secrete + gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline", redirect_uris: [cloud_account.drone_url]}) + logger.info "######### gitea_oauth: #{gitea_oauth}" + oauth = Oauth.new(client_id: gitea_oauth['client_id'], + client_secret: gitea_oauth['client_secret'], + redirect_uri: gitea_oauth['redirect_uris'], + gitea_oauth_id: gitea_oauth['id'], + user_id: current_user.id, + project_id: devops_params[:project_id]) + oauth.save + + rpc_secret = SecureRandom.hex 16 + logger.info "######### rpc_secret: #{rpc_secret}" + # 3. 创建drone server + drone_server_cmd = DevOps::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd + logger.info "######### drone_server_cmd: #{drone_server_cmd}" + + # 4. 创建drone client + drone_client_cmd = DevOps::Drone::Client.new(oauth.client_id, cloud_account.drone_ip, rpc_secret).generate_cmd + logger.info "######### drone_client_cmd: #{drone_client_cmd}" + + # 5. 登录远程服务器,启动drone服务 + result = DevOps::Drone::Start.new(cloud_account.account, cloud_account.visible_secret, cloud_account.drone_ip, drone_server_cmd, drone_client_cmd).run + logger.info "######### result: #{result}" + + + redirect_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{oauth.client_id}&redirect_uri=#{cloud_account.drone_url}/login&response_type=code" + if result + render_ok(redirect_url: redirect_url) + else + render_error('激活失败') + end + end + rescue Exception => ex + render_error(ex.message) + end + + private + def devops_params + params.permit(:account, :secret, :ip_num, :project_id) + end + + def find_project + @project = Project.find_by_id params[:project_id] + render_not_found("未找到project_id为:#{params[:project_id]}相关的项目") if @project.blank? + end +end diff --git a/app/forms/dev_ops/create_cloud_account_form.rb b/app/forms/dev_ops/create_cloud_account_form.rb new file mode 100644 index 000000000..2d1752b74 --- /dev/null +++ b/app/forms/dev_ops/create_cloud_account_form.rb @@ -0,0 +1,9 @@ +class DevOps::CreateCloudAccountForm + include ActiveModel::Model + + attr_accessor :project_id, :ip_num, :account, :secret + + validates :project_id, :account, :secret, presence: true + validates :ip_num, presence: true, format: { with: CustomRegexp::IP, multiline: true, message: 'IP 地址格式不对' } + +end diff --git a/app/helpers/dev_ops_helper.rb b/app/helpers/dev_ops_helper.rb new file mode 100644 index 000000000..cb4d7e9b8 --- /dev/null +++ b/app/helpers/dev_ops_helper.rb @@ -0,0 +1,2 @@ +module DevOpsHelper +end diff --git a/app/libs/custom_regexp.rb b/app/libs/custom_regexp.rb index 497c26cae..4aa6fac2d 100644 --- a/app/libs/custom_regexp.rb +++ b/app/libs/custom_regexp.rb @@ -5,4 +5,5 @@ module CustomRegexp NICKNAME = /\A[\u4e00-\u9fa5_a-zA-Z0-9]+\z/ PASSWORD = /\A[a-z_A-Z0-9\-\.!@#\$%\\\^&\*\)\(\+=\{\}\[\]\/",'_<>~\·`\?:;|]{8,16}\z/ URL = /\Ahttps?:\/\/[-A-Za-z0-9+&@#\/%?=~_|!:,.;]+[-A-Za-z0-9+&@#\/%=~_|]\z/ -end \ No newline at end of file + IP = /^((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$/ +end diff --git a/app/libs/dev_ops/drone/ci.rb b/app/libs/dev_ops/drone/ci.rb new file mode 100644 index 000000000..62bdd69ac --- /dev/null +++ b/app/libs/dev_ops/drone/ci.rb @@ -0,0 +1,23 @@ +class DevOps::Drone::Ci + attr_reader :host, :username, :password + + # host: drone server's ip + # username: drone server's account + # password: drone server's password + # eq: + # DevOps::Drone::Ci.new(@cloud_account.drone_ip, @cloud_account.account, @cloud_account.visible_secret).get_token + def initialize(host, username, password) + @host = host + @username = username + @password = password + end + + def get_token + `sshpass -p #{password} ssh -o "StrictHostKeyChecking no" #{username}@#{host} "#{cmd}"` + end + + private + def cmd + "cd ..; cd var/lib/drone/; sqlite3 database.sqlite; .dump; select user_hash from users where user_login=#{username} " + end +end diff --git a/app/libs/dev_ops/drone/client.rb b/app/libs/dev_ops/drone/client.rb new file mode 100644 index 000000000..8e479b09c --- /dev/null +++ b/app/libs/dev_ops/drone/client.rb @@ -0,0 +1,39 @@ +class DevOps::Drone::Client + attr_reader :client_id, :drone_ip, :rpc_secret + + # client_id: user's client_id from oauth + # drone_ip: 云服务器IP地址, eq: 173.65.32.21 + # eq: + # DevOps::Drone::Client.new(current_user.oauth.client_id, 'drone_ip').generate_cmd + def initialize(client_id, drone_ip, rpc_secret) + @client_id = client_id + @drone_ip = drone_ip + @rpc_secret = rpc_secret + end + + def run + `docker run -d \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -e DRONE_RPC_SERVER=drone-server-#{client_id}:9000 \ + -e DRONE_RPC_SECRET=#{rpc_secret} \ + -e DRONE_RUNNER_NAME=#{drone_ip} \ + --restart always \ + --name drone-agent--#{client_id} \ + --net="bridge" \ + drone/drone-runner-docker:1 + ` + end + + def generate_cmd + "docker run -d \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -e DRONE_RPC_SERVER=drone-server-#{client_id}:9000 \ + -e DRONE_RPC_SECRET=#{rpc_secret} \ + -e DRONE_RUNNER_NAME=#{drone_ip} \ + --restart always \ + --name drone-agent--#{client_id} \ + --net='bridge' \ + drone/drone-runner-docker:1 + " + end +end diff --git a/app/libs/dev_ops/drone/server.rb b/app/libs/dev_ops/drone/server.rb new file mode 100644 index 000000000..22e864c69 --- /dev/null +++ b/app/libs/dev_ops/drone/server.rb @@ -0,0 +1,59 @@ +class DevOps::Drone::Server + attr_reader :client_id, :client_secret, :drone_host, :rpc_secret + + # client_id: user's client_id from oauth + # client_secret: user's client_id from oauth + # drone_host: 云服务器地址,eq: 173.53.21.31:80 + # eg: + # DevOps::Drone::Server.new(current_user.oauth.client_id, current_user.oauth.client_secret, 'drone_host').generate_cmd + def initialize(client_id, client_secret, drone_host, rpc_secret) + @client_id = client_id + @drone_host = drone_host + @rpc_secret = rpc_secret + @client_secret = client_secret + end + + def run + ` + docker run \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -e DRONE_GITEA_SERVER=#{gitea_url} \ + -e DRONE_GITEA_CLIENT_ID=#{client_id} \ + -e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \ + -e DRONE_RPC_SECRET=#{rpc_secret} \ + -e DRONE_SERVER_HOST=#{drone_host} \ + -e DRONE_SERVER_PROTO=http \ + -p "80:80" \ + -p "9000:9000" \ + --restart=always \ + --detach=true \ + --name=drone-server-#{client_id} \ + --net="bridge" \ + drone/drone:1 + ` + end + + def generate_cmd + "service docker start; docker run \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -e DRONE_GITEA_SERVER=#{gitea_url} \ + -e DRONE_GITEA_CLIENT_ID=#{client_id} \ + -e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \ + -e DRONE_RPC_SECRET=#{rpc_secret} \ + -e DRONE_SERVER_HOST=#{drone_host} \ + -e DRONE_SERVER_PROTO=http \ + -p '80:80' \ + -p '9000:9000' \ + --restart=always \ + --detach=true \ + --name=drone-server-#{client_id} \ + --net='bridge' \ + drone/drone:1 + " + end + + private + def gitea_url + Gitea.gitea_config[:domain] + end +end diff --git a/app/libs/dev_ops/drone/start.rb b/app/libs/dev_ops/drone/start.rb new file mode 100644 index 000000000..29c3324f6 --- /dev/null +++ b/app/libs/dev_ops/drone/start.rb @@ -0,0 +1,22 @@ +class DevOps::Drone::Start + attr_reader :drone_username, :drone_password, :drone_host, :drone_server_cmd, :drone_client_cmd + + # drone_username="XXXX" 云服务器登录用户名 + # drone_password="XXXXX" 云服务器用户密码 + # drone_host="" 云服务器地址 + # eq: + # drone_server_cmd = DevOps::Drone::Server.new('client_id', 'client_secret', 'drone_url').generate_cmd + # drone_client_cmd = DevOps::Drone::Client.new('client_id', 'server_url').generate_cmd + # DevOps::Drone::Start.new(drone_username, drone_password, 'drone_host', drone_server_cmd, drone_client_cmd).run + def initialize(drone_username, drone_password, drone_host, drone_server_cmd, drone_client_cmd) + @drone_username = drone_username + @drone_password = drone_password + @drone_host = drone_host + @drone_server_cmd = drone_server_cmd + @drone_client_cmd = drone_client_cmd + end + + def run + `sshpass -p #{drone_password} ssh -o "StrictHostKeyChecking no" #{drone_username}@#{drone_host} "#{drone_server_cmd} && #{drone_client_cmd}"` + end +end diff --git a/app/models/devops_cloud_account.rb b/app/models/devops_cloud_account.rb new file mode 100644 index 000000000..a77e3ff8a --- /dev/null +++ b/app/models/devops_cloud_account.rb @@ -0,0 +1,25 @@ +class DevopsCloudAccount < ApplicationRecord + belongs_to :project + belongs_to :user + + + def drone_host + [drone_ip, ":80"].join + end + + def drone_ip + IPAddr.new(self.ip_num, Socket::AF_INET).to_s + end + + def drone_url + ["http://", drone_host].join + end + + def visible_secret + Base64.decode64(secret) + end + + def self.encrypted_secret(str) + Base64.encode64(str.strip).gsub(/\n/, '') + end +end diff --git a/app/models/oauth.rb b/app/models/oauth.rb new file mode 100644 index 000000000..563ed0906 --- /dev/null +++ b/app/models/oauth.rb @@ -0,0 +1,5 @@ +# for oauth2 application +class Oauth < ApplicationRecord + belongs_to :project + belongs_to :user +end diff --git a/app/models/project.rb b/app/models/project.rb index b288c0cbd..8a07bc5a0 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -161,7 +161,7 @@ class Project < ApplicationRecord member&.roles&.last&.name || permission end - def fork_project + def fork_project Project.find_by(id: self.forked_from_project_id) end diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 584276378..7fd990c6f 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -21,9 +21,6 @@ class Gitea::ClientService < ApplicationService def post(url, params={}) puts "[gitea] request params: #{params}" request_url = [api_url, url].join('').freeze - Rails.logger.info("######_____api____request_url_______###############{request_url}") - Rails.logger.info("######_____api____request_params_______###############{params}") - auth_token = authen_params(params[:token]) response = conn(auth_token).post do |req| req.url "#{request_url}" diff --git a/app/services/gitea/oauth2/create_service.rb b/app/services/gitea/oauth2/create_service.rb new file mode 100644 index 000000000..ba87e960c --- /dev/null +++ b/app/services/gitea/oauth2/create_service.rb @@ -0,0 +1,41 @@ +# creates a new OAuth2 application +class Gitea::Oauth2::CreateService < Gitea::ClientService + attr_reader :token, :params + + # params: + # { + # "name": "string", + # "redirect_uris": [ + # "string" + # ] + # } + # ep: Gitea::OAuth2::CreateService.call(current_user.gitea_token, {name: 'oauth_name', redirect_uris: ['url']}) + # return values example: + # { + # "client_id": "string", + # "client_secret": "string", + # "created": "2020-07-08T03:12:49.960Z", + # "id": 0, + # "name": "string", + # "redirect_uris": [ + # "string" + # ] + # } + def initialize(token, params) + @token = token + @params = params + end + + def call + post(url, request_params) + end + + private + def url + "/user/applications/oauth2".freeze + end + + def request_params + params.merge(token: token, data: params).compact + end +end diff --git a/config/routes.rb b/config/routes.rb index ba9efd909..25626273e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,5 @@ Rails.application.routes.draw do - + require 'sidekiq/web' require 'admin_constraint' @@ -16,6 +16,10 @@ Rails.application.routes.draw do resources :edu_settings scope '/api' do + namespace :dev_ops do + resources :cloud_accounts, only: [:create] + end + resources :composes do resources :compose_projects, only: [:create, :destroy] end diff --git a/db/migrate/20200708114354_create_devops_cloud_accounts.rb b/db/migrate/20200708114354_create_devops_cloud_accounts.rb new file mode 100644 index 000000000..3607968f7 --- /dev/null +++ b/db/migrate/20200708114354_create_devops_cloud_accounts.rb @@ -0,0 +1,14 @@ +class CreateDevopsCloudAccounts < ActiveRecord::Migration[5.2] + def change + create_table :devops_cloud_accounts do |t| + t.integer :project_id, null: false + t.integer :user_id, null: false + t.integer :ip_num, null: false + t.string :account, null: false + t.string :secret, null: false + + t.timestamps + end + add_index :devops_cloud_accounts, [:project_id, :user_id, :ip_num] + end +end diff --git a/db/migrate/20200709061656_add_gitea_oauth_id_and_project_id_to_oauths.rb b/db/migrate/20200709061656_add_gitea_oauth_id_and_project_id_to_oauths.rb new file mode 100644 index 000000000..6208601b1 --- /dev/null +++ b/db/migrate/20200709061656_add_gitea_oauth_id_and_project_id_to_oauths.rb @@ -0,0 +1,6 @@ +class AddGiteaOauthIdAndProjectIdToOauths < ActiveRecord::Migration[5.2] + def change + add_column :oauths, :gitea_oauth_id, :integer + add_column :oauths, :project_id, :integer + end +end From 2ccf667f201014831bf3985c857087f7d2538579 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Mon, 13 Jul 2020 10:08:20 +0800 Subject: [PATCH 020/384] change bugs --- app/jobs/sync_projects_job.rb | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/app/jobs/sync_projects_job.rb b/app/jobs/sync_projects_job.rb index d5ba839a2..d98b268e6 100644 --- a/app/jobs/sync_projects_job.rb +++ b/app/jobs/sync_projects_job.rb @@ -64,11 +64,11 @@ class SyncProjectsJob < ApplicationJob if target_type == "Issue" assing_u_id = User.select(:id, :login).where(login: re[:assign_login]).pluck(:id).first new_target.assigned_to_id = assing_u_id - if re[:journals].present? - create_target(re[:journals], "Journal") - end end if new_target.save! + if re[:journals].present? + create_journals(re[:journals], "Journal", new_target.id) + end if re[:journal_details].present? re[:journal_details].each do |j| JournalDetail.create!(j[:journal_detail].merge(journal_id: new_target.id)) @@ -80,6 +80,28 @@ class SyncProjectsJob < ApplicationJob SyncLog.sync_log("***111222. end_to_create_target---------------") end + def create_journals(target_jsons, target_type,issue_id) + SyncLog.sync_log("***【#{target_type}】. begin_to_create_target---------------") + return SyncLog.sync_log("*** no target_jsons") if target_jsons.blank? + target_jsons.each_with_index do |re,index| + SyncLog.sync_log("***user_login:#{re[:user_login]}----target_type:#{target_type}-----#{index+1}") + if re[:target_params].present? + u_id = User.select(:id, :login).where(login: re[:user_login]).pluck(:id).first + re[:target_params].delete(:id) + new_target = Journal.new(re[:target_params].merge(user_id: u_id)) + new_target.journalized_id = issue_id + if new_target.save! + if re[:journal_details].present? + re[:journal_details].each do |j| + JournalDetail.create!(j[:journal_detail].merge(journal_id: new_target.id)) + end + end + end + end + end + SyncLog.sync_log("***111222. end_to_create_journal---------------") + end + def create_versions(project, target_jsons) SyncLog.sync_log("***【Versions】. begin_to_create_verison---------------") return SyncLog.sync_log("*** no target_jsons") if target_jsons.blank? From 6527603e24fc29a355e783692f1658924ec49c36 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 14 Jul 2020 15:06:09 +0800 Subject: [PATCH 021/384] =?UTF-8?q?FIX=20=E5=AE=8C=E5=96=84devops=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2731 +---------------- .../dev_ops/cloud_accounts_controller.rb | 11 +- .../dev_ops/languages_controller.rb | 20 + app/helpers/application_helper.rb | 5 + app/helpers/dev_ops/languages_helper.rb | 2 + app/libs/dev_ops/drone/ci.rb | 14 +- app/libs/dev_ops/drone/client.rb | 3 +- app/libs/dev_ops/drone/request.rb | 110 + app/libs/dev_ops/drone/server.rb | 8 +- app/models/dev_ops.rb | 5 + .../cloud_account.rb} | 4 +- app/models/dev_ops/language.rb | 15 + .../dev_ops/languages/common.json.jbuilder | 6 + .../dev_ops/languages/index.json.jbuilder | 6 + .../dev_ops/languages/show.json.jbuilder | 4 + config/routes.rb | 5 + ...20200710124116_create_dev_ops_languages.rb | 11 + ...713150706_create_dev_ops_cloud_accounts.rb | 14 + ...14513_add_cover_id_to_dev_ops_languages.rb | 5 + ...32759_drop_devops_clound_accounts_table.rb | 5 + lib/tasks/dev_ops_languages.rake | 715 +++++ 21 files changed, 1080 insertions(+), 2619 deletions(-) create mode 100644 app/controllers/dev_ops/languages_controller.rb create mode 100644 app/helpers/dev_ops/languages_helper.rb create mode 100644 app/libs/dev_ops/drone/request.rb create mode 100644 app/models/dev_ops.rb rename app/models/{devops_cloud_account.rb => dev_ops/cloud_account.rb} (88%) create mode 100644 app/models/dev_ops/language.rb create mode 100644 app/views/dev_ops/languages/common.json.jbuilder create mode 100644 app/views/dev_ops/languages/index.json.jbuilder create mode 100644 app/views/dev_ops/languages/show.json.jbuilder create mode 100644 db/migrate/20200710124116_create_dev_ops_languages.rb create mode 100644 db/migrate/20200713150706_create_dev_ops_cloud_accounts.rb create mode 100644 db/migrate/20200714014513_add_cover_id_to_dev_ops_languages.rb create mode 100644 db/migrate/20200714032759_drop_devops_clound_accounts_table.rb create mode 100644 lib/tasks/dev_ops_languages.rake diff --git a/README.md b/README.md index 61f68b32a..66bc49773 100644 --- a/README.md +++ b/README.md @@ -458,10 +458,9 @@ curl -X POST \ -d "clone_addr=https://gitea.com/mx8090alex/golden.git" \ -d "name=golden_mirror1" \ -d "description=golden_mirror" \ --d "repository_name=golden_mirror1" \ -d "project_category_id=1" \ -d "project_language_id=2" \ -http://localhost:3000/api/projects/migrate.json?debug=admin | jq +http://localhost:3000/api/projects/migrate.json | jq ``` *请求参数说明:* @@ -1874,2606 +1873,7 @@ http://localhost:3000/api/repositories/5845/commits/b0c4a4a1487d53acebf2addc544b } ], "IsIncomplete": false - }, - { - "Name": "docker-compose.yml", - "OldName": "docker-compose.yml", - "Index": 2, - "Addition": 42, - "Deletion": 0, - "Type": 1, - "IsCreated": true, - "IsDeleted": false, - "IsBin": false, - "IsLFSFile": false, - "IsRenamed": false, - "IsSubmodule": false, - "Sections": [ - { - "Name": "", - "Lines": [ - { - "LeftIdx": 0, - "RightIdx": 0, - "Type": 4, - "Content": "@@ -0,0 +1,42 @@", - "Comments": null, - "SectionInfo": { - "Path": "docker-compose.yml", - "LastLeftIdx": 0, - "LastRightIdx": 0, - "LeftIdx": 0, - "RightIdx": 1, - "LeftHunkSize": 0, - "RightHunkSize": 42 - } - }, - { - "LeftIdx": 0, - "RightIdx": 1, - "Type": 2, - "Content": "+version: '3.6'", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 2, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 3, - "Type": 2, - "Content": "+services:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 4, - "Type": 2, - "Content": "+ web:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 5, - "Type": 2, - "Content": "+ build: .", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 6, - "Type": 2, - "Content": "+ command: sh -c \"/wait && java -jar /usr/local/markov-demo-0.0.1-SNAPSHOT.jar\"", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 7, - "Type": 2, - "Content": "+ environment:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 8, - "Type": 2, - "Content": "+ - WAIT_HOSTS=container-mysql:3306", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 9, - "Type": 2, - "Content": "+ - WAIT_HOSTS_TIMEOUT=300", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 10, - "Type": 2, - "Content": "+ - WAIT_SLEEP_INTERVAL=30", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 11, - "Type": 2, - "Content": "+ - WAIT_HOST_CONNECT_TIMEOUT=30", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 12, - "Type": 2, - "Content": "+ - spring.datasource.url=jdbc:mysql://container-mysql:3306/markov_demo?useUnicode=true&characterEncoding=utf-8", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 13, - "Type": 2, - "Content": "+ depends_on:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 14, - "Type": 2, - "Content": "+ - container-mysql", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 15, - "Type": 2, - "Content": "+ ports:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 16, - "Type": 2, - "Content": "+ - '8080:8080'", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 17, - "Type": 2, - "Content": "+ expose:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 18, - "Type": 2, - "Content": "+ - '8080'", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 19, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 20, - "Type": 2, - "Content": "+ container-mysql:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 21, - "Type": 2, - "Content": "+ image: mysql:5.7", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 22, - "Type": 2, - "Content": "+ restart: always", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 23, - "Type": 2, - "Content": "+ environment:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 24, - "Type": 2, - "Content": "+ MYSQL_DATABASE: 'markov_demo'", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 25, - "Type": 2, - "Content": "+ # So you don't have to use root, but you can if you like", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 26, - "Type": 2, - "Content": "+ MYSQL_USER: 'root'", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 27, - "Type": 2, - "Content": "+ # You can use whatever password you like", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 28, - "Type": 2, - "Content": "+ MYSQL_PASSWORD: '123'", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 29, - "Type": 2, - "Content": "+ # Password for root access", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 30, - "Type": 2, - "Content": "+ MYSQL_ROOT_PASSWORD: '123'", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 31, - "Type": 2, - "Content": "+ ports:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 32, - "Type": 2, - "Content": "+ # : < MySQL Port running inside container>", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 33, - "Type": 2, - "Content": "+ - '3306:3306'", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 34, - "Type": 2, - "Content": "+ expose:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 35, - "Type": 2, - "Content": "+ # Opens port 3306 on the container", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 36, - "Type": 2, - "Content": "+ - '3306'", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 37, - "Type": 2, - "Content": "+ # Where our data will be persisted", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 38, - "Type": 2, - "Content": "+ volumes:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 39, - "Type": 2, - "Content": "+ - my-db:/tmp/mysql", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 40, - "Type": 2, - "Content": "+# Names our volume", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 41, - "Type": 2, - "Content": "+volumes:", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 42, - "Type": 2, - "Content": "+ my-db: {}", - "Comments": null, - "SectionInfo": null - } - ] - } - ], - "IsIncomplete": false - }, - { - "Name": "pom.xml", - "OldName": "pom.xml", - "Index": 3, - "Addition": 5, - "Deletion": 0, - "Type": 2, - "IsCreated": false, - "IsDeleted": false, - "IsBin": false, - "IsLFSFile": false, - "IsRenamed": false, - "IsSubmodule": false, - "Sections": [ - { - "Name": "", - "Lines": [ - { - "LeftIdx": 0, - "RightIdx": 0, - "Type": 4, - "Content": "@@ -26,6 +26,11 @@", - "Comments": null, - "SectionInfo": { - "Path": "pom.xml", - "LastLeftIdx": 0, - "LastRightIdx": 0, - "LeftIdx": 26, - "RightIdx": 26, - "LeftHunkSize": 6, - "RightHunkSize": 11 - } - }, - { - "LeftIdx": 26, - "RightIdx": 26, - "Type": 1, - "Content": " \t\t\tmybatis-spring-boot-starter", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 27, - "RightIdx": 27, - "Type": 1, - "Content": " \t\t\t2.1.2", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 28, - "RightIdx": 28, - "Type": 1, - "Content": " \t\t", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 29, - "Type": 2, - "Content": "+\t\t", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 30, - "Type": 2, - "Content": "+\t\t\torg.flywaydb", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 31, - "Type": 2, - "Content": "+\t\t\tflyway-core", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 32, - "Type": 2, - "Content": "+\t\t\t6.4.2", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 33, - "Type": 2, - "Content": "+\t\t", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 29, - "RightIdx": 34, - "Type": 1, - "Content": " ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 30, - "RightIdx": 35, - "Type": 1, - "Content": " \t\t", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 31, - "RightIdx": 36, - "Type": 1, - "Content": " \t\t\tmysql", - "Comments": null, - "SectionInfo": null - } - ] - }, - { - "Name": "", - "Lines": [ - { - "LeftIdx": 0, - "RightIdx": 0, - "Type": 4, - "Content": " ", - "Comments": null, - "SectionInfo": { - "Path": "pom.xml", - "LastLeftIdx": 31, - "LastRightIdx": 36, - "LeftIdx": 103, - "RightIdx": 108, - "LeftHunkSize": 0, - "RightHunkSize": 0 - } - } - ] - } - ], - "IsIncomplete": false - }, - { - "Name": "src/main/resources/application.properties", - "OldName": "src/main/resources/application.properties", - "Index": 4, - "Addition": 5, - "Deletion": 4, - "Type": 2, - "IsCreated": false, - "IsDeleted": false, - "IsBin": false, - "IsLFSFile": false, - "IsRenamed": false, - "IsSubmodule": false, - "Sections": [ - { - "Name": "", - "Lines": [ - { - "LeftIdx": 0, - "RightIdx": 0, - "Type": 4, - "Content": "@@ -1,10 +1,11 @@", - "Comments": null, - "SectionInfo": { - "Path": "src/main/resources/application.properties", - "LastLeftIdx": 0, - "LastRightIdx": 0, - "LeftIdx": 1, - "RightIdx": 1, - "LeftHunkSize": 10, - "RightHunkSize": 11 - } - }, - { - "LeftIdx": 1, - "RightIdx": 0, - "Type": 3, - "Content": "-", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 1, - "Type": 2, - "Content": "+# Database configuration", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 2, - "RightIdx": 2, - "Type": 1, - "Content": " spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 3, - "RightIdx": 3, - "Type": 1, - "Content": " spring.datasource.url = jdbc:mysql://127.0.0.1:3306/markov_demo?useUnicode=true&characterEncoding=utf-8", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 4, - "RightIdx": 4, - "Type": 1, - "Content": " spring.datasource.username = root", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 5, - "RightIdx": 5, - "Type": 1, - "Content": " spring.datasource.password = 123", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 6, - "RightIdx": 6, - "Type": 1, - "Content": " ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 7, - "RightIdx": 0, - "Type": 3, - "Content": "-", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 8, - "RightIdx": 0, - "Type": 3, - "Content": "-", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 9, - "RightIdx": 0, - "Type": 3, - "Content": "-mybatis.mapper-locations= classpath:mapping/*Mapper.xml", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 7, - "Type": 2, - "Content": "+mybatis.mapper-locations=classpath:mapping/*Mapper.xml", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 10, - "RightIdx": 8, - "Type": 1, - "Content": " mybatis.type-aliases-package=com.alibaba.markovdemo.entity", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 9, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 10, - "Type": 2, - "Content": "+spring.flyway.default-schema=markov_demo", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 11, - "Type": 2, - "Content": "+spring.flyway.locations=classpath:db/migration", - "Comments": null, - "SectionInfo": null - } - ] - } - ], - "IsIncomplete": false - }, - { - "Name": "src/main/resources/db/migration/V1__init_ddl.sql", - "OldName": "src/main/resources/db/migration/V1__init_ddl.sql", - "Index": 5, - "Addition": 179, - "Deletion": 0, - "Type": 1, - "IsCreated": true, - "IsDeleted": false, - "IsBin": false, - "IsLFSFile": false, - "IsRenamed": false, - "IsSubmodule": false, - "Sections": [ - { - "Name": "", - "Lines": [ - { - "LeftIdx": 0, - "RightIdx": 0, - "Type": 4, - "Content": "@@ -0,0 +1,179 @@", - "Comments": null, - "SectionInfo": { - "Path": "src/main/resources/db/migration/V1__init_ddl.sql", - "LastLeftIdx": 0, - "LastRightIdx": 0, - "LeftIdx": 0, - "RightIdx": 1, - "LeftHunkSize": 0, - "RightHunkSize": 179 - } - }, - { - "LeftIdx": 0, - "RightIdx": 1, - "Type": 2, - "Content": "+create database if not exists markov_demo;", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 2, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 3, - "Type": 2, - "Content": "+use markov_demo;", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 4, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 5, - "Type": 2, - "Content": "+CREATE TABLE `got_testcase` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 6, - "Type": 2, - "Content": "+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 7, - "Type": 2, - "Content": "+ `scenario_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT 'scenario id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 8, - "Type": 2, - "Content": "+ `gmt_create` datetime DEFAULT NULL COMMENT '创建时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 9, - "Type": 2, - "Content": "+ `gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 10, - "Type": 2, - "Content": "+ `name` longtext COMMENT 'name',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 11, - "Type": 2, - "Content": "+ `description` longtext COMMENT 'description',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 12, - "Type": 2, - "Content": "+ `long_description` longtext COMMENT '详细描述',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 13, - "Type": 2, - "Content": "+ `content` longtext COMMENT '存储case的阶段数据,比如数据准备阶段,数据执行阶段',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 14, - "Type": 2, - "Content": "+ `case_group` varchar(100) DEFAULT NULL COMMENT 'case分组',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 15, - "Type": 2, - "Content": "+ `is_deleted` int(11) DEFAULT '0' COMMENT '用例是否被删除。0-没有删除;1-已删除,此类case不会展示到页面上',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 16, - "Type": 2, - "Content": "+ `case_template` text COMMENT '用例模板 java/c++',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 17, - "Type": 2, - "Content": "+ `features` text COMMENT '业务特征',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 18, - "Type": 2, - "Content": "+ `is_visible` int DEFAULT '0' COMMENT '是否可见用例',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 19, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 20, - "Type": 2, - "Content": "+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='testcase';", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 21, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 22, - "Type": 2, - "Content": "+CREATE TABLE `got_pipeline` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 23, - "Type": 2, - "Content": "+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键(id)',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 24, - "Type": 2, - "Content": "+ `pipeline` longtext COMMENT 'pipeline的json配置',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 25, - "Type": 2, - "Content": "+ `extend` text COMMENT '扩展字段',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 26, - "Type": 2, - "Content": "+ `tag` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '流程定义/自定义\\n',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 27, - "Type": 2, - "Content": "+ `scenario_id` bigint(20) unsigned DEFAULT NULL COMMENT '场景id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 28, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 29, - "Type": 2, - "Content": "+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='存储流程执行的pipeline配置文件';", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 30, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 31, - "Type": 2, - "Content": "+CREATE TABLE `got_scenario` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 32, - "Type": 2, - "Content": "+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 33, - "Type": 2, - "Content": "+ `name` varchar(100) DEFAULT NULL COMMENT 'name',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 34, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 35, - "Type": 2, - "Content": "+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='测试场景表';", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 36, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 37, - "Type": 2, - "Content": "+CREATE TABLE `got_envs` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 38, - "Type": 2, - "Content": "+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 39, - "Type": 2, - "Content": "+ `gmt_create` datetime DEFAULT NULL COMMENT '创建时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 40, - "Type": 2, - "Content": "+ `gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 41, - "Type": 2, - "Content": "+ `host_ip` varchar(20) DEFAULT NULL COMMENT 'host_ip',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 42, - "Type": 2, - "Content": "+ `status` varchar(20) DEFAULT NULL COMMENT '状态',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 43, - "Type": 2, - "Content": "+ `name` varchar(200) DEFAULT NULL COMMENT '环境名称',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 44, - "Type": 2, - "Content": "+ `env_detail` text COMMENT '环境详情',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 45, - "Type": 2, - "Content": "+ `scenario_id` bigint(20) unsigned DEFAULT NULL COMMENT '场景id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 46, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 47, - "Type": 2, - "Content": "+) ENGINE=InnoDB AUTO_INCREMENT=6928 DEFAULT CHARSET=utf8 COMMENT='环境列表';", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 48, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 49, - "Type": 2, - "Content": "+CREATE TABLE `pipeline_ui` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 50, - "Type": 2, - "Content": "+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 51, - "Type": 2, - "Content": "+ `scenario_id` bigint(20) unsigned DEFAULT NULL COMMENT '场景id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 52, - "Type": 2, - "Content": "+ `content` text COMMENT 'pipeline_ui的jsonString\\n',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 53, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 54, - "Type": 2, - "Content": "+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='pipeline_ui表';", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 55, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 56, - "Type": 2, - "Content": "+CREATE TABLE `got_datasource` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 57, - "Type": 2, - "Content": "+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键/场景id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 58, - "Type": 2, - "Content": "+ `content` longtext COMMENT '数据源内容',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 59, - "Type": 2, - "Content": "+ `scenario_id` bigint(20) unsigned DEFAULT NULL COMMENT '场景id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 60, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`),", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 61, - "Type": 2, - "Content": "+ KEY `idx_scenario_id` (`scenario_id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 62, - "Type": 2, - "Content": "+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='测试数据源表';", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 63, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 64, - "Type": 2, - "Content": "+CREATE TABLE `got_menu` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 65, - "Type": 2, - "Content": "+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 66, - "Type": 2, - "Content": "+ `content` text COMMENT 'menu的jsonString\\n',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 67, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 68, - "Type": 2, - "Content": "+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='menu表';", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 69, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 70, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 71, - "Type": 2, - "Content": "+insert into got_menu values(0, \"{ \\\"buinfo\\\": { \\\"buid\\\": 1, \\\"appSecneMap\\\": { \\\"1\\\": \\\"1\\\" }, \\\"menu\\\": [{ \\\"businessId\\\": 1, \\\"businessName\\\": \\\"markov-demo\\\", \\\"appMenuList\\\": [{ \\\"appName\\\": \\\"测试模块\\\", \\\"appId\\\": 1, \\\"scenarioMenuList\\\": [{ \\\"isMember\\\": true, \\\"scenarioId\\\": 1, \\\"scenarioName\\\": \\\"场景1\\\" },{ \\\"isMember\\\": true, \\\"scenarioId\\\": 2, \\\"scenarioName\\\": \\\"场景2\\\" }] }] }, ], \\\"buName\\\": \\\"markov-demo\\\" }}\");", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 72, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 73, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 74, - "Type": 2, - "Content": "+CREATE TABLE `got_reports` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 75, - "Type": 2, - "Content": "+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 76, - "Type": 2, - "Content": "+ `gmt_create` datetime NOT NULL COMMENT '创建时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 77, - "Type": 2, - "Content": "+ `gmt_modified` datetime NOT NULL COMMENT '修改时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 78, - "Type": 2, - "Content": "+ `user` text COMMENT '执行用户',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 79, - "Type": 2, - "Content": "+ `report_name` text COMMENT '报告名称',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 80, - "Type": 2, - "Content": "+ `status` varchar(100) DEFAULT NULL COMMENT '执行状态',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 81, - "Type": 2, - "Content": "+ `message` text COMMENT '信息',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 82, - "Type": 2, - "Content": "+ `app_id` bigint(20) unsigned DEFAULT NULL COMMENT 'appid',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 83, - "Type": 2, - "Content": "+ `scenario_id` bigint(20) unsigned DEFAULT NULL COMMENT '场景id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 84, - "Type": 2, - "Content": "+ `run_type` text COMMENT '执行方式',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 85, - "Type": 2, - "Content": "+ `exec_id` text COMMENT '批次id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 86, - "Type": 2, - "Content": "+ `analysis` text COMMENT '分析报告',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 87, - "Type": 2, - "Content": "+ `task_id` text COMMENT 'zk任务id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 88, - "Type": 2, - "Content": "+ `zk_info` longtext COMMENT 'zk信息',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 89, - "Type": 2, - "Content": "+ `accuracy_report_id` bigint(20) unsigned DEFAULT NULL COMMENT '精准测试报告id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 90, - "Type": 2, - "Content": "+ `case_num` int(10) unsigned DEFAULT '0' COMMENT '回归用例数',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 91, - "Type": 2, - "Content": "+ `image_name` text COMMENT '回归的镜像版本',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 92, - "Type": 2, - "Content": "+ `branch_name` text COMMENT '执行用例的分支',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 93, - "Type": 2, - "Content": "+ `git_branch` text COMMENT '测试源码的分支',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 94, - "Type": 2, - "Content": "+ `git_commit` text COMMENT '测试源码的commit版本',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 95, - "Type": 2, - "Content": "+ `cc_cov_rate` text COMMENT '增量代码覆盖率',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 96, - "Type": 2, - "Content": "+ `is_visible` int DEFAULT '0' COMMENT '是否可见报告',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 97, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`),", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 98, - "Type": 2, - "Content": "+ KEY `idx_scenarioid` (`scenario_id`),", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 99, - "Type": 2, - "Content": "+ KEY `idx_appid` (`app_id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 100, - "Type": 2, - "Content": "+) ENGINE=InnoDB AUTO_INCREMENT=7858 DEFAULT CHARSET=utf8mb4 COMMENT='回归测试报告表';", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 101, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 102, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 103, - "Type": 2, - "Content": "+CREATE TABLE `got_testcase_snaps` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 104, - "Type": 2, - "Content": "+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 105, - "Type": 2, - "Content": "+ `gmt_create` datetime NOT NULL COMMENT '创建时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 106, - "Type": 2, - "Content": "+ `gmt_modified` datetime NOT NULL COMMENT '修改时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 107, - "Type": 2, - "Content": "+ `scenario_id` bigint(20) unsigned DEFAULT NULL COMMENT '场景id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 108, - "Type": 2, - "Content": "+ `app_id` bigint(20) unsigned DEFAULT NULL COMMENT 'appid',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 109, - "Type": 2, - "Content": "+ `name` varchar(100) DEFAULT NULL COMMENT '用例名',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 110, - "Type": 2, - "Content": "+ `description` text COMMENT '描述',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 111, - "Type": 2, - "Content": "+ `long_description` longtext COMMENT '详情',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 112, - "Type": 2, - "Content": "+ `content` longtext COMMENT '输入,输出,期望,数据准备',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 113, - "Type": 2, - "Content": "+ `status` varchar(100) DEFAULT NULL COMMENT '用例执行状态',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 114, - "Type": 2, - "Content": "+ `testreport_id` bigint(20) unsigned NOT NULL COMMENT '归属的报告id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 115, - "Type": 2, - "Content": "+ `testcase_id` bigint(20) unsigned NOT NULL COMMENT '归属的用例id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 116, - "Type": 2, - "Content": "+ `case_group` varchar(100) DEFAULT NULL COMMENT '测试用例分组',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 117, - "Type": 2, - "Content": "+ `tag` varchar(100) DEFAULT NULL COMMENT 'case标签,可有有多个值',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 118, - "Type": 2, - "Content": "+ `version` varchar(100) DEFAULT NULL COMMENT 'case版本号',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 119, - "Type": 2, - "Content": "+ `run_time` bigint(20) unsigned DEFAULT NULL COMMENT '执行时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 120, - "Type": 2, - "Content": "+ `run_time_str` text COMMENT '执行时间标准化',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 121, - "Type": 2, - "Content": "+ `retry_num` bigint(20) unsigned DEFAULT NULL COMMENT '重试次数',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 122, - "Type": 2, - "Content": "+ `constancy` text COMMENT '稳定性',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 123, - "Type": 2, - "Content": "+ `env_name` text COMMENT '环境名',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 124, - "Type": 2, - "Content": "+ `conflict_desc` text COMMENT '冲突用例描述',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 125, - "Type": 2, - "Content": "+ `is_parallel` tinyint(1) DEFAULT NULL COMMENT '是否串行',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 126, - "Type": 2, - "Content": "+ `trouble_shoot_box` longtext COMMENT '智能归因',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 127, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`),", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 128, - "Type": 2, - "Content": "+ KEY `idx_caseid` (`testcase_id`),", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 129, - "Type": 2, - "Content": "+ KEY `idx_reportid` (`testreport_id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 130, - "Type": 2, - "Content": "+) ENGINE=InnoDB AUTO_INCREMENT=303953 DEFAULT CHARSET=utf8mb4 COMMENT='测试报告用例集快照'", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 131, - "Type": 2, - "Content": "+;", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 132, - "Type": 2, - "Content": "+CREATE TABLE `got_features_pool` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 133, - "Type": 2, - "Content": "+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 134, - "Type": 2, - "Content": "+ `gmt_create` datetime NOT NULL COMMENT '创建时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 135, - "Type": 2, - "Content": "+ `gmt_modified` datetime NOT NULL COMMENT '修改时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 136, - "Type": 2, - "Content": "+ `scenario_id` bigint unsigned NULL COMMENT 'scenario_id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 137, - "Type": 2, - "Content": "+ `app_id` bigint unsigned NULL COMMENT 'app_id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 138, - "Type": 2, - "Content": "+ `features` text NULL COMMENT '特征集',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 139, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 140, - "Type": 2, - "Content": "+) DEFAULT CHARACTER SET=utf8mb4 COMMENT='特征池';", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 141, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 142, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 143, - "Type": 2, - "Content": "+CREATE TABLE `got_case_generate_task` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 144, - "Type": 2, - "Content": "+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 145, - "Type": 2, - "Content": "+ `gmt_create` datetime NOT NULL COMMENT '创建时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 146, - "Type": 2, - "Content": "+ `gmt_modified` datetime NOT NULL COMMENT '修改时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 147, - "Type": 2, - "Content": "+ `creator` text COMMENT '任务创建者',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 148, - "Type": 2, - "Content": "+ `seed_case_list` text COMMENT '种子用例id列表,以”,“分隔',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 149, - "Type": 2, - "Content": "+ `scenario_id` bigint unsigned DEFAULT NULL COMMENT '场景id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 150, - "Type": 2, - "Content": "+ `env_info` text COMMENT '测试环境信息',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 151, - "Type": 2, - "Content": "+ `feature_conf` longtext COMMENT '任务相关配置,jsonObject',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 152, - "Type": 2, - "Content": "+ `task_name` text COMMENT '任务名',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 153, - "Type": 2, - "Content": "+ `task_snap` longtext COMMENT '任务生成信息',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 154, - "Type": 2, - "Content": "+ `task_result` longtext COMMENT '最终生成用例',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 155, - "Type": 2, - "Content": "+ `task_status` text COMMENT 'crate 、executing、success or fail ',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 156, - "Type": 2, - "Content": "+ `gene_bank_snap` longtext COMMENT 'json格式gene bank',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 157, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 158, - "Type": 2, - "Content": "+) ENGINE=InnoDB AUTO_INCREMENT=98 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='用例智能生成任务记录表';", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 159, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 160, - "Type": 2, - "Content": "+CREATE TABLE `got_case_accuracy` (", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 161, - "Type": 2, - "Content": "+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 162, - "Type": 2, - "Content": "+ `gmt_create` datetime NOT NULL COMMENT '创建时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 163, - "Type": 2, - "Content": "+ `gmt_modified` datetime NOT NULL COMMENT '修改时间',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 164, - "Type": 2, - "Content": "+ `case_id` bigint unsigned DEFAULT NULL COMMENT 'case id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 165, - "Type": 2, - "Content": "+ `exe_id` bigint unsigned DEFAULT NULL COMMENT '回归执行id',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 166, - "Type": 2, - "Content": "+ `cov_line` longtext COMMENT 'case覆盖的代码行,json格式',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 167, - "Type": 2, - "Content": "+ `collect_type` text COMMENT 'single : 单case收集;total:任务整体收集',", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 168, - "Type": 2, - "Content": "+ PRIMARY KEY (`id`),", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 169, - "Type": 2, - "Content": "+ KEY `idx_caseid` (`case_id`),", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 170, - "Type": 2, - "Content": "+ KEY `idx_exe_id` (`exe_id`)", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 171, - "Type": 2, - "Content": "+) ENGINE=InnoDB AUTO_INCREMENT=16001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='case精准数据覆盖数据记录表';", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 172, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 173, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 174, - "Type": 2, - "Content": "+INSERT INTO `got_testcase` (`gmt_create`,`gmt_modified`,`scenario_id`,`name`,`description`,`long_description`,`content`,`case_group`,`is_deleted`,`case_template`,`is_visible`) VALUES ('2020-04-28 19:12:55','2020-04-28 19:12:55',1,'case名','用例智能生成-种子用例','种子用例','{\\\"prepareData\\\":[{\\\"Tair\\\":[{\\\"dsName\\\":\\\"table.markovtair.test\\\",\\\"data\\\":[{\\\"key\\\":\\\"testkey\\\",\\\"value\\\":\\\"testvalue\\\",\\\"property\\\":\\\"\\\"}]}]}],\\\"caseRunStage\\\":[{\\\"group_name\\\":\\\"ERPC校验(第一组)\\\",\\\"data\\\":[{\\\"input\\\":\\\"{\\\\n \\\\\\\"ad_id\\\\\\\": \\\\\\\"222\\\\\\\",\\\\n \\\\\\\"search_key\\\\\\\": \\\\\\\"key1\\\\\\\",\\\\n \\\\\\\"match_level\\\\\\\": 2,\\\\n \\\\\\\"user_type\\\\\\\": \\\\\\\"type1\\\\\\\",\\\\n \\\\\\\"top_num\\\\\\\": 10,\\\\n \\\\\\\"use_feature\\\\\\\": false,\\\\n \\\\\\\"other1\\\\\\\": \\\\\\\"1\\\\\\\",\\\\n \\\\\\\"other2\\\\\\\": \\\\\\\"0\\\\\\\"\\\\n}\\\",\\\"expect\\\":\\\"{\\\\n \\\\\\\"result\\\\\\\": \\\\\\\"1\\\\\\\" \\\\n}\\\",\\\"actual\\\":\\\"null\\\"}]}]}','test',0,'c++',0);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 175, - "Type": 2, - "Content": "+INSERT INTO `got_testcase` (`gmt_create`,`gmt_modified`,`scenario_id`,`name`,`description`,`long_description`,`content`,`case_group`,`is_deleted`,`case_template`,`is_visible`) VALUES ('2020-04-28 19:12:55','2020-04-28 19:12:55',1,'case名','用例智能推荐用例1','普通用例','{\\\"prepareData\\\":[{\\\"Tair\\\":[{\\\"dsName\\\":\\\"table.markovtair.test\\\",\\\"data\\\":[{\\\"key\\\":\\\"testkey\\\",\\\"value\\\":\\\"testvalue\\\",\\\"property\\\":\\\"\\\"}]}],\\\"Imock\\\":[{\\\"dsName\\\":\\\"erpc_merger_inner\\\",\\\"data\\\":[{\\\"key\\\":\\\"key1\\\",\\\"value\\\":\\\"value1\\\",\\\"property\\\":\\\"\\\"},{\\\"key\\\":\\\"key2\\\",\\\"value\\\":\\\"value2\\\",\\\"property\\\":\\\"\\\"}],\\\"restartFlag\\\":\\\"0\\\"}]}],\\\"caseRunStage\\\":[{\\\"group_name\\\":\\\"ERPC校验(第一组)\\\",\\\"data\\\":[{\\\"input\\\":\\\"{\\\\n \\\\\\\"param_manager\\\\\\\": {\\\\n \\\\\\\"expand_param\\\\\\\": {\\\\n \\\\\\\"key_value_list\\\\\\\": [\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature1\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature2\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"3,8;4,16\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature3\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature4\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"one_phase_model_searching,200,166,1\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature5\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"false\\\\\\\"\\\\n }\\\\n ]\\\\n }\\\\n }\\\\n}\\\",\\\"expect\\\":\\\"{\\\\n \\\\\\\"result\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n}\\\",\\\"actual\\\":\\\"null\\\"}]}]}','猜你喜欢',0,'c++',0);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 176, - "Type": 2, - "Content": "+INSERT INTO `got_testcase` (`gmt_create`,`gmt_modified`,`scenario_id`,`name`,`description`,`long_description`,`content`,`case_group`,`is_deleted`,`case_template`,`is_visible`) VALUES ('2020-04-28 19:12:55','2020-04-28 19:12:55',1,'case名','用例智能推荐用例2','普通用例','{\\\"prepareData\\\":[{\\\"Tair\\\":[{\\\"dsName\\\":\\\"table.markovtair.test\\\",\\\"data\\\":[{\\\"key\\\":\\\"testkey\\\",\\\"value\\\":\\\"testvalue\\\",\\\"property\\\":\\\"\\\"}]}],\\\"Imock\\\":[{\\\"dsName\\\":\\\"erpc_merger_inner\\\",\\\"data\\\":[{\\\"key\\\":\\\"key1\\\",\\\"value\\\":\\\"confict-value\\\",\\\"property\\\":\\\"\\\"},{\\\"key\\\":\\\"key2\\\",\\\"value\\\":\\\"value2\\\",\\\"property\\\":\\\"\\\"}]}]}],\\\"caseRunStage\\\":[{\\\"group_name\\\":\\\"ERPC校验(第一组)\\\",\\\"data\\\":[{\\\"input\\\":\\\"{\\\\n \\\\\\\"param_manager\\\\\\\": {\\\\n \\\\\\\"expand_param\\\\\\\": {\\\\n \\\\\\\"key_value_list\\\\\\\": [\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature1\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature2\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"3,8;4,16\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature3\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature4\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"one_phase_model_searching,200,166,1\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature5\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"false\\\\\\\"\\\\n }\\\\n ]\\\\n }\\\\n }\\\\n}\\\",\\\"expect\\\":\\\"{\\\\n \\\\\\\"result\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n}\\\"}]}]}','购物车',0,'c++',0);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 177, - "Type": 2, - "Content": "+INSERT INTO `got_testcase` (`gmt_create`,`gmt_modified`,`scenario_id`,`name`,`description`,`long_description`,`content`,`case_group`,`is_deleted`,`case_template`,`is_visible`) VALUES ('2020-04-28 19:12:55','2020-04-28 19:12:55',1,'case名','用例智能推荐用例3','普通用例','{\\\"prepareData\\\":[{\\\"Tair\\\":[{\\\"dsName\\\":\\\"table.markovtair.test\\\",\\\"data\\\":[{\\\"key\\\":\\\"testkey\\\",\\\"value\\\":\\\"testvalue\\\",\\\"property\\\":\\\"\\\"}]}],\\\"Imock\\\":[{\\\"dsName\\\":\\\"erpc_merger_inner\\\",\\\"data\\\":[{\\\"key\\\":\\\"key1\\\",\\\"value\\\":\\\"value1\\\",\\\"property\\\":\\\"\\\"},{\\\"key\\\":\\\"key3\\\",\\\"value\\\":\\\"value3\\\",\\\"property\\\":\\\"\\\"}]}]}],\\\"caseRunStage\\\":[{\\\"group_name\\\":\\\"ERPC校验(第一组)\\\",\\\"data\\\":[{\\\"input\\\":\\\"{\\\\n \\\\\\\"param_manager\\\\\\\": {\\\\n \\\\\\\"expand_param\\\\\\\": {\\\\n \\\\\\\"key_value_list\\\\\\\": [\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature1\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"true\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature2\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"3,8;4,16\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature3\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature4\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"one_phase_model_searching,200,166,1\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"key\\\\\\\": \\\\\\\"feature5\\\\\\\",\\\\n \\\\\\\"value\\\\\\\": \\\\\\\"false\\\\\\\"\\\\n }\\\\n ]\\\\n }\\\\n }\\\\n}\\\",\\\"expect\\\":\\\"{\\\\n \\\\\\\"result\\\\\\\": \\\\\\\"1\\\\\\\"\\\\n}\\\"}]}]}','直播',0,'c++',0);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 178, - "Type": 2, - "Content": "+", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 179, - "Type": 2, - "Content": "+INSERT INTO `got_envs` (`gmt_create`,`gmt_modified`,`scenario_id`,`name`,`status`,`host_ip`,`env_detail`) VALUES ('2020-04-28 19:12:55','2020-04-28 19:12:55',1,'初始测试环境','SUCCESS','11.167.254.210','123');", - "Comments": null, - "SectionInfo": null - } - ] - } - ], - "IsIncomplete": false - }, - { - "Name": "src/main/resources/static/index.html", - "OldName": "src/main/resources/static/index.html", - "Index": 6, - "Addition": 1, - "Deletion": 1, - "Type": 2, - "IsCreated": false, - "IsDeleted": false, - "IsBin": false, - "IsLFSFile": false, - "IsRenamed": false, - "IsSubmodule": false, - "Sections": [ - { - "Name": "", - "Lines": [ - { - "LeftIdx": 0, - "RightIdx": 0, - "Type": 4, - "Content": "@@ -24,7 +24,7 @@", - "Comments": null, - "SectionInfo": { - "Path": "src/main/resources/static/index.html", - "LastLeftIdx": 0, - "LastRightIdx": 0, - "LeftIdx": 24, - "RightIdx": 24, - "LeftHunkSize": 7, - "RightHunkSize": 7 - } - }, - { - "LeftIdx": 24, - "RightIdx": 24, - "Type": 1, - "Content": " ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 25, - "RightIdx": 25, - "Type": 1, - "Content": " ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 26, - "RightIdx": 26, - "Type": 1, - "Content": " ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 27, - "RightIdx": 0, - "Type": 3, - "Content": "- ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 0, - "RightIdx": 27, - "Type": 2, - "Content": "+ ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 28, - "RightIdx": 28, - "Type": 1, - "Content": " ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 29, - "RightIdx": 29, - "Type": 1, - "Content": " ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 30, - "RightIdx": 30, - "Type": 1, - "Content": " ", - "Comments": null, - "SectionInfo": null - } - ] - }, - { - "Name": "", - "Lines": [ - { - "LeftIdx": 0, - "RightIdx": 0, - "Type": 4, - "Content": " ", - "Comments": null, - "SectionInfo": { - "Path": "src/main/resources/static/index.html", - "LastLeftIdx": 30, - "LastRightIdx": 30, - "LeftIdx": 43, - "RightIdx": 43, - "LeftHunkSize": 0, - "RightHunkSize": 0 - } - } - ] - } - ], - "IsIncomplete": false - }, - { - "Name": "src/test/java/com/alibaba/markovdemo/MarkovDemoApplicationTests.java", - "OldName": "src/test/java/com/alibaba/markovdemo/MarkovDemoApplicationTests.java", - "Index": 7, - "Addition": 0, - "Deletion": 27, - "Type": 2, - "IsCreated": false, - "IsDeleted": false, - "IsBin": false, - "IsLFSFile": false, - "IsRenamed": false, - "IsSubmodule": false, - "Sections": [ - { - "Name": "", - "Lines": [ - { - "LeftIdx": 0, - "RightIdx": 0, - "Type": 4, - "Content": "@@ -32,36 +32,9 @@ class MarkovDemoApplicationTests {", - "Comments": null, - "SectionInfo": { - "Path": "src/test/java/com/alibaba/markovdemo/MarkovDemoApplicationTests.java", - "LastLeftIdx": 0, - "LastRightIdx": 0, - "LeftIdx": 32, - "RightIdx": 32, - "LeftHunkSize": 36, - "RightHunkSize": 9 - } - }, - { - "LeftIdx": 32, - "RightIdx": 32, - "Type": 1, - "Content": " \t\treturn df2.format(date1);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 33, - "RightIdx": 33, - "Type": 1, - "Content": " \t}", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 34, - "RightIdx": 34, - "Type": 1, - "Content": " ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 35, - "RightIdx": 0, - "Type": 3, - "Content": "-", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 36, - "RightIdx": 35, - "Type": 1, - "Content": " \t@Test", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 37, - "RightIdx": 36, - "Type": 1, - "Content": " \tvoid wordTest () throws IOException {", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 38, - "RightIdx": 37, - "Type": 1, - "Content": " ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 39, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\t// FileInputStream fis = new FileInputStream(\"199801.txt\");", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 40, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\t// FileOutputStream fos = new FileOutputStream(\"dic.txt\");", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 41, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\t// ImportCorpus readF = new ImportCorpus(fis, fos);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 42, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\t// readF.readDic();", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 43, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\t// System.out.println(\"µ¼Èë½áÊø\");", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 44, - "RightIdx": 0, - "Type": 3, - "Content": "-", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 45, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tString filename = \"dic.txt\";", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 46, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tHashMap hm = new HashMap();", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 47, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tHashMap len = new HashMap();", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 48, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tGenerateDictionary genDic = new GenerateDictionary();", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 49, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tSegmentation seg;", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 50, - "RightIdx": 0, - "Type": 3, - "Content": "-", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 51, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tgenDic.genHashDic(filename, hm, len);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 52, - "RightIdx": 0, - "Type": 3, - "Content": "-", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 53, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tInputStreamReader reader = new InputStreamReader(System.in);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 54, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tBufferedReader br = new BufferedReader(reader);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 55, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tString data = \"\";", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 56, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tdata = br.readLine();", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 57, - "RightIdx": 0, - "Type": 3, - "Content": "-", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 58, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tseg = new Segmentation(hm, len);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 59, - "RightIdx": 0, - "Type": 3, - "Content": "-", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 60, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tString FmmTarget = seg.Fmm(data);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 61, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tString BmmTarget = seg.Bmm(data);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 62, - "RightIdx": 0, - "Type": 3, - "Content": "-", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 63, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tSystem.out.println(\"FmmTarget: \" + FmmTarget);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 64, - "RightIdx": 0, - "Type": 3, - "Content": "-\t\tSystem.out.println(\"BmmTarget: \" + BmmTarget);", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 65, - "RightIdx": 38, - "Type": 1, - "Content": " \t}", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 66, - "RightIdx": 39, - "Type": 1, - "Content": " ", - "Comments": null, - "SectionInfo": null - }, - { - "LeftIdx": 67, - "RightIdx": 40, - "Type": 1, - "Content": " }", - "Comments": null, - "SectionInfo": null - } - ] - } - ], - "IsIncomplete": false } - ] } ``` --- @@ -4951,3 +2351,132 @@ http://localhost:3000/api//api/repositories/3868/delete_file | jq } ``` --- + + + +### DevOps相关api +--- + +#### 初始化DevOps流程 +``` +POST /api/dev_ops/cloud_accounts +``` + +*示例* +``` +curl -X POST http://localhost:3000/api/dev_ops/cloud_accounts | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|status |string|服务端返回状态,0: 表示请求成功, -1: 标识请求失败| +|message |string|服务端返回信息说明| +|redirect_url |string|重定向地址,请求成功后,需要调整到该地址进行认证| + +返回值 +``` +{ + "status": 0, + "message": "success", + "redirect_url": "http://192.168.2.59:3003/login/oauth/authorize?client_id=f0c58484-d0f7-46c0-9efd-de3e3218e723&redirect_uri=http://121.36.81.172:80/login&response_type=code" +} +``` +--- + +#### 获取语言列表 +``` +GET /api/dev_ops/languages +``` + +*示例* +``` +curl -X GET http://localhost:3000/api/dev_ops/languages.json | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|id值| +|name |string|语言名称| +|content |string|语言内容| +|cover_url |string|语言的logo链接| + +返回值 +``` +[ + { + "id": 114, + "name": "C", + "cover_url": null, + "content": "kind: pipeline\n name: default\n\n platform:\n os: linux\n arch: arm64\n\n steps:\n - name: test\n image: gcc\n commands:\n - ./configure\n - make\n - make test", + } +] +``` +--- + +#### 获取常用的6大语言 +``` +GET /api/dev_ops/languages/common +``` + +*示例* +``` +curl -X GET http://localhost:3000/api/dev_ops/languages/common.json | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|id值| +|name |string|语言名称| +|content |string|语言内容| +|cover_url |string|语言的logo链接| + +返回值 +``` +[ + { + "id": 114, + "name": "C", + "cover_url": null, + "content": "kind: pipeline\n name: default\n\n platform:\n os: linux\n arch: arm64\n\n steps:\n - name: test\n image: gcc\n commands:\n - ./configure\n - make\n - make test", + } +] +``` +--- + +#### 获取语言详情 +``` +GET /api/dev_ops/languages/:id +``` + +*示例* +``` +curl -X GET http://localhost:3000/api/dev_ops/languages/114.json | jq +``` + +*返回参数说明:* + +|参数名|类型|说明| +|-|-|-| +|id |int|id值| +|name |string|语言名称| +|content |string|语言内容| +|cover_url |string|语言的logo链接| + +返回值 +``` +[ + { + "id": 114, + "name": "C", + "cover_url": null, + "content": "kind: pipeline\n name: default\n\n platform:\n os: linux\n arch: arm64\n\n steps:\n - name: test\n image: gcc\n commands:\n - ./configure\n - make\n - make test", + } +] +``` +--- diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index 0cc63ced8..0eb4270ce 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -7,16 +7,16 @@ class DevOps::CloudAccountsController < ApplicationController DevOps::CreateCloudAccountForm.new(devops_params).validate! logger.info "######### devops_params: #{devops_params}" logger.info "######### ......: #{(IPAddr.new devops_params[:ip_num]).to_i}" - logger.info "######### ......: #{DevopsCloudAccount.encrypted_secret(devops_params[:secret])}" + logger.info "######### ......: #{DevOps::CloudAccount.encrypted_secret(devops_params[:secret])}" # 1. 保存华为云服务器帐号 - logger.info "######### ......ff: #{devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevopsCloudAccount.encrypted_secret(devops_params[:secret]))}" - create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevopsCloudAccount.encrypted_secret(devops_params[:secret])) + logger.info "######### ......ff: #{devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret]))}" + create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret])) logger.info "######### create_params: #{create_params}" - cloud_account = DevopsCloudAccount.new(create_params) + cloud_account = DevOps::CloudAccount.new(create_params) cloud_account.user = current_user cloud_account.save # 2. 生成oauth2应用程序的client_id和client_secrete - gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline", redirect_uris: [cloud_account.drone_url]}) + gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline", redirect_uris: ["#{cloud_account.drone_url}/login"]}) logger.info "######### gitea_oauth: #{gitea_oauth}" oauth = Oauth.new(client_id: gitea_oauth['client_id'], client_secret: gitea_oauth['client_secret'], @@ -42,6 +42,7 @@ class DevOps::CloudAccountsController < ApplicationController redirect_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{oauth.client_id}&redirect_uri=#{cloud_account.drone_url}/login&response_type=code" + logger.info "######### redirect_url: #{redirect_url}" if result render_ok(redirect_url: redirect_url) else diff --git a/app/controllers/dev_ops/languages_controller.rb b/app/controllers/dev_ops/languages_controller.rb new file mode 100644 index 000000000..5863be647 --- /dev/null +++ b/app/controllers/dev_ops/languages_controller.rb @@ -0,0 +1,20 @@ +class DevOps::LanguagesController < ApplicationController + before_action :require_login + before_action :find_langugae, only: :show + + def index + @languages = DevOps::Language.by_usage_amount_desc + end + + def show + end + + def common + @languages = DevOps::Language.six_common + end + + private + def find_langugae + @language = DevOps::Language.find params[:id] + end +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 2dc8c897d..1ac9a85b7 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -436,4 +436,9 @@ module ApplicationHelper def find_user_by_login(login) User.find_by_login login end + + def render_base64_decoded(str) + return nil if str.blank? + Base64.decode64 str + end end diff --git a/app/helpers/dev_ops/languages_helper.rb b/app/helpers/dev_ops/languages_helper.rb new file mode 100644 index 000000000..00b1b6183 --- /dev/null +++ b/app/helpers/dev_ops/languages_helper.rb @@ -0,0 +1,2 @@ +module DevOps::LanguagesHelper +end diff --git a/app/libs/dev_ops/drone/ci.rb b/app/libs/dev_ops/drone/ci.rb index 62bdd69ac..13eed9ba5 100644 --- a/app/libs/dev_ops/drone/ci.rb +++ b/app/libs/dev_ops/drone/ci.rb @@ -1,23 +1,25 @@ class DevOps::Drone::Ci - attr_reader :host, :username, :password + attr_reader :host, :username, :password, :gitea_username # host: drone server's ip # username: drone server's account # password: drone server's password # eq: # DevOps::Drone::Ci.new(@cloud_account.drone_ip, @cloud_account.account, @cloud_account.visible_secret).get_token - def initialize(host, username, password) - @host = host - @username = username - @password = password + def initialize(host, username, password, gitea_username) + @host = host + @username = username + @password = password + @gitea_username = gitea_username end def get_token + puts "--------- sshpass -p #{password} ssh -o 'StrictHostKeyChecking no' #{username}@#{host} '#{cmd}'" `sshpass -p #{password} ssh -o "StrictHostKeyChecking no" #{username}@#{host} "#{cmd}"` end private def cmd - "cd ..; cd var/lib/drone/; sqlite3 database.sqlite; .dump; select user_hash from users where user_login=#{username} " + "cd ..; cd var/lib/drone/; sqlite3 database.sqlite; .dump; select user_hash from users where user_login=#{gitea_username} " end end diff --git a/app/libs/dev_ops/drone/client.rb b/app/libs/dev_ops/drone/client.rb index 8e479b09c..540876bc6 100644 --- a/app/libs/dev_ops/drone/client.rb +++ b/app/libs/dev_ops/drone/client.rb @@ -33,7 +33,6 @@ class DevOps::Drone::Client --restart always \ --name drone-agent--#{client_id} \ --net='bridge' \ - drone/drone-runner-docker:1 - " + drone/drone-runner-docker:1" end end diff --git a/app/libs/dev_ops/drone/request.rb b/app/libs/dev_ops/drone/request.rb new file mode 100644 index 000000000..ddead22b5 --- /dev/null +++ b/app/libs/dev_ops/drone/request.rb @@ -0,0 +1,110 @@ + # @private + class DevOps::Drone::Request + format :json + headers 'Accept' => 'application/json' + parser Proc.new { |body, _| parse(body) } + + attr_accessor :private_token + + # Converts the response body to an ObjectifiedHash. + def self.parse(body) + body = decode(body) + + if body.is_a? Hash + ObjectifiedHash.new body + elsif body.is_a? Array + body.collect! { |e| ObjectifiedHash.new(e) } + elsif body == true + body + else + raise Error::Parsing.new "Couldn't parse a response body" + end + end + + # Decodes a JSON response into Ruby object. + def self.decode(response) + begin + JSON.load response + rescue JSON::ParserError + raise Error::Parsing.new "The response is not a valid JSON" + end + end + + def get(path, options={}) + set_httparty_config(options) + set_private_token_header(options) + validate self.class.get(path, options) + end + + def post(path, options={}) + set_httparty_config(options) + set_private_token_header(options, path) + validate self.class.post(path, options) + end + + def put(path, options={}) + set_httparty_config(options) + set_private_token_header(options) + validate self.class.put(path, options) + end + + def delete(path, options={}) + set_httparty_config(options) + set_private_token_header(options) + validate self.class.delete(path, options) + end + + # Checks the response code for common errors. + # Returns parsed response for successful requests. + def validate(response) + # case response.code + # when 400; raise Error::BadRequest.new error_message(response) + # when 401; raise Error::Unauthorized.new error_message(response) + # when 403; raise Error::Forbidden.new error_message(response) + # when 404; raise Error::NotFound.new error_message(response) + # when 405; raise Error::MethodNotAllowed.new error_message(response) + # when 406; raise Error::DataNotAccepted.new error_message(response) + # when 409; raise Error::Conflict.new error_message(response) + # when 500; raise Error::InternalServerError.new error_message(response) + # when 502; raise Error::BadGateway.new error_message(response) + # when 503; raise Error::ServiceUnavailable.new error_message(response) + # end + + response.parsed_response + end + + # Sets a base_uri and default_params for requests. + # @raise [Error::MissingCredentials] if endpoint not set. + def set_request_defaults(endpoint, private_token, sudo=nil) + raise Error::MissingCredentials.new("Please set an endpoint to API") unless endpoint + @private_token = private_token + + self.class.base_uri endpoint + self.class.default_params :sudo => sudo + self.class.default_params.delete(:sudo) if sudo.nil? + end + + private + + # Sets a PRIVATE-TOKEN header for requests. + # @raise [Error::MissingCredentials] if private_token not set. + def set_private_token_header(options, path=nil) + unless path == '/session' + raise Error::MissingCredentials.new("Please set a private_token for user") unless @private_token + options[:headers] = {'PRIVATE-TOKEN' => @private_token} + end + end + + # Set HTTParty configuration + # @see https://github.com/jnunemaker/httparty + def set_httparty_config(options) + if self.httparty + options.merge!(self.httparty) + end + end + + def error_message(response) + "Server responded with code #{response.code}, message: #{response.parsed_response.message}. " \ + "Request URI: #{response.request.base_uri}#{response.request.path}" + end + end diff --git a/app/libs/dev_ops/drone/server.rb b/app/libs/dev_ops/drone/server.rb index 22e864c69..04c7a9cda 100644 --- a/app/libs/dev_ops/drone/server.rb +++ b/app/libs/dev_ops/drone/server.rb @@ -33,9 +33,12 @@ class DevOps::Drone::Server ` end + # TODO 一下代码方便测试,正式环境请移除 + # docker rm -f `docker ps -qa` def generate_cmd - "service docker start; docker run \ + "service docker start; docker rm -f `docker ps -qa`; docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ + -v /var/lib/drone:/data \ -e DRONE_GITEA_SERVER=#{gitea_url} \ -e DRONE_GITEA_CLIENT_ID=#{client_id} \ -e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \ @@ -48,8 +51,7 @@ class DevOps::Drone::Server --detach=true \ --name=drone-server-#{client_id} \ --net='bridge' \ - drone/drone:1 - " + drone/drone:1" end private diff --git a/app/models/dev_ops.rb b/app/models/dev_ops.rb new file mode 100644 index 000000000..f6b80f15f --- /dev/null +++ b/app/models/dev_ops.rb @@ -0,0 +1,5 @@ +module DevOps + def self.table_name_prefix + 'dev_ops_' + end +end diff --git a/app/models/devops_cloud_account.rb b/app/models/dev_ops/cloud_account.rb similarity index 88% rename from app/models/devops_cloud_account.rb rename to app/models/dev_ops/cloud_account.rb index a77e3ff8a..255396493 100644 --- a/app/models/devops_cloud_account.rb +++ b/app/models/dev_ops/cloud_account.rb @@ -1,8 +1,7 @@ -class DevopsCloudAccount < ApplicationRecord +class DevOps::CloudAccount < ApplicationRecord belongs_to :project belongs_to :user - def drone_host [drone_ip, ":80"].join end @@ -22,4 +21,5 @@ class DevopsCloudAccount < ApplicationRecord def self.encrypted_secret(str) Base64.encode64(str.strip).gsub(/\n/, '') end + end diff --git a/app/models/dev_ops/language.rb b/app/models/dev_ops/language.rb new file mode 100644 index 000000000..742ae54ea --- /dev/null +++ b/app/models/dev_ops/language.rb @@ -0,0 +1,15 @@ +class DevOps::Language < ApplicationRecord + # before_save :encode_content + + belongs_to :cover, class_name: "Attachment", foreign_key: :cover_id, optional: true + + scope :six_common, -> { limit(6).by_usage_amount_desc } + scope :without_content, -> { select(column_names - ['content']) } + scope :by_usage_amount_desc, -> { order(usage_amount: :desc) } + + + private + def encode_content + self.content = Base64.encode64 content + end +end diff --git a/app/views/dev_ops/languages/common.json.jbuilder b/app/views/dev_ops/languages/common.json.jbuilder new file mode 100644 index 000000000..ba0214c89 --- /dev/null +++ b/app/views/dev_ops/languages/common.json.jbuilder @@ -0,0 +1,6 @@ +json.array! @languages do |lang| + json.id lang.id + json.name lang.name + json.content render_base64_decoded lang.content + json.cover_url lang.cover_id.present? ? download_url(lang.cover) : nil +end diff --git a/app/views/dev_ops/languages/index.json.jbuilder b/app/views/dev_ops/languages/index.json.jbuilder new file mode 100644 index 000000000..ba0214c89 --- /dev/null +++ b/app/views/dev_ops/languages/index.json.jbuilder @@ -0,0 +1,6 @@ +json.array! @languages do |lang| + json.id lang.id + json.name lang.name + json.content render_base64_decoded lang.content + json.cover_url lang.cover_id.present? ? download_url(lang.cover) : nil +end diff --git a/app/views/dev_ops/languages/show.json.jbuilder b/app/views/dev_ops/languages/show.json.jbuilder new file mode 100644 index 000000000..2fbef2baa --- /dev/null +++ b/app/views/dev_ops/languages/show.json.jbuilder @@ -0,0 +1,4 @@ +json.id @language.id +json.name @language.name +json.content render_base64_decoded @language.content +json.cover_url @language.cover_id.present? ? download_url(@language.cover) : nil diff --git a/config/routes.rb b/config/routes.rb index 25626273e..af6c4cf7f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -18,6 +18,11 @@ Rails.application.routes.draw do scope '/api' do namespace :dev_ops do resources :cloud_accounts, only: [:create] + resources :languages, only: [:index, :create, :show] do + collection do + get :common + end + end end resources :composes do diff --git a/db/migrate/20200710124116_create_dev_ops_languages.rb b/db/migrate/20200710124116_create_dev_ops_languages.rb new file mode 100644 index 000000000..1a899ad0d --- /dev/null +++ b/db/migrate/20200710124116_create_dev_ops_languages.rb @@ -0,0 +1,11 @@ +class CreateDevOpsLanguages < ActiveRecord::Migration[5.2] + def change + create_table :dev_ops_languages do |t| + t.string :name, null: false, comment: 'The name of project language.' + t.text :content, null: false, comment: 'The content of project language.' + t.integer :usage_amount, default: 0, comment: 'number of people Using the language' + + t.timestamps + end + end +end diff --git a/db/migrate/20200713150706_create_dev_ops_cloud_accounts.rb b/db/migrate/20200713150706_create_dev_ops_cloud_accounts.rb new file mode 100644 index 000000000..3351ab399 --- /dev/null +++ b/db/migrate/20200713150706_create_dev_ops_cloud_accounts.rb @@ -0,0 +1,14 @@ +class CreateDevOpsCloudAccounts < ActiveRecord::Migration[5.2] + def change + create_table :dev_ops_cloud_accounts do |t| + t.integer :project_id, null: false + t.integer :user_id, null: false + t.integer :ip_num + t.string :account + t.string :secret + + t.timestamps + end + add_index :dev_ops_cloud_accounts, [:project_id, :user_id, :ip_num], name: 'dev_ops_cloud_accounts_p_u_ip' + end +end diff --git a/db/migrate/20200714014513_add_cover_id_to_dev_ops_languages.rb b/db/migrate/20200714014513_add_cover_id_to_dev_ops_languages.rb new file mode 100644 index 000000000..6e88bfa2a --- /dev/null +++ b/db/migrate/20200714014513_add_cover_id_to_dev_ops_languages.rb @@ -0,0 +1,5 @@ +class AddCoverIdToDevOpsLanguages < ActiveRecord::Migration[5.2] + def change + add_column :dev_ops_languages, :cover_id, :integer + end +end diff --git a/db/migrate/20200714032759_drop_devops_clound_accounts_table.rb b/db/migrate/20200714032759_drop_devops_clound_accounts_table.rb new file mode 100644 index 000000000..d0bfb6f83 --- /dev/null +++ b/db/migrate/20200714032759_drop_devops_clound_accounts_table.rb @@ -0,0 +1,5 @@ +class DropDevopsCloundAccountsTable < ActiveRecord::Migration[5.2] + def change + drop_table(:devops_cloud_accounts) if ActiveRecord::Base.connection.tables.include?('devops_cloud_accounts') + end +end diff --git a/lib/tasks/dev_ops_languages.rake b/lib/tasks/dev_ops_languages.rake new file mode 100644 index 000000000..59b99413a --- /dev/null +++ b/lib/tasks/dev_ops_languages.rake @@ -0,0 +1,715 @@ +desc "Initialize the data for dev ops languages" +namespace :dev_ops_languages do + + task init: :environment do + # DevOps::Language.bulk_insert do |worker| + # languages.each do |attrs| + # worker.add(attrs) + # end + # end + + languages.each do |l| + content = Base64.encode64 l[:content] + DevOps::Language.create!(name: l[:name], content: content) + end + end + + def languages + [ + { + name: "C", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: gcc + commands: + - ./configure + - make + - make test" + }, + { + name: "C++", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: gcc + commands: + - ./configure + - make + - make test" + }, + { + name: "Docker", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: docker:dind + volumes: + - name: dockersock + path: /var/run/docker.sock + commands: + - docker ps -a + + volumes: + - name: dockersock + host: + path: /var/run/docker.sock" + }, + { + name: "Java", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: maven:3-jdk-10 + commands: + - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V + - mvn test -B" + }, + { + name: "R", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: r-base + commands: + - R -e 'install.packages(c('package1','package2'))' + - R CMD build ." + }, + { + name: "Ruby", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: ruby + commands: + - bundle install --jobs=3 --retry=3 + - rake" + }, + { + name: "PHP", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: install + image: composer + commands: + - composer install + + - name: test + image: php:7 + commands: + - vendor/bin/phpunit --configuration config.xml" + }, + { + name: "Python", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: python + commands: + - pip install -r requirements.txt + - pytest" + }, + { + name: "MySQL", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: mysql + commands: + - sleep 15 + - mysql -u root -h database --execute='SELECT VERSION();' + + services: + - name: database + image: mysql + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + MYSQL_DATABASE: test" + }, + { + name: "MongoDB", + content: 'kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: ping + image: mongo:4 + commands: + - sleep 5 + - mongo --host mongo --eval "db.version()" + + services: + - name: mongo + image: mongo:4 + command: [ --smallfiles ]' + }, + { + name: "Clojure", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: clojure + commands: + - lein test" + }, + { + name: "CouchDB", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: couchdb:2.2 + commands: + - sleep 15 + - curl http://database:5984 + + services: + - name: database + image: couchdb:2.2" + }, + { + name: "Crystal", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: crystallang/crystal + commands: + - shards install + - crystal spec.2" + }, + { + name: "D", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: dlanguage/dmd + commands: + - dub test" + }, + { + name: "Dart", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: google/dart + commands: + - pub get + - pub run test" + }, + { + name: "Docker (dind)", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: docker:dind + volumes: + - name: dockersock + path: /var/run + commands: + - sleep 5 # give docker enough time to start + - docker ps -a + + services: + - name: docker + image: docker:dind + privileged: true + volumes: + - name: dockersock + path: /var/run + + volumes: + - name: dockersock + temp: {}" + }, + { + name: "Elasticsearch", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: alpine:3.8 + commands: + - apk add curl + - sleep 45 + - curl http://database:9200 + + services: + - name: database + image: elasticsearch:5-alpine" + }, + { + name: "Elixir", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: elixir:1.5 + commands: + - mix local.rebar --force + - mix local.hex --force + - mix deps.get + - mix test" + }, + { + name: "Erlang", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: erlang:21 + commands: + - rebar get-deps + - rebar compile + - rebar skip_deps=true eunit" + }, + { + name: "20.Go (with Gopath)", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + workspace: + base: /go + path: src/hello-world + + steps: + - name: test + image: golang + commands: + - go get + - go test" + }, + { + name: "21.Go (with Modules)", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: golang + commands: + - go test + - go build" + }, + { + name: "Gradle", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: gradle:jdk10 + commands: + - gradle assemble + - gradle check" + }, + { + name: "Groovy", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: gradle:2.5-jdk8 + commands: + - ./gradlew assemble + - ./gradlew check" + }, + { + name: "Haskell", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: haskell + commands: + - cabal install --only-dependencies --enable-tests + - cabal configure --enable-tests + - cabal build + - cabal test" + }, + { + name: "Haxe", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: haxe + commands: + - haxelib install build.hxml + - haxe build.hxml" + }, + { + name: "MariaDB", + content: 'kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: mariadb + commands: + - sleep 15 + - mysql -u root -h database --execute="SELECT VERSION();" + + services: + - name: database + image: mariadb + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + MYSQL_DATABASE: test' + }, + { + name: "Maven", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: maven:3-jdk-10 + commands: + - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V + - mvn test -B" + }, + { + name: "Memcached", + content: 'kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: ubuntu + commands: + - apt-get update -qq + - apt-get install -y -qq telnet > /dev/null + - (sleep 1; echo "stats"; sleep 2; echo "quit";) | telnet cache 11211 || true + + services: + - name: cache + image: memcached:alpine + command: [ -vv ]' + }, + { + name: "Nats", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: ruby:2 + commands: + - gem install nats + - nats-pub -s tcp://nats:4222 greeting 'hello' + - nats-pub -s tcp://nats:4222 greeting 'world' + + services: + - name: nats + image: nats:1.3.0" + }, + { + name: "Node", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: node + commands: + - npm install + - npm test" + }, + { + name: "Perl", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: perl + commands: + - cpanm --quiet --installdeps --notest . + - perl Build.PL + - ./Build test" + }, + { + name: "Postgres", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: postgres:9-alpine + commands: + - psql -U postgres -d test -h database + + services: + - name: database + image: postgres:9-alpine + environment: + POSTGRES_USER: postgres + POSTGRES_DB: test" + }, + { + name: "Redis", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: redis + commands: + - sleep 5 + - redis-cli -h redis ping + - redis-cli -h redis set FOO bar + - redis-cli -h redis get FOO + + services: + - name: redis + image: redis" + }, + { + name: "RethinkDB", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: node:9 + commands: + - npm install -s -g recli + - recli -h database -j" + 'r.db("rethinkdb").table("stats")' + + + "services: + - name: database + image: rethinkdb:2 + command: [ rethinkdb, --bind, all ]" + }, + { + name: "Rust", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: rust:1.30 + commands: + - cargo build --verbose --all + - cargo test --verbose --all" + }, + { + name: "Swift", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: swift:4 + commands: + - swift build + - swift test" + }, + { + name: "Vault", + content: "kind: pipeline + name: default + + platform: + os: linux + arch: arm64 + + steps: + - name: test + image: vault:1.0.0-beta2 + environment: + VAULT_ADDR: http://vault:8200 + VAULT_TOKEN: dummy + commands: + - sleep 5 + - vault kv put secret/my-secret my-value=s3cr3t + - vault kv get secret/my-secret + + services: + - name: vault + image: vault:1.0.0-beta2 + environment: + VAULT_DEV_ROOT_TOKEN_ID: dummy" + } + ] + end +end From 4d9b8738d8ac88b5d2f4175981f37bac4db13ab6 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 14 Jul 2020 15:33:32 +0800 Subject: [PATCH 022/384] ADD a column --- db/migrate/20200714072948_add_open_devops_to_projects.rb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 db/migrate/20200714072948_add_open_devops_to_projects.rb diff --git a/db/migrate/20200714072948_add_open_devops_to_projects.rb b/db/migrate/20200714072948_add_open_devops_to_projects.rb new file mode 100644 index 000000000..0d189aa5e --- /dev/null +++ b/db/migrate/20200714072948_add_open_devops_to_projects.rb @@ -0,0 +1,5 @@ +class AddOpenDevopsToProjects < ActiveRecord::Migration[5.2] + def change + add_column :projects, :open_devops, :boolean, default: false + end +end From 4518a3ea87820e3b01a8a0796c43f25cdc91b48a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Tue, 14 Jul 2020 15:34:01 +0800 Subject: [PATCH 023/384] FIX simple api with open_devops columen --- app/helpers/projects_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index f5df048dc..b9457bd8a 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -44,6 +44,7 @@ module ProjectsHelper identifier: project.identifier, name: project.name, id: project.id, + open_devops: project.open_devops, type: project.numerical_for_project_type, author: { login: project.owner.login, From eedaba9bed3910285ba52d45bdd832012f83de13 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Tue, 14 Jul 2020 20:19:16 +0800 Subject: [PATCH 024/384] change --- app/controllers/sync_forge_controller.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/controllers/sync_forge_controller.rb b/app/controllers/sync_forge_controller.rb index 7ead736c6..ba4cde853 100644 --- a/app/controllers/sync_forge_controller.rb +++ b/app/controllers/sync_forge_controller.rb @@ -46,8 +46,15 @@ class SyncForgeController < ApplicationController if User.exists?(login: u[:user_params][:login]) SyncLog.sync_log("=================sync_to_user_been_exists====#{u[:user_params][:login]}") else - new_user = User.new(u[:user_params]) + if u[:user_params][:mail].blank? + u_mail = "#{u[:user_params][:login]}@example.com" + else + u_mail = u[:user_params][:mail] + end + new_user = User.new(u[:user_params].merge(mail: u_mail)) + username = new_user.login + password = "12345678" ActiveRecord::Base.transaction do interactor = Gitea::RegisterInteractor.call({username: username, email: new_user.mail, password: password}) From da0e45a3c6ecd94db8d4f7280ef5b72b264b8c62 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 15 Jul 2020 09:43:30 +0800 Subject: [PATCH 025/384] ADD devops --- app/controllers/dev_ops/builds_controller.rb | 15 ++++ .../dev_ops/cloud_accounts_controller.rb | 6 +- app/helpers/dev_ops/builds_helper.rb | 2 + app/helpers/projects_helper.rb | 3 +- app/libs/dev_ops/drone/api.rb | 54 +++++++++++++ app/libs/dev_ops/drone/error.rb | 14 ++++ app/libs/dev_ops/drone/request.rb | 77 ++++++++++++++----- app/models/project.rb | 1 + app/views/dev_ops/builds/index.json.jbuilder | 2 + app/views/dev_ops/builds/show.json.jbuilder | 2 + config/routes.rb | 3 +- ...d_drone_token_to_dev_ops_cloud_accounts.rb | 5 ++ 12 files changed, 158 insertions(+), 26 deletions(-) create mode 100644 app/controllers/dev_ops/builds_controller.rb create mode 100644 app/helpers/dev_ops/builds_helper.rb create mode 100644 app/libs/dev_ops/drone/api.rb create mode 100644 app/libs/dev_ops/drone/error.rb create mode 100644 app/views/dev_ops/builds/index.json.jbuilder create mode 100644 app/views/dev_ops/builds/show.json.jbuilder create mode 100644 db/migrate/20200714112206_add_drone_token_to_dev_ops_cloud_accounts.rb diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb new file mode 100644 index 000000000..24d8b99d7 --- /dev/null +++ b/app/controllers/dev_ops/builds_controller.rb @@ -0,0 +1,15 @@ +class DevOps::BuildsController < ApplicationController + before_action :require_login + before_action :find_project + + def index + end + + def show + end + + private + def find_project + @repo = Repository.find params[:id] + end +end diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index 0eb4270ce..83e374486 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -12,9 +12,9 @@ class DevOps::CloudAccountsController < ApplicationController logger.info "######### ......ff: #{devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret]))}" create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret])) logger.info "######### create_params: #{create_params}" - cloud_account = DevOps::CloudAccount.new(create_params) - cloud_account.user = current_user - cloud_account.save + + return if @project.dev_ops_cloud_account + # 2. 生成oauth2应用程序的client_id和client_secrete gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline", redirect_uris: ["#{cloud_account.drone_url}/login"]}) logger.info "######### gitea_oauth: #{gitea_oauth}" diff --git a/app/helpers/dev_ops/builds_helper.rb b/app/helpers/dev_ops/builds_helper.rb new file mode 100644 index 000000000..81d98403b --- /dev/null +++ b/app/helpers/dev_ops/builds_helper.rb @@ -0,0 +1,2 @@ +module DevOps::BuildsHelper +end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index b9457bd8a..6d36c2b3c 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -44,7 +44,8 @@ module ProjectsHelper identifier: project.identifier, name: project.name, id: project.id, - open_devops: project.open_devops, + repo_id: repo.id, + open_devops: project.open_devops?, type: project.numerical_for_project_type, author: { login: project.owner.login, diff --git a/app/libs/dev_ops/drone/api.rb b/app/libs/dev_ops/drone/api.rb new file mode 100644 index 000000000..08dafcb42 --- /dev/null +++ b/app/libs/dev_ops/drone/api.rb @@ -0,0 +1,54 @@ +class DevOps::Drone::API < DevOps::Drone::Request + attr_reader :drone_token, :drone_url, :owner, :repo, :options + + # drone_token: + # owner: repo's owner name or login + # repo: repo's identifier + def initialize(drone_token, drone_url, owner, repo, options={}) + @drone_token = drone_token + @drone_url = drone_url + @owner = owner + @repo = repo + @options = options + end + + # Build List + # GET api/repos/{owner}/{name}/builds + # eq: + # DevOps::Drone::API + def builds + request(:get, drone_url, "api/repos/#{owner}/#{repo}/builds", drone_token: drone_token) + end + + # Build Info + # GET api/repos/{owner}/{name}/builds/{number} + def build + request(:get, "api/repos/#{owner}/#{repo}/builds/#{number}", drone_token: drone_token) + end + + # Update .trustie-pipeline.yml file + # PATCH api/repos/{owner}/{name} + def config_yml + request(:patch, "/api/repos/#{owner}/#{repo}", drone_token: drone_token, config_path: config_path) + end + + # Activate user's project with Drone CI + # POST api/repos/{owner}/{name} + def activate + request(:post, "/api/repos/#{owner}/#{repo}", drone_token: drone_token) + end + + # Build Restart + # POST api/repos/{owner}/{name}/builds/{number} + # Restart the specified build. Please note this api requires read and write access to the repository and the request parameter {build} is not the build id but the build number. + def restart + request(:post, "/api/repos/#{owner}/#{repo}/builds/#{number}", drone_token: drone_token) + end + + # Build Stop + # DELETE api/repos/{owner}/{name}/builds/{number} + # Stop the specified build. Please note this api requires administrative privileges and the request parameter {build} is not the build id but the build number. + def stop + request(:delete, "/api/repos/#{owner}/#{repo}/builds/#{number}", drone_token: drone_token) + end +end diff --git a/app/libs/dev_ops/drone/error.rb b/app/libs/dev_ops/drone/error.rb new file mode 100644 index 000000000..2803a6c88 --- /dev/null +++ b/app/libs/dev_ops/drone/error.rb @@ -0,0 +1,14 @@ +class DevOps::Drone::Error < StandardError + attr_reader :code + + def initialize(code, message) + super message + @code = code + end + + class << self + def parse(result) + new(result['errcode'], result['errmsg']) + end + end +end diff --git a/app/libs/dev_ops/drone/request.rb b/app/libs/dev_ops/drone/request.rb index ddead22b5..7e059dc41 100644 --- a/app/libs/dev_ops/drone/request.rb +++ b/app/libs/dev_ops/drone/request.rb @@ -1,10 +1,9 @@ # @private class DevOps::Drone::Request - format :json - headers 'Accept' => 'application/json' - parser Proc.new { |body, _| parse(body) } + # format :json + # headers 'Accept' => 'application/json' + # parser Proc.new { |body, _| parse(body) } - attr_accessor :private_token # Converts the response body to an ObjectifiedHash. def self.parse(body) @@ -84,27 +83,63 @@ self.class.default_params.delete(:sudo) if sudo.nil? end + def request(method, domain, url, **params) + Rails.logger.info("[drone] request: #{method} #{url} #{params.except(:secret).inspect}") + + client = Faraday.new(url: domain) + response = client.public_send(method, url, params) + result = JSON.parse(response.body) + + Rails.logger.info("[drone] response:#{response.status} #{result.inspect}") + + if response.status != 200 + raise DevOps::Drone::Error.parse(result) + end + + if result['errcode'].present? && result['errcode'].to_i.nonzero? + raise DevOps::Drone::Error.parse(result) + end + + result + end + private + def conn(auth={}) + token = auth[:token] + puts "[gitea] token: #{token}" - # Sets a PRIVATE-TOKEN header for requests. - # @raise [Error::MissingCredentials] if private_token not set. - def set_private_token_header(options, path=nil) - unless path == '/session' - raise Error::MissingCredentials.new("Please set a private_token for user") unless @private_token - options[:headers] = {'PRIVATE-TOKEN' => @private_token} + @client ||= begin + Faraday.new(url: domain) do |req| + req.request :url_encoded + req.headers['Content-Type'] = 'application/json' + req.response :logger # 显示日志 + req.adapter Faraday.default_adapter + req.authorization :Bearer, token + req.headers['Authorization'] + end + end + @client end - end - # Set HTTParty configuration - # @see https://github.com/jnunemaker/httparty - def set_httparty_config(options) - if self.httparty - options.merge!(self.httparty) + # Sets a PRIVATE-TOKEN header for requests. + # @raise [Error::MissingCredentials] if private_token not set. + def set_private_token_header(options, path=nil) + unless path == '/session' + raise Error::MissingCredentials.new("Please set a private_token for user") unless @private_token + options[:headers] = {'PRIVATE-TOKEN' => @private_token} + end end - end - def error_message(response) - "Server responded with code #{response.code}, message: #{response.parsed_response.message}. " \ - "Request URI: #{response.request.base_uri}#{response.request.path}" - end + # Set HTTParty configuration + # @see https://github.com/jnunemaker/httparty + def set_httparty_config(options) + if self.httparty + options.merge!(self.httparty) + end + end + + def error_message(response) + "Server responded with code #{response.code}, message: #{response.parsed_response.message}. " \ + "Request URI: #{response.request.base_uri}#{response.request.path}" + end end diff --git a/app/models/project.rb b/app/models/project.rb index cebb146e6..f06ae8148 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -20,6 +20,7 @@ class Project < ApplicationRecord has_many :fork_users, dependent: :destroy # has_many :commits, dependent: :destroy + has_one :dev_ops_cloud_account, class_name: 'DevOps::CloudAccount', dependent: :destroy has_one :project_score, dependent: :destroy has_one :repository, dependent: :destroy has_many :pull_requests, dependent: :destroy diff --git a/app/views/dev_ops/builds/index.json.jbuilder b/app/views/dev_ops/builds/index.json.jbuilder new file mode 100644 index 000000000..b6539104b --- /dev/null +++ b/app/views/dev_ops/builds/index.json.jbuilder @@ -0,0 +1,2 @@ +