Skip to content

Commit f2673c5

Browse files
authored
Merge pull request #41320 from github/repo-sync
Repo sync
2 parents 08ebbf2 + e08d204 commit f2673c5

File tree

6 files changed

+47
-17
lines changed

6 files changed

+47
-17
lines changed

content/actions/concepts/workflows-and-actions/reusing-workflow-configurations.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ Let's compare some aspects of each solution:
5656
| Called directly within a job, not from a step | Run as a step within a job |
5757
| Can contain multiple jobs | Does not contain jobs |
5858
| Each step is logged in real-time | Logged as one step even if it contains multiple steps |
59-
| Can connect a maximum of ten levels of workflows | Can be nested to have up to 10 composite actions in one workflow |
59+
| Can connect a maximum of {% ifversion fpt or ghec %}ten {% else %}four {% endif %}levels of workflows | Can be nested to have up to 10 composite actions in one workflow |
6060
| Can use secrets | Cannot use secrets |
6161
| Cannot be published to the [marketplace](https://github.com/marketplace?type=actions) | Can be published to the [marketplace](https://github.com/marketplace?type=actions) |
6262

content/actions/how-tos/reuse-automations/reuse-workflows.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,9 @@ jobs:
181181

182182
## Nesting reusable workflows
183183

184-
You can connect a maximum of ten levels of workflows - that is, the top-level caller workflow and up to nine levels of reusable workflows. For example: _caller-workflow.yml_ → _called-workflow-1.yml_ → _called-workflow-2.yml_ → _called-workflow-3.yml_ → ... → _called-workflow-9.yml_. Loops in the workflow tree are not permitted.
184+
You can connect a maximum of {% ifversion fpt or ghec %}ten levels of workflows - that is, the top-level caller workflow and up to nine levels of reusable workflows. For example: _caller-workflow.yml_ → _called-workflow-1.yml_ → _called-workflow-2.yml_ → _called-workflow-3.yml_ → ... → _called-workflow-9.yml_.{% else %}four levels of workflows - that is, the top-level caller workflow and up to three levels of reusable workflows. For example: _caller-workflow.yml_ → _called-workflow-1.yml_ → _called-workflow-2.yml_ → _called-workflow-3.yml_.{% endif %}
185+
186+
Loops in the workflow tree are not permitted.
185187

186188
> [!NOTE] Nested reusable workflows require all workflows in the chain to be accessible to the caller, and permissions can only be maintained or reduced—not elevated—throughout the chain. For more information, see [AUTOTITLE](/actions/reference/reusable-workflows-reference#access-and-permissions-for-nested-workflows).
187189

content/actions/reference/workflows-and-actions/reusing-workflow-configurations.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ For {% ifversion ghes or ghec %}internal or {% endif %}private repositories, the
4646

4747
### Limitations of reusable workflows
4848

49-
* You can connect up to ten levels of workflows. For more information, see [Nesting reusable workflows](/actions/how-tos/sharing-automations/reuse-workflows#nesting-reusable-workflows).
50-
* You can call a maximum of 50 unique reusable workflows from a single workflow file. This limit includes any trees of nested reusable workflows that may be called starting from your top-level caller workflow file.
49+
50+
* You can connect up to {% ifversion fpt or ghec %}ten {% else %}four {% endif %}levels of workflows. For more information, see [Nesting reusable workflows](/actions/how-tos/sharing-automations/reuse-workflows#nesting-reusable-workflows).
51+
* You can call a maximum of {% ifversion fpt or ghec %}50 {% else %}20 {% endif %}unique reusable workflows from a single workflow file. This limit includes any trees of nested reusable workflows that may be called starting from your top-level caller workflow file.
5152

5253
For example, _top-level-caller-workflow.yml__called-workflow-1.yml__called-workflow-2.yml_ counts as 2 reusable workflows.
5354

content/admin/backing-up-and-restoring-your-instance/backup-service-for-github-enterprise-server/configuring-the-backup-service.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,9 @@ If you're using a dedicated block device as your backup target, you need to init
8080
This command:
8181
* Formats the device (erases all data).
8282
* Prepares it for use by the backup service.
83-
* Sets it to mount automatically at `/data/backup` on boot.
84-
83+
* Sets it to mount automatically at `/data/backup` on boot.{% ifversion ghes > 3.19 %}
84+
* If in a clustered environment, configures the node in `cluster.conf` with the `backup-server` role.{% endif %}
85+
8586
{% ifversion ghes = 3.17 %}
8687
From {% data variables.product.prodname_ghe_server %} 3.17.4 onward, the script is installed in PATH so you can run it directly using: `ghe-storage-init-backup /dev/YOUR_DEVICE_NAME`.
8788
{% endif %}
@@ -109,9 +110,9 @@ If the device was already initialized using `ghe-storage-init-backup`, you can r
109110
110111
### Configuring backup settings
111112
112-
After the backup target is mounted, the Backup Service page will become available in the {% data variables.enterprise.management_console %}. If you're using a block device, this requires completing the initialization or mount steps above.
113+
After the backup target is mounted, the Backup Service page will become available in the {% data variables.enterprise.management_console %}. {% ifversion ghes > 3.19 %} If your instance is part of a clustered environment, the system will automatically detect the node that was initialized with `ghe-storage-init-backup` and treat it as the backup server. {% endif %}
113114
114-
>[!NOTE] The settings page won’t appear until the backup storage is mounted at `/data/backup`.
115+
>[!NOTE] The settings page won’t appear until the backup storage is mounted at `/data/backup` by completing the initialization or mount steps above.
115116
116117
If you're migrating from {% data variables.product.prodname_enterprise_backup_utilities %}, you can transfer your configuration in one of two ways:
117118

src/graphql/components/Changelog.tsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React from 'react'
22
import cx from 'classnames'
3+
import GithubSlugger from 'github-slugger'
34

45
import { HeadingLink } from '@/frame/components/article/HeadingLink'
56
import { ChangelogItemT } from './types'
@@ -10,14 +11,19 @@ type Props = {
1011
}
1112

1213
export function Changelog({ changelogItems }: Props) {
13-
const changes = changelogItems.map((item) => {
14+
const slugger = new GithubSlugger()
15+
16+
const changes = changelogItems.map((item, index) => {
1417
const heading = `Schema changes for ${item.date}`
18+
const slug = slugger.slug(heading)
1519

1620
return (
17-
<div key={item.date}>
18-
<HeadingLink as="h2">{heading}</HeadingLink>
19-
{(item.schemaChanges || []).map((change, index) => (
20-
<React.Fragment key={index}>
21+
<div key={`${item.date}-${index}`}>
22+
<HeadingLink as="h2" slug={slug}>
23+
{heading}
24+
</HeadingLink>
25+
{(item.schemaChanges || []).map((change, changeIndex) => (
26+
<React.Fragment key={changeIndex}>
2127
<p>{change.title}</p>
2228
<ul>
2329
{change.changes.map((changeItem) => (
@@ -26,8 +32,8 @@ export function Changelog({ changelogItems }: Props) {
2632
</ul>
2733
</React.Fragment>
2834
))}
29-
{(item.previewChanges || []).map((change, index) => (
30-
<React.Fragment key={index}>
35+
{(item.previewChanges || []).map((change, changeIndex) => (
36+
<React.Fragment key={changeIndex}>
3137
<p>{change.title}</p>
3238
<ul>
3339
{change.changes.map((changeItem) => (
@@ -36,8 +42,8 @@ export function Changelog({ changelogItems }: Props) {
3642
</ul>
3743
</React.Fragment>
3844
))}
39-
{(item.upcomingChanges || []).map((change, index) => (
40-
<React.Fragment key={index}>
45+
{(item.upcomingChanges || []).map((change, changeIndex) => (
46+
<React.Fragment key={changeIndex}>
4147
<p>{change.title}</p>
4248
{change.changes.map((changeItem) => (
4349
<li key={changeItem} dangerouslySetInnerHTML={{ __html: changeItem }} />

src/graphql/tests/server-rendering.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,26 @@ describe('server rendering certain GraphQL pages', () => {
2323
expect.assertions(hrefs.length + 1)
2424
})
2525

26+
test('minitoc hrefs on changelog match and verify slugger behavior', async () => {
27+
// Testing the minitoc links match the heading ids but also validating
28+
// slugger behavior see docs-engineering/issues#5792.
29+
// Little funky because we need to make 2 requests to the page to test
30+
// the problem behavior where slugger state accumulates across
31+
// requests, it won't fail the first time around.
32+
await getDOM('/graphql/overview/changelog')
33+
const $ = await getDOM('/graphql/overview/changelog')
34+
const links = $('[data-testid="minitoc"] a[href]')
35+
const hrefs = links.map((i, link) => $(link).attr('href')).get()
36+
const headings = $('#article-contents h2')
37+
const headingIds = headings.map((i, heading) => `#${$(heading).attr('id')}`).get()
38+
39+
expect(hrefs.length).toBe(headingIds.length)
40+
41+
for (let i = 0; i < hrefs.length; i++) {
42+
expect(hrefs[i]).toBe(headingIds[i])
43+
}
44+
})
45+
2646
const autogeneratedPages = pageList.filter(
2747
(page) => page.autogenerated === 'graphql' && page.relativePath.includes('reference'),
2848
)

0 commit comments

Comments
 (0)