Skip to content

Latest commit

 

History

History
230 lines (201 loc) · 13.6 KB

README_en.md

File metadata and controls

230 lines (201 loc) · 13.6 KB

Hub Mirror Action

English | 简体中文

Action for mirroring repos between Hubs (like GitHub, Gitee, and GitLab).

Tutorial

steps:
- name: Mirror the Github organization repos to Gitee.
  uses: Yikun/hub-mirror-action@master
  with:
    # Support gitee, github and gitlab
    src: github/kunpengcompute
    # Support gitee, github and gitlab
    dst: gitee/kunpengcompute
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    # Support github/gitee user, org and gitlab group
    account_type: org
    # Supporte set account type speparately
    # src_account_type: org
    # dst_account_type: org

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

Please refer to scenarios for more examples.

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 set the Gitlab 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. and for GitLab in here (Required scopes: api, read_api, read_repository, write_repository).

Optional

  • account_type (optional) default is user, the account type of src and dst account, can be set to org or user,For GitLab: can be set to group or user,only support mirror between same account type (that is "org to org" or "user to user" or "group to group"). if u wanna mirror difference account type, use the src_account_type and dst_account_type please.
  • src_account_type (optional) default is account_type, the account type of src account, can be set to org or user or group.
  • dst_account_type (optional) default is account_type, the account type of dst account, can be set to org or userr group.
  • clone_style (optional) default is https, can be set to ssh or https.When you are using ssh clone style, you need to configure the public key of dst_key to both source end and destination end.
  • 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.
  • lfs (optional) Default is false, support git lfs, call git lfs fetch --all and git lfs push --all to support lfs mirror.
  • api_timeout (optional) Default is 60, sets the timeout for API requests (in seconds). Example usage: api_timeout: '90'

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

GitLab group mirror, mirror from GitHub organization to GitLab group

- name: GitLab group mirror
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/organization-name
    dst: gitlab/group-name
    dst_key: ${{ secrets.GITLAB_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITLAB_TOKEN }}
    account_type: group
    src_account_type: org
    dst_account_type: group

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

Note: please configure the public key of dst_key to the source (github in here) and destination(gitee in here)

- 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"

Only sync repository list exclude private and fork

- name: Get repository list exclude private and fork
  id: repo
  uses: yi-Xu-0100/[email protected]
- name: Mirror repository list exclude private and fork
  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: ${{ steps.repo.outputs.repoList }}

Support LFS mirror

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

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:
    1. Add Secrets,add settings-secrets in repo,like GITEE_PRIVATE_KEYGITEE_TOKEN or GITLAB_PRIVATE_KEYGITLAB_TOKEN
    2. Add workflow,add the workflow file into .github/workflows.

Reference

Platform-Specific Notes

GitLab

  • Uses group instead of org for organizational accounts
  • Only top-level groups are supported for mirroring. Nested subgroups (group/subgroup) are not supported yet
  • Requires API token with appropriate scopes (api, read_api, read_repository, write_repository)
  • When mirroring to GitLab, ensure your group/user has sufficient permissions to create repositories
  • GitLab.com has API rate limits of 2000 requests per minute for authenticated users
  • GitLab API Documentation: Official GitLab API documentation
  • GitLab Personal Access Tokens: Guide for creating GitLab tokens