GitHub Action for copying files to other repositories.
This is a GitHub action to copy files from your repository to another external repository. It is also possible to copy files from/to repository Wikis.
This action runs in a Docker container and therefore only supports Linux.
The following example workflow step will copy all files from the repository running the action, to a folder named backup
in the destination repo copycat-action
. If the files already exist at the destination repo, they will be overwritten.
- name: Copy
uses: andstor/copycat-action@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
src_path: /.
dst_path: /backup/
dst_owner: andstor
dst_repo_name: copycat-action
The following input variable options can/must be configured:
Input variable | Necessity | Description | Default |
---|---|---|---|
src_path |
Required | The source path to the file(s) or folder(s) to copy from. For example /. or path/to/home.md . |
|
dst_path |
Optional | The destination path to copy the file(s) or folder(s) to. For example /wiki/ or path/to/index.md . |
src_path |
dst_owner |
Required | The name of the owner of the repository to push to. For example andstor . |
|
dst_repo_name |
Required | The name of the repository to push to. For example copycat-action . |
|
src_branch |
Optional | The name of the branch in source repository to clone from. | master |
dst_branch |
Optional | The name of the branch in the destination repository to push to. If the branch doesn't exists, the branch will be created based on the default branch. | master |
clean |
Optional | Set to true if the dst_path should be emptied before copying. |
false |
file_filter |
Optional | A simple pattern for filtering files to be copied. Acts on file basename. For example *.sh . |
|
filter |
Optional | A glob pattern for filtering files to be copied. Acts on file paths. For example **/!(*.*) . |
|
exclude |
Optional | A glob pattern for excluding paths. For example */tests/* . |
|
src_wiki |
Optional | Set to true if the source repository you want to copy from is the GitHub Wiki. |
false |
dst_wiki |
Optional | Set to true if the destination repository you want to copy from is the GitHub Wiki. |
false |
commit_message |
Optional | A custom git commit message. | |
username |
Optional | The GitHub username to associate commits made by this GitHub action. | GITHUB_ACTOR |
email |
Optional | The email used for associating commits made by this GitHub action. | GITHUB_ACTOR @users.noreply.github.com |
personal_token
: (required) GitHub Private Access Token used for the clone/push operations. To create it follow the GitHub Documentation.
Copycat provides several ways of filtering which files you want to copy.
All three types of filtering can be applied simultaneously.
The file_filter
input variable allows you to filter file basenames. Hence, you can for example only copy all text files by setting file_filter
to *.txt
. The variable only accepts simple patterns.
The filter
input variable provides extensive globbing support. It also supports extended globbing and globstar. The globbing applies to file paths. So, to for example match all files that doesn't have a file extention, the pattern could look like **/!(*.*)
.
The exclude
input variable can be used to exclude certain paths. It will apply to the file paths. One are for example able to exclude certain deirectory names. Setting exclude
to */tests/*
results in only copying files that don't lie inside a folder named tests
(both directly and indirectly). Here, a file with for example the path foo/tests/bar/baz.txt
would not be copied over.
This workflow configuration will copy all files from the repository's wiki to a folder named wiki
in the destination repo andstor.github.io
.
This can for example be used to merge several wikies of an organisation, and display them on a custom GitHub Pages site. The Jekyll theme Paper has support for this.
name: Copy
on: gollum
jobs:
copy:
runs-on: ubuntu-latest
steps:
- name: Copycat
uses: andstor/copycat-action@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
src_path: /.
dst_path: /wiki/
dst_owner: andstor
dst_repo_name: andstor.github.io
dst_branch: master
src_branch: master
src_wiki: true
dst_wiki: false
username: nutsbot
email: [email protected]
The Copycat GitHub action is written by André Storhaug [email protected]
This project is licensed under the MIT License - see the LICENSE file for details.