You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在(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
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:57:32