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] 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