Merge branch 'main' into copilot-ga-megabranch
42
.github/workflows/pa11y.yml
vendored
@@ -1,42 +0,0 @@
|
||||
name: Pa11y
|
||||
|
||||
# **What it does**: Runs a static accessibility check on high traffic docs pages.
|
||||
# **Why we have it**: We want accessibility support for the docs.
|
||||
# **Who does it impact**: Docs engineering, users who need accessibility features.
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '25 17 * * *' # once a day at 17:25 UTC / 11:50 PST
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
test:
|
||||
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@dcd71f646680f2efd8db4afa5ad64fdcba30e748
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048
|
||||
with:
|
||||
node-version: '16.15.0'
|
||||
cache: npm
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci --include=optional
|
||||
|
||||
- name: Cache nextjs build
|
||||
uses: actions/cache@48af2dc4a9e8278b89d7fa154b955c30c6aaab09
|
||||
with:
|
||||
path: .next/cache
|
||||
key: ${{ runner.os }}-nextjs-${{ hashFiles('package*.json') }}
|
||||
|
||||
- name: Run build scripts
|
||||
run: npm run build
|
||||
|
||||
- name: Run pa11y tests
|
||||
run: npm run pa11y-test
|
||||
102
.pa11yci
@@ -1,102 +0,0 @@
|
||||
{
|
||||
"urls": [
|
||||
"http://localhost:4001/en",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent",
|
||||
"http://localhost:4001/en/github/working-with-github-pages",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/connecting-to-github-with-ssh",
|
||||
"http://localhost:4001/en/github/site-policy/github-terms-of-service",
|
||||
"http://localhost:4001/en/github/site-policy/github-privacy-statement",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/creating-a-strong-password",
|
||||
"http://localhost:4001/en/github",
|
||||
"http://localhost:4001/en/github/importing-your-projects-to-github/adding-locally-hosted-code-to-github",
|
||||
"http://localhost:4001/en/actions",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/creating-a-personal-access-token",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/checking-for-existing-ssh-keys",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/managing-remote-repositories",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/set-up-git",
|
||||
"http://localhost:4001/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository",
|
||||
"http://localhost:4001/en/github/writing-on-github/basic-writing-and-formatting-syntax",
|
||||
"http://localhost:4001/en/actions/reference/workflow-syntax-for-github-actions",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/about-remote-repositories",
|
||||
"http://localhost:4001/en/github/collaborating-with-issues-and-pull-requests/resolving-a-merge-conflict-using-the-command-line",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/setting-your-username-in-git",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/configuring-two-factor-authentication",
|
||||
"http://localhost:4001/en/rest",
|
||||
"http://localhost:4001/en/pages/configuring-a-custom-domain-for-your-github-pages-site",
|
||||
"http://localhost:4001/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-user-account/changing-your-primary-email-address",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-profile/why-are-my-contributions-not-showing-up-on-my-profile",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/error-permission-denied-publickey",
|
||||
"http://localhost:4001/en/github/collaborating-with-issues-and-pull-requests/creating-and-deleting-branches-within-your-repository",
|
||||
"http://localhost:4001/en/github/committing-changes-to-your-project/changing-a-commit-message",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/types-of-github-accounts",
|
||||
"http://localhost:4001/en/github/using-git/pushing-commits-to-a-remote-repository",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/testing-your-ssh-connection",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/fork-a-repo",
|
||||
"http://localhost:4001/en/graphql",
|
||||
"http://localhost:4001/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site",
|
||||
"http://localhost:4001/en/developers",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/supported-browsers",
|
||||
"http://localhost:4001/en/github/managing-your-work-on-github/about-project-boards",
|
||||
"http://localhost:4001/en/github/collaborating-with-issues-and-pull-requests/syncing-a-fork",
|
||||
"http://localhost:4001/en/pages/getting-started-with-github-pages/creating-a-github-pages-site",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/working-with-ssh-key-passphrases",
|
||||
"http://localhost:4001/en/github/authenticating-to-github",
|
||||
"http://localhost:4001/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-npm-for-use-with-github-packages",
|
||||
"http://localhost:4001/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site",
|
||||
"http://localhost:4001/en/pages/getting-started-with-github-pages/about-github-pages",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-profile",
|
||||
"http://localhost:4001/en/actions/getting-started-with-github-actions/about-github-actions",
|
||||
"http://localhost:4001/en/github/getting-started-with-github",
|
||||
"http://localhost:4001/en/github/creating-cloning-and-archiving-repositories/duplicating-a-repository",
|
||||
"http://localhost:4001/en/actions/getting-started-with-github-actions",
|
||||
"http://localhost:4001/en/actions/reference/events-that-trigger-workflows",
|
||||
"http://localhost:4001/en/desktop/getting-started-with-github-desktop/installing-github-desktop",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/ignoring-files",
|
||||
"http://localhost:4001/en/desktop",
|
||||
"http://localhost:4001/en/packages",
|
||||
"http://localhost:4001/en/actions/configuring-and-managing-workflows/configuring-a-workflow",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/managing-commit-signature-verification",
|
||||
"http://localhost:4001/en/organizations/restricting-access-to-your-organizations-data/about-oauth-app-access-restrictions",
|
||||
"http://localhost:4001/en/github/managing-files-in-a-repository/adding-a-file-to-a-repository-using-the-command-line",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/access-permissions-on-github",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/githubs-products",
|
||||
"http://localhost:4001/en/packages/publishing-and-managing-packages/about-github-packages",
|
||||
"http://localhost:4001/en/github/collaborating-with-issues-and-pull-requests/about-pull-request-reviews",
|
||||
"http://localhost:4001/en/github/writing-on-github/creating-and-highlighting-code-blocks",
|
||||
"http://localhost:4001/en/github/searching-for-information-on-github/searching-issues-and-pull-requests",
|
||||
"http://localhost:4001/en/actions/reference/context-and-expression-syntax-for-github-actions",
|
||||
"http://localhost:4001/en/github/managing-files-in-a-repository/navigating-code-on-github",
|
||||
"http://localhost:4001/en/github/teaching-and-learning-with-github-education/applying-for-a-student-developer-pack",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/caching-your-github-credentials-in-git",
|
||||
"http://localhost:4001/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-user-account/inviting-collaborators-to-a-personal-repository",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-user-account/changing-your-github-username",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/create-a-repo",
|
||||
"http://localhost:4001/en/pages/getting-started-with-github-pages",
|
||||
"http://localhost:4001/en/github/administering-a-repository/deleting-a-repository",
|
||||
"http://localhost:4001/en/actions/configuring-and-managing-workflows/using-environment-variables",
|
||||
"http://localhost:4001/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/removing-sensitive-data-from-a-repository",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-billing-and-payments-on-github/setting-your-billing-email",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-user-account",
|
||||
"http://localhost:4001/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue",
|
||||
"http://localhost:4001/en/github/managing-security-vulnerabilities/configuring-github-dependabot-security-updates",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/about-two-factor-authentication",
|
||||
"http://localhost:4001/en/pages/configuring-a-custom-domain-for-your-github-pages-site/about-custom-domains-and-github-pages",
|
||||
"http://localhost:4001/en/github/searching-for-information-on-github/searching-code",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/configuring-git-to-handle-line-endings",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/getting-changes-from-a-remote-repository",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/generating-a-new-gpg-key",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/accessing-github-using-two-factor-authentication",
|
||||
"http://localhost:4001/en/github/creating-cloning-and-archiving-repositories/licensing-a-repository",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/verifying-your-email-address",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-profile/personalizing-your-profile",
|
||||
"http://localhost:4001/en/pages/setting-up-a-github-pages-site-with-jekyll",
|
||||
"http://localhost:4001/en/github/managing-subscriptions-and-notifications-on-github",
|
||||
"http://localhost:4001/en/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork"
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 80 KiB |
@@ -8,8 +8,11 @@ export type LearningTrack = {
|
||||
}
|
||||
|
||||
export type MiniTocItem = {
|
||||
platform: string
|
||||
contents: string
|
||||
platform?: string
|
||||
contents: {
|
||||
href: string
|
||||
title: string
|
||||
}
|
||||
items?: MiniTocItem[]
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
import { createContext, useContext } from 'react'
|
||||
|
||||
export type MiniTocItem = {
|
||||
platform: string
|
||||
contents: string & { title: string; href: string }
|
||||
items?: MiniTocItem[]
|
||||
}
|
||||
import type { MiniTocItem } from 'components/context/ArticleContext'
|
||||
|
||||
export type RestContextT = {
|
||||
title: string
|
||||
|
||||
@@ -7,7 +7,8 @@ import { ActionList } from '@primer/react'
|
||||
import { Link } from 'components/Link'
|
||||
import { ProductTreeNode } from 'components/context/MainContext'
|
||||
import { EventType, sendEvent } from 'components/lib/events'
|
||||
import { MiniTocItem, useRestContext } from 'components/context/RestContext'
|
||||
import { useRestContext } from 'components/context/RestContext'
|
||||
import type { MiniTocItem } from 'components/context/ArticleContext'
|
||||
import styles from './SidebarProduct.module.scss'
|
||||
|
||||
type SectionProps = {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import cx from 'classnames'
|
||||
import { ActionList, Heading } from '@primer/react'
|
||||
|
||||
import { MiniTocItem } from 'components/context/ArticleContext'
|
||||
import type { MiniTocItem } from 'components/context/ArticleContext'
|
||||
import { Link } from 'components/Link'
|
||||
import { useTranslation } from 'components/hooks/useTranslation'
|
||||
|
||||
@@ -14,7 +14,7 @@ const renderTocItem = (item: MiniTocItem) => {
|
||||
return (
|
||||
<ActionList.Item
|
||||
as="li"
|
||||
key={item.contents}
|
||||
key={item.contents.href}
|
||||
className={item.platform}
|
||||
sx={{
|
||||
listStyle: 'none',
|
||||
@@ -30,7 +30,9 @@ const renderTocItem = (item: MiniTocItem) => {
|
||||
}}
|
||||
>
|
||||
<div className={cx('lh-condensed d-block width-full')}>
|
||||
<div dangerouslySetInnerHTML={{ __html: item.contents }} />
|
||||
<a className="d-block width-auto" href={item.contents.href}>
|
||||
{item.contents.title}
|
||||
</a>
|
||||
{item.items && item.items.length > 0 ? (
|
||||
<ul className="ml-3">{item.items.map(renderTocItem)}</ul>
|
||||
) : null}
|
||||
|
||||
@@ -0,0 +1,530 @@
|
||||
---
|
||||
title: Customizing the containers used by jobs
|
||||
intro: 'You can customize how your self-hosted runner invokes a container for a job.'
|
||||
versions:
|
||||
feature: 'container-hooks'
|
||||
type: reference
|
||||
miniTocMaxHeadingLevel: 4
|
||||
shortTitle: Customize containers used by jobs
|
||||
---
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note**: This feature is currently in beta and is subject to change.
|
||||
|
||||
{% endnote %}
|
||||
|
||||
## About container customization
|
||||
|
||||
{% data variables.product.prodname_actions %} allows you to run a job within a container, using the `container:` statement in your workflow file. For more information, see "[Running jobs in a container](/actions/using-jobs/running-jobs-in-a-container)." To process container-based jobs, the self-hosted runner creates a container for each job.
|
||||
|
||||
{% data variables.product.prodname_actions %} supports commands that let you customize the way your containers are created by the self-hosted runner. For example, you can use these commands to manage the containers through Kubernetes or Podman, and you can also customize the `docker run` or `docker create` commands used to invoke the container. The customization commands are run by a script, which is automatically triggered when a specific environment variable is set on the runner. For more information, see "[Triggering the customization script](#triggering-the-customization-script)" below.
|
||||
|
||||
This customization is only available for Linux-based self-hosted runners, and root user access is not required.
|
||||
|
||||
## Container customization commands
|
||||
|
||||
{% data variables.product.prodname_actions %} includes the following commands for container customization:
|
||||
|
||||
- [`prepare_job`](/actions/hosting-your-own-runners/customizing-the-containers-used-by-jobs#prepare_job): Called when a job is started.
|
||||
- [`cleanup_job`](/actions/hosting-your-own-runners/customizing-the-containers-used-by-jobs#cleanup_job): Called at the end of a job.
|
||||
- [`run_container_step`](/actions/hosting-your-own-runners/customizing-the-containers-used-by-jobs#run_container_step): Called once for each container action in the job.
|
||||
- [`run_script_step`](/actions/hosting-your-own-runners/customizing-the-containers-used-by-jobs#run_script_step): Runs any step that is not a container action.
|
||||
|
||||
Each of these customization commands must be defined in its own JSON file. The file name must match the command name, with the extension `.json`. For example, the `prepare_job` command is defined in `prepare_job.json`. These JSON files will then be run together on the self-hosted runner, as part of the main `index.js` script. This process is described in more detail in "[Generating the customization script](#generating-the-customization-script)."
|
||||
|
||||
These commands also include configuration arguments, explained below in more detail.
|
||||
|
||||
### `prepare_job`
|
||||
|
||||
The `prepare_job` command is called when a job is started. {% data variables.product.prodname_actions %} passes in any job or service containers the job has. This command will be called if you have any service or job containers in the job.
|
||||
|
||||
{% data variables.product.prodname_actions %} assumes that you will do the following tasks in the `prepare_job` command:
|
||||
|
||||
- Prune anything from previous jobs, if needed.
|
||||
- Create a network, if needed.
|
||||
- Pull the job and service containers.
|
||||
- Start the job container.
|
||||
- Start the service containers.
|
||||
- Write to the response file any information that {% data variables.product.prodname_actions %} will need:
|
||||
- Required: State whether the container is an `alpine` linux container (using the `isAlpine` boolean).
|
||||
- Optional: Any context fields you want to set on the job context, otherwise they will be unavailable for users to use. For more information, see "[`job` context](/actions/learn-github-actions/contexts#job-context)."
|
||||
- Return `0` when the health checks have succeeded and the job/service containers are started.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `jobContainer`: **Optional**. An object containing information about the specified job container.
|
||||
- `image`: **Required**. A string containing the Docker image.
|
||||
- `workingDirectory`: **Required**. A string containing the absolute path of the working directory.
|
||||
- `createOptions`: **Optional**. The optional _create_ options specified in the YAML. For more information, see "[Example: Running a job within a container](/actions/using-jobs/running-jobs-in-a-container#example-running-a-job-within-a-container)."
|
||||
- `environmentVariables`: **Optional**. Sets a map of key environment variables.
|
||||
- `userMountVolumes`: **Optional**. An array of user mount volumes set in the YAML. For more information, see "[Example: Running a job within a container](/actions/using-jobs/running-jobs-in-a-container#example-running-a-job-within-a-container)."
|
||||
- `sourceVolumePath`: **Required**. The source path to the volume that will be mounted into the Docker container.
|
||||
- `targetVolumePath`: **Required**. The target path to the volume that will be mounted into the Docker container.
|
||||
- `readOnly`: **Required**. Determines whether or not the mount should be read-only.
|
||||
- `systemMountVolumes`: **Required**. An array of mounts to mount into the container, same fields as above.
|
||||
- `sourceVolumePath`: **Required**. The source path to the volume that will be mounted into the Docker container.
|
||||
- `targetVolumePath`: **Required**. The target path to the volume that will be mounted into the Docker container.
|
||||
- `readOnly`: **Required**. Determines whether or not the mount should be read-only.
|
||||
- `registry` **Optional**. The Docker registry credentials for a private container registry.
|
||||
- `username`: **Optional**. The username of the registry account.
|
||||
- `password`: **Optional**. The password to the registry account.
|
||||
- `serverUrl`: **Optional**. The registry URL.
|
||||
- `portMappings`: **Optional**. A key value hash of _source:target_ ports to map into the container.
|
||||
- `services`: **Optional**. An array of service containers to spin up.
|
||||
- `contextName`: **Required**. The name of the service in the Job context.
|
||||
- `image`: **Required**. A string containing the Docker image.
|
||||
- `createOptions`: **Optional**. The optional _create_ options specified in the YAML. For more information, see "[Example: Running a job within a container](/actions/using-jobs/running-jobs-in-a-container#example-running-a-job-within-a-container)."
|
||||
- `environmentVariables`: **Optional**. Sets a map of key environment variables.
|
||||
- `userMountVolumes`: **Optional**. An array of mounts to mount into the container, same fields as above.
|
||||
- `sourceVolumePath`: **Required**. The source path to the volume that will be mounted into the Docker container.
|
||||
- `targetVolumePath`: **Required**. The target path to the volume that will be mounted into the Docker container.
|
||||
- `readOnly`: **Required**. Determines whether or not the mount should be read-only.
|
||||
- `registry` **Optional**. The Docker registry credentials for the private container registry.
|
||||
- `username`: **Optional**. The username of the registry account.
|
||||
- `password`: **Optional**. The password to the registry account.
|
||||
- `serverUrl`: **Optional**. The registry URL.
|
||||
- `portMappings`: **Optional**. A key value hash of _source:target_ ports to map into the container.
|
||||
|
||||
#### Example input
|
||||
|
||||
```json{:copy}
|
||||
{
|
||||
"command": "prepare_job",
|
||||
"responseFile": "/users/octocat/runner/_work/{guid}.json",
|
||||
"state": {},
|
||||
"args": {
|
||||
"jobContainer": {
|
||||
"image": "node:14.16",
|
||||
"workingDirectory": "/__w/octocat-test2/octocat-test2",
|
||||
"createOptions": "--cpus 1",
|
||||
"environmentVariables": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"userMountVolumes": [
|
||||
{
|
||||
"sourceVolumePath": "my_docker_volume",
|
||||
"targetVolumePath": "/volume_mount",
|
||||
"readOnly": false
|
||||
}
|
||||
],
|
||||
"systemMountVolumes": [
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work",
|
||||
"targetVolumePath": "/__w",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/externals",
|
||||
"targetVolumePath": "/__e",
|
||||
"readOnly": true
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_temp",
|
||||
"targetVolumePath": "/__w/_temp",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_actions",
|
||||
"targetVolumePath": "/__w/_actions",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_tool",
|
||||
"targetVolumePath": "/__w/_tool",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_temp/_github_home",
|
||||
"targetVolumePath": "/github/home",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_temp/_github_workflow",
|
||||
"targetVolumePath": "/github/workflow",
|
||||
"readOnly": false
|
||||
}
|
||||
],
|
||||
"registry": {
|
||||
"username": "octocat",
|
||||
"password": "examplePassword",
|
||||
"serverUrl": "https://index.docker.io/v1"
|
||||
},
|
||||
"portMappings": { "80": "801" }
|
||||
},
|
||||
"services": [
|
||||
{
|
||||
"contextName": "redis",
|
||||
"image": "redis",
|
||||
"createOptions": "--cpus 1",
|
||||
"environmentVariables": {},
|
||||
"userMountVolumes": [],
|
||||
"portMappings": { "80": "801" },
|
||||
"registry": {
|
||||
"username": "octocat",
|
||||
"password": "examplePassword",
|
||||
"serverUrl": "https://index.docker.io/v1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Example output
|
||||
|
||||
This example output is the contents of the `responseFile` defined in the input above.
|
||||
|
||||
```json{:copy}
|
||||
{
|
||||
"state": {
|
||||
"network": "example_network_53269bd575972817b43f7733536b200c",
|
||||
"jobContainer": "82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480",
|
||||
"serviceContainers": {
|
||||
"redis": "60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105"
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"container": {
|
||||
"id": "82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480",
|
||||
"network": "example_network_53269bd575972817b43f7733536b200c"
|
||||
},
|
||||
"services": {
|
||||
"redis": {
|
||||
"id": "60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105",
|
||||
"ports": {
|
||||
"8080": "8080"
|
||||
},
|
||||
"network": "example_network_53269bd575972817b43f7733536b200c"
|
||||
}
|
||||
},
|
||||
"isAlpine": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### `cleanup_job`
|
||||
|
||||
The `cleanup_job` command is called at the end of a job. {% data variables.product.prodname_actions %} assumes that you will do the following tasks in the `cleanup_job` command:
|
||||
|
||||
- Stop any running service or job containers (or the equivalent pod).
|
||||
- Stop the network (if one exists).
|
||||
- Delete any job or service containers (or the equivalent pod).
|
||||
- Delete the network (if one exists).
|
||||
- Cleanup anything else that was created for the job.
|
||||
|
||||
#### Arguments
|
||||
|
||||
No arguments are provided for `cleanup_job`.
|
||||
|
||||
#### Example input
|
||||
|
||||
```json{:copy}
|
||||
{
|
||||
"command": "cleanup_job",
|
||||
"responseFile": null,
|
||||
"state": {
|
||||
"network": "example_network_53269bd575972817b43f7733536b200c",
|
||||
"jobContainer": "82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480",
|
||||
"serviceContainers": {
|
||||
"redis": "60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105"
|
||||
}
|
||||
},
|
||||
"args": {}
|
||||
}
|
||||
```
|
||||
|
||||
#### Example output
|
||||
|
||||
No output is expected for `cleanup_job`.
|
||||
|
||||
### `run_container_step`
|
||||
|
||||
The `run_container_step` command is called once for each container action in your job. {% data variables.product.prodname_actions %} assumes that you will do the following tasks in the `run_container_step` command:
|
||||
|
||||
- Pull or build the required container (or fail if you cannot).
|
||||
- Run the container action and return the exit code of the container.
|
||||
- Stream any step logs output to stdout and stderr.
|
||||
- Cleanup the container after it executes.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `image`: **Optional**. A string containing the docker image. Otherwise a dockerfile must be provided.
|
||||
- `dockerfile`: **Optional**. A string containing the path to the dockerfile, otherwise an image must be provided.
|
||||
- `entryPointArgs`: **Optional**. A list containing the entry point args.
|
||||
- `entryPoint`: **Optional**. The container entry point to use if the default image entrypoint should be overwritten.
|
||||
- `workingDirectory`: **Required**. A string containing the absolute path of the working directory.
|
||||
- `createOptions`: **Optional**. The optional _create_ options specified in the YAML. For more information, see "[Example: Running a job within a container](/actions/using-jobs/running-jobs-in-a-container#example-running-a-job-within-a-container)."
|
||||
- `environmentVariables`: **Optional**. Sets a map of key environment variables.
|
||||
- `prependPath`: **Optional**. An array of additional paths to prepend to the `$PATH` variable.
|
||||
- `userMountVolumes`: **Optional**. an array of user mount volumes set in the YAML. For more information, see "[Example: Running a job within a container](/actions/using-jobs/running-jobs-in-a-container#example-running-a-job-within-a-container)."
|
||||
- `sourceVolumePath`: **Required**. The source path to the volume that will be mounted into the Docker container.
|
||||
- `targetVolumePath`: **Required**. The target path to the volume that will be mounted into the Docker container.
|
||||
- `readOnly`: **Required**. Determines whether or not the mount should be read-only.
|
||||
- `systemMountVolumes`: **Required**. An array of mounts to mount into the container, using the same fields as above.
|
||||
- `sourceVolumePath`: **Required**. The source path to the volume that will be mounted into the Docker container.
|
||||
- `targetVolumePath`: **Required**. The target path to the volume that will be mounted into the Docker container.
|
||||
- `readOnly`: **Required**. Determines whether or not the mount should be read-only.
|
||||
- `registry` **Optional**. The Docker registry credentials for a private container registry.
|
||||
- `username`: **Optional**. The username of the registry account.
|
||||
- `password`: **Optional**. The password to the registry account.
|
||||
- `serverUrl`: **Optional**. The registry URL.
|
||||
- `portMappings`: **Optional**. A key value hash of the _source:target_ ports to map into the container.
|
||||
|
||||
#### Example input for image
|
||||
|
||||
If you're using a Docker image, you can specify the image name in the `"image":` parameter.
|
||||
|
||||
```json{:copy}
|
||||
{
|
||||
"command": "run_container_step",
|
||||
"responseFile": null,
|
||||
"state": {
|
||||
"network": "example_network_53269bd575972817b43f7733536b200c",
|
||||
"jobContainer": "82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480",
|
||||
"serviceContainers": {
|
||||
"redis": "60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105"
|
||||
}
|
||||
},
|
||||
"args": {
|
||||
"image": "node:14.16",
|
||||
"dockerfile": null,
|
||||
"entryPointArgs": ["-f", "/dev/null"],
|
||||
"entryPoint": "tail",
|
||||
"workingDirectory": "/__w/octocat-test2/octocat-test2",
|
||||
"createOptions": "--cpus 1",
|
||||
"environmentVariables": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"prependPath": ["/foo/bar", "bar/foo"],
|
||||
"userMountVolumes": [
|
||||
{
|
||||
"sourceVolumePath": "my_docker_volume",
|
||||
"targetVolumePath": "/volume_mount",
|
||||
"readOnly": false
|
||||
}
|
||||
],
|
||||
"systemMountVolumes": [
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work",
|
||||
"targetVolumePath": "/__w",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/externals",
|
||||
"targetVolumePath": "/__e",
|
||||
"readOnly": true
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_temp",
|
||||
"targetVolumePath": "/__w/_temp",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_actions",
|
||||
"targetVolumePath": "/__w/_actions",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_tool",
|
||||
"targetVolumePath": "/__w/_tool",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_temp/_github_home",
|
||||
"targetVolumePath": "/github/home",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_temp/_github_workflow",
|
||||
"targetVolumePath": "/github/workflow",
|
||||
"readOnly": false
|
||||
}
|
||||
],
|
||||
"registry": null,
|
||||
"portMappings": { "80": "801" }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Example input for Dockerfile
|
||||
|
||||
If your container is defined by a Dockerfile, this example demonstrates how to specify the path to a `Dockerfile` in your input, using the `"dockerfile":` parameter.
|
||||
|
||||
```json{:copy}
|
||||
{
|
||||
"command": "run_container_step",
|
||||
"responseFile": null,
|
||||
"state": {
|
||||
"network": "example_network_53269bd575972817b43f7733536b200c",
|
||||
"jobContainer": "82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480",
|
||||
"services": {
|
||||
"redis": "60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105"
|
||||
}
|
||||
},
|
||||
"args": {
|
||||
"image": null,
|
||||
"dockerfile": "/__w/_actions/foo/dockerfile",
|
||||
"entryPointArgs": ["hello world"],
|
||||
"entryPoint": "echo",
|
||||
"workingDirectory": "/__w/octocat-test2/octocat-test2",
|
||||
"createOptions": "--cpus 1",
|
||||
"environmentVariables": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"prependPath": ["/foo/bar", "bar/foo"],
|
||||
"userMountVolumes": [
|
||||
{
|
||||
"sourceVolumePath": "my_docker_volume",
|
||||
"targetVolumePath": "/volume_mount",
|
||||
"readOnly": false
|
||||
}
|
||||
],
|
||||
"systemMountVolumes": [
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work",
|
||||
"targetVolumePath": "/__w",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/externals",
|
||||
"targetVolumePath": "/__e",
|
||||
"readOnly": true
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_temp",
|
||||
"targetVolumePath": "/__w/_temp",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_actions",
|
||||
"targetVolumePath": "/__w/_actions",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_tool",
|
||||
"targetVolumePath": "/__w/_tool",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_temp/_github_home",
|
||||
"targetVolumePath": "/github/home",
|
||||
"readOnly": false
|
||||
},
|
||||
{
|
||||
"sourceVolumePath": "/home/octocat/git/runner/_layout/_work/_temp/_github_workflow",
|
||||
"targetVolumePath": "/github/workflow",
|
||||
"readOnly": false
|
||||
}
|
||||
],
|
||||
"registry": null,
|
||||
"portMappings": { "80": "801" }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Example output
|
||||
|
||||
No output is expected for `run_container_step`.
|
||||
|
||||
### `run_script_step`
|
||||
|
||||
{% data variables.product.prodname_actions %} assumes that you will do the following tasks:
|
||||
|
||||
- Invoke the provided script inside the job container and return the exit code.
|
||||
- Stream any step log output to stdout and stderr.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `entryPointArgs`: **Optional**. A list containing the entry point arguments.
|
||||
- `entryPoint`: **Optional**. The container entry point to use if the default image entrypoint should be overwritten.
|
||||
- `prependPath`: **Optional**. An array of additional paths to prepend to the `$PATH` variable.
|
||||
- `workingDirectory`: **Required**. A string containing the absolute path of the working directory.
|
||||
- `environmentVariables`: **Optional**. Sets a map of key environment variables.
|
||||
|
||||
#### Example input
|
||||
|
||||
```json{:copy}
|
||||
{
|
||||
"command": "run_script_step",
|
||||
"responseFile": null,
|
||||
"state": {
|
||||
"network": "example_network_53269bd575972817b43f7733536b200c",
|
||||
"jobContainer": "82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480",
|
||||
"serviceContainers": {
|
||||
"redis": "60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105"
|
||||
}
|
||||
},
|
||||
"args": {
|
||||
"entryPointArgs": ["-e", "/runner/temp/example.sh"],
|
||||
"entryPoint": "bash",
|
||||
"environmentVariables": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"prependPath": ["/foo/bar", "bar/foo"],
|
||||
"workingDirectory": "/__w/octocat-test2/octocat-test2"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Example output
|
||||
|
||||
No output is expected for `run_script_step`.
|
||||
|
||||
## Generating the customization script
|
||||
|
||||
{% data variables.product.prodname_dotcom %} has created an example repository that demonstrates how to generate customization scripts for Docker and Kubernetes.
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note:** The resulting scripts are available for testing purposes, and you will need to determine whether they are appropriate for your requirements.
|
||||
|
||||
{% endnote %}
|
||||
|
||||
1. Clone the [actions/runner-container-hooks](https://github.com/actions/runner-container-hooks) repository to your self-hosted runner.
|
||||
|
||||
1. The `examples/` directory contains some existing customization commands, each with its own JSON file. You can review these examples and use them as a starting point for your own customization commands.
|
||||
|
||||
- `prepare_job.json`
|
||||
- `run_script_step.json`
|
||||
- `run_container_step.json`
|
||||
|
||||
1. Build the npm packages. These commands generate the `index.js` files inside `packages/docker/dist` and `packages/k8s/dist`.
|
||||
|
||||
```shell
|
||||
npm install && npm run bootstrap && npm run build-all
|
||||
```
|
||||
|
||||
When the resulting `index.js` is triggered by {% data variables.product.prodname_actions %}, it will run the customization commands defined in the JSON files. To trigger the `index.js`, you will need to add it your `ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER` environment variable, as described in the next section.
|
||||
|
||||
## Triggering the customization script
|
||||
|
||||
The custom script must be located on the runner, but should not be stored in the self-hosted runner application directory. The scripts are executed in the security context of the service account that's running the runner service.
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note**: The triggered script is processed synchronously, so it will block job execution while running.
|
||||
|
||||
{% endnote %}
|
||||
|
||||
The script is automatically executed when the runner has the following environment variable containing an absolute path to the script:
|
||||
|
||||
- `ACTIONS_RUNNER_CONTAINER_HOOK`: The script defined in this environment variable is triggered when a job has been assigned to a runner, but before the job starts running.
|
||||
|
||||
To set this environment variable, you can either add it to the operating system, or add it to a file named `.env` within the self-hosted runner application directory. For example, the following `.env` entry will have the runner automatically run the script at `/Users/octocat/runner/index.js` before each container-based job runs:
|
||||
|
||||
```bash
|
||||
ACTIONS_RUNNER_CONTAINER_HOOK=/Users/octocat/runner/index.js
|
||||
```
|
||||
|
||||
If you want to ensure that your job always runs inside a container, and subsequently always applies your container customizations, you can set the `ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER` variable on the self hosted runner to `true`. This will fail jobs that do not specify a job container.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### No timeout setting
|
||||
|
||||
There is currently no timeout setting available for the script executed by `ACTIONS_RUNNER_CONTAINER_HOOK`. As a result, you could consider adding timeout handling to your script.
|
||||
|
||||
### Reviewing the workflow run log
|
||||
|
||||
To confirm whether your scripts are executing, you can review the logs for that job. For more information on checking the logs, see "[Viewing logs to diagnose failures](/actions/monitoring-and-troubleshooting-workflows/using-workflow-run-logs#viewing-logs-to-diagnose-failures)."
|
||||
@@ -20,6 +20,7 @@ children:
|
||||
- /adding-self-hosted-runners
|
||||
- /autoscaling-with-self-hosted-runners
|
||||
- /running-scripts-before-or-after-a-job
|
||||
- /customizing-the-containers-used-by-jobs
|
||||
- /configuring-the-self-hosted-runner-application-as-a-service
|
||||
- /using-a-proxy-server-with-self-hosted-runners
|
||||
- /using-labels-with-self-hosted-runners
|
||||
|
||||
@@ -42,7 +42,6 @@ If you purchased {% data variables.product.prodname_enterprise %} through a Micr
|
||||
|
||||
### Billing for {% data variables.product.prodname_codespaces %} prebuilds
|
||||
|
||||
{% data reusables.codespaces.prebuilds-beta-note %}
|
||||
|
||||
{% data reusables.codespaces.billing-for-prebuilds %}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
title: About Codespaces prebuilds
|
||||
shortTitle: About prebuilds
|
||||
intro: Codespaces prebuilds help to speed up the creation of new codespaces.
|
||||
intro: Codespaces prebuilds help to speed up the creation of new codespaces for large or complex repositories.
|
||||
versions:
|
||||
fpt: '*'
|
||||
ghec: '*'
|
||||
@@ -10,15 +10,13 @@ topics:
|
||||
product: '{% data reusables.gated-features.codespaces %}'
|
||||
---
|
||||
|
||||
{% data reusables.codespaces.prebuilds-beta-note %}
|
||||
|
||||
## Overview
|
||||
|
||||
Prebuilding your codespaces allows you to be more productive and access your codespace faster, regardless of the size and complexity of your project. This is because any source code, editor extensions, project dependencies, commands, and configurations have already been downloaded, installed, and applied before you create a codespace for your project. Think of a prebuild as a "ready-to-go" template for a codespace.
|
||||
Prebuilding your codespaces allows you to be more productive and access your codespace faster, particularly if your repository is large or complex and new codespaces currently take more than 2 minutes to start. This is because any source code, editor extensions, project dependencies, commands, and configurations have already been downloaded, installed, and applied before you create a codespace for your project. Think of a prebuild as a "ready-to-go" template for a codespace.
|
||||
|
||||
By default, whenever you push changes to your repository, {% data variables.product.prodname_codespaces %} uses {% data variables.product.prodname_actions %} to automatically update your prebuilds.
|
||||
|
||||
When prebuilds are available for a particular branch of a repository, and for your region, you'll see the "{% octicon "zap" aria-label="The zap icon" %} Prebuild ready" label in the list of machine type options when you create a codespace. For more information, see "[Creating a codespace](/codespaces/developing-in-codespaces/creating-a-codespace#creating-a-codespace)."
|
||||
When prebuilds are available for a particular branch of a repository, and for your region, you'll see the "{% octicon "zap" aria-label="The zap icon" %} Prebuild ready" label in the list of machine type options when you create a codespace. If a prebuild is still being created, you will see the "{% octicon "history" aria-label="The history icon" %} Prebuild in progress" label. For more information, see "[Creating a codespace](/codespaces/developing-in-codespaces/creating-a-codespace#creating-a-codespace)."
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -13,8 +13,6 @@ product: '{% data reusables.gated-features.codespaces %}'
|
||||
permissions: People with admin access to a repository can configure prebuilds for the repository.
|
||||
---
|
||||
|
||||
{% data reusables.codespaces.prebuilds-beta-note %}
|
||||
|
||||
You can set up a prebuild configuration for a specific branch of your repository.
|
||||
|
||||
Any branch created from a prebuild-enabled base branch will typically also get assigned a prebuild during codespace creation. This is true if the dev container on the branch is the same as on the base branch. This is because the majority of the prebuild configuration for branches with the same dev container configuration are identical, so developers can benefit from faster codespace creation times on those branches also. For more information, see "[Introduction to dev containers](/codespaces/setting-up-your-project-for-codespaces/introduction-to-dev-containers)."
|
||||
@@ -38,7 +36,7 @@ Before you can configure prebuilds for your project the following must be true:
|
||||
|
||||

|
||||
|
||||
1. Choose the branch for which you want to set up a prebuild.
|
||||
1. Choose the branch for which you want to set up a prebuild.
|
||||
|
||||

|
||||
|
||||
@@ -48,7 +46,15 @@ Before you can configure prebuilds for your project the following must be true:
|
||||
|
||||
{% endnote %}
|
||||
|
||||
1. Choose the regions in which you want to set up a prebuild. Developers must be located in a region you select to be able to create codespaces from a prebuild. Alternatively, select **All regions**.
|
||||
1. Choose how you want to automatically trigger updates of the prebuild template.
|
||||
|
||||
* **Every push** (the default setting) - With this setting, prebuild configurations will be updated on every push made to the given branch. This will ensure that codespaces generated from a prebuild template always contain the latest codespace configuration, including any recently added or updated dependencies.
|
||||
* **On configuration change** - With this setting, prebuild configurations will be updated every time associated configuration files for a given repo and branch are updated. This ensures that changes to the dev container configuration files for the repository are used when a codespace is generated from a prebuild template. The Actions workflow that updates the prebuild template will run less often, so this option will use fewer Actions minutes. However, this option will not guarantee that codespaces always include recently added or updated dependencies, so these may have to be added or updated manually after a codespace has been created.
|
||||
* **Scheduled** - With this setting, you can have your prebuild configurations update on a custom schedule that's defined by you. This can reduce consumption of Actions minutes, however, with this option, codespaces may be created that do not use the latest dev container configuration changes.
|
||||
|
||||

|
||||
|
||||
1. Select **Reduce prebuild available to only specific regions** to limit access to your prebuilt image, then select which regions you want it available in. Developers can only create codespaces from a prebuild if they are located in a region you select. By default, your prebuilt image is available to all regions where codespaces is available and storage costs apply for each region.
|
||||
|
||||

|
||||
|
||||
@@ -60,13 +66,17 @@ Before you can configure prebuilds for your project the following must be true:
|
||||
|
||||
{% endnote %}
|
||||
|
||||
1. Choose how you want to automatically trigger updates of the prebuild template.
|
||||
1. Set the number of prebuild template versions to be retained. You can input any number between 1 and 5. The default number of saved versions is 2, which means that only the latest template version and the previous version are saved.
|
||||
|
||||
* **Every push** (the default setting) - With this setting, prebuild configurations will be updated on every push made to the given branch. This will ensure that codespaces generated from a prebuild template always contain the latest codespace configuration, including any recently added or updated dependencies.
|
||||
* **On configuration change** - With this setting, prebuild configurations will be updated every time associated configuration files for a given repo and branch are updated. This ensures that changes to the dev container configuration files for the repository are used when a codespace is generated from a prebuild template. The Actions workflow that updates the prebuild template will run less often, so this option will use fewer Actions minutes. However, this option will not guarantee that codespaces always include recently added or updated dependencies, so these may have to be added or updated manually after a codespace has been created.
|
||||
* **Scheduled** - With this setting, you can have your prebuild configurations update on a custom schedule that's defined by you. This can reduce consumption of Actions minutes, and reduce the amount of time during which prebuilds are unavailable because they are being updated. However, with this option, codespaces may be created that do not use the latest dev container configuration changes.
|
||||
Depending on your prebuild trigger settings, your prebuild template could change with each push or on each dev container configuration change. Retaining older versions of prebuild templates enables you to create a prebuild from an older commit with a different dev container configuration than the current prebuild template. Since there is a storage cost associated with retaining prebuild template versions, you can choose the number of versions to be retained based on the needs of your team. For more information on billing, see "[About billing for {% data variables.product.prodname_codespaces %}](/billing/managing-billing-for-github-codespaces/about-billing-for-codespaces#codespaces-pricing)."
|
||||
|
||||

|
||||
If you set the number of prebuild template versions to save to 1, {% data variables.product.prodname_codespaces %} will only save the latest version of the prebuild template and will delete the older version each time the template is updated. This means you will not get a prebuilt codespace if you go back to an older dev container configuration.
|
||||
|
||||

|
||||
|
||||
1. Add users or teams to notify when the prebuild workflow run fails for this configuration. You can begin typing a username, team name, or full name, then click the name once it appears to add them to the list. The users or teams you add will receive an email when prebuild failures occur, containing a link to the workflow run logs to help with further investigation.
|
||||
|
||||

|
||||
|
||||
1. Click **Create**.
|
||||
|
||||
|
||||
@@ -15,5 +15,4 @@ children:
|
||||
- /managing-prebuilds
|
||||
- /testing-dev-container-changes
|
||||
---
|
||||
|
||||
{% data reusables.codespaces.prebuilds-beta-note %}
|
||||
|
||||
|
||||
@@ -12,8 +12,6 @@ product: '{% data reusables.gated-features.codespaces %}'
|
||||
miniTocMaxHeadingLevel: 3
|
||||
---
|
||||
|
||||
{% data reusables.codespaces.prebuilds-beta-note %}
|
||||
|
||||
## Checking, changing, and deleting your prebuild configurations
|
||||
|
||||
The prebuilds that you configure for a repository are created and updated using a {% data variables.product.prodname_actions %} workflow, managed by the {% data variables.product.prodname_codespaces %} service.
|
||||
|
||||
@@ -14,8 +14,6 @@ product: '{% data reusables.gated-features.codespaces %}'
|
||||
permissions: People with write permissions to a repository can create or edit the dev container configuration for a branch.
|
||||
---
|
||||
|
||||
{% data reusables.codespaces.prebuilds-beta-note %}
|
||||
|
||||
Any changes you make to the dev container configuration for a prebuild-enabled branch will result in an update to the codespace configuration and the associated prebuild template. It’s therefore important to test such changes in a codespace from a test branch before committing your changes to a branch of your repository that's actively used. This will ensure you’re not introducing breaking changes for your team.
|
||||
|
||||
For more information, see "[Introduction to dev containers](/codespaces/setting-up-your-project-for-codespaces/introduction-to-dev-containers)."
|
||||
|
||||
@@ -12,8 +12,6 @@ product: '{% data reusables.gated-features.codespaces %}'
|
||||
miniTocMaxHeadingLevel: 3
|
||||
---
|
||||
|
||||
{% data reusables.codespaces.prebuilds-beta-note %}
|
||||
|
||||
For more information about {% data variables.product.prodname_codespaces %} prebuilds, see "[Prebuilding your codespaces](/codespaces/prebuilding-your-codespaces)."
|
||||
|
||||
## Checking whether a codespace was created from a prebuild?
|
||||
|
||||
@@ -158,7 +158,7 @@ Because user-level permissions are granted on an individual user basis, you can
|
||||
|
||||
## User-to-server requests
|
||||
|
||||
While most of your API interaction should occur using your server-to-server installation access tokens, certain endpoints allow you to perform actions via the API using a user access token. Your app can make the following requests using [GraphQL v4]({% ifversion ghec %}/free-pro-team@latest{% endif %}/graphql) or [REST v3](/rest) endpoints.
|
||||
While most of your API interaction should occur using your server-to-server installation access tokens, certain endpoints allow you to perform actions via the API using a user access token. Your app can make the following requests using [GraphQL]({% ifversion ghec %}/free-pro-team@latest{% endif %}/graphql) or [REST](/rest) endpoints.
|
||||
|
||||
### Supported endpoints
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ We recommend reviewing the list of API endpoints you need as early as possible.
|
||||
|
||||
### Design to stay within API rate limits
|
||||
|
||||
GitHub Apps use [sliding rules for rate limits](/apps/building-github-apps/understanding-rate-limits-for-github-apps/), which can increase based on the number of repositories and users in the organization. A GitHub App can also make use of [conditional requests](/rest/overview/resources-in-the-rest-api#conditional-requests) or consolidate requests by using the [GraphQL API V4]({% ifversion ghec %}/free-pro-team@latest{% endif %}/graphql).
|
||||
GitHub Apps use [sliding rules for rate limits](/apps/building-github-apps/understanding-rate-limits-for-github-apps/), which can increase based on the number of repositories and users in the organization. A GitHub App can also make use of [conditional requests](/rest/overview/resources-in-the-rest-api#conditional-requests) or consolidate requests by using the [GraphQL API]({% ifversion ghec %}/free-pro-team@latest{% endif %}/graphql).
|
||||
|
||||
### Register a new GitHub App
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ topics:
|
||||
- API
|
||||
---
|
||||
|
||||
There are two stable versions of the GitHub API: the [REST API](/rest) and the [GraphQL API]({% ifversion ghec %}/free-pro-team@latest{% endif %}/graphql). When using the REST API, we encourage you to [request v3 via the `Accept` header](/v3/media/#request-specific-version). For information on using the GraphQL API, see the [v4 docs]({% ifversion ghec %}/free-pro-team@latest{% endif %}/graphql).
|
||||
There are two stable versions of the GitHub API: the [REST API](/rest) and the [GraphQL API]({% ifversion ghec %}/free-pro-team@latest{% endif %}/graphql).
|
||||
|
||||
## Deprecated versions
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ topics:
|
||||
- API
|
||||
---
|
||||
|
||||
You can access most objects in GitHub (users, issues, pull requests, etc.) using either the REST API or the GraphQL API. You can find the **global node ID** of many objects from within the REST API and use these IDs in your GraphQL operations. For more information, see "[Preview GraphQL API v4 Node IDs in REST API v3 resources](https://developer.github.com/changes/2017-12-19-graphql-node-id/)."
|
||||
You can access most objects in GitHub (users, issues, pull requests, etc.) using either the REST API or the GraphQL API. You can find the **global node ID** of many objects from within the REST API and use these IDs in your GraphQL operations. For more information, see "[Preview GraphQL API Node IDs in REST API resources](https://developer.github.com/changes/2017-12-19-graphql-node-id/)."
|
||||
|
||||
{% note %}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ topics:
|
||||
|
||||
## Node limit
|
||||
|
||||
To pass [schema](/graphql/guides/introduction-to-graphql#schema) validation, all GraphQL API v4 [calls](/graphql/guides/forming-calls-with-graphql) must meet these standards:
|
||||
To pass [schema](/graphql/guides/introduction-to-graphql#schema) validation, all GraphQL API [calls](/graphql/guides/forming-calls-with-graphql) must meet these standards:
|
||||
|
||||
* Clients must supply a `first` or `last` argument on any [connection](/graphql/guides/introduction-to-graphql#connection).
|
||||
* Values of `first` and `last` must be within 1-100.
|
||||
@@ -130,30 +130,30 @@ These two examples show how to calculate the total nodes in a call.
|
||||
|
||||
## Rate limit
|
||||
|
||||
The GraphQL API v4 limit is different from the REST API v3's [rate limits](/rest/overview/resources-in-the-rest-api#rate-limiting).
|
||||
The GraphQL API limit is different from the REST API's [rate limits](/rest/overview/resources-in-the-rest-api#rate-limiting).
|
||||
|
||||
Why are the API rate limits different? With [GraphQL](/graphql), one GraphQL call can replace [multiple REST calls](/graphql/guides/migrating-from-rest-to-graphql). A single complex GraphQL call could be the equivalent of thousands of REST requests. While a single GraphQL call would fall well below the REST API rate limit, the query might be just as expensive for GitHub's servers to compute.
|
||||
|
||||
To accurately represent the server cost of a query, the GraphQL API v4 calculates a call's **rate limit score** based on a normalized scale of points. A query's score factors in first and last arguments on a parent connection and its children.
|
||||
To accurately represent the server cost of a query, the GraphQL API calculates a call's **rate limit score** based on a normalized scale of points. A query's score factors in first and last arguments on a parent connection and its children.
|
||||
|
||||
* The formula uses the `first` and `last` arguments on a parent connection and its children to pre-calculate the potential load on GitHub's systems, such as MySQL, ElasticSearch, and Git.
|
||||
* Each new connection has its own point value. Points are combined with other points from the call into an overall rate limit score.
|
||||
|
||||
The GraphQL API v4 rate limit is **5,000 points per hour**.
|
||||
The GraphQL API rate limit is **5,000 points per hour**.
|
||||
|
||||
Note that 5,000 points per hour is not the same as 5,000 calls per hour: the GraphQL API v4 and REST API v3 use different rate limits.
|
||||
Note that 5,000 points per hour is not the same as 5,000 calls per hour: the GraphQL API and REST API use different rate limits.
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note**: The current formula and rate limit are subject to change as we observe how developers use the GraphQL API v4.
|
||||
**Note**: The current formula and rate limit are subject to change as we observe how developers use the GraphQL API.
|
||||
|
||||
{% endnote %}
|
||||
|
||||
### Returning a call's rate limit status
|
||||
|
||||
With the REST API v3, you can check the rate limit status by [inspecting](/rest/overview/resources-in-the-rest-api#rate-limiting) the returned HTTP headers.
|
||||
With the REST API, you can check the rate limit status by [inspecting](/rest/overview/resources-in-the-rest-api#rate-limiting) the returned HTTP headers.
|
||||
|
||||
With the GraphQL API v4, you can check the rate limit status by querying fields on the `rateLimit` object:
|
||||
With the GraphQL API, you can check the rate limit status by querying fields on the `rateLimit` object:
|
||||
|
||||
```graphql
|
||||
query {
|
||||
@@ -186,7 +186,7 @@ Querying the `rateLimit` object returns a call's score, but running the call cou
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note**: The minimum cost of a call to the GraphQL API v4 is **1**, representing a single request.
|
||||
**Note**: The minimum cost of a call to the GraphQL API is **1**, representing a single request.
|
||||
|
||||
{% endnote %}
|
||||
|
||||
|
||||
@@ -24,12 +24,6 @@ topics:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% warning %}
|
||||
|
||||
Warning: As of late October 2021, the official Octokit libraries are not currently maintained. For more information, see [this discussion in the octokit.js repository](https://github.com/octokit/octokit.js/discussions/620).
|
||||
|
||||
{% endwarning %}
|
||||
|
||||
# Third-party libraries
|
||||
|
||||
### Clojure
|
||||
|
||||
@@ -185,7 +185,7 @@ _Search_
|
||||
- [`PUT /repos/:owner/:repo/topics`](/rest/reference/repos#replace-all-repository-topics) (:write)
|
||||
- [`POST /repos/:owner/:repo/transfer`](/rest/reference/repos#transfer-a-repository) (:write)
|
||||
{% ifversion fpt or ghec -%}
|
||||
- [`GET /repos/:owner/:repo/vulnerability-alerts`](/rest/reference/repos#enable-vulnerability-alerts) (:write)
|
||||
- [`GET /repos/:owner/:repo/vulnerability-alerts`](/rest/reference/repos#enable-vulnerability-alerts) (:read)
|
||||
{% endif -%}
|
||||
{% ifversion fpt or ghec -%}
|
||||
- [`PUT /repos/:owner/:repo/vulnerability-alerts`](/rest/reference/repos#enable-vulnerability-alerts) (:write)
|
||||
|
||||
@@ -25,7 +25,7 @@ We encourage you to [explicitly request this version via the `Accept` header](/r
|
||||
|
||||
{% ifversion fpt or ghec %}
|
||||
|
||||
For information about GitHub's GraphQL API, see the [v4 documentation]({% ifversion ghec %}/free-pro-team@latest{% endif %}/graphql). For information about migrating to GraphQL, see "[Migrating from REST]({% ifversion ghec%}/free-pro-team@latest{% endif %}/graphql/guides/migrating-from-rest-to-graphql)."
|
||||
For information about GitHub's GraphQL API, see the [documentation]({% ifversion ghec %}/free-pro-team@latest{% endif %}/graphql). For information about migrating to GraphQL, see "[Migrating from REST]({% ifversion ghec%}/free-pro-team@latest{% endif %}/graphql/guides/migrating-from-rest-to-graphql)."
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
6
data/features/container-hooks.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
# Reference: #7070
|
||||
# Actions Runner Container Hooks
|
||||
versions:
|
||||
fpt: '*'
|
||||
ghec: '*'
|
||||
ghae: 'issue-7070'
|
||||
@@ -4,9 +4,14 @@ If you do not set a `container`, all steps will run directly on the host specifi
|
||||
|
||||
### Example: Running a job within a container
|
||||
|
||||
```yaml
|
||||
```yaml{:copy}
|
||||
name: CI
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
jobs:
|
||||
my_job:
|
||||
container-test-job:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: node:14.16
|
||||
env:
|
||||
@@ -16,12 +21,16 @@ jobs:
|
||||
volumes:
|
||||
- my_docker_volume:/volume_mount
|
||||
options: --cpus 1
|
||||
steps:
|
||||
- name: Check for dockerenv file
|
||||
run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)
|
||||
```
|
||||
|
||||
When you only specify a container image, you can omit the `image` keyword.
|
||||
|
||||
```yaml
|
||||
jobs:
|
||||
my_job:
|
||||
container-test-job:
|
||||
runs-on: ubuntu-latest
|
||||
container: node:14.16
|
||||
```
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{% data variables.product.prodname_codespaces %} is free to use during the beta. When {% data variables.product.prodname_codespaces %} becomes generally available, you will be billed for storage and compute usage.
|
||||
@@ -1,5 +0,0 @@
|
||||
During the beta, functionality is limited.
|
||||
- {% data reusables.codespaces.use-chrome %}
|
||||
- Only a single size of codespace is available.
|
||||
- Only Linux containers are supported.
|
||||
- A codespace is not fully resumable. Processes that were running at the time the codespace was stopped will not be restarted.
|
||||
@@ -1,7 +1,7 @@
|
||||
By default, a {% data variables.product.prodname_actions %} workflow is triggered every time you create or update a prebuild template, or push to a prebuild-enabled branch. As with other workflows, while prebuild workflows are running they will either consume some of the Actions minutes included with your account, if you have any, or they will incur charges for Actions minutes. For more information about pricing for Actions minutes, see "[About billing for {% data variables.product.prodname_actions %}](/billing/managing-billing-for-github-actions/about-billing-for-github-actions)."
|
||||
|
||||
If you are an organization owner, you can track usage of prebuild workflows by downloading a {% data variables.product.prodname_actions %} usage report for your organization. You can identify workflow runs for prebuilds by filtering the CSV output to only include the workflow called "Create Codespaces Prebuilds." For more information, see "[Viewing your {% data variables.product.prodname_actions %} usage](/billing/managing-billing-for-github-actions/viewing-your-github-actions-usage#viewing-github-actions-usage-for-your-organization)."
|
||||
Alongside {% data variables.product.prodname_actions %} minutes, you will also be billed for the storage of prebuild templates associated with each prebuild configuration for a given repository and region. Storage of prebuild templates is billed at the same rate as storage of codespaces. For more information, see "[Calculating storage usage](#calculating-storage-usage)."
|
||||
|
||||
To reduce consumption of Actions minutes, you can set a prebuild template to be updated only when you make a change to your dev container configuration files, or only on a custom schedule. For more information, see "[Configuring prebuilds](/codespaces/prebuilding-your-codespaces/configuring-prebuilds#configuring-a-prebuild)."
|
||||
To reduce consumption of Actions minutes, you can set a prebuild template to be updated only when you make a change to your dev container configuration files, or only on a custom schedule. You can also manage your storage usage by adjusting the number of template versions to be retained for your prebuild configurations. For more information, see "[Configuring prebuilds](/codespaces/prebuilding-your-codespaces/configuring-prebuilds#configuring-a-prebuild)."
|
||||
|
||||
While {% data variables.product.prodname_codespaces %} prebuilds is in beta there is no charge for storage of templates. When prebuilds become generally available, you will be billed for storing prebuild templates for each prebuild configuration in each region selected for that configuration.
|
||||
If you are an organization owner, you can track usage of prebuild workflows and storage by downloading a {% data variables.product.prodname_actions %} usage report for your organization. You can identify workflow runs for prebuilds by filtering the CSV output to only include the workflow called "Create Codespaces Prebuilds." For more information, see "[Viewing your {% data variables.product.prodname_actions %} usage](/billing/managing-billing-for-github-actions/viewing-your-github-actions-usage#viewing-github-actions-usage-for-your-organization)."
|
||||
@@ -1,5 +0,0 @@
|
||||
{% note %}
|
||||
|
||||
**Note:** The ability to prebuild codespaces is currently in beta and subject to change.
|
||||
|
||||
{% endnote %}
|
||||
@@ -1 +0,0 @@
|
||||
During the beta, private repositories owned by organizations or any repositories owned by an organization that requires SAML single sign-on are not supported.
|
||||
@@ -1,12 +1,7 @@
|
||||
import cheerio from 'cheerio'
|
||||
import { range } from 'lodash-es'
|
||||
|
||||
export default function getMiniTocItems(
|
||||
html,
|
||||
maxHeadingLevel = 2,
|
||||
headingScope = '',
|
||||
isRestPage = false
|
||||
) {
|
||||
export default function getMiniTocItems(html, maxHeadingLevel = 2, headingScope = '') {
|
||||
const $ = cheerio.load(html, { xmlMode: true })
|
||||
|
||||
// eg `h2, h3` or `h2, h3, h4` depending on maxHeadingLevel
|
||||
@@ -43,9 +38,7 @@ export default function getMiniTocItems(
|
||||
// remove any <strong> tags but leave content
|
||||
$('strong', item).map((i, el) => $(el).replaceWith($(el).contents()))
|
||||
|
||||
const contents = isRestPage
|
||||
? { href: `${href}`, title: `${$(item).text()}` }
|
||||
: `<a class="d-block width-auto" href="${href}">${$(item).html()}</a>`
|
||||
const contents = { href, title: $(item).text().trim() }
|
||||
const headingLevel = parseInt($(item)[0].name.match(/\d+/)[0], 10) || 0 // the `2` from `h2`
|
||||
|
||||
const platform = $(item).parent('.extended-markdown').attr('class') || ''
|
||||
@@ -69,7 +62,7 @@ export default function getMiniTocItems(
|
||||
// convert the flatToc to a nested structure to simplify semantic rendering on the client
|
||||
const nestedToc = buildNestedToc(flatToc)
|
||||
|
||||
return nestedToc
|
||||
return minimalMiniToc(nestedToc)
|
||||
}
|
||||
|
||||
// Recursively build a tree from the list of allItems
|
||||
@@ -118,3 +111,15 @@ function buildNestedToc(allItems, startIndex = 0) {
|
||||
|
||||
return currentLevel
|
||||
}
|
||||
|
||||
// Strip the bits and pieces from each object in the array that are
|
||||
// not needed in the React component rendering.
|
||||
function minimalMiniToc(toc) {
|
||||
return toc.map(({ platform, contents, items }) => {
|
||||
const minimal = { contents }
|
||||
const subItems = minimalMiniToc(items)
|
||||
if (subItems.length) minimal.items = subItems
|
||||
if (platform) minimal.platform = platform
|
||||
return minimal
|
||||
})
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ export async function getRestMiniTocItems(
|
||||
// is needed to generate the toc
|
||||
const titles = restOperations.map((operation) => `### ${operation.title}\n`).join('')
|
||||
toc += await renderContent(titles, context)
|
||||
const restOperationsMiniTocItems = getMiniTocItems(toc, 3, '', true)
|
||||
const restOperationsMiniTocItems = getMiniTocItems(toc, 3, '')
|
||||
languageTree.get(version).get(category).set(subCategory, {
|
||||
restOperationsMiniTocItems,
|
||||
})
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5c5f4d6d0278c5a471dd1c0eaab1844adead6ec7d1de9710c0056b11b0123fb5
|
||||
size 741003
|
||||
oid sha256:0ff91e9452ead332260706bad6c6ece601c5cd73a04588ecb60bd7e2f8be818f
|
||||
size 740986
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:453de2fa79c256c94ae042ea79095eb0a2035429b72004d4f05e36e50fcfcd86
|
||||
size 1564519
|
||||
oid sha256:bc6ebcdee0f6514e6081bdba170fb579b914eebb9545362e6776ebcb7b190ea6
|
||||
size 1564538
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:104aa63fba7c7c921f0e96e4732fad2fb12c10a2ac925109b29ddaeb7e135335
|
||||
size 998020
|
||||
oid sha256:2460adf9a6b5114a353cd1d5e6b2033ff5e90ed03c63201688361a88a940ea1b
|
||||
size 998199
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1c9b0f9020443a9614e1d133c044781e24b4c3635eddd335646b4e6ee25dae63
|
||||
size 4001532
|
||||
oid sha256:976ae8ad67ffca1cd859edd91b1db89c2882d93158d9b3ae3d9a9d800ded472c
|
||||
size 4001148
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2c0ce71e556f355de59747a6f62c1544c5585e2dece5482661c6caf86e61b7a2
|
||||
size 684070
|
||||
oid sha256:e32c9339ccd8dd27b7d3f30668514fdb39195521b849c920c687aeb1f3bab33c
|
||||
size 684045
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:dbec137bba645ccc2f1afebed63864d284b219db2977ffb0a1e635114f124b3f
|
||||
size 2973533
|
||||
oid sha256:4fd822b12403c4c4f24d53822296b0d9662a0c01bc05095c70b2fe93173755fd
|
||||
size 2973767
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:66e70f7bdc2b827e135b9d2f3553af282f925dcdf5b692f6ecb6494f9865e4dc
|
||||
size 751580
|
||||
oid sha256:17745e8d40e7c05e2bf7e44a7d6b402507d2cb5b60aa3561bb523bcc4f95e73d
|
||||
size 751870
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6f4556fc747d1e883de48619be14316cc53d02094fd0cd275f1659028f802b1f
|
||||
size 4133861
|
||||
oid sha256:e7ddd68fda7a88bf27ed865fbd2c9e700e7d2b97fefb2770ffc82932f8807d13
|
||||
size 4134137
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7dbd5f240443704f4551430a4fbba559cbc82c167a1c10fa5ffdf081937f63b4
|
||||
size 674710
|
||||
oid sha256:5f900fdef601ad0c09e38525498fa79afdfbffd4348881b7f7e942dac20f16d6
|
||||
size 674654
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:422ffe291542c8eb91ac6eddbec95c02f527dd3d95fff8a36c709fbc532e791d
|
||||
size 2876438
|
||||
oid sha256:81d265fcd6f1249b67ee7f0a1d6c30f84553eff4084d84221ea7ab234acc1f99
|
||||
size 2874624
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1f3c151f80fc3a5d719810830b04a0783c9f89d1955971c86cc62ae5f100080c
|
||||
size 762656
|
||||
oid sha256:cae5f375286a43a08d963395f354c1d514026df99d0859b8827fdcf0d1034718
|
||||
size 762744
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9e06b89a0f001bc009a3c59530131282c10d8a1106f2450da21971f9ee6a7122
|
||||
size 1602818
|
||||
oid sha256:37e16d8e25a1a36b735d716ca5cf7fe163e2461a8943f31cbe283eeecd70bc11
|
||||
size 1603240
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a94a36a54ea13ee4405584040cd9d628630276e77daa2740bbd1256022575a04
|
||||
size 1035082
|
||||
oid sha256:1d047b119fe464998935dc03875f41a0356989cd9e316a7eab15491fc5c60af6
|
||||
size 1035027
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:67abb1f9c795429c8dc20e68110394ccde459abf7d23785e2fe45495c08c5be2
|
||||
size 4154910
|
||||
oid sha256:8ce1dc400f33bf8ccbaec74697ab913362da25f283a44c3c764997f7de9924e8
|
||||
size 4154817
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:474aefb7fa1c2871cea74d614fe97502c945f4e8a4f2ac2f6bfc1e2f0a23f341
|
||||
size 704105
|
||||
oid sha256:554e83d164b2523d24385f3d5b3590111ec8d9afc3ab3aec97834b0cb122e164
|
||||
size 704189
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a403d425c058d261a3670d82d677008a213131c2cc4e46df99688ea651deebba
|
||||
size 3059954
|
||||
oid sha256:1a3dba76cfb77e9444e910e3ed1e800ae91fc8814146b275dd749b769af1d729
|
||||
size 3059300
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3df13e61910de670e78e22132dc17495f25cd7590db932108a748616eb53d65f
|
||||
size 772523
|
||||
oid sha256:e0ac5b55bf2ed0720e7427ef2db050cd604454c0537ca5e14067678cec538243
|
||||
size 772518
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:484ed0957ff67199e5f2a1d93d87e3a51ae69bdf47798df447a7f92426ffb8bf
|
||||
size 4251234
|
||||
oid sha256:c5608154b4285fe043f9fec7c624af335789754274682909152c5e35e9b20118
|
||||
size 4250927
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b08754db5a22f1649165056393c736a4af71ba54de9d87aff0096d9bbc5ebfda
|
||||
size 694191
|
||||
oid sha256:4e189a02647cd82d8a3b3aade38af67a8486f622ee577cd6401f053abe312b0d
|
||||
size 694067
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:422b3845b9a9d0df2687adc19bf167bbdceb1cd7de6a92636a165ae0b6531305
|
||||
size 2954854
|
||||
oid sha256:ac73c3146d229f6c3b856576798978332b4bdfeb8a23287cb46b511fac209287
|
||||
size 2954861
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e3fcf60dc91e93ac1047dac042e9e1761432a209b72570abd1f0b38a1901d1ae
|
||||
size 786343
|
||||
oid sha256:a4854a63c8abf4f5a0bfbee81eac9697a2730a1898fe2fed8ff630bf3ad93d4e
|
||||
size 786284
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e9aeb37f0642caad1674b3e44b0559a7f77b735add932c6cc27a8fe949361175
|
||||
size 1644511
|
||||
oid sha256:3333335008dd7bdbb962cb87979e689453fe19e42e8fed99ef6bdd25a72b0562
|
||||
size 1644574
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0d4eefa39974be3b186cb1d23e4f8e663f531325723ad3ad89afb5fd9b53a06d
|
||||
size 1069722
|
||||
oid sha256:4890519ff0a1baf55bca7d5fdd09b02cfe1302bdc5726efead64ddcf54a56350
|
||||
size 1070016
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:20941b944ee0d3728a3deab761c30c53396efea41560e4bd1907e11468ec7660
|
||||
size 4250893
|
||||
oid sha256:8c0699a416d0418266f2ac89ee1bb13ed5585ee783857760bf4e48555db97e34
|
||||
size 4250227
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:698751672ccae559331a95e7c704f51091e44115783b97ea49bf40f0aa2858a0
|
||||
size 723786
|
||||
oid sha256:2e93cd8c6bf7369cee9a8c2db401d6fb0c796b4f282a0160031751659c51ca6e
|
||||
size 723867
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1844c8e4e964bd25aaa7208390758d618034d1f52c475673a0098e63d7c02553
|
||||
size 3139696
|
||||
oid sha256:39708211bf1321b2ac772b79fe6d971f19bab6932d5b7ddd01af62b19c24affe
|
||||
size 3139977
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3e84744d14211d8342358f9bafaee1bd8998d0423e219fc8a694163af8b4f412
|
||||
size 796053
|
||||
oid sha256:dfce451c63fdda2691a9f5c1fd55719af272b8a4b424ec2f94061d8510726dfc
|
||||
size 796138
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ee3277e1dd5ce6ebd66a7afa4fba4ce50491b88161bd25533d8a4b9c410e7843
|
||||
size 4370155
|
||||
oid sha256:735dfcd86c81df553f31d699c6b732629f2e643ac19d8fadb932dcb2925cd6e5
|
||||
size 4369976
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4295a1c6560a67a1fccd910596e84185392a1ded0676e716a689d1fe643d64bd
|
||||
size 713807
|
||||
oid sha256:f710cb45204cef2c89006a81412e68bbc9c957f22d7aa1be3a0b7059b05d60fd
|
||||
size 713715
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8900b54e887c8f6b1091d46a6a9750dcee0bc3fb27cc33d84705f6ce3185841f
|
||||
size 3033121
|
||||
oid sha256:003030ad6656f364f9fbe1d65120350bc8f1559ec0143e2deb2c95b52321384e
|
||||
size 3033493
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3213860d0904f69c9e8f6657625de94a6c2bfc37ce006acc38bad3f9790cf1c4
|
||||
size 788213
|
||||
oid sha256:dd6a1356cc7dfcbc5d181fd17bea90c2aa6f24c03bd408b52d287fa0d6779701
|
||||
size 788284
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f048a0cc63a9edbcf18b6baf4312487c7ab71a51f243743dc3d93062cbdee6e7
|
||||
size 1656149
|
||||
oid sha256:1c50414095bf93fa742c84eeee314c5d018cbb964e2c9affd8f6728802988d4b
|
||||
size 1656128
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a2aa677506a7a98cc22a565c4e4e6fd0c5e4605076eab3d043b55808912cddd5
|
||||
size 1079028
|
||||
oid sha256:20d00d2ad6a5c114c2ea390ab21966e5fa6a20baca523ad87234edddf368ac0e
|
||||
size 1078904
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9f4fe7f16df46476046c5fd40ed6ba98b0f59c38913441e032738b418babbd5b
|
||||
size 4292085
|
||||
oid sha256:0171ef20c803e1c74bc031bda01a7d3688377214a512e88b25434b70a1abe4cf
|
||||
size 4291427
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7253052ebe6efcf30a64e4260a5fb5dae8804e8f102bffc45d26c4a52abd4ec6
|
||||
size 727276
|
||||
oid sha256:5924d3fc79f3cc519d20d7027261be957ed5ba0836a552c70356efe0a6bad9e7
|
||||
size 727284
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:cdae7f1cce26641fc4ff7aa70312030078fd159069a17e7e8f258ea781c46cc3
|
||||
size 3158492
|
||||
oid sha256:9d90001ea7a59ddecfaecda79adbe233405e79d9170d056666495a822ed126b1
|
||||
size 3158187
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:cc04b7e82e1ac6ec52e2d9c0f72cf60d450edb693bd96b3c4b7271065be64e7e
|
||||
size 798725
|
||||
oid sha256:1054f49460d0ebd77cecc9abd82348ea30ad066ea5b5177484e8ddedc5318a94
|
||||
size 798749
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:630f396a16a977085b8c1c9b1485de9e7e8f4c29069f060997f19d68b5bff5b8
|
||||
size 4394972
|
||||
oid sha256:79d5faa48b1582486bb6e0f8871f89c85b3a356cc2d7a38ca979fe89569d3de8
|
||||
size 4394425
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f689d97268b49a55b3132a476f1b5842e12090467fd51dae0f406bfa29e0679e
|
||||
size 717041
|
||||
oid sha256:347001525e208672b1aee52c07ed6deba4dc5123ccfd6ad575fbdab96e35cf60
|
||||
size 717003
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:508565ae2af6512d8780acb1cea5280b27ad7faf0a288892c482c5aec5c479c5
|
||||
size 3053233
|
||||
oid sha256:fcebffb7476b4bb163de14c7ee533ae6f4880d91e996bc3165349f16a91a82ea
|
||||
size 3053012
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f34605956f34ca4dab7443ccdf4e9711aa7d8a061665d30ea24b9b81400da3be
|
||||
size 816487
|
||||
oid sha256:0fca3613e621f17bdcbada759757c8e98ff574e3b38d21a1aa1969de5ed7642f
|
||||
size 816557
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:360b26832434e2b0ca4a3e2929c126bff9151fbc573e363c2708e43d9ef827a2
|
||||
size 1723870
|
||||
oid sha256:6948c2fddb800ae2333c5074a63c4ce3bbee8ac72647b670afedac3650ad5318
|
||||
size 1724030
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9a510a5660cb8832c2bcfda14513ee7d9c51101457dd59f40dc9e97f16adab7d
|
||||
size 1117249
|
||||
oid sha256:e58e9c64e8fd7c308d436a8210dd2f946c69f7c4d3c0d516caa8d469ad9594c1
|
||||
size 1117136
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9a16b1850016992705e49a4430210e5e09b33b5aaec055f0a7aa4fb0339a8298
|
||||
size 4451020
|
||||
oid sha256:8bc7e31919b51c36c2e9a06383cbdc5c774a7a0d63e4417e671b67ae9c4f241c
|
||||
size 4449887
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:29f11b63dca0507c8dff6c5ce38ed4258b60f9370e58113ac649b16e70c4ea29
|
||||
size 750378
|
||||
oid sha256:e8b504275afb06a723edc5c9f3078efd93721d4028f7989133de8a6594698a10
|
||||
size 750081
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d127e6003eeec2c1fa3362f18f9a6ae31d8c99cdebc2ce60b13fa62d27e6dd24
|
||||
size 3272859
|
||||
oid sha256:039bed04f3bdca9296f91447b1e84acc108671119278dd24261bdeb976106f31
|
||||
size 3272212
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c5b27e1371d31ed6a0c9479247fef271f61bda855fcdfb83a1b643becb144e6c
|
||||
size 824244
|
||||
oid sha256:6e35b2e0a0b92bf48af67e18bdb169ef1ec52f56c6bbb65c18a00d42f9f99dde
|
||||
size 823964
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:74ecd0085cf8808f4fffedc530bd3d71e8513198205560273ef1e3ff5243e99c
|
||||
size 4554006
|
||||
oid sha256:c90be8153ab54ddd46d013c39ff1fdc6121ec1c0f370874189ba27e9bbd362ba
|
||||
size 4553023
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9e795ff73cb2564dd53f208aab3f98614fbc87efb5e4e808d74c76d554caf8b2
|
||||
size 739156
|
||||
oid sha256:2530986114ed4f8b6ea13d143b07c1429c38e17e2ff59f663b76c70689a985d4
|
||||
size 738835
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a832af472ebc66576e1aebe157ff94dd95dfc4fe1b1c7ffb554568f897a1a754
|
||||
size 3159813
|
||||
oid sha256:3e53467fdc2f9b5ad4b5e550b2ecd41b7fa543e9fbe7c0456dbb31c74ec06f92
|
||||
size 3159920
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8946bcaa09af560f96995cd6b0a47d80bed377471b3cd16e833d9d28f94df300
|
||||
size 983326
|
||||
oid sha256:4d6190f58011a1f376b2965495dbca00ae60fed1ff9a0aa48ccc9424d9b9c272
|
||||
size 983307
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4b777d1b7afca7693bca0f05888591d62f5913d724b291f2a7caef953997f90c
|
||||
size 1721009
|
||||
oid sha256:1bd69245e923387a7983cf1769b521e91aaf869fb0075c3713f6da2bfc64a69d
|
||||
size 1720884
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6cf88f405b45e0cd5e478d0c53fc962c4b9eb7c18bb4c56bde8a89d7102a4b98
|
||||
size 1346831
|
||||
oid sha256:3f937d8f2ce8dbddd5fb5228f61a3813f1022640ef8d44ad9fe9ce331f6bc644
|
||||
size 1352314
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:15aa4c354d928080dc002fb141f7f23c23d7f9c11e1c1d7413560b3c93da6b72
|
||||
size 5085761
|
||||
oid sha256:4053695ea12317c2619088487ac0c2e165a8fbe094a49011e42ec276d20514cd
|
||||
size 5098360
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ca1a32db4fefd689f3678c3c20d5aefde4917d00ed12433ea87f98cd3f6f6698
|
||||
size 886919
|
||||
oid sha256:bba0d95aa653166c82fe46d0c6b12910dc1fb24fe43ca81186b8a462a1c56445
|
||||
size 887070
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ea463c59b39a52fff9cf8650779d9ef1c6c4145e2614b8f667d9f3aad8919db9
|
||||
size 3676931
|
||||
oid sha256:15b393869173097f8641ab5b7c7cfad7bf4b3ae5930cdb2531866ef3f4581546
|
||||
size 3676977
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9f2009d57237e9ea40fa8327d55dcaed29ce2bd013e4e3f73cea5edabd4ee4b9
|
||||
size 985978
|
||||
oid sha256:ae9ffa6b71760f2fbb2bc1e19b23895e3a98fc73b41ed04976cd4166204db3b6
|
||||
size 986243
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:426ab1b1355c737f62b07d112076ddfda24f2fe07352018bb9958d3cf4bd9e27
|
||||
size 5228449
|
||||
oid sha256:91345b40189b95ccdef8b4535326d11a68002988f21a51ea502bfe7e79ae1b87
|
||||
size 5229410
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4fab166cb843a61200a4febe136705942cbd3307673f7273e439e3c549198dbd
|
||||
size 874190
|
||||
oid sha256:ee7f7f6ccbc2162efa1fb066843c09da5c71955209bdd37d18843fa529d5c6e7
|
||||
size 875374
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f3951be0ace5cbb00272d369a5477b52a1479821463b2d9c9aa649aa5efd160d
|
||||
size 3572163
|
||||
oid sha256:d44da857992bed25f9b3dba6d9cca0cf073938a23edfcbf19c9e4cc5593ed104
|
||||
size 3576665
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1cc91a73fd769020499a09f868604b920c55b1853a988e2f8aaa7b5fd5ac41a2
|
||||
size 625802
|
||||
oid sha256:00163e021c31394198535e29cf2699db1d52982d1485aed670ef2440d5b2433c
|
||||
size 625897
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:377b950ac2d501abd3977c090c607c4d125b24489b08a09647ca67bbd2d3411c
|
||||
size 1268711
|
||||
oid sha256:4a303f1b9611d3d74c8a1b3b91020c4e1b33bc0b69a4f849169fff89f46fb28e
|
||||
size 1268668
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8e3341132c70d659857a0c9e9bf2b073ead8cc949cd951481098d86bbfc02e04
|
||||
size 868167
|
||||
oid sha256:bea398be95fa5e54ab260f5a64e1952a032a66a343f9648f8935e951d830f4de
|
||||
size 868175
|
||||
|
||||