It is possible to create repositories within Github with GitHub templates. This is a nice approach to have some boilerplate within your repository. Over the time the template repository will get some code changes. The problem is that the already created repositories won't know about those changes. This GitHub action will help you to keep track of the template changes.
- Sync template repository with the current repository
- Ignore files and folders from syncing using a
.templatesyncignore
file
Add this configuration to your github action
# File: .github/workflows/template-sync.yml
on:
# cronjob trigger
schedule:
- cron: "0 0 1 * *"
# manual trigger
workflow_dispatch:
jobs:
repo-sync:
runs-on: ubuntu-latest
steps:
# To use this repository's private action, you must check out the repository
- name: Checkout
uses: actions/checkout@v3
- name: actions-template-sync
uses: AndreasAugustin/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
source_repo_path: <owner/repo>
upstream_branch: <target_branch> # defaults to main
pr_labels: <label1>,<label2>[,...] # defaults to chore,template-sync
You will receive a pull request within your repository if there are some changes available.
Variable | Description | Required | [Default] |
---|---|---|---|
github_token | Token for the repo. Can be passed in using $\{{ secrets.GITHUB_TOKEN }} |
true |
|
source_repo_path | Repository path of the template | true |
|
upstream_branch | The target branch | true |
main |
source_repo_ssh_private_key | [optional] private ssh key for the source repository. E.q. useful if using a private template repository. see |
false |
|
pr_labels | [optional] comma separated list. pull request labels. Must be already created. |
false |
chore,template_sync |
hostname | [optional] the hostname of the repository |
false |
github.com |
This repo uses this template and this action from the marketplace. See the definition here
You can use all triggers which are supported for GitHub actions
If you have a private template repository.
You have various options to use ssh keys with GitHub.
An example are deployment keys. For our use case write permissions are not needed.
Within the repository where the GitHub action is enabled add a secret (e.q. SOURCE_REPO_SSH_PRIVATE_KEY
) with the content of your private SSH key. Make sure that the read permissions of that secret fulfil your use case.
Set the optional source_repo_ssh_private_key
input parameter.
jobs:
repo-sync:
runs-on: ubuntu-latest
steps:
# To use this repository's private action, you must check out the repository
- name: Checkout
uses: actions/checkout@v3
- name: actions-template-sync
uses: AndreasAugustin/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
source_repo_path: ${{ secrets.SOURCE_REPO_PATH }} # <owner/repo>, should be within secrets
upstream_branch: ${{ secrets.TARGET_BRANCH }} #<target_branch> # defaults to main
pr_labels: <label1>,<label2>[,...] # defaults to chore,template-sync
source_repo_ssh_private_key: ${{ secrets.SOURCE_REPO_SSH_PRIVATE_KEY }} # contains the private ssh key of the private repository
Create a .templatesyncignore
file. Just like writing a .gitignore
file, follow the glob pattern in defining the files and folders that should be excluded from syncing with the template repository.
You must create a secret named ACTIONS_STEP_DEBUG
with the value true
to see the debug messages set by this command in the log. For more information, see "Enabling debug logging."
The development environment targets are located in the Makefile
make help
Thanks goes to these wonderful people (emoji key):
andy Augustin 📖 💻 👀 🛡️ |
Ugo Pattacini 📖 |
Jose Gabrielle Rivera 💻 |
P.D. Rittenhouse 🤔 |
Daniel Boll 🐛 |
albertschwarzkopf 🤔 |
Akul Pillai 🛡️ |
Stefan Riembauer 🤔 |
Fabrizio Cacicia 🛡️ 🐛 |
This project follows the all-contributors specification. Contributions of any kind welcome!