开源服务指南博客文章自动生成
内容提要
作者利用GitHub Actions、Notion API和Cloudflare Workers构建了自动发布博文的流程。Pipedream监测Notion数据库状态变化,触发Workers查询内容,再通过REST API调用GitHub Actions生成并提交文章,实现自动化发布。作者偏好Workers,因Pipedream体验不佳,正逐步迁移。
延伸解读
自动化流程的架构选择
作者选择将自动化流程拆分为三个独立服务:Pipedream负责监测Notion数据库变动,Cloudflare Workers负责查询文章内容并触发GitHub Actions,GitHub Actions负责生成和提交文章。这种架构将不同功能解耦,便于独立维护和替换。作者提到正逐步从Pipedream迁移到Cloudflare Workers,说明架构设计时考虑了服务可替换性,避免对单一服务过度依赖。
GitHub Actions 的灵活触发方式
文章展示了如何通过REST API触发GitHub Actions的workflow_dispatch事件,并传递自定义输入参数。这种方式使得外部服务(如Cloudflare Workers)能够动态指定文件路径和内容,实现自动化内容生成。同时,GitHub Actions的权限配置(permissions: contents: write)和提交操作(git commit/push)也体现了其作为自动化执行环境的强大能力。
状态监测的简化方案
作者指出,直接监测Notion数据库状态变动需要缓存变动前的状态,实现较为复杂。Pipedream提供了现成的监测功能,简化了这一步骤。这提醒读者,在构建自动化流程时,可以优先考虑使用现成的服务来降低开发复杂度,但也要注意服务的稳定性和体验,如作者提到的Pipedream的不足。
Q&A
如何利用GitHub Actions自动生成并提交博文?
通过GitHub Actions的workflow_dispatch事件,可以手动触发工作流并传入参数。在workflow中定义path和content两个输入参数,然后使用shell脚本将内容写入指定路径,并自动提交到GitHub仓库,从而触发后续的构建和发布流程。
如何通过REST API触发GitHub Actions工作流?
使用GitHub的REST API,向`/repos/{owner}/{repo}/actions/workflows/{workflow_file}/dispatches`发送POST请求,在请求体中指定ref(分支)和inputs(工作流输入参数),即可触发工作流。需要携带具有相应权限的Personal Access Token进行认证。
如何监测Notion数据库中的文章状态变化?
可以使用Pipedream来监测Notion数据库的变动。Pipedream能够监听Notion数据库的更新事件,当文章状态变为“已完成”时,触发工作流,并将文章ID发送给Cloudflare Workers。
整个自动化发布博文的流程是怎样的?
流程为:1. Pipedream监测Notion数据库变动,提取状态为“已完成”的文章ID并发送给Cloudflare Workers;2. Cloudflare Workers根据文章ID查询内容,将文章路径和内容作为参数请求GitHub Actions;3. GitHub Actions将内容写入仓库并提交;4. GitHub Actions监听代码提交,自动构建和发布。
为什么作者选择Cloudflare Workers而不是直接用Pipedream触发GitHub Actions?
作者认为Pipedream的代码编写体验较差,稳定性欠佳,因此选择逐步迁移到Cloudflare Workers。这是个人主观偏好,并非技术上的绝对优劣。
在GitHub Actions工作流中,如何将内容写入指定文件并提交?
在workflow中,使用`cat << EOF > ./content/post/${{ github.event.inputs.path }}`将输入的内容写入指定路径,然后配置git用户信息,使用`git add`和`git commit`提交,最后`git push`推送。