这里我们通过编写一个JavaScript版本的自动创建issuse的例子来演示一下Actions功能,你也可以通过Actions来做更多自动化的事情哟。
准备和说明:
- 在GitHub上创建空项目并克隆到本地:auto-create-issuse-action;
- Node环境要求为12.x版本;
- 使用npm初始化目录:
npm init -y
;
编写Action:
- 定义action执行脚本:
name: "auto-create-issuse-action" description: "一个自动创建issuse的action" # 定义输入参数 inputs: token: description: "Personal access tokens" required: true owner: description: "项目作者" required: true repo: description: "仓库名称" required: true runs: # 脚本运行环境(按官方文档给的12版本来使用) using: "node12" # 脚本执行入口(这里我们要用@vercel/ncc编译) main: "dist/index.js" 复制代码
- 安装需要的依赖:
- @actions/core:提供了工作流命令、输入和输出变量、退出状态和调试消息的接口。
- @actions/github:得到经过身份验证的 Octokit REST 客户端和对 GitHub 操作上下文的访问。
- 编写
action
脚本:
// 导入相关依赖 const github = require("@actions/github"); const core = require("@actions/core"); const dayjs = require("dayjs"); const fs = require("fs"); // 接收输入参数 const token = core.getInput("token"); const owner = core.getInput("owner"); const repo = core.getInput("repo"); // 获取octokit对象进行后续操作 const octokit = github.getOctokit(token); // 执行函数 (async () => { try { await octokit.rest.issues.create({ owner: owner, repo: repo, title: getTitle(), body: getBody(), }); } catch (error) { console.log("[ error ] >", error); } })(); function getTitle() { return `【每日计划】 ${getDate()}`; } function getBody() { return fs.readFileSync('./template.md', "utf-8"); } function getDate() { return dayjs().add("8", "hour").format("YYYY-MM-DD"); } 复制代码
- 安装
@vercel/ncc
后执行npx ncc build index.js --license licenses.txt
进行编译; - 添加说明文档:
# AutoCreateIssuseAction 这个Action可以辅助创建每日计划的一个issuse。 ## Inputs ### `token` **Required** Personal access tokens ### `owner` **Required** 项目作者 ### `repo` **Required** 仓库名称 ## Example usage ```yaml uses: OSpoon/auto-create-issuse-action@master with: token: ${{secrets.TOKEN}} owner: OSpoon repo: auto-create-issuse-action 复制代码
添加到Workflows:
- 创建:
.github/workflows/main.yml
- 编写脚本:
# 触发条件代码push后执行 on: [push] # 执行工作列表 jobs: # 执行的任务(自动创建issuse) auto-create-issuse: # 运行环境为最新ubuntu runs-on: ubuntu-latest steps: # ①拉取代码 - name: Checkout uses: actions/checkout@v2 # create issuse - name: create issuse step # 参照auto-create-issuse-action的说明文档 uses: OSpoon/auto-create-issuse-action@master with: token: ${{secrets.AUTO_TOKEN}} owner: OSpoon repo: auto-create-issuse-action 复制代码
- 结果演示:
- 可以将action的执行定义周期性执行,具体参见官方文档,如下截图部分,注意时区问题: