合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
[toc] # 发布更新信息的三种方式 ## 图形操作 ![](https://box.kancloud.cn/52184e9de287cd78b05117d641a2c980_549x200.png) ![](https://box.kancloud.cn/8ae1d5b43eb9b7461c5638329b23aecb_209x54.png) ## Git操作 ![](https://box.kancloud.cn/c0ec51547c735e9ea84d7bb591a98646_613x274.png) ![](https://box.kancloud.cn/dee60629e69a2748d829f3c23cb9667d_393x137.png) ![](https://box.kancloud.cn/0576651c6eb9d4a5d487aa84d94fc682_602x682.png) ## 自动化 ![](https://box.kancloud.cn/8f0a5ee5a464828b704f9a16f8b23b5c_1085x652.png) ![](https://box.kancloud.cn/0946e24a54f122e65d3c41a74a67b59a_887x460.png) # python, 让接口发布自动化 ## 大致思路 1. 检测文件变动 2. 把新增/修改/删除/更名的`文件名`写入字典 3. 读取`SUMMARY.md`, 生成中文和文件名的对应关系(字典) 4. 根据第二步的文件名, 从第三步生成的字典中找到对应关系, 并拼接字符串 5. 把拼接好的字符串加上commit信息, 写入`更新信息`文件 6. Git发布 ## 实现代码 ```python # coding=utf-8 import datetime import os import time from git import Repo # 初始化 repo = Repo(os.path.split(os.path.realpath(__file__))[0]) # 当前目录, 即git目录 # 获取当前时间 current_time = datetime.datetime.now().strftime('%Y年%m月%d日%H:%M:%S') # 建立中文名与file_name的对应关系的dict filename_cn = dict() def get_diff_info(): # 先构建中文名和md文件的对应关系 make_filename_cn_dict() # 文件修改记录(包括新增, 修改, 删除和重命名) files_dict = { 'add': list(), 'remove': list(), 'modify': list(), 'rename': dict() } # 确定add文件 if repo.untracked_files: for i in repo.untracked_files: if i[-3:] == '.md' and filename_cn.has_key(i): files_dict['add'].append(i) # 确定modify文件 index = repo.index if repo.is_dirty(): for i in index.diff(None): str_list = i.__str__().split() file_name = str_list[0] if file_name[-3:] == '.md' and 'deleted' not in str_list and filename_cn.has_key(file_name): files_dict['modify'].append(file_name) # 确定remove和rename文件 if 'SUMMARY.md' in files_dict['modify']: files_dict['modify'].remove('SUMMARY.md') import sys reload(sys) sys.setdefaultencoding("utf-8") git = repo.git text = git.diff('SUMMARY.md') for i in text.split('\n'): if '- ' in i: filename = i[i.find('(')+1:i.find(')')] filename = filename.encode('utf-8') cn = i[i.find('[')+1:i.find(']')] cn = cn.encode('utf-8') if filename_cn.has_key(filename): files_dict['rename'][filename] = dict() files_dict['rename'][filename]['old_name'] = cn files_dict['rename'][filename]['new_name'] = filename_cn[filename] files_dict['rename'][filename]['url'] = filename else: files_dict['remove'].append(cn) return files_dict def make_update_string(files_dict, update_str): # 开始拼接'更新信息.md'文件所需要的信息 update_strs = '\n---\n\n' update_strs += '# 更新信息 ' update_strs += current_time update_strs += '\n\n' update_strs += '>[danger] ' update_strs += update_str update_strs += '\n' # 根据文件变化, 拼接字符串 # 如果重命名... if files_dict['rename']: update_strs += '\n**重命名接口:**\n' for i in files_dict['rename'].values(): update_strs += "* ~~%s~~ ==> [%s](%s)\n" % (i['old_name'], i['new_name'], i['url']) # 如果新增... if files_dict['add']: update_strs += '\n**新增接口:**\n' for i in files_dict['add']: file_cn = filename_cn[i] file_url = i update_strs += "* [%s](%s)\n" % (file_cn, file_url) # 如果修改... if files_dict['modify']: update_strs += '\n**修改接口:**\n' for i in files_dict['modify']: if i == '更新信息.md' or i == 'SUMMARY.md': continue file_cn = filename_cn[i] file_url = i update_strs += "* [%s](%s)\n" % (file_cn, file_url) # 如果删除... if files_dict['remove']: update_strs += '\n**删除接口:**\n' for i in files_dict['remove']: update_strs += "* ~~%s~~\n" % i update_strs += '\n' return update_strs def make_update_info(param): print 'make_update_info going.....' print param # 打开文件, 读取内容 read_obj = open("更新信息.md".decode('utf-8'), "r") str_list = read_obj.readlines() read_obj.close() # 修改内容(之前拼接的字符串) str_list[1] = param # 写入内容 write_obj = open("更新信息.md".decode('utf-8'), "w") write_obj.writelines(str_list) write_obj.close() def git_it(update_str): git = repo.git git.add('-A') # git add -A git.commit('-m', update_str) # git commit -m update_str repo.remote().push() # git push def make_filename_cn_dict(): summary_obj = open('SUMMARY.md', 'r') summary_list = summary_obj.readlines() summary_obj.close() for i in summary_list: filename = i[i.find('(')+1:i.find(')')] cn = i[i.find('[')+1:i.find(']')] filename_cn[filename] = cn if __name__ == '__main__': update_str = "需要commit的信息" # 检测文件变动 files_dict = get_diff_info() if files_dict['add'] or files_dict['modify'] or files_dict['remove'] or files_dict['rename']: # 拼接字符串 string = make_update_string(files_dict, update_str) # 修改'更新信息' make_update_info(string) # git add & commit & push git_it(update_str) ```