The plugin is used for mirroring Git repositories to external ones and it has 2 modes:
- full mirroring (default)
- partial mirroring
Details on both of them are described below.
By default, this plugin will perform full mirroring. Please note, that the clone step should be disabled.
trigger:
  event: [push, tag]
clone:
  disable: true
steps:
  - name: mirror
    image: osshelp/drone-git-mirror
    settings:
      target_repo: [email protected]:OSSHelp/some-repo.git
      ssh_key:
        from_secret: git-mirror-private-keyThis mode works similar to --mirror option for git-push. Technical details you can find here.
If the file named mirror_ignore_list exists, then the plugin will perform partial mirroring.
steps:
  - name: mirror
    image: osshelp/drone-git-mirror
    settings:
      target_repo: [email protected]:OSSHelp/some-repo.git
      ssh_key:
        from_secret: git-mirror-private-keyThe content of mirror_ignore_list file should be compatible with --exclude-from option from rsync flag (GNU tar way).
| Param | Default | Description | 
|---|---|---|
| target_repo | - | SSH clone URL of target repo | 
| ssh_key | - | Private key with R/W permissions to use for interacting with target_repo. | 
| git_email | drone@osshelp | E-mail that will be used while pushing changes | 
| git_name | Drone CI | Name that will be used while pushing changes | 
| ignore_errors | false | If set to truethe plugin will try to ignore all occurring errors to prevent build failing because of itself. | 
| mirror_ignore_list | .mirror_ignore | If this file is found in repo root - it contents will be used as excludement list for mirroring | 
For internal purposes and OSSHelp customers we have an alternative image URL:
  image: oss.help/drone/git-mirrorThere is no difference between the DockerHub image and the oss.help/drone image.
You need to create a file, named .mirror_ignore (if not overwritten with mirror_ignore_list variable) in the root directory of your repository. Describe wanted and unwanted files and directories inside as if you are preparing a file for using with --exclude-from option from rsync (GNU tar way).
For example:
.drone.yml
.mirror_ignore
file1.txt
dir1/*
dir2
Files, excluded with mirror_ignore_list will not be automatically removed from the remote repository. Neither do branches. No plans of implementing such functionality. Hence, you should do it manually.
- hide the private key in debug output
- add the way to override the target branch in the remote repository (master pinned for now)
- deal with tags not being mirrored in "partial" scenario