Py学习  »  Git

使用 GitHub Actions 自动备份代码仓

K8sCat • 2 年前 • 209 次点击  
阅读 33

使用 GitHub Actions 自动备份代码仓

这是我参与更文挑战的第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 }}
复制代码
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/115586
 
209 次点击