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

求助:GitHub Actions定时任务中文件变更触发Discord通知

问题分析

你的工作流由schedule事件触发,所以github.event_name始终是schedule——这个变量记录的是触发整个工作流的初始事件,和工作流内部执行的push操作无关,因此依赖它判断是否有文件变更的逻辑永远不会生效。

要实现「文件变更时发送Discord通知」的需求,核心是直接检测工作流中是否实际产生了文件变更,而非依赖事件名称。

解决方案

修改工作流,在每次执行脚本后检查文件变更状态,汇总结果后再决定是否发送通知:

on:
  schedule:
    - cron: '0 0,12 * * *'
name: Init
jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Install dependencies
      run: npm install
    - name: Run action script
      run: npm run action 
    # 检查执行action脚本后是否有文件变更
    - name: Check changes after action
      id: check_changes_1
      run: |
        if git diff --quiet; then
          echo "has_changes=false" >> $GITHUB_OUTPUT
        else
          echo "has_changes=true" >> $GITHUB_OUTPUT
        fi
    # 仅当有变更时才执行推送
    - uses: mikeal/publish-to-github-action@master
      if: steps.check_changes_1.outputs.has_changes == 'true'
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    - name: Run visit script
      run: npm run visit 
    # 检查执行visit脚本后是否有文件变更
    - name: Check changes after visit
      id: check_changes_2
      run: |
        if git diff --quiet; then
          echo "has_changes=false" >> $GITHUB_OUTPUT
        else
          echo "has_changes=true" >> $GITHUB_OUTPUT
        fi
    # 仅当有变更时才执行推送
    - uses: mikeal/publish-to-github-action@master
      if: steps.check_changes_2.outputs.has_changes == 'true'
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    # 汇总两次检查结果,判断是否有变更被推送
    - name: Check if any changes were pushed
      id: any_changes
      run: |
        if [[ "${{ steps.check_changes_1.outputs.has_changes }}" == "true" || "${{ steps.check_changes_2.outputs.has_changes }}" == "true" ]]; then
          echo "has_changes=true" >> $GITHUB_OUTPUT
        else
          echo "has_changes=false" >> $GITHUB_OUTPUT
        fi
    # 有变更时发送Discord通知
    - name: Send Discord Notification
      if: steps.any_changes.outputs.has_changes == 'true'
      run: |
        curl -X POST -H "Content-Type: application/json" \
          -d '{"content": "仓库已更新:有文件变更被推送。"}' \
          ${{ secrets.DISCORD_WEBHOOK_URL }}
关键改动说明
  1. 新增变更检查步骤:用git diff --quiet命令检测文件是否有变更——无变更时返回0,有变更时返回非0,以此生成布尔值输出变量。
  2. 优化推送逻辑:仅当检测到变更时才执行publish-to-github-action,避免无意义的空推送。
  3. 汇总变更结果:合并两次脚本执行后的变更状态,只要任意一次有变更,就触发Discord通知。

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:22:36