Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 65 additions & 1 deletion .github/workflows/link-check-internal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,16 @@ on:
type: string
required: true
default: 'en'
create_copilot_issue:
description: 'Create a Copilot-assigned issue with the top 5 redirects to fix'
type: boolean
required: false
default: false
create_report:
description: 'Create the combined broken links report issue in docs-content'
type: boolean
required: false
default: true

permissions:
contents: read
Expand Down Expand Up @@ -101,6 +111,60 @@ jobs:
retention-days: 5
if-no-files-found: ignore

- name: Create Copilot redirect issue
if: inputs.create_copilot_issue
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd
with:
github-token: ${{ secrets.DOCS_BOT_PAT_BASE }}
script: |
const fs = require('fs')
const reportFile = 'artifacts/link-report-${{ matrix.version }}-${{ matrix.language }}.json'

if (!fs.existsSync(reportFile)) {
core.info('No JSON report found — all links valid, skipping Copilot issue.')
return
}

const report = JSON.parse(fs.readFileSync(reportFile, 'utf8'))
const redirectGroups = report.groups.filter(g => g.isWarning).slice(0, 5)

if (redirectGroups.length === 0) {
core.info('No redirect groups found, skipping Copilot issue.')
return
}

const tableRows = redirectGroups.map(g => {
const occ = g.occurrences[0]
const redirectTarget = occ?.redirectTarget ?? 'unknown'
const file = occ?.file ?? 'unknown'
const lines = (occ?.lines ?? []).join(', ')
return `| \`${g.target}\` | \`${redirectTarget}\` | \`${file}\` | ${lines} |`
}).join('\n')

const body = [
'@copilot Please fix the redirected internal links listed in the table below.',
'All changes should be made within the `github/docs-internal` repository.',
'For each entry, open the source file and replace the **Current Link** with the **Update To** path.',
'When all changes are made, open a pull request in `github/docs-internal` with the fixes.',
'',
'## Redirects to fix',
'',
'| Current Link | Update To | File | Line(s) |',
'|---|---|---|---|',
tableRows,
].join('\n')

const issue = await github.rest.issues.create({
owner: 'github',
repo: 'docs-content',
title: '[Copilot Task] Fix top redirect links: ${{ matrix.version }}/${{ matrix.language }}',
body,
labels: ['broken link report'],
assignees: ['copilot'],
})

core.info(`Created Copilot redirect issue: ${issue.data.html_url}`)

- uses: ./.github/actions/slack-alert
if: ${{ failure() && github.event_name != 'workflow_dispatch' }}
with:
Expand Down Expand Up @@ -159,7 +223,7 @@ jobs:
fi

- name: Create issue if broken links found
if: steps.combine.outputs.has_reports == 'true'
if: steps.combine.outputs.has_reports == 'true' && (github.event_name != 'workflow_dispatch' || inputs.create_report != false)
uses: peter-evans/create-issue-from-file@fca9117c27cdc29c6c4db3b86c48e4115a786710 # v5
with:
token: ${{ secrets.DOCS_BOT_PAT_BASE }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1287,6 +1287,12 @@ GHE_LICENSE_FILE=/path/license ghe-license import
# License synchronized.
```

## Migrations

### elm

`elm` is the command-line tool for {% data variables.product.prodname_elm %}, a tool for live migrations to {% data variables.enterprise.data_residency_site %}. See [AUTOTITLE](/migrations/elm/elm-cli-reference).

## Security

### ghe-find-insecure-git-operations
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ By design, the following features are permanently unavailable on {% data variabl
| Feature | Details | More information |
| :- | :- | :- |
| Features unavailable with {% data variables.product.prodname_emus %} | Because {% data variables.product.prodname_emus %} is the only option for identity management on {% data variables.enterprise.data_residency_site %}, features that are unavailable with {% data variables.product.prodname_emus %} on {% data variables.product.prodname_dotcom_the_website %} are also unavailable on {% data variables.enterprise.data_residency_site %}. Notably, these include gists and public repositories. | [AUTOTITLE](/admin/managing-iam/understanding-iam-for-enterprises/abilities-and-restrictions-of-managed-user-accounts) |
| {% data variables.product.prodname_importer %} (the "Import repository" button on {% data variables.product.prodname_dotcom_the_website %}) | Instead, the **{% data variables.product.prodname_importer_proper_name %}** is available to migrate data. See [AUTOTITLE](/migrations/using-github-enterprise-importer/understanding-github-enterprise-importer/about-github-enterprise-importer). | [AUTOTITLE](/migrations/importing-source-code/using-github-importer/about-github-importer) |
| {% data variables.product.prodname_importer %} (the "Import repository" button on {% data variables.product.prodname_dotcom_the_website %}) | This is distinct from **{% data variables.product.prodname_importer_proper_name %}**, which is one of the tools available to migrate data. See [AUTOTITLE](/admin/data-residency/getting-started-with-data-residency-for-github-enterprise-cloud#5-migrate-data). | [AUTOTITLE](/migrations/importing-source-code/using-github-importer/about-github-importer) |

## Features that work differently

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ To migrate existing data to your new enterprise on {% data variables.enterprise.
Optionally, you can migrate data to {% data variables.enterprise.data_residency_site %} during your trial. However, migrated organizations will count towards the limit of three new organizations during the trial.

* If you're migrating from {% data variables.product.prodname_dotcom_the_website %}, {% data variables.product.prodname_ghe_server %}, Azure DevOps, or Bitbucket Server, you can migrate source code history and metadata with {% data variables.product.prodname_importer_proper_name %}. See [AUTOTITLE](/migrations/using-github-enterprise-importer/understanding-github-enterprise-importer/about-github-enterprise-importer).
* For migrations from {% data variables.product.prodname_ghe_server %} 3.17 and later, you can use {% data variables.product.prodname_elm %}. This offers less downtime and better support for complex monorepos. See [AUTOTITLE](/migrations/elm/about-live-migrations).
* If you're migrating from a different platform, see [AUTOTITLE](/migrations/overview/migration-paths-to-github#migrations-to-ghecom).

### Example script for {% data variables.product.prodname_importer_proper_name %}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,12 @@ title: Configuring multiple data disks
product: '{% data variables.product.prodname_ghe_server %}'
intro: You can configure additional data disks and use them to host data of different services.
versions:
ghes: '>= 3.19'
ghes: '>= 3.17'
contentType: concepts
category:
- Scale your instance
---

> [!NOTE]
> The ability to configure and use multiple data disks is in {% data variables.release-phases.public_preview %} and subject to change. We would love to hear your feedback on the preview. You can share it with your customer success team, or leave a comment in the [community discussion post](https://github.com/orgs/community/discussions/181173). Our preferred option is sharing your feedback with your customer success team.

## Why introduce more disks to the GHES instance?

* Improved resource distribution:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Managing disruptive comments
intro: 'You can {% ifversion fpt or ghec %}hide, edit,{% else %}edit{% endif %} or delete comments on issues, discussions, pull requests, and commits.'
intro: 'You can hide, edit, or delete comments on issues, discussions, pull requests, and commits.'
redirect_from:
- /articles/editing-a-comment
- /articles/deleting-a-comment
Expand All @@ -17,7 +17,7 @@ category:

## Hiding a comment

{% ifversion fpt or ghec %}Organization moderators, and anyone{% else %}Anyone{% endif %} with write access to a repository, can hide comments on issues, discussions, pull requests, and commits.
Organization moderators and anyone with write access to a repository, can hide comments on issues, discussions, pull requests, and commits.

If a comment is off-topic, outdated, or resolved, you may want to hide a comment to keep a discussion focused or make a pull request easier to navigate and review. Hidden comments are minimized but people with read access to the repository can expand them.

Expand All @@ -32,7 +32,7 @@ If a comment is off-topic, outdated, or resolved, you may want to hide a comment

## Unhiding a comment

{% ifversion fpt or ghec %}Organization moderators, and anyone{% else %}Anyone{% endif %} with write access to a repository, can unhide comments on issues, discussions, pull requests, and commits.
Organization moderators and anyone with write access to a repository, can unhide comments on issues, discussions, pull requests, and commits.

1. Navigate to the comment you'd like to unhide.
1. On the right side of the comment, click **{% octicon "fold" aria-hidden="true" aria-label="fold" %} Show comment**.
Expand All @@ -44,7 +44,7 @@ If a comment is off-topic, outdated, or resolved, you may want to hide a comment

Anyone with write access to a repository can edit comments on issues, discussions, pull requests, and commits.

It's appropriate to edit a comment and remove content that doesn't contribute to the conversation and violates your community's code of conduct{% ifversion fpt or ghec %} or {% data variables.product.github %}'s [Community Guidelines](/free-pro-team@latest/site-policy/github-terms/github-community-guidelines){% endif %}.
It's appropriate to edit a comment and remove content that doesn't contribute to the conversation and violates your community's code of conduct or {% data variables.product.github %}'s [Community Guidelines](/free-pro-team@latest/site-policy/github-terms/github-community-guidelines).

Sometimes it may make sense to clearly indicate edits and their justification.

Expand All @@ -71,7 +71,7 @@ Anyone with write access to a repository can delete comments on issues, discussi

If a comment contains some constructive content that adds to the conversation in the issue or pull request, you can edit the comment instead.

Deleting a comment is your last resort as a moderator. It's appropriate to delete a comment if the entire comment adds no constructive content to a conversation and violates your community's code of conduct{% ifversion fpt or ghec %} or GitHub's [Community Guidelines](/free-pro-team@latest/site-policy/github-terms/github-community-guidelines){% endif %}.
Deleting a comment is your last resort as a moderator. It's appropriate to delete a comment if the entire comment adds no constructive content to a conversation and violates your community's code of conduct or GitHub's [Community Guidelines](/free-pro-team@latest/site-policy/github-terms/github-community-guidelines).

Deleting a comment creates a timeline event that is visible to anyone with read access to the repository. However, the username of the person who deleted the comment is only visible to people with write access to the repository. For anyone without write access, the timeline event is anonymized.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,20 +50,22 @@ Provisioned users appear automatically in your enterprise's **People** list. You

Group users to scale license assignment by creating enterprise teams. See [AUTOTITLE](/enterprise-cloud@latest/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/create-enterprise-teams).

## Convert your trial to a paid enterprise account

To begin using {% data variables.copilot.copilot_business_short %} after your trial, convert to a paid enterprise account. See [AUTOTITLE](/enterprise-cloud@latest/admin/overview/setting-up-a-trial-of-github-enterprise-cloud#purchasing-github-enterprise).

## Enable {% data variables.product.prodname_copilot_short %} for the enterprise

{% data reusables.copilot-business-for-non-ghe.enable-copilot %}
1. Ensure you are signed in as an enterprise administrator on {% data variables.product.github %}.
1. To purchase {% data variables.product.prodname_copilot %} for your enterprise, [contact {% data variables.product.github %}'s Sales team](https://github.com/enterprise/contact?ref_product=copilot&ref_type=engagement&ref_style=text).
1. A member of the Sales team will work with you to set up {% data variables.product.prodname_copilot_short %} for your enterprise.

## Assign {% data variables.product.prodname_copilot_short %} licenses

Give people access to {% data variables.product.prodname_copilot_short %} by assigning {% data variables.copilot.copilot_business_short %} licenses to users or enterprise teams.

For detailed steps, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-access/grant-access#assigning-licenses-to-users-or-teams).

## Convert your trial to a paid enterprise account

To continue using {% data variables.copilot.copilot_business_short %} after your trial, convert to a paid enterprise account. See [AUTOTITLE](/enterprise-cloud@latest/admin/overview/setting-up-a-trial-of-github-enterprise-cloud#purchasing-github-enterprise).

## Next steps

Help your developers start using {% data variables.product.prodname_copilot_short %} and measure its impact. See [AUTOTITLE](/copilot/tutorials/roll-out-at-scale/enable-developers/drive-adoption).
52 changes: 52 additions & 0 deletions content/migrations/elm/about-live-migrations.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
title: About live migrations from GitHub Enterprise Server to GHE.com
shortTitle: About live migrations
intro: 'How do live migrations minimize downtime for developers?'
versions:
fpt: '*'
ghes: '*'
ghec: '*'
contentType: concepts
product: '{% data reusables.elm.ghes-version-requirement %}'
---

{% data reusables.elm.preview-note %}

## What is {% data variables.product.prodname_elm %}?

{% data variables.product.prodname_elm %} ({% data variables.product.prodname_elm_short %}) is a service for migrating repositories from {% data variables.product.prodname_ghe_server %} to {% data variables.enterprise.data_residency %} ({% data variables.enterprise.data_residency_site %}). It is operated using a command line tool on {% data variables.product.prodname_ghe_server %}.

Migrations are "live" because users can continue using the source repository during most of the migration process. After the repository data is initially collected, webhooks check for changes to the repository, such as new commits or updates to settings. These changes are reported to {% data variables.product.prodname_elm_short %} and included in the migration.

An {% data variables.product.prodname_elm_short %} migration includes a single repository. Organization-level data, such as organization settings, teams, and projects, are **not** included in the migration and must be reconfigured manually on the destination enterprise.

## Differences from {% data variables.product.prodname_importer_proper_name %}

{% data variables.product.prodname_elm_short %} and {% data variables.product.prodname_importer_proper_name %} (GEI) are separate tools that both support migrating repositories from {% data variables.product.prodname_ghe_server %} to {% data variables.enterprise.data_residency_site %}.

The main benefits of {% data variables.product.prodname_elm_short %} are:

* **Reduced developer downtime**: During a migration with GEI, developers lose access to the repository for the duration of the migration. This downtime creates risks like blocked deployments or stalled feature work.
* **Monorepo support**: {% data variables.product.prodname_elm_short %} is capable of migrating large, complex monorepos with deep histories. These often exceed the capacity of GEI.
* **Better visibility**: {% data variables.product.prodname_elm_short %} provides detailed repository-level visibility into migration progress, surfacing granular failures so that you can be confident the migrated repository is an accurate replica.

However, because of the higher traffic load associated with live updates, {% data variables.product.prodname_elm_short %} supports fewer concurrent migrations than GEI: {% data reusables.elm.concurrent-migrations %}

You may want to use both tools over the course of a platform migration, prioritizing the repositories that will benefit most from {% data variables.product.prodname_elm_short %}.

## Overview of a migration

Typically, a site administrator runs a migration using the `elm` CLI tool, in a terminal session over SSH. The operator must provide {% data variables.product.pat_generic_plural %} with access to both {% data variables.product.prodname_ghe_server %} and the destination enterprise.

The high-level phases of a migration are:

1. **Creation**: The site admin runs CLI commands to create and start the migration, specifying the source repository and destination.
1. **Preflight checks**: The migration service verifies parameters, tokens, network connectivity, and repository configuration.
1. **Backfill**: The {% data variables.product.prodname_elm_short %} tool does an initial crawl to capture all repository data and sends it to the migration service on the destination platform. During the backfill phase, webhooks check for live updates to the repository as the migration continues.
1. **Cutover**: The source repository is locked and any final live updates are sent to {% data variables.product.prodname_elm_short %}. This is the downtime period for developers.
1. **Completion**: The migration is finished. The site admin can check the data was migrated successfully.
1. **Follow-up**: An organization owner performs follow-up tasks on the destination enterprise, such as reconfiguring organization settings and reattributing activity to users.

## Next steps

To get ready to run a migration, see [AUTOTITLE](/migrations/elm/prepare-for-your-migration).
Loading
Loading