Merge branch 'main' of github.com:github/docs-internal into script-to-use-short-versions

This commit is contained in:
Sarah Schneider 2021-06-16 12:34:19 -04:00
Родитель 4c366e3d2f d06a65b029
Коммит 49c149e618
79 изменённых файлов: 918 добавлений и 339 удалений

Просмотреть файл

@ -40,6 +40,8 @@ async function run () {
process.exit(1)
}
const repoToOpenIssue = milestone === 'release' ? 'docs-content' : 'docs-engineering'
// Milestone-dependent values.
const numberOfdaysBeforeMilestoneToOpenIssue = milestone === 'release'
? numberOfdaysBeforeReleaseToOpenIssue
@ -71,7 +73,7 @@ async function run () {
}
const milestoneSteps = fs.readFileSync(path.join(process.cwd(), `.github/actions-scripts/enterprise-server-issue-templates/${milestone}-issue.md`), 'utf8')
const issueLabels = [`enterprise ${milestone}`, `engineering`]
const issueLabels = [`enterprise ${milestone}`]
const issueTitle = `[${nextMilestoneDate}] Enterprise Server ${versionNumber} ${milestone} (technical steps)`
const issueBody = `GHES ${versionNumber} ${milestone} occurs on ${nextMilestoneDate}.
@ -85,7 +87,7 @@ async function run () {
try {
issue = await octokit.request('POST /repos/{owner}/{repo}/issues', {
owner: 'github',
repo: 'docs-internal',
repo: repoToOpenIssue,
title: issueTitle,
body: issueBody,
labels: issueLabels

Просмотреть файл

@ -21,6 +21,25 @@
```
script/enterprise-server-release/create-webhook-files.js --oldVersion <PLAN@RELEASE> --newVersion <PLAN@RELEASE>
```
- [ ] Create a placeholder release notes file called `data/release-notes/<RELEASE NUMBER>/PLACEHOLDER.yml`. For example `data/release-notes/3-1/PLACEHOLDER.yml`. Add the following placeholder content to the file:
```
date: '2021-05-04'
release_candidate: true
deprecated: false
intro: PLACEHOLDER
sections:
bugs:
- PLACEHOLDER
known_issues:
- PLACEHOLDER
```
**Note:** All of the content in this file will be updated when the release notes are created in the megabranch including the filename `PLACEHOLDER.yml`. You can update the date or leave it as-is and wait to update it when the release notes are finalized.
- [ ] Create the Algolia search indices for the new release:
```
npm run sync-search-ghes-release
```
Check in the updated `lib/search/cached-index-names.json`.
- [ ] (Optional) Add a Release Candidate banner:
```
script/enterprise-server-releases/release-banner.js --action create --version <PLAN@RELEASE>
@ -39,17 +58,40 @@
- [ ] Update the `externalDocs.url` property in that file to use the new GHES release number.
- [ ] Copy the previous release's configuration file to a new configuration file for this release `cp app/api/description/config/releases/ghes-<LATEST RELEASE NUMBER>.yaml app/api/description/config/releases/ghes-<NEXT RELEASE NUMBER>.yaml`.
- [ ] Update the `variables.externalDocsUrl`, `variables.ghesVersion`, and `patch.[].value.url` in that file to use the new GHES release number.
- [ ] Update `published` in that file to `false`. **Note:** This is important to ensure that 3.1 OpenAPI changes are not made public until 3.1 is released.
- [ ] Update `published` in that file to `false`. **Note:** This is important to ensure that changes for the next version of the OpenAPI schema changes are not made public until the new version is released.
- [ ] Create a second PR based on the PR created ☝️ that toggles `published` to `true` in the `app/api/description/config/releases/ghes-<NEXT RELEASE NUMBER>.yaml` file. When this PR merges it will publish the new release to the `github/rest-api-description` repo and will trigger a pull request in the `github/docs-internal` repo with the schemas for the next GHES release. There is a step in this list to merge that PR in the "Before shipping the release branch" section.
#### Troubleshooting
### Maintaining this template
If the `OpenAPI dev mode check / check-schema-versions` check fails on the release branch, in your local checkout of the mega branch:
- [ ] If you notice that any of these steps become out-of-date, open a pull request to update this [issue template](https://github.com/github/docs-internal/blob/main/.github/actions-scripts/enterprise-server-issue-templates/release-issue.md).
### Troubleshooting
#### `OpenAPI dev mode check / check-schema-versions` failures
If the `OpenAPI dev mode check / check-schema-versions` check fails with the following message:
> :construction::warning: Your decorated and dereferenced schema files don't match. Ensure you're using decorated and dereferenced schemas from the automatically created pull requests by the 'github-openapi-bot' user. For more information, see 'script/rest/README.md'
- run `git checkout origin/main lib/rest/static/*`
- run `script/rest/update-files.js --decorate-only`
- run `script/enterprise-server-releases/create-rest-files.js --oldVersion enterprise-server@<LATEST PUBLIC RELEASE NUMBER> --newVersion enterprise-server@<NEW RELEASE NUMBER>`
- push the resulting changes
#### `Node.js tests / test content` failures
If the `Node.js tests / test content` check fails with the following message, the `lib/enterprise-dates.json` file is not up-to-date:
> FAIL tests/content/algolia-search.js ● algolia has remote indexNames in every language for every supported GHE version
This file should be automatically updated, but you can also run `script/update-enterprise-dates.js` to update it. **Note:** If the test is still failing after running this script, look at the dates for this release. If the date is still inaccurate, it may be an issue with the source at https://github.com/github/enterprise-releases/blob/master/docs/supported-versions.md#release-lifecycle-dates. If that is the case, manually update the dates in the `lib/enterprise-dates.json` file.
### Before shipping the release branch
- [ ] Add the GHES release notes to `data/release-notes/` and update the versioning frontmatter in `content/admin/release-notes.md` to `enterprise-server: '<=<RELEASE>'`
- [ ] In `github/github`, open a PR to change `published` to `true` in `app/api/description/config/releases/ghes-<NEXT RELEASE NUMBER>.yaml`. Get the required approval from `@github/ecosystem-api-reviewers` then deploy to dotcom. This process generally takes 30-90 minutes. Ask in `#docs-ecosystem` if you need help with this.
- [ ] Alert the Neon Squad (formally docs-ecosystem team) 1-2 days before the release to deploy to `github/github`. A PR should already be open in `github/github`, to change `published` to `true` in `app/api/description/config/releases/ghes-<NEXT RELEASE NUMBER>.yaml`. They will need to:
- [ ] Get the required approval from `@github/ecosystem-api-reviewers` then deploy the PR to dotcom. This process generally takes 30-90 minutes.
- [ ] Once the PR merges, make sure that the auto-generated PR titled "Update OpenAPI Descriptions" in doc-internal contains both the derefrenced and decorated JSON files for the new GHES release. If everything looks good, merge the "Update OpenAPI Description" PR into the GHES release megabranch.
- [ ] Add a blocking review to the auto-generated "Update OpenAPI Descriptions" PR in the public REST API description. (Remove this blocking review once the GHES release ships.)
### 🚢 🛳️ 🚢 Shipping the release branch
- [ ] The `github/docs-internal` repo is frozen, and the `Repo Freeze Check / Prevent merging during deployment freezes (pull_request_target)` test is expected to fail. Use admin permissions to ship the release branch with this failure.
- [ ] Once smoke tests have passed, you can unfreeze the repos by deleting the `FREEZE` secret in both the `github/docs-internal` and `github/docs` repos. To delete the secrets, click the repo **Settings** tab and then click **Secrets** in the left sidebar. Click **Remove** next to the `FREEZE` secret.

2
.github/workflows/link-check-dotcom.yml поставляемый
Просмотреть файл

@ -13,7 +13,7 @@ on:
jobs:
build:
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
runs-on: ${{ fromJson('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
steps:
# Each of these ifs needs to be repeated at each step to make sure the required check still runs
# Even if if doesn't do anything

2
.github/workflows/link-check-ghae.yml поставляемый
Просмотреть файл

@ -13,7 +13,7 @@ on:
jobs:
build:
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
runs-on: ${{ fromJson('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
steps:
# Each of these ifs needs to be repeated at each step to make sure the required check still runs
# Even if if doesn't do anything

2
.github/workflows/link-check-ghes.yml поставляемый
Просмотреть файл

@ -13,7 +13,7 @@ on:
jobs:
build:
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
runs-on: ${{ fromJson('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
steps:
# Each of these ifs needs to be repeated at each step to make sure the required check still runs
# Even if if doesn't do anything

2
.github/workflows/test.yml поставляемый
Просмотреть файл

@ -20,7 +20,7 @@ jobs:
test:
# Run on self-hosted if the private repo or ubuntu-latest if the public repo
# See pull # 17442 in the private repo for context
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
runs-on: ${{ fromJson('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
timeout-minutes: 60
strategy:
fail-fast: false

Просмотреть файл

@ -102,7 +102,7 @@ jobs:
const badFiles = badFilesArr.join('\n')
let reviewMessage = `👋 Hey there spelunker. It looks like you've modified some files that we can't accept as contributions. The complete list of files we can't accept are:\n${badFiles}\n\nYou'll need to revert all of the files you changed in that list using [GitHub Desktop](https://docs.github.com/en/free-pro-team@latest/desktop/contributing-and-collaborating-using-github-desktop/reverting-a-commit) or \`git checkout origin/main <file name>\`. Once you get those files reverted, we can continue with the review process. :octocat:`
let reviewMessage = `👋 Hey there spelunker. It looks like you've modified some files that we can't accept as contributions. The complete list of files we can't accept are:\n${badFiles}\n\nYou'll need to revert all of the files you changed in that list using [GitHub Desktop](https://docs.github.com/en/free-pro-team@latest/desktop/contributing-and-collaborating-using-github-desktop/managing-commits/reverting-a-commit) or \`git checkout origin/main <file name>\`. Once you get those files reverted, we can continue with the review process. :octocat:`
await github.pulls.createReview({
...context.repo,

Просмотреть файл

@ -1,5 +0,0 @@
source 'http://rubygems.org'
# ruby '2.4'
gem 'graphql', '1.10.6'
gem 'graphql-schema_comparator', '~> 1.0.0'

Просмотреть файл

@ -1,20 +0,0 @@
GEM
remote: http://rubygems.org/
specs:
graphql (1.10.6)
graphql-schema_comparator (1.0.0)
bundler (>= 1.14)
graphql (~> 1.10)
thor (>= 0.19, < 2.0)
thor (1.0.1)
PLATFORMS
ruby
x86_64-linux
DEPENDENCIES
graphql (= 1.10.6)
graphql-schema_comparator (~> 1.0.0)
BUNDLED WITH
2.2.1

Двоичные данные
assets/images/help/desktop/amend-commit-context-menu.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 224 KiB

Двоичные данные
assets/images/help/desktop/amend-last-commit-overview.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 210 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 130 KiB

Двоичные данные
assets/images/help/desktop/create-branch-from-commit-overview.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 58 KiB

Двоичные данные
assets/images/help/desktop/reorder-drag-and-drop.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 364 KiB

Двоичные данные
assets/images/help/desktop/reorder-force-push-dialog.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 92 KiB

Двоичные данные
assets/images/help/desktop/reorder-merge-commit-dialog.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 48 KiB

Двоичные данные
assets/images/help/desktop/reorder-resolve-conflicts.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 85 KiB

Двоичные данные
assets/images/help/desktop/reorder-stash-dialog.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 65 KiB

Двоичные данные
assets/images/help/desktop/squash-and-merge-menu.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 205 KiB

Двоичные данные
assets/images/help/desktop/squash-and-merge-selection.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 71 KiB

Двоичные данные
assets/images/help/desktop/squash-drag-and-drop.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 200 KiB

Двоичные данные
assets/images/help/desktop/squash-force-push.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 93 KiB

Двоичные данные
assets/images/help/desktop/squash-merge-commit-dialog.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 49 KiB

Двоичные данные
assets/images/help/desktop/squash-multiple-commits.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 136 KiB

Двоичные данные
assets/images/help/desktop/squash-stash-dialog.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 66 KiB

Просмотреть файл

@ -79,7 +79,7 @@ export const getFeaturedLinksFromReq = (req: any): Record<string, Array<Featured
Object.entries(req.context.featuredLinks || {}).map(([key, entries]) => {
return [
key,
(entries as Array<any>).map((entry) => ({
(entries as Array<any> || []).map((entry: any) => ({
href: entry.href,
title: entry.title,
intro: entry.intro,
@ -139,7 +139,10 @@ export const getProductLandingContextFromRequest = (req: any): ProductLandingCon
})
.map(([key, links]: any) => {
return {
label: req.context.site.data.ui.toc[key],
label:
key === 'popular'
? req.context.page.featuredLinks.popularHeading || req.context.site.data.ui.toc[key]
: req.context.site.data.ui.toc[key],
viewAllHref:
key === 'guides' && !req.context.currentCategory && hasGuidesPage
? `${req.context.currentPath}/guides`

Просмотреть файл

@ -4,6 +4,7 @@ import { ArrowRightIcon, SearchIcon } from '@primer/octicons-react'
import { useProductLandingContext } from 'components/context/ProductLandingContext'
import { useTranslation } from 'components/hooks/useTranslation'
import { CodeExampleCard } from 'components/landing/CodeExampleCard'
import { Link } from 'components/Link'
const PAGE_SIZE = 6
export const CodeExamples = () => {
@ -60,19 +61,19 @@ export const CodeExamples = () => {
)}
{isSearching && searchResults.length === 0 && (
<div className="d-none py-4 text-center color-text-secondary font-mktg">
<div className="py-4 text-center color-text-secondary font-mktg">
<div className="mb-3">
<SearchIcon size={24} />{' '}
</div>
<h3 className="text-normal">
{t('sorry')} <strong className="js-filter-card-value"></strong>
{t('sorry')} <strong>{search}</strong>
</h3>
<p className="my-3 f4">
{t('no_example')} <br /> {t('try_another')}
</p>
<a href="https://github.com/github/docs/blob/main/data/variables/discussions_community_examples.yml">
{t('add_your_community')} <ArrowRightIcon />
</a>
<Link href="https://github.com/github/docs/blob/main/data/variables/actions_code_examples.yml">
{t('learn')} <ArrowRightIcon />
</Link>
</div>
)}
</div>

Просмотреть файл

@ -60,7 +60,7 @@ export function ProductReleases() {
})}
</div>
<Link href={`${currentPath}/release-notes}`} className="btn btn-outline float-right">
<Link href={`${currentPath}/release-notes`} className="btn btn-outline float-right">
{t('explore_release_notes')} <ArrowRightIcon />
</Link>
</div>

Просмотреть файл

@ -108,10 +108,10 @@ const CollapsibleSection = (props: SectionProps) => {
</div>
</summary>
{!hideChildren && (
{!hideChildren && page.childPages.length > 0 && (
<>
{/* <!-- some categories have maptopics with child articles --> */}
{page.childPages[0].page.documentType === 'mapTopic' ? (
{page.childPages[0]?.page.documentType === 'mapTopic' ? (
<ul className="sidebar-topics list-style-none position-relative">
{page.childPages.map((childPage, i) => {
const childTitle = childPage.renderedShortTitle || childPage.renderedFullTitle
@ -165,7 +165,7 @@ const CollapsibleSection = (props: SectionProps) => {
)
})}
</ul>
) : page.childPages[0].page.documentType === 'article' ? (
) : page.childPages[0]?.page.documentType === 'article' ? (
<ul className="sidebar-articles list-style-none">
{/* <!-- some categories have no maptopics, only articles --> */}
{page.childPages.map((childPage, i, arr) => {

Просмотреть файл

@ -160,10 +160,9 @@ The `runner` context contains information about the runner that is executing the
| Property name | Type | Description |
|---------------|------|-------------|
| `runner.os` | `string` | The operating system of the runner executing the job. Possible values are `Linux`, `Windows`, or `macOS`. |
| `runner.temp` | `string` | The path of the temporary directory for the runner. This directory is guaranteed to be empty at the start of each job, even on self-hosted runners. |
| `runner.tool_cache` | `string` | {% if currentVersion == "github-ae@latest" %}For instructions on how to make sure your {% data variables.actions.hosted_runner %} has the required software installed, see "[Creating custom images](/actions/using-github-hosted-runners/creating-custom-images)."
{% else %}The path of the directory containing some of the preinstalled tools for {% data variables.product.prodname_dotcom %}-hosted runners. For more information, see "[Specifications for {% data variables.product.prodname_dotcom %}-hosted runners](/actions/reference/specifications-for-github-hosted-runners/#supported-software)". {% endif %}|
| `runner.os` | `string` | {% data reusables.actions.runner-os-description %} |
| `runner.temp` | `string` | {% data reusables.actions.runner-temp-directory-description %} |
| `runner.tool_cache` | `string` | {% if currentVersion == "github-ae@latest" %}For instructions on how to make sure your {% data variables.actions.hosted_runner %} has the required software installed, see "[Creating custom images](/actions/using-github-hosted-runners/creating-custom-images)." {% else %} {% data reusables.actions.runner-tool-cache-description %} {% endif %}|
### `needs` context

Просмотреть файл

@ -72,6 +72,9 @@ We strongly recommend that actions use environment variables to access the files
| `GITHUB_SERVER_URL`| Returns the URL of the {% data variables.product.product_name %} server. For example: `https://{% data variables.product.product_url %}`.
| `GITHUB_API_URL` | Returns the API URL. For example: `{% data variables.product.api_url_code %}`.
| `GITHUB_GRAPHQL_URL` | Returns the GraphQL API URL. For example: `{% data variables.product.graphql_url_code %}`.
| `RUNNER_OS` | {% data reusables.actions.runner-os-description %}
| `RUNNER_TEMP` | {% data reusables.actions.runner-temp-directory-description %}
{% if currentVersion != "github-ae@latest" %}| `RUNNER_TOOL_CACHE` | {% data reusables.actions.runner-tool-cache-description %}{% endif %}
{% tip %}

Просмотреть файл

@ -9,6 +9,7 @@ versions:
children:
- /adding-and-cloning-repositories
- /making-changes-in-a-branch
- /managing-commits
- /working-with-your-remote-repository-on-github-or-github-enterprise
- /keeping-your-local-repository-in-sync-with-github
---

Просмотреть файл

@ -71,6 +71,19 @@ Some workflows require or benefit from rebasing instead of merging. By rebasing
{% endwindows %}
## Squashing and merging another branch into your project branch
1. Use the **Branch** drop-down and click **Squash and Merge into Current Branch**.
![Squash and merge in branch dropdown](/assets/images/help/desktop/squash-and-merge-menu.png)
2. Click the branch you want to merge into the current branch, then click **Squash and merge**.
![Squash and merge button](/assets/images/help/desktop/squash-and-merge-selection.png)
{% note %}
**Note:** If there are merge conflicts, {% data variables.product.prodname_desktop %} will warn you above the **Squash and merge** button. You will not be able to squash and merge the branch until you have resolved all conflicts.
{% endnote %}
{% data reusables.desktop.push-origin %}
## Further Reading
- "[Pull](/github/getting-started-with-github/github-glossary#pull)" in the {% data variables.product.prodname_dotcom %} glossary
- "[Merge](/github/getting-started-with-github/github-glossary#merge)" in the {% data variables.product.prodname_dotcom %} glossary

Просмотреть файл

@ -100,14 +100,14 @@ Once you're satisfied with the changes you've chosen to include in your commit,
{% note %}
**Note**: {% data reusables.desktop.tags-push-with-commits %} For more information, see "[Managing tags](/desktop/contributing-to-projects/managing-tags)."
**Note**: {% data reusables.desktop.tags-push-with-commits %} For more information, see "[Managing tags](/desktop/contributing-and-collaborating-using-github-desktop/managing-commits/managing-tags)."
{% endnote %}
{% data reusables.desktop.commit-message %}
![Commit message field](/assets/images/help/desktop/commit-message.png)
2. Optionally, to attribute a commit to another author, click the add co-authors icon and type the username(s) you want to include.
1. Optionally, to attribute a commit to another author, click the add co-authors icon and type the username(s) you want to include.
![Add a co-author to the commit message](/assets/images/help/desktop/add-co-author-commit.png)
{% data reusables.desktop.commit-button %}

Просмотреть файл

@ -9,10 +9,7 @@ children:
- /managing-branches
- /committing-and-reviewing-changes-to-your-project
- /stashing-changes
- /pushing-changes-to-github
- /reverting-a-commit
- /cherry-picking-a-commit
- /managing-tags
- /viewing-the-branch-history
- /pushing-changes-to-github
---

Просмотреть файл

@ -14,6 +14,8 @@ You can use branches to safely experiment with changes to your project. Branches
You always create a branch from an existing branch. Typically, you might create a branch from the default branch of your repository. You can then work on this new branch in isolation from changes that other people are making to the repository.
You can also create a branch starting from a previous commit in a branch's history. This can be helpful if you need to return to an earlier view of the repository to investigate a bug, or to create a hot fix on top of your latest release.
Once you're satisfied with your work, you can create a pull request to merge your changes in the current branch into another branch. For more information, see "[Creating an issue or pull request](/desktop/contributing-to-projects/creating-an-issue-or-pull-request)" and "[About pull requests](/articles/about-pull-requests)."
You can always create a branch in {% data variables.product.prodname_desktop %} if you have read access to a repository, but you can only push the branch to {% data variables.product.prodname_dotcom %} if you have write access to the repository.
@ -58,6 +60,15 @@ You can always create a branch in {% data variables.product.prodname_desktop %}
{% endwindows %}
## Creating a branch from a previous commit
{% data reusables.desktop.history-tab %}
2. Right-click on the commit you would like to create a new branch from and select **Create Branch from Commit**.
![Create branch from commit context menu](/assets/images/help/desktop/create-branch-from-commit-context-menu.png)
{% data reusables.desktop.name-branch %}
{% data reusables.desktop.confirm-new-branch-button %}
![Create branch from commit](/assets/images/help/desktop/create-branch-from-commit-overview.png)
## Publishing a branch
If you create a branch on {% data variables.product.product_name %}, you'll need to publish the branch to make it available for collaboration on {% data variables.product.prodname_dotcom %}.

Просмотреть файл

@ -0,0 +1,22 @@
---
title: Amending a commit
intro: 'You can use {% data variables.product.prodname_desktop %} to amend your last commit.'
versions:
free-pro-team: '*'
---
## About amending a commit
Amending a commit is a way to modify the most recent commit you have made in your current branch. This can be helpful if you need to edit the commit message or if you forgot to include changes in the commit.
You can continue to amend a commit until you push it to the remote repository. After you push a commit, the option to amend it is disabled in {% data variables.product.prodname_desktop %}. When you amend a commit, you replace the previous commit with a new commit to your current branch. Amending a commit that has been pushed to the remote repository could cause confusion for other collaborators working with the repository.
## Amending a commit
{% data reusables.desktop.history-tab %}
2. Right-click on the most recent commit and select **Amend commit**.
![Amend commit context menu](/assets/images/help/desktop/amend-commit-context-menu.png)
3. Click the **Summary** field to modify the commit message. Optionally, you can modify or add information about the commit in the **Description** field.
4. Select any uncommitted changes that you would like to add to the commit. For more information about selecting changes, see "[Committing and reviewing changes to your project](/desktop/contributing-and-collaborating-using-github-desktop/making-changes-in-a-branch/committing-and-reviewing-changes-to-your-project#selecting-changes-to-include-in-a-commit)."
5. Once you have finalized your changes, click **Amend last commit**.
![Amend last commit overview](/assets/images/help/desktop/amend-last-commit-overview.png)

Просмотреть файл

@ -0,0 +1,13 @@
---
title: Managing commits
intro: 'You can use {% data variables.product.prodname_desktop %} to amend, cherry-pick, reorder, revert, and squash commits.'
versions:
free-pro-team: '*'
children:
- /reverting-a-commit
- /cherry-picking-a-commit
- /reordering-commits
- /squashing-commits
- /amending-a-commit
- /managing-tags
---

Просмотреть файл

@ -0,0 +1,41 @@
---
title: Reordering commits
intro: "You can use {% data variables.product.prodname_desktop %} to reorder commits in your branch's history."
versions:
free-pro-team: '*'
---
## About reordering a commit
Reordering allows you to alter your commit history to provide a more meaningful progression of commits. {% data variables.product.prodname_desktop %} allows you to drag-and-drop commits in your branch's history to reorder them.
## Reordering a commit
{% data reusables.desktop.current-branch-menu %}
2. In the list of branches, click the branch with the commits that you want to reorder.
{% data reusables.desktop.history-tab %}
4. Drag the commit that you want to reorder and drop it between two adjoining commits.
![reorder drag and drop](/assets/images/help/desktop/reorder-drag-and-drop.png)
While the application reorders the commits, a **Reorder in process** dialog indicates the progress of the change.
## Error messages when reordering commits
When you reorder commits, you may see one of the following notifications or error messages.
* A notification states that the requested change to the branch will require a force push to update the remote branch. This is shown when the commits that you reordered were previously pushed to the remote branch. Force pushing alters the commit history of the branch and will affect other collaborators who are working in that branch. Select **Begin reorder** to start the reorder, and then click **Force push origin** to push your changes.
![reorder force push dialog](/assets/images/help/desktop/reorder-force-push-dialog.png)
* An error states that the reorder failed because there is a merge commit among the reordered commits.
![reorder merge commit dialog](/assets/images/help/desktop/reorder-merge-commit-dialog.png)
* A notification is shown indicating that there are uncommitted changes present on your current branch. Select **Stash Changes and Continue** to store the changes and proceed, or select **Close** to dismiss the message and commit the changes. When there are no longer any uncommitted changes, you can reorder your commits.
![reorder stash dialog](/assets/images/help/desktop/reorder-stash-dialog.png)
* A message states that there are merge conflicts that you must resolve before the application can continue reordering commits on your branch.
1. Click **View conflicts** to see the conflicts.
{% data reusables.desktop.resolve-merge-conflicts %}
![reorder resolve conflicts message](/assets/images/help/desktop/reorder-resolve-conflicts.png)

Просмотреть файл

@ -0,0 +1,52 @@
---
title: Squashing commits
intro: "You can use {% data variables.product.prodname_desktop %} to squash commits in your branch's history."
versions:
free-pro-team: '*'
---
## About squashing a commit
Squashing allows you to combine multiple commits in your branch's history into a single commit. This can help keep your repository's history more readable and understandable.
## Squashing a commit
{% mac %}
{% data reusables.desktop.current-branch-menu %}
2. In the list of branches, select the branch that has the commits that you want to squash.
{% data reusables.desktop.history-tab %}
4. Select the commits to squash and drop them on the commit you want to combine them with. You can select one commit or select multiple commits using <kbd></kbd> or <kbd>Shift</kbd>.
![squash drag and drop](/assets/images/help/desktop/squash-drag-and-drop.png)
5. Modify the commit message of your new commit. The commit messages of the selected commits you want to squash are pre-filled into the **Summary** and **Description** fields.
6. Click **Squash Commmits**.
{% endmac %}
{% windows %}
{% data reusables.desktop.current-branch-menu %}
2. In the list of branches, select the branch that has the commits that you want to squash.
{% data reusables.desktop.history-tab %}
4. Select the commits to squash and drop them on the commit you want to combine them with. You can select one commit or select multiple commits using <kbd>Ctrl</kbd> or <kbd>Shift</kbd>.
![squash drag and drop](/assets/images/help/desktop/squash-drag-and-drop.png)
5. Modify the commit message of your new commit. The commit messages of the selected commits you want to squash are pre-filled into the **Summary** and **Description** fields.
6. Click **Squash Commmits**.
{% endwindows %}
## Error messages when squashing commits
When you squash commits, you may see one of the following notifications or error messages.
* A notification states that the requested change to the branch will require a force push to update the remote branch. Force pushing alters the commit history of the branch and will affect other collaborators who are working in that branch. Select **Begin Squash** to start the squash, and then click **Force push origin** to push your changes.
![squash force push dialog](/assets/images/help/desktop/squash-force-push.png)
* An error states that the squash failed because there is a merge commit among the squashed commits.
![reorder merge commit dialog](/assets/images/help/desktop/squash-merge-commit-dialog.png)
* A notification is shown indicating that there are uncommitted changes present on your current branch. Select **Stash Changes and Continue** to store the changes and proceed, or select **Close** to dismiss the message and commit the changes. When there are no longer any uncommitted changes you can squash your commits.
![squash stash dialog](/assets/images/help/desktop/squash-stash-dialog.png)

Просмотреть файл

@ -29,6 +29,7 @@ Billing managers can:
- View payment history
- Download receipts
- View, invite, and remove billing managers
- Start, modify, or cancel sponsorships
In addition, all billing managers will receive billing receipts by email on the organization's billing date.

Просмотреть файл

@ -355,6 +355,8 @@ The top of every page has an intro that provides context and sets expectations,
#### How to write an intro
- Article intros are one to two sentences long.
- Map topic and category intros are one sentence long.
- API reference intros are one sentence long.
- The intro for an API page should define the feature so that a user knows whether the feature meets their needs without reading the entire article.
- Intros contain a high-level summary of the pages content, developing the idea presented in a title with more detail.
- Use approachable synonyms of words in the pages title to help readers understand the articles purpose differently. Avoid repeating words from the title when possible.
- Intros are relatively evergreen and high-level, so they can scale with future changes to the content on the page without needing to be frequently updated.

Просмотреть файл

@ -0,0 +1 @@
The operating system of the runner executing the job. Possible values are `Linux`, `Windows`, or `macOS`.

Просмотреть файл

@ -0,0 +1 @@
The path to a temporary directory on the runner. This directory is emptied at the beginning and end of each job. Note that files will not be removed if the runner's user account does not have permission to delete them.

Просмотреть файл

@ -0,0 +1 @@
The path to the directory containing preinstalled tools for {% data variables.product.prodname_dotcom %}-hosted runners. For more information, see "[Specifications for {% data variables.product.prodname_dotcom %}-hosted runners](/actions/reference/specifications-for-github-hosted-runners/#supported-software)".

Просмотреть файл

@ -1,4 +1,5 @@
import Cookies from 'js-cookie'
import { preserveAnchorNodePosition } from 'scroll-anchoring'
import { sendEvent, EventType } from './events'
@ -29,7 +30,9 @@ export default function displayToolSpecificContent() {
event.preventDefault()
const target = event.target as HTMLElement
highlightTabForTool(target.dataset.tool || '')
showToolSpecificContent(target.dataset.tool || '', toolElements)
preserveAnchorNodePosition(document, () => {
showToolSpecificContent(target.dataset.tool || '', toolElements)
})
// Save this preference as a cookie.
Cookies.set('toolPreferred', target.dataset.tool || '', { sameSite: 'strict', secure: true })
@ -76,7 +79,8 @@ function getDefaultTool(detectedTools: Array<string>): string {
// If there is a default tool and the tool is present on this page
const defaultToolEl = document.querySelector('[data-default-tool]') as HTMLElement
const defaultToolValue = defaultToolEl.dataset.defaultTool
const defaultToolValue = defaultToolEl ? defaultToolEl.dataset.defaultTool : ''
if (defaultToolValue && detectedTools.includes(defaultToolValue)) {
return defaultToolValue
}

5
javascripts/scroll-anchoring.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,5 @@
declare module 'scroll-anchoring' {
export function findAnchorNode(document: Document): Node | undefined
export function preserveAnchorNodePosition<T>(document: Document, callback: () => Promise<T> | T): Promise<T>
export function preservePosition<T>(anchorNode: Node, callback: () => Promise<T> | T): Promise<T>
}

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -16742,14 +16742,14 @@
"schema": {
"properties": {
"position": {
"description": "<p><strong>Required</strong>. The position of the card in a column</p>",
"description": "<p><strong>Required</strong>. The position of the card in a column. Can be one of: <code>top</code>, <code>bottom</code>, or <code>after:&#x3C;card_id></code> to place after the specified card.</p>",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the card in a column",
"rawDescription": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"childParamsGroups": []
},
"column_id": {
@ -16826,14 +16826,14 @@
"descriptionHTML": "",
"bodyParameters": [
{
"description": "<p><strong>Required</strong>. The position of the card in a column</p>",
"description": "<p><strong>Required</strong>. The position of the card in a column. Can be one of: <code>top</code>, <code>bottom</code>, or <code>after:&#x3C;card_id></code> to place after the specified card.</p>",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the card in a column",
"rawDescription": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"childParamsGroups": []
},
{
@ -17507,14 +17507,14 @@
"schema": {
"properties": {
"position": {
"description": "<p><strong>Required</strong>. The position of the column in a project</p>",
"description": "<p><strong>Required</strong>. The position of the column in a project. Can be one of: <code>first</code>, <code>last</code>, or <code>after:&#x3C;column_id></code> to place after the specified column.</p>",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the column in a project",
"rawDescription": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"childParamsGroups": []
}
},
@ -17576,14 +17576,14 @@
"descriptionHTML": "",
"bodyParameters": [
{
"description": "<p><strong>Required</strong>. The position of the column in a project</p>",
"description": "<p><strong>Required</strong>. The position of the column in a project. Can be one of: <code>first</code>, <code>last</code>, or <code>after:&#x3C;column_id></code> to place after the specified column.</p>",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the column in a project",
"rawDescription": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"childParamsGroups": []
}
]

Просмотреть файл

@ -16838,14 +16838,14 @@
"schema": {
"properties": {
"position": {
"description": "<p><strong>Required</strong>. The position of the card in a column</p>",
"description": "<p><strong>Required</strong>. The position of the card in a column. Can be one of: <code>top</code>, <code>bottom</code>, or <code>after:&#x3C;card_id></code> to place after the specified card.</p>",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the card in a column",
"rawDescription": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"childParamsGroups": []
},
"column_id": {
@ -16922,14 +16922,14 @@
"descriptionHTML": "",
"bodyParameters": [
{
"description": "<p><strong>Required</strong>. The position of the card in a column</p>",
"description": "<p><strong>Required</strong>. The position of the card in a column. Can be one of: <code>top</code>, <code>bottom</code>, or <code>after:&#x3C;card_id></code> to place after the specified card.</p>",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the card in a column",
"rawDescription": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"childParamsGroups": []
},
{
@ -17603,14 +17603,14 @@
"schema": {
"properties": {
"position": {
"description": "<p><strong>Required</strong>. The position of the column in a project</p>",
"description": "<p><strong>Required</strong>. The position of the column in a project. Can be one of: <code>first</code>, <code>last</code>, or <code>after:&#x3C;column_id></code> to place after the specified column.</p>",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the column in a project",
"rawDescription": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"childParamsGroups": []
}
},
@ -17672,14 +17672,14 @@
"descriptionHTML": "",
"bodyParameters": [
{
"description": "<p><strong>Required</strong>. The position of the column in a project</p>",
"description": "<p><strong>Required</strong>. The position of the column in a project. Can be one of: <code>first</code>, <code>last</code>, or <code>after:&#x3C;column_id></code> to place after the specified column.</p>",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the column in a project",
"rawDescription": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"childParamsGroups": []
}
]

Просмотреть файл

@ -17312,14 +17312,14 @@
"schema": {
"properties": {
"position": {
"description": "<p><strong>Required</strong>. The position of the card in a column</p>",
"description": "<p><strong>Required</strong>. The position of the card in a column. Can be one of: <code>top</code>, <code>bottom</code>, or <code>after:&#x3C;card_id></code> to place after the specified card.</p>",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the card in a column",
"rawDescription": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"childParamsGroups": []
},
"column_id": {
@ -17396,14 +17396,14 @@
"descriptionHTML": "",
"bodyParameters": [
{
"description": "<p><strong>Required</strong>. The position of the card in a column</p>",
"description": "<p><strong>Required</strong>. The position of the card in a column. Can be one of: <code>top</code>, <code>bottom</code>, or <code>after:&#x3C;card_id></code> to place after the specified card.</p>",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the card in a column",
"rawDescription": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"childParamsGroups": []
},
{
@ -18077,14 +18077,14 @@
"schema": {
"properties": {
"position": {
"description": "<p><strong>Required</strong>. The position of the column in a project</p>",
"description": "<p><strong>Required</strong>. The position of the column in a project. Can be one of: <code>first</code>, <code>last</code>, or <code>after:&#x3C;column_id></code> to place after the specified column.</p>",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the column in a project",
"rawDescription": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"childParamsGroups": []
}
},
@ -18146,14 +18146,14 @@
"descriptionHTML": "",
"bodyParameters": [
{
"description": "<p><strong>Required</strong>. The position of the column in a project</p>",
"description": "<p><strong>Required</strong>. The position of the column in a project. Can be one of: <code>first</code>, <code>last</code>, or <code>after:&#x3C;column_id></code> to place after the specified column.</p>",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the column in a project",
"rawDescription": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"childParamsGroups": []
}
]

Просмотреть файл

@ -20764,14 +20764,14 @@
"schema": {
"properties": {
"position": {
"description": "<p><strong>Required</strong>. The position of the card in a column</p>",
"description": "<p><strong>Required</strong>. The position of the card in a column. Can be one of: <code>top</code>, <code>bottom</code>, or <code>after:&#x3C;card_id></code> to place after the specified card.</p>",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the card in a column",
"rawDescription": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"childParamsGroups": []
},
"column_id": {
@ -20848,14 +20848,14 @@
"descriptionHTML": "",
"bodyParameters": [
{
"description": "<p><strong>Required</strong>. The position of the card in a column</p>",
"description": "<p><strong>Required</strong>. The position of the card in a column. Can be one of: <code>top</code>, <code>bottom</code>, or <code>after:&#x3C;card_id></code> to place after the specified card.</p>",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the card in a column",
"rawDescription": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"childParamsGroups": []
},
{
@ -21529,14 +21529,14 @@
"schema": {
"properties": {
"position": {
"description": "<p><strong>Required</strong>. The position of the column in a project</p>",
"description": "<p><strong>Required</strong>. The position of the column in a project. Can be one of: <code>first</code>, <code>last</code>, or <code>after:&#x3C;column_id></code> to place after the specified column.</p>",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the column in a project",
"rawDescription": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"childParamsGroups": []
}
},
@ -21598,14 +21598,14 @@
"descriptionHTML": "",
"bodyParameters": [
{
"description": "<p><strong>Required</strong>. The position of the column in a project</p>",
"description": "<p><strong>Required</strong>. The position of the column in a project. Can be one of: <code>first</code>, <code>last</code>, or <code>after:&#x3C;column_id></code> to place after the specified column.</p>",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the column in a project",
"rawDescription": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"childParamsGroups": []
}
]

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -21926,14 +21926,14 @@
"schema": {
"properties": {
"position": {
"description": "<p><strong>Required</strong>. The position of the card in a column</p>",
"description": "<p><strong>Required</strong>. The position of the card in a column. Can be one of: <code>top</code>, <code>bottom</code>, or <code>after:&#x3C;card_id></code> to place after the specified card.</p>",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the card in a column",
"rawDescription": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"childParamsGroups": []
},
"column_id": {
@ -22010,14 +22010,14 @@
"descriptionHTML": "",
"bodyParameters": [
{
"description": "<p><strong>Required</strong>. The position of the card in a column</p>",
"description": "<p><strong>Required</strong>. The position of the card in a column. Can be one of: <code>top</code>, <code>bottom</code>, or <code>after:&#x3C;card_id></code> to place after the specified card.</p>",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the card in a column",
"rawDescription": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"childParamsGroups": []
},
{
@ -22691,14 +22691,14 @@
"schema": {
"properties": {
"position": {
"description": "<p><strong>Required</strong>. The position of the column in a project</p>",
"description": "<p><strong>Required</strong>. The position of the column in a project. Can be one of: <code>first</code>, <code>last</code>, or <code>after:&#x3C;column_id></code> to place after the specified column.</p>",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the column in a project",
"rawDescription": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"childParamsGroups": []
}
},
@ -22760,14 +22760,14 @@
"descriptionHTML": "",
"bodyParameters": [
{
"description": "<p><strong>Required</strong>. The position of the column in a project</p>",
"description": "<p><strong>Required</strong>. The position of the column in a project. Can be one of: <code>first</code>, <code>last</code>, or <code>after:&#x3C;column_id></code> to place after the specified column.</p>",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$",
"name": "position",
"in": "body",
"rawType": "string",
"rawDescription": "The position of the column in a project",
"rawDescription": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"childParamsGroups": []
}
]

Просмотреть файл

@ -53294,12 +53294,131 @@
"push": false,
"pull": true
},
"allow_rebase_merge": true,
"template_repository": null,
"template_repository": {
"id": 1296269,
"node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5",
"name": "Hello-World",
"full_name": "octocat/Hello-World",
"owner": {
"login": "octocat",
"id": 1,
"node_id": "MDQ6VXNlcjE=",
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/followers",
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"type": "User",
"site_admin": false
},
"private": false,
"html_url": "https://github.com/octocat/Hello-World",
"description": "This your first repo!",
"fork": false,
"url": "https://api.github.com/repos/octocat/Hello-World",
"archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}",
"assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}",
"blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}",
"branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}",
"collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}",
"comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}",
"commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}",
"compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}",
"contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}",
"contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors",
"deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments",
"downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads",
"events_url": "https://api.github.com/repos/octocat/Hello-World/events",
"forks_url": "https://api.github.com/repos/octocat/Hello-World/forks",
"git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}",
"git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}",
"git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}",
"git_url": "git:github.com/octocat/Hello-World.git",
"issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}",
"issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}",
"issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}",
"keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}",
"labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}",
"languages_url": "https://api.github.com/repos/octocat/Hello-World/languages",
"merges_url": "https://api.github.com/repos/octocat/Hello-World/merges",
"milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}",
"notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}",
"pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}",
"releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}",
"ssh_url": "git@github.com:octocat/Hello-World.git",
"stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers",
"statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}",
"subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers",
"subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription",
"tags_url": "https://api.github.com/repos/octocat/Hello-World/tags",
"teams_url": "https://api.github.com/repos/octocat/Hello-World/teams",
"trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}",
"clone_url": "https://github.com/octocat/Hello-World.git",
"mirror_url": "git:git.example.com/octocat/Hello-World",
"hooks_url": "https://api.github.com/repos/octocat/Hello-World/hooks",
"svn_url": "https://svn.github.com/octocat/Hello-World",
"homepage": "https://github.com",
"organization": null,
"language": null,
"forks": 9,
"forks_count": 9,
"stargazers_count": 80,
"watchers_count": 80,
"watchers": 80,
"size": 108,
"default_branch": "master",
"open_issues": 0,
"open_issues_count": 0,
"is_template": true,
"license": {
"key": "mit",
"name": "MIT License",
"url": "https://api.github.com/licenses/mit",
"spdx_id": "MIT",
"node_id": "MDc6TGljZW5zZW1pdA==",
"html_url": "https://api.github.com/licenses/mit"
},
"topics": [
"octocat",
"atom",
"electron",
"api"
],
"has_issues": true,
"has_projects": true,
"has_wiki": true,
"has_pages": false,
"has_downloads": true,
"archived": false,
"disabled": false,
"visibility": "public",
"pushed_at": "2011-01-26T19:06:43Z",
"created_at": "2011-01-26T19:01:12Z",
"updated_at": "2011-01-26T19:14:43Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"allow_rebase_merge": true,
"template_repository": null,
"temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O",
"allow_squash_merge": true,
"delete_branch_on_merge": true,
"allow_merge_commit": true,
"subscribers_count": 42,
"network_count": 0
},
"temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O",
"allow_squash_merge": true,
"delete_branch_on_merge": true,
"allow_merge_commit": true,
"subscribers_count": 42,
"network_count": 0,
"license": {
@ -53307,8 +53426,7 @@
"name": "MIT License",
"url": "https://api.github.com/licenses/mit",
"spdx_id": "MIT",
"node_id": "MDc6TGljZW5zZW1pdA==",
"html_url": "https://github.com/licenses/mit"
"node_id": "MDc6TGljZW5zZW1pdA=="
},
"forks": 1,
"open_issues": 1,
@ -100874,7 +100992,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the card in a column",
"description": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$"
@ -102468,7 +102586,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the column in a project",
"description": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$"

Просмотреть файл

@ -58731,7 +58731,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the card in a column",
"description": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$"
@ -60325,7 +60325,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the column in a project",
"description": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$"

Просмотреть файл

@ -59374,7 +59374,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the card in a column",
"description": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$"
@ -60968,7 +60968,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the column in a project",
"description": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$"

Просмотреть файл

@ -62468,7 +62468,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the card in a column",
"description": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$"
@ -64062,7 +64062,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the column in a project",
"description": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$"

Просмотреть файл

@ -73742,7 +73742,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the card in a column",
"description": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$"
@ -75336,7 +75336,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the column in a project",
"description": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$"

Просмотреть файл

@ -52102,12 +52102,131 @@
"push": false,
"pull": true
},
"allow_rebase_merge": true,
"template_repository": null,
"template_repository": {
"id": 1296269,
"node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5",
"name": "Hello-World",
"full_name": "octocat/Hello-World",
"owner": {
"login": "octocat",
"id": 1,
"node_id": "MDQ6VXNlcjE=",
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/followers",
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"type": "User",
"site_admin": false
},
"private": false,
"html_url": "https://github.com/octocat/Hello-World",
"description": "This your first repo!",
"fork": false,
"url": "https://api.github.com/repos/octocat/Hello-World",
"archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}",
"assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}",
"blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}",
"branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}",
"collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}",
"comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}",
"commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}",
"compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}",
"contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}",
"contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors",
"deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments",
"downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads",
"events_url": "https://api.github.com/repos/octocat/Hello-World/events",
"forks_url": "https://api.github.com/repos/octocat/Hello-World/forks",
"git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}",
"git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}",
"git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}",
"git_url": "git:github.com/octocat/Hello-World.git",
"issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}",
"issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}",
"issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}",
"keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}",
"labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}",
"languages_url": "https://api.github.com/repos/octocat/Hello-World/languages",
"merges_url": "https://api.github.com/repos/octocat/Hello-World/merges",
"milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}",
"notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}",
"pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}",
"releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}",
"ssh_url": "git@github.com:octocat/Hello-World.git",
"stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers",
"statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}",
"subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers",
"subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription",
"tags_url": "https://api.github.com/repos/octocat/Hello-World/tags",
"teams_url": "https://api.github.com/repos/octocat/Hello-World/teams",
"trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}",
"clone_url": "https://github.com/octocat/Hello-World.git",
"mirror_url": "git:git.example.com/octocat/Hello-World",
"hooks_url": "https://api.github.com/repos/octocat/Hello-World/hooks",
"svn_url": "https://svn.github.com/octocat/Hello-World",
"homepage": "https://github.com",
"organization": null,
"language": null,
"forks": 9,
"forks_count": 9,
"stargazers_count": 80,
"watchers_count": 80,
"watchers": 80,
"size": 108,
"default_branch": "master",
"open_issues": 0,
"open_issues_count": 0,
"is_template": true,
"license": {
"key": "mit",
"name": "MIT License",
"url": "https://api.github.com/licenses/mit",
"spdx_id": "MIT",
"node_id": "MDc6TGljZW5zZW1pdA==",
"html_url": "https://api.github.com/licenses/mit"
},
"topics": [
"octocat",
"atom",
"electron",
"api"
],
"has_issues": true,
"has_projects": true,
"has_wiki": true,
"has_pages": false,
"has_downloads": true,
"archived": false,
"disabled": false,
"visibility": "public",
"pushed_at": "2011-01-26T19:06:43Z",
"created_at": "2011-01-26T19:01:12Z",
"updated_at": "2011-01-26T19:14:43Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"allow_rebase_merge": true,
"template_repository": null,
"temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O",
"allow_squash_merge": true,
"delete_branch_on_merge": true,
"allow_merge_commit": true,
"subscribers_count": 42,
"network_count": 0
},
"temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O",
"allow_squash_merge": true,
"delete_branch_on_merge": true,
"allow_merge_commit": true,
"subscribers_count": 42,
"network_count": 0,
"license": {
@ -52115,8 +52234,7 @@
"name": "MIT License",
"url": "https://api.github.com/licenses/mit",
"spdx_id": "MIT",
"node_id": "MDc6TGljZW5zZW1pdA==",
"html_url": "https://github.com/licenses/mit"
"node_id": "MDc6TGljZW5zZW1pdA=="
},
"forks": 1,
"open_issues": 1,
@ -86134,7 +86252,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the card in a column",
"description": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$"
@ -87728,7 +87846,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the column in a project",
"description": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$"

Просмотреть файл

@ -56313,12 +56313,131 @@
"push": false,
"pull": true
},
"allow_rebase_merge": true,
"template_repository": null,
"template_repository": {
"id": 1296269,
"node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5",
"name": "Hello-World",
"full_name": "octocat/Hello-World",
"owner": {
"login": "octocat",
"id": 1,
"node_id": "MDQ6VXNlcjE=",
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/followers",
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"type": "User",
"site_admin": false
},
"private": false,
"html_url": "https://github.com/octocat/Hello-World",
"description": "This your first repo!",
"fork": false,
"url": "https://api.github.com/repos/octocat/Hello-World",
"archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}",
"assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}",
"blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}",
"branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}",
"collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}",
"comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}",
"commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}",
"compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}",
"contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}",
"contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors",
"deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments",
"downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads",
"events_url": "https://api.github.com/repos/octocat/Hello-World/events",
"forks_url": "https://api.github.com/repos/octocat/Hello-World/forks",
"git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}",
"git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}",
"git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}",
"git_url": "git:github.com/octocat/Hello-World.git",
"issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}",
"issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}",
"issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}",
"keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}",
"labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}",
"languages_url": "https://api.github.com/repos/octocat/Hello-World/languages",
"merges_url": "https://api.github.com/repos/octocat/Hello-World/merges",
"milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}",
"notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}",
"pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}",
"releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}",
"ssh_url": "git@github.com:octocat/Hello-World.git",
"stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers",
"statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}",
"subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers",
"subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription",
"tags_url": "https://api.github.com/repos/octocat/Hello-World/tags",
"teams_url": "https://api.github.com/repos/octocat/Hello-World/teams",
"trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}",
"clone_url": "https://github.com/octocat/Hello-World.git",
"mirror_url": "git:git.example.com/octocat/Hello-World",
"hooks_url": "https://api.github.com/repos/octocat/Hello-World/hooks",
"svn_url": "https://svn.github.com/octocat/Hello-World",
"homepage": "https://github.com",
"organization": null,
"language": null,
"forks": 9,
"forks_count": 9,
"stargazers_count": 80,
"watchers_count": 80,
"watchers": 80,
"size": 108,
"default_branch": "master",
"open_issues": 0,
"open_issues_count": 0,
"is_template": true,
"license": {
"key": "mit",
"name": "MIT License",
"url": "https://api.github.com/licenses/mit",
"spdx_id": "MIT",
"node_id": "MDc6TGljZW5zZW1pdA==",
"html_url": "https://api.github.com/licenses/mit"
},
"topics": [
"octocat",
"atom",
"electron",
"api"
],
"has_issues": true,
"has_projects": true,
"has_wiki": true,
"has_pages": false,
"has_downloads": true,
"archived": false,
"disabled": false,
"visibility": "public",
"pushed_at": "2011-01-26T19:06:43Z",
"created_at": "2011-01-26T19:01:12Z",
"updated_at": "2011-01-26T19:14:43Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"allow_rebase_merge": true,
"template_repository": null,
"temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O",
"allow_squash_merge": true,
"delete_branch_on_merge": true,
"allow_merge_commit": true,
"subscribers_count": 42,
"network_count": 0
},
"temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O",
"allow_squash_merge": true,
"delete_branch_on_merge": true,
"allow_merge_commit": true,
"subscribers_count": 42,
"network_count": 0,
"license": {
@ -56326,8 +56445,7 @@
"name": "MIT License",
"url": "https://api.github.com/licenses/mit",
"spdx_id": "MIT",
"node_id": "MDc6TGljZW5zZW1pdA==",
"html_url": "https://github.com/licenses/mit"
"node_id": "MDc6TGljZW5zZW1pdA=="
},
"forks": 1,
"open_issues": 1,
@ -90851,7 +90969,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the card in a column",
"description": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$"
@ -92445,7 +92563,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the column in a project",
"description": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$"

Просмотреть файл

@ -56318,12 +56318,131 @@
"push": false,
"pull": true
},
"allow_rebase_merge": true,
"template_repository": null,
"template_repository": {
"id": 1296269,
"node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5",
"name": "Hello-World",
"full_name": "octocat/Hello-World",
"owner": {
"login": "octocat",
"id": 1,
"node_id": "MDQ6VXNlcjE=",
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/followers",
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"type": "User",
"site_admin": false
},
"private": false,
"html_url": "https://github.com/octocat/Hello-World",
"description": "This your first repo!",
"fork": false,
"url": "https://api.github.com/repos/octocat/Hello-World",
"archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}",
"assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}",
"blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}",
"branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}",
"collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}",
"comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}",
"commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}",
"compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}",
"contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}",
"contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors",
"deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments",
"downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads",
"events_url": "https://api.github.com/repos/octocat/Hello-World/events",
"forks_url": "https://api.github.com/repos/octocat/Hello-World/forks",
"git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}",
"git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}",
"git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}",
"git_url": "git:github.com/octocat/Hello-World.git",
"issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}",
"issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}",
"issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}",
"keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}",
"labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}",
"languages_url": "https://api.github.com/repos/octocat/Hello-World/languages",
"merges_url": "https://api.github.com/repos/octocat/Hello-World/merges",
"milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}",
"notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}",
"pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}",
"releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}",
"ssh_url": "git@github.com:octocat/Hello-World.git",
"stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers",
"statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}",
"subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers",
"subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription",
"tags_url": "https://api.github.com/repos/octocat/Hello-World/tags",
"teams_url": "https://api.github.com/repos/octocat/Hello-World/teams",
"trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}",
"clone_url": "https://github.com/octocat/Hello-World.git",
"mirror_url": "git:git.example.com/octocat/Hello-World",
"hooks_url": "https://api.github.com/repos/octocat/Hello-World/hooks",
"svn_url": "https://svn.github.com/octocat/Hello-World",
"homepage": "https://github.com",
"organization": null,
"language": null,
"forks": 9,
"forks_count": 9,
"stargazers_count": 80,
"watchers_count": 80,
"watchers": 80,
"size": 108,
"default_branch": "master",
"open_issues": 0,
"open_issues_count": 0,
"is_template": true,
"license": {
"key": "mit",
"name": "MIT License",
"url": "https://api.github.com/licenses/mit",
"spdx_id": "MIT",
"node_id": "MDc6TGljZW5zZW1pdA==",
"html_url": "https://api.github.com/licenses/mit"
},
"topics": [
"octocat",
"atom",
"electron",
"api"
],
"has_issues": true,
"has_projects": true,
"has_wiki": true,
"has_pages": false,
"has_downloads": true,
"archived": false,
"disabled": false,
"visibility": "public",
"pushed_at": "2011-01-26T19:06:43Z",
"created_at": "2011-01-26T19:01:12Z",
"updated_at": "2011-01-26T19:14:43Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"allow_rebase_merge": true,
"template_repository": null,
"temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O",
"allow_squash_merge": true,
"delete_branch_on_merge": true,
"allow_merge_commit": true,
"subscribers_count": 42,
"network_count": 0
},
"temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O",
"allow_squash_merge": true,
"delete_branch_on_merge": true,
"allow_merge_commit": true,
"subscribers_count": 42,
"network_count": 0,
"license": {
@ -56331,8 +56450,7 @@
"name": "MIT License",
"url": "https://api.github.com/licenses/mit",
"spdx_id": "MIT",
"node_id": "MDc6TGljZW5zZW1pdA==",
"html_url": "https://github.com/licenses/mit"
"node_id": "MDc6TGljZW5zZW1pdA=="
},
"forks": 1,
"open_issues": 1,
@ -91132,7 +91250,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the card in a column",
"description": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$"
@ -92726,7 +92844,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the column in a project",
"description": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$"

Просмотреть файл

@ -63270,7 +63270,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the card in a column",
"description": "The position of the card in a column. Can be one of: `top`, `bottom`, or `after:<card_id>` to place after the specified card.",
"example": "bottom",
"type": "string",
"pattern": "^(?:top|bottom|after:\\d+)$"
@ -64864,7 +64864,7 @@
"schema": {
"properties": {
"position": {
"description": "The position of the column in a project",
"description": "The position of the column in a project. Can be one of: `first`, `last`, or `after:<column_id>` to place after the specified column.",
"example": "last",
"type": "string",
"pattern": "^(?:first|last|after:\\d+)$"

Просмотреть файл

@ -17,8 +17,9 @@ module.exports = async function releaseNotesContext (req, res, next) {
const [requestedPlan, requestedRelease] = req.context.currentVersion.split('@')
const releaseNotesPerPlan = req.context.site.data['release-notes'][requestedPlan]
// 404 if no release notes can be found
// 404 if no release notes can be found or the requested release is not valid
if (!releaseNotesPerPlan) return next()
if (!all.includes(requestedRelease)) return next()
// Release notes handling differs if version has numbered releases (like GHES) or not (like GHAE)
const hasNumberedReleases = !(requestedRelease === 'latest')

Просмотреть файл

@ -128,6 +128,7 @@ module.exports = function (app) {
app.use(asyncMiddleware(instrument('./dev-toc')))
app.use(asyncMiddleware(instrument('./featured-links')))
app.use(asyncMiddleware(instrument('./learning-track')))
app.use(asyncMiddleware(instrument('./is-next-request')))
// *** Headers for pages only ***
app.use(require('./set-fastly-cache-headers'))

Просмотреть файл

@ -0,0 +1,52 @@
const pathToRegexp = require('path-to-regexp')
const { FEATURE_NEXTJS } = process.env;
const productIds = [
// 'actions',
'admin',
"billing",
"code-security",
"codespaces",
"communities",
"desktop",
"developers",
"discussions",
// 'early-access',
"education",
// 'github',
"graphql",
// 'insights',
"issues",
"organizations",
// 'packages',
"pages",
"rest",
"sponsors",
];
const landingPageExp = pathToRegexp('/:locale/:versionId?/:productId')
module.exports = function isNextRequest(req, res, next) {
req.renderWithNextjs = false;
if (FEATURE_NEXTJS) {
if ('nextjs' in req.query) {
req.renderWithNextjs = true;
} else {
// Custom path matching to determine if we should render with nextjs
// Remove any query string (?...) and/or fragment identifier (#...)
const { pathname } = new URL(req.originalUrl, "https://docs.github.com");
// Should the current path be rendered by NextJS?
const landingPageMatch = landingPageExp.exec(pathname)
if (landingPageMatch) {
const productId = landingPageMatch[3]
req.renderWithNextjs = productIds.includes(productId)
}
}
}
next();
};

Просмотреть файл

@ -9,24 +9,8 @@ const RedisAccessor = require('../lib/redis-accessor')
const { isConnectionDropped } = require('./halt-on-dropped-connection')
const { nextHandleRequest } = require('./next')
const { HEROKU_RELEASE_VERSION, FEATURE_NEXTJS } = process.env
const { HEROKU_RELEASE_VERSION } = process.env
const defaultNextJSRoutes = FEATURE_NEXTJS
? [
'/en/billing',
'/en/code-security',
'/en/communities',
'/en/discussions',
'/en/developers',
'/en/desktop',
'/en/graphql',
'/en/issues',
'/en/organizations',
'/en/pages',
'/en/rest',
'/en/sponsors'
]
: []
const pageCacheDatabaseNumber = 1
const pageCacheExpiration = 24 * 60 * 60 * 1000 // 24 hours
@ -104,9 +88,6 @@ module.exports = async function renderPage (req, res, next) {
// Is the request for JSON debugging info?
const isRequestingJsonForDebugging = 'json' in req.query && process.env.NODE_ENV !== 'production'
// Should the current path be rendered by NextJS?
const renderWithNextjs = (defaultNextJSRoutes.includes(pathname) || 'nextjs' in req.query) && FEATURE_NEXTJS
// Is in an airgapped session?
const isAirgapped = Boolean(req.cookies.AIRGAP)
@ -124,7 +105,7 @@ module.exports = async function renderPage (req, res, next) {
// Skip for JSON debugging info requests
!isRequestingJsonForDebugging &&
// Skip for NextJS rendering
!renderWithNextjs &&
!req.renderWithNextjs &&
// Skip for airgapped sessions
!isAirgapped &&
// Skip for the GraphQL Explorer page
@ -202,7 +183,7 @@ module.exports = async function renderPage (req, res, next) {
}
// Hand rendering over to NextJS when appropriate
if (renderWithNextjs) {
if (req.renderWithNextjs) {
req.context.renderedPage = context.renderedPage
req.context.miniTocItems = context.miniTocItems
return nextHandleRequest(req, res)

1
package-lock.json сгенерированный
Просмотреть файл

@ -55,6 +55,7 @@
"next": "^10.2.3",
"node-fetch": "^2.6.1",
"parse5": "^6.0.1",
"path-to-regexp": "^0.1.7",
"port-used": "^2.0.8",
"rate-limit-redis": "^2.1.0",
"react": "^17.0.2",

Просмотреть файл

@ -61,6 +61,7 @@
"next": "^10.2.3",
"node-fetch": "^2.6.1",
"parse5": "^6.0.1",
"path-to-regexp": "^0.1.7",
"port-used": "^2.0.8",
"rate-limit-redis": "^2.1.0",
"react": "^17.0.2",
@ -200,6 +201,7 @@
"browser-test-server": "cross-env NODE_ENV=production PORT=4001 node server.js",
"browser-test-tests": "cross-env BROWSER=1 jest tests/browser/browser.js",
"sync-search": "start-server-and-test sync-search-server 4002 sync-search-indices",
"sync-search-ghes-release": "GHES_RELEASE=1 start-server-and-test sync-search-server 4002 sync-search-indices",
"sync-search-dry-run": "DRY_RUN=1 npm run sync-search",
"sync-search-server": "cross-env NODE_ENV=production PORT=4002 node server.js",
"sync-search-indices": "script/sync-search-indices.js",

Просмотреть файл

@ -265,14 +265,6 @@ Given: /enterprise/admin/installation/upgrading-github-enterprise Returns: /ente
### [`graphql/utils/process-upcoming-changes.js`](graphql/utils/process-upcoming-changes.js)
---
### [`graphql/utils/remove-hidden-schema-members.rb`](graphql/utils/remove-hidden-schema-members.rb)
---
@ -503,4 +495,4 @@ This script crawls the script directory, hooks on special comment markers in eac
---
---

Просмотреть файл

@ -51,19 +51,24 @@ if (!fs.existsSync(newSchemaFile)) {
const previewsFile = path.join(graphqlStaticDir, 'previews.json')
const changesFile = path.join(graphqlStaticDir, 'upcoming-changes.json')
const objectsFile = path.join(graphqlStaticDir, 'prerendered-objects.json')
const inputObjectsFile = path.join(graphqlStaticDir, 'prerendered-input-objects.json')
const previews = require(previewsFile)
const changes = require(changesFile)
const objects = require(objectsFile)
const inputObjects = require(inputObjectsFile)
// The prerendered objects file for the "old version" contains hardcoded links with the old version number.
// We need to update those links to include the new version to prevent a test from failing.
const regexOldVersion = new RegExp(oldVersion, 'gi')
const stringifiedObject = JSON.stringify(objects[oldVersionId])
.replace(regexOldVersion, newVersion)
const stringifiedInputObject = JSON.stringify(inputObjects[oldVersionId])
.replace(regexOldVersion, newVersion)
previews[newVersionId] = previews[oldVersionId]
changes[newVersionId] = changes[oldVersionId]
objects[newVersionId] = JSON.parse(stringifiedObject)
inputObjects[newVersionId] = JSON.parse(stringifiedInputObject)
// check that it worked
if (!Object.keys(previews).includes(newVersionId)) {
@ -81,10 +86,16 @@ if (!Object.keys(objects).includes(newVersionId)) {
process.exit(1)
}
if (!Object.keys(inputObjects).includes(newVersionId)) {
console.log(`Error! Can't find ${newVersionId} in ${inputObjectsFile}.`)
process.exit(1)
}
// write the new files
fs.writeFileSync(previewsFile, JSON.stringify(previews, null, 2))
fs.writeFileSync(changesFile, JSON.stringify(changes, null, 2))
fs.writeFileSync(objectsFile, JSON.stringify(objects, null, 2))
fs.writeFileSync(inputObjectsFile, JSON.stringify(inputObjects, null, 2))
// now create the new version directory in data/graphql
const srcDir = path.join(graphqlDataDir, oldVersionId)

Просмотреть файл

@ -32,10 +32,6 @@ try {
process.exit(1)
}
// TODO this step is only required as long as we support GHE versions *OLDER THAN* 2.21
// as soon as 2.20 is deprecated on 2021-02-11, we can remove all graphql-ruby filtering
const removeHiddenMembersScript = path.join(__dirname, './utils/remove-hidden-schema-members.rb')
const versionsToBuild = Object.keys(allVersions)
const currentLanguage = 'en'
@ -81,9 +77,8 @@ async function main () {
const schemaPath = getDataFilepath('schemas', graphqlVersion)
const previousSchemaString = fs.readFileSync(schemaPath, 'utf8')
const latestSchema = await getRemoteRawContent(schemaPath, graphqlVersion)
const safeForPublicSchema = removeHiddenMembers(schemaPath, latestSchema)
updateFile(schemaPath, safeForPublicSchema)
const schemaJsonPerVersion = await processSchemas(safeForPublicSchema, safeForPublicPreviews)
updateFile(schemaPath, latestSchema)
const schemaJsonPerVersion = await processSchemas(latestSchema, safeForPublicPreviews)
updateStaticFile(schemaJsonPerVersion, path.join(graphqlStaticDir, `schema-${graphqlVersion}.json`))
// Add some version specific data to the context
@ -103,7 +98,7 @@ async function main () {
// The Changelog is only build for free-pro-team@latest
const changelogEntry = await createChangelogEntry(
previousSchemaString,
safeForPublicSchema,
latestSchema,
safeForPublicPreviews,
previousUpcomingChanges.upcoming_changes,
yaml.load(safeForPublicChanges).upcoming_changes
@ -196,14 +191,3 @@ function updateStaticFile (json, filepath) {
const jsonString = JSON.stringify(json, null, 2)
updateFile(filepath, jsonString)
}
// run Ruby script to remove featureFlagged directives and other hidden members
function removeHiddenMembers (schemaPath, latestSchema) {
// have to write a temp file because the schema is too big to store in memory
const tempSchemaFilePath = `${schemaPath}-TEMP`
fs.writeFileSync(tempSchemaFilePath, latestSchema)
const remoteClean = execSync(`${removeHiddenMembersScript} ${tempSchemaFilePath}`).toString()
fs.unlinkSync(tempSchemaFilePath)
return remoteClean
}

Просмотреть файл

@ -1,108 +0,0 @@
#!/usr/bin/env ruby
require 'graphql'
require 'json'
if ARGV.empty?
puts 'Must provide a GraphQL IDL filepath'
exit 1
end
# borrowed from graphql-docs/lib/graphql_docs/update_internal_developer/idl.rb
class Printer < GraphQL::Language::DocumentFromSchemaDefinition
def build_object_type_node(object_type)
apply_directives_to_node(object_type, super)
end
def build_field_node(field)
apply_directives_to_node(field, super)
end
def build_union_type_node(union_type)
apply_directives_to_node(union_type, super)
end
def build_interface_type_node(interface_type)
apply_directives_to_node(interface_type, super)
end
def build_enum_type_node(enum_type)
apply_directives_to_node(enum_type, super)
end
def build_enum_value_node(enum_value)
apply_directives_to_node(enum_value, super)
end
def build_scalar_type_node(scalar_type)
apply_directives_to_node(scalar_type, super)
end
def build_argument_node(argument)
node = super
node = apply_directives_to_node(argument, node)
node = filter_possible_types_directive(argument, node)
node
end
def build_input_object_node(input_object)
apply_directives_to_node(input_object, super)
end
private
def apply_directives_to_node(defn, node)
directives = defn.ast_node ? defn.ast_node.directives : []
if directives.any?
node = node.merge(directives: directives)
end
node
end
def filter_possible_types_directive(argument, node)
possible_types_directive = argument.ast_node.directives.find { |directive| directive.name == "possibleTypes" }
return node unless possible_types_directive
concrete_types_argument = possible_types_directive.arguments.find { |argument| argument.name == "concreteTypes" }
filtered_concrete_types_value = concrete_types_argument.value.select { |type_name| warden.get_type(type_name) != nil }
filtered_concrete_types_argument = concrete_types_argument.merge(value: filtered_concrete_types_value)
abstract_type_argument = possible_types_directive.arguments.find { |argument| argument.name == "abstractType" }
new_possible_type_arguments = if abstract_type_argument.nil? || warden.get_type(abstract_type_argument.value).nil?
[filtered_concrete_types_argument]
else
[filtered_concrete_types_argument, abstract_type_argument]
end
new_possible_types_directive = possible_types_directive.merge(
arguments: new_possible_type_arguments
)
new_directives_for_node = node.directives.map do |dir_node|
if dir_node.name == "possibleTypes"
new_possible_types_directive
else
dir_node
end
end
node.merge(directives: new_directives_for_node)
end
end
def decode_idl(idl_str)
# Also remove feature-flagged things
schema = GraphQL::Schema.from_definition(idl_str.chomp.force_encoding(Encoding::UTF_8))
# GraphQL-Ruby puts all types in `schema.orphan_types`,
# but that breaks the `reachable_types` test,
# so empty out the previous set of orphan types
schema.send(:own_orphan_types).clear
Printer.new(schema).document.to_query_string
end
idl = ARGV[0]
idl_content = File.read(idl)
clean_idl = decode_idl(idl_content)
puts clean_idl

Просмотреть файл

@ -15,8 +15,8 @@ describe('sidebar', () => {
})
test('highlights active product on Enterprise pages', async () => {
expect($enterprisePage('.sidebar li.sidebar-product').length).toBe(1)
expect($enterprisePage('.sidebar li.sidebar-product > a').text().trim()).toBe('GitHub Enterprise')
expect($enterprisePage('.sidebar-products li.sidebar-product').length).toBe(1)
expect($enterprisePage('.sidebar-products li.sidebar-product > a').text().trim()).toBe('GitHub Enterprise')
})
test('highlights active product on GitHub pages', async () => {