求助: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 }}
关键改动说明
- 新增变更检查步骤:用
git diff --quiet命令检测文件是否有变更——无变更时返回0,有变更时返回非0,以此生成布尔值输出变量。 - 优化推送逻辑:仅当检测到变更时才执行
publish-to-github-action,避免无意义的空推送。 - 汇总变更结果:合并两次脚本执行后的变更状态,只要任意一次有变更,就触发Discord通知。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

