Giter Site home page Giter Site logo

freebot's Introduction

freebot

freebot 是一个帮助团队基于 github 的 issue 和 pull request 进行工作流管理的 bot。

支持通过 comment 命令的方式执行一些经过前置检查的操作以及一些自动化的流程。

目录

简单示例

通过示例的 freebot.conf 快速尝试。

根据自己的需要修改 owner, repo 和 plugin 的相关配置。

执行 ./freebot -c ./freebot.conf

在 github 上配置 repo 的 webhook 地址为 freebot 的监听地址。

示例配置的简单工作流说明:

  1. 开发通过 /status wip 给 PR 加上 status/wip 的标签。
  2. 开发完成,开发执行 /status wait-review 将状态修改为待 review 且 /cc @user1 将 user1 指定为 reviewer。
  3. user1 如果 review 未通过,可以将状态修改为 request-changes
  4. user1 如果 review 通过,/status approved 将状态修改为 approved
  5. 开发执行 /status testing 并通过 /cc @user2 抄送 QA。
  6. QA 收到通知,开始测试,如果测试不通过,回到 request-changes,测试通过,则 /status merge-ready
  7. 开发通过 /merge 将代码合并,进行后续的上线操作。

配置

由于 freebot 同时支持配置多个 repo,且每一个 repo 的 plugin 都可以有自定义的配置,为了避免单个配置文件过长,难以维护,支持将每一个 repo 的配置分散在一个指定目录中。

freebot 会用定期轮询的方式读取指定目录的配置,如果检测到配置有变化,会动态更新。

在配置文件中配置 repo_conf_dir 来启用此功能,通过 repo_conf_dir_update_interval_s 指定轮询检测的间隔时间。

repo_conf_dir 目录下的所有文件都会被解析为对应的 repo 的配置。

格式如下:

{
    "fatedier/freebot": {
        "alias": {},
        "roles": {},
        "plugins": {
            "assign": {
                "enable"
            }
        }
    }
}

功能

插件

每一个插件提供了一些基础的能力,通过为每一个 repo 进行插件配置从而实现定制化的团队工作流。

插件详细说明

别名

在 github 的 comment 中敲命令,没有自动补全是一件很繁琐的事,通过设置别名来简化这一操作。

{
    "alias": {
        "cmds": {
            "s": "status"
        },
        "labels": {
            "wr": "wait-review"
        },
        "users": {
            "aaa": "bbb"
        }
    }
}

可以给命令,标签和用户分别设置别名。

原先需要添加评论 /status wait-review,使用别名后只需要输入 /s wr 即可。

角色

可以为指定的用户分配指定角色,在之后的插件中的前置条件可以对 author 的角色有要求。例如限制只有 owner 角色的用户才能执行某些命令。

还可以设置当存在某个 label 时某个用户为指定的角色。

示例:

{
    "roles": {
        "owner": ["user1", "user2"],
        "qa": ["qa1"]
    },
    "label_roles": {
        "module/cmd": {
            "owner": ["user3"]
        }
    }
}

上面的示例表示当 issue 或 PR 存在 module/cmd 的 label 时,user3 的角色是 owner。

freebot's People

Contributors

bingtianbaihua avatar blizard863 avatar fatedier avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

freebot's Issues

配置文件优化

  • 主配置中可以指定一个目录用于存放每一个 repo 的配置文件。
  • 文件格式同 repo_conf 下面层级的格式 map[string]map[string]RepoConf
  • 通过 reload 命令重新加载配置。

根据 PR 修改了哪些文件,打上对应的 label

根据 PR 修改了哪些文件,打上对应的 label

示例的流程:

  1. 根据修改了哪些文件,打上对应的 module/xxx 的 label。
  2. role 可以根据 label 做特殊配置,例如只在有 module/docker 的 label 的 PR 中才是 owner。
  3. 收到 pull request review 的 webhook 后,如果是 approved,且 approve 的用户是某个 module 的 owner,则会打上 approved/xxx 的 label。
  4. 如果 PR 的 author 有新的 commit 提交,则移除所有的 approved/xxx 标签。
  5. 通过 /merge 合并时,precondition 中可以要求每一个 module/xxx 标签,都需要有一个对应的 approved/xxx 标签。

precondition 中的数组支持或的逻辑

目前一个 precondition 中的所有条件是与的关系,多个 precondition 是或的关系。

对于一个 precondition 中的数组,需要能够支持配置与的判断逻辑。

新增 plugin label

label 用于给需要 issue 或 pr 打标签。

用户可以配置支持哪些命令,例如 kindarea,完全自定义,但是功能相同。

通过 /kind featrue 加上 kind/feature 标签。通过 /area bot 加上 area/bot 标签。

通过 /remove-kind feature/remove-area bot 移除标签。

和 status 插件不同,多个标签可以同时存在。每一种命令支持哪些标签需要通过配置指定。

新增 plugin close

通过 /close 关闭 issue, pr。

或者

对于不符合 issue 模版的 issue 自动 close,并添加上一段 comment。

role 支持自定义

目前 role 只支持 owner 和 qa。

需要能够支持自定义的 role,precondition 中的配置也不再是 is_owner 或者 is_qa,而应该是 required_roles 。

status trigger 功能

  • owner 使用 github 的 approve 功能后,自动打上 status/approved 标签。
  • 如果处于 review 完成状态之后,又有新的 commit 被提交,则回退到 status/wait-review 标签。

可以抽象出 status 的 trigger 功能,当 xxx 条件触发时,且满足 xxx 前置条件,则打上 status/ 标签。

auto merge after CI succeed

通过 /auto-merge 命令打上 merge-after-ci-success 标签,对于这样的 PR 如果 ci 通过后就可以自动合并。

支持 group

一个 group 包含多个 user。
在 plugin 的配置中可以指定 group,避免频繁配置所有 user。

notify 支持 /watch 命令

通过 /watch 命令关注某一个 issue 或 PR,当相关的 event 被触发时,会通过消息通知机制推送给该用户。

/watch 执行后会给该 issue 或 PR 加上 watch/username 的 label,便于 freebot 查询要推送消息给哪些人。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.