From a0265d480887b15ff13d4e6f7a70e5c11a7634be Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 30 Nov 2023 10:36:55 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=9Atree=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=BB=93=E6=9E=84=E4=BD=93=E9=80=82=E9=85=8D=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E7=94=9F=E6=88=90token=E9=9C=80=E6=96=B0=E5=A2=9Escop?= =?UTF-8?q?es=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/gitea/user/generate_token_service.rb | 2 +- app/views/api/v1/projects/git/trees.json.jbuilder | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/services/gitea/user/generate_token_service.rb b/app/services/gitea/user/generate_token_service.rb index 946bd68ce..e2dd6b0f4 100644 --- a/app/services/gitea/user/generate_token_service.rb +++ b/app/services/gitea/user/generate_token_service.rb @@ -29,7 +29,7 @@ class Gitea::User::GenerateTokenService < Gitea::ClientService end def request_params - { name: "#{@username}-#{token_name}" } + { name: "#{@username}-#{token_name}", scopes: ["all"] } end def token_name diff --git a/app/views/api/v1/projects/git/trees.json.jbuilder b/app/views/api/v1/projects/git/trees.json.jbuilder index 0eb08f048..b560fff2b 100644 --- a/app/views/api/v1/projects/git/trees.json.jbuilder +++ b/app/views/api/v1/projects/git/trees.json.jbuilder @@ -1,6 +1,6 @@ -json.total_count @result_object['total_count'] -json.sha @result_object['sha'] -json.entries @result_object['tree'].each do |entry| +json.total_count @result_object[:data]['total_count'].to_i +json.sha @result_object[:data]['sha'] +json.entries @result_object[:data]['tree'].each do |entry| json.name entry['path'] json.mode entry['mode'] json.type entry['type'] === 'blob' ? 'file' : 'dir' From 026d58c3474324d7e2aeef8949b44e94e15955e0 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 30 Nov 2023 17:02:27 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=9Acompare=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/api/v1/projects/compare_service.rb | 2 +- app/views/api/v1/projects/compare.json.jbuilder | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/services/api/v1/projects/compare_service.rb b/app/services/api/v1/projects/compare_service.rb index 23a248305..9e646326f 100644 --- a/app/services/api/v1/projects/compare_service.rb +++ b/app/services/api/v1/projects/compare_service.rb @@ -29,6 +29,6 @@ class Api::V1::Projects::CompareService < ApplicationService end def load_gitea_data - @gitea_data = $gitea_client.get_repos_compare_by_owner_repo_from_to(owner, repo, from, to, {query: request_params}) rescue nil + @gitea_data = $gitea_hat_client.get_repos_compare_by_owner_repo_baseref_headref(owner, repo, to, from, {query: request_params}) rescue nil end end \ No newline at end of file diff --git a/app/views/api/v1/projects/compare.json.jbuilder b/app/views/api/v1/projects/compare.json.jbuilder index 2d20c51e0..f45bceb86 100644 --- a/app/views/api/v1/projects/compare.json.jbuilder +++ b/app/views/api/v1/projects/compare.json.jbuilder @@ -14,5 +14,9 @@ json.commits @result_object['Commits'] do |commit| json.parent_shas commit['Sha']['ParentShas'] end json.diff do - json.partial! "api/v1/projects/simple_gitea_diff_detail", diff: @result_object['Diff'] + if @result_object['Diff'].present? + json.partial! "api/v1/projects/simple_gitea_diff_detail", diff: @result_object['Diff'] + else + json.nil! + end end \ No newline at end of file From 096941ea9eb99077f314b4d7c6651439cc7ec4fb Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 5 Dec 2023 09:51:22 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=9A=E9=87=8D?= =?UTF-8?q?=E7=BD=AEgitea=20token=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 70de1fc64..c81b41433 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -457,7 +457,7 @@ class User < Owner $gitea_client.delete_users_tokens_by_username_token(self.login, e["name"], {query: {sudo: self.login} }) } end - new_result = $gitea_client.post_users_tokens_by_username(self.login, { query: {sudo: self.login}, body:{ name: self.login} }) + new_result = $gitea_client.post_users_tokens_by_username(self.login, { query: {sudo: self.login}, body:{ name: self.login, scopes: ["all"]} }) if new_result["sha1"].present? update(gitea_token: new_result["sha1"]) end From c94bffd8449f16daee591f6d76ff32cc154e07cc Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 5 Dec 2023 10:21:08 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=9A=E9=87=8D?= =?UTF-8?q?=E7=BD=AEgitea=20token=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 c81b41433..957f80a33 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -457,7 +457,7 @@ class User < Owner $gitea_client.delete_users_tokens_by_username_token(self.login, e["name"], {query: {sudo: self.login} }) } end - new_result = $gitea_client.post_users_tokens_by_username(self.login, { query: {sudo: self.login}, body:{ name: self.login, scopes: ["all"]} }) + new_result = $gitea_client.post_users_tokens_by_username(self.login, { query: {sudo: self.login}, body:{ name: "#{self.login}-#{SecureRandom.hex(6)}", scopes: ["all"]}.to_json }) if new_result["sha1"].present? update(gitea_token: new_result["sha1"]) end From d8eeb8f1b75916e1d6b17ad8c16f0cc50623dd2d Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 26 Dec 2023 08:41:39 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=E5=88=86=E6=94=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增:删除者信息 --- .../api/v1/projects/branches_controller.rb | 11 ++++- .../api/v1/projects/branches/list_service.rb | 1 - .../v1/projects/branches/restore_service.rb | 47 +++++++++++++++++++ .../_simple_gitea_detail.json.jbuilder | 12 ++++- config/routes/api.rb | 1 + 5 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 app/services/api/v1/projects/branches/restore_service.rb diff --git a/app/controllers/api/v1/projects/branches_controller.rb b/app/controllers/api/v1/projects/branches_controller.rb index 40f44fea5..06d426b3f 100644 --- a/app/controllers/api/v1/projects/branches_controller.rb +++ b/app/controllers/api/v1/projects/branches_controller.rb @@ -9,7 +9,7 @@ class Api::V1::Projects::BranchesController < Api::V1::BaseController @result_object = Api::V1::Projects::Branches::AllListService.call(@project, current_user&.gitea_token) end - before_action :require_operate_above, only: [:create, :destroy] + before_action :require_operate_above, only: [:create, :destroy, :restore] def create @result_object = Api::V1::Projects::Branches::CreateService.call(@project, branch_params, current_user&.gitea_token) @@ -33,6 +33,15 @@ class Api::V1::Projects::BranchesController < Api::V1::BaseController end end + def restore + @result_object = Api::V1::Projects::Branches::RestoreService.call(@project, params[:branch_id], params[:branch_name], current_user&.gitea_token) + if @result_object + return render_ok + else + return render_error('恢复分支失败!') + end + end + before_action :require_manager_above, only: [:update_default_branch] def update_default_branch diff --git a/app/services/api/v1/projects/branches/list_service.rb b/app/services/api/v1/projects/branches/list_service.rb index 590c4884f..b049bb2ac 100644 --- a/app/services/api/v1/projects/branches/list_service.rb +++ b/app/services/api/v1/projects/branches/list_service.rb @@ -18,7 +18,6 @@ class Api::V1::Projects::Branches::ListService < ApplicationService load_default_branch @gitea_data[:default_branch] = @gitea_repo_data["default_branch"] - @gitea_data end diff --git a/app/services/api/v1/projects/branches/restore_service.rb b/app/services/api/v1/projects/branches/restore_service.rb new file mode 100644 index 000000000..fbd6220ed --- /dev/null +++ b/app/services/api/v1/projects/branches/restore_service.rb @@ -0,0 +1,47 @@ +class Api::V1::Projects::Branches::RestoreService < ApplicationService + + include ActiveModel::Model + + attr_accessor :project, :token, :owner, :repo, :branch_id, :branch_name + attr_accessor :gitea_data + + validates :branch_id, :branch_name, presence: true + + def initialize(project, branch_id, branch_name, token= nil) + @project = project + @owner = project&.owner&.login + @repo = project&.identifier + @branch_id = branch_id + @branch_name = branch_name + @token = token + end + + def call + raise Error, errors.full_messages.join(",") unless valid? + excute_data_to_gitea + + true + end + + private + def request_params + { + access_token: token + } + end + + def request_body + { + branch_id: branch_id, + name: branch_name, + } + end + + def excute_data_to_gitea + begin + @gitea_data = $gitea_hat_client.post_repos_branches_restore_by_owner_repo(owner, repo, {query: request_params, body: request_body.to_json}) + rescue => e + raise Error, '恢复分支失败!' + end + end +end \ No newline at end of file diff --git a/app/views/api/v1/projects/branches/_simple_gitea_detail.json.jbuilder b/app/views/api/v1/projects/branches/_simple_gitea_detail.json.jbuilder index c9235bdb4..ff0f0618a 100644 --- a/app/views/api/v1/projects/branches/_simple_gitea_detail.json.jbuilder +++ b/app/views/api/v1/projects/branches/_simple_gitea_detail.json.jbuilder @@ -23,4 +23,14 @@ json.commit_time branch['commit']['timestamp'] json.default_branch default_branch || nil json.http_url render_http_url(@project) json.zip_url render_zip_url(@owner, @project.repository, branch['name']) -json.tar_url render_tar_url(@owner, @project.repository, branch['name']) \ No newline at end of file +json.tar_url render_tar_url(@owner, @project.repository, branch['name']) +json.branch_id branch['id'] +json.is_deleted branch['is_deleted'] +json.deleted_unix branch['deleted_unix'] +json.deleted_by do + if branch['is_deleted'] + json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(branch['deleted_by']), name: branch['deleted_by']['name'] } + else + json.nil! + end +end \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index f3fa24de8..1133c8b36 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -80,6 +80,7 @@ defaults format: :json do resources :branches, param: :name, only:[:index, :create, :destroy] do collection do get :all + post :restore patch :update_default_branch end end From a644a6549387a4b59585c5f4bf03bf0fec5de28e Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 3 Jan 2024 16:34:01 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9Agitea=20client?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 3f165215d..891c636c6 100644 --- a/Gemfile +++ b/Gemfile @@ -143,4 +143,4 @@ gem 'doorkeeper' gem 'doorkeeper-jwt' -gem 'gitea-client', '~> 1.4.3' +gem 'gitea-client', '~> 1.4.4' From feec49d4bd71b6bee552796f33342ea0348ab150 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 5 Jan 2024 13:56:09 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=88=86=E6=94=AF=E4=B8=8E=E6=99=AE=E9=80=9A?= =?UTF-8?q?=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/v1/projects/branches_controller.rb | 2 +- app/services/api/v1/projects/branches/list_service.rb | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/v1/projects/branches_controller.rb b/app/controllers/api/v1/projects/branches_controller.rb index 06d426b3f..89ebb5825 100644 --- a/app/controllers/api/v1/projects/branches_controller.rb +++ b/app/controllers/api/v1/projects/branches_controller.rb @@ -2,7 +2,7 @@ class Api::V1::Projects::BranchesController < Api::V1::BaseController before_action :require_public_and_member_above, only: [:index, :all] def index - @result_object = Api::V1::Projects::Branches::ListService.call(@project, {name: params[:keyword], page: page, limit: limit}, current_user&.gitea_token) + @result_object = Api::V1::Projects::Branches::ListService.call(@project, {name: params[:keyword], state: params[:state], page: page, limit: limit}, current_user&.gitea_token) end def all diff --git a/app/services/api/v1/projects/branches/list_service.rb b/app/services/api/v1/projects/branches/list_service.rb index b049bb2ac..6980b71ea 100644 --- a/app/services/api/v1/projects/branches/list_service.rb +++ b/app/services/api/v1/projects/branches/list_service.rb @@ -1,6 +1,6 @@ class Api::V1::Projects::Branches::ListService < ApplicationService - attr_accessor :project, :token, :owner, :repo, :name, :page, :limit + attr_accessor :project, :token, :owner, :repo, :name, :state, :page, :limit attr_accessor :gitea_data, :gitea_repo_data def initialize(project, params, token=nil) @@ -9,6 +9,7 @@ class Api::V1::Projects::Branches::ListService < ApplicationService @repo = project&.identifier @token = token @name = params[:name] + @state = params[:state] @page = params[:page] @limit = params[:limit] end @@ -29,7 +30,8 @@ class Api::V1::Projects::Branches::ListService < ApplicationService limit: limit } params.merge!({name: name}) if name.present? - + params.merge!({state: state}) if state.present? + params end From 6a4f63d8ea532640c63978dacbb06013e41aa60e Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 30 Jan 2024 14:49:54 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E6=8F=90=E4=BA=A4=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile | 2 +- .../api/v1/projects/commits_controller.rb | 6 ++- .../api/v1/projects/commits/recent_service.rb | 37 +++++++++++++++++++ .../v1/projects/commits/recent.json.jbuilder | 13 +++++++ config/routes/api.rb | 6 ++- 5 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 app/services/api/v1/projects/commits/recent_service.rb create mode 100644 app/views/api/v1/projects/commits/recent.json.jbuilder diff --git a/Gemfile b/Gemfile index 891c636c6..c73a66428 100644 --- a/Gemfile +++ b/Gemfile @@ -143,4 +143,4 @@ gem 'doorkeeper' gem 'doorkeeper-jwt' -gem 'gitea-client', '~> 1.4.4' +gem 'gitea-client', '~> 1.4.5' diff --git a/app/controllers/api/v1/projects/commits_controller.rb b/app/controllers/api/v1/projects/commits_controller.rb index a1545ae6f..9fd8de1c2 100644 --- a/app/controllers/api/v1/projects/commits_controller.rb +++ b/app/controllers/api/v1/projects/commits_controller.rb @@ -1,5 +1,5 @@ class Api::V1::Projects::CommitsController < Api::V1::BaseController - before_action :require_public_and_member_above, only: [:index, :diff] + before_action :require_public_and_member_above, only: [:index, :diff, :recent] def index @result_object = Api::V1::Projects::Commits::ListService.call(@project, {page: page, limit: limit, sha: params[:sha]}, current_user&.gitea_token) @@ -9,4 +9,8 @@ class Api::V1::Projects::CommitsController < Api::V1::BaseController def diff @result_object = Api::V1::Projects::Commits::DiffService.call(@project, params[:sha], current_user&.gitea_token) end + + def recent + @result_object = Api::V1::Projects::Commits::RecentService.call(@project, {page: page, limit: limit}, current_user&.gitea_token) + end end \ No newline at end of file diff --git a/app/services/api/v1/projects/commits/recent_service.rb b/app/services/api/v1/projects/commits/recent_service.rb new file mode 100644 index 000000000..fa4f65b43 --- /dev/null +++ b/app/services/api/v1/projects/commits/recent_service.rb @@ -0,0 +1,37 @@ +class Api::V1::Projects::Commits::RecentService < ApplicationService + + attr_reader :project, :page, :limit, :owner, :repo, :token + attr_accessor :gitea_data + + def initialize(project, params, token=nil) + @project = project + @page = params[:page] || 1 + @limit = params[:limit] || 15 + @owner = project&.owner&.login + @repo = project&.identifier + @token = token + end + + def call + load_gitea_data + + gitea_data + end + + private + def request_params + param = { + access_token: token, + page: page, + limit: limit + } + + param + end + + def load_gitea_data + @gitea_data = $gitea_hat_client.get_repos_recent_commits_by_owner_repo(owner, repo, {query: request_params}) rescue nil + raise Error, "获取最近提交列表失败" unless @gitea_data.is_a?(Hash) + end + +end \ No newline at end of file diff --git a/app/views/api/v1/projects/commits/recent.json.jbuilder b/app/views/api/v1/projects/commits/recent.json.jbuilder new file mode 100644 index 000000000..2834b10d4 --- /dev/null +++ b/app/views/api/v1/projects/commits/recent.json.jbuilder @@ -0,0 +1,13 @@ +json.total_count @result_object[:total_data].to_i +json.commits @result_object[:data].each do |commit| + json.sha commit['sha'] + json.author do + json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(commit['commit']['author']), name: commit['commit']['author']['name'] } + end + + json.committer do + json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(commit['commit']['committer']), name: commit['commit']['committer']['name'] } + end + json.commit_message commit['commit']['message'] + json.parent_shas commit['parents'].map{|x|x['sha']} +end \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index 1133c8b36..f487f8b44 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -90,7 +90,11 @@ defaults format: :json do delete 'tags/*name', to: "tags#destroy", via: :all get 'tags/*name', to: "tags#show", via: :all - resources :commits, only: [:index] + resources :commits, only: [:index] do + collection do + get :recent + end + end resources :code_stats, only: [:index] resources :contributors, only: [:index] do collection do From 8eefb8ca07ae273680b2f15a3aec415925526b24 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 5 Mar 2024 09:43:34 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=B5=81?= =?UTF-8?q?=E6=B0=B4=E7=BA=BF=E6=8E=A5=E5=8F=A3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile | 2 +- .../v1/projects/actions/actions_controller.rb | 31 ++++++++++++++ .../v1/projects/actions/base_controller.rb | 4 ++ .../v1/projects/actions/runs_controller.rb | 12 ++++++ .../projects/actions/runs/job_show_service.rb | 42 +++++++++++++++++++ .../v1/projects/actions/runs/list_service.rb | 36 ++++++++++++++++ .../actions/actions/index.json.jbuilder | 4 ++ .../projects/actions/runs/index.json.jbuilder | 19 +++++++++ .../actions/runs/job_show.json.jbuilder | 16 +++++++ config/routes/api.rb | 9 ++++ 10 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 app/controllers/api/v1/projects/actions/actions_controller.rb create mode 100644 app/controllers/api/v1/projects/actions/base_controller.rb create mode 100644 app/controllers/api/v1/projects/actions/runs_controller.rb create mode 100644 app/services/api/v1/projects/actions/runs/job_show_service.rb create mode 100644 app/services/api/v1/projects/actions/runs/list_service.rb create mode 100644 app/views/api/v1/projects/actions/actions/index.json.jbuilder create mode 100644 app/views/api/v1/projects/actions/runs/index.json.jbuilder create mode 100644 app/views/api/v1/projects/actions/runs/job_show.json.jbuilder diff --git a/Gemfile b/Gemfile index c73a66428..dd2bcd982 100644 --- a/Gemfile +++ b/Gemfile @@ -143,4 +143,4 @@ gem 'doorkeeper' gem 'doorkeeper-jwt' -gem 'gitea-client', '~> 1.4.5' +gem 'gitea-client', '~> 1.4.6' diff --git a/app/controllers/api/v1/projects/actions/actions_controller.rb b/app/controllers/api/v1/projects/actions/actions_controller.rb new file mode 100644 index 000000000..3825b4685 --- /dev/null +++ b/app/controllers/api/v1/projects/actions/actions_controller.rb @@ -0,0 +1,31 @@ +class Api::V1::Projects::Actions::ActionsController < Api::V1::Projects::Actions::BaseController + + def index + begin + gitea_result = $gitea_hat_client.get_repos_actions_by_owner_repo(@project&.owner&.login, @project&.identifier) + @data = gitea_result[:data]["Workflows"] + rescue + @data = [] + end + end + + def disable + return render_error("请输入正确的流水线文件!") if params[:workflow].blank? + gitea_result = $gitea_hat_client.post_repos_actions_disable(@project&.owner&.login, @project&.identifier, {query: {workflow: params[:workflow]}}) rescue nil + if gitea_result + render_ok + else + render_error("禁用流水线失败") + end + end + + def enable + return render_error("请输入正确的流水线文件!") if params[:workflow].blank? + gitea_result = $gitea_hat_client.post_repos_actions_enable(@project&.owner&.login, @project&.identifier, {query: {workflow: params[:workflow]}}) rescue nil + if gitea_result + render_ok + else + render_error("取消禁用流水线失败") + end + end +end \ No newline at end of file diff --git a/app/controllers/api/v1/projects/actions/base_controller.rb b/app/controllers/api/v1/projects/actions/base_controller.rb new file mode 100644 index 000000000..d76b446ad --- /dev/null +++ b/app/controllers/api/v1/projects/actions/base_controller.rb @@ -0,0 +1,4 @@ +class Api::V1::Projects::Actions::BaseController < Api::V1::BaseController + before_action :require_public_and_member_above + +end \ No newline at end of file diff --git a/app/controllers/api/v1/projects/actions/runs_controller.rb b/app/controllers/api/v1/projects/actions/runs_controller.rb new file mode 100644 index 000000000..fbb3e4403 --- /dev/null +++ b/app/controllers/api/v1/projects/actions/runs_controller.rb @@ -0,0 +1,12 @@ +class Api::V1::Projects::Actions::RunsController < Api::V1::Projects::Actions::BaseController + + def index + @result_object = Api::V1::Projects::Actions::Runs::ListService.call(@project, params[:workflow], current_user&.gitea_token) + end + + def job_show + @result_object = Api::V1::Projects::Actions::Runs::JobShowService.call(@project, params[:run_id], params[:job], params[:log_cursors], current_user&.gitea_token) + puts @result_object + end + +end \ No newline at end of file diff --git a/app/services/api/v1/projects/actions/runs/job_show_service.rb b/app/services/api/v1/projects/actions/runs/job_show_service.rb new file mode 100644 index 000000000..e80e882be --- /dev/null +++ b/app/services/api/v1/projects/actions/runs/job_show_service.rb @@ -0,0 +1,42 @@ +class Api::V1::Projects::Actions::Runs::JobShowService < ApplicationService + include ActiveModel::Model + + attr_reader :project, :token, :owner, :repo, :run, :job, :log_cursors + attr_accessor :gitea_data + + validates :run, :job, :log_cursors, presence: true + + def initialize(project, run, job, log_cursors, token = nil) + @project = project + @owner = project&.owner.login + @repo = project&.identifier + @run = run + @job = job + @log_cursors = log_cursors + @token = token + end + + def call + raise Error, errors.full_messages.join(",") unless valid? + load_gitea_data + + @gitea_data + end + + private + def request_params + { + access_token: token + } + end + + def request_body + { + logCursors: log_cursors + } + end + + def load_gitea_data + @gitea_data = $gitea_hat_client.post_repos_actions_runs_jobs_by_owner_repo_run_job(owner, repo, run, job, {query: request_params, body: request_body.to_json}) + end +end \ No newline at end of file diff --git a/app/services/api/v1/projects/actions/runs/list_service.rb b/app/services/api/v1/projects/actions/runs/list_service.rb new file mode 100644 index 000000000..62dbc05a0 --- /dev/null +++ b/app/services/api/v1/projects/actions/runs/list_service.rb @@ -0,0 +1,36 @@ +class Api::V1::Projects::Actions::Runs::ListService < ApplicationService + include ActiveModel::Model + + attr_reader :project, :token, :owner, :repo, :workflow + attr_accessor :gitea_data + + validates :workflow, presence: true + + def initialize(project, workflow, token =nil) + @project = project + @owner = project&.owner.login + @repo = project&.identifier + @workflow = workflow + @token = token + end + + def call + raise Error, errors.full_messages.join(",") unless valid? + load_gitea_data + + @gitea_data + end + + private + def request_params + { + access_token: token, + workflow: workflow + } + end + + def load_gitea_data + @gitea_data = $gitea_hat_client.get_repos_actions_by_owner_repo(owner, repo, {query: request_params}) rescue nil + raise Error, '获取流水线执行记录失败!' unless @gitea_data.is_a?(Hash) + end +end \ No newline at end of file diff --git a/app/views/api/v1/projects/actions/actions/index.json.jbuilder b/app/views/api/v1/projects/actions/actions/index.json.jbuilder new file mode 100644 index 000000000..530cfc6af --- /dev/null +++ b/app/views/api/v1/projects/actions/actions/index.json.jbuilder @@ -0,0 +1,4 @@ +json.total_count @data.size +json.files @data.each do |file| + json.name file["Name"] +end \ No newline at end of file diff --git a/app/views/api/v1/projects/actions/runs/index.json.jbuilder b/app/views/api/v1/projects/actions/runs/index.json.jbuilder new file mode 100644 index 000000000..e21d86dc3 --- /dev/null +++ b/app/views/api/v1/projects/actions/runs/index.json.jbuilder @@ -0,0 +1,19 @@ +json.total_data @result_object[:total_data].to_i +json.runs @result_object[:data]["Runs"].each do |run| + json.workflow run["WorkflowID"] + json.index run["Index"] + json.title run["Title"] + json.trigger_user do + json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(run['TriggerUser']), name: run['TriggerUser']['Name'] } + end + + if run["Ref"].starts_with?("refs/tags") + json.ref run["Ref"].gsub!("/refs/tags/", "") + else + json.ref run["Ref"].gsub!("refs/heads/", "") + end + + json.status run["Status"] + json.time_ago time_from_now(run["Stopped"]) + json.holding_time run["Stopped"]-run["Started"] +end \ No newline at end of file diff --git a/app/views/api/v1/projects/actions/runs/job_show.json.jbuilder b/app/views/api/v1/projects/actions/runs/job_show.json.jbuilder new file mode 100644 index 000000000..bf5ce048a --- /dev/null +++ b/app/views/api/v1/projects/actions/runs/job_show.json.jbuilder @@ -0,0 +1,16 @@ +json.state do + json.run do + json.title @result_object["state"]["run"]["title"] + json.status @result_object["state"]["run"]["status"] + json.done @result_object["state"]["run"]["done"] + json.jobs @result_object["state"]["run"]["jobs"] + json.current_job do + json.title @result_object["state"]["currentJob"]["title"] + json.detail @result_object["state"]["currentJob"]["detail"] + json.steps @result_object["state"]["currentJob"]["steps"] + end + end +end +json.logs do + json.steps_log @result_object["logs"]["stepsLog"] +end \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index f487f8b44..20390a500 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -60,6 +60,15 @@ defaults format: :json do # projects文件夹下的 scope module: :projects do + resources :actions, module: 'actions' do + collection do + post :disable + post :enable + resources :runs, only: [:index] do + post '/jobs/:job', to: 'runs#job_show' + end + end + end resources :pulls, module: 'pulls' do resources :versions, only: [:index] do member do