{"id":19858697,"url":"https://github.com/BetaHuhn/repo-file-sync-action","last_synced_at":"2025-05-02T02:31:09.655Z","repository":{"id":37062996,"uuid":"327705279","full_name":"BetaHuhn/repo-file-sync-action","owner":"BetaHuhn","description":"🔄 GitHub Action to keep files like Action workflows or entire directories in sync between multiple repositories.","archived":false,"fork":false,"pushed_at":"2024-08-05T11:34:20.000Z","size":1289,"stargazers_count":315,"open_issues_count":24,"forks_count":90,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-27T18:38:12.350Z","etag":null,"topics":["file-sync","github-action-workflow-sync","github-actions","github-workflow","sync","sync-action","workflow-files","workflow-sync"],"latest_commit_sha":null,"homepage":"https://github.com/marketplace/actions/repo-file-sync-action","language":"JavaScript","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/BetaHuhn.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"ko_fi":"betahuhn","github":"betahuhn"}},"created_at":"2021-01-07T19:24:14.000Z","updated_at":"2025-04-26T14:41:24.000Z","dependencies_parsed_at":"2024-06-18T11:23:00.281Z","dependency_job_id":"c267595c-ed33-436e-b2f2-8f687df966ec","html_url":"https://github.com/BetaHuhn/repo-file-sync-action","commit_stats":{"total_commits":319,"total_committers":26,"mean_commits":12.26923076923077,"dds":0.6238244514106583,"last_synced_commit":"3023dac7ce66c18b119e2012348437eadeaea116"},"previous_names":[],"tags_count":88,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BetaHuhn%2Frepo-file-sync-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BetaHuhn%2Frepo-file-sync-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BetaHuhn%2Frepo-file-sync-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BetaHuhn%2Frepo-file-sync-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BetaHuhn","download_url":"https://codeload.github.com/BetaHuhn/repo-file-sync-action/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251972474,"owners_count":21673612,"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":["file-sync","github-action-workflow-sync","github-actions","github-workflow","sync","sync-action","workflow-files","workflow-sync"],"created_at":"2024-11-12T14:24:16.797Z","updated_at":"2025-05-02T02:31:09.051Z","avatar_url":"https://github.com/BetaHuhn.png","language":"JavaScript","funding_links":["https://ko-fi.com/betahuhn","https://github.com/sponsors/betahuhn","https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=394RTSBEEEFEE","https://ko-fi.com/F1F81S2RK"],"categories":["Building","JavaScript"],"sub_categories":["Workflows"],"readme":"\u003cdiv align=\"center\"\u003e\n  \n# Repo File Sync Action\n\n[![Build CI](https://github.com/BetaHuhn/repo-file-sync-action/workflows/Test%20CI/badge.svg)](https://github.com/BetaHuhn/repo-file-sync-action/actions?query=workflow%3A%22Test+CI%22) [![GitHub](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/BetaHuhn/repo-file-sync-action/blob/master/LICENSE) ![David](https://img.shields.io/david/betahuhn/repo-file-sync-action)\n\nKeep files like Action workflows or entire directories in sync between multiple repositories.\n\n\u003c/div\u003e\n\n## 👋 Introduction\n\nWith [repo-file-sync-action](https://github.com/BetaHuhn/repo-file-sync-action) you can sync files, like workflow `.yml` files, configuration files or whole directories between repositories or branches. It works by running a GitHub Action in your main repository everytime you push something to that repo. The action will use a `sync.yml` config file to figure out which files it should sync where. If it finds a file which is out of sync it will open a pull request in the target repository with the changes.\n\n## 🚀 Features\n\n- Keep GitHub Actions workflow files in sync across all your repositories\n- Sync any file or a whole directory to as many repositories as you want\n- Easy configuration for any use case\n- Create a pull request in the target repo so you have the last say on what gets merged\n- Automatically label pull requests to integrate with other actions like [automerge-action](https://github.com/pascalgn/automerge-action)\n- Assign users to the pull request\n- Render [Jinja](https://jinja.palletsprojects.com/)-style templates as use variables thanks to [Nunjucks](https://mozilla.github.io/nunjucks/)\n\n## 📚 Usage\n\n\n### Workflow\n\nCreate a `.yml` file in your `.github/workflows` folder (you can find more info about the structure in the [GitHub Docs](https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions)):\n\n**.github/workflows/sync.yml**\n\n```yml\nname: Sync Files\non:\n  push:\n    branches:\n      - main\n      - master\n  workflow_dispatch:\njobs:\n  sync:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout Repository\n        uses: actions/checkout@main\n      - name: Run GitHub File Sync\n        uses: BetaHuhn/repo-file-sync-action@v1\n        with:\n          GH_PAT: ${{ secrets.GH_PAT }}\n```\n\n#### Token\n\nIn order for the Action to access your repositories you have to specify a [Personal Access token](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token) as the value for `GH_PAT` (`GITHUB_TOKEN` will **not** work). The PAT needs the full repo scope ([#31](https://github.com/BetaHuhn/repo-file-sync-action/discussions/31#discussioncomment-674804)).\n\nIt is recommended to set the token as a\n[Repository Secret](https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository).\n\nAlternatively, you can provide the token of a GitHub App Installation via the `GH_INSTALLATION_TOKEN` input. You can obtain such token for example via [this](https://github.com/marketplace/actions/github-app-token) action. Tokens from apps have the advantage that they provide more granular access control.\n\nThe app needs to be configured for each repo you want to sync to, and have the `Contents` read \u0026 write and `Metadata` read-only permission. If you want to use PRs (default setting) you additionally need `Pull requests` read \u0026 write access, and to sync workflow files you need `Workflows` read \u0026 write access.\n\nIf using an installation token you are required to provide the `GIT_EMAIL` and `GIT_USERNAME` input.\n\n### Sync configuration\n\nThe last step is to create a `.yml` file in the `.github` folder of your repository and specify what file(s) to sync to which repositories:\n\n**.github/sync.yml**\n\n```yml\nuser/repository:\n  - .github/workflows/test.yml\n  - .github/workflows/lint.yml\n\nuser/repository2:\n  - source: workflows/stale.yml\n    dest: .github/workflows/stale.yml\n```\n\nMore info on how to specify what files to sync where [below](#%EF%B8%8F-sync-configuration).\n\n### Versioning\n\nTo always use the latest version of the action add the `latest` tag to the action name like this:\n\n```yml\nuses: BetaHuhn/repo-file-sync-action@latest\n```\n\nIf you want to make sure that your workflow doesn't suddenly break when a new major version is released, use the `v1` tag instead (recommended usage):\n\n```yml\nuses: BetaHuhn/repo-file-sync-action@v1\n```\n\nWith the `v1` tag you will always get the latest non-breaking version which will include potential bug fixes in the future. If you use a specific version, make sure to regularly check if a new version is available, or enable Dependabot.\n\n## ⚙️ Action Inputs\n\nHere are all the inputs [repo-file-sync-action](https://github.com/BetaHuhn/repo-file-sync-action) takes:\n\n| Key | Value | Required | Default |\n| ------------- | ------------- | ------------- | ------------- |\n| `GH_PAT` | Your [Personal Access token](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token) | **`GH_PAT` or `GH_INSTALLATION_TOKEN` required** | N/A |\n| `GH_INSTALLATION_TOKEN` | Token from a GitHub App installation | **`GH_PAT` or `GH_INSTALLATION_TOKEN` required** | N/A |\n| `CONFIG_PATH` | Path to the sync configuration file | **No** | .github/sync.yml |\n| `IS_FINE_GRAINED` | Labels the GH_PAT as a fine grained token | **No** | false |\n| `PR_LABELS` | Labels which will be added to the pull request. Set to false to turn off | **No** | sync |\n| `ASSIGNEES` | Users to assign to the pull request | **No** | N/A |\n| `REVIEWERS` | Users to request a review of the pull request from | **No** | N/A |\n| `TEAM_REVIEWERS` | Teams to request a review of the pull request from | **No** | N/A |\n| `COMMIT_PREFIX` | Prefix for commit message and pull request title | **No** | 🔄 |\n| `COMMIT_BODY` | Commit message body. Will be appended to commit message, separated by two line returns. | **No** | '' |\n| `PR_BODY` | Additional content to add in the PR description. | **No** | '' |\n| `ORIGINAL_MESSAGE` | Use original commit message instead. Only works if the file(s) were changed and the action was triggered by pushing a single commit. | **No** | false |\n| `COMMIT_AS_PR_TITLE` | Use first line of the commit message as PR title. Only works if `ORIGINAL_MESSAGE` is `true` and working. | **No** | false |\n| `COMMIT_EACH_FILE` | Commit each file seperately | **No** | true |\n| `GIT_EMAIL` | The e-mail address used to commit the synced files | **Only when using installation token** | the email of the PAT used |\n| `GIT_USERNAME` | The username used to commit the synced files | **Only when using installation token** | the username of the PAT used |\n| `OVERWRITE_EXISTING_PR` | Overwrite any existing Sync PR with the new changes | **No** | true |\n| `BRANCH_PREFIX` | Specify a different prefix for the new branch in the target repo | **No** | repo-sync/SOURCE_REPO_NAME |\n| `TMP_DIR` | The working directory where all git operations will be done | **No** | tmp-${ Date.now().toString() } |\n| `DRY_RUN` | Run everything except that nothing will be pushed | **No** | false |\n| `SKIP_CLEANUP` | Skips removing the temporary directory. Useful for debugging | **No** | false |\n| `SKIP_PR` | Skips creating a Pull Request and pushes directly to the default branch | **No** | false |\n| `FORK` | A Github account username. Changes will be pushed to a fork of target repos on this account. | **No** | false |\n\n### Outputs\n\nThe action sets the `pull_request_urls` output to the URLs of any created Pull Requests. It will be an array of URLs to each PR, e.g. `'[\"https://github.com/username/repository/pull/number\", \"...\"]'`.\n\n## 🛠️ Sync Configuration\n\nIn order to tell [repo-file-sync-action](https://github.com/BetaHuhn/repo-file-sync-action) what files to sync where, you have to create a `sync.yml` file in the `.github` directory of your main repository (see [action-inputs](#%EF%B8%8F-action-inputs) on how to change the location).\n\nThe top-level key should be used to specify the target repository in the format `username`/`repository-name`@`branch`, after that you can list all the files you want to sync to that individual repository:\n\n```yml\nuser/repo:\n  - path/to/file.txt\nuser/repo2@develop:\n  - path/to/file2.txt\n```\n\nThere are multiple ways to specify which files to sync to each individual repository.\n\n### List individual file(s)\n\nThe easiest way to sync files is the list them on a new line for each repository:\n\n```yml\nuser/repo:\n  - .github/workflows/build.yml\n  - LICENSE\n  - .gitignore\n```\n\n### Different destination path/filename(s)\n\nUsing the `dest` option you can specify a destination path in the target repo and/or change the filename for each source file:\n\n```yml\nuser/repo:\n  - source: workflows/build.yml\n    dest: .github/workflows/build.yml\n  - source: LICENSE.md\n    dest: LICENSE\n```\n\n### Sync entire directories\n\nYou can also specify entire directories to sync:\n\n```yml\nuser/repo:\n  - source: workflows/\n    dest: .github/workflows/\n```\n\n### Exclude certain files when syncing directories\n\nUsing the `exclude` key you can specify files you want to exclude when syncing entire directories (#26).\n\n```yml\nuser/repo:\n  - source: workflows/\n    dest: .github/workflows/\n    exclude: |\n      node.yml\n      lint.yml\n```\n\n\u003e **Note:** the exclude file path is relative to the source path\n\n### Don't replace existing file(s)\n\nBy default if a file already exists in the target repository, it will be replaced. You can change this behaviour by setting the `replace` option to `false`:\n\n```yml\nuser/repo:\n  - source: .github/workflows/lint.yml\n    replace: false\n```\n\n### Using templates\n\nYou can render templates before syncing by using the [Jinja](https://jinja.palletsprojects.com/)-style template syntax. It will be compiled using [Nunjucks](https://mozilla.github.io/nunjucks/) and the output written to the specific file(s) or folder(s).\n\nNunjucks supports variables and blocks among other things. To enable, set the `template` field to a context dictionary, or in case of no variables, `true`:\n\n```yml\nuser/repo:\n  - source: src/README.md\n    template:\n      user:\n        name: 'Maxi'\n        handle: '@BetaHuhn'\n```\n\nIn the source file you can then use these variables like this:\n\n```yml\n# README.md\n\nCreated by {{ user.name }} ({{ user.handle }})\n```\n\nResult:\n\n```yml\n# README.md\n\nCreated by Maxi (@BetaHuhn)\n```\n\nYou can also use `extends` with a relative path to inherit other templates. Take a look at Nunjucks [template syntax](https://mozilla.github.io/nunjucks/templating.html) for more info.\n\n```yml\nuser/repo:\n  - source: .github/workflows/child.yml\n    template: true\n```\n\n```yml\n# child.yml\n{% extends './parent.yml' %}\n\n{% block some_block %}\nThis is some content\n{% endblock %}\n```\n\n### Delete orphaned files\n\nWith the `deleteOrphaned` option you can choose to delete files in the target repository if they are deleted in the source repository. The option defaults to `false` and only works when [syncing entire directories](#sync-entire-directories):\n\n```yml\nuser/repo:\n  - source: workflows/\n    dest: .github/workflows/\n    deleteOrphaned: true\n```\n\nIt only takes effect on that specific directory.\n\n### Sync the same files to multiple repositories\n\nInstead of repeating yourself listing the same files for multiple repositories, you can create a group:\n\n```yml\ngroup:\n  repos: |\n    user/repo\n    user/repo1\n  files: \n    - source: workflows/build.yml\n      dest: .github/workflows/build.yml\n    - source: LICENSE.md\n      dest: LICENSE\n```\n\nYou can create multiple groups like this:\n\n```yml\ngroup:\n  # first group\n  - files:\n      - source: workflows/build.yml\n        dest: .github/workflows/build.yml\n      - source: LICENSE.md\n        dest: LICENSE\n    repos: |\n      user/repo1\n      user/repo2\n\n  # second group\n  - files: \n      - source: configs/dependabot.yml\n        dest: .github/dependabot.yml\n    repos: |\n      user/repo3\n      user/repo4\n```\n\n### Syncing branches\n\nYou can also sync different branches from the same or different repositories (#51). For example, a repository named `foo/bar` with branch `main`, and `sync.yml` contents:\n\n```yml\ngroup:\n  repos: |\n    foo/bar@de\n    foo/bar@es\n    foo/bar@fr\n  files:\n    - source: .github/workflows/\n      dest: .github/workflows/\n```\n\nHere all files in `.github/workflows/` will be synced from the `main` branch to the branches `de`/`es`/`fr`.\n\n## 📖 Examples\n\nHere are a few examples to help you get started!\n\n### Basic Example\n\n**.github/sync.yml**\n\n```yml\nuser/repository:\n  - LICENSE\n  - .gitignore\n```\n\n### Sync all workflow files\n\nThis example will keep all your `.github/workflows` files in sync across multiple repositories:\n\n**.github/sync.yml**\n\n```yml\ngroup:\n  repos: |\n    user/repo1\n    user/repo2\n  files:\n    - source: .github/workflows/\n      dest: .github/workflows/\n```\n\n### Custom labels\n\nBy default [repo-file-sync-action](https://github.com/BetaHuhn/repo-file-sync-action) will add the `sync` label to every PR it creates. You can turn this off by setting `PR_LABELS` to false, or specify your own labels:\n\n**.github/workflows/sync.yml**\n\n```yml\n- name: Run GitHub File Sync\n  uses: BetaHuhn/repo-file-sync-action@v1\n  with:\n    GH_PAT: ${{ secrets.GH_PAT }}\n    PR_LABELS: |\n      file-sync\n      automerge\n```\n\n### Assign a user to the PR\n\nYou can tell [repo-file-sync-action](https://github.com/BetaHuhn/repo-file-sync-action) to assign users to the PR with `ASSIGNEES`:\n\n**.github/workflows/sync.yml**\n\n```yml\n- name: Run GitHub File Sync\n  uses: BetaHuhn/repo-file-sync-action@v1\n  with:\n    GH_PAT: ${{ secrets.GH_PAT }}\n    ASSIGNEES: BetaHuhn\n```\n\n### Request a PR review\n\nYou can tell [repo-file-sync-action](https://github.com/BetaHuhn/repo-file-sync-action) to request a review of the PR from users with `REVIEWERS` and from teams with `TEAM_REVIEWERS`:\n\n**.github/workflows/sync.yml**\n\n```yml\n- name: Run GitHub File Sync\n  uses: BetaHuhn/repo-file-sync-action@v1\n  with:\n    GH_PAT: ${{ secrets.GH_PAT }}\n    REVIEWERS: |\n      BetaHuhn\n      BetaHuhnBot\n    TEAM_REVIEWERS: engineering\n```\n\n### Custom GitHub Enterprise Host\n\nIf your target repository is hosted on a GitHub Enterprise Server you can specify a custom host name like this:\n\n**.github/workflows/sync.yml**\n\n```yml\nhttps://custom.host/user/repo:\n  - path/to/file.txt\n\n# or in a group\n\ngroup:\n  - files:\n      - source: path/to/file.txt\n        dest: path/to/file.txt\n    repos: |\n      https://custom.host/user/repo\n```\n\n\u003e **Note:** The key has to start with http to indicate that you want to use a custom host.\n\n### Different branch prefix\n\nBy default all new branches created in the target repo will be in the this format: `repo-sync/SOURCE_REPO_NAME/SOURCE_BRANCH_NAME`, with the SOURCE_REPO_NAME being replaced with the name of the source repo and SOURCE_BRANCH_NAME with the name of the source branch.\n\nIf your repo name contains invalid characters, like a dot ([#32](https://github.com/BetaHuhn/repo-file-sync-action/issues/32)), you can specify a different prefix for the branch (the text before `/SOURCE_BRANCH_NAME`):\n\n**.github/workflows/sync.yml**\n\n```yml\nuses: BetaHuhn/repo-file-sync-action@v1\nwith:\n    GH_PAT: ${{ secrets.GH_PAT }}\n    BRANCH_PREFIX: custom-branch\n```\n\nThe new branch will then be `custom-branch/SOURCE_BRANCH_NAME`.\n\n\u003e You can use `SOURCE_REPO_NAME` in your custom branch prefix as well and it will be replaced with the actual repo name\n\n### Custom commit body\n\nYou can specify a custom commit body. This will be appended to the commit message, separated by two new lines. For example:\n\n**.github/workflows/sync.yml**\n\n```yml\n- name: Run GitHub File Sync\n  uses: BetaHuhn/repo-file-sync-action@v1\n  with:\n    GH_PAT: ${{ secrets.GH_PAT }}\n    COMMIT_BODY: \"Change-type: patch\"\n```\n\nThe above example would result in a commit message that looks something like this:\n```\n🔄 synced local '\u003cfilename\u003e' with remote '\u003cfilename\u003e'\n\nChange-type: patch\n```\n\n### Add content to the PR body\n\nYou can add more content to the PR body with the `PR_BODY` option. For example:\n\n**.github/workflows/sync.yml**\n\n```yml\n- name: Run GitHub File Sync\n  uses: BetaHuhn/repo-file-sync-action@v1\n  with:\n    GH_PAT: ${{ secrets.GH_PAT }}\n    PR_BODY: This is your custom PR Body\n```\n\nIt will be added below the first line of the body and above the list of changed files. The above example would result in a PR body that looks something like this:\n\n```\nsynced local file(s) with GITHUB_REPOSITORY.\n\nThis is your custom PR Body\n\n▶ Changed files\n\n---\n\nThis PR was created automatically by the repo-file-sync-action workflow run xxx.\n```\n\n### Fork and pull request workflow\n\nIf you do not wish to grant this action write access to target repositories, you can specify a bot/user Github acccount that you do have access to with the `FORK` parameter. \n\nA fork of each target repository will be created on this account, and all changes will be pushed to a branch on the fork, instead of upstream. Pull requests will be opened from the forks to target repositories.\n\nNote: while you can open pull requests to target repositories without write access, some features, like applying labels, are not possible.\n\n```yml\nuses: BetaHuhn/repo-file-sync-action@v1\nwith:\n    GH_PAT: ${{ secrets.GH_PAT }}\n    FORK: file-sync-bot\n```\n\n### Advanced sync config\n\nHere's how I keep common files in sync across my repositories. The main repository [`github-files`](https://github.com/BetaHuhn/github-files) contains all the files I want to sync and the [repo-file-sync-action](https://github.com/BetaHuhn/repo-file-sync-action) Action which runs on every push.\n\nUsing groups I can specify which file(s) should be synced to which repositories:\n\n**.github/sync.yml**\n\n```yml\ngroup:\n  # dependabot files\n  - files:\n      - source: configs/dependabot.yml\n        dest: .github/dependabot.yml\n      - source: workflows/dependencies/dependabot.yml\n        dest: .github/workflows/dependabot.yml\n    repos: |\n      BetaHuhn/do-spaces-action\n      BetaHuhn/running-at\n      BetaHuhn/spaces-cli\n      BetaHuhn/metadata-scraper\n      BetaHuhn/ejs-serve\n      BetaHuhn/feedback-js\n      BetaHuhn/drkmd.js\n\n  # GitHub Sponsors config\n  - files:\n      - source: configs/FUNDING.yml\n        dest: .github/FUNDING.yml\n    repos: |\n      BetaHuhn/do-spaces-action\n      BetaHuhn/running-at\n      BetaHuhn/spaces-cli\n      BetaHuhn/qrgen\n      BetaHuhn/metadata-scraper\n      BetaHuhn/ejs-serve\n      BetaHuhn/feedback-js\n      BetaHuhn/drkmd.js\n\n  # Semantic release\n  - files:\n      - source: workflows/versioning/release-scheduler.yml\n        dest: .github/workflows/release-scheduler.yml\n      - source: workflows/versioning/release.yml\n        dest: .github/workflows/release.yml\n      - source: configs/release.config.js\n        dest: release.config.js\n    repos: |\n      BetaHuhn/do-spaces-action\n      BetaHuhn/metadata-scraper\n      BetaHuhn/feedback-js\n      BetaHuhn/drkmd.js\n\n  # Stale issues workflow\n  - files:\n      - source: workflows/issues/stale.yml\n        dest: .github/workflows/stale.yml\n    repos: |\n      BetaHuhn/do-spaces-action\n      BetaHuhn/running-at\n      BetaHuhn/spaces-cli\n      BetaHuhn/qrgen\n      BetaHuhn/metadata-scraper\n      BetaHuhn/ejs-serve\n      BetaHuhn/feedback-js\n      BetaHuhn/drkmd.js\n\n  # Lint CI workflow\n  - files:\n      - source: workflows/node/lint.yml\n        dest: .github/workflows/lint.yml\n    repos: |\n      BetaHuhn/do-spaces-action\n      BetaHuhn/running-at\n      BetaHuhn/spaces-cli\n      BetaHuhn/metadata-scraper\n      BetaHuhn/ejs-serve\n      BetaHuhn/feedback-js\n      BetaHuhn/drkmd.js\n\n  # MIT License\n  - files:\n      - source: LICENSE\n        dest: LICENSE\n    repos: |\n      BetaHuhn/do-spaces-action\n      BetaHuhn/running-at\n      BetaHuhn/spaces-cli\n      BetaHuhn/qrgen\n      BetaHuhn/metadata-scraper\n      BetaHuhn/ejs-serve\n      BetaHuhn/feedback-js\n      BetaHuhn/drkmd.js\n```\n\n## 💻 Development\n\nIssues and PRs are very welcome!\n\nThe actual source code of this library is in the `src` folder.\n\n- run `yarn lint` or `npm run lint` to run eslint.\n- run `yarn start` or `npm run start` to run the Action locally.\n- run `yarn build` or `npm run build` to produce a production version of [repo-file-sync-action](https://github.com/BetaHuhn/repo-file-sync-action) in the `dist` folder.\n\n## ❔ About\n\nThis project was developed by me ([@betahuhn](https://github.com/BetaHuhn)) in my free time. If you want to support me:\n\n[![Donate via PayPal](https://img.shields.io/badge/paypal-donate-009cde.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=394RTSBEEEFEE)\n\n[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/F1F81S2RK)\n\n### Credits\n\nThis Action was inspired by:\n\n- [action-github-workflow-sync](https://github.com/varunsridharan/action-github-workflow-sync)\n- [files-sync-action](https://github.com/adrianjost/files-sync-action)\n\n## 📄 License\n\nCopyright 2021 Maximilian Schiller\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBetaHuhn%2Frepo-file-sync-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FBetaHuhn%2Frepo-file-sync-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBetaHuhn%2Frepo-file-sync-action/lists"}