Github高级管理指南
本篇主要介绍Github得一些高级管理,我们开源项目目前都是在github上维护和开发。所有我们用一些Github开放的能力去管理我们项目更能减少我们开发和维护过程中繁琐的管理工作。
probot
一种应用程序可自动化和改进您的工作流程,使用预构建的应用程序来扩展 GitHub,并轻松构建和共享您自己的应用程序。
Probot 应用程序易于编写、部署和共享。许多最受欢迎的 Probot 应用程序都是托管的,因此您无需部署和管理任何内容。以下是使用 Probot 构建的一些示例:
- Pull - 保持你的分支是最新的
- Release Drafter - 在拉取请求合并到 master 时草拟您的下一个发行说明
- Semantic Pull Requests - 状态检查,确保您的拉取请求遵循常规提交规范
- todo - 从代码中的可操作注释创建新问题
- Work In Progress - 防止合并标题中带有“WIP”的拉取请求
- Settings - 存储库设置的拉取请求
Probot 应用其实上是导出一个函数的 Node.js 模块,app
参数是 Probot
类的实例。app.on 负责监听所有 GitHub 触发的 webhook 事件,当 GitHub 上发生任何有趣的事情,你的应用程序想知道的时候,它会通知你
module.exports = app => {
app.on('issues.opened', async context => {
// 一个新的 issue 被打开,我们应该做些什么呢?
});
};
生成一个新项目
npx create-probot-app my-demo
其它的配置可参考官方文档
GitHub Actions
轻量级的自动化部署。GitHub 提供预配置的工作流程模板,您可以自定义以创建自己的持续集成工作流程。 GitHub 分析代码并显示可能适用于您的仓库的 CI 模板。
github也提供了一些开源的传送门,可以借鉴一下。
workflow
工作流程,持续集成一次运行的过程,就可以称之为一个workflow。工作流触发器是导致工作流运行的事件。这些事件可以是:
- 在您的工作流存储库中发生的事件
- 在 GitHub 之外发生并在 GitHub 上触发repository_dispatch事件
- 预定时间
- 手册
├── name 工作流程的名称 ├── on 触发工作流的事件名称 ├── jobs 工作流的主体,一个工作流由一个任务(job)或者多个任务(jobs)构成,表示一次持续集成的运行 │ │── job_id 每个任务都必须要有个id,其实就是一个字符串 │ │ ├── runs-on 任务运行的虚拟环境,必须要指定,不然无法工作 │ │ ├── steps 每个任务由多个step构成 │ │ │ ├── name 步骤名称 │ │ │ ├── run 该步骤运行的命令或者 action │ │ │ ├── env 该步骤所需的环境变量 │ │ │ ├── uses 选择任务步骤中一部分运行的操作。其实就是步骤使用的actions,可以是一个或多个
name: scp files
on: [push]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Upload Files
uses: siva1024/scp-deployer@latest
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
source: "entrypoint.sh"
target: "~/"
GitHub REST API
创建集成、检索数据和自动化工作流程,使用 GitHub REST API
进行构建。我们在使用 GitHub 得过程中,我们可以通过调用 GitHub 给我们开放的接口进行操作,基本上平时用到的都能给提供,比如:操作、仓库、拉取、搜索等等。有些功能需要身份验证,验证的过程我们通过官网去做配置。
使用方法
创建个人令牌:setting --> Developer settings --> OAuth Apps --> New OAuth App
创建成功后就会看到 ClientID 和 Client Secrets 了,刚创建的OAuth app是没有Client secret的,需要点击 Generate a new client secret进行生成,生成后自己要保存起来。
验证
通过上面操作,我们将 ClientID 和 Client Secrets 将信息填入下面链接,以此来登录和授权
`https://github.com/login/oauth/authorize?client_id=*&redirect_uri=*`
授权成功后就会跳转到通过redirect_uri指定的地址,并且路径后面会添加上临时的code值,使用这个值去调用POST https://github.com/login/oauth/access_token
,参数为client_id, client_secret, code , 接口会返回access_token, 之后调用github rest api时候只要在header中增加上"Authorization": "token " + access_token 就能正常使用了
开发使用
所有 API 访问都通过 HTTPS,并从https://api.github.com
. 所有数据都以 JSON 格式发送和接收。
curl -I https://api.github.com/users/octocat/orgs
> HTTP/2 200
> Server: nginx
> Date: Fri, 12 Oct 2012 23:33:14 GMT
> Content-Type: application/json; charset=utf-8
> ETag: "a00049ba79152d03380c34652f2cb612"
> X-GitHub-Media-Type: github.v3
> x-ratelimit-limit: 5000
> x-ratelimit-remaining: 4987
> x-ratelimit-reset: 1350085394
> Content-Length: 5
> Cache-Control: max-age=0, private, must-revalidate
> X-Content-Type-Options: nosniff
基本认证
curl -u "username" https://api.github.com
OAuth2 令牌
curl -H "Authorization: token OAUTH-TOKEN" https://api.github.com
OAuth2 密钥/秘密
curl -u my_client_id:my_client_secret 'https://api.github.com/user/repos'
开放接口如下链接:docs.github.com/cn/rest/ove…
GitHub Issues
Issues
大家都使用过,收集、处理产品的 Bug 和 新特性;建立以产品为中心的社区;根据 issue 可定位产品薄弱环节和未来走向。
使用者我们可以通过 issue 咨询使用问题,也可查询以往 issue 来解决自己遇到的问题;与不同的使用者交流经验,也可能会是国际友人;与维护者交流,并可参与到产品的开发中来。
大家在使用的时候可能就是简单的去按照github
普通管理一样,去步骤式操作,但是操作者提交的Issues
不会很规范,难以让开发者定位问题。
下面我有2种方案去改变现状:
通过创建问题模版
- 要使议题模板显示在仓库的根目录中,请输入
issue_template
的名称 - 要使议题模板显示在仓库的
docs
目录中,请输入 docs/,后接issue_template
的名称。 例如docs/issue_template.md
- 要将文件存储在隐藏的目录中,请输入
.github/
,后接issue_template
的名称。 例如.github/issue_template.md
。 - 要创建多个议题模板,并使用 template 查询参数指定填充议题正文的模板,请输入 .github/ISSUE_TEMPLATE/,后接议题模板的名称
**这个 Issues 做了什么?** (简要描述所做更改)
**这个 Issues 是什么平台?** (至少选择一个)
- [ ] web/h5
- [ ] 小程序
**这个 Issues 涉及以下那几个包:**
- [ ] eslint
- [ ] stylelint
- [ ] commitlint
通过外置浏览器
我们通过GitHub REST API
得特性,将issue创建前去做一些验证和判断,验证成功后去做创建issue。
首先我们通过/search/issues
这个接口去获取issues,在创建的过程以免重复调用。
创建issues得接口并没有开发出来,我们通过打开 github 创建链接可以自动生成
window.open(`https://github.com/xxx/xxx/issues/new?title=${title}&body=${body}${label}`)
总结:GitHub得使用其实还有很多,先介绍到这吧,后续会持续更新。本质上就是让开发者省去繁琐的步骤,让开发者使用得得心应手。
转载自:https://juejin.cn/post/7074576892925313031