joshjohanning/Bulk GitHub Repository Settings Sync

Update repository settings in bulk for multiple GitHub repositories

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit Jun 30, 2026
License
MIT

Pinned Snippet

workflow.ymlSHA-pinned
uses: joshjohanning/bulk-github-repo-settings-sync-action@4dbdb50fdadd0e336515a267c24c9a7c21b45b38 # v2.10.3

tags can be moved; commit SHAs can't. why a SHA?

namedescriptionrequireddefault
github-tokenGitHub token for API access (requires repo scope)yes
github-api-urlGitHub API URL (e.g., https://api.github.com for GitHub.com or https://ghes.domain.com/api/v3 for GHES). Instance URL is auto-derived.no${{ github.api_url }}
repositoriesComma-separated list of repositories (owner/repo format) or "all" for all repos in the organization/userno
repositories-filePath to YAML file containing repository list (repos.yml for Option 1, settings-config.yml for Option 2)no
ownerOwner (user or organization) name - required when using "all" for repositories or when using custom property filtering (must be an organization for custom properties)no
custom-property-nameName of the custom property to filter repositories by (organization custom property)no
custom-property-valueComma-separated list of custom property values to match. Repositories with any of these values will be included.no
allow-squash-mergeAllow squash merging pull requestsno
squash-merge-commit-titleDefault title for squash merge commits. Allowed values: PR_TITLE, COMMIT_OR_PR_TITLEno
squash-merge-commit-messageDefault message for squash merge commits. Allowed values: PR_BODY, COMMIT_MESSAGES, BLANKno
allow-merge-commitAllow merge commits for pull requestsno
merge-commit-titleDefault title for merge commits. Allowed values: PR_TITLE, MERGE_MESSAGEno
merge-commit-messageDefault message for merge commits. Allowed values: PR_TITLE, PR_BODY, BLANKno
allow-rebase-mergeAllow rebase merging pull requestsno
allow-auto-mergeAllow auto-merge on pull requestsno
delete-branch-on-mergeAutomatically delete head branches after pull requests are mergedno
allow-update-branchAlways suggest updating pull request branchesno
immutable-releasesEnable immutable releases to prevent release deletion and modificationno
code-scanningEnable or disable default code scanning setupno
enable-default-code-scanningDEPRECATED: Use code-scanning instead. Enable default code scanning setup.no
secret-scanningEnable or disable secret scanning for repositoriesno
secret-scanning-push-protectionEnable or disable secret scanning push protection for repositoriesno
private-vulnerability-reportingEnable or disable private vulnerability reporting for repositoriesno
dependabot-alertsEnable or disable Dependabot alerts (vulnerability alerts) for repositories. Also enables the dependency graph.no
dependabot-security-updatesEnable or disable Dependabot security updates for repositoriesno
topicsComma-separated list of topics to set on repositories (replaces existing topics)no
dependabot-ymlPath to a dependabot.yml file to sync to .github/dependabot.yml in target repositoriesno
dependabot-pr-titleTitle for pull requests when updating dependabot.ymlnochore: update dependabot.yml
gitignorePath to a .gitignore file to sync to .gitignore in target repositories (preserves repo-specific content after marker)no
gitignore-pr-titleTitle for pull requests when updating .gitignorenochore: update .gitignore
rulesets-fileComma-separated paths to JSON files, each containing a repository ruleset configuration to sync to target repositoriesno
delete-unmanaged-rulesetsDelete all other rulesets besides those being syncednofalse
pull-request-templatePath to a pull request template file to sync to .github/pull_request_template.md in target repositoriesno
pull-request-template-pr-titleTitle for pull requests when updating pull request templatenochore: update pull request template
workflow-filesComma-separated list of workflow file paths to sync to .github/workflows/ in target repositories (e.g., "./workflows/ci.yml,./workflows/release.yml")no
workflow-files-pr-titleTitle for pull requests when updating workflow filesnochore: sync workflow configuration
autolinks-filePath to a JSON file containing autolink references to sync to target repositoriesno
environmentsComma-separated list of environment names to sync (creates new environments only; existing environments are not updated)no
environments-filePath to a YAML or JSON file with detailed environment configurations (reviewers, wait timers, branch policies, deployment protection rules, branch name patterns)no
delete-unmanaged-environmentsDelete environments not defined in the environments configurationnofalse
copilot-instructions-mdPath to a copilot-instructions.md file to sync to .github/copilot-instructions.md in target repositoriesno
copilot-instructions-pr-titleTitle for pull requests when updating copilot-instructions.mdnochore: update copilot-instructions.md
codeownersPath to a CODEOWNERS file to sync to target repositoriesno
codeowners-target-pathTarget path for the CODEOWNERS file in repositories (.github/CODEOWNERS, CODEOWNERS, or docs/CODEOWNERS)no.github/CODEOWNERS
codeowners-pr-titleTitle for pull requests when updating CODEOWNERSnochore: update CODEOWNERS
package-json-filePath to a package.json file to use as source for syncing npm scripts and/or enginesno
package-json-sync-scriptsSync npm scripts from package-json-file to target repositoriesnotrue
package-json-sync-enginesSync engines field from package-json-file to target repositories (useful for Node.js version requirements)notrue
package-json-pr-titleTitle for pull requests when updating package.jsonnochore: update package.json
dry-runPreview changes without applying them (logs what would be changed)nofalse
write-job-summaryWrite a summary table to the GitHub Actions job summarynotrue
summary-headingCustom heading for the GitHub Actions job summarynoBulk Repository Settings Update Results
namedescription
updated-repositoriesNumber of repositories successfully processed (changed + pending + unchanged)
changed-repositoriesNumber of repositories with reportable changes made this run (or would have in dry-run mode). Repos with only pending sync PRs are counted under pending-repositories instead.
pending-repositoriesNumber of repositories with an open sync PR that is already up-to-date and just needs merging (no action was taken this run)
unchanged-repositoriesNumber of repositories with no reportable changes (may include warnings)
failed-repositoriesNumber of repositories that failed to update
warning-repositoriesNumber of repositories that emitted warnings
resultsJSON array of update results for each repository