如何使用 GitHub Action 自动更新项目文件
温馨提示:本文使用 ChatGPT 润色。
参考链接:
GitHub Actions 文档:docs.github.com/zh/actions
管理个人资料自述文件:docs.github.com/zh/account-…
草梅友仁的自述文件:github.com/CaoMeiYouRe…
前言
利用GitHub Action的自动化能力,实现对项目内的文件自动同步,从github上的公开项目中同步所需文件到自己的项目中。
本例中为了实现对privacy-protection-tools/anti-AD中的anti-ad-surge.txt文件转换为clash支持的list格式。
正文
基础介绍
在此之前,需要先了解下什么是GitHub Actions 文档 - GitHub 文档,对此不太了解的可点击参考链接了解详细内容。
GitHub Action
目的和好处
使用 GitHub Actions 则是为了借助 GitHub 提供的免费 CI/CD 能力,自动同步博客或其他内容,从而减少工作量。
详细步骤
使用 GitHub Action 可以更新仓库的指定文件,在此以anti-ad-clash
这个仓库为例。
新建一个公共仓库
在Actions中新增一个workflow
配置好action,设置好定时任务,自动执行更新。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| name: sync anti-ad from privacy-protection-tools/anti-AD
on: workflow_dispatch: push: branches: [ master ] schedule: - cron: '30 19 * * *' permissions: contents: write
jobs: build:
runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@master - name: download the ad-list run: | wget -q https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-surge.txt - name: rename tile to list run: | mv -f anti-ad-surge.txt anti-ad-clash.list - name: Commit files id: commit-files run: | if [ -n "$(git status --porcelain anti-ad-clash.list)" ]; then git config --local user.email "github-actions[bot]@users.noreply.github.com" git config --local user.name "github-actions[bot]" git add . git commit -m "pull newest list" echo "hasChange=true" >> $GITHUB_OUTPUT else echo "No changes detected" fi - name: Push changes uses: ad-m/github-push-action@master if: ${{ steps.commit-files.outputs.hasChange == 'true' }} with: github_token: ${{ secrets.PERSON_TOKEN }} branch: 'main' repository: 'conscloud/anti-ad-clash'
|
请注意 Commit files
部分,这里只指定了在更新 anti-ad-clash.list
文件时才会进行 commit,否则不会 commit。而在 Push changes
部分,只有在 hasChange
的情况下才会执行,避免了在没有更新时提交 commit 导致出错的问题。