forgeplus/app/controllers/version_releases_controller.rb

170 lines
5.8 KiB
Ruby
Raw Normal View History

2020-03-09 00:40:16 +08:00
class VersionReleasesController < ApplicationController
2020-08-11 23:20:04 +08:00
before_action :load_repository
before_action :set_user
2021-09-26 14:44:26 +08:00
before_action :require_login, except: [:index, :show]
before_action :check_release_authorize, except: [:index, :show]
2021-09-26 14:32:24 +08:00
before_action :find_version , only: [:show, :edit, :update, :destroy]
2020-03-09 00:40:16 +08:00
def index
2021-09-30 11:09:13 +08:00
@version_releases = kaminari_paginate(@repository.version_releases.order(created_at: :desc))
2021-08-30 13:44:15 +08:00
@user_permission = current_user.present? && (@repository.project.all_developers.include?(current_user) || current_user.admin?)
2021-09-29 17:16:21 +08:00
@user_admin_permission = current_user.present? && (@repository.project.all_managers.include?(current_user) || current_user.admin?)
2020-03-09 00:40:16 +08:00
end
def new
#获取所有的分支
@all_branches = []
2020-06-03 11:18:46 +08:00
get_all_branches = Gitea::Repository::Branches::ListService.new(@user, @repository.try(:identifier)).call
2020-03-09 00:40:16 +08:00
if get_all_branches && get_all_branches.size > 0
get_all_branches.each do |b|
@all_branches.push(b["name"])
end
end
end
2021-09-26 14:32:24 +08:00
def show
2021-09-30 11:09:13 +08:00
# @release = Gitea::Versions::GetService.call(current_user.gitea_token, @user&.login, @repository&.identifier, @version&.version_gid)
2021-09-26 14:32:24 +08:00
end
2020-03-09 00:40:16 +08:00
def create
if params[:name].nil?
normal_status(-1, "名称不能为空")
elsif params[:tag_name].blank?
normal_status(-1, "标签名称不能为空")
elsif VersionRelease.exists?(tag_name: params[:tag_name], repository_id: @repository.id)
normal_status(-1, "该版本已存在")
elsif VersionRelease.exists?(name: params[:name], repository_id: @repository.id)
normal_status(-1, "该版本已存在")
else
ActiveRecord::Base.transaction do
begin
2020-05-20 14:43:14 +08:00
version_params = releases_params
2020-03-09 00:40:16 +08:00
version_release = VersionRelease.new(version_params.merge(user_id: current_user.id, repository_id: @repository.id))
if version_release.save!
2021-09-29 11:43:04 +08:00
git_version_release = Gitea::Versions::CreateService.new(current_user.gitea_token, @user.try(:login), @repository.try(:identifier), version_params).call
2020-03-09 00:40:16 +08:00
if git_version_release
update_params = {
tarball_url: git_version_release["tarball_url"],
zipball_url: git_version_release["zipball_url"],
url: git_version_release["url"],
version_gid: git_version_release["id"],
2021-09-30 11:09:13 +08:00
sha: git_version_release["sha"]
2020-03-09 00:40:16 +08:00
}
version_release.update_attributes!(update_params)
version_release.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create")
2020-05-20 14:43:14 +08:00
if params[:attachment_ids].present?
create_attachments(params[:attachment_ids], version_release)
end
2020-03-09 00:40:16 +08:00
normal_status(0, "发布成功")
else
normal_status(-1, "发布失败")
end
else
normal_status(-1, "发布失败")
end
rescue => e
puts "create version release error: #{e.message}"
raise Error, e.message
end
end
end
end
def edit
2020-05-20 14:43:14 +08:00
@version_attachments = @version.attachments
2020-03-09 00:40:16 +08:00
end
def update
if params[:name].nil?
normal_status(-1, "名称不能为空")
elsif params[:tag_name].blank?
normal_status(-1, "标签名称不能为空")
else
ActiveRecord::Base.transaction do
begin
2020-05-20 14:43:14 +08:00
version_params = releases_params
2020-08-11 23:20:04 +08:00
2020-03-09 00:40:16 +08:00
if @version.update_attributes!(version_params)
2020-05-20 14:43:14 +08:00
create_attachments(params[:attachment_ids], @version) if params[:attachment_ids].present?
2021-09-29 11:43:04 +08:00
git_version_release = Gitea::Versions::UpdateService.new(current_user.gitea_token, @user.try(:login), @repository.try(:identifier), version_params, @version.try(:version_gid)).call
2020-03-09 00:40:16 +08:00
unless git_version_release
raise Error, "更新失败"
end
2020-08-11 23:20:04 +08:00
2020-03-09 00:40:16 +08:00
normal_status(0, "更新成功")
else
normal_status(-1, "更新失败")
end
rescue => e
puts "update version release error: #{e.message}"
raise Error, e.message
end
end
end
end
def destroy
ActiveRecord::Base.transaction do
begin
if @version.destroy
2021-09-29 11:43:04 +08:00
git_version_release = Gitea::Versions::DeleteService.new(current_user.gitea_token, @user.try(:login), @repository.try(:identifier), @version.try(:version_gid)).call
2020-03-09 00:40:16 +08:00
if git_version_release.status == 204
normal_status(0, "删除成功")
elsif git_version_release.status == 401
normal_status(0, "发布版本不存在")
else
normal_status(-1, "删除失败")
end
else
normal_status(-1, "删除失败")
end
rescue => e
puts "destroy version release error: #{e.message}"
raise Error, e.message
end
end
end
private
2020-08-11 23:20:04 +08:00
def set_user
2021-01-15 18:28:38 +08:00
@user = @repository.owner
2020-03-09 00:40:16 +08:00
end
def find_version
@version = VersionRelease.find_by_id(params[:id])
unless @version.present?
normal_status(-1, "版本不存在")
end
end
2020-08-11 23:20:04 +08:00
def releases_params
2020-05-20 14:43:14 +08:00
{
body: params[:body],
draft: params[:draft] || false,
name: params[:name],
2020-09-23 17:40:48 +08:00
prerelease: params[:prerelease] || false,
2020-05-20 14:43:14 +08:00
tag_name: params[:tag_name],
target_commitish: params[:target_commitish] || "master" #分支
}
end
2020-08-11 23:20:04 +08:00
def create_attachments(attachment_ids, target)
2020-05-20 14:43:14 +08:00
attachment_ids.each do |id|
attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id)
unless attachment.blank?
attachment.container = target
attachment.author_id = current_user.id
attachment.description = ""
attachment.save
end
end
end
def check_release_authorize
return render_forbidden("您没有权限进行此操作.") unless current_user.admin? || @project.manager?(current_user)
end
2020-03-09 00:40:16 +08:00
end