hexo部落格文章增加修改歷史change log
阿新 • • 發佈:2021-12-14
讀取git日誌,為hexo部落格生成修改日誌(change log)
hexo是一款基於Nodejs的靜態部落格生成器,我們內部用來做知識庫,專案託管在內部的gitlab,為了提升大家的貢獻積極性,考慮在知識庫的頁面增加貢獻者說明
讀取日誌
知識庫的思想是多人協作,因為已經用git記錄了,所以我們可以從git讀取change log, 可以通過git log
讀取
git log -15 --pretty=format:"%an %aI %s" file
- 15 指定最多15條
- --pretty=format 格式化
- %an 使用者
- %aI 時間
- %s 日誌
python讀取日誌並append到部落格的markdown
讀取日誌:
def get_change_log(md): logs = excute_command('git log -15 --pretty=format:"%an %aI %s" '+ md).split("\n") result = [] for log in logs: result.append(log.split(' ')) return result def excute_command(cmd): process = os.popen(cmd) # return file output = process.read().decode('utf-8') process.close() return output
注意上面是python2的程式碼
然後,在寫個程式遍歷markdown,並追加日誌到markdown:
def walk_files(dir): files = os.listdir(dir) files.sort() # 先處理檔案 for file in files: filename = os.path.join(dir, file) if not os.path.isdir(filename): if not file.endswith(".md"): continue logs = get_change_log(os.path.join(dir, file)) append_change_log(filename, logs) for file in files: filename = os.path.join(dir, file) if os.path.isdir(filename): walk_files(filename) def append_change_log(filename, logs): change_log = ['## 修改歷史','', '| 序號 | 貢獻者 | 時間 | 修改內容 |', '| ---- | --- | --- |--- |'] index = 1 for log in logs: if len(log) == 3: change_log.append('| %s | %s | %s | %s |' % (index, log[0], log[1], log[2])) index = index + 1 with open(filename, 'a+') as f: for log in change_log: f.write(log) f.write("\n")
CI整合
在gitlab的ci裡,在hexo build之前,需要先執行python:
build:hexo:
image: cicd-hf-hexo:1.0
stage: build
script:
- python gen-changelog.py
- npm run clean
- npm run build
only:
- master
最終效果如下: