Merge pull request '發佈 jsc-gitea 0.1.0:新增 pr-status 與 pr-comments' (#16) from develop into master
Reviewed-on: #16 Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
This commit was merged in pull request #16.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jsc-gitea",
|
"name": "jsc-gitea",
|
||||||
"version": "0.0.9",
|
"version": "0.1.0",
|
||||||
"description": "Gitea API 工具、Wiki 讀寫與存取庫批次同步",
|
"description": "Gitea API 工具、Wiki 讀寫與存取庫批次同步",
|
||||||
"skills": "./skills",
|
"skills": "./skills",
|
||||||
"author": {
|
"author": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jsc-gitea",
|
"name": "jsc-gitea",
|
||||||
"version": "0.0.9",
|
"version": "0.1.0",
|
||||||
"description": "Gitea API 工具、Wiki 讀寫與存取庫批次同步",
|
"description": "Gitea API 工具、Wiki 讀寫與存取庫批次同步",
|
||||||
"skills": "./skills"
|
"skills": "./skills"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ gitea.sh wiki-get <owner>/<repo> <page> # 不存在 exit 4
|
|||||||
gitea.sh wiki-put <owner>/<repo> <page> <file> # 自動判斷新建或更新
|
gitea.sh wiki-put <owner>/<repo> <page> <file> # 自動判斷新建或更新
|
||||||
gitea.sh wiki-url <owner>/<repo> <page> # 印出 wiki 頁絕對網址(取自 API 的 html_url);跨存取庫連結用
|
gitea.sh wiki-url <owner>/<repo> <page> # 印出 wiki 頁絕對網址(取自 API 的 html_url);跨存取庫連結用
|
||||||
gitea.sh pr-create <owner>/<repo> <head> <base> <title> <body-file>
|
gitea.sh pr-create <owner>/<repo> <head> <base> <title> <body-file>
|
||||||
|
gitea.sh pr-status <owner>/<repo> <pr-index> # 印出 {state} {merged} {mergeable}
|
||||||
|
gitea.sh pr-comments <owner>/<repo> <pr-index> # 所有留言(issue/審查/行內),依時間排序
|
||||||
gitea.sh api <METHOD> <path> [json-file]
|
gitea.sh api <METHOD> <path> [json-file]
|
||||||
hash-id <text> # 與 gitea.sh hash-id 相同
|
hash-id <text> # 與 gitea.sh hash-id 相同
|
||||||
check-wiki-rules.sh # 驗證 wiki repo 解析與 hash fallback 規則
|
check-wiki-rules.sh # 驗證 wiki repo 解析與 hash fallback 規則
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jsc-gitea",
|
"name": "jsc-gitea",
|
||||||
"version": "0.0.9",
|
"version": "0.1.0",
|
||||||
"description": "Gitea API 工具、Wiki 讀寫與存取庫批次同步",
|
"description": "Gitea API 工具、Wiki 讀寫與存取庫批次同步",
|
||||||
"skills": "./skills/"
|
"skills": "./skills/"
|
||||||
}
|
}
|
||||||
|
|||||||
+48
-1
@@ -12,14 +12,17 @@
|
|||||||
# gitea.sh wiki-list <owner>/<repo> # 列出 wiki 頁名
|
# gitea.sh wiki-list <owner>/<repo> # 列出 wiki 頁名
|
||||||
# gitea.sh wiki-get <owner>/<repo> <page> # 印出 wiki 頁 markdown;不存在時 exit 4
|
# gitea.sh wiki-get <owner>/<repo> <page> # 印出 wiki 頁 markdown;不存在時 exit 4
|
||||||
# gitea.sh wiki-put <owner>/<repo> <page> <file> # 建立或更新 wiki 頁(內容取自檔案)
|
# gitea.sh wiki-put <owner>/<repo> <page> <file> # 建立或更新 wiki 頁(內容取自檔案)
|
||||||
|
# gitea.sh wiki-url <owner>/<repo> <page> # 印出 wiki 頁絕對網址(取自 API 的 html_url);跨存取庫連結用
|
||||||
# gitea.sh pr-create <owner>/<repo> <head> <base> <title> <body-file> # 建立 PR,印出 PR URL
|
# gitea.sh pr-create <owner>/<repo> <head> <base> <title> <body-file> # 建立 PR,印出 PR URL
|
||||||
|
# gitea.sh pr-status <owner>/<repo> <pr-index> # 印出「{state} {merged} {mergeable}」
|
||||||
|
# gitea.sh pr-comments <owner>/<repo> <pr-index> # 印出所有留言(issue 留言、審查評語、行內留言),依時間排序
|
||||||
# gitea.sh pr-depend <owner>/<repo> <pr-index> <dep-owner>/<dep-repo> <dep-index>
|
# gitea.sh pr-depend <owner>/<repo> <pr-index> <dep-owner>/<dep-repo> <dep-index>
|
||||||
# 把 PR 掛上前置 PR 依賴;依賴未關閉前 Gitea 會阻擋合併
|
# 把 PR 掛上前置 PR 依賴;依賴未關閉前 Gitea 會阻擋合併
|
||||||
# gitea.sh repo-set <owner>/<repo> <description> [website] # 設定 repo 描述與網頁
|
# gitea.sh repo-set <owner>/<repo> <description> [website] # 設定 repo 描述與網頁
|
||||||
# gitea.sh api <METHOD> <path> [json-file] # 原始 API 呼叫(path 以 /repos/... 起始)
|
# gitea.sh api <METHOD> <path> [json-file] # 原始 API 呼叫(path 以 /repos/... 起始)
|
||||||
# 環境變數: GITEA_HOST(例 https://gitea.jsc.idv.tw)、GITEA_TOKEN
|
# 環境變數: GITEA_HOST(例 https://gitea.jsc.idv.tw)、GITEA_TOKEN
|
||||||
# GITEA_TOKEN 未設定,或請求遇 401/403 時,自動退回 tea CLI 的登入 token
|
# GITEA_TOKEN 未設定,或請求遇 401/403 時,自動退回 tea CLI 的登入 token
|
||||||
# (~/.config/tea/config.yml,優先取 default: true 的登入);兩者皆無才失敗。
|
# (~/.config/tea/config.yml,優先取 url 與 GITEA_HOST 同主機的登入,其次 default: true);兩者皆無才失敗。
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||||
@@ -204,6 +207,50 @@ print(json.dumps({"head":sys.argv[1],"base":sys.argv[2],"title":sys.argv[3],
|
|||||||
' "$head" "$base" "$title" "$body_file" > "$tmp"
|
' "$head" "$base" "$title" "$body_file" > "$tmp"
|
||||||
req POST "/repos/$or/pulls" "$tmp" | json_field html_url
|
req POST "/repos/$or/pulls" "$tmp" | json_field html_url
|
||||||
rm -f "$tmp" ;;
|
rm -f "$tmp" ;;
|
||||||
|
pr-status)
|
||||||
|
# 印出「{state} {merged} {mergeable}」,供呼叫端判斷 PR 是否已合併。
|
||||||
|
or="${1:?owner/repo required}"; idx="${2:?pr index required}"
|
||||||
|
req GET "/repos/$or/pulls/$idx" | python3 -c '
|
||||||
|
import json,sys
|
||||||
|
p=json.load(sys.stdin)
|
||||||
|
print("%s %s %s" % (p.get("state","?"), str(p.get("merged")).lower(), str(p.get("mergeable")).lower()))
|
||||||
|
' ;;
|
||||||
|
pr-comments)
|
||||||
|
# 印出 PR 的所有留言,每行「{時間}<TAB>{作者}<TAB>{類型}<TAB>{內容單行化}」。
|
||||||
|
# 三個來源都要讀:issue 留言、review 本體的評語、review 內逐行的程式碼留言。
|
||||||
|
# 只讀 issue 留言會漏掉真正的審查意見,那正是需要修正的部分。
|
||||||
|
or="${1:?owner/repo required}"; idx="${2:?pr index required}"
|
||||||
|
{ req GET "/repos/$or/issues/$idx/comments?limit=100" | python3 -c '
|
||||||
|
import json,sys
|
||||||
|
for c in json.load(sys.stdin):
|
||||||
|
body=" ".join((c.get("body") or "").split())
|
||||||
|
if body: print("%s\t%s\t留言\t%s" % (c.get("created_at",""), (c.get("user") or {}).get("login","?"), body))
|
||||||
|
'
|
||||||
|
reviews=$(req GET "/repos/$or/pulls/$idx/reviews?limit=100")
|
||||||
|
printf '%s' "$reviews" | python3 -c '
|
||||||
|
import json,sys
|
||||||
|
for r in json.load(sys.stdin):
|
||||||
|
body=" ".join((r.get("body") or "").split())
|
||||||
|
st=r.get("state","")
|
||||||
|
# 沒有評語的審查照樣要印:APPROVED 代表可以合併,REQUEST_CHANGES 代表被要求修改,
|
||||||
|
# 兩者都是呼叫端要據以決策的事實,過濾掉會看不見 PR 真正的狀態。
|
||||||
|
print("%s\t%s\t審查(%s)\t%s" % (r.get("submitted_at",""), (r.get("user") or {}).get("login","?"), st, body or "(無評語)"))
|
||||||
|
'
|
||||||
|
for rid in $(printf '%s' "$reviews" | python3 -c '
|
||||||
|
import json,sys
|
||||||
|
for r in json.load(sys.stdin):
|
||||||
|
if r.get("comments_count", 0) or r.get("id"): print(r["id"])
|
||||||
|
'); do
|
||||||
|
req GET "/repos/$or/pulls/$idx/reviews/$rid/comments" 2>/dev/null | python3 -c '
|
||||||
|
import json,sys
|
||||||
|
try: d=json.load(sys.stdin)
|
||||||
|
except Exception: raise SystemExit
|
||||||
|
for c in d:
|
||||||
|
body=" ".join((c.get("body") or "").split())
|
||||||
|
if body: print("%s\t%s\t行內(%s:%s)\t%s" % (c.get("created_at",""), (c.get("user") or {}).get("login","?"), c.get("path",""), c.get("original_position") or c.get("position") or "", body))
|
||||||
|
' || true
|
||||||
|
done
|
||||||
|
} | sort ;;
|
||||||
pr-depend)
|
pr-depend)
|
||||||
or="${1:?owner/repo required}"; idx="${2:?pr index required}"
|
or="${1:?owner/repo required}"; idx="${2:?pr index required}"
|
||||||
dep_or="${3:?dep owner/repo required}"; dep_idx="${4:?dep index required}"
|
dep_or="${3:?dep owner/repo required}"; dep_idx="${4:?dep index required}"
|
||||||
|
|||||||
Reference in New Issue
Block a user