最後一天不寫感想,直接量。下面這支腳本把倉庫現在的技能數、排程 run 的成績和連續綠燈次數印出來,我在 2026-10-07 03:44 KST 實際跑過。
import json, urllib.request, urllib.error
from collections import Counter
def get(u):
try:
return json.load(urllib.request.urlopen(u, timeout=30))
except urllib.error.HTTPError as e:
raise SystemExit(f'GitHub API {e.code}: {e.read().decode()[:100]}')
R = 'https://api.github.com/repos/tahodev/baodao-skill'
items = get(R + '/contents/')
skip = {'.github', 'docs', 'scripts', 'tests'}
skills = [i['name'] for i in items if i['type'] == 'dir' and i['name'] not in skip]
print('技能目錄', len(skills))
runs = get(R + '/actions/runs?event=schedule&per_page=100')['workflow_runs']
runs.sort(key=lambda r: r['created_at'])
print('排程 run', len(runs), dict(Counter(r['conclusion'] for r in runs)))
streak = 0
for r in reversed(runs):
if r['conclusion'] != 'success':
break
streak += 1
print('最近連續綠燈', streak, ',最新', runs[-1]['created_at'], runs[-1]['conclusion'])
2026-10-07 實測輸出:
技能目錄 27
排程 run 28 {'failure': 15, 'success': 13}
最近連續綠燈 4 ,最新 2026-10-06T18:19:21Z success
這支腳本有個假設:頂層目錄除了 .github、docs、scripts、tests 都是技能。目前剛好成立,27 這個數字和 README、CHANGELOG 0.9.0 寫的一致。以後新增別的非技能目錄,這個數字會被灌水。
| 項目 | 數字 | 來源 |
|---|---|---|
| 技能 | 27 個 | 上面腳本,與 0.9.0 的 CHANGELOG 一致 |
| CHANGELOG 版本 | 21 個,從 0.1.0(9/9)到 0.9.0(10/3) | CHANGELOG.md |
| 路線圖 | 24 項已完成、3 項未完成 | docs/roadmap.md |
| 排程 run | 28 次,13 綠、15 紅 | 上面腳本 |
| 最近連續綠燈 | 4 次(10/3 到 10/6 的排程 run) | 上面腳本 |
| open issue | 0 | GitHub API,2026-10-07 |
15 次紅燈拆開來是 5 次 URL 檢查、10 次 counts 步驟,第 29 天已經逐一對過。最後一次紅燈是 10/2(run #63),之後 0.8.5 修正,連續四次綠燈。
2026-10-07 03:44 KST 再測一次:tisvcloud.freeway.gov.tw(國道即時路況)、soa.tainan.gov.tw(台南)、data.kcg.gov.tw(高雄)三個網址,curl -m 15 都是 000。連不上就沒辦法實測,所以國道即時路況、台南和高雄的垃圾車,以及圖書館館藏查詢,路線圖上仍然沒打勾。這是環境限制,不是這些來源一定壞了,我只能說從我的環境驗證不了。
CHANGELOG 寫到 0.9.0,但 GitHub 上的 tag 清單最新是 v0.8.1,而且 Releases 頁只有 v0.4.2 和 v0.1.0 兩筆。也就是 0.8.2 到 0.9.0 這五個版本,使用者在 GitHub 的 Releases 頁看不到,只有 CHANGELOG 看得到。這件事我一直沒補,先把事實記在這裡。
這支腳本只打 2 次 API,未登入每小時限 60 次。遇到 HTTPError(例如額度用完的 403)會印出狀態碼和訊息就停,不會用不完整的資料算出一個看起來正常的數字。查剩餘額度可以用:
curl -s https://api.github.com/rate_limit | jq -c .resources.core