diff --git a/content/code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/about-enabling-security-features-at-scale.md b/content/code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/about-enabling-security-features-at-scale.md index 391210b038a2..9690fe99c63b 100644 --- a/content/code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/about-enabling-security-features-at-scale.md +++ b/content/code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/about-enabling-security-features-at-scale.md @@ -48,6 +48,8 @@ You can customize {% data variables.product.prodname_security_configurations %}, You will only ever see enablement settings for features that have been installed on your {% data variables.product.prodname_ghe_server %} instance by an enterprise administrator. +To learn how to create {% data variables.product.prodname_custom_security_configurations %}, see [AUTOTITLE](/code-security/securing-your-organization/enabling-security-features-in-your-organization/creating-a-custom-security-configuration). + {% endif %} {% data reusables.code-scanning.custom-security-configuration-enforcement-edge-cases %} diff --git a/content/copilot/concepts/billing/copilot-requests.md b/content/copilot/concepts/billing/copilot-requests.md index 04208cb0cd3f..2fc06fd7b4f9 100644 --- a/content/copilot/concepts/billing/copilot-requests.md +++ b/content/copilot/concepts/billing/copilot-requests.md @@ -91,24 +91,7 @@ Each model has a premium request multiplier, based on its complexity and resourc If you use **{% data variables.copilot.copilot_free_short %}**, you have access to a limited number of models, and each model will consume one premium request when used. For example, if you make a request using the {% data variables.copilot.copilot_gemini_flash %} model, your interaction will consume **one premium request**, not 0.25 premium requests. -{% rowheaders %} - -| Model | Multiplier for **paid plans** | Multiplier for **{% data variables.copilot.copilot_free_short %}** | -|----------------------------------------------------------------|--------------------------------|-----------------------| -| {% data variables.copilot.copilot_gpt_41 %} | 0 | 1 | -| {% data variables.copilot.copilot_gpt_4o %} | 0 | 1 | -| {% data variables.copilot.copilot_claude_sonnet_35 %} | 1 | 1 | -| {% data variables.copilot.copilot_claude_sonnet_37 %} | 1 | Not applicable | -| {% data variables.copilot.copilot_claude_sonnet_37 %} Thinking | 1.25 | Not applicable | -| {% data variables.copilot.copilot_claude_sonnet_40 %} | 1 | Not applicable | -| {% data variables.copilot.copilot_claude_opus_41 %} | 10 | Not applicable | -| {% data variables.copilot.copilot_claude_opus %} | 10 | Not applicable | -| {% data variables.copilot.copilot_gemini_flash %} | 0.25 | 1 | -| {% data variables.copilot.copilot_gemini_25_pro %} | 1 | Not applicable | -| {% data variables.copilot.copilot_o3 %} | 1 | Not applicable | -| {% data variables.copilot.copilot_o4_mini %} | 0.33 | Not applicable | - -{% endrowheaders %} +{% data reusables.copilot.model-multipliers %} ## Examples of premium request usage diff --git a/content/copilot/how-tos/configure-personal-settings/configure-network-settings.md b/content/copilot/how-tos/configure-personal-settings/configure-network-settings.md index e578dc0adb50..bd81106d64a2 100644 --- a/content/copilot/how-tos/configure-personal-settings/configure-network-settings.md +++ b/content/copilot/how-tos/configure-personal-settings/configure-network-settings.md @@ -74,13 +74,15 @@ If you have configured a proxy but are still encountering connection errors, see While {% data variables.product.prodname_copilot_short %} for {% data variables.product.prodname_vs %} reads the proxy settings from Windows, it does not retrieve authentication credentials from those Windows settings. If you need to authenticate to a proxy, you can try one of the below: -1. Enable passing default proxy credentials by setting the environment variable `COPILOT_USE_DEFAULTPROXY` to `true`. - - **Windows example**: Open the Command Prompt and run the following command: - ``` +1. Enable passing default proxy credentials by setting the environment variable `COPILOT_USE_DEFAULTPROXY` to `true`. + * **Windows example**: Open the Command Prompt and run the following command: + + ```bash setx COPILOT_USE_DEFAULTPROXY true ``` + This sets the variable permanently for your user account. Restart any applications that need to use this variable. -2. You can include your credentials in the proxy URL (for example: `http://USERNAME:PASSWORD@10.203.0.1:5187/`), then set this URL as one of the supported environment variables listed in [Proxy settings for {% data variables.product.prodname_copilot_short %}](/copilot/concepts/network-settings-for-github-copilot#proxy-settings-for-copilot). +1. You can include your credentials in the proxy URL (for example: `http://USERNAME:PASSWORD@10.203.0.1:5187/`), then set this URL as one of the supported environment variables listed in [Proxy settings for {% data variables.product.prodname_copilot_short %}](/copilot/concepts/network-settings-for-github-copilot#proxy-settings-for-copilot). {% endvisualstudio %} diff --git a/content/copilot/how-tos/use-chat/use-chat-in-github.md b/content/copilot/how-tos/use-chat/use-chat-in-github.md index ffd9aee0ea4c..7fd7fb79afaf 100644 --- a/content/copilot/how-tos/use-chat/use-chat-in-github.md +++ b/content/copilot/how-tos/use-chat/use-chat-in-github.md @@ -140,6 +140,7 @@ You can attach an image to {% data variables.product.prodname_copilot_short %} a 1. If you see the AI model picker at the top of the page, select one of the models that supports adding images to prompts: * {% data variables.copilot.copilot_gpt_41 %} (the default that's used if you don't see a model picker) + * {% data variables.copilot.copilot_gpt_5 %} * {% data variables.copilot.copilot_claude_sonnet_35 %} * {% data variables.copilot.copilot_claude_sonnet_37 %} * {% data variables.copilot.copilot_gemini_flash %} diff --git a/content/copilot/reference/ai-models/model-comparison.md b/content/copilot/reference/ai-models/model-comparison.md index 4070716b163c..16ab8c03fbfa 100644 --- a/content/copilot/reference/ai-models/model-comparison.md +++ b/content/copilot/reference/ai-models/model-comparison.md @@ -26,6 +26,7 @@ Use this table to find a suitable model quickly, see more detail in the sections | Model | Task area | Excels at (primary use case) | Additional capabilities | |-------------------------------------------------------|-----------|-------------------------------|--------------------------| | {% data variables.copilot.copilot_gpt_41 %} | General-purpose coding and writing | Fast, accurate code completions and explanations | Agent mode, vision | +| {% data variables.copilot.copilot_gpt_5 %} | Deep reasoning and debugging | Multi-step problem solving and architecture-level code analysis | Reasoning | | {% data variables.copilot.copilot_o3 %} | Deep reasoning and debugging | Multi-step problem solving and architecture-level code analysis | Reasoning | | {% data variables.copilot.copilot_o4_mini %} | Fast help with simple or repetitive tasks | Fast, reliable answers to lightweight coding questions | Lower latency | | {% data variables.copilot.copilot_claude_opus_41 %} | Deep reasoning and debugging | Complex problem-solving challenges, sophisticated reasoning | Reasoning, vision | @@ -44,8 +45,8 @@ Use these models for common development tasks that require a balance of quality, |-------|---------------------| | {% data variables.copilot.copilot_gpt_41 %} | Reliable default for most coding and writing tasks. Fast, accurate, and works well across languages and frameworks. | | {% data variables.copilot.copilot_claude_sonnet_37 %} | Produces clear, structured output. Follows formatting instructions and maintains consistent style. | -| {% data variables.copilot.copilot_gemini_flash %} | Fast and cost-effective. Well suited for quick questions, short code snippets, and lightweight writing tasks. | -| {% data variables.copilot.copilot_o4_mini %} | Optimized for speed and cost efficiency. Ideal for real-time suggestions with low usage overhead. | +| {% data variables.copilot.copilot_gemini_flash %} | Fast and cost-effective. Well suited for quick questions, short code snippets, and lightweight writing tasks. | +| {% data variables.copilot.copilot_o4_mini %} | Optimized for speed and cost efficiency. Ideal for real-time suggestions with low usage overhead. | ### When to use these models @@ -66,11 +67,11 @@ These models are optimized for speed and responsiveness. They’re ideal for qui ### Recommended models -| Model | Why it's a good fit | -|-------|---------------------| -| {% data variables.copilot.copilot_o4_mini %} | A quick and cost-effective model for repetitive or simple coding tasks. Offers clear, concise suggestions. | -| {% data variables.copilot.copilot_claude_sonnet_35 %} | Balances fast responses with quality output. Ideal for small tasks and lightweight code explanations. | -| {% data variables.copilot.copilot_gemini_flash %} | Extremely low latency and multimodal support (where available). Great for fast, interactive feedback. | +| Model | Why it's a good fit | +|-----------------------------------------------------------|------------------------------------------------------------------------------------------------------------| +| {% data variables.copilot.copilot_o4_mini %} | A quick and cost-effective model for repetitive or simple coding tasks. Offers clear, concise suggestions. | +| {% data variables.copilot.copilot_claude_sonnet_35 %} | Balances fast responses with quality output. Ideal for small tasks and lightweight code explanations. | +| {% data variables.copilot.copilot_gemini_flash %} | Extremely low latency and multimodal support (where available). Great for fast, interactive feedback. | ### When to use these models @@ -92,14 +93,15 @@ These models are designed for tasks that require step-by-step reasoning, complex ### Recommended models -| Model | Why it's a good fit | -|-------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------| -| {% data variables.copilot.copilot_o3 %} | Strong at algorithm design, system debugging, and architecture decisions. Balances performance and reasoning. | -| {% data variables.copilot.copilot_claude_sonnet_37 %} | Provides hybrid reasoning that adapts to both fast tasks and deeper thinking. | -| {% data variables.copilot.copilot_claude_sonnet_40 %} | Improves on 3.7 with more reliable completions and smarter reasoning under pressure. | -| {% data variables.copilot.copilot_claude_opus_41 %} | Anthropic’s most powerful model. Improves on {% data variables.copilot.copilot_claude_opus %}. | -| {% data variables.copilot.copilot_claude_opus %} | Strong at strategy, debugging, and multi-layered logic. | -| {% data variables.copilot.copilot_gemini_25_pro %} | Advanced reasoning across long contexts and scientific or technical analysis. | +| Model | Why it's a good fit | +|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------------| +| {% data variables.copilot.copilot_gpt_5 %} | Great at complex reasoning, code analysis, and technical decision-making. | +| {% data variables.copilot.copilot_o3 %} | Strong at algorithm design, system debugging, and architecture decisions. Balances performance and reasoning. | +| {% data variables.copilot.copilot_claude_sonnet_37 %} | Provides hybrid reasoning that adapts to both fast tasks and deeper thinking. | +| {% data variables.copilot.copilot_claude_sonnet_40 %} | Improves on 3.7 with more reliable completions and smarter reasoning under pressure. | +| {% data variables.copilot.copilot_claude_opus_41 %} | Anthropic’s most powerful model. Improves on {% data variables.copilot.copilot_claude_opus %}. | +| {% data variables.copilot.copilot_claude_opus %} | Strong at strategy, debugging, and multi-layered logic. | +| {% data variables.copilot.copilot_gemini_25_pro %} | Advanced reasoning across long contexts and scientific or technical analysis. | ### When to use these models diff --git a/content/copilot/reference/ai-models/model-hosting.md b/content/copilot/reference/ai-models/model-hosting.md index 3cd72c220fd3..d221d04793fe 100644 --- a/content/copilot/reference/ai-models/model-hosting.md +++ b/content/copilot/reference/ai-models/model-hosting.md @@ -19,10 +19,13 @@ contentType: reference Used for: * {% data variables.copilot.copilot_gpt_41 %} +* {% data variables.copilot.copilot_gpt_5 %} * {% data variables.copilot.copilot_o3 %} * {% data variables.copilot.copilot_o4_mini %} -{% data variables.copilot.copilot_gpt_41 %} is hosted by {% data variables.product.github %}'s Azure tenant when used in {% data variables.product.prodname_copilot %}. {% data variables.copilot.copilot_o3 %} and {% data variables.copilot.copilot_o4_mini %} models are hosted by OpenAI and {% data variables.product.github %}'s Azure tenant. OpenAI makes the [following data commitment](https://openai.com/enterprise-privacy/): _We [OpenAI] do not train our models on your business data by default_. {% data variables.product.github %} maintains a [zero data retention agreement](https://platform.openai.com/docs/guides/your-data) with OpenAI. +{% data variables.copilot.copilot_gpt_41 %} is hosted by {% data variables.product.github %}'s Azure tenant when used in {% data variables.product.prodname_copilot %}. + +{% data variables.copilot.copilot_gpt_5 %}, {% data variables.copilot.copilot_o3 %} and {% data variables.copilot.copilot_o4_mini %} models are hosted by OpenAI and {% data variables.product.github %}'s Azure tenant. OpenAI makes the [following data commitment](https://openai.com/enterprise-privacy/): _We [OpenAI] do not train our models on your business data by default_. {% data variables.product.github %} maintains a [zero data retention agreement](https://platform.openai.com/docs/guides/your-data) with OpenAI. When using OpenAI's models, input requests and output responses continue to run through {% data variables.product.prodname_copilot %}'s content filters for public code matching, when applied, along with those for harmful or offensive content. diff --git a/content/copilot/reference/ai-models/supported-models.md b/content/copilot/reference/ai-models/supported-models.md index 4cad2eaad7bc..fc7ea25552bd 100644 --- a/content/copilot/reference/ai-models/supported-models.md +++ b/content/copilot/reference/ai-models/supported-models.md @@ -38,6 +38,7 @@ This table lists the AI models available in {% data variables.product.prodname_c | Model name | Provider | Release status | Agent mode | Ask mode | Edit mode | |----------------------------------------------------------------|----------|--------------|------------|----------------------|---------------| | {% data variables.copilot.copilot_gpt_41 %} | OpenAI | GA | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| {% data variables.copilot.copilot_gpt_5 %} | OpenAI | {% data variables.release-phases.public_preview_caps %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | {% data variables.copilot.copilot_o3 %} | OpenAI | {% data variables.release-phases.public_preview_caps %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | {% data variables.copilot.copilot_o4_mini %} | OpenAI | {% data variables.release-phases.public_preview_caps %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | {% data variables.copilot.copilot_claude_opus_41 %} | Anthropic | {% data variables.release-phases.public_preview_caps %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | @@ -57,19 +58,20 @@ The following table shows which models are available in each client. {% rowheaders %} -| Model | {% data variables.product.prodname_dotcom_the_website %} | {% data variables.product.prodname_vscode %} | {% data variables.product.prodname_vs %} | Eclipse | Xcode | JetBrains IDEs | -|----------------------------------------------------------------|------------|---------|---------------------------------------------|---------------------------------------------|---------------------------------------------|---------------------------------------------| -| {% data variables.copilot.copilot_gpt_41 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | -| {% data variables.copilot.copilot_o3 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | -| {% data variables.copilot.copilot_o4_mini %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | -| {% data variables.copilot.copilot_claude_opus_41 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | -| {% data variables.copilot.copilot_claude_opus %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | -| {% data variables.copilot.copilot_claude_sonnet_35 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | -| {% data variables.copilot.copilot_claude_sonnet_37 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | -| {% data variables.copilot.copilot_claude_sonnet_37 %} Thinking | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | -| {% data variables.copilot.copilot_claude_sonnet_40 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | -| {% data variables.copilot.copilot_gemini_25_pro %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | -| {% data variables.copilot.copilot_gemini_flash %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| Model | {% data variables.product.prodname_dotcom_the_website %} | {% data variables.product.prodname_vscode %} | {% data variables.product.prodname_vs %} | Eclipse | Xcode | JetBrains IDEs | +|----------------------------------------------------------------|------------|---------|----------------------------------------------|---------------------------------------------|---------------------------------------------|---------------------------------------------| +| {% data variables.copilot.copilot_gpt_41 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| {% data variables.copilot.copilot_gpt_5 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | +| {% data variables.copilot.copilot_o3 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| {% data variables.copilot.copilot_o4_mini %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| {% data variables.copilot.copilot_claude_opus_41 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | +| {% data variables.copilot.copilot_claude_opus %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| {% data variables.copilot.copilot_claude_sonnet_35 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| {% data variables.copilot.copilot_claude_sonnet_37 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| {% data variables.copilot.copilot_claude_sonnet_37 %} Thinking | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| {% data variables.copilot.copilot_claude_sonnet_40 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| {% data variables.copilot.copilot_gemini_25_pro %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| {% data variables.copilot.copilot_gemini_flash %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% endrowheaders %} @@ -85,24 +87,7 @@ Each model has a premium request multiplier, based on its complexity and resourc For more information about premium requests, see [AUTOTITLE](/copilot/managing-copilot/monitoring-usage-and-entitlements/about-premium-requests). -{% rowheaders %} - -| Model | Multiplier for **paid plans** | Multiplier for **{% data variables.copilot.copilot_free_short %}** | -|----------------------------------------------------------------|-------------------------------|-------------------------------------------------| -| {% data variables.copilot.copilot_gpt_41 %} | 0 | 1 | -| {% data variables.copilot.copilot_gpt_4o %} | 0 | 1 | -| {% data variables.copilot.copilot_o3 %} | 1 | Not applicable | -| {% data variables.copilot.copilot_o4_mini %} | 0.33 | Not applicable | -| {% data variables.copilot.copilot_claude_opus_41 %} | 10 | Not applicable | -| {% data variables.copilot.copilot_claude_opus %} | 10 | Not applicable | -| {% data variables.copilot.copilot_claude_sonnet_35 %} | 1 | 1 | -| {% data variables.copilot.copilot_claude_sonnet_37 %} | 1 | Not applicable | -| {% data variables.copilot.copilot_claude_sonnet_37 %} Thinking | 1.25 | Not applicable | -| {% data variables.copilot.copilot_claude_sonnet_40 %} | 1 | Not applicable | -| {% data variables.copilot.copilot_gemini_25_pro %} | 1 | Not applicable | -| {% data variables.copilot.copilot_gemini_flash %} | 0.25 | 1 | - -{% endrowheaders %} +{% data reusables.copilot.model-multipliers %} ## Next steps diff --git a/content/copilot/tutorials/coding-agent/get-the-best-results.md b/content/copilot/tutorials/coding-agent/get-the-best-results.md index 69f03202e065..0df4525b4190 100644 --- a/content/copilot/tutorials/coding-agent/get-the-best-results.md +++ b/content/copilot/tutorials/coding-agent/get-the-best-results.md @@ -77,7 +77,13 @@ By adding custom instructions to your repository, you can guide {% data variable If {% data variables.product.prodname_copilot_short %} is able to build, test and validate its changes in its own development environment, it is more likely to produce good pull requests which can be merged quickly. -You can add instructions in a single `.github/copilot-instructions.md` file in the repository, or create one or more `.github/instructions/**/*.instructions.md` files applying to different files or directories in your repository. For more information, see [AUTOTITLE](/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot?tool=webui). +You can add instructions in a single `.github/copilot-instructions.md` file in the repository, or create one or more `.github/instructions/**/*.instructions.md` files applying to different files or directories in your repository. + +For more information, see [AUTOTITLE](/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot?tool=webui). + +### Repository-wide instructions + +To add instructions that apply to all tasks assigned to {% data variables.product.prodname_copilot_short %} in your repository, create a `.github/copilot-instructions.md` file in the root of your repository. This file should contain information about your project, such as how to build and test it, and any coding standards or conventions you want {% data variables.product.prodname_copilot_short %} to follow. Note that the instructions will also apply to {% data variables.copilot.copilot_chat_short %} and {% data variables.copilot.copilot_code-review_short %}. The first time you ask {% data variables.product.prodname_copilot_short %} to create a pull request in a given repository, {% data variables.product.prodname_copilot_short %} will leave a comment with a link to automatically generate custom instructions. You can also ask {% data variables.product.prodname_copilot_short %} to generate custom instructions for you at any time using our recommended prompt. See [AUTOTITLE](/copilot/how-tos/configure-custom-instructions/add-repository-instructions?tool=webui#asking-copilot-coding-agent-to-generate-a-githubcopilot-instructionsmd-file). @@ -116,7 +122,33 @@ This is a Go based repository with a Ruby client for certain API endpoints. It i 5. Document public APIs and complex logic. Suggest changes to the `docs/` folder when appropriate ``` -If you choose not to include any {% data variables.product.prodname_copilot_short %} instructions files in your repository, {% data variables.product.prodname_copilot_short %} will fall back to pre-existing custom instructions including `CLAUDE.md`, `AGENTS.md` and `GEMINI.md`. +### Path-specific instructions + +To add instructions that apply to specific types of files {% data variables.product.prodname_copilot_short %} will work on, like unit tests or React components, create one or more `.github/instructions/**/*.instructions.md` files in your repository. +In these files, include information about the file types, such as how to build and test them, and any coding standards or conventions you want {% data variables.product.prodname_copilot_short %} to follow. + +Using the glob pattern in the front matter of the instructions file, you can specify the file types to which they should apply. For example, to create instructions for Playwright tests you could create an instructions file called `.github/instructions/playwright-tests.instructions.md` with the following content: + +```markdown +--- +applyTo: "**/tests/*.spec.ts" +--- + +## Playwright test requirements + +When writing Playwright tests, please follow these guidelines to ensure consistency and maintainability: + +1. **Use stable locators** - Prefer `getByRole()`, `getByText()`, and `getByTestId()` over CSS selectors or XPath +1. **Write isolated tests** - Each test should be independent and not rely on other tests' state +1. **Follow naming conventions** - Use descriptive test names and `*.spec.ts` file naming +1. **Implement proper assertions** - Use Playwright's `expect()` with specific matchers like `toHaveText()`, `toBeVisible()` +1. **Leverage auto-wait** - Avoid manual `setTimeout()` and rely on Playwright's built-in waiting mechanisms +1. **Configure cross-browser testing** - Test across Chromium, Firefox, and WebKit browsers +1. **Use Page Object Model** - Organize selectors and actions into reusable page classes for maintainability +1. **Handle dynamic content** - Properly wait for elements to load and handle loading states +1. **Set up proper test data** - Use beforeEach/afterEach hooks for test setup and cleanup +1. **Configure CI/CD integration** - Set up headless mode, screenshots on failure, and parallel execution +``` ## Using the Model Context Protocol (MCP) diff --git a/content/site-policy/github-terms/github-pre-release-license-terms.md b/content/site-policy/github-terms/github-pre-release-license-terms.md index 41f09def8a7e..4a802d5ee077 100644 --- a/content/site-policy/github-terms/github-pre-release-license-terms.md +++ b/content/site-policy/github-terms/github-pre-release-license-terms.md @@ -18,7 +18,7 @@ These terms apply to the pre-release software made available to you by GitHub. T ## 1. Pre-Release Software. - The software provided is a pre-release version. “Pre-release” means software, online services, and additional products and features that are not yet generally available, such as alpha, beta, early access, technical preview, or similar versions. + The software provided is a pre-release version. “Pre-release” means software, online services, and additional products and features that are not yet generally available, such as private preview, public preview, early access, technical preview, or similar versions. Pre-release software may not operate correctly. It may delete your data, corrupt your data, or have other bugs. It also may not work the way a final commercial version of the software will. diff --git a/data/reusables/copilot/available-models-per-plan.md b/data/reusables/copilot/available-models-per-plan.md index d951ca267068..b4e397079191 100644 --- a/data/reusables/copilot/available-models-per-plan.md +++ b/data/reusables/copilot/available-models-per-plan.md @@ -1,8 +1,9 @@ {% rowheaders %} | Available models in chat | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} | -|----------------------------------------------------------------|--------------------------------------------------|--------------------------------------------------|------------------------------------------------------|-------------------------------------------------------|----------------------------------------------------------| +|----------------------------------------------------------------|-------------------------------------------------|--------------------------------------------------|------------------------------------------------------|-------------------------------------------------------|----------------------------------------------------------| | {% data variables.copilot.copilot_gpt_41 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| {% data variables.copilot.copilot_gpt_5 %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | {% data variables.copilot.copilot_o3 %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | | {% data variables.copilot.copilot_o4_mini %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | {% data variables.copilot.copilot_claude_opus_41 %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | diff --git a/data/reusables/copilot/model-multipliers.md b/data/reusables/copilot/model-multipliers.md new file mode 100644 index 000000000000..e75a46ff0d22 --- /dev/null +++ b/data/reusables/copilot/model-multipliers.md @@ -0,0 +1,19 @@ +{% rowheaders %} + +| Model | Multiplier for **paid plans** | Multiplier for **{% data variables.copilot.copilot_free_short %}** | +|----------------------------------------------------------------|-------------------------------|--------------------------------------------------------------------| +| {% data variables.copilot.copilot_gpt_41 %} | 0 | 1 | +| {% data variables.copilot.copilot_gpt_5 %} | 1 | Not applicable | +| {% data variables.copilot.copilot_gpt_4o %} | 0 | 1 | +| {% data variables.copilot.copilot_claude_sonnet_35 %} | 1 | 1 | +| {% data variables.copilot.copilot_claude_sonnet_37 %} | 1 | Not applicable | +| {% data variables.copilot.copilot_claude_sonnet_37 %} Thinking | 1.25 | Not applicable | +| {% data variables.copilot.copilot_claude_sonnet_40 %} | 1 | Not applicable | +| {% data variables.copilot.copilot_claude_opus_41 %} | 10 | Not applicable | +| {% data variables.copilot.copilot_claude_opus %} | 10 | Not applicable | +| {% data variables.copilot.copilot_gemini_flash %} | 0.25 | 1 | +| {% data variables.copilot.copilot_gemini_25_pro %} | 1 | Not applicable | +| {% data variables.copilot.copilot_o3 %} | 1 | Not applicable | +| {% data variables.copilot.copilot_o4_mini %} | 0.33 | Not applicable | + +{% endrowheaders %} diff --git a/data/variables/copilot.yml b/data/variables/copilot.yml index 6ee802ceabf7..fac5fed41e11 100644 --- a/data/variables/copilot.yml +++ b/data/variables/copilot.yml @@ -111,6 +111,7 @@ copilot_gemini_25_pro: 'Gemini 2.5 Pro' # OpenAI GPT series: copilot_gpt_41: 'GPT-4.1' copilot_gpt_4o: 'GPT-4o' +copilot_gpt_5: 'GPT-5' # OpenAI 'o' series: copilot_o3: 'o3' copilot_o4_mini: 'o4-mini' diff --git a/src/content-linter/lib/linting-rules/frontmatter-validation.js b/src/content-linter/lib/linting-rules/frontmatter-validation.js index 24c30ec493ac..60fa08efb908 100644 --- a/src/content-linter/lib/linting-rules/frontmatter-validation.js +++ b/src/content-linter/lib/linting-rules/frontmatter-validation.js @@ -1,6 +1,13 @@ import { addError } from 'markdownlint-rule-helpers' import { getFrontmatter } from '@/content-linter/lib/helpers/utils' +// Strip liquid tags from text for character counting purposes +function stripLiquidTags(text) { + if (typeof text !== 'string') return text + // Remove both {% %} and {{ }} liquid tags + return text.replace(/\{%.*?%\}/g, '').replace(/\{\{.*?\}\}/g, '') +} + export const frontmatterValidation = { names: ['GHD055', 'frontmatter-validation'], description: @@ -75,12 +82,13 @@ export const frontmatterValidation = { } // Cross-property validation: if title is longer than shortTitle limit, shortTitle must exist - if (fm.title && fm.title.length > rules.shortTitle.max && !fm.shortTitle) { + const strippedTitle = stripLiquidTags(fm.title) + if (fm.title && strippedTitle.length > rules.shortTitle.max && !fm.shortTitle) { const titleLine = findPropertyLine(params.lines, 'title') addError( onError, titleLine, - `Title is ${fm.title.length} characters, which exceeds the shortTitle limit of ${rules.shortTitle.max} characters. A shortTitle must be provided.`, + `Title is ${strippedTitle.length} characters, which exceeds the shortTitle limit of ${rules.shortTitle.max} characters. A shortTitle must be provided.`, fm.title, null, null, @@ -108,7 +116,8 @@ export const frontmatterValidation = { } function validatePropertyLength(onError, lines, propertyName, propertyValue, limits, displayName) { - const propertyLength = propertyValue.length + const strippedValue = stripLiquidTags(propertyValue) + const propertyLength = strippedValue.length const propertyLine = findPropertyLine(lines, propertyName) // Only report the most severe error - maximum takes precedence over recommended diff --git a/src/content-linter/tests/unit/frontmatter-validation.js b/src/content-linter/tests/unit/frontmatter-validation.js index be4a5d6baad0..30ce723e7a75 100644 --- a/src/content-linter/tests/unit/frontmatter-validation.js +++ b/src/content-linter/tests/unit/frontmatter-validation.js @@ -501,4 +501,76 @@ topics: }) expect(articleResult['content/section/article.md']).toEqual([]) }) + + // Liquid variable handling tests + test('title with liquid variables counts characters correctly', async () => { + const markdown = `--- +title: 'Getting started with {% data variables.product.prodname_github %}' +topics: + - GitHub +--- +# Content +` + const result = await runRule(frontmatterValidation, { + strings: { 'content/section/article.md': markdown }, + ...fmOptions, + }) + // 'Getting started with ' (21 chars) + liquid tag (0 chars) = 21 chars, should pass + expect(result['content/section/article.md']).toEqual([]) + }) + + test('intro with liquid variables counts characters correctly', async () => { + const markdown = `--- +title: 'Article title' +intro: 'Learn how to use {% data variables.product.prodname_copilot %} for {{ something }}' +topics: + - GitHub +--- +# Content +` + const result = await runRule(frontmatterValidation, { + strings: { 'content/section/article.md': markdown }, + ...fmOptions, + }) + // 'Learn how to use for ' (21 chars) should pass + expect(result['content/section/article.md']).toEqual([]) + }) + + test('shortTitle with liquid variables counts characters correctly', async () => { + const markdown = `--- +title: 'This article title is exactly fifty characters!!!!' +shortTitle: '{% data variables.product.prodname_copilot_short %}' +topics: + - GitHub +--- +# Content +` + const result = await runRule(frontmatterValidation, { + strings: { 'content/section/article.md': markdown }, + ...fmOptions, + }) + // Liquid tag should count as 0 characters, should pass + expect(result['content/section/article.md']).toEqual([]) + }) + + test('long text with liquid variables still fails when limit exceeded', async () => { + const longText = 'A'.repeat(70) // 70 chars + const markdown = `--- +title: '${longText} {% data variables.product.prodname_github %} extra text' +shortTitle: 'Short title' +topics: + - GitHub +--- +# Content +` + const result = await runRule(frontmatterValidation, { + strings: { 'content/section/article.md': markdown }, + ...fmOptions, + }) + // 70 A's + 1 space + 0 (liquid tag) + 1 space + 10 ('extra text') = 82 chars, should exceed 80 char limit for articles + expect(result['content/section/article.md']).toHaveLength(1) + expect(result['content/section/article.md'][0].errorDetail).toContain( + 'exceeds maximum length of 80 characters', + ) + }) }) diff --git a/src/secret-scanning/data/public-docs.yml b/src/secret-scanning/data/public-docs.yml index 6f241c23c5fd..77fc6882a127 100644 --- a/src/secret-scanning/data/public-docs.yml +++ b/src/secret-scanning/data/public-docs.yml @@ -93,6 +93,17 @@ hasPushProtection: true hasValidityCheck: false isduplicate: false +- provider: Airtable + supportedSecret: Airtable API Key + secretType: airtable_api_key + versions: + fpt: '*' + ghec: '*' + isPublic: false + isPrivateWithGhas: true + hasPushProtection: false + hasValidityCheck: false + isduplicate: false - provider: Airtable supportedSecret: Airtable Personal Access Token secretType: airtable_personal_access_token @@ -255,7 +266,7 @@ isPublic: true isPrivateWithGhas: true hasPushProtection: true - hasValidityCheck: false + hasValidityCheck: '{% ifversion fpt or ghes %}false{% else %}true{% endif %}' isduplicate: false - provider: Apify supportedSecret: Apify Integration API Token @@ -311,7 +322,7 @@ isPublic: true isPrivateWithGhas: true hasPushProtection: false - hasValidityCheck: false + hasValidityCheck: '{% ifversion fpt or ghes %}false{% else %}true{% endif %}' isduplicate: false - provider: Asana supportedSecret: Asana Legacy Format Personal Access Token @@ -1644,6 +1655,17 @@ hasPushProtection: false hasValidityCheck: '{% ifversion fpt or ghes %}false{% else %}true{% endif %}' isduplicate: false +- provider: Cohere + supportedSecret: Cohere API Key + secretType: cohere_api_key + versions: + fpt: '*' + ghec: '*' + isPublic: false + isPrivateWithGhas: true + hasPushProtection: false + hasValidityCheck: false + isduplicate: false - provider: Contentful supportedSecret: Contentful Personal Access Token secretType: contentful_personal_access_token @@ -1784,6 +1806,17 @@ hasPushProtection: true hasValidityCheck: false isduplicate: false +- provider: DeepSeek + supportedSecret: DeepSeek API Key + secretType: deepseek_api_key + versions: + fpt: '*' + ghec: '*' + isPublic: false + isPrivateWithGhas: true + hasPushProtection: false + hasValidityCheck: false + isduplicate: false - provider: Defined Networking supportedSecret: Defined Networking Managed Nebula API Key secretType: defined_networking_nebula_api_key @@ -2447,6 +2480,17 @@ hasPushProtection: false hasValidityCheck: false isduplicate: false +- provider: Google + supportedSecret: Google Gemini API Key + secretType: google_gemini_api_key + versions: + fpt: '*' + ghec: '*' + isPublic: false + isPrivateWithGhas: true + hasPushProtection: false + hasValidityCheck: false + isduplicate: false - provider: Google supportedSecret: Google OAuth Access Token secretType: google_oauth_access_token @@ -3208,6 +3252,17 @@ hasPushProtection: false hasValidityCheck: '{% ifversion fpt or ghes %}false{% else %}true{% endif %}' isduplicate: false +- provider: Mistral AI + supportedSecret: Mistral AI API Key + secretType: mistral_ai_api_key + versions: + fpt: '*' + ghec: '*' + isPublic: false + isPrivateWithGhas: true + hasPushProtection: false + hasValidityCheck: false + isduplicate: false - provider: MongoDB supportedSecret: MongoDB Atlas Database URI with credentials secretType: mongodb_atlas_db_uri_with_credentials @@ -3601,6 +3656,17 @@ hasPushProtection: false hasValidityCheck: '{% ifversion fpt or ghes %}false{% else %}true{% endif %}' isduplicate: false +- provider: Openweather + supportedSecret: Openweather API Key + secretType: openweather_api_key + versions: + fpt: '*' + ghec: '*' + isPublic: false + isPrivateWithGhas: true + hasPushProtection: false + hasValidityCheck: false + isduplicate: false - provider: Oracle supportedSecret: Oracle API Key secretType: oracle_api_key @@ -3825,7 +3891,7 @@ isPublic: true isPrivateWithGhas: true hasPushProtection: true - hasValidityCheck: false + hasValidityCheck: '{% ifversion fpt or ghes %}false{% else %}true{% endif %}' isduplicate: true - provider: Polar supportedSecret: Polar Authorization Code @@ -4745,7 +4811,7 @@ isPublic: true isPrivateWithGhas: true hasPushProtection: true - hasValidityCheck: false + hasValidityCheck: '{% ifversion fpt or ghes %}false{% else %}true{% endif %}' isduplicate: false - provider: Tencent supportedSecret: Tencent Cloud International Access Token @@ -4875,7 +4941,7 @@ isPublic: true isPrivateWithGhas: true hasPushProtection: false - hasValidityCheck: false + hasValidityCheck: '{% ifversion fpt or ghes %}false{% else %}true{% endif %}' isduplicate: false - provider: VolcEngine supportedSecret: VolcEngine Access Key ID @@ -4937,6 +5003,17 @@ hasPushProtection: true hasValidityCheck: false isduplicate: false +- provider: Weights & Biases + supportedSecret: Weights & Biases API Key + secretType: wandb_api_key + versions: + fpt: '*' + ghec: '*' + isPublic: false + isPrivateWithGhas: true + hasPushProtection: false + hasValidityCheck: false + isduplicate: false - provider: Workato supportedSecret: Workato Developer API Token secretType: workato_developer_api_token @@ -4995,7 +5072,7 @@ isPublic: true isPrivateWithGhas: true hasPushProtection: true - hasValidityCheck: false + hasValidityCheck: '{% ifversion fpt or ghes %}false{% else %}true{% endif %}' isduplicate: false - provider: Yandex supportedSecret: Yandex.Cloud Access Secret diff --git a/src/secret-scanning/lib/config.json b/src/secret-scanning/lib/config.json index baeddd0852f3..1f9099c41243 100644 --- a/src/secret-scanning/lib/config.json +++ b/src/secret-scanning/lib/config.json @@ -1,5 +1,5 @@ { - "sha": "6af3bfd9795fa59230b4b15a3dd3430bd8a56471", - "blob-sha": "82a5b9b18e636cee68f89416285173f5550520f5", + "sha": "6342aef15dffcceea40bb9c859198fa79b06737c", + "blob-sha": "a0ed32cd3fd7c04d2ec262576a3a8ec7a91ddad9", "targetFilename": "code-security/secret-scanning/introduction/supported-secret-scanning-patterns" } \ No newline at end of file