如何借助GitHub Actions自动更新README文件以展示数据集最新日期?
实现README自动展示数据集最后更新日期的方案
很高兴帮你搞定这个需求!其实通过扩展你现有的GitHub Action工作流,就能轻松实现自动更新README里的数据集最后日期,下面是具体步骤:
1. 在README中预留替换标记
首先在你的README.md文件里需要展示日期的位置,加入一段特殊标记,方便后续Action定位并替换内容:
### 数据集最新更新日期 <!-- LAST_UPDATED_DATE:START -->等待自动更新<!-- LAST_UPDATED_DATE:END -->
2. 扩展GitHub Action工作流
在你现有的每日爬取数据的工作流中,添加三个额外步骤:提取日期、更新README、提交推送。
示例工作流代码
假设你的数据集是CSV格式(日期在第一列,逗号分隔),可以这样写:
jobs: crawl-and-update: runs-on: ubuntu-latest steps: # 这里是你原来的爬取、处理数据的步骤,比如 checkout 代码、爬取数据等 - name: Checkout code uses: actions/checkout@v4 - name: 爬取并处理数据 run: | # 你的爬取脚本命令,比如 python crawl_data.py # 新增步骤1:提取数据集最后一行的日期 - name: 提取最新数据集日期 id: get_last_date run: | # 根据你的数据集格式调整命令,这里以CSV为例 # 取最后一行,按逗号分割后取第一列(假设日期是第一列) LAST_DATE=$(tail -n 1 ./path/to/your/dataset.csv | cut -d ',' -f 1) # 将日期存入Action输出变量,供后续步骤使用 echo "last_date=$LAST_DATE" >> $GITHUB_OUTPUT # 新增步骤2:更新README中的日期 - name: 更新README内容 uses: actions/github-script@v6 with: script: | const fs = require('fs'); const readmePath = './README.md'; // 读取当前README内容 const content = fs.readFileSync(readmePath, 'utf8'); // 替换标记间的内容为最新日期 const updatedContent = content.replace( /<!-- LAST_UPDATED_DATE:START -->(.*?)<!-- LAST_UPDATED_DATE:END -->/s, `<!-- LAST_UPDATED_DATE:START -->${{ steps.get_last_date.outputs.last_date }}<!-- LAST_UPDATED_DATE:END -->` ); // 写入更新后的内容 fs.writeFileSync(readmePath, updatedContent); # 新增步骤3:提交并推送更新 - name: 提交README更新 run: | git config --global user.name 'GitHub Action Bot' git config --global user.email 'action@github.com' git add README.md git commit -m "Auto-update dataset last date to ${{ steps.get_last_date.outputs.last_date }}" git push
3. 适配不同数据集格式
如果你的数据集不是CSV,比如JSON、Excel等,只需要调整提取日期的命令即可:
- 若是JSON文件:可以用
jq工具,比如jq -r '.[-1].date' ./data.json(假设最后一个元素的date字段是目标日期) - 若是Excel文件:可以用
pandas脚本读取最后一行的日期,比如写个简单的Python脚本输出日期
关于你提到的Permalink
Permalink是指向文件特定版本的链接,适合展示固定版本的内容,但没法动态更新当前README的显示内容。而上面的方案是直接修改README文件并提交,能保证访客看到的永远是最新的数据集日期,更符合你的需求。
内容的提问来源于stack exchange,提问作者KowComical




