{"id":25975781,"url":"https://github.com/it-bens/container-registry-sync-action","last_synced_at":"2026-05-04T18:33:39.061Z","repository":{"id":280356218,"uuid":"937276859","full_name":"it-bens/container-registry-sync-action","owner":"it-bens","description":"GitHub Action that synchronizes images between registries","archived":false,"fork":false,"pushed_at":"2026-04-29T10:34:47.000Z","size":2928,"stargazers_count":3,"open_issues_count":13,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-29T12:39:22.421Z","etag":null,"topics":["actions","docker","registry"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/it-bens.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-22T18:49:28.000Z","updated_at":"2025-05-03T13:29:54.000Z","dependencies_parsed_at":"2026-04-01T22:04:21.891Z","dependency_job_id":null,"html_url":"https://github.com/it-bens/container-registry-sync-action","commit_stats":null,"previous_names":["it-bens/sync-images-from-dockerhub-to-ghcr-action","it-bens/container-registry-sync-action"],"tags_count":10,"template":false,"template_full_name":"actions/typescript-action","purl":"pkg:github/it-bens/container-registry-sync-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/it-bens%2Fcontainer-registry-sync-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/it-bens%2Fcontainer-registry-sync-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/it-bens%2Fcontainer-registry-sync-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/it-bens%2Fcontainer-registry-sync-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/it-bens","download_url":"https://codeload.github.com/it-bens/container-registry-sync-action/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/it-bens%2Fcontainer-registry-sync-action/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32619713,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["actions","docker","registry"],"created_at":"2025-03-05T03:24:03.933Z","updated_at":"2026-05-04T18:33:39.041Z","avatar_url":"https://github.com/it-bens.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Container Registry Sync Action\n\n[![GitHub Super-Linter](https://github.com/it-bens/container-registry-sync-action/actions/workflows/linter.yml/badge.svg)](https://github.com/super-linter/super-linter)\n![CI](https://github.com/it-bens/container-registry-sync-action/actions/workflows/ci.yml/badge.svg)\n[![Check dist/](https://github.com/it-bens/container-registry-sync-action/actions/workflows/check-dist.yml/badge.svg)](https://github.com/it-bens/container-registry-sync-action/actions/workflows/check-dist.yml)\n[![CodeQL](https://github.com/it-bens/container-registry-sync-action/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/it-bens/container-registry-sync-action/actions/workflows/codeql-analysis.yml)\n[![Coverage](./badges/coverage.svg)](./badges/coverage.svg)\n\n## About\n\nGitHub Action to synchronize docker images between container registries or\ninside the same registry. Because some registries enforce increasingly stricter\npull limits a distributed availability of images can reduce problems with limit\nhits. The action uses [regclient](https://github.com/regclient/regclient) to\nfetch the available tags of a source repository and copies them to a target\nrepository. A glob-based filter for the tags can be applied. Regclient will skip\nany layers that are already present in the target repository.\n\nThe action can also be used to copy images within the same registry.\n\nA summary with the installed regclient version and the copied tags will be\ncreated.\n\n![screenshot of a running action](./docs/action.jpg)\n\n## Usage\n\n### Prerequisites\n\nThe action uses `regclient` and will install it if it is not available in the\nrunner. A registry login might be required. It can be done before the action is\nexecuted like below or by the action itself.\n\n#### Authentication\n\nThe login to the registries can be done in two ways: 1) with docker and 2) with\nregclient.\n\n##### Docker login\n\n```yaml\njobs:\n  sync-images:\n    name: Sync images from DockerHub to GHCR\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Login to DockerHub\n        uses: regclient/actions/regctl-login@main\n        with:\n          registry: docker.io\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_TOKEN }}\n\n      - name: Login to GHCR\n        uses: regclient/actions/regctl-login@main\n        with:\n          registry: ghcr.io\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n      # ...\n```\n\n##### regclient login\n\nSee [Example](#example)\n\n### Inputs\n\n| name                     | description                                                                                                                 | required | default |\n| ------------------------ | --------------------------------------------------------------------------------------------------------------------------- | -------- | ------- |\n| sourceRepository         | Repository to sync from                                                                                                     | yes      |         |\n| loginToSourceRepository  | Whether to log in to the source repository                                                                                  | no       | 'false  |\n| sourceRepositoryUsername | Username for the source repository                                                                                          | no       |         |\n| sourceRepositoryPassword | Password for the source repository                                                                                          | no       |         |\n| targetRepository         | Repository to sync to                                                                                                       | yes      |         |\n| loginToTargetRepository  | Whether to log in to the target repository                                                                                  | no       | 'false' |\n| targetRepositoryUsername | Username for the target repository                                                                                          | no       |         |\n| targetRepositoryPassword | Password for the target repository                                                                                          | no       |         |\n| tags                     | Glob pattern to filter which tags to sync (e.g., 'v*' for version tags, '*-stable' for stable tags) based on DockerHub tags | no       | '\\*'    |\n| regClientConcurrency     | Number of concurrent regclient copy operations                                                                              | no       | 2       |\n\n### Example\n\n```yaml\n# copy all tags that start with \"6.6.\" from dockware/dev to ghcr.io/dockware-mirror/dev (between different registries)\njobs:\n  sync-images:\n    name: Sync images from DockerHub to GHCR\n    runs-on: ubuntu-24.04\n    steps:\n      # ...\n      - name: Sync images\n        uses: it-bens/container-registry-sync-action@main\n        with:\n          sourceRepository: 'dockware/dev'\n          loginToSourceRepository: 'true'\n          sourceRepositoryUsername: ${{ secrets.DOCKERHUB_USERNAME }}\n          sourceRepositoryPassword: ${{ secrets.DOCKERHUB_TOKEN }}\n          targetRepository: 'ghcr.io/dockware-mirror/dev'\n          loginToTargetRepository: 'true'\n          targetRepositoryUsername: ${{ github.actor }}\n          targetRepositoryPassword: ${{ secrets.GITHUB_TOKEN }}\n          tags: '6.6.*'\n          regClientConcurrency: 1\n```\n\n```yaml\n# copy all tags from inside GHCR from dockware/dev to dockware-mirror/dev (within the same registry)\njobs:\n  sync-images:\n    name: Sync images from DockerHub to GHCR\n    runs-on: ubuntu-24.04\n    steps:\n      # ...\n      - name: Sync images\n        uses: it-bens/container-registry-sync-action@main\n        with:\n          sourceRepository: 'ghcr.io/dockware/dev' # no login at the source repository is performed\n          targetRepository: 'ghcr.io/dockware-mirror/dev' # login into the target repository is enough\n          loginToTargetRepository: 'true'\n          targetRepositoryUsername: ${{ github.actor }}\n          targetRepositoryPassword: ${{ secrets.GITHUB_TOKEN }}\n```\n\n## Contributing\n\nI am really happy that the software developer community loves Open Source, like\nI do! ♥\n\nThat's why I appreciate every issue that is opened (preferably constructive) and\nevery pull request that provides other or even better code to this package.\n\nYou are all breathtaking!\n\n## Special Thanks\n\nSpecial thanks goes to the developers of the regclient. The tool is awesome!\nThis is their site: [regclient.org](https://regclient.org).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fit-bens%2Fcontainer-registry-sync-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fit-bens%2Fcontainer-registry-sync-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fit-bens%2Fcontainer-registry-sync-action/lists"}