parent
c1988ef6b3
commit
26e2093f77
@ -0,0 +1,2 @@
|
|||||||
|
// Place all the behaviors and hooks related to the matching controller here.
|
||||||
|
// All this logic will automatically be available in application.js.
|
@ -0,0 +1,3 @@
|
|||||||
|
// Place all the styles related to the version_releases controller here.
|
||||||
|
// They will automatically be included in application.css.
|
||||||
|
// You can use Sass (SCSS) here: http://sass-lang.com/
|
@ -0,0 +1,125 @@
|
|||||||
|
class VersionReleasesController < ApplicationController
|
||||||
|
before_action :set_user_and_project
|
||||||
|
before_action :require_login, except: [:index]
|
||||||
|
before_action :find_version , only: [:edit, :update, :destroy]
|
||||||
|
|
||||||
|
def index
|
||||||
|
version_releases = @repository.version_releases.includes(:user)
|
||||||
|
version_releases = version_releases.where(draft: false) unless current_user.present? && (current_user == @user || current_user.admin?)
|
||||||
|
|
||||||
|
@version_releases_size = version_releases.size
|
||||||
|
page = params[:page]
|
||||||
|
@limit = params[:limit] || 15
|
||||||
|
@version_releases = version_releases.order("created_at desc").page(page).limit(@limit)
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
if params[:name].nil?
|
||||||
|
normal_status(-1, "名称不能为空")
|
||||||
|
elsif params[:tag_name].blank?
|
||||||
|
normal_status(-1, "标签名称不能为空")
|
||||||
|
else
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
version_params = {
|
||||||
|
body: params[:body],
|
||||||
|
draft: params[:draft] || false,
|
||||||
|
name: params[:name],
|
||||||
|
prerelease: params[:prerelease],
|
||||||
|
tag_name: params[:tag_name],
|
||||||
|
target_commitish: params[:target_commitish] || "master" #分支
|
||||||
|
}
|
||||||
|
version_release = VersionRelease.new(version_params.merge(user_id: current_user.id, repository_id: @repository.id))
|
||||||
|
if version_release.save!
|
||||||
|
git_version_release = Gitea::Versions::CreateService.new(@user.gitea_token, @repository.try(:login), @repository.try(:identifier), version_params).call
|
||||||
|
|
||||||
|
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"],
|
||||||
|
}
|
||||||
|
version_release.update_attributes!(update_params)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
rescue => e
|
||||||
|
puts "create version release error: #{e.message}"
|
||||||
|
raise Error, e.message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
if params[:name].nil?
|
||||||
|
normal_status(-1, "名称不能为空")
|
||||||
|
elsif params[:tag_name].blank?
|
||||||
|
normal_status(-1, "标签名称不能为空")
|
||||||
|
else
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
version_params = {
|
||||||
|
body: params[:body],
|
||||||
|
draft: params[:draft] || false,
|
||||||
|
name: params[:name],
|
||||||
|
prerelease: params[:prerelease],
|
||||||
|
tag_name: params[:tag_name],
|
||||||
|
target_commitish: params[:target_commitish] || "master" #分支
|
||||||
|
}
|
||||||
|
if @version.update_attributes!(version_params)
|
||||||
|
git_version_release = Gitea::Versions::UpdateService.new(@user.gitea_token, @repository.try(:login), @repository.try(:identifier), version_params, @version.try(:version_gid)).call
|
||||||
|
unless git_version_release
|
||||||
|
raise Error, "更新失败"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
rescue => e
|
||||||
|
puts "update version release error: #{e.message}"
|
||||||
|
raise Error, e.message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
if @version.destroy
|
||||||
|
git_version_release = Gitea::Versions::UpdateService.new(@user.gitea_token, @repository.try(:login), @repository.try(:identifier), version_params, @version.try(:version_gid)).call
|
||||||
|
unless git_version_release
|
||||||
|
raise Error, "删除失败"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
rescue => e
|
||||||
|
puts "destroy version release error: #{e.message}"
|
||||||
|
raise Error, e.message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# def set_project
|
||||||
|
# @project = Project.find_by_id(params[:project_id])
|
||||||
|
# @repository = @project.repository #项目的仓库
|
||||||
|
# unless @project.present? && @repository.present?
|
||||||
|
# normal_status(-1, "仓库不存在")
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
|
||||||
|
def set_user_and_project
|
||||||
|
@project = Project.find_by_id(params[:project_id])
|
||||||
|
@repository = @project.repository #项目的仓库
|
||||||
|
@user = @project.owner
|
||||||
|
unless @user.present? && @project.present? && @repository.present?
|
||||||
|
normal_status(-1, "仓库不存在")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_version
|
||||||
|
@version = VersionRelease.find_by_id(params[:id])
|
||||||
|
unless @version.present?
|
||||||
|
normal_status(-1, "版本不存在")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -0,0 +1,2 @@
|
|||||||
|
module VersionReleasesHelper
|
||||||
|
end
|
@ -0,0 +1,4 @@
|
|||||||
|
class VersionRelease < ApplicationRecord
|
||||||
|
belongs_to :repository
|
||||||
|
belongs_to :user
|
||||||
|
end
|
@ -0,0 +1,34 @@
|
|||||||
|
class Gitea::Versions::CreateService < Gitea::ClientService
|
||||||
|
attr_reader :token, :user_name, :repo, :params
|
||||||
|
|
||||||
|
# params EX:
|
||||||
|
# {
|
||||||
|
# "body": "sylor", #user_name
|
||||||
|
# "draft": false,
|
||||||
|
# "name": "string",
|
||||||
|
# "prerelease": true,
|
||||||
|
# "tag_name": "string",
|
||||||
|
# "target_commitish": "string"
|
||||||
|
# }
|
||||||
|
def initialize(token, user_name, repo, params)
|
||||||
|
@token = token
|
||||||
|
@params = params
|
||||||
|
@user_name = user_name
|
||||||
|
@repo = repo
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
post(url, request_params)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def request_params
|
||||||
|
Hash.new.merge(token: token, data: params)
|
||||||
|
end
|
||||||
|
|
||||||
|
def url
|
||||||
|
"/repos/#{@user}/#{@repo}/releases".freeze
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -0,0 +1,24 @@
|
|||||||
|
class Gitea::Versions::DeleteService < Gitea::ClientService
|
||||||
|
attr_reader :token, :user_name, :repo,:version_gid
|
||||||
|
|
||||||
|
def initialize(token, user_name, repo,version_gid)
|
||||||
|
@token = token
|
||||||
|
@user_name = user_name
|
||||||
|
@repo = repo
|
||||||
|
@version_gid = version_gid
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
delete(url, params)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def params
|
||||||
|
Hash.new.merge(token: @token)
|
||||||
|
end
|
||||||
|
|
||||||
|
def url
|
||||||
|
"/repos/#{@user}/#{@repo}/releases/#{@version_gid}".freeze
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,35 @@
|
|||||||
|
class Gitea::Versions::UpdateService < Gitea::ClientService
|
||||||
|
attr_reader :token, :user_name, :repo, :params, :version_gid
|
||||||
|
|
||||||
|
# params EX:
|
||||||
|
# {
|
||||||
|
# "body": "sylor", #user_name
|
||||||
|
# "draft": false,
|
||||||
|
# "name": "string",
|
||||||
|
# "prerelease": true,
|
||||||
|
# "tag_name": "string",
|
||||||
|
# "target_commitish": "string"
|
||||||
|
# }
|
||||||
|
def initialize(token, user_name, repo, params,version_gid)
|
||||||
|
@token = token
|
||||||
|
@params = params
|
||||||
|
@user_name = user_name
|
||||||
|
@repo = repo
|
||||||
|
@version_gid = version_gid
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
update(url, request_params)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def request_params
|
||||||
|
Hash.new.merge(token: token, data: params)
|
||||||
|
end
|
||||||
|
|
||||||
|
def url
|
||||||
|
"/repos/#{@user}/#{@repo}/releases/#{@version_gid}".freeze
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -0,0 +1 @@
|
|||||||
|
json.extract! @version, :id, :name, :body, :tag_name, :target_commitish, :draft, :prerelease,:version_gid
|
@ -0,0 +1,21 @@
|
|||||||
|
json.partial! "commons/success"
|
||||||
|
json.all_count @version_releases_size
|
||||||
|
json.limit @limit
|
||||||
|
json.version_releases do
|
||||||
|
json.array! @version_releases.to_a.each do |re|
|
||||||
|
json.id re.id
|
||||||
|
json.version_gid re.version_gid
|
||||||
|
json.name re.name
|
||||||
|
json.body re.body
|
||||||
|
json.tag_name re.tag_name
|
||||||
|
json.target_commitish re.target_commitish
|
||||||
|
json.release_type re.draft ? "草稿" : (re.prerelease ? "预发行" : "稳定")
|
||||||
|
json.tarball_url re.tarball_url
|
||||||
|
json.zipball_url re.zipball_url
|
||||||
|
json.url re.zipball_url
|
||||||
|
json.user_login re.user.try(:login)
|
||||||
|
json.user_avatar url_to_avatar(re.user)
|
||||||
|
json.created_at format_time(re.created_at)
|
||||||
|
json.format_created time_from_now(re.created_at)
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,18 @@
|
|||||||
|
class CreateVersionReleases < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
create_table :version_releases do |t|
|
||||||
|
t.integer :user_id
|
||||||
|
t.string :name
|
||||||
|
t.text :body
|
||||||
|
t.string :tag_name
|
||||||
|
t.string :target_commitish
|
||||||
|
t.boolean :draft, default: false
|
||||||
|
t.boolean :prerelease, default: false
|
||||||
|
t.string :tarball_url
|
||||||
|
t.string :zipball_url
|
||||||
|
t.string :url
|
||||||
|
t.string :version_gid
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,6 @@
|
|||||||
|
class AddProjectIdToVersionRelease < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
add_column :version_releases, :repository_id, :integer
|
||||||
|
add_index :version_releases, [:repository_id]
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe VersionReleasesController, type: :controller do
|
||||||
|
|
||||||
|
end
|
@ -0,0 +1,15 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
# Specs in this file have access to a helper object that includes
|
||||||
|
# the VersionReleasesHelper. For example:
|
||||||
|
#
|
||||||
|
# describe VersionReleasesHelper 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 VersionReleasesHelper, type: :helper do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe VersionRelease, type: :model do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
Loading…
Reference in new issue