bakhirev/assayo
GitHub: bakhirev/assayo
Assayo 通过解析 Git 提交日志自动生成包含工作节奏、职责范围、团队构成等维度分析的可视化 HTML 报告,帮助管理者量化研发效能。
Stars: 285 | Forks: 28
# [Assayo](https://bakhirev.github.io/?ref=github&lang=en)
创建包含提交统计分析的 HTML 报告:
- 工作节奏和加班时长;
- 职责范围、feature 和 bug 的数量;
- 同事的工作风格;
- 员工离职率和团队构成;
- 开发者所在地;
- 发布计划和假期日历;
- feature 和整个项目的成本;
- 需要 refactoring 的地方、已删除的文件等。
**相关链接:** [演示](https://bakhirev.github.io/demo/?ref=github&dump=./test.txt),[在线版本](https://bakhirev.github.io/demo/?ref=github),[docker](https://hub.docker.com/r/bakhirev/assayo),[reddit](https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/),[habr](https://habr.com/ru/articles/852782/)
**视频:** [英语](https://www.youtube.com/watch?v=uMbhrrd25t4),[西班牙语](https://www.youtube.com/watch?v=skmctb_2rZ0),[俄语](https://www.youtube.com/watch?v=jwCp_-bhrCQ)
### 目录
- [提交统计报告](#link-1)
- [如何创建和查看报告?](#link-2)
- [使用公共服务器](#link-3)
- [使用 NodeJS 库](#link-4)
- [使用 PHP 库](#link-5)
- [使用 Python 库](#link-6)
- [使用 Ruby 库](#link-7)
- [使用 Go 库](#link-8)
- [使用源代码](#link-9)
- [使用 github actions](#link-10)
- [使用私有服务器](#link-11)
- [如何合并作者?](#link-12)
- [如何将数据从 git 导出到 txt 文件?](#link-13)
- [在线查看](#link-14)
- [离线查看](#link-15)
- [如果你在 Windows 中使用 PowerShell](#link-16)
- [如何查看关于一组 microservice 的报告?](#link-17)
- [项目中的最佳实践](#link-18)
- [如何签署 commit?](#link-19)
- [如何添加 commit message 检查?](#link-20)
- [使用 commit-msg 文件](#link-21)
- [使用 pre-commit 包](#link-22)
- [关于本应用](#link-23)
- [如何为界面定制品牌?](#link-24)
- [如何从源代码重新构建 HTML 报告?](#link-25)
- [如何添加或编辑翻译?](#link-26)
- [️架构](#link-27)
- [microservice 总体架构](#link-29)
- [反馈与评论](#link-30)
## 提交统计报告
### 📈 如何创建和查看报告?
#### 使用公共服务器
- 访问该[网站](https://bakhirev.github.io/)
- 按照说明操作
#### 使用 NodeJS 库
- 运行 `npx assayo`
- 打开 `./assayo/index.html`
#### 使用 PHP 库
- 运行 `composer require bakhirev/assayo`
- 运行 `vendor/bin/assayo`
- 打开 `./assayo/index.html`
#### 使用 Python 库
- 运行 `pipx install assayo`
- 运行 `assayo`
- 打开 `./assayo/index.html`
#### 使用 Ruby 库
- 运行 `gem install assayo`
- 运行 `assayo`
- 打开 `./assayo/index.html`
#### 使用 Go 库
- 运行 `go get github.com/bakhirev/assayo`
- 运行 `go install github.com/bakhirev/assayo`
- 运行 `assayo`
- 打开 `./assayo/index.html`
#### 使用源代码
- 下载此代码仓库
- 将 `log.txt` 文件拖放到 `/build` 目录
- 打开 `/build/index.html`
- 或者将 `/build` 文件夹拖放到你的代码仓库中(`log.txt` 所在的位置)。你可以更改名称。例如,从 `/build` 改为 `/report`。
在这种情况下,请务必确保 `log.txt` 文件是使用离线查看的命令生成的。
#### 使用 github actions
将[脚本](https://github.com/bakhirev/assayo/blob/main/documents/ActionExample.yml)添加到 `.github/workflows/` 文件夹中,或者使用市场上的这个 [action](https://github.com/marketplace/actions/assayo)。一份新鲜出炉的报告将会保存在构建产物(artifacts)中。
#### 使用私有服务器
- 下载 [docker 镜像](https://hub.docker.com/r/bakhirev/assayo);
- 在你的本地网络中运行它;
- 使用 web 界面查看报告,并在 URL 参数 `dump` 中设置数据的 URL:
```
http://assayo_url/?dump=//you_url/some/log.txt
assayo_url - URL of the assayo container, it listens on port 80;
you_url - URL of your container with git logs;
```
默认情况下,该镜像将在 `http://127.0.0.1:80/` 运行。如果无法运行,请检查端口 `80` 是否空闲。
### 🎭 如何合并作者?
在你的项目根目录下,你需要创建一个 `.mailmap` 文件。
文件内容示例:
```
Alex B
Alex B
Alex B
Alex B
```
你可以[在这里](https://git-scm.com/docs/gitmailmap)阅读关于此文件格式的更多信息。
### 📤 如何将数据从 git 导出到 txt 文件?
#### 在线查看
在你的项目根目录下运行:
#### 离线查看
Git 将创建一个 `log.txt` 文件。此文件包含用于显示报告的数据。在线格式与离线格式的区别在于是否带有字符串包装。如果你直接打开了 `/build/index.html`,离线格式将像 `js` 文件一样被加载。
#### 如果你在 Windows 中使用 PowerShell
默认情况下,输出编码可能与 UTF-8 不匹配,生成的日志文件将无法读取。在保存日志之前,你可以使用命令更改编码。
```
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
```
或者打开已保存的文件并手动将编码更改为 UTF-8。
### 🗃️ 如何查看关于一组 microservice 的报告?
- 为每个 microservice 生成文件 `log.txt`(`log-1.txt`、`log-2.txt`、`log-3.txt` 等)。你可以手动执行此操作,也可以使用 [Assayo Crawler](https://github.com/bakhirev/assayo-crawler) 模块自动收集日志;
- 参阅“如何查看在线报告?”。在最后一步,将所有文件一次性拖到浏览器窗口中。
- 参阅“如何离线查看报告?”。在第二步,将所有 microservice 文件(`log-1.txt`、`log-2.txt`、`log-3.txt` 等)拖到报告文件夹(`/build`)中。
## 项目中的最佳实践
### 📝 如何签署 commit?
遵循 [Conventional Commits 1.0.0](https://www.conventionalcommits.org/en/v1.0.0/) 规范。示例:
```
JIRA-1234 feat(profile): Added avatar for user
```
- 任务追踪器中的任务编号 `(JIRA-1234)`
- 工作类型 `(feat, fix, style, refactor, test, doc, 等)`
- feature `(profile - 网站上的新页面或新功能,使用一(两)个简短的单词或缩写)`
- 解决了什么问题 `(Added avatar for user)`
### 👮 如何添加 commit message 检查?
#### 使用 commit-msg 文件
1. 在 `.git/hooks/` 文件夹中创建文件 `commit-msg`
2. 将以下文本添加到文件中:
```
#!/usr/bin/env bash
if ! grep -iqE "(JIRA-[0-9]{1,5})(s)(feat|fix|docs|style|refactor|test|chore)((([a-z0-9_-]{1,})){0,})(:s)([a-z]{1,})" "$1"; then
echo "Need commit message like: JIRA-12 fix(profile): some text. Read Semantic Commit Messages" >&2
exit 1
fi
```
#### 使用 [pre-commit](https://www.npmjs.com/package/pre-commit) 包
1. 在 `package.json` 文件中添加 `commit-msg` 属性:
```
...
"commit-msg": {
"regex": "(JIRA-[0-9]{1,5})(\s)(feat|fix|docs|style|refactor|test|chore)((\([a-z0-9_-]{1,}\)){0,})(:\s)([a-z]{1,})",
"error-message": "Need commit message like: JIRA-12 fix(profile): some text Read Semantic Commit Messages"
},
...
```
2. 运行命令 `npm install pre-commit`
## 关于本应用
### 🎨 如何为界面定制品牌?
你可以创建自己的界面主题。选项:
- **标题**。你可以在 URL 参数 `title` 中设置默认的文档标题。示例:`?title=You Company`
- **视觉主题**。为此,你需要准备一个包含新样式的 CSS 文件,并在 `theme` 参数中指定其 URL。示例:`?theme=//company.com/some.css`。你可以使用类名作为选择器。它们中的大多数在新版本中都不会改变。
- **语言**。你可以在 URL 参数 `lang` 中设置语言。示例:`?lang=es`
**示例:** [演示](https://bakhirev.github.io/demo/themes/)
### 🛠️ 如何从源代码重新构建 HTML 报告?
- 下载此代码仓库 `git clone https://github.com/bakhirev/assayo.git`
- 运行 `npm install`
- 运行 `npm run build:local`
- 新的 HTML 构建版本将位于 `/build` 文件夹中
### 🈯 如何添加或编辑翻译?
你可以在 `ts/translations/` 文件夹中添加新的翻译或修改现有翻译。
[指南](https://github.com/firstcontributions/first-contributions)
### 📐 ️架构
#### microservice 总体架构
1. [报告展示 UI](https://github.com/bakhirev/assayo-showcase) 显示可用报告列表。每个报告由标题、描述和代码仓库列表组成。
2. [Crawler 服务](https://github.com/bakhirev/assayo-crawler) 收集报告所需的仓库日志。
3. [日志可视化 UI](https://github.com/bakhirev/assayo) **(你在这里)** 显示报告。需要一个日志文件才能工作。
### 📧 反馈与评论
- 📱 [https://t.me/bakhirev](https://t.me/bakhirev)(优先沟通方式)
- 📧 [alexey-bakhirev@yandex.ru](mailto:alexey-bakhirev@yandex.ru)
- 🌐 [https://bakhirev.github.io/](https://bakhirev.github.io/?ref=github&lang=en)
### 目录
- [提交统计报告](#link-1)
- [如何创建和查看报告?](#link-2)
- [使用公共服务器](#link-3)
- [使用 NodeJS 库](#link-4)
- [使用 PHP 库](#link-5)
- [使用 Python 库](#link-6)
- [使用 Ruby 库](#link-7)
- [使用 Go 库](#link-8)
- [使用源代码](#link-9)
- [使用 github actions](#link-10)
- [使用私有服务器](#link-11)
- [如何合并作者?](#link-12)
- [如何将数据从 git 导出到 txt 文件?](#link-13)
- [在线查看](#link-14)
- [离线查看](#link-15)
- [如果你在 Windows 中使用 PowerShell](#link-16)
- [如何查看关于一组 microservice 的报告?](#link-17)
- [项目中的最佳实践](#link-18)
- [如何签署 commit?](#link-19)
- [如何添加 commit message 检查?](#link-20)
- [使用 commit-msg 文件](#link-21)
- [使用 pre-commit 包](#link-22)
- [关于本应用](#link-23)
- [如何为界面定制品牌?](#link-24)
- [如何从源代码重新构建 HTML 报告?](#link-25)
- [如何添加或编辑翻译?](#link-26)
- [️架构](#link-27)
- [microservice 总体架构](#link-29)
- [反馈与评论](#link-30)
## 提交统计报告
### 📈 如何创建和查看报告?
#### 使用公共服务器
- 访问该[网站](https://bakhirev.github.io/)
- 按照说明操作
#### 使用 NodeJS 库
- 运行 `npx assayo`
- 打开 `./assayo/index.html`
#### 使用 PHP 库
- 运行 `composer require bakhirev/assayo`
- 运行 `vendor/bin/assayo`
- 打开 `./assayo/index.html`
#### 使用 Python 库
- 运行 `pipx install assayo`
- 运行 `assayo`
- 打开 `./assayo/index.html`
#### 使用 Ruby 库
- 运行 `gem install assayo`
- 运行 `assayo`
- 打开 `./assayo/index.html`
#### 使用 Go 库
- 运行 `go get github.com/bakhirev/assayo`
- 运行 `go install github.com/bakhirev/assayo`
- 运行 `assayo`
- 打开 `./assayo/index.html`
#### 使用源代码
- 下载此代码仓库
- 将 `log.txt` 文件拖放到 `/build` 目录
- 打开 `/build/index.html`
- 或者将 `/build` 文件夹拖放到你的代码仓库中(`log.txt` 所在的位置)。你可以更改名称。例如,从 `/build` 改为 `/report`。
在这种情况下,请务必确保 `log.txt` 文件是使用离线查看的命令生成的。
#### 使用 github actions
将[脚本](https://github.com/bakhirev/assayo/blob/main/documents/ActionExample.yml)添加到 `.github/workflows/` 文件夹中,或者使用市场上的这个 [action](https://github.com/marketplace/actions/assayo)。一份新鲜出炉的报告将会保存在构建产物(artifacts)中。
#### 使用私有服务器
- 下载 [docker 镜像](https://hub.docker.com/r/bakhirev/assayo);
- 在你的本地网络中运行它;
- 使用 web 界面查看报告,并在 URL 参数 `dump` 中设置数据的 URL:
```
http://assayo_url/?dump=//you_url/some/log.txt
assayo_url - URL of the assayo container, it listens on port 80;
you_url - URL of your container with git logs;
```
默认情况下,该镜像将在 `http://127.0.0.1:80/` 运行。如果无法运行,请检查端口 `80` 是否空闲。
### 🎭 如何合并作者?
在你的项目根目录下,你需要创建一个 `.mailmap` 文件。
文件内容示例:
```
Alex B 标签:Git, Linux 内核安全, MITM代理, SOC Prime, 代码分析, 凭证管理, 开发工具, 日志审计, 研发效能, 自动化攻击, 请求拦截, 逆向工具, 项目管理