Skip to content

Latest commit

 

History

History
161 lines (138 loc) · 9.37 KB

README_en.md

File metadata and controls

161 lines (138 loc) · 9.37 KB

Hub Mirror Action

English | 简体中文

Action for mirroring repos between Hubs (like Github and Gitee)

Tutorial

steps:
- name: Mirror the Github organization repos to Gitee.
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/kunpengcompute
    dst: gitee/kunpengcompute
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    account_type: org

Here is a workflow to mirror the kunpengcompute org repos from Github to Gitee, see more complete workflows in here.

Who are using?

More than 100+ organizations,4000+ users are using, 50+ related blogs from users:

Usage

Required

  • src source account, such as github/kunpengcompute, is the Github kunpengcompute account.
  • dst Destination account, such as /kunpengcompute, is the Gitee kunpengcompute account.
  • dst_key the private key to push code in destination account (default in ~/.ssh/id_rsa), you can see generating SSH keys to generate the pri/pub key, and make sure the pub key has been added in destination. You can set Github ssh key in here,set the Gitee ssh key in here.
  • dst_token the API token to create non-existent repo, You can get Github token in here, and the Gitee in here.

Optional

  • account_type (optional) default is user, the account type of src and dst account, can be set to org or user,only support mirror between same account type (that is "org to org" or "user to user").
  • clone_style (optional) default is https, can be set to ssh or https.
  • cache_path (optional) let code clone in specific path, can be used with actions/cache to speed up mirror.
  • black_list (optional) the black list, such as “repo1,repo2,repo3”.
  • white_list (optional) the white list, such as “repo1,repo2,repo3”.
  • static_list (optional) Only mirror repos in the static list, but don't get list from repo api dynamically (the white/black list is still available). like 'repo1,repo2,repo3'
  • force_update (optional) Force to update the destination repo, use '-f' flag do 'git push'
  • timeout (optional) Default is '30m', set the timeout for every git command, like '600'=>600s, '30m'=>30 mins, '1h'=>1 hours
  • mappings (optional) Default is empty, the source repos mappings, such as 'A=>B, C=>CC', source repo name would be mapped follow the rule: A to B, C to CC. Mapping is not transitive.

Scenarios

Organization mirror, mirror the Github/kunpengcompute to Gitee/kunpengcompute

- name: Organization mirror
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/kunpengcompute
    dst: gitee/kunpengcompute
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    account_type: org

White/Black list, only mirror the Yikun/hub-mirror-action but not Yikun/hashes

- name: Single repo mirror
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    white_list: "hub-mirror-action"
    white_list: "hashes"

Static list, only mirror the repos hub-mirror-action and hashes

- name: Black list
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    static_list: "hub-mirror-action,hashes"

clone style, use ssh clone style

- name: ssh clone style
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    clone_style: "ssh"

set sepecific cache

- name: Mirror with specific cache
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    cache_path: /github/workspace/hub-mirror-cache

Force udpate and enable the debug flag

- name: Mirror with force push (git push -f)
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    force_update: true
    debug: true

Set command timeout to an hour

- name: Mirror with force push (git push -f)
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    force_update: true
    timeout: '1h'

Sync between different repo name(github/yikun/yikun.github.com to gitee/yikunkero/blog)

- name: mirror with mappings
  uses: Yikun/hub-mirror-action@mappings
  with:
    src: github/yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    mappings: "yikun.github.com=>blog"
    static_list: "yikun.github.com"

FAQ

  • How to use secrets to add token and key?

    You can use below steps to add secrets, you can also see more in Secrets.

    1. Get Token and Key,you can get them in ssh key and token.
    2. Add Secrets,add settings-secrets in repo,like GITEE_PRIVATE_KEYGITEE_TOKEN
    3. Add workflow,add the workflow file into .github/workflows.

Reference