Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

通过 Github 的 Actions 自动将 Issues 中的文章列表同步到主页 README #11

Open
zhang0ZGC opened this issue Mar 3, 2021 · 0 comments
Labels
BLOG 博客

Comments

@zhang0ZGC
Copy link
Owner

zhang0ZGC commented Mar 3, 2021

背景

不知道多久前,github出了一个新功能:可以使用与用户名同名的仓库的方式来个性化你的主页,仓库下的 README.md 文件中的内容会出现在你的主页,很赞的一项功能❤。

然后这两天看到一位大佬写的博文:如何自动同步博客到 GitHub 主页?,主要介绍了怎么使用 GitHub 的 Actions 自动同步博客列表到 GitHub 主页,原理就是定时去读取目标博主的 RSS 订阅源,然后生成列表写入仓库的 README 文件。

而我这个小菜鸡也在努力地学习知识,并使用 GitHub 的 Issues 来记录我,因此我突然意识到:是不可以自动把我的 Issues 文章列表同步到主页去呢🤣。。。

实现

经过查资料,我找到了一个库:https://github.com/seed-of-apricot/issue-list-readme。他可以将指定 labels 的 issues 生成表格并同步到项目主页:

image

目的好像很符合我的需求😍!!而且还是用 js(ts) 写的,也容易修改。通过查阅资料发现,内部原理即通过 Actions 自动触发,当发现某个 issue 被打上标签或者取消标签时,通过调用 GitHub 的API,获取用户指定仓库的issues列表,然后重新生成表格。

我的目标跟原项目有所不同,因此我 fork 了这个项目到 zhang0ZGC/issue-list-readme,要实现我想要的效果,有以下条件:

  • 当我给某个 Issue 打上 Blog 标签的时候,需要把这个 Issue 同步到主页,而取消这个标签,把它从主页撤下来
  • 只能作者是我的时候,Issue 才能出现在列表
  • 我只想显示最近 10 条内容

pull下来后我按照项目生成表格的逻辑,新建了一个生成列表的文件,逻辑其实很简单,就是遍历一下 issues 取出标题跟url,然后生成 文档片段:

import * as core from '@actions/core';
import { Octokit } from '@octokit/rest';

const createTitleListContents = async (
  issues: Octokit.IssuesListForRepoResponse
) => {
  try {
    const array = issues.map((item, index: number) => {
      return `${index + 1}. [${item.title}](${item.html_url})`;
    });
    const markDownText = array.join('\n');

    return markDownText;
  } catch (error) {
    core.setFailed(error.message);
    throw error.message;
  }
};
export default createTitleListContents;

@actions/core@octokit/rest 是用来处理 github相关资源的库,有了他们,我们可以很容易使用 github 的各种资源。

为了能满足我的需求,我扩充了参数将获取用户 issues 的接口所有参数都加入进来(File diff),根据需要可以生成不同的输出。当然我页加了一个 layout 参数,用户也可以使用原项目的表格布局。

改完了以后发现,并不能通过build命令生成 dist/main.js 文件😂,额。。好像原作者没有把代码上传全而是直接上传了打包后的文件,因此我给项目加上了 webpack 及 babel,终于可以打包成功了。(原项目中使用了 ts ,并添加了 tsc 编译,不过打包出的文件并不能用,可能还有配置要改,有时间试一下怎么直接通过 tsc 编译)。

最后的主页文章列表效果就是这样:

image

总结

通过这次实践,我了解了 GitHub 的 Actions 能玩儿出很多的花儿,真是学到老,活到老🤣还有很多的花儿可以去做,比如标题上再加上时间,如何固定某个博客等等等等,这些还可以继续挖掘

如何使用

在项目的 README 文件中你想要注入的地方加入:

<!-- issueTable -->

<!-- issueTable -->

<!-- issueTable --> 为pattern参数,可以自定义,生成的内容会自动注入到它们之间

在你自己仓库的 .github/workflows 目录下随便新建个 yml 格式文件, 把https://github.com/zhang0ZGC/zhang0ZGC/blob/master/.github/workflows/blog-list.yml 的内容复制到这个文件,注意需要修改的参数:

image

然后,写一个 Issue,并给这个 Issue 打上 BLOG 标签(需要先新建一个label),就会自动同步到 README。

可以自己定义参数及搜索条件,详细的参数参阅 https://github.com/zhang0ZGC/issue-list-readme/blob/master/action.yml 或者 GitHub 的 issues 接口文档( https://docs.github.com/cn/rest/reference/issues#list-repository-issues ),有时间我就把项目的 README 文档页更新一下吧~~

REF

@zhang0ZGC zhang0ZGC changed the title 通过 Github 的 Actions 自动将 Issues 中的文章列表同步到 README 通过 Github 的 Actions 自动将 Issues 中的文章列表同步到主页 README Mar 4, 2021
@zhang0ZGC zhang0ZGC added the BLOG 博客 label Mar 4, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BLOG 博客
Projects
None yet
Development

No branches or pull requests

1 participant