From b48b25b1c135ec2e238fa3eebd2087b791e55abb Mon Sep 17 00:00:00 2001 From: Claire W <78226508+crwaters16@users.noreply.github.com> Date: Tue, 25 Aug 2026 18:27:18 +0000 Subject: [PATCH 1/3] [Get started] GitHub plans page tweaks (#62919) --- .../learning-about-github/githubs-plans.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/content/get-started/learning-about-github/githubs-plans.md b/content/get-started/learning-about-github/githubs-plans.md index 7c4c4ae0aab8..d143f88529f4 100644 --- a/content/get-started/learning-about-github/githubs-plans.md +++ b/content/get-started/learning-about-github/githubs-plans.md @@ -23,7 +23,9 @@ See costs and features for each plan at {% data variables.product.pricing_link % When you read {% data variables.product.prodname_docs %}, make sure to select the version that reflects your plan. For more information, see [AUTOTITLE](/get-started/using-github-docs/about-versions-of-github-docs). -## {% data variables.product.prodname_free_user %} for personal accounts +## Individual plans + +### {% data variables.product.prodname_free_user %} for personal accounts With {% data variables.product.prodname_free_team %} for personal accounts, you can work with unlimited collaborators on unlimited public repositories with a full feature set, and on unlimited private repositories with a limited feature set. @@ -40,7 +42,7 @@ With {% data variables.product.prodname_free_user %}, your personal account incl * Deployment protection rules for public repositories * GitHub Pages in public repositories -## {% data variables.product.prodname_pro %} +### {% data variables.product.prodname_pro %} In addition to the features available with {% data variables.product.prodname_free_user %} for personal accounts, {% data variables.product.prodname_pro %} includes: * {% data variables.contact.github_support %} via email @@ -63,7 +65,9 @@ In addition to the features available with {% data variables.product.prodname_fr * Repository insights graphs: Pulse, contributors, traffic, commits, code frequency, network, and forks {% data reusables.repositories.repo-insights-commit-limit %} -## {% data variables.product.prodname_free_team %} for organizations +## Organization and enterprise plans + +### {% data variables.product.prodname_free_team %} for organizations With {% data variables.product.prodname_free_team %} for organizations, you can work with unlimited collaborators on unlimited public repositories with a full feature set, or unlimited private repositories with a limited feature set. @@ -72,7 +76,7 @@ In addition to the features available with {% data variables.product.prodname_fr * Team access controls for managing groups * 2,000 {% data variables.product.prodname_actions %} minutes per month -## {% data variables.product.prodname_team %} +### {% data variables.product.prodname_team %} In addition to the features available with {% data variables.product.prodname_free_team %} for organizations, {% data variables.product.prodname_team %} includes: * {% data variables.contact.github_support %} via email @@ -109,7 +113,7 @@ In addition to the features available with {% data variables.product.prodname_fr {% data reusables.actions.actions-billing %} -## {% data variables.product.prodname_enterprise %} +### {% data variables.product.prodname_enterprise %} {% data variables.product.prodname_enterprise %} includes two deployment options: {% data variables.product.prodname_ghe_cloud %}, which is hosted by {% data variables.product.company_short %} in the cloud, and {% data variables.product.prodname_ghe_server %}, which is self-hosted. For more information, see [About {% data variables.product.prodname_dotcom %} for enterprises]({% ifversion fpt %}/enterprise-cloud@latest{% endif %}/admin/overview/about-github-for-enterprises){% ifversion fpt %} in the {% data variables.product.prodname_ghe_cloud %} documentation.{% else %}.{% endif %} @@ -143,4 +147,4 @@ You can set up trials to evaluate {% data variables.product.prodname_ghe_cloud % ## Further reading -* [About per-user pricing]({% ifversion not ghec %}/enterprise-cloud@latest{% endif %}/billing/managing-the-plan-for-your-github-account/about-per-user-pricing){% ifversion not ghec %} in the {% data variables.product.prodname_ghe_cloud %} documentation{% endif %} +* [About per-user pricing]({% ifversion not ghec %}/enterprise-cloud@latest{% endif %}/billing/managing-the-plan-for-your-github-account/about-per-user-pricing){% ifversion not ghec %} in the {% data variables.product.prodname_ghe_cloud %} documentation{% endif %} \ No newline at end of file From 78c347a8285f3a035639fe2d3bca8a0cfa3fa39d Mon Sep 17 00:00:00 2001 From: pararohan Date: Tue, 25 Aug 2026 19:05:34 +0000 Subject: [PATCH 2/3] Document allowed exceptions for push rules (#62873) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Laura Coursen Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: pararohan <452580+pararohan@users.noreply.github.com> Copilot-Session: 268c80e7-020f-43b5-a13f-d6010afd5f0c --- .../available-rules-for-rulesets.md | 22 +++++++++++++++++++ .../troubleshooting-rules.md | 6 +++++ .../features/push-rule-allowed-exceptions.yml | 7 ++++++ .../repositories/push-rulesets-overview.md | 4 +++- .../rulesets-push-rules-allowed-exceptions.md | 1 + .../repositories/rulesets-push-rules-step.md | 5 +++++ 6 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 data/features/push-rule-allowed-exceptions.yml create mode 100644 data/reusables/repositories/rulesets-push-rules-allowed-exceptions.md diff --git a/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets.md b/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets.md index 669bec1fb20b..9fa1f8d4f429 100644 --- a/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets.md +++ b/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets.md @@ -319,6 +319,14 @@ Prevent commits that include changes in specified file paths from being pushed t {% data reusables.repositories.rulesets-push-rules-path-example %} +{% ifversion push-rule-allowed-exceptions %} + +You can also add allowed exceptions to this rule. A file matching an allowed exception can be pushed even when it also matches a restricted path. + +{% data reusables.repositories.rulesets-push-rules-allowed-exceptions %} + +{% endif %} + ## Restrict file path length Prevent commits that include file paths that exceed a specified character limit from being pushed to the repository. @@ -327,6 +335,20 @@ Prevent commits that include file paths that exceed a specified character limit Prevent commits that include files with specified file extensions from being pushed to the repository. {% ifversion available-rules-limit %}Limit is 200 entries and up to 200 characters in each entry.{% endif %} +{% ifversion push-rule-allowed-exceptions %} + +If you need to allow an exception for a single file of an otherwise blocked file type, use "Restrict file paths" with a pattern such as `**/*.jar`. Only the "Restrict file paths" and "Restrict file size" rules support allowed exceptions. + +{% endif %} + ## Restrict file size Prevent commits that exceed a specified file size limit from being pushed to the repository. + +{% ifversion push-rule-allowed-exceptions %} + +You can also add allowed exceptions to this rule. A file matching an allowed exception can exceed the file size limit. + +{% data reusables.repositories.rulesets-push-rules-allowed-exceptions %} + +{% endif %} diff --git a/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/troubleshooting-rules.md b/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/troubleshooting-rules.md index b83900473573..7713310aa8b6 100644 --- a/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/troubleshooting-rules.md +++ b/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/troubleshooting-rules.md @@ -21,6 +21,12 @@ If a branch or tag is targeted by rules restricting the metadata of commits, you When utilizing push rulesets, a maximum of 1000 reference updates are allowed per push. If your push exceeds this limit, it will be rejected. For more information see [AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/creating-rulesets-for-a-repository#creating-a-push-ruleset). +{% ifversion push-rule-allowed-exceptions %} + +If your push is blocked by a rule restricting file paths or file size, check whether the ruleset defines allowed exceptions. A repository, organization, or enterprise administrator can add an allowed exception for a file that must remain pushable. See [Restrict file paths](/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets#restrict-file-paths) and [Restrict file size](/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets#restrict-file-size). + +{% endif %} + Additionally, push rulesets apply to the "Create a blob", "Create a tree", and "Create or update file contents" endpoints in the REST API. See [AUTOTITLE](/rest/git/blobs?apiVersion=2022-11-28#create-a-blob), [AUTOTITLE](/rest/git/trees?apiVersion=2022-11-28#create-a-tree), and [AUTOTITLE](/rest/repos/contents?apiVersion=2022-11-28#create-or-update-file-contents). ## Troubleshooting required status checks diff --git a/data/features/push-rule-allowed-exceptions.yml b/data/features/push-rule-allowed-exceptions.yml new file mode 100644 index 000000000000..54706be70602 --- /dev/null +++ b/data/features/push-rule-allowed-exceptions.yml @@ -0,0 +1,7 @@ +# Reference: github/releases#9966 +# "Allowed exceptions" (ignored_file_paths) for the Restrict file paths +# and Restrict file size push rules. +# GHES availability TBC — add a ghes key once confirmed. +versions: + fpt: '*' + ghec: '*' diff --git a/data/reusables/repositories/push-rulesets-overview.md b/data/reusables/repositories/push-rulesets-overview.md index 8f31149f487e..62cb7f324aba 100644 --- a/data/reusables/repositories/push-rulesets-overview.md +++ b/data/reusables/repositories/push-rulesets-overview.md @@ -7,9 +7,11 @@ Push rulesets allow you to: * **Restrict file paths:** Prevent commits that include changes in specified file paths from being pushed. {% data reusables.repositories.rulesets-push-rules-path-example %} + + {% ifversion push-rule-allowed-exceptions %}You can add allowed exceptions for paths that should remain pushable.{% endif %} * **Restrict file path length:** Prevent commits that include file paths that exceed a specified character limit from being pushed. * **Restrict file extensions:** Prevent commits that include files with specified file extensions from being pushed. -* **Restrict file size:** Prevent commits that exceed a specified file size limit from being pushed. +* **Restrict file size:** Prevent commits that exceed a specified file size limit from being pushed.{% ifversion push-rule-allowed-exceptions %} You can add allowed exceptions for files that may exceed the limit.{% endif %} ### About push rulesets for forked repositories diff --git a/data/reusables/repositories/rulesets-push-rules-allowed-exceptions.md b/data/reusables/repositories/rulesets-push-rules-allowed-exceptions.md new file mode 100644 index 000000000000..94a9ff188726 --- /dev/null +++ b/data/reusables/repositories/rulesets-push-rules-allowed-exceptions.md @@ -0,0 +1 @@ +Allowed exceptions use `fnmatch` syntax and are validated when you save the ruleset. For example, `**/gradle/wrapper/*.jar` allows the Gradle wrapper JAR file in any directory. diff --git a/data/reusables/repositories/rulesets-push-rules-step.md b/data/reusables/repositories/rulesets-push-rules-step.md index b32dc971c963..4b8b251c9789 100644 --- a/data/reusables/repositories/rulesets-push-rules-step.md +++ b/data/reusables/repositories/rulesets-push-rules-step.md @@ -5,3 +5,8 @@ Any push protections you configure will block pushes in this repository and thro 1. Under "Push protections," click the restrictions you want to apply. Then fill in the details for the restrictions you select. For file path restrictions, you can use partial or full paths. {% data reusables.repositories.rulesets-push-rules-path-example %} +{%- ifversion push-rule-allowed-exceptions %} +1. Optionally, for the "Restrict file paths" and "Restrict file size" restrictions, under "Allowed exceptions," add the file paths you want to exempt from the restriction. + + {% data reusables.repositories.rulesets-push-rules-allowed-exceptions %} +{%- endif %} From b2c61a24fb4dad892cc8556a2561cccf7a429b25 Mon Sep 17 00:00:00 2001 From: Ben Ahmady <32935794+subatoi@users.noreply.github.com> Date: Tue, 25 Aug 2026 20:13:33 +0000 Subject: [PATCH 3/3] Enhance spammy PR check to include empty commits (#62920) --- .../{check-for-spammy-pr.yml => check-for-spammy-prs.yml} | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename .github/workflows/{check-for-spammy-pr.yml => check-for-spammy-prs.yml} (94%) diff --git a/.github/workflows/check-for-spammy-pr.yml b/.github/workflows/check-for-spammy-prs.yml similarity index 94% rename from .github/workflows/check-for-spammy-pr.yml rename to .github/workflows/check-for-spammy-prs.yml index 130dd44e0346..59ba0d20f644 100644 --- a/.github/workflows/check-for-spammy-pr.yml +++ b/.github/workflows/check-for-spammy-prs.yml @@ -35,10 +35,11 @@ jobs: }); const onlyDeletes = files.length > 0 && files.every(f => f.status === 'removed') + const emptyCommit = !files.length const touchesTooMany = files.length > 10 // Close the PR and add the invalid label - if (onlyDeletes || touchesTooMany) { + if (onlyDeletes || emptyCommit || touchesTooMany) { await github.rest.issues.update({ owner: owner, repo: repo,