This repository automates the synchronization of forked repositories for the GitHub namespace Paebbels. The
algorithm lives in the reusable action
pyTooling/SynchronizeForks; this repository contributes only the
workflow calling it and
the configuration files (*.repos) listing the forks as well as the branches and tags to synchronize.
This code is licensed under MIT License.
(Screenshot of the previous, inline implementation. The action's log groups the repositories per organisation and ends with a summary.)
- Create a repository like
SynchronizeForksin your namespace. - Add a workflow calling the action:
jobs: Synchronize: runs-on: ubuntu-latest steps: - name: ⏬ Checkout uses: actions/checkout@v6 - name: 🔄 Synchronize Repositories uses: pyTooling/SynchronizeForks@v1 with: github-token: ${{ secrets.GH_TOKEN }}
GH_TOKENis a repository secret holding a token with write access to the contents of every listed fork. A workflow's automaticGITHUB_TOKENisn't sufficient.@v1is the action's major-version branch, moved to each release. - Write your own configuration: an
.ALL.reposlisting the upstream organisations you fork from, and one<organisation>.reposper entry naming your forks, their branches and optionally their tags. The files in this repository describe thePaebbelsnamespace and are an example, not a starting point — see Configuration File Formats for the syntax. - Add a
README.mdsaying which forks the repository keeps in sync. Nothing requires it, but the repository is otherwise a directory of*.reposfiles with no explanation of what it is for. ALICENSE.mdis no longer needed: the algorithm lives in the action, and what remains here is configuration. - Push the commit and check the Action for success.
These are the files this repository owns; the action reads them. See the action's README for the authoritative description, including the optional tag patterns.
The .ALL.repos file is the entry point for the script listing all GitHub organisations that should be synchronized.
It lists one organisation per line or alternatively a comment starting with #. In case many single repositories from
various organisations or private accounts should be synchronized, it's recommended to add an _Others or _Misc entry.
Example:
ghdl
OSVVM
_Others
Each organisation has a matching *.repos file contains one repository per line. Alternatively, a comment starting
with #. A repository line has the following format:
<upstream>=<localRepository>:<branches>[:<tagPatterns>]
<upstream>is formatted like<organisation>/<repository>or<privateAccount>/<repository>.<localRepository>is formatted like<repository>.
An account or organisation is not required, because it's inferred from the repository this script runs in.<branches>is a comma separated list of branch names like<branch>,<branch>,<branch>.<tagPatterns>is optional: a comma separated list of tag names or regular expressions.
Example:
OSVVM/OSVVM=OSVVM:main,dev
OSVVM/AXI4=OSVVM-AXI4:main,dev
#OSVVM/AvalonST=OSVVM-AvalonST:main
Which branches and tags of each fork are synchronized is in the *.repos files; repeating it here would only go out
of date.
- ghdl
ghdl⇐ ghdl/ghdl
- OSVVM
OSVVM-Libraries⇐ OSVVM/OSVVMLibrariesOSVVM-Scripts⇐ OSVVM/OSVVM-ScriptsOSVVM⇐ OSVVM/OSVVMOSVVM-Common⇐ OSVVM/OSVVM-CommonOSVVM-AvalonMM⇐ OSVVM/AvalonMM (disabled)OSVVM-AvalonST⇐ OSVVM/AvalonST (disabled)OSVVM-AXI4⇐ OSVVM/AXI4OSVVM-CoSim⇐ OSVVM/CoSimOSVVM-CoSimPCIe⇐ OSVVM/CoSimPCIeOSVVM-DPRAM⇐ OSVVM/DpRamOSVVM-Ethernet⇐ OSVVM/EthernetOSVVM-UART⇐ OSVVM/UARTOSVVM-Wishbone⇐ OSVVM/WishboneOSVVM-Documentation⇐ OSVVM/DocumentationOSVVM-SPI⇐ OSVVM/SPI_GuyEschemannOSVVM-VideoBus⇐ OSVVM/VideoBus_LouisAdriaens
- VHDL
PoC⇐ VHDL/PoC
- others
progit2⇐ progit/progit2MINGW-packages⇐ msys2/MINGW-packagesmicrowatt⇐ antonblanchard/microwattitertree⇐ BR1py/itertree
See pyTooling/SynchronizeForks for the action: its parameters, the configuration file format, what it reports as an error, and how branches and tags are synchronized.
This GitHub Action Example (source code) is licensed under MIT License.
SPDX-License-Identifier: MIT
