如何在GitHub Actions中仅处理修改后的.md格式文件
仅处理变更的.md文件的GitHub Actions工作流修改方案
要实现只处理新增、修改或删除的.md后缀文件,你需要对现有工作流做两处核心修改,同时修复原有脚本的语法错误:
1. 在获取变更文件时直接筛选.md文件
修改Get changes步骤的git diff命令,通过grep过滤出仅以.md结尾的文件,同时修复if语句的语法缺失(原代码缺少then):
- name: Get changes id: changed-files run: | if ${{ github.event_name == 'pull_request' }}; then echo "changed_files=$(git diff --name-only -r HEAD^1 HEAD | grep '\.md$' | xargs)" >> $GITHUB_OUTPUT else echo "changed_files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep '\.md$' | xargs)" >> $GITHUB_OUTPUT fi
2. 循环处理时增加二次校验(双重保险)
在Run autodocu update步骤的循环中,增加文件后缀判断,确保只有.md文件才会被传入脚本处理:
- name: Run autodocu update run: | for file in ${{ steps.changed-files.outputs.changed_files }}; do if [[ "$file" == *.md ]]; then python important.py "$file" fi done
注:如果你的
important.py需要接收文件路径作为参数,记得加上"$file"传递给脚本,这样脚本就能知道具体处理哪个文件。
修改后的完整工作流
on: push: branches: - main paths: - Example/** jobs: updatepages: runs-on: [self-hosted, linux] defaults: run: working-directory: ./automation/ permissions: contents: read id-token: write pull-requests: write steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: ${{ github.event_name == 'pull_request' && 2 || 0 }} - name: Get changes id: changed-files run: | if ${{ github.event_name == 'pull_request' }}; then echo "changed_files=$(git diff --name-only -r HEAD^1 HEAD | grep '\.md$' | xargs)" >> $GITHUB_OUTPUT else echo "changed_files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep '\.md$' | xargs)" >> $GITHUB_OUTPUT fi - name: Setup Python uses: actions/setup-python@v4 with: python-version: 3.x - name: dependencies run: | pip install requests flask md2cf mistune - name: Run autodocu update run: | for file in ${{ steps.changed-files.outputs.changed_files }}; do if [[ "$file" == *.md ]]; then python important.py "$file" fi done
内容的提问来源于stack exchange,提问作者Antham
相关产品推荐
相关产品推荐

