Merge branch 'main' of github.com:github/docs-internal into script-to-use-short-versions
|
@ -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.
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
5
Gemfile
|
@ -1,5 +0,0 @@
|
|||
source 'http://rubygems.org'
|
||||
# ruby '2.4'
|
||||
|
||||
gem 'graphql', '1.10.6'
|
||||
gem 'graphql-schema_comparator', '~> 1.0.0'
|
20
Gemfile.lock
|
@ -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
|
После Ширина: | Высота: | Размер: 224 KiB |
После Ширина: | Высота: | Размер: 210 KiB |
После Ширина: | Высота: | Размер: 130 KiB |
После Ширина: | Высота: | Размер: 58 KiB |
После Ширина: | Высота: | Размер: 364 KiB |
После Ширина: | Высота: | Размер: 92 KiB |
После Ширина: | Высота: | Размер: 48 KiB |
После Ширина: | Высота: | Размер: 85 KiB |
После Ширина: | Высота: | Размер: 65 KiB |
После Ширина: | Высота: | Размер: 205 KiB |
После Ширина: | Высота: | Размер: 71 KiB |
После Ширина: | Высота: | Размер: 200 KiB |
После Ширина: | Высота: | Размер: 93 KiB |
После Ширина: | Высота: | Размер: 49 KiB |
После Ширина: | Высота: | Размер: 136 KiB |
После Ширина: | Высота: | Размер: 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 page’s content, developing the idea presented in a title with more detail.
|
||||
- Use approachable synonyms of words in the page’s title to help readers understand the article’s 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
|
||||
}
|
||||
|
|
|
@ -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:<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:<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:<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:<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:<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:<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:<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:<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:<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:<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:<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:<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:<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:<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:<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:<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:<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:<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:<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:<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)
|
||||
|
|
|
@ -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 () => {
|
||||
|
|