如何在(R)markdown文件中添加GitHub最新版本及工作流验证信息?
实现(R)Markdown中自动插入GitHub仓库版本与工作流信息的方案
核心思路
通过R调用GitHub公开API,获取目标仓库的版本发布数据和指定工作流的运行记录,再将动态数据插入到(R)Markdown文档中。推荐使用gh包(专门封装GitHub API,对R用户更友好)和lubridate包(处理日期格式)。
步骤1:安装并加载依赖包
install.packages(c("gh", "lubridate")) library(gh) library(lubridate)
步骤2:获取最新版本标识与发布日期
以twbs/bootstrap仓库为例,调用GitHub的releases/latest端点提取数据:
# 配置目标仓库(格式:用户名/仓库名) repo <- "twbs/bootstrap" # 获取最新release的完整数据 latest_release <- gh("GET /repos/:repo/releases/latest", repo = repo) # 提取版本号和发布日期并格式化 release_id <- latest_release$tag_name release_date <- as.Date(latest_release$published_at) %>% format("%Y年%m月%d日")
gh()函数会自动处理API请求,公开仓库无需额外认证;私有仓库可设置环境变量GITHUB_PAT存储访问令牌。published_at返回ISO标准时间,用lubridate转换为本地日期格式。
步骤3:获取指定工作流的最新成功执行日期
首先确认目标工作流的名称(对应仓库.github/workflows/下的yml文件名或工作流显示名),比如bundlewatch:
# 配置目标工作流名称 workflow_name <- "bundlewatch" # 获取该工作流的最新成功运行记录(仅返回1条) workflow_runs <- gh("GET /repos/:repo/actions/workflows/:workflow/runs", repo = repo, workflow = workflow_name, status = "success", per_page = 1) # 转换时区并格式化时间(示例为GMT+1时区) latest_success_date <- workflow_runs$workflow_runs[[1]]$created_at %>% ymd_hms() %>% with_tz(tzone = "GMT+1") %>% format("%Y年%m月%d日 %H:%M")
status = "success"筛选仅成功的运行记录,per_page = 1确保只取最新一条。- 可修改
with_tz()的时区参数(如"Asia/Shanghai"对应北京时间)适配需求。
步骤4:在(R)Markdown中插入动态内容
将数据获取代码放在文档的设置块中,再在文本中引用变量:
--- title: "GitHub仓库信息展示文档" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = FALSE) library(gh) library(lubridate) # 全局配置 repo <- "twbs/bootstrap" workflow_name <- "bundlewatch" # 获取版本数据 latest_release <- gh("GET /repos/:repo/releases/latest", repo = repo) release_id <- latest_release$tag_name release_date <- as.Date(latest_release$published_at) %>% format("%Y年%m月%d日") # 获取工作流数据 workflow_runs <- gh("GET /repos/:repo/actions/workflows/:workflow/runs", repo = repo, workflow = workflow_name, status = "success", per_page = 1) latest_success_date <- workflow_runs$workflow_runs[[1]]$created_at %>% ymd_hms() %>% with_tz(tzone = "GMT+1") %>% format("%Y年%m月%d日 %H:%M")
This is the release r release_id, published on r release_date.
The software was validated successfully on r latest_success_date.
## 原理与扩展说明 - **gh包优势**:直接映射GitHub REST API端点,无需手动构造请求URL,简化认证流程。 - **日期处理**:`lubridate`统一了不同格式时间的转换逻辑,可灵活调整输出格式。 - **扩展场景**: - 切换仓库:修改`repo`变量为目标仓库的`用户名/仓库名`格式即可。 - 更换工作流:修改`workflow_name`为目标工作流的文件名或显示名称。 - 增加数据维度:可调用其他GitHub API端点,比如获取最新提交哈希、仓库星标数等,对应调整`gh()`的请求路径即可。 ## 注意事项 - GitHub API有请求限制:公开仓库每小时60次请求,使用令牌可提升至5000次/小时,频繁生成文档时建议缓存数据。 - 若目标工作流无成功运行记录,代码会报错,可添加`ifelse`判断处理空值情况。 内容的提问来源于stack exchange,提问作者Ndr
相关产品推荐
相关产品推荐

