Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 39 additions & 66 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,94 +1,67 @@
Veronica
veronica
===
`Veronica` 的目标是成为**Go项目**的差异化构建指导工具。试想一下,如果你的项目分为许多微服务,而这个项目是以[Monorepo](https://en.wikipedia.org/wiki/Monorepo)的形式组织的,那么每次构建时,因为无法知道修改的文件会影响哪些服务,因此必须要构建所有的服务。`Veronica` 就是为了解决这一问题而诞生的,给定一个或多个文件,`Veronica` 会帮您分析项目的依赖, 并告知您该文件可能会产生哪些影响
`veronica` 的是**Go项目**的改动影响分析工具。通过在`veronica.yml`中配置您感兴趣的服务,`veronica` 会帮您分析项目的依赖, 并告知您此次的改动可能会产生哪些影响
> :construction: 本项目仍处于早期阶段, 可能会经常变动

## 前置条件
- Git
- 已经安装Git
- 项目使用go module

## 用法
1. 安装veronica
```bash
go install github.com/bootun/veronica@latest
```
2. 在项目的根目录放置[veronica.yaml](./veronica_example.yaml)文件
2. 在项目的根目录放置[veronica.yaml](./veronica_example.yaml)文件,配置好你关心的函数/方法/变量/常量/结构体
3. 切换至项目目录,并运行veronica:

```bash
cd $PROJECT_DIR
veronica report .
cd ${PROJECT_DIR}
veronica impact --old=HEAD~2 --new=HEAD --scope=service
```
**详细输出效果:**
<details>
<pre>
改动了 pkg/apigateway/spec 包中的 pkg/apigateway/spec/api.swagger.json 文件,可能会影响这些包的构建:
- cmd/api-gateway
改动了 pkg/apigateway/spec 包中的 pkg/apigateway/spec/static.go 文件,可能会影响这些包的构建:
- cmd/api-gateway

改动了 pkg/pb 包中的 pkg/pb/merchant_assets.pb.go 文件,可能会影响这些包的构建:
- cmd/api-gateway
- cmd/assets-cron
- cmd/currency-cron
- cmd/iam-cron
- cmd/iam-manager
- cmd/across-cron
- cmd/assets-manager
- cmd/currency-manager
- cmd/system-cron
- cmd/system-manager
- cmd/across-manager

改动了 pkg/pb 包中的 pkg/pb/merchant_assets.pb.gw.go 文件,可能会影响这些包的构建:
- cmd/api-gateway
- cmd/assets-cron
- cmd/currency-cron
- cmd/iam-cron
- cmd/iam-manager
- cmd/across-cron
- cmd/assets-manager
- cmd/currency-manager
- cmd/system-cron
- cmd/system-manager
- cmd/across-manager
该命令会让veronica比较当前指向HEAD的commit与HEAD前两个commit这两份代码之间的差异。

改动了 pkg/service/assets 包中的 pkg/service/assets/handler_merchant_assets.go 文件,可能会影响这些包的构建:
- cmd/assets-manager
</pre>
</details>
假设你这两次commit里改动的代码影响到了`veronica.yaml`里其中的三个服务,执行该命令,你会得到类似这样的输出:

**简略输出效果:**
<details>
<pre>
cmd/api-gateway
cmd/across-cron
cmd/currency-cron
cmd/iam-manager
cmd/system-cron
cmd/system-manager
cmd/across-manager
cmd/assets-cron
cmd/assets-manager
cmd/currency-manager
cmd/iam-cron
</pre>
</details>
```sh
refresh_playlet_info
refresh_playlet_tags
GRPC_BatchGetPlayletInfo
# 如果你的代码让更多的服务受到了影响,veronica会将它输出到这里
```

## 可配置项

**修改报告输出格式为文本**
```shell
veronica report --format=text .
**输出源代码变更可能会产生的全部影响**

如果你在使用`veronica impact`命令时, 没有加上`--scope`参数,或使用`--scope=all`来指定veronica输出全部的影响时,
veronica会报告改动对整个项目所有的顶层声明产生的影响,包括所有的包级别的函数/方法/结构体/变量/常量,就像下面这样:

```sh
> veronica impact --old HEAD~2 --new HEAD --scope=all

add (*tagRepo).GetAllTagList in github.com/bootun/some-project/infra/mysql/qimao_free/tag_repo.go, dependencies:
1. github.com/bootun/some-project/internal/app/domain/playlet/playlet_service.go:(*playletService).producePlayletInfo
2. github.com/bootun/some-project/internal/app/domain/playlet/playlet_service.go:(*playletService).RefreshAllPlayletInfoRds
...
modify TagBaseEnt in github.com/bootun/some-project/internal/app/domain/tags/entity/tag_entity.go, dependencies:
1. github.com/bootun/some-project/internal/app/consumer/update_playlet.go:(*UpdatePlayletConsumer).DealPlaylet
2. github.com/bootun/some-project/infra/mysql/qimao_free/tag_repo.go:(*tagRepo).GetOneTagById
3. github.com/bootun/some-project/internal/server/grpc.go:(*PlayletServer).GetPlayletTagSortList
...
18. github.com/bootun/some-project/infra/mysql/qimao_free/tag_repo.go:(*tagRepo).GetAllTagList
remove (*playletService).setPlayletCacheInfo in github.com/bootun/some-project/internal/app/domain/playlet/playlet_service.go, dependencies:
1. github.com/bootun/some-project/internal/app/consumer/update_playlet.go:(*UpdatePlayletConsumer).BatchWrite
...
8. github.com/bootun/some-project/internal/app/consumer/update_playlet.go:(*UpdatePlayletConsumer).DealPlaylet
```
该命令会详细告诉你对那些内容做了哪些操作(add/modify/remove), 并报告该修改产生的影响。


## 已实现功能
- 解析所有文件/目录之间的依赖关系
- 报告可能影响构建的包

## 命名背景
`Veronica`取自钢铁侠的同名外太空支援系统,在你需要升级战甲时,只需要通知维罗妮卡,它就会将战甲的模块从外太空发送给你,重新组合后完成升级。

## 未来规划
- 分析项目完整的AST,将veronica的粒度控制在[源码级别](https://github.com/bootun/veronica/issues/11)
## 相关阅读
- [基于大仓库的微服务差异化构建工具](https://mp.weixin.qq.com/s/XQqDyJyh1u6jU0PmUdS0LA)
Loading