构建流水线yaml,保存和更新

This commit is contained in:
xxq250 2024-05-22 17:24:15 +08:00
parent 87604a1dea
commit 801dbd3f2f
2 changed files with 31 additions and 26 deletions

View File

@ -11,29 +11,34 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController
tip_exception("已经存在#{params[:pipeline_name]}流水线!") if size > 0
@pipeline = Action::Pipeline.new(pipeline_name: params[:pipeline_name], project_id: @project.id)
@pipeline.file_name = ".gitea/workflows/#{@pipeline.pipeline_name}.yaml"
@pipeline.json = demo.to_json
# @pipeline.json = params[:json] if params[:json]
@pipeline.yaml = build_pipeline_yaml(@pipeline)
@pipeline.json = params[:pipeline_json].to_json
pipeline_yaml = build_pipeline_yaml(params[:pipeline_name], params[:pipeline_json])
tip_exception("流水线yaml内空不能为空") if pipeline_yaml.blank?
@pipeline.yaml = pipeline_yaml
@pipeline.save!
sha = get_pipeline_file_sha(@pipeline.file_name, @pipeline.branch)
tip_exception("#{@pipeline.file_name}已存在") if sha
interactor = Gitea::UpdateFileInteractor.call(current_user.gitea_token, @owner.login, content_params)
interactor = Gitea::CreateFileInteractor.call(current_user.gitea_token, @owner.login, content_params)
tip_exception(interactor.error) unless interactor.success?
render_ok({ id: @pipeline.id })
end
def save_yaml
@pipeline = Action::Pipeline.new(pipeline_name: params[:pipeline_name], project_id: @project.id)
@pipeline.file_name = ".gitea/workflows/#{@pipeline.pipeline_name}.yaml"
@pipeline.json = params[:pipeline_json].to_json
pipeline_yaml = build_pipeline_yaml(params[:pipeline_name], params[:pipeline_json])
tip_exception("流水线yaml内空不能为空") if pipeline_yaml.blank?
@pipeline.yaml = pipeline_yaml
sha = get_pipeline_file_sha(@pipeline.file_name, @pipeline.branch)
interactor = sha.present? ? Gitea::UpdateFileInteractor.call(current_user.gitea_token, @owner.login, content_params) : Gitea::CreateFileInteractor.call(current_user.gitea_token, @owner.login, content_params)
tip_exception(interactor.error) unless interactor.success?
render_ok
end
def build_yaml
Rails.logger.info("pipeline===========#{params[:pipeline_json]}")
if params[:pipeline_json].present?
pipeline = params[:pipeline_json]
@name = params[:name]
params_nodes = JSON.parse(pipeline.to_json)["nodes"].select { |node| !["on-push", "on-schedule"].include?(node["component_name"]) }
on_nodes = JSON.parse(pipeline.to_json)["nodes"].select { |node| ["on-push", "on-schedule"].include?(node["component_name"]) }
@on_nodes = build_nodes(on_nodes)
@steps_nodes = build_nodes(params_nodes)
yaml = ERB.new(File.read(File.join(Rails.root, "app/views/api/v1/projects/pipelines", "build_pipeline.yaml.erb"))).result(binding)
# # 删除空行内容
@pipeline_yaml = yaml.gsub(/^\s*\n/, "")
@pipeline_yaml = build_pipeline_yaml(params[:pipeline_name], params[:pipeline_json])
else
@pipeline_yaml = build_test_yaml
end
@ -63,24 +68,24 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController
@pipeline = Action::Pipeline.new(id: 0, pipeline_name: "test-ss", yaml: build_test_yaml) if @pipeline.blank?
end
def build_pipeline_yaml(pipeline)
if pipeline.json.present?
@name = pipeline.pipeline_name
params_nodes = JSON.parse(pipeline.json)["nodes"].select { |node| !["on-push", "on-schedule"].include?(node["component_name"]) }
on_nodes = JSON.parse(pipeline.json)["nodes"].select { |node| ["on-push", "on-schedule"].include?(node["component_name"]) }
def build_pipeline_yaml(pipeline_name, pipeline_json)
if pipeline_json.present?
@pipeline_name = pipeline_name
params_nodes = pipeline_json["nodes"].select { |node| !["on-push", "on-schedule"].include?(node["component_name"]) }
on_nodes = pipeline_json["nodes"].select { |node| ["on-push", "on-schedule"].include?(node["component_name"]) }
@on_nodes = build_nodes(on_nodes)
@steps_nodes = build_nodes(params_nodes)
yaml = ERB.new(File.read(File.join(Rails.root, "app/views/api/v1/projects/pipelines", "build_pipeline.yaml.erb"))).result(binding)
# 删除空行内容
@pipeline_yaml = yaml.gsub(/^\s*\n/, "")
else
@pipeline_yaml = params[:yaml]
@pipeline_yaml = params[:pipeline_yaml]
end
@pipeline_yaml
end
def build_test_yaml
@name = "love me"
@pipeline_name = "I like it"
params_nodes = JSON.parse(demo.to_json)["nodes"].select { |node| !["on-push", "on-schedule"].include?(node["component_name"]) }
on_nodes = JSON.parse(demo.to_json)["nodes"].select { |node| ["on-push", "on-schedule"].include?(node["component_name"]) }
@on_nodes = build_nodes(on_nodes)
@ -135,7 +140,7 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController
filepath: ".gitea/workflows/#{@pipeline.pipeline_name}.yaml",
branch: @pipeline.branch,
new_branch: @pipeline.branch,
content: build_pipeline_yaml(@pipeline),
content: @pipeline.yaml,
message: 'create pipeline',
committer: {
email: current_user.mail,
@ -154,8 +159,8 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController
run_values = {}
input_values = {}
if input_node["in_parameters"].present?
# Rails.logger.info "@in_parameters=====11===#{input_node["component_name"]}======#{input_node["in_parameters"]}"
input_node["in_parameters"].each_key do |input_key|
Rails.logger.info "@in_parameters=====11===#{input_node["component_name"]}======#{input_node["in_parameters"].keys}"
input_node["in_parameters"].keys.each do |input_key|
# Rails.logger.info "@in_parameters.input_key===#{input_key}"
# Rails.logger.info "@in_parameters.input_value===#{input_node["in_parameters"][input_key]["value"]}"
if input_key.to_s.gsub("--", "") == "run"
@ -185,7 +190,7 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController
"working_directory": "",
"command": "",
"in_parameters": {
"--cro": {
"--cron": {
"type": "str",
"item_type": "",
"label": "push代码",

View File

@ -1,5 +1,5 @@
# action name
name: <%=@name %>
name: <%=@pipeline_name %>
# 什么时候触发这个workflow
on: