{"id":14985971,"url":"https://github.com/andreasaugustin/actions-template-sync","last_synced_at":"2025-05-15T18:08:41.438Z","repository":{"id":36977349,"uuid":"264810161","full_name":"AndreasAugustin/actions-template-sync","owner":"AndreasAugustin","description":":octocat: Github action for syncing other repositories (templates) with current repository. Any git provider like GitHub (enterprise), GitLab, Gittea,.. are supported for the source repository ","archived":false,"fork":false,"pushed_at":"2025-03-19T20:56:57.000Z","size":1267,"stargazers_count":256,"open_issues_count":10,"forks_count":42,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-24T23:29:56.734Z","etag":null,"topics":["action","actions","ci-cd","continuous-integration","gitea","github","github-action","github-actions","gitlab","repository","sync","syncronization","templates"],"latest_commit_sha":null,"homepage":"https://andreasaugustin.github.io/actions-template-sync/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AndreasAugustin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":".github/CODEOWNERS","security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["AndreasAugustin"],"ko_fi":"andreasaugustin"}},"created_at":"2020-05-18T02:58:46.000Z","updated_at":"2025-03-20T18:55:59.000Z","dependencies_parsed_at":"2023-12-19T16:09:43.443Z","dependency_job_id":"5a219451-74bd-420b-b2e3-a21a81a87437","html_url":"https://github.com/AndreasAugustin/actions-template-sync","commit_stats":{"total_commits":424,"total_committers":23,"mean_commits":"18.434782608695652","dds":0.7028301886792453,"last_synced_commit":"4346f0b3d2881ed185a778035a0a9e2258a38676"},"previous_names":[],"tags_count":89,"template":false,"template_full_name":"AndreasAugustin/template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasAugustin%2Factions-template-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasAugustin%2Factions-template-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasAugustin%2Factions-template-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasAugustin%2Factions-template-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AndreasAugustin","download_url":"https://codeload.github.com/AndreasAugustin/actions-template-sync/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246563116,"owners_count":20797437,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["action","actions","ci-cd","continuous-integration","gitea","github","github-action","github-actions","gitlab","repository","sync","syncronization","templates"],"created_at":"2024-09-24T14:12:03.850Z","updated_at":"2025-04-01T00:29:55.534Z","avatar_url":"https://github.com/AndreasAugustin.png","language":"Shell","readme":"# actions-template-sync\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-37-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\n [![actions-template-sync](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/actions_template_sync.yml/badge.svg)](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/actions_template_sync.yml)\n\n[![Lint](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/lint.yml/badge.svg)](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/lint.yml)\n\n[![shellcheck](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/shellcheck.yml/badge.svg)](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/shellcheck.yml)\n\n[![test](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/test.yml/badge.svg)](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/test.yml)\n\n[![test-hooks](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/test_hooks.yml/badge.svg)](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/test_hooks.yml)\n\n[![test-ssh](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/test_ssh.yml/badge.svg)](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/test_ssh.yml)\n\n[![test-ssh-gitlab](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/test_ssh_gitlab.yml/badge.svg)](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/test_ssh_gitlab.yml)\n\n[![push-docker](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/push_docker.yml/badge.svg)](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/push_docker.yml)\n\n[![gh-pages-mk-docs](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/gh_pages_mk_docs.yml/badge.svg)](https://github.com/AndreasAugustin/actions-template-sync/actions/workflows/gh_pages_mk_docs.yml)\n\n## abstract\n\nSynchronise git repositories in an automated manner. Different git providers like GitHub (enterprise), GitLab,.. are supported as the source provider.\nThis can help you e.g. for migration from another git provider to GitHub or if you want to mirror git repositories.\n\n### History\n\nIt is possible to create repositories within Github with\n[GitHub templates](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-template-repository).\nThis is a nice approach to have some boilerplate within your repository.\nOver time, the template repository will get some code changes.\nThe problem is that the already created repositories won't know about those changes.\nThis GitHub action will help you to keep track of the template changes.\nThe initial author of this repository faced that issue several times and decided to write a GitHub action to face that issue.\nBecause of the nice community, several feature requests helped to go on with the development of the action. Now several other features are supported.\n\n## Features\n\nThis action is creating a pull request with the latest changes within the target repo whenever it runs with following exceptions\n\n* there is already an open PR created with the latest changes of the source repository.\n  * if there are new changes and a PR is already open, a new PR will be created (option to clean up older PRs)\n* related new changes are ignored within the `.templatesyncignore` file\n* the source repository is fully included within the target repository\n\n```mermaid\nflowchart LR\n    github_source(\"fa:fa-github \u003cb\u003eGitHub\u003c/b\u003e source repository \u003cb\u003e[private|public]\u003c/b\u003e\")\n    gitlab_source(\"fa:fa-gitlab \u003cb\u003eGitLab\u003c/b\u003e source repository \u003cb\u003e[private|public]\u003c/b\u003e\")\n    any_source(\"fa:fa-git \u003cb\u003eAny\u003c/b\u003e git provider \u003cb\u003e[private|public]\u003c/b\u003e\")\n    github_target{{\"fa:fa-github \u003cb\u003eGitHub\u003c/b\u003e target repository \u003cb\u003e[private|public]\u003c/b\u003e\"}}\n    github_source --\u003e |\"\u003cb\u003essh | PAT | github app\u003c/b\u003e\"| github_target\n    gitlab_source --\u003e |\"\u003cb\u003essh\u003c/b\u003e\"| github_target\n    any_source --\u003e |\"\u003cb\u003essh\u003c/b\u003e\"| github_target\n```\n\n* Sync other public or private repository (e.g. template repositories) with the current repository\n* Ignore files and folders from syncing using a `.templatesyncignore` file\n* many configuration options\n* different lifecycle hooks are supported. This opens the possibility to inject custom code into the workflow with a yaml definition file.\n* different git provider like GitLab, Gittea,.. as source are supported (with ssh).\n  See [.github/workflows/test_ssh_gitlab.yml](.github/workflows/test_ssh_gitlab.yml) for an example.\n* It is not necessarily needed that source and target repository have the same base history.\n  Because of that reason, it is possible to merge 2 totally different repositories with the help of the action.\n\n## Usage\n\nUsage changes depending on whether the template repository is public or private, regardless of the visibility of the current repository.\n\n### Public template repository\n\nAdd this configuration to a GitHub action in the current repository:\n\n```yaml\n# File: .github/workflows/template-sync.yml\n\non:\n  # cronjob trigger\n  schedule:\n  - cron: \"0 0 1 * *\"\n  # manual trigger\n  workflow_dispatch:\njobs:\n  repo-sync:\n    runs-on: ubuntu-latest\n    # https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs\n    permissions:\n      contents: write\n      pull-requests: write\n\n    steps:\n      # To use this repository's private action, you must check out the repository\n      - name: Checkout\n        uses: actions/checkout@v4\n        # https://github.com/actions/checkout#usage\n        # uncomment if you use submodules within the repository\n        # with:\n        #   submodules: true\n\n      - name: actions-template-sync\n        uses: AndreasAugustin/actions-template-sync@v2\n        with:\n          source_repo_path: \u003cowner/repo\u003e\n          upstream_branch: \u003ctarget_branch\u003e # defaults to main\n          pr_labels: \u003clabel1\u003e,\u003clabel2\u003e[,...] # defaults to template_sync\n```\n\nYou will receive a pull request within your repository if there are some changes available in the template.\n\n### Private template repository\n\nIf your current repository was created from a private template, there are several possibilities.\n\n#### 1. Using a GitHub app\n\nYou can create and use a [GitHub App][github-app] to handle access to the private template repository.\nTo generate a token for your app you can use a separate action like [tibdex/github-app-token][github-app-token].\nYou have to set up the checkout step with the generated token as well.\n\n```yaml\njobs:\n  repo-sync:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Generate token to read from source repo # see: https://github.com/tibdex/github-app-token\n        id: generate_token\n        # https://github.com/tibdex/github-app-token\n        uses: tibdex/github-app-token@v2\n        with:\n          app_id: ${{ secrets.APP_ID }}\n          private_key: ${{ secrets.PRIVATE_KEY }}\n\n      - name: Checkout\n        # https://github.com/actions/checkout#usage\n        uses: actions/checkout@v4\n        with:\n          # submodules: true\n          token: ${{ steps.generate_token.outputs.token }}\n\n      - name: actions-template-sync\n        uses: AndreasAugustin/actions-template-sync@v2\n        with:\n          source_gh_token: ${{ steps.generate_token.outputs.token }}\n          source_repo_path: \u003cowner/repo\u003e\n          upstream_branch: \u003ctarget_branch\u003e # defaults to main\n          pr_labels: \u003clabel1\u003e,\u003clabel2\u003e[,...] # defaults to template_sync\n```\n\n#### 2. Using SSH\n\nYou have various options to use ssh keys with GitHub.\nAn example is [deployment keys][deployment-keys]. For our use case, write permissions are not needed.\nWithin the current repository, where the GitHub action is enabled, add a secret\n(e.q. `SOURCE_REPO_SSH_PRIVATE_KEY`) with the content of your private SSH key.\nMake sure that the read permissions of that secret fulfill your use case.\nSet the optional `source_repo_ssh_private_key` input parameter.\nIt is also possible to use a different git provider, e.g. GitLab.\n\n```yaml\njobs:\n  repo-sync:\n    runs-on: ubuntu-latest\n    # https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs\n    permissions:\n      contents: write\n      pull-requests: write\n\n    steps:\n      # To use this repository's private action, you must check out the repository\n      - name: Checkout\n        # https://github.com/actions/checkout#usage\n        uses: actions/checkout@v4\n        with:\n          # submodules: true\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: actions-template-sync\n        uses: AndreasAugustin/actions-template-sync@v2\n        with:\n          source_gh_token: ${{ secrets.GITHUB_TOKEN }}\n          source_repo_path: ${{ secrets.SOURCE_REPO_PATH }} # \u003cowner/repo\u003e, should be within secrets\n          upstream_branch: ${{ secrets.TARGET_BRANCH }} #\u003ctarget_branch\u003e # defaults to main\n          pr_labels: \u003clabel1\u003e,\u003clabel2\u003e[,...] # defaults to template_sync\n          source_repo_ssh_private_key: ${{ secrets.SOURCE_REPO_SSH_PRIVATE_KEY }} # contains the private ssh key of the private repository\n```\n\n#### 3. Using a PAT\n\n:warning: when the source repository is private using PATs, also the target repository must be private.\nElse it won't work.\n\n[Personal access token][github-pat] is an alternative to using passwords for authentication to GitHub.\nYou can add a kind of password to your GitHub account. The PAT needs a scope.\nWe need different scopes for the source and target repo.\n\n##### a. Source repo\n\nThe workflow needs read access to the source repo.\n\nYou need to set the scopes to read the source repo.\n\n###### Fine grained source repo\n\n* `contents` -\u003e read\n* `metadata` -\u003e read\n\n###### Classic source repo\n\n* `repo` -\u003e all\n* `read:org`\n\n![pat-scopes](docs/assets/pat_needed_scopes_source_repo.png)\n\n###### General source repo\n\nFurthermore, you need to set the access within the source repository to allow GitHub actions within the target repository.\nAs mentioned before (you can see the note in the image) you need to set the target repository to private.\nsettings -\u003e actions -\u003e general.\n\n![pat-source-repo-access](docs/assets/pat_needed_access_source_repo.png)\n\n##### b. Target repo\n\n###### Fine grained target repo\n\n* `contents` -\u003e write\n* `metadata` -\u003e read\n* `pull requests` -\u003e write\n\nIf you are automatically adding reviewers you also need\n\n* `organisation:members` read permissions to the PAT token.\n\n![pat-scopes-fine-grained](docs/assets/pat_fine_grained_needed_scopes.png)\n\n###### Classic target repo\n\nWhen the action detects any changes, it will create a new branch and will push the updates to this branch.\nWhen no files are changed in the `.github/workflows` directory, this works well with the default `${{ github.token }}` token.\nThis token does however not have `workflow` scope and can therefore not make any changes to these files.\nFor this purpose a token must be created with the following scope as depicted in the figure below.\n\n* `workflow` -\u003e will also enable `repo`\n* `admin:read`\n ![pat-scopes](docs/assets/pat_needed_scopes_target_repo.png)\n\nexample workflow definition\n\n```yml\nname: actions-template-sync\n\non:\n  # cronjob trigger At 00:00 on day-of-month 1. https://crontab.guru/every-month\n  schedule:\n  - cron: \"0 0 1 * *\"\n  # manual trigger\n  workflow_dispatch:\n\njobs:\n  test-implementation-job:\n\n    runs-on: ubuntu-latest\n\n    steps:\n      # To use this repository's private action, you must check out the repository\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          # submodules: true\n          token: ${{ secrets.CUSTOM_GITHUB_PAT }}\n\n      - name: Test action step PAT\n        uses: AndreasAugustin/actions-template-sync@v2\n        with:\n          source_gh_token: ${{ secrets.CUSTOM_GITHUB_PAT }}\n          source_repo_path: ${{ secrets.SOURCE_REPO_PATH }} # \u003cowner/repo\u003e, should be within secrets\n```\n\n### Action Inputs\n\n| Variable                    | Description                                                                                                   | Required | Default                                                           |\n|-----------------------------|---------------------------------------------------------------------------------------------------------------|----------|-----------------------------------------------------------------------|\n| github_token                | :warning: [Deprecated] please use `source_gh_token` instead to have a declarative name. Token for the repo. Can be passed in using `${{ secrets.GITHUB_TOKEN }}`                                     | `true`   |   `${{ github.token }}`                                                                    |\n| source_gh_token | `[optional]` used for the source github repo token. Can be passed in using `${{ secrets.GITHUB_TOKEN }}` | `false` | `${{ github.token }}` |\n| target_gh_token | `[optional]` used for the source github repo token. Can be passed in using `${{ secrets.GITHUB_TOKEN }}` | `false` | `${{ github.token }}` |\n| source_repo_path            | Repository path of the template                                                                               | `true`   |                                                                       |\n| upstream_branch             | The target branch                                                                                             | `false`  | The remote's default (usually `main`)                                                |\n| source_repo_ssh_private_key | `[optional]` private ssh key for the source repository. [see](#private-template-repository)                   | `false`  |                                                                       |\n| pr_branch_name_prefix       | `[optional]` the prefix of branches created by this action                                                    | `false`  | `chore/template_sync`                                                 |\n| pr_title                    | `[optional]` the title of PRs opened by this action. Must be already created.                                 | `false`  | `upstream merge template repository`                                  |\n| pr_body                     | `[optional]` the body of PRs opened by this action. | `false` | `Merge ${SOURCE_REPO} ${TEMPLATE_GIT_HASH}` |\n| pr_labels                   | `[optional]` comma separated list. [pull request labels][pr-labels].                                          | `false`  | `sync_template`                                                       |\n| pr_reviewers                | `[optional]` comma separated list of pull request reviewers.                                                  | `false`  |                                                                       |\n| pr_commit_msg               | `[optional]` commit message in the created pull request                                                       | `false`  | `chore(template): merge template changes :up:`                        |\n| hostname                    | `[optional]` the hostname of the repository                                                                   | `false`  | `github.com`                                                          |\n| is_git_lfs | `[optional]` set to `true` if you want to enalbe git lfs | `false` | `false` |\n| is_dry_run                  | `[optional]` set to `true` if you do not want to push the changes and not want to create a PR                 | `false`  |                                                                       |\n| is_allow_hooks              | `[optional]` set to `true` if you want to enable lifecycle hooks. Use this with caution!                      | `false`  | `false`                                                               |\n| hooks | `[optional]` please check the lifecycle hooks section below | `false` | |\n| is_force_push_pr            | `[optional]` set to `true` if you want to force push and pr update. Needs further permissions (see below) | `false`  | `false`                                                               |\n| is_pr_cleanup               | `[optional]` set to `true` if you want to cleanup older PRs targeting the same branch. Use this with caution! | `false`  | `false`                                                               |\n| is_keep_branch_on_pr_cleanup | `[optional]` set to `true` if you want to keep the branch when pr is cleanup. Only makes sense together with `is_pr_cleanup` | `false` | `false` |\n| is_not_source_github        | `[optional]` set to `true` if the source git provider is not GitHub                                           | `false`  | `false`                                                               |\n| is_force_deletion | `[optional]` set to `true` if you want to force delete files which are deleted within the source repository even if they contain changes. You need to also adjust `git_remote_pull_params` (see below for details) | `false` | `false` |\n| git_user_name               | `[optional]` set the committer git user.name                                                                  | `false`  | `${GITHUB_ACTOR}`                                                     |\n| git_user_email              | `[optional]` set the committer git user.email                                                                 | `false`  | `github-action@actions-template-sync.noreply.${SOURCE_REPO_HOSTNAME}` |\n| git_remote_pull_params      | `[optional]` set remote pull parameters                                                                       | `false`  | `--allow-unrelated-histories --squash --strategy=recursive -X theirs` |\n| gpg_private_key | `[optional]` set if you want to sign commits | `false` | |\n| gpg_passphrase | `[optional]` set if your optional gpg private key has a passphrase | `false` | |\n| steps | `[optional] add the steps you want to execute within the action` | `false` | all steps will be executed |\n| template_sync_ignore_file_path | `[optional] set the path to the ignore file.` | false |`.templatesyncignore` |\n| is_with_tags | `[optional]` set to `true` if tags should be synced | `false` | `false` |\n\n### Action Outputs\n\n\u003e Properties that are available after the action executed.\n\n| output | description |\n| ------ | ----------- |\n| pr_branch | The name of the branch used for the pull request |\n| template_git_hash | The template source repository git hash |\n\n**Remarks** Please consider following edge cases\n\n* **pr_branch**\n  * If PR branch already exists (e.g. after a 2nd run) the action won't update the branch but will still output the branch name\n  * If the remote repository already contains the source repository changes the action will exit and the output variable will be undefined\n  * If there are no changes the action will exit and the output variable will be undefined\n\n### Change the target branch\n\nPer default the action is using the default branch as the target. To change this behaviour just add it to the checkout action\n\n```yaml\n  - name: Checkout\n    uses: actions/checkout@v4\n    with:\n      ref: \u003ctarget_branch\u003e  # defaults to the default branch\n```\n\n### Docker\n\nThere are docker images available. Please checkout [How to use docker](docs/DOCKER.md) for details.\n\n* [dockerhub andyaugustin/actions-template-sync][dockerhub-repo]\n* [github andreasaugustin/actions-template-sync][github-repo]\n\n### Example\n\nThis repo uses this [template][template] and this action from the [marketplace][marketplace].\nSee the definition [here][self-usage].\n\nIf you look for a more detailed guide you can have a look at\n\n* [Dev.to][devto-example]\n* [GitHub][github-example]\n* :heart: [nice blog post][dotdc-blog]\n\n### Trigger\n\nYou can use all [triggers][action-triggers] which are supported for GitHub actions\n\n## Ignore Files\n\nCreate a `.templatesyncignore` file. Just like writing a `.gitignore` file, follow the [glob pattern][glob-pattern]\nin defining the files and folders that should be excluded from syncing with the template repository.\n\nIt can also be stored inside `.github` folder.\n\nThe `template_sync_ignore_file_path` parameter allows you to specify a path to an ignore file. This variable defaults to `.templatesyncignore`.\nChanging this allows you to support template sync with more than one repository using different ignore files.\n\nThe action will look for the path specified within `.` or `.github/`\n\n_Note: It is not possible to sync also the `.templatesyncignore` itself. Any changes from the template repository will be restored automatically._\n\n**Remark** reading the [gitglossary][git-glossary] (_pathspec_ section) you see a slight difference to the `.gitignore` file\nwhen you like to disable files you need to use `:!`.\nE.g. when you like to disable the sync for all files with exceptions, you need to do smth like\n\n```txt\n:!newfile-1.txt\n*\n```\n\n## Force Push and PR\n\nIf you set the input `is_force_push_pr` to `true` you are able to react to e.g. metadata changes within the workflow definition file.\nPlease note that you need to add permissions for `repository-projects: read`. Compare the needed scope with [gh pr edit][github-gh-cli-pr-edit]\n\n```yaml\n  permissions:\n    contents: write\n    pull-requests: write\n    repository-projects: read\n```\n\n## Sign commits\n\nIt is recommended to [sign your commits][devto-sign-commits]. This action is able to sign commits.\n\nFirst, [generate a GPG key][github-create-gpg-key] and export the GPG private key as an ASCII armored version to your clipboard:\n\n```bash\n# macOS\ngpg --armor --export-secret-key jon@doe.example | pbcopy\n\n# Ubuntu (assuming GNU base64)\ngpg --armor --export-secret-key jon@doe.example -w0 | xclip\n\n# Arch\ngpg --armor --export-secret-key jon@doe.example | xclip -selection clipboard -i\n\n# FreeBSD (assuming BSD base64)\ngpg --armor --export-secret-key jon@doe.example | xclip\n```\n\n:warning: the gpg username and email must match the `git_user_name` and `git_user_email` parameters.\nPaste your clipboard as a [secret][github-create-secret] named `GPG_PRIVATE_KEY` for example.\nIf your key has a password, create another secret named `GPG_PASSPHRASE`.\n\n```yaml\n# File: .github/workflows/template-sync.yml\n\non:\n  # cronjob trigger\n  schedule:\n  - cron: \"0 0 1 * *\"\n  # manual trigger\n  workflow_dispatch:\njobs:\n  repo-sync:\n    runs-on: ubuntu-latest\n    # https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs\n    permissions:\n      contents: write\n      pull-requests: write\n\n    steps:\n      # To use this repository's private action, you must check out the repository\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: actions-template-sync\n        uses: AndreasAugustin/actions-template-sync@v2\n        with:\n          source_gh_token: ${{ secrets.GITHUB_TOKEN }}\n          source_repo_path: \u003cowner/repo\u003e\n          git_user_name: # add the gpg username\n          git_user_email: # add the gpg email\n          gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}\n          # uncomment if your key has a passphrase\n          # gpg_passphrase: ${{ secrets.GPG_PASSPHRASE }}\n\n```\n\n## Lifecycle actions\n\nThe action has different phases which are executed in the following order\n\n* **preparation** prepare and configure git related things\n  * init git\n  * auth related (ssh or github auth)\n  * [optional] gpg setup\n* **prechecks** run some prechecks\n  * skipped if `is_force_push_pr` parameter is set to `true`\n  * check if the sync branch is already existing in target repository\n  * check if new changes of the source repository are already within history\n* **pull** pull the changes from the remote repository into the action runtime\n* **commit** commit the changes within the action runtime\n* **push**\n  * if `is_force_push_pr` is set to true then a force push will be executed\n* **pr**\n  * eventual create registered labels (:ninja: emojis are supported)\n  * create a new PR\n  * if `is_force_push_pr` is set to true then the PR will be created or edited\n  * [optional] **cleanup** eventual cleanup older PRs of the action\n* set **github action outputs**\n\nIf `is_dry_run` parameter is set to true then all stages modifying the github state are not run (e.g. push, cleanup and pr).\n\nIt is possible to run a subset of the mentioned lifecycle actions.\n**preparation** and **github action outputs** will be run every time.\n\n:warning: Advanced feature. Use with care (possibly set `is_dry_run: true` configuration parameter for testing purposes)\n\ne.g.\n\n```yaml\n# File: .github/workflows/test_steps.yml\n\non:\n  # cronjob trigger\n  schedule:\n  - cron: \"0 0 1 * *\"\n  # manual trigger\n  workflow_dispatch:\njobs:\n  repo-sync:\n    runs-on: ubuntu-latest\n    # https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs\n    permissions:\n      contents: write\n      pull-requests: write\n\n    steps:\n      # To use this repository's private action, you must check out the repository\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: actions-template-sync first steps\n        uses: AndreasAugustin/actions-template-sync@v2\n        with:\n          source_repo_path: \u003cowner/repo\u003e\n          steps: \"prechecks,pull\"  # order matters\n\n      - name: in between step\n        run: |\n          echo \"I can do whatever I want\"\n          git status\n\n      - name: actions-template-sync next steps\n        uses: AndreasAugustin/actions-template-sync@v2\n        with:\n          source_repo_path: \u003cowner/repo\u003e\n          steps: \"commit,push,pr\"  # order matters\n\n```\n\n## Lifecycle hooks\n\nDifferent lifecycle hooks are supported. You need to enable the functionality with the option `is_allow_hooks` and set it to `true`\n:warning: use this functionality with caution. You can use one of the available docker images to test it out. **With great power comes great responsibility**.\n\nIn addition, you need either a configuration file with the name `templatesync.yml` within the root of the target repository\nor you set the hooks input parameter within the action definition with a related yaml string\n\nThe following hooks are supported (please check [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for a better understanding of the lifecycles).\n\n* `prepull` is executed before the code is pulled from the source repository\n* `precommit` is executed before the code is commited\n* `prepush` is executed before the push is executed, right after the commit\n* `precleanup` is executed before older PRs targeting the same branch are closed\n* `prepr` is executed before the PR is done\n\n**Remark** If you need to install aditional tools just install them in an additional step upfront the action invokation.\nIf using the docker image the underlying OS is defined by an Alpine container.\n\n### Example for the hooks input parameter\n\n```yml\n- name: Test action step\n  uses: AndreasAugustin/actions-template-sync@v2\n  env:\n    MY_VAR: \"foo\"  # possible to define envrionment variables\n  with:\n    source_repo_path: AndreasAugustin/template.git\n    upstream_branch: main\n    is_dry_run: true\n    is_allow_hooks: true\n    hooks: \u003e\n      prepull:\n        commands:\n          - echo 'hi, we are within the prepull phase'\n          - echo 'maybe you want to do adjustments on the local code'\n```\n\n### Schema and example for the `templatesync.yml`\n\n**Remark** It is possible to use environment variables within the github action definition usable within the command configuration, e.g.\n\n```yml\n- name: Test action step\n  uses: AndreasAugustin/actions-template-sync@v2\n  with:\n    source_repo_path: AndreasAugustin/template.git\n    upstream_branch: main\n    is_dry_run: true\n    is_allow_hooks: true\n```\n\nPlease not the double quotes within the following `prepull echo` command\n\n```yml\nhooks:\n  prepull:\n    commands:\n      - echo \"hi, we are within the prepull phase ${MY_VAR}\"\n      - echo 'maybe you want to do adjustments on the local code'\n  precommit:\n    commands:\n      - echo 'hi, we are within the precommit phase'\n      - echo 'maybe you want to add further changes before the code is committed'\n  prepush:\n    commands:\n      - echo 'hi, we are within the prepush phase'\n      - echo 'maybe you want to add further changes and commits'\n  precleanup:\n    commands:\n      - echo 'hi, we are within the precleanup phase'\n      - echo 'maybe you want to interact with older PRs before they are closed'\n  prepr:\n    commands:\n      - echo 'hi, we are within the prepr phase'\n      - echo 'maybe you want to change the code a bit and do another push before creating the pr'\n```\n\n## Labels creation\n\nBy default, generated PRs will be labeled with the `template_sync` label.\nIf that label doesn't exist in your repository, it will be created automatically unless you specify your own existing labels.\nAssociating a label with the generated PRs helps keeping track of them and allows for features like automatic PR cleanup.\n\n## Pull request cleanup\n\nDepending on your way of working, you may end up with multiple pull requests related to template syncing pointing to the same branch.\nIf you want to avoid this situation, you can instruct this action to clean up older PRs (search based on labels defined with the `pr_labels` config parameter).\n\n:warning: this feature will close all pull requests with labels configured with `pr_labels` config parameter.\n\n## Force deletion\n\nThis feature will force delete files if those are deelted within the source repository.\n\n:warning: it is highly related to the `git_remote_pull_params` config parameter and won't work with the default.\nYou need to change the default one e.g. to `git_remote_pull_params: --allow-unrelated-histories --strategy=recursive --no-edit`.\n\n## GHES and custom runners\n\nSome notes if you use GitHub Enterprise Server (GHES) and/or custom runners.\nThe action script is based on bash. That means your runner must be able to run bash scripts.\nFurthermore you need to have the following command line tools installed:\n\n* ssh\n* [GitHub cli][gh-cli]\n* git\n* optional (dependent the features you are using)\n  * [git lfs][git-lfs] if you are using the lfs functionality\n  * [yq][yq] if you are using the hook functionality\n  * gpg if you are using the git signing functionality\n\nFurthermore most likely you have a custom domain name. Therefore you should configure the `hostname` GitHub action parameter.\n\n### Remark\n\n:whale: There is also a docker image available which has all needed tools installed. This is helpful e.g. if you are not able to use a remote action.\nThe idea is to use the [docker action][action-docker]\n\n* [GitHub registry][github-repo]\n* [Dockerhub registry][dockerhub-repo]\n\n## Troubleshooting\n\n* The error message `refusing to allow a GitHub App to create or update workflow '.github/workflows/\u003cscript-name\u003e.yml' without 'workflows' permission)`\nis indicating that the PAT in the `target_gh_token` does not have the correct permissions.\nThis happens because the template repository is trying to overwrite some files inside `.github/workflows/`.\n\n  Currently `GITHUB_TOKEN` can't be given `workflow` permission.\n  You can grant our workflow with `workflow` permission using a PAT following the steps below:\n\n  1. [Create a PAT][github-create-pat] with these repository permissions granted: `workflow`.\n\n  2. Copy the generated token and [create a new secret for your target repository][github-create-secret].\n\n  3. Configure the `actions-template-sync` step to use the freshly generated token in `target_gh_token` like this:\n\n     ```yaml\n     # File: .github/workflows/template-sync.yml\n\n     on:\n       # cronjob trigger\n       schedule:\n       - cron: \"0 0 1 * *\"\n       # manual trigger\n       workflow_dispatch:\n     jobs:\n       repo-sync:\n         runs-on: ubuntu-latest\n         # https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs\n         permissions:\n           contents: write\n           pull-requests: write\n\n         steps:\n           # To use this repository's private action, you must check out the repository\n           - name: Checkout\n             uses: actions/checkout@v4\n             with:\n               # submodules: true\n\n           - name: actions-template-sync\n             uses: AndreasAugustin/actions-template-sync@v2\n             with:\n               source_gh_token: ${{ secrets.GITHUB_TOKEN }}\n               target_gh_token: ${{ secrets.\u003csecret_name\u003e }}\n               source_repo_path: \u003cowner/repo\u003e\n               upstream_branch: \u003ctarget_branch\u003e # defaults to main\n               pr_labels: \u003clabel1\u003e,\u003clabel2\u003e[,...] # optional, no default\n     ```\n\n* pull request create failed: GraphQL: GitHub Actions is not permitted to create or approve pull requests (createPullRequest)\n\n  Open your project `Settings \u003e Actions \u003e General` and select the checkbox `Allow GitHub Actions to create and approve pull requests`\nunder the `Workflow permissions` section.\n\n## Release update notes\n\n* `v2`\n  * `git lfs` is no default anymore. Enable with `is_git_lfs` parameter.\n  * infrastructure change: now using [composite action][action-composite] instead of [docker action][action-docker]\n    to be more flexible to combine more actions (file system permissions).\n  * local `git config` now instead of global `git config --global` in respect to be more flexible in chaining actions.\n* :warning: starting with version `v1` (`v1.0.0`) the `upstream_branch` variable default is not `main` anymore. It is now set to the remote default branch.\n* starting with version v0.5.2-draft the `templateversionrc` file is not needed anymore. You can delete that file from the target repositories.\n\n## Debug\n\nYou must create a secret named `ACTIONS_STEP_DEBUG` with the value `true` to see the debug messages set by this command in the log.\nFor more information, see \"[Enabling debug logging.][enabling-debug-logging]\"\n\n## Comparison with other tools\n\nThere are other great tools available within GitHub. Here you can find a comparison.\n\n| **feature** | **actions-template-sync** |[github-sync][other-repo-sync]| [git-repo-sync][other-git-repo-sync] | [action-template-repository-sync][other-action-template-repository-sync] |\n| ----------- | ------------------------- | -------------------------- | ------------------------------------ | --------------------------------- |\n| GitHub action | :heavy_check_mark: | :heavy_check_mark: | :x: | :heavy_check_mark: |\n| hooks | :heavy_check_mark: | :x: | :x: | :x: |\n| available docker image | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: |\n| sync between private and public repo | :heavy_check_mark: `PAT,ssh,Github app` | :heavy_check_mark: `PAT,ssh` |:x: local repos | :heavy_check_mark: `PAT` |\n| sync between 2 private repos | :heavy_check_mark: `PAT,ssh,Github app` | :heavy_check_mark: `PAT,ssh` | :x: local repos | :heavy_check_mark: `PAT` |\n| sync between 2 public repos | :heavy_check_mark: | :heavy_check_mark: | :x: local repos | :heavy_check_mark: |\n| two way sync | :x: | :heavy_check_mark: | :x: | :x: |\n| Sync from a third-party repo to a Github repo | :heavy_check_mark: | :heavy_check_mark: | :x: local repos | :x: |\n| dry run | :heavy_check_mark: | :x: | :x: | :heavy_check_mark:  |\n| ignore files | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: |\n| creates a PR | :heavy_check_mark: | :heavy_check_mark: | :x: | :heavy_check_mark: |\n| sign commits | :heavy_check_mark: | :x: | :x: | :x: |\n| docker images available | :heavy_check_mark: | :x: | :x: | :x: |\n| remarks | The action is placed within the target repositories | The action is placed within the target repositories | CLI meant for local use | The action will be based within the base repository with a list of dependent repositories |\n\n## DEV\n\nThe development environment targets are located in the [Makefile](Makefile)\n\n```bash\nmake help\n```\n\n:ninja: contributiong of any kind are welcome. Please checkout the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor some architectural notes please have a look at the [docs](./docs/README.md)\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/AndreasAugustin\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/8027933?v=4?s=100\" width=\"100px;\" alt=\"andy Augustin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eandy Augustin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=AndreasAugustin\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=AndreasAugustin\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/pulls?q=is%3Apr+reviewed-by%3AAndreasAugustin\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#security-AndreasAugustin\" title=\"Security\"\u003e🛡️\u003c/a\u003e \u003ca href=\"#ideas-AndreasAugustin\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#question-AndreasAugustin\" title=\"Answering Questions\"\u003e💬\u003c/a\u003e \u003ca href=\"#example-AndreasAugustin\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"#content-AndreasAugustin\" title=\"Content\"\u003e🖋\u003c/a\u003e \u003ca href=\"#blog-AndreasAugustin\" title=\"Blogposts\"\u003e📝\u003c/a\u003e \u003ca href=\"#maintenance-AndreasAugustin\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#infra-AndreasAugustin\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"#platform-AndreasAugustin\" title=\"Packaging/porting to new platform\"\u003e📦\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=AndreasAugustin\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.iit.it/people/ugo-pattacini\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3738070?v=4?s=100\" width=\"100px;\" alt=\"Ugo Pattacini\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eUgo Pattacini\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=pattacini\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/jg-rivera\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/27613092?v=4?s=100\" width=\"100px;\" alt=\"Jose Gabrielle Rivera\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJose Gabrielle Rivera\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=jg-rivera\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://pdrittenhouse.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1556730?v=4?s=100\" width=\"100px;\" alt=\"P.D. Rittenhouse\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eP.D. Rittenhouse\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-pdrittenhouse\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Daniel-Boll\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/43689101?v=4?s=100\" width=\"100px;\" alt=\"Daniel Boll\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDaniel Boll\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3ADaniel-Boll\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/albertschwarzkopf\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/35684914?v=4?s=100\" width=\"100px;\" alt=\"albertschwarzkopf\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ealbertschwarzkopf\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-albertschwarzkopf\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://akulpillai.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/32793567?v=4?s=100\" width=\"100px;\" alt=\"Akul Pillai\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAkul Pillai\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#security-akulpillai\" title=\"Security\"\u003e🛡️\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/steveizzle\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/45331237?v=4?s=100\" width=\"100px;\" alt=\"Stefan Riembauer\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eStefan Riembauer\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-steveizzle\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://fabriziocacicia.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7525888?v=4?s=100\" width=\"100px;\" alt=\"Fabrizio Cacicia\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eFabrizio Cacicia\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#security-fabriziocacicia\" title=\"Security\"\u003e🛡️\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3Afabriziocacicia\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/JTunis\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/11543636?v=4?s=100\" width=\"100px;\" alt=\"Justin Tunis\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJustin Tunis\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-JTunis\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=JTunis\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3AJTunis\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://mikematos84.github.io\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4093433?v=4?s=100\" width=\"100px;\" alt=\"Michael Matos\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichael Matos\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3Amikematos84\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/fatmcgav-depop\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/109519102?v=4?s=100\" width=\"100px;\" alt=\"Gavin Williams\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGavin Williams\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-fatmcgav-depop\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/msiebeneicher\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5821183?v=4?s=100\" width=\"100px;\" alt=\"Marc Siebeneicher\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarc Siebeneicher\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-msiebeneicher\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=msiebeneicher\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3Amsiebeneicher\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=msiebeneicher\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/LuisHenri\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/44511825?v=4?s=100\" width=\"100px;\" alt=\"Luís Henrique A. Schünemann\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLuís Henrique A. Schünemann\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-LuisHenri\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=LuisHenri\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=LuisHenri\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/george-gca\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/31376482?v=4?s=100\" width=\"100px;\" alt=\"George\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGeorge\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#question-george-gca\" title=\"Answering Questions\"\u003e💬\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=george-gca\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#ideas-george-gca\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.linkedin.com/in/pedrorrivero/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/52980156?v=4?s=100\" width=\"100px;\" alt=\"Pedro Rivero\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePedro Rivero\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-pedrorrivero\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ebronson68\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/111298136?v=4?s=100\" width=\"100px;\" alt=\"Eleanor Bronson\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eEleanor Bronson\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-ebronson68\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/marvin-belonio\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/88089002?v=4?s=100\" width=\"100px;\" alt=\"Marvin Osswald\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarvin Osswald\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=marvin-belonio\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/dotdc\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/12827900?v=4?s=100\" width=\"100px;\" alt=\"David Calvert\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDavid Calvert\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=dotdc\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3Adotdc\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=dotdc\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#maintenance-dotdc\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#blog-dotdc\" title=\"Blogposts\"\u003e📝\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://blog.airey.be\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7644094?v=4?s=100\" width=\"100px;\" alt=\"Andy Airey\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAndy Airey\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3Aaairey\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/pulls?q=is%3Apr+reviewed-by%3Aaairey\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://fs02.github.io/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3049307?v=4?s=100\" width=\"100px;\" alt=\"Surya Asriadie\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSurya Asriadie\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3AFs02\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/jellllly420\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/64725601?v=4?s=100\" width=\"100px;\" alt=\"jellllly420\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ejellllly420\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-jellllly420\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#question-jellllly420\" title=\"Answering Questions\"\u003e💬\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=jellllly420\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.xontab.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4987684?v=4?s=100\" width=\"100px;\" alt=\"Shaun Tabone\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eShaun Tabone\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=xontab\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/kevin-aude\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/98819045?v=4?s=100\" width=\"100px;\" alt=\"Kevin AUDE\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKevin AUDE\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-kevin-aude\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=kevin-aude\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Jnig\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3729585?v=4?s=100\" width=\"100px;\" alt=\"Jakob\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJakob\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/pulls?q=is%3Apr+reviewed-by%3Ajnig\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://kevin.deldycke.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/159718?v=4?s=100\" width=\"100px;\" alt=\"Kevin Deldycke\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKevin Deldycke\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3Akdeldycke\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#ideas-kdeldycke\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=kdeldycke\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/JessicaS11\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/11756442?v=4?s=100\" width=\"100px;\" alt=\"Jessica Scheick\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJessica Scheick\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3AJessicaS11\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/gasbi\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/10176387?v=4?s=100\" width=\"100px;\" alt=\"Gaspar Melsion\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGaspar Melsion\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-gasbi\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/kanno41\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2818651?v=4?s=100\" width=\"100px;\" alt=\"Ken Harding\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKen Harding\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=kanno41\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3Akanno41\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://jakobhavtorn.github.io/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/10236734?v=4?s=100\" width=\"100px;\" alt=\"Jakob Drachmann Havtorn\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJakob Drachmann Havtorn\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-JakobHavtorn\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/brian6932\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/18603393?v=4?s=100\" width=\"100px;\" alt=\"Brian\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBrian\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=brian6932\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/MuriloChianfa\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/60560085?v=4?s=100\" width=\"100px;\" alt=\"MuriloChianfa\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMuriloChianfa\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=MuriloChianfa\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/davidsnyder\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/229108?v=4?s=100\" width=\"100px;\" alt=\"David Snyder\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDavid Snyder\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#research-davidsnyder\" title=\"Research\"\u003e🔬\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/technicallyjoe\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7877957?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Østrup\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJonathan Østrup\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-TechnicallyJoe\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=TechnicallyJoe\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://natwelch.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/20201?v=4?s=100\" width=\"100px;\" alt=\"Nat Welch\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNat Welch\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3Aicco\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=icco\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/PepijnB\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/24453103?v=4?s=100\" width=\"100px;\" alt=\"Pepijn Boer\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePepijn Boer\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/issues?q=author%3APepijnB\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=PepijnB\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/alexvanderberkel\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/862899?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlex\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=alexvanderberkel\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-alexvanderberkel\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/pulls?q=is%3Apr+reviewed-by%3Aalexvanderberkel\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"https://github.com/AndreasAugustin/actions-template-sync/commits?author=alexvanderberkel\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors)\nspecification. Contributions of any kind are welcome!\n\n[enabling-debug-logging]: https://docs.github.com/en/actions/managing-workflow-runs/enabling-debug-logging\n[deployment-keys]: https://docs.github.com/en/developers/overview/managing-deploy-keys#deploy-keys\n[action-triggers]: https://docs.github.com/en/actions/reference/events-that-trigger-workflows\n[action-composite]: https://docs.github.com/en/actions/creating-actions/creating-a-composite-action\n[action-docker]: https://docs.github.com/en/actions/creating-actions/creating-a-docker-container-action\n[template]: https://github.com/AndreasAugustin/template\n[marketplace]: https://github.com/marketplace/actions/actions-template-sync\n[self-usage]: https://github.com/AndreasAugustin/actions-template-sync/blob/main/.github/workflows/actions_template_sync.yml\n[pr-labels]: https://docs.github.com/en/issues/using-labels-and-milestones-to-track-work/managing-labels\n[devto-example]: https://dev.to/andreasaugustin/github-actions-template-sync-1g9k\n[devto-sign-commits]: https://dev.to/andreasaugustin/git-how-and-why-to-sign-commits-35dn\n[github-example]: https://github.com/AndreasAugustin/teaching/blob/main/docs/git/git_action_sync.md\n[github-app]: https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps\n[glob-pattern]: https://en.wikipedia.org/wiki/Glob_(programming)\n[github-app-token]: https://github.com/tibdex/github-app-token\n[dockerhub-repo]: https://hub.docker.com/r/andyaugustin/actions-template-sync\n[github-repo]: https://github.com/AndreasAugustin/actions-template-sync/pkgs/container/actions-template-sync\n[github-pat]: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token\n[other-repo-sync]: https://github.com/repo-sync/github-sync\n[other-git-repo-sync]: https://github.com/it3xl/git-repo-sync\n[other-action-template-repository-sync]: https://github.com/ahmadnassri/action-template-repository-sync\n[git-glossary]: https://git-scm.com/docs/gitglossary\n[dotdc-blog]: https://0xdc.me/blog/github-templates-and-repository-sync/\n[github-create-pat]: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token\n[github-create-secret]: https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository\n[github-create-gpg-key]: https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key\n[github-gh-cli-pr-edit]: https://cli.github.com/manual/gh_pr_edit\n[gh-cli]: https://github.com/cli/cli\n[yq]: https://github.com/mikefarah/yq\n[git-lfs]: https://github.com/git-lfs/git-lfs\n","funding_links":["https://github.com/sponsors/AndreasAugustin","https://ko-fi.com/andreasaugustin"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreasaugustin%2Factions-template-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreasaugustin%2Factions-template-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreasaugustin%2Factions-template-sync/lists"}