1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-03-27 04:50:30 +08:00
2019-09-18 22:26:15 +08:00

171 lines
5.9 KiB
VimL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"=============================================================================
" releases.vim --- release script for SpaceVim
" Copyright (c) 2016-2017 Wang Shidong & Contributors
" Author: Wang Shidong < wsdjeg at 163.com >
" URL: https://spacevim.org
" License: GPLv3
"=============================================================================
scriptencoding utf-8
" 2017-08-05 v0.4.0 is released at https://github.com/SpaceVim/SpaceVim/pull/768
" 2017-11-16 v0.5.0 is released at https://github.com/SpaceVim/SpaceVim/pull/966
" v0.6.0 is released at https://github.com/SpaceVim/SpaceVim/pull/1205
" v0.7.0 is released at https://github.com/SpaceVim/SpaceVim/pull/1610
" v0.8.0 is released at https://github.com/SpaceVim/SpaceVim/pull/1841
" 2018-09-26 v0.9.0 is released at https://github.com/SpaceVim/SpaceVim/pull/2203
" 2018-12-25 v1.0.0 is released at https://github.com/SpaceVim/SpaceVim/pull/2377
" 2019-04-08 v1.1.0 is released at https://github.com/SpaceVim/SpaceVim/pull/2726
" 2019-07-17 v1.2.0 is released at https://github.com/SpaceVim/SpaceVim/pull/2974
" 这是所有 ID 小于上一次 release ID并且还未被合并的 ID在新的release
" 之后,需要把已经合并了的删除!
let s:unmerged_prs_since_last_release = [2014, 2218, 2232, 2242, 2307,
\ 2390, 2396, 2407, 2446, 2447, 2541, 2627, 2655, 2664,
\ 2952, 2954, 2955, 2953, 2961, 2956, 2965, 2967, 2970,
\ 2732, 2950, 2971]
" these options can be changed when going to release new tag
let s:last_release_number = 2974
let s:current_release_number = -1
" this is a list of pull request number which > last_release_number and <
" current_release_number
" next time when I release v1.1.0, only need to update following option
let s:unmerged_prs_since_current_release = []
" the logic should be from last_release_number to current_release_number,
" include prs in unmerged_prs_since_last_release which is merged.
" exclude prs in unmerged_prs_since_current_release
function! SpaceVim#dev#releases#get_unmerged_prs() abort
return copy(s:unmerged_prs_since_last_release)
endfunction
function! SpaceVim#dev#releases#last_release_number() abort
return s:last_release_number
endfunction
function! SpaceVim#dev#releases#current_release_number() abort
return s:current_release_number > 0 ? s:current_release_number : 999999
endfunction
function! SpaceVim#dev#releases#unmerged_prs_since_current_release() abort
return s:unmerged_prs_since_current_release
endfunction
function! s:body() abort
return 'SpaceVim development (pre-release:' . g:spacevim_version . ') build.'
endfunction
function! SpaceVim#dev#releases#open() abort
let username = input('github username:')
let password = input('github password:')
let is_dev = g:spacevim_version =~# 'dev'
let releases = {
\ 'tag_name': (is_dev ? 'nightly' : g:spacevim_version),
\ 'target_commitish': 'master',
\ 'name': (is_dev ? 'nightly' : 'SpaceVim v' . g:spacevim_version),
\ 'body': (is_dev ? s:body() : SpaceVim#dev#releases#content()),
\ 'draft': v:false,
\ 'prerelease': (is_dev ? v:true : v:false)
\ }
let response = github#api#repos#releases#Create('SpaceVim', 'SpaceVim',
\ username, password, releases)
if !empty(response)
echomsg 'releases successed! ' . response.url
else
echom 'releases failed!'
endif
endfunction
function! s:list_closed_prs(owner, repo, page) abort
return github#api#util#Get('repos/' . a:owner . '/' . a:repo . '/issues?state=closed&page=' . a:page , [])
endfunction
function! s:get_list_of_PRs() abort
let prs = []
for i in range(1, 10)
let issues = s:list_closed_prs('SpaceVim','SpaceVim', i)
call extend(prs,
\ filter(issues,
\ "v:val['number'] > "
\ . s:last_release_number
\ . " && v:val['number'] < "
\ . s:current_release_number
\ . ' && !empty(get(v:val, "merged_at", ""))'
\ . " && index(s:unmerged_prs_since_current_release, v:val['number']) == -1 "
\ ))
endfor
for i in s:unmerged_prs_since_last_release
let pr = github#api#issues#Get_issue('SpaceVim', 'SpaceVim', i)
if get(pr, 'state', '') ==# 'closed'
call add(prs, pr)
endif
endfor
return filter(prs, "has_key(v:val, 'pull_request')")
endfunction
function! s:pr_to_list(pr) abort
return '- ' . a:pr.title . ' [#' . a:pr.number . '](' . a:pr.html_url . ')'
endfunction
let s:prs = []
function! SpaceVim#dev#releases#content() abort
let md = [
\ '### SpaceVim release ' . g:spacevim_version
\ ]
if s:prs == []
let s:prs =s:get_list_of_PRs()
endif
let md = md + SpaceVim#dev#releases#parser_prs(s:prs, 'en')
return join(md, "\n")
endfunction
" this function is to generate markdown form pull request list
function! SpaceVim#dev#releases#parser_prs(prs, ...) abort
let is_cn = get(a:000, 0, '') ==# 'cn'
let g:is_cn = is_cn
let md = []
let adds = []
let changes = []
let fixs = []
let others = []
for pr in a:prs
if pr.title =~? '^ADD'
call add(adds, s:pr_to_list(pr))
elseif pr.title =~? '^CHANGE'
call add(changes, s:pr_to_list(pr))
elseif pr.title =~? '^FIX'
call add(fixs, s:pr_to_list(pr))
else
call add(others, s:pr_to_list(pr))
endif
endfor
if !empty(adds)
call add(md, '')
call add(md, is_cn ? '#### 新特性' : '#### New Features')
call add(md, '')
call extend(md, adds)
call add(md, '')
endif
if !empty(changes)
call add(md, '')
call add(md, is_cn ? '#### 改变' : '#### Feature Changes')
call add(md, '')
call extend(md, changes)
call add(md, '')
endif
if !empty(fixs)
call add(md, '')
call add(md, is_cn ? '#### 问题修复' : '#### Bug Fixs')
call add(md, '')
call extend(md, fixs)
call add(md, '')
endif
if !empty(others)
call add(md, '')
call add(md, is_cn ? '#### 未知' : '#### Unmarked PRs')
call add(md, '')
call extend(md, others)
call add(md, '')
endif
return md
endfunction