Skip to content

Commit f0d5c53

Browse files
authored
Merge pull request #44911 from github/repo-sync
Repo sync
2 parents 11c574a + ea1eb47 commit f0d5c53

34 files changed

Lines changed: 249 additions & 425 deletions

File tree

.github/agents/driver-writer.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
---
2+
3+
name: "Driver-Writer"
4+
description: "Use when writing, editing, or reviewing content for the Driver persona: enterprise administrators, platform engineers, billing managers, security leads, and others who enable developers at scale."
5+
tools: ['read', 'edit/editFiles', 'search']
6+
7+
---
8+
9+
# Driver-Writer Agent
10+
11+
You are a writing assistant for the GitHub Docs team. You help writers create, edit, and review documentation that serves the **Driver persona**.
12+
13+
A Driver is any GitHub user who supports the work of multiple developers by making changes to GitHub at scale. They remove barriers and enable developers to work efficiently while providing guardrails for compliance and security. Drivers include enterprise administrators, billing managers, application security leads, CI/CD administrators, tech leads, and OS maintainers.
14+
15+
Our team prioritizes **self-serve enterprise customers** that use GitHub Enterprise but are not large enough to get dedicated support from a GitHub sales or success team. These customers rely heavily on documentation to set up and manage their enterprise. When making content decisions, optimize for this audience.
16+
17+
Drivers come from two broad backgrounds, and content should account for both:
18+
19+
* **IT administration**: Expects process and controls based on experience with other enterprise systems. May use terminology from other platforms when searching for information.
20+
* **Development**: Fewer preconceptions about enterprise administration. May have limited knowledge of best practices for setting up large systems.
21+
22+
## What makes Driver content different
23+
24+
Driver content is distinct from developer-focused (Builder) content in a few key ways. Apply these when writing or editing:
25+
26+
### Frame value in terms of the enterprise, not individual productivity
27+
28+
Builder content connects features to the developer's own workflow. Driver content should connect features to what Drivers care about: compliance, security posture, cost management, developer enablement at scale, and reducing operational risk.
29+
30+
* Instead of: "You can restrict email notifications for your enterprise."
31+
* Write: "You can prevent your enterprise's information from leaking into personal email accounts."
32+
33+
### Help Drivers make confident decisions
34+
35+
Drivers often face choices with long-lasting, hard-to-reverse consequences (e.g., choosing between EMU and classic authentication, selecting an identity provider, structuring enterprises and organizations). Content should present enough context for the reader to choose confidently: what the tradeoffs are, what most enterprises do, and what cannot be changed later.
36+
37+
### Write for people who manage GitHub, not people who use it to code
38+
39+
Drivers are configuring, monitoring, and governing, not writing code. They are less likely to want code examples and more likely to need:
40+
41+
* Clear explanations of how settings interact and propagate across an enterprise
42+
* Guidance on rollout sequence and dependencies between configuration steps
43+
* Visibility into what their developers will experience as a result of their changes
44+
45+
### Be explicit about policy scope and cascade
46+
47+
When writing about enterprise settings or policies, always clarify what level the setting operates at (enterprise, organization, repository) and how it cascades. Make it clear who controls the setting and whether lower levels can override it. When parallel articles exist for different levels (e.g., enterprise vs. org), keep the structure, terminology, and level of detail consistent between them.
48+
49+
### Flag specific high-risk claims for verification
50+
51+
Driver actions often affect an entire enterprise and can be hard to reverse, so a single inaccurate detail can have outsized consequences: a security gap, a compliance failure, unexpected cost, or an administrator locking themselves out. Do not flag an entire article as high-risk just because of its topic. Instead, identify the specific claims most likely to cause harm if wrong, and call each one out individually for the writer to verify.
52+
53+
Pay closest attention to discrete, checkable claims in these areas:
54+
55+
* Authentication and identity (e.g., specific SAML/SCIM attribute values, SSO setup steps)
56+
* Security and compliance policy behavior and enforcement
57+
* Billing, licensing, and spending controls (specific numbers, thresholds, what counts toward usage)
58+
* Irreversible or enterprise-wide configuration steps
59+
* Exact permission or role requirements for an action
60+
61+
For example, in an article about configuring SSO, do not say "verify this entire article." Instead, flag the specific risky claims, e.g.: "Step 6 says to set the SAML `NameID` to the user's email. Confirm the exact required attribute with the identity team, since the wrong value will block all sign-ins."
62+
63+
## Driver user journey
64+
65+
Drivers move through these phases with GitHub. Content should meet them where they are:
66+
67+
* **Evaluate**: Researching tools that add value for the team.
68+
* **Onboard**: Understanding best practices to configure the enterprise. Relying on documentation before reaching out to people.
69+
* **Adopt**: Monitoring rollout, managing licenses, evaluating ROI.
70+
* **Optimize**: Monitoring data, auditing configuration for efficiency.
71+
* **Sustain**: Promoting best practices, making minimal configuration changes.

.github/workflows/changelog-agent.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,7 @@ jobs:
591591
body: prBody,
592592
head: branchName,
593593
base: 'main',
594-
draft: true,
594+
draft: false,
595595
});
596596
597597
// Add labels
@@ -600,22 +600,22 @@ jobs:
600600
owner: 'github',
601601
repo: 'docs-content',
602602
issue_number: pullRequest.number,
603-
labels: ['ready-for-doc-review', 'skip FR board', 'llm-generated'],
603+
labels: ['skip FR board', 'llm-generated'],
604604
});
605605
} catch (err) {
606606
core.warning(`Failed to add labels: ${err.message}`);
607607
}
608608
609-
// Assign to PR author
609+
// Request review from PR author
610610
try {
611-
await github.rest.issues.addAssignees({
611+
await github.rest.pulls.requestReviewers({
612612
owner: 'github',
613613
repo: 'docs-content',
614-
issue_number: pullRequest.number,
615-
assignees: [process.env.PR_AUTHOR],
614+
pull_number: pullRequest.number,
615+
reviewers: [process.env.PR_AUTHOR],
616616
});
617617
} catch (err) {
618-
core.warning(`Failed to assign PR to @${process.env.PR_AUTHOR}: ${err.message}`);
618+
core.warning(`Failed to request review from @${process.env.PR_AUTHOR}: ${err.message}`);
619619
}
620620
621621
core.setOutput('changelog_pr_url', pullRequest.html_url);
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
---
2+
title: Configuring Elasticsearch Cross-Cluster Replication for high availability
3+
shortTitle: Elasticsearch Cross-Cluster Replication
4+
intro: 'You can make search more resilient during maintenance, failovers, and upgrades on a high availability deployment by enabling Elasticsearch Cross-Cluster Replication (CCR).'
5+
versions:
6+
ghes: '>=3.19'
7+
contentType: how-tos
8+
category:
9+
- Scale your instance
10+
---
11+
12+
## About Elasticsearch Cross-Cluster Replication
13+
14+
{% data variables.product.prodname_ghe_server %} uses Elasticsearch to power search across issues, pull requests, repositories, the projects and releases pages, and the counts shown throughout the web interface. Because search is central to the product, the reliability of Elasticsearch directly affects the day-to-day administration of your instance.
15+
16+
In a high availability (HA) configuration, {% data variables.product.prodname_ghe_server %} uses a leader/follower model. The primary appliance receives all writes and traffic, and replica appliances stay in sync as read-only standbys that can take over if the primary fails. For more information, see [AUTOTITLE](/admin/monitoring-and-managing-your-instance/configuring-high-availability/about-high-availability-configuration).
17+
18+
In earlier releases, Elasticsearch did not support this leader/follower model directly. To replicate search data, {% data variables.product.prodname_ghe_server %} ran a single Elasticsearch cluster that spanned the primary and replica appliances. This approach worked, but it introduced a class of problems: Elasticsearch could move a primary shard (the shard responsible for receiving and validating writes) onto a replica appliance. If that replica was then taken offline for maintenance, the instance could enter a locked state, because the replica waited for Elasticsearch to become healthy while Elasticsearch could not become healthy until the replica rejoined.
19+
20+
Elasticsearch Cross-Cluster Replication (CCR) removes this dependency. Instead of one cluster spanning every appliance, each appliance runs as an independent single-node Elasticsearch cluster. CCR then replicates index data between these clusters using a natively supported leader/follower pattern. Data is copied only after it has been durably persisted to the underlying Lucene segments, so replicas always follow data that has been safely written. As a result, a critical primary shard can no longer end up stranded on a read-only replica.
21+
22+
### Benefits
23+
24+
* **Fewer locked upgrades and maintenance windows.** Removing the circular dependency between the primary and replica appliances during maintenance reduces the risk of an instance becoming stuck.
25+
* **Stronger data protection.** Data is replicated only after it is durably saved, which helps prevent index corruption during failovers.
26+
* **Simpler operations.** The pattern reduces the need for manual index repairs that previously occurred when maintenance steps were performed out of order.
27+
28+
### Availability
29+
30+
Elasticsearch CCR is supported beginning with {% data variables.product.prodname_ghe_server %} 3.19.1. The feature is optional. {% data variables.product.company_short %} plans to make CCR the default HA search architecture over the following two years, so you have time to test it and provide feedback before it becomes the default.
31+
32+
## Requirements
33+
34+
Before you enable CCR, confirm the following.
35+
36+
* Your instance runs {% data variables.product.prodname_ghe_server %} 3.19.1 or later.
37+
* Your instance is configured for high availability with at least two appliances (a primary and one or more replicas).
38+
* You have an updated {% data variables.product.prodname_ghe_server %} license that includes the Elasticsearch entitlement required for CCR. Contact {% data variables.contact.contact_enterprise_sales %} or {% data variables.contact.github_support %} to have your enterprise enabled for the new license, then download the updated license file.
39+
40+
{% warning %}
41+
42+
**Warning:** When CCR is enabled, the upgrade preflight check requires a valid CCR-enabled license. If the flag is enabled and the license check fails, the upgrade will not proceed. Make sure your updated license is installed before you enable the feature or upgrade. If you are unsure whether your license includes the Elasticsearch entitlement, contact {% data variables.contact.github_support %}.
43+
44+
{% endwarning %}
45+
46+
## Enabling Elasticsearch Cross-Cluster Replication
47+
48+
{% note %}
49+
50+
**Note:** The migration may take a significant amount of time depending on the size of your instance, because search data is consolidated onto the primary before replication restarts. Plan to enable CCR during a maintenance window, and test the process in a non-production environment first. For more information, see [AUTOTITLE](/admin/upgrading-your-instance).
51+
52+
{% endnote %}
53+
54+
1. Contact {% data variables.contact.github_support %} and request access to the new HA search architecture. {% data variables.product.company_short %} will enable your enterprise so that you can download the required CCR-enabled license.
55+
1. Download your updated license and upload it to your instance. For more information, see [AUTOTITLE](/admin/overview/managing-your-github-enterprise-license).
56+
1. On the primary appliance, enable the feature.
57+
58+
```shell
59+
ghe-config app.elasticsearch.ccr true
60+
```
61+
62+
1. Apply the configuration by running a configuration run, or by upgrading the instance to 3.19.1 or later.
63+
64+
```shell
65+
ghe-config-apply
66+
```
67+
68+
1. When the instance restarts, Elasticsearch migrates the installation to the new replication method. This migration consolidates search data onto the primary, ends the cluster that previously spanned appliances, and restarts replication using CCR. During the migration, {% data variables.product.prodname_ghe_server %} attaches followers to your existing search indexes and enables an auto-follow rule so that any indexes created in the future are followed automatically.
69+
70+
## Using Elasticsearch Cross-Cluster Replication
71+
72+
### Verifying replication
73+
74+
After the migration completes, search continues to function normally and no change is required in how users search. To confirm replication health, generate a support bundle, which includes CCR status information for review. For more information, see [AUTOTITLE](/support/contacting-github-support/providing-data-to-github-support).
75+
76+
### Failover and disaster recovery
77+
78+
You continue to use the standard high availability replication utilities to manage replicas and to fail over. For more information, see [AUTOTITLE](/admin/monitoring-and-managing-your-instance/configuring-high-availability/initiating-a-failover-to-your-replica-appliance) and [AUTOTITLE](/admin/monitoring-and-managing-your-instance/configuring-high-availability/recovering-a-high-availability-configuration).
79+
80+
After a failover with CCR enabled, the promoted appliance becomes the new leader for search, and replicas re-follow its indexes as part of the standard recovery process. If you encounter errors related to search replication during or after a failover, contact {% data variables.contact.github_support %}.
81+
82+
### Disabling Elasticsearch Cross-Cluster Replication
83+
84+
{% warning %}
85+
86+
**Warning:** Do not disable CCR on a production instance without guidance from {% data variables.contact.github_support %}. Disabling CCR is not a routine self-service operation. Turning the feature off can trigger removal of replica Elasticsearch data as part of returning to the previous mode.
87+
88+
{% endwarning %}
89+
90+
If you need to return to the previous search architecture, contact {% data variables.contact.github_support %} before making any changes. {% data variables.product.company_short %} will help you confirm that your license, replication state, and upgrade path are handled safely.
91+
92+
## Further reading
93+
94+
* [AUTOTITLE](/admin/monitoring-and-managing-your-instance/configuring-high-availability/about-high-availability-configuration)
95+
* [AUTOTITLE](/admin/administering-your-instance/administering-your-instance-from-the-command-line/command-line-utilities)
96+
* [How we rebuilt the search architecture for high availability in GitHub Enterprise Server](https://github.blog/engineering/architecture-optimization/how-we-rebuilt-the-search-architecture-for-high-availability-in-github-enterprise-server/) on the {% data variables.product.prodname_blog %}

content/admin/monitoring-and-managing-your-instance/configuring-high-availability/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ versions:
1313
ghes: '*'
1414
children:
1515
- /about-high-availability-configuration
16+
- /elasticsearch-cross-cluster-replication
1617
- /answers-to-common-questions-about-high-availability-replicas
1718
- /creating-a-high-availability-replica
1819
- /monitoring-a-high-availability-configuration

content/billing/concepts/cost-centers.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ Cost centers allow you to attribute usage and spending to business units, improv
1717
* **Enterprise owners and billing managers** can create and edit cost centers for **any resource**.
1818
* **Organization owners** can create and edit cost centers that contain **resources in their organization**.
1919

20-
When you create a cost center, you define which resources it contains from users, repositories, and organizations. If your account is billed through Azure, you can also add an Azure subscription to bill usage to a different Azure subscription than the enterprise default.
20+
When you create a cost center, you define which resources it contains from users, repositories, organizations, and enterprise teams. If your account is billed through Azure, you can also add an Azure subscription to bill usage to a different Azure subscription than the enterprise default.
21+
22+
{% data reusables.billing.enterprise-teams-in-cost-centers %}
2123

2224
To get started with cost centers, see [AUTOTITLE](/billing/tutorials/control-costs-at-scale).
2325

content/billing/how-tos/products/use-cost-centers.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,18 @@ category:
2323
> [!NOTE]
2424
> An enterprise can create up to 500 cost centers.
2525
26-
Create cost centers to monitor and manage expenses for specific organizations or repositories. Multiple organizations, repositories, and users can be assigned to one cost center.
26+
Create cost centers to monitor and manage expenses for specific organizations or repositories. Multiple organizations, repositories, users, and enterprise teams can be assigned to one cost center.
2727

28-
When you create a cost center, you can add **organizations**, **repositories**, or **users**. The cost center will then track spending for the selected entities.
28+
When you create a cost center, you can add **organizations**, **repositories**, **users**, or **enterprise teams**. The cost center will then track spending for the selected entities.
29+
30+
{% data reusables.billing.enterprise-teams-in-cost-centers %}
2931

3032
{% data reusables.enterprise-accounts.access-enterprise %}
3133
{% data reusables.billing.enterprise-billing-menu %}
3234
{% data reusables.billing.cost-center-click-new %}
3335
1. In the text box under "Name", enter a name for your cost center.
3436
1. If your account is billed to Azure, you have the option to add an Azure ID. Your credentials will be verified against Azure to ensure the Azure IDs associated to your account are available.
35-
1. Under **Resources**, select the organizations, repositories, and/or users that will be a part of the cost center.
37+
1. Under **Resources**, select the organizations, repositories, users, and/or enterprise teams that will be a part of the cost center.
3638

3739
>[!NOTE] A resource (organization, repository, or user) can only be assigned to one cost center at a time. If you add a resource that belongs to a different cost center, it will be moved to the new cost center and you will be notified.
3840

content/billing/reference/cost-center-allocation.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,11 @@ To ensure your cost centers reflect spending as intended, it's important to unde
3636
| User associated with a cost center | License granted | License and product costs charged |
3737
|--|--|--|
3838
| Direct assignment | By any organization | To the **cost center** the user is assigned to. |
39+
| By enterprise team membership | By any organization | To the **cost center** the user's enterprise team is assigned to. Direct assignment to another cost center takes precedence; if the user is in multiple enterprise teams assigned to different cost centers, the team created first applies. |
3940
| By organization membership only | By an organization assigned to a cost center | To the **cost center** the organization belongs to. If the organization does not belong to a cost center, to the **enterprise**. |
4041

42+
When you assign an enterprise team to a cost center, its members are allocated to that cost center the same way other group-based assignments are, and membership stays current automatically as people join or leave the team. If a user is also assigned to a different cost center directly, the direct assignment takes precedence. If a user belongs to more than one enterprise team, and those teams are assigned to different cost centers, the user is associated with the cost center of the enterprise team that was created first.
43+
4144
Users who belong to multiple organizations in an enterprise or who receive a {% data variables.product.prodname_copilot_short %} license from multiple organizations:
4245

4346
* **{% data variables.product.prodname_enterprise %}** and **{% data variables.product.prodname_GHAS %}** license usage is allocated to the oldest organization and charges are allocated to the cost center containing that organization.

0 commit comments

Comments
 (0)