这是我参与更文挑战的第12天,活动详情查看:更文挑战
任何东西都有丢失的可能性,除非你在丢失前做好了备份!本文将讲解如何使用 GitHub Actions 实现自动备份代码仓。
目标
本文的目标是将 GitHub 用户 A 下的所有代码仓同步到 GitHub 用户 B 下。
准备
- 账号 A 的 AccessToken
- 账号 B 的 AccessToken
- Slack WebHook 地址(可选)
完整的 GitHub Actions
name: Mirror repos
on:
schedule:
- cron: "0 2 * * 1-5"
workflow_dispatch:
jobs:
mirror:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: GitHub CLI version
run: gh --version
- name: List repos
env:
GH_TOKEN_A: ${{ secrets.GH_TOKEN_A }}
run: |
echo ${GH_TOKEN_A} > gh_token_a
gh auth login --with-token < gh_token_a
gh repo list user-a -L 1000 > a_repos
cat a_repos
cat a_repos | wc -l
- name: Mirror repos
env:
GH_TOKEN_A: ${{ secrets.GH_TOKEN_A }}
GH_TOKEN_B: ${{ secrets.GH_TOKEN_B }}
run: |
echo ${GH_TOKEN_B} > gh_token_b
gh auth login --with-token < gh_token_b
mkdir repos
cd repos
set -x
cat ${GITHUB_WORKSPACE}/a_repos | while read repo; do
repo_name=$(echo ${repo} | awk '{print $1}' | awk -F/ '{print $2}')
gh repo create user-b/${repo_name} --private --description "${repo}" -y || true
rm -rf ${repo_name}
git clone --bare https://${GH_TOKEN_A}@github.com/user-a/${repo_name}.git ${repo_name}
cd ${repo_name}
mirror_repo="https://${GH_TOKEN_B}@github.com/user-b/${repo_name}.git"
git push --all -f ${mirror_repo} || true
git push --mirror -f ${mirror_repo} || true
cd -
done
- name: Slack Notification
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END