Branch was updated using the 'autoupdate branch' Actions workflow.
|
@ -4,12 +4,10 @@ on:
|
|||
issues:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- transferred
|
||||
pull_request_target:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
|
||||
jobs:
|
||||
check-team-membership:
|
||||
|
|
|
@ -56,7 +56,7 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
test-group: [content, meta, rendering, routing, unit, links-and-images]
|
||||
test-group: [content, graphql, meta, rendering, routing, unit]
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
|
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
test-group: [content, meta, rendering, routing, unit]
|
||||
test-group: [content, graphql, meta, rendering, routing, unit]
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
|
|
@ -38,7 +38,7 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
test-group: [content, meta, rendering, routing, unit, graphql]
|
||||
test-group: [content, graphql, meta, rendering, routing, unit]
|
||||
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
|
||||
|
|
После Ширина: | Высота: | Размер: 204 KiB |
После Ширина: | Высота: | Размер: 17 KiB |
До Ширина: | Высота: | Размер: 31 KiB После Ширина: | Высота: | Размер: 18 KiB |
Двоичные данные
assets/images/help/security/security-advisory-description.png
До Ширина: | Высота: | Размер: 61 KiB После Ширина: | Высота: | Размер: 32 KiB |
Двоичные данные
assets/images/help/security/security-advisory-metadata.png
До Ширина: | Высота: | Размер: 37 KiB |
После Ширина: | Высота: | Размер: 19 KiB |
Двоичные данные
assets/images/help/security/security-advisory-title.png
До Ширина: | Высота: | Размер: 44 KiB |
|
@ -66,7 +66,7 @@ versions:
|
|||
</div>
|
||||
|
||||
<div class="d-flex flex-wrap gutter">
|
||||
{% render 'code-example-card' for actionsCodeExamples as example %}
|
||||
{% render code-example-card for actionsCodeExamples as example %}
|
||||
</div>
|
||||
|
||||
<button class="js-filter-card-show-more btn btn-outline float-right" data-js-filter-card-max="6">Show more {% octicon "arrow-right" %}</button>
|
||||
|
|
|
@ -41,12 +41,17 @@ Windows virtual machines are configured to run as administrators with User Accou
|
|||
|
||||
### Supported runners and hardware resources
|
||||
|
||||
Each virtual machine has the same hardware resources available.
|
||||
|
||||
Hardware specification for Windows and Linux virtual machines:
|
||||
- 2-core CPU
|
||||
- 7 GB of RAM memory
|
||||
- 14 GB of SSD disk space
|
||||
|
||||
Hardware specification for macOS virtual machines:
|
||||
- 3-core CPU
|
||||
- 14 GB of RAM memory
|
||||
- 14 GB of SSD disk space
|
||||
|
||||
{% data reusables.github-actions.supported-github-runners %}
|
||||
|
||||
{% data reusables.github-actions.ubuntu-runner-preview %}
|
||||
|
@ -71,9 +76,15 @@ The software tools included in {% data variables.product.prodname_dotcom %}-host
|
|||
|
||||
{% data variables.product.prodname_dotcom %}-hosted runners include the operating system's default built-in tools, in addition to the packages listed in the above references. For example, Ubuntu and macOS runners include `grep`, `find`, and `which`, among other default tools.
|
||||
|
||||
Workflow logs include a link to the preinstalled tools on the runner. For more information, see "[Viewing workflow run history](/actions/managing-workflow-runs/viewing-workflow-run-history)."
|
||||
Workflow logs include a link to the preinstalled tools on the exact runner. To find this information in the workflow log, expand the `Set up job` section. Under that section, expand the `Virtual Environment` section. The link following `Included Software` will tell you the the preinstalled tools on the runner that ran the workflow.
|
||||
![Installed software link](/assets/images/actions-runner-installed-software-link.png)
|
||||
For more information, see "[Viewing workflow run history](/actions/managing-workflow-runs/viewing-workflow-run-history)."
|
||||
|
||||
If there is a tool that you'd like to request, please open an issue at [actions/virtual-environments](https://github.com/actions/virtual-environments).
|
||||
We recommend using actions to interact with the software installed on runners. This approach has several benefits:
|
||||
- Usually, actions provide more flexible functionality like versions selection, ability to pass arguments, and parameters
|
||||
- It ensures the tool versions used in your workflow will remain the same regardless of software updates
|
||||
|
||||
If there is a tool that you'd like to request, please open an issue at [actions/virtual-environments](https://github.com/actions/virtual-environments). This repository also contains announcements about all major software updates on runners.
|
||||
|
||||
### IP addresses
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ Use these attributes to finish configuring LDAP for {% data variables.product.pr
|
|||
| `Host` | Required | The LDAP host, e.g. `ldap.example.com` or `10.0.0.30`. If the hostname is only available from your internal network, you may need to configure {% data variables.product.product_location %}'s DNS first so it can resolve the hostname using your internal nameservers. |
|
||||
| `Port` | Required | The port the host's LDAP services are listening on. Examples include: 389 and 636 (for LDAPS). |
|
||||
| `Encryption` | Required | The encryption method used to secure communications to the LDAP server. Examples include plain (no encryption), SSL/LDAPS (encrypted from the start), and StartTLS (upgrade to encrypted communication once connected). |
|
||||
| `Domain search user` | Optional | The LDAP user that performs user lookups to authenticate other users when they sign in. This is typically a service account created specifically for third-party integrations. Use a fully qualified name, such as `cn=Administrator,cn=Users,dc=Example,dc=com`. With Active Directory, you can also use the `[DOMAIN]\[USERNAME]` syntax (e.g. `WINDOWS\Administrator`) for the domain search user with Active Directory. |
|
||||
| `Domain search user` | Optional | The LDAP user that looks up other users that sign in, to allow authentication. This is typically a service account created specifically for third-party integrations. Use a fully qualified name, such as `cn=Administrator,cn=Users,dc=Example,dc=com`. With Active Directory, you can also use the `[DOMAIN]\[USERNAME]` syntax (e.g. `WINDOWS\Administrator`) for the domain search user with Active Directory. |
|
||||
| `Domain search password` | Optional | The password for the domain search user. |
|
||||
| `Administrators group` | Optional | Users in this group are promoted to site administrators when signing into your appliance. If you don't configure an LDAP Administrators group, the first LDAP user account that signs into your appliance will be automatically promoted to a site administrator. |
|
||||
| `Domain base` | Required | The fully qualified `Distinguished Name` (DN) of an LDAP subtree you want to search for users and groups. You can add as many as you like; however, each group must be defined in the same domain base as the users that belong to it. If you specify restricted user groups, only users that belong to those groups will be in scope. We recommend that you specify the top level of your LDAP directory tree as your domain base and use restricted user groups to control access. |
|
||||
|
|
|
@ -82,7 +82,7 @@ These attributes are available. You can change the attribute names in the [manag
|
|||
{% endtip %}
|
||||
|
||||
5. Select **Disable administrator demotion/promotion** if you **do not** want your SAML provider to determine administrator rights for users on {% data variables.product.product_location %}.
|
||||
![SAML disable admin config](/assets/images/enterprise/management-console/disable-admin-demotion-promotion.png)
|
||||
![SAML disable admin configuration](/assets/images/enterprise/management-console/disable-admin-demotion-promotion.png)
|
||||
6. In the **Single sign-on URL** field, type the HTTP or HTTPS endpoint on your IdP for single sign-on requests. This value is provided by your IdP configuration. If the host is only available from your internal network, you may need to [configure {% data variables.product.product_location %} to use internal nameservers](/enterprise/{{ currentVersion }}/admin/guides/installation/configuring-dns-nameservers/).
|
||||
![SAML authentication](/assets/images/enterprise/management-console/saml-single-sign-url.png)
|
||||
7. Optionally, in the **Issuer** field, type your SAML issuer's name. This verifies the authenticity of messages sent to {% data variables.product.product_location %}.
|
||||
|
|
|
@ -55,7 +55,7 @@ To specify a private SSH key using the command line, run `ssh` with the `-i` arg
|
|||
ssh -i /path/to/ghe_private_key -p 122 admin@<em>hostname</em>
|
||||
```
|
||||
|
||||
You can also specify a private SSH key using the SSH config file (`~/.ssh/config`).
|
||||
You can also specify a private SSH key using the SSH configuration file (`~/.ssh/config`).
|
||||
|
||||
```shell
|
||||
Host <em>hostname</em>
|
||||
|
|
|
@ -72,7 +72,7 @@ $ ghe-config <em>core.github-hostname</em> <em>'example.com'</em>
|
|||
$ ghe-config -l
|
||||
# Lists all the configuration values
|
||||
```
|
||||
Allows you to find the uuid of your node in `cluster.conf`.
|
||||
Allows you to find the universally unique identifier (UUID) of your node in `cluster.conf`.
|
||||
|
||||
```shell
|
||||
$ ghe-config <em>HOSTNAME</em>.uuid
|
||||
|
|
|
@ -83,7 +83,7 @@ In the event of prolonged outage or catastrophic event at the primary site, you
|
|||
{%if currentVersion ver_gt "enterprise-server@2.22"%}
|
||||
{% note %}
|
||||
|
||||
**Note:** If {% data variables.product.product_location %} has {% data variables.product.prodname_actions %} enabled, you must first configure the {% data variables.product.prodname_actions %} external storage provider on the replacement appliance before running the the `ghe-restore` command. For more information, see "[Backing up and restoring {% data variables.product.prodname_ghe_server %} with {% data variables.product.prodname_actions %} enabled](/admin/github-actions/backing-up-and-restoring-github-enterprise-server-with-github-actions-enabled)."
|
||||
**Note:** If {% data variables.product.product_location %} has {% data variables.product.prodname_actions %} enabled, you must first configure the {% data variables.product.prodname_actions %} external storage provider on the replacement appliance before running the `ghe-restore` command. For more information, see "[Backing up and restoring {% data variables.product.prodname_ghe_server %} with {% data variables.product.prodname_actions %} enabled](/admin/github-actions/backing-up-and-restoring-github-enterprise-server-with-github-actions-enabled)."
|
||||
|
||||
{% endnote %}
|
||||
{% endif %}
|
||||
|
@ -116,4 +116,3 @@ $ ghe-restore -c 169.154.1.1
|
|||
You can use these additional options with `ghe-restore` command:
|
||||
- The `-c` flag overwrites the settings, certificate, and license data on the target host even if it is already configured. Omit this flag if you are setting up a staging instance for testing purposes and you wish to retain the existing configuration on the target. For more information, see the "Using using backup and restore commands" section of the [{% data variables.product.prodname_enterprise_backup_utilities %} README](https://github.com/github/backup-utils#using-the-backup-and-restore-commands).
|
||||
- The `-s` flag allows you to select a different backup snapshot.
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ versions:
|
|||
|
||||
After you install {% data variables.product.prodname_ghe_server %}, all required network ports are automatically opened to accept connections. Every non-required port is automatically configured as `deny`, and the default outgoing policy is configured as `allow`. Stateful tracking is enabled for any new connections; these are typically network packets with the `SYN` bit set. For more information, see "[Network ports](/enterprise/admin/guides/installation/network-ports)."
|
||||
|
||||
The UFW firewall also opens several other ports that are required for {% data variables.product.prodname_ghe_server %} to operate properly. For more information on the UFW ruleset, see [the UFW README](https://bazaar.launchpad.net/~jdstrand/ufw/0.30-oneiric/view/head:/README#L213).
|
||||
The UFW firewall also opens several other ports that are required for {% data variables.product.prodname_ghe_server %} to operate properly. For more information on the UFW rule set, see [the UFW README](https://bazaar.launchpad.net/~jdstrand/ufw/0.30-oneiric/view/head:/README#L213).
|
||||
|
||||
### Viewing the default firewall rules
|
||||
|
||||
|
|
|
@ -131,7 +131,7 @@ This log shows that the appliance:
|
|||
|
||||
#### Check {% data variables.product.product_location %} logs
|
||||
|
||||
If you need to verify that your inbound email is functioning, there are two logfiles that you can examine on your instance: To verify that */var/log/mail.log* and */var/log/mail-replies/metroplex.log*.
|
||||
If you need to verify that your inbound email is functioning, there are two log files that you can examine on your instance: To verify that */var/log/mail.log* and */var/log/mail-replies/metroplex.log*.
|
||||
|
||||
*/var/log/mail.log* verifies that messages are reaching your server. Here's an example of a successful email reply:
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ versions:
|
|||
---
|
||||
|
||||
To access the dashboard, in the upper-right corner of any page, click {% octicon "rocket" aria-label="The rocket ship" %}.
|
||||
![Rocketship icon for accessing site admin settings](/assets/images/enterprise/site-admin-settings/access-new-settings.png)
|
||||
![Rocket ship icon for accessing site admin settings](/assets/images/enterprise/site-admin-settings/access-new-settings.png)
|
||||
|
||||
{% if currentVersion ver_gt "enterprise-server@2.21" %}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ Multiple active replicas can provide a shorter distance to the nearest replica.
|
|||
|
||||
The active replica proxies requests that it can't process itself to the primary instance. The replicas function as a point of presence terminating all SSL connections. Traffic between hosts is sent through an encrypted VPN connection, similar to a two-node high availability configuration without geo-replication.
|
||||
|
||||
Git requests and specific fileserver requests, such as LFS and file uploads, can be served directly from the replica without loading any data from the primary. Web requests are always routed to the primary, but if the replica is closer to the user the requests are faster due to the closer SSL termination.
|
||||
Git requests and specific file server requests, such as LFS and file uploads, can be served directly from the replica without loading any data from the primary. Web requests are always routed to the primary, but if the replica is closer to the user the requests are faster due to the closer SSL termination.
|
||||
|
||||
Geo DNS, such as [Amazon's Route 53 service](http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html#routing-policy-geo), is required for geo-replication to work seamlessly. The hostname for the instance should resolve to the replica that is closest to the user's location.
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ versions:
|
|||
|
||||
### Network considerations
|
||||
|
||||
The simplest network design for clustering is to place the nodes on a single LAN. If a cluster must span subnets, we do not recommend configuring any firewall rules between the networks. The latency between nodes should be less than 1 millisecond.
|
||||
The simplest network design for clustering is to place the nodes on a single LAN. If a cluster must span subnetworks, we do not recommend configuring any firewall rules between the networks. The latency between nodes should be less than 1 millisecond.
|
||||
|
||||
{% if currentVersion ver_gt "enterprise-server@2.21" %}For high availability, the latency between the network with the active nodes and the network with the passive nodes must be less than 70 milliseconds. We don't recommend configuring a firewall between the two networks.{% endif %}
|
||||
|
||||
|
@ -54,12 +54,12 @@ If a network level firewall is in place between nodes, these ports will need to
|
|||
| 6379/TCP | Redis |
|
||||
| 8001/TCP | Grafana |
|
||||
| 8090/TCP | Internal GPG access |
|
||||
| 8149/TCP | GitRPC fileserver access |
|
||||
| 8149/TCP | GitRPC file server access |
|
||||
| 8300/TCP | Consul |
|
||||
| 8301/TCP | Consul |
|
||||
| 8302/TCP | Consul |
|
||||
| 9000/TCP | Git Daemon |
|
||||
| 9102/TCP | Pages fileserver |
|
||||
| 9102/TCP | Pages file server |
|
||||
| 9105/TCP | LFS server |
|
||||
| 9200/TCP | Elasticsearch |
|
||||
| 9203/TCP | Semantic code service |
|
||||
|
|
|
@ -25,7 +25,7 @@ versions:
|
|||
- If you’re several versions behind, upgrade {% data variables.product.product_location %} as far forward as possible with each step of your upgrade process. Using the latest version possible on each upgrade allows you to take advantage of performance improvements and bug fixes. For example, you could upgrade from {% data variables.product.prodname_enterprise %} 2.7 to 2.8 to 2.10, but upgrading from {% data variables.product.prodname_enterprise %} 2.7 to 2.9 to 2.10 uses a later version in the second step.
|
||||
- Use the latest patch release when upgrading. {% data reusables.enterprise_installation.enterprise-download-upgrade-pkg %}
|
||||
- Use a staging instance to test the upgrade steps. For more information, see "[Setting up a staging instance](/enterprise/{{ currentVersion }}/admin/guides/installation/setting-up-a-staging-instance/)."
|
||||
- When running multiple upgrades, wait at least 24 hours between feature upgrades to allow data migrations and backgrounded upgrade tasks to fully complete.
|
||||
- When running multiple upgrades, wait at least 24 hours between feature upgrades to allow data migrations and upgrade tasks running in the background to fully complete.
|
||||
|
||||
### Requirements
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ For more information about {% data variables.product.prodname_ghe_server %}'s us
|
|||
|
||||
#### Audit and access logging
|
||||
|
||||
{% data variables.product.prodname_ghe_server %} stores both traditional operating system and application logs. The application also writes detailed auditing and security logs, which {% data variables.product.prodname_ghe_server %} stores permanently. You can forward both types of logs in realtime to multiple destinations via the `syslog-ng` protocol. For more information, see "[Log forwarding](/admin/user-management/log-forwarding)."
|
||||
{% data variables.product.prodname_ghe_server %} stores both traditional operating system and application logs. The application also writes detailed auditing and security logs, which {% data variables.product.prodname_ghe_server %} stores permanently. You can forward both types of logs in real time to multiple destinations via the `syslog-ng` protocol. For more information, see "[Log forwarding](/admin/user-management/log-forwarding)."
|
||||
|
||||
Access and audit logs include information like the following.
|
||||
|
||||
|
|
|
@ -26,13 +26,13 @@ To use {% data variables.product.prodname_registry %} with Docker, you must have
|
|||
{% data reusables.enterprise_management_console.save-settings %}
|
||||
|
||||
{% if currentVersion == "enterprise-server@3.0" or currentVersion ver_gt "enterprise-server@3.0" %}
|
||||
### Connecting to the official NPM registry
|
||||
### Connecting to the official npm registry
|
||||
|
||||
If you've enabled npm packages on your enterprise and want to allow access to the official NPM registry as well as the {% data variables.product.prodname_registry %} npm registry, then you must perform some additional configuration.
|
||||
If you've enabled npm packages on your enterprise and want to allow access to the official npm registry as well as the {% data variables.product.prodname_registry %} npm registry, then you must perform some additional configuration.
|
||||
|
||||
{% data variables.product.prodname_registry %} uses a transparent proxy for network traffic that connects to the official NPM registry at `registry.npmjs.com`. The proxy is enabled by default and cannot be disabled.
|
||||
{% data variables.product.prodname_registry %} uses a transparent proxy for network traffic that connects to the official npm registry at `registry.npmjs.com`. The proxy is enabled by default and cannot be disabled.
|
||||
|
||||
To allow network connections to the NPM registry, you will need to configure network ACLs that allow {% data variables.product.prodname_ghe_server %} to send HTTPS traffic to `registry.npmjs.com` over port 443:
|
||||
To allow network connections to the npm registry, you will need to configure network ACLs that allow {% data variables.product.prodname_ghe_server %} to send HTTPS traffic to `registry.npmjs.com` over port 443:
|
||||
|
||||
| Source | Destination | Port | Type |
|
||||
|---|---|---|---|
|
||||
|
|
|
@ -17,7 +17,7 @@ Examples of how you can use pre-receive hooks:
|
|||
|
||||
- Require commit messages to follow a specific pattern or format, such as including a valid ticket number or being over a certain length.
|
||||
- Lock a branch or repository by rejecting all pushes.
|
||||
- Prevent sensitive data from being added to the repository by blocking keywords, patterns or filetypes.
|
||||
- Prevent sensitive data from being added to the repository by blocking keywords, patterns or file types.
|
||||
- Prevent a PR author from merging their own changes.
|
||||
|
||||
### Impact on performance and workflows
|
||||
|
|
|
@ -177,7 +177,7 @@ You can test a pre-receive hook script locally before you create or update it on
|
|||
$ docker cp data:/home/git/.ssh/id_ed25519 .
|
||||
```
|
||||
|
||||
10. Modify the remote of a test repository and push to the `test.git` repo within the Docker container. This example uses `git@github.com:octocat/Hello-World.git` but you can use any repo you want. This example assumes your local machine (127.0.0.1) is binding port 52311, but you can use a different IP address if docker is running on a remote machine.
|
||||
10. Modify the remote of a test repository and push to the `test.git` repo within the Docker container. This example uses `git@github.com:octocat/Hello-World.git` but you can use any repository you want. This example assumes your local machine (127.0.0.1) is binding port 52311, but you can use a different IP address if docker is running on a remote machine.
|
||||
|
||||
```shell
|
||||
$ git clone git@github.com:octocat/Hello-World.git
|
||||
|
|
|
@ -68,4 +68,4 @@ A repository owner can only configure a hook if the site administrator selected
|
|||
4. In the left sidebar, click **Hooks & Services**.
|
||||
![Hooks and services](/assets/images/enterprise/repos/hooks-services.png)
|
||||
5. Next to the pre-receive hook that you want to configure, click the **Hook permissions** drop-down menu. Select whether to enable or disable the pre-receive hook.
|
||||
![Repo hook permissions](/assets/images/enterprise/repos/repo-hook-permissions.png)
|
||||
![Repository hook permissions](/assets/images/enterprise/repos/repo-hook-permissions.png)
|
||||
|
|
|
@ -35,7 +35,7 @@ The Migrations API is currently in a preview period, which means that the endpoi
|
|||
|
||||
1. Notify members of your organization that you'll be performing a migration. The export can take several minutes, depending on the number of repositories being exported. The full migration including import may take several hours so we recommend doing a trial run in order to determine how long the full process will take. For more information, see "[About Migrations](/enterprise/admin/migrations/about-migrations#types-of-migrations)."
|
||||
|
||||
2. Start a migration by `POST`ing to <a href="/rest/reference/migrations#start-an-organization-migration" class="dotcom-only">the migration endpoint</a>. You'll need:
|
||||
2. Start a migration by sending a `POST` request to <a href="/rest/reference/migrations#start-an-organization-migration" class="dotcom-only">the migration endpoint</a>. You'll need:
|
||||
* Your access token for authentication.
|
||||
* A [list of the repositories](/rest/reference/repos#list-organization-repositories) you want to migrate:
|
||||
```shell
|
||||
|
|
|
@ -128,13 +128,13 @@ The same process can be used to create mappings for each record that supports cu
|
|||
|
||||
#### Applying modified migration data
|
||||
|
||||
1. After making changes, use the [`scp`](https://linuxacademy.com/blog/linux/ssh-and-scp-howto-tips-tricks#scp) command to apply your modified *conflicts.csv* (or any other mapping csv in the correct format) to the target instance:
|
||||
1. After making changes, use the [`scp`](https://linuxacademy.com/blog/linux/ssh-and-scp-howto-tips-tricks#scp) command to apply your modified *conflicts.csv* (or any other mapping *.csv* file in the correct format) to the target instance:
|
||||
|
||||
```shell
|
||||
$ scp -P 122 ~/Desktop/conflicts.csv admin@<em>hostname</em>:/home/admin/
|
||||
```
|
||||
|
||||
2. Re-map the migration data using the `ghe-migrator map` command, passing in the path to your modified csv file and the Migration GUID:
|
||||
2. Re-map the migration data using the `ghe-migrator map` command, passing in the path to your modified *.csv* file and the Migration GUID:
|
||||
|
||||
```shell
|
||||
$ ghe-migrator map -i conflicts.csv -g <em>MIGRATION_GUID</em>
|
||||
|
|
|
@ -49,7 +49,7 @@ After you install {% data variables.product.prodname_desktop %}, you can configu
|
|||
|
||||
{% mac %}
|
||||
|
||||
You can connect or remove accounts on {% data variables.product.prodname_dotcom %} or {% data variables.product.prodname_enterprise %}, choose a default text editor or shell, edit your Git configuration, change the appearance of {% data variables.product.prodname_desktop %}, customize system dialogs, and set privacy preferences in the {% data variables.product.prodname_desktop %} Preferences window. For more information, see "[Configuring basic settings](/desktop/getting-started-with-github-desktop/configuring-basic-settings)."
|
||||
You can connect or remove accounts on {% data variables.product.prodname_dotcom %} or {% data variables.product.prodname_enterprise %}, choose a default text editor or shell, edit your Git configuration, change the appearance of {% data variables.product.prodname_desktop %}, customize system dialog boxes, and set privacy preferences in the {% data variables.product.prodname_desktop %} Preferences window. For more information, see "[Configuring basic settings](/desktop/getting-started-with-github-desktop/configuring-basic-settings)."
|
||||
|
||||
![The basic settings in the Preference window](/assets/images/help/desktop/mac-appearance-tab-themes.png)
|
||||
|
||||
|
@ -57,7 +57,7 @@ You can connect or remove accounts on {% data variables.product.prodname_dotcom
|
|||
|
||||
{% windows %}
|
||||
|
||||
You can connect or remove accounts on {% data variables.product.prodname_dotcom %} or {% data variables.product.prodname_enterprise %}, choose a default text editor or shell, edit your Git configuration, change the appearance of {% data variables.product.prodname_desktop %}, customize system dialogs, and set privacy preferences in the {% data variables.product.prodname_desktop %} Options window. For more information, see "[Configuring basic settings](/desktop/getting-started-with-github-desktop/configuring-basic-settings)."
|
||||
You can connect or remove accounts on {% data variables.product.prodname_dotcom %} or {% data variables.product.prodname_enterprise %}, choose a default text editor or shell, edit your Git configuration, change the appearance of {% data variables.product.prodname_desktop %}, customize system dialog boxes, and set privacy preferences in the {% data variables.product.prodname_desktop %} Options window. For more information, see "[Configuring basic settings](/desktop/getting-started-with-github-desktop/configuring-basic-settings)."
|
||||
|
||||
![The basic settings in the Options window](/assets/images/help/desktop/windows-appearance-tab-themes.png)
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ versions:
|
|||
<h2 class="mb-2 font-mktg h1">Communities using discussions</h2>
|
||||
|
||||
<div class="d-flex flex-wrap gutter">
|
||||
{% render 'discussions-community-card' for discussionsCommunityExamples as example %}
|
||||
{% render discussions-community-card for discussionsCommunityExamples as example %}
|
||||
</div>
|
||||
{% if discussionsCommunityExamples.length > 6 %}
|
||||
<button class="js-filter-card-show-more btn btn-outline float-right" data-js-filter-card-max="6">Show more {% octicon "arrow-right" %}</button>
|
||||
|
|
|
@ -36,7 +36,7 @@ Using LTI helps keep your information safe and secure. LTI is an industry-standa
|
|||
- Moodle
|
||||
- Sakai
|
||||
|
||||
Currently, {% data variables.product.prodname_classroom %} doesn't support import of roster data from Blackboard or Brightspace
|
||||
Currently, {% data variables.product.prodname_classroom %} doesn't support import of roster data from Blackboard or Brightspace.
|
||||
|
||||
### Generating configuration credentials for your classroom
|
||||
|
||||
|
@ -45,7 +45,7 @@ Currently, {% data variables.product.prodname_classroom %} doesn't support impor
|
|||
{% data reusables.classroom.click-students %}
|
||||
1. If your classroom already has a roster, you can either update the roster or delete the roster and create a new roster.
|
||||
- For more information about deleting and creating a roster, see "[Deleting a roster for a classroom](/education/manage-coursework-with-github-classroom/manage-classrooms#deleting-a-roster-for-a-classroom)" and "[Creating a roster for your classroom](/education/manage-coursework-with-github-classroom/manage-classrooms#creating-a-roster-for-your-classroom)."
|
||||
- For more information about updating a roster, see "[Adding students to the roster for your classroom](/education/manage-coursework-with-github-classroom/manage-classrooms#adding-students-to-the-roster-for-your-classroom)."
|
||||
- For more information about updating a roster, see "[Adding students to the roster for your classroom](/education/manage-coursework-with-github-classroom/manage-classrooms#adding-students-to-the-roster-for-your-classroom)."
|
||||
1. In the list of LMSes, click your LMS. If your LMS is not supported, click **Other LMS**.
|
||||
![List of LMSes](/assets/images/help/classroom/classroom-settings-click-lms.png)
|
||||
1. Read about connecting your LMS, then click **Connect to _LMS_**.
|
||||
|
@ -82,13 +82,13 @@ You can configure {% data variables.product.prodname_classroom %} as an external
|
|||
| **Shared Secret** | Shared secret from {% data variables.product.prodname_classroom %} |
|
||||
| **Allow this tool to access the IMS Names and Role Provisioning Service** | Enabled |
|
||||
| **Configuration URL** | Launch URL from {% data variables.product.prodname_classroom %} |
|
||||
|
||||
|
||||
{% note %}
|
||||
|
||||
|
||||
**Note**: If you don't see a checkbox in Canvas labeled "Allow this tool to access the IMS Names and Role Provisioning Service", then your Canvas administrator must contact Canvas support to enable membership service configuration for your Canvas account. Without enabling this feature, you won't be able to sync the roster from Canvas. For more information, see [How do I contact Canvas Support?](https://community.canvaslms.com/t5/Canvas-Basics-Guide/How-do-I-contact-Canvas-Support/ta-p/389767) on the Canvas website.
|
||||
|
||||
|
||||
{% endnote %}
|
||||
|
||||
|
||||
1. Click **Submit**.
|
||||
1. In the left sidebar, click **Home**.
|
||||
1. To prompt Canvas to send a confirmation email, in the left sidebar, click **GitHub Classroom**. Follow the instructions in the email to finish linking {% data variables.product.prodname_classroom %}.
|
||||
|
|
|
@ -20,7 +20,7 @@ redirect_from:
|
|||
|
||||
After you create a classroom, {% data variables.product.prodname_classroom %} will prompt you to invite teaching assistants (TAs) and admins to the classroom. Each classroom can have one or more admins. Admins can be teachers, TAs, or any other course administrator who you'd like to have control over your classrooms on {% data variables.product.prodname_classroom %}.
|
||||
|
||||
Invite TAs and admins to your classroom by inviting the user accounts on {% data variables.product.product_name %} to your organization as organization owners and sharing the URL for your classrom. Organization owners can administer any classroom for the organization. For more information, see "[Permission levels for an organization](/github/setting-up-and-managing-organizations-and-teams/permission-levels-for-an-organization)" and "[Inviting users to join your organization](/github/setting-up-and-managing-organizations-and-teams/inviting-users-to-join-your-organization)."
|
||||
Invite TAs and admins to your classroom by inviting the user accounts on {% data variables.product.product_name %} to your organization as organization owners and sharing the URL for your classroom. Organization owners can administer any classroom for the organization. For more information, see "[Permission levels for an organization](/github/setting-up-and-managing-organizations-and-teams/permission-levels-for-an-organization)" and "[Inviting users to join your organization](/github/setting-up-and-managing-organizations-and-teams/inviting-users-to-join-your-organization)."
|
||||
|
||||
When you're done using a classroom, you can archive the classroom and refer to the classroom, roster, and assignments later, or you can delete the classroom if you no longer need the classroom.
|
||||
|
||||
|
@ -65,7 +65,7 @@ If your course already has a roster, you can update the students on the roster o
|
|||
|
||||
### Adding students to the roster for your classroom
|
||||
|
||||
Your classroom must have an existing roster to add students to the roster. For more information about creating a roster, see "[Creating a roster for your classrom](#creating-a-roster-for-your-classroom)."
|
||||
Your classroom must have an existing roster to add students to the roster. For more information about creating a roster, see "[Creating a roster for your classroom](#creating-a-roster-for-your-classroom)."
|
||||
|
||||
{% data reusables.classroom.sign-into-github-classroom %}
|
||||
{% data reusables.classroom.click-classroom-in-list %}
|
||||
|
|
|
@ -23,7 +23,7 @@ The **Actions** tab shows the full history of test runs.
|
|||
|
||||
You can click a specific test run to review log output, like compilation errors and test failures.
|
||||
|
||||
![The "{% data variables.product.prodname_classroom %} Autograding Workflow" test results logs in {% data variables.product.prodname_actions %} ](/assets/images/help/classroom/autograding-actions-logs.png)
|
||||
![The "{% data variables.product.prodname_classroom %} Autograding Workflow" test results logs in {% data variables.product.prodname_actions %} ](/assets/images/help/classroom/autograding-actions-logs.png)
|
||||
|
||||
### Further reading
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ You can choose which repositories should have access to each secret. Then, you c
|
|||
1. To the right of "Codespaces secrets", click **New secret**.
|
||||
!["New secret" button](/assets/images/help/settings/codespaces-new-secret-button.png)
|
||||
1. Under "Name", type a name for your secret.
|
||||
!["Name" textbox](/assets/images/help/settings/codespaces-secret-name-field.png)
|
||||
!["Name" text box](/assets/images/help/settings/codespaces-secret-name-field.png)
|
||||
{% data reusables.user_settings.codespaces-secret-value %}
|
||||
{% data reusables.user_settings.codespaces-secret-repository-access %}
|
||||
1. Click **Add secret**.
|
||||
|
|
|
@ -39,12 +39,12 @@ After you connect your {% data variables.product.product_name %} account to the
|
|||
### Opening a codespace in {% data variables.product.prodname_vscode %}
|
||||
|
||||
{% data reusables.codespaces.click-remote-explorer-icon-vscode %}
|
||||
2. Under Codespaces, click the codespace you want to develop in.
|
||||
2. Under "Codespaces", click the codespace you want to develop in.
|
||||
3. Click the Connect to Codespace icon.
|
||||
![The Connect to Codespace icon in {% data variables.product.prodname_vscode %}](/assets/images/help/codespaces/click-connect-to-codespace-icon-vscode.png)
|
||||
|
||||
### Deleting a codespace in {% data variables.product.prodname_vscode %}
|
||||
|
||||
1. Under Codespaces, right-click the codespace you want to delete.
|
||||
1. Under "Codespaces", right-click the codespace you want to delete.
|
||||
2. In the drop-down menu, click **Delete Codespace**.
|
||||
![Deleting a codespace in {% data variables.product.prodname_dotcom %}](/assets/images/help/codespaces/delete-codespace-vscode.png)
|
||||
|
|
|
@ -12,7 +12,7 @@ versions:
|
|||
|
||||
{% endnote %}
|
||||
|
||||
### About Codespaces in {% data variables.product.prodname_vs %}
|
||||
### About codespaces in {% data variables.product.prodname_vs %}
|
||||
|
||||
You can create a codespace in {% data variables.product.prodname_vs %} to develop applications in a Windows environment. When you use a codespace in {% data variables.product.prodname_vs %}, you can browse source code, build solutions, and commit changes to your repository.
|
||||
|
||||
|
|
|
@ -97,7 +97,6 @@ Any valid SARIF 2.1.0 output file can be uploaded, however, {% data variables.pr
|
|||
| `partialFingerprints`| **Required.** A set of strings used to track the unique identity of the result. {% data variables.product.prodname_code_scanning_capc %} uses `partialFingerprints` to accurately identify which results are the same across commits and branches. {% data variables.product.prodname_code_scanning_capc %} will attempt to use `partialFingerprints` if they exist. If you are uploading third-party SARIF files with the `upload-action`, the action will create `partialFingerprints` for you when they are not included in the SARIF file. For more information, see "[Preventing duplicate alerts using fingerprints](#preventing-duplicate-alerts-using-fingerprints)." **Note:** {% data variables.product.prodname_code_scanning_capc %} only uses the `primaryLocationLineHash`.
|
||||
| `codeFlows[].threadFlows[].locations[]`| **Optional.** An array of `location` objects for a `threadFlow` object, which describes the progress of a program through a thread of execution. A `codeFlow` object describes a pattern of code execution used to detect a result. If code flows are provided, {% data variables.product.prodname_code_scanning %} will expand code flows on {% data variables.product.prodname_dotcom %} for the relevant result. For more information, see the [`location` object](#location-object).
|
||||
| `relatedLocations[]`| A set of locations relevant to this result. {% data variables.product.prodname_code_scanning_capc %} will link to related locations when they are embedded in the result message. For more information, see the [`location` object](#location-object).
|
||||
| `suppressions[].state`| **Optional.** When the `state` is set to `accepted`, {% data variables.product.prodname_code_scanning %} will update the state of the result to `Closed` on {% data variables.product.prodname_dotcom %}.
|
||||
|
||||
#### `location` object
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ You can store a variety of projects in {% data variables.product.product_name %}
|
|||
|
||||
{% elsif enterpriseServerVersions contains currentVersion or currentVersion == "github-ae@latest" %}
|
||||
|
||||
You can store a variety of projects in {% data variables.product.product_name %} repositories, including innersource projects. With innersource, you can share code to make better, more reliable software. For more information on innersource, see {% data variables.product.company_short %}'s whitepaper "[An introduction to innersource](https://resources.github.com/whitepapers/introduction-to-innersource/)."
|
||||
You can store a variety of projects in {% data variables.product.product_name %} repositories, including innersource projects. With innersource, you can share code to make better, more reliable software. For more information on innersource, see {% data variables.product.company_short %}'s white paper "[An introduction to innersource](https://resources.github.com/whitepapers/introduction-to-innersource/)."
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
@ -58,7 +58,7 @@ When you created your new repository, you initialized it with a *README* file. *
|
|||
Let's commit a change to the *README* file.
|
||||
|
||||
1. In your repository's list of files, click ***README.md***.
|
||||
![Readme file in file list](/assets/images/help/repository/create-commit-open-readme.png)
|
||||
![README file in file list](/assets/images/help/repository/create-commit-open-readme.png)
|
||||
2. Above the file's content, click {% octicon "pencil" aria-label="The edit icon" %}.
|
||||
3. On the **Edit file** tab, type some information about yourself.
|
||||
![New content in file](/assets/images/help/repository/edit-readme-light.png)
|
||||
|
|
|
@ -25,11 +25,11 @@ For example, you can use forks to propose changes related to fixing a bug. Rathe
|
|||
|
||||
Open source software is based on the idea that by sharing code, we can make better, more reliable software. For more information, see the "[About the Open Source Initiative](http://opensource.org/about)" on the Open Source Initiative.
|
||||
|
||||
For more information about applying open source principles to your organization's development work on {% data variables.product.product_location %}, see {% data variables.product.prodname_dotcom %}'s whitepaper "[An introduction to innersource](https://resources.github.com/whitepapers/introduction-to-innersource/)."
|
||||
For more information about applying open source principles to your organization's development work on {% data variables.product.product_location %}, see {% data variables.product.prodname_dotcom %}'s white paper "[An introduction to innersource](https://resources.github.com/whitepapers/introduction-to-innersource/)."
|
||||
|
||||
{% if currentVersion == "free-pro-team@latest" or enterpriseServerVersions contains currentVersion %}
|
||||
|
||||
When creating your public repository from a fork of someone's project, make sure to include a license file that determines how you want your project to be shared with others. For more information, see "[Choose an open source license](http://choosealicense.com/)" at choosealicense.
|
||||
When creating your public repository from a fork of someone's project, make sure to include a license file that determines how you want your project to be shared with others. For more information, see "[Choose an open source license](http://choosealicense.com/)" at choosealicense.com.
|
||||
|
||||
{% data reusables.open-source.open-source-guide-repositories %} {% data reusables.open-source.open-source-learning-lab %}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ authors:
|
|||
|
||||
### Using Git
|
||||
|
||||
Familiarize yourself with Git by visiting the [official Git project site](https://git-scm.com) and reading the [ProGit ebook](http://git-scm.com/book). You can review the [Git command list](https://git-scm.com/docs) or [Git command lookup reference](http://gitref.org) while using the [Try Git](https://try.github.com) simulator.
|
||||
Familiarize yourself with Git by visiting the [official Git project site](https://git-scm.com) and reading the [ProGit book](http://git-scm.com/book). You can review the [Git command list](https://git-scm.com/docs) or [Git command lookup reference](http://gitref.org) while using the [Try Git](https://try.github.com) simulator.
|
||||
|
||||
### Using {% data variables.product.product_name %}
|
||||
|
||||
|
|
|
@ -161,8 +161,8 @@ For more keyboard shortcuts, see the [CodeMirror documentation](https://codemirr
|
|||
|<kbd>command + space </kbd> or <kbd>control + space</kbd> | In the workflow editor, get suggestions for your workflow file.
|
||||
|<kbd>g</kbd> <kbd>f</kbd> | Go to the workflow file
|
||||
|<kbd>shift + t</kbd> or <kbd>T</kbd> | Toggle timestamps in logs
|
||||
|<kbd>shift + f</kbd> or <kbd>F</kbd> | Toggle fullscreen logs
|
||||
|<kbd>esc</kbd> | Exit fullscreen logs
|
||||
|<kbd>shift + f</kbd> or <kbd>F</kbd> | Toggle full-screen logs
|
||||
|<kbd>esc</kbd> | Exit full-screen logs
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ If you're having connectivity problems on your company or organization's network
|
|||
### Troubleshooting the captcha
|
||||
|
||||
If you're unable to verify with the captcha:
|
||||
- Ensure javascript is enabled on your browser.
|
||||
- Ensure JavaScript is enabled on your browser.
|
||||
- Ensure your browser is supported. If your browser isn't supported, upgrade your browser or install a supported browser. For a list of supported browsers, see "[Supported browsers](/articles/supported-browsers)."
|
||||
- Ensure your network configuration is not blocking https://octocaptcha.com/ or https://arkoselabs.com/. If you're behind a corporate firewall, contact your IT administrator to allow those domains. To verify access to these domains, visit https://octocaptcha.com/test and ensure the text "Connection successfully made!" is displayed, then visit https://client-demo.arkoselabs.com/github and ensure you are able to load the captcha.
|
||||
- Ensure your browser does not have plug-ins or extensions that may be interfering with GitHub. If so, temporarily disable the plug-ins or extensions during captcha verification.
|
||||
|
|
|
@ -18,13 +18,13 @@ The {% data variables.product.prodname_advisory_database %} contains a curated l
|
|||
|
||||
Each security advisory contains information about the vulnerability, including the description, severity, affected package, package ecosystem, affected versions and patched versions, impact, and optional information such as references, workarounds, and credits. In addition, advisories from the National Vulnerability Database list contain a link to the CVE record, where you can read more details about the vulnerability, its CVSS scores, and its qualitative severity level. For more information, see the "[National Vulnerability Database](https://nvd.nist.gov/)" from the National Institute of Standards and Technology.
|
||||
|
||||
The severity level is one of four possible levels defined in the [Common Vulnerability Scoring System (CVSS), Section 2.1.2](https://www.first.org/cvss/specification-document):
|
||||
The severity level is one of four possible levels defined in the "[Common Vulnerability Scoring System (CVSS), Section 5](https://www.first.org/cvss/specification-document)."
|
||||
- Low
|
||||
- Moderate
|
||||
- Medium/Moderate
|
||||
- High
|
||||
- Critical
|
||||
|
||||
The {% data variables.product.prodname_advisory_database %} uses CVSS version 3.0 standards and the CVSS levels described above.
|
||||
Some advisories have a specific CVSS score, which is assigned according to the "[Common Vulnerability Scoring System Calculator](https://www.first.org/cvss/calculator)." The {% data variables.product.prodname_advisory_database %} uses CVSS version 3.1 standards.
|
||||
|
||||
{% data reusables.repositories.github-security-lab %}
|
||||
|
||||
|
|
|
@ -20,10 +20,11 @@ Anyone with admin permissions to a repository can create a security advisory.
|
|||
4. Click **New draft security advisory**.
|
||||
![Open draft advisory button](/assets/images/help/security/security-advisory-new-draft-security-advisory-button.png)
|
||||
5. Type a title for your security advisory.
|
||||
![Title field](/assets/images/help/security/security-advisory-title.png)
|
||||
{% data reusables.repositories.security-advisory-edit-details %}
|
||||
{% data reusables.repositories.security-advisory-edit-severity %}
|
||||
{% data reusables.repositories.security-advisory-edit-cwe-cve %}
|
||||
{% data reusables.repositories.security-advisory-edit-description %}
|
||||
8. Click **Create security advisory**.
|
||||
11. Click **Create draft security advisory**.
|
||||
![Create security advisory button](/assets/images/help/security/security-advisory-create-security-advisory-button.png)
|
||||
|
||||
### Next steps
|
||||
|
|
|
@ -22,12 +22,14 @@ If someone accepts credit, the person's username appears in the "Credits" sectio
|
|||
5. In the upper-right corner of the details for the security advisory, click {% octicon "pencil" aria-label="The edit icon" %}.
|
||||
![Edit button for a security advisory](/assets/images/help/security/security-advisory-edit-button.png)
|
||||
{% data reusables.repositories.security-advisory-edit-details %}
|
||||
{% data reusables.repositories.security-advisory-edit-severity %}
|
||||
{% data reusables.repositories.security-advisory-edit-cwe-cve %}
|
||||
{% data reusables.repositories.security-advisory-edit-description %}
|
||||
8. Optionally, edit the "Credits" for the security advisory.
|
||||
11. Optionally, edit the "Credits" for the security advisory.
|
||||
![Credits for a security advisory](/assets/images/help/security/security-advisory-credits.png)
|
||||
9. Click **Update security advisory**.
|
||||
12. Click **Update security advisory**.
|
||||
![Add button](/assets/images/help/security/update-advisory-button.png)
|
||||
10. The people listed in the "Credits" section will receive an email or web notification inviting them to accept credit. If a person accepts, their username will be publicly visible once the security advisory is published.
|
||||
13. The people listed in the "Credits" section will receive an email or web notification inviting them to accept credit. If a person accepts, their username will be publicly visible once the security advisory is published.
|
||||
|
||||
### Further reading
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@ versions:
|
|||
|
||||
Organization owners can schedule a reminder for one or more teams in their organization, for all pull requests the team or teams have been requested to review.
|
||||
|
||||
{% data reusables.reminders.scheduled-reminders-limitations %}
|
||||
|
||||
### Creating a scheduled reminder for an organization
|
||||
{% data reusables.profile.access_profile %}
|
||||
{% data reusables.profile.access_org %}
|
||||
|
|
|
@ -13,6 +13,8 @@ versions:
|
|||
|
||||
Team maintainers and organization owners can set scheduled reminders for any pull requests that a team has been requested to review. Before you can create a scheduled reminder for your team, an organization owner must authorize your Slack workspace. For more information, see "[Managing scheduled reminders for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-scheduled-reminders-for-your-organization)."
|
||||
|
||||
{% data reusables.reminders.scheduled-reminders-limitations %}
|
||||
|
||||
### Creating a scheduled reminder for a team
|
||||
{% data reusables.profile.access_profile %}
|
||||
{% data reusables.profile.access_org %}
|
||||
|
|
|
@ -54,11 +54,11 @@ Your contributions calendar shows your contribution activity.
|
|||
#### Viewing contributions from specific times
|
||||
|
||||
- Click on a day's square to show the contributions made during that 24-hour period.
|
||||
- Press *Shift* and click on another day's square to show contributions made during that timespan.
|
||||
- Press *Shift* and click on another day's square to show contributions made during that time span.
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note:** You can select up to a one-month range on your contributions calendar. If you select a larger timespan, we will only display one month of contributions.
|
||||
**Note:** You can select up to a one-month range on your contributions calendar. If you select a larger time span, we will only display one month of contributions.
|
||||
|
||||
{% endnote %}
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@ For certain events, you can also enable real-time alerts for scheduled reminders
|
|||
|
||||
You can set scheduled reminders for personal or team-level review requests for pull requests in organizations you are a member of. Before you can create a scheduled reminder for yourself, an organization owner must authorize your Slack workspace. For more information, see "[Managing scheduled reminders for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-scheduled-reminders-for-your-organization)."
|
||||
|
||||
{% data reusables.reminders.scheduled-reminders-limitations %}
|
||||
|
||||
### Creating scheduled reminders for your user account
|
||||
|
||||
{% data reusables.user_settings.access_settings %}
|
||||
|
|
|
@ -50,7 +50,7 @@ Before you can sponsor an account, you must have a verified email address. For m
|
|||
1. Navigate to your sponsorship dashboard for the account.
|
||||
- To sponsor a developer, under the developer's name, click **Sponsor**.
|
||||
![Sponsor button](/assets/images/help/profile/sponsor-button.png)
|
||||
- To sponsor an organization, to the right of the the organization's name, click **Sponsor**.
|
||||
- To sponsor an organization, to the right of the organization's name, click **Sponsor**.
|
||||
![Sponsor button](/assets/images/help/sponsors/sponsor-org-button.png)
|
||||
1. Optionally, on the right side of the page, to sponsor the account on behalf of your organization, use the **Sponsor as** drop-down menu, and click the organization.
|
||||
![Drop-down menu to choose the account you'll sponsor as](/assets/images/help/sponsors/sponsor-as-drop-down-menu.png)
|
||||
|
|
|
@ -30,5 +30,5 @@ You can export your sponsorship transactions by month. {% data variables.product
|
|||
{% data reusables.sponsors.activity-tab %}
|
||||
1. Click {% octicon "download" aria-label="The download icon" %} **Export**.
|
||||
![Export button](/assets/images/help/sponsors/export-all.png)
|
||||
1. Choose a timeframe and a format for the data you'd like to export, then click **Start export**.
|
||||
1. Choose a time frame and a format for the data you'd like to export, then click **Start export**.
|
||||
![Options for data export](/assets/images/help/sponsors/export-your-sponsors.png)
|
|
@ -17,7 +17,7 @@ versions:
|
|||
Sometimes, {% data variables.product.prodname_pages %} will not attempt to build your site after you push changes to your site's publishing source.{% if currentVersion == "free-pro-team@latest" %}
|
||||
- The person who pushed the changes hasn't verified their email address. For more information, see "[Verifying your email address](/articles/verifying-your-email-address)."{% endif %}
|
||||
- You're pushing with a deploy key. If you want to automate pushes to your site's repository, you can set up a machine user instead. For more information, see "[Managing deploy keys](/developers/overview/managing-deploy-keys#machine-users)."
|
||||
- You're using a CI service that isn't configured to build your publishing source. For example, Travis CI won't build the `gh-pages` branch unless you add the branch to a safelist. For more information, see "[Customizing the build](https://docs.travis-ci.com/user/customizing-the-build/#safelisting-or-blocklisting-branches)" on Travis CI, or your CI service's documentation.
|
||||
- You're using a CI service that isn't configured to build your publishing source. For example, Travis CI won't build the `gh-pages` branch unless you add the branch to a safe list. For more information, see "[Customizing the build](https://docs.travis-ci.com/user/customizing-the-build/#safelisting-or-blocklisting-branches)" on Travis CI, or your CI service's documentation.
|
||||
|
||||
{% note %}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ You can use these endpoints to administer your enterprise.
|
|||
REST API endpoints{% if enterpriseServerVersions contains currentVersion %}—except [Management Console](#management-console) API endpoints—{% endif %} are prefixed with the following URL:
|
||||
|
||||
```shell
|
||||
http(s)://<em>hostname</em>/api/v3/
|
||||
{% data variables.product.api_url_pre %}
|
||||
```
|
||||
|
||||
{% if enterpriseServerVersions contains currentVersion %}
|
||||
|
|
|
@ -8,7 +8,7 @@ Package manager | YAML value | Supported versions | Private repositories | Vendo
|
|||
--- | --- | --- |:---:|:---:
|
||||
Bundler | `bundler` | v1 | | **✓** |
|
||||
Cargo | `cargo` | v1 | **✓** | |
|
||||
Composer | `composer` | v1,v2 | **✓** | |
|
||||
Composer | `composer` | v1, v2 | **✓** | |
|
||||
Docker | `docker` | v1 | **✓** | |
|
||||
Elixir | `mix` | v1 | **✓** | |
|
||||
Elm | `elm` | v0.18, v0.19 | **✓** | |
|
||||
|
@ -17,7 +17,7 @@ GitHub Actions | `github-actions` | N/A (no version) | **✓** | |
|
|||
Go modules | `gomod` | v1 | **✓** | **✓** |
|
||||
Gradle | `gradle` | see (A) below | **✓** | |
|
||||
Maven | `maven` | see (B) below | **✓** | |
|
||||
npm | `npm` | v6 | **✓** | |
|
||||
npm | `npm` | v6, v7 | **✓** | |
|
||||
NuGet | `nuget` | <= 4.8.</br>see (C) below | **✓** | |
|
||||
pip | `pip` | v20 | | |
|
||||
pipenv | `pip` | <= 2018.11.26 | | |
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
{% data variables.product.product_name %} will only trigger reminders for up to five repositories per owner and 20 pull requests per repository.
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
1. Add common weakness enumerators (CWEs) for the kinds of security weaknesses that this security advisory addresses. For a full list of CWEs, see the "[Common Weakness Enumeration](https://cwe.mitre.org/index.html)" from MITRE.
|
||||
1. If you have an existing CVE identifier, select "I have an existing CVE identifier" and type the CVE identifier in the text box. Otherwise, you can request a CVE from {% data variables.product.prodname_dotcom %} later.
|
|
@ -1,2 +1,2 @@
|
|||
1. Type the details about the security vulnerability that the security advisory addresses.
|
||||
![Security advisory metadata](/assets/images/help/security/security-advisory-metadata.png)
|
||||
1. Edit the product and versions affected by the security vulnerability that this security advisory addresses.
|
||||
![Security advisory metadata](/assets/images/help/security/security-advisory-affected-product.png)
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
1. Select the severity of the security vulnerability. To assign a CVSS score, select "Assess severity using CVSS" and click the appropriate values in the calculator. {% data variables.product.product_name %} calculates the score according to the "[Common Vulnerability Scoring System Calculator](https://www.first.org/cvss/calculator)."
|
||||
![Drop-down menu to select the severity](/assets/images/help/security/security-advisory-severity.png)
|
|
@ -1,8 +1,8 @@
|
|||
{% if page.permalinks and page.permalinks.length > 1 %}
|
||||
<details class="dropdown-withArrow d-inline-block details details-reset mb-1 position-relative close-when-clicked-outside article-versions">
|
||||
<summary class="d-flex flex-items-center flex-justify-between f4 h5-mktg btn-outline-mktg btn-mktg p-2">
|
||||
<summary class="f4 h5-mktg btn-outline-mktg btn-mktg p-2">
|
||||
<!-- GitHub.com, Enterprise Server 2.16, etc -->
|
||||
<span class="d-md-none d-xl-inline-block mr-1">{% data ui.pages.article_version %}</span> {{ allVersions[currentVersion].versionTitle }}
|
||||
<span class="d-md-none d-xl-inline-block">{% data ui.pages.article_version %}</span> {{ allVersions[currentVersion].versionTitle }}
|
||||
<svg class="arrow ml-1" width="14px" height="8px" viewBox="0 0 14 8" xml:space="preserve" fill="none" stroke="#1277eb"><path d="M1,1l6.2,6L13,1"></path></svg>
|
||||
</summary>
|
||||
|
||||
|
|
|
@ -40,7 +40,6 @@
|
|||
|
||||
{% if translation_notification_type %}
|
||||
<div class="header-notifications text-center f5 bg-blue-1 text-gray-dark py-4 px-6 translation_notice{% if release_notification_type %} border-bottom border-black-fade{% endif %}">
|
||||
{{ currentLanguage }}
|
||||
{{ translation_notification }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
|
|
@ -31,7 +31,6 @@ export function sendEvent ({
|
|||
type,
|
||||
version = '1.0.0',
|
||||
page_render_duration,
|
||||
exit_page_id,
|
||||
exit_first_paint,
|
||||
exit_dom_interactive,
|
||||
exit_dom_complete,
|
||||
|
@ -60,6 +59,7 @@ export function sendEvent ({
|
|||
user: getUserEventsId(),
|
||||
version,
|
||||
created: new Date().toISOString(),
|
||||
page_event_id: pageEventId,
|
||||
|
||||
// Content information
|
||||
path: location.pathname,
|
||||
|
@ -84,7 +84,6 @@ export function sendEvent ({
|
|||
page_render_duration,
|
||||
|
||||
// Exit event
|
||||
exit_page_id,
|
||||
exit_first_paint,
|
||||
exit_dom_interactive,
|
||||
exit_dom_complete,
|
||||
|
@ -149,7 +148,6 @@ function trackScroll () {
|
|||
function sendExit () {
|
||||
if (sentExit) return
|
||||
if (document.visibilityState !== 'hidden') return
|
||||
if (!pageEventId) return
|
||||
sentExit = true
|
||||
const {
|
||||
firstContentfulPaint,
|
||||
|
@ -158,7 +156,6 @@ function sendExit () {
|
|||
} = getPerformance()
|
||||
return sendEvent({
|
||||
type: 'exit',
|
||||
exit_page_id: pageEventId,
|
||||
exit_first_paint: firstContentfulPaint,
|
||||
exit_dom_interactive: domInteractive,
|
||||
exit_dom_complete: domComplete,
|
||||
|
@ -167,22 +164,24 @@ function sendExit () {
|
|||
})
|
||||
}
|
||||
|
||||
export default function initializeEvents () {
|
||||
// Page event
|
||||
function initPageEvent () {
|
||||
const { render } = getPerformance()
|
||||
const pageEvent = sendEvent({
|
||||
type: 'page',
|
||||
page_render_duration: render
|
||||
})
|
||||
pageEventId = pageEvent?.context?.event_id
|
||||
}
|
||||
|
||||
// Clipboard event
|
||||
;['copy', 'cut', 'paste'].forEach(verb => {
|
||||
function initClipboardEvent () {
|
||||
['copy', 'cut', 'paste'].forEach(verb => {
|
||||
document.documentElement.addEventListener(verb, () => {
|
||||
sendEvent({ type: 'clipboard', clipboard_operation: verb })
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// Link event
|
||||
function initLinkEvent () {
|
||||
document.documentElement.addEventListener('click', evt => {
|
||||
const link = evt.target.closest('a[href^="http"]')
|
||||
if (!link) return
|
||||
|
@ -191,10 +190,16 @@ export default function initializeEvents () {
|
|||
link_url: link.href
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function initExitEvent () {
|
||||
window.addEventListener('scroll', trackScroll)
|
||||
document.addEventListener('visibilitychange', sendExit)
|
||||
}
|
||||
|
||||
function initNavigateEvent () {
|
||||
if (!document.querySelector('.sidebar-products')) return
|
||||
|
||||
// Navigate event
|
||||
Array.from(
|
||||
document.querySelectorAll('.sidebar-products details')
|
||||
).forEach(details => details.addEventListener(
|
||||
|
@ -213,9 +218,17 @@ export default function initializeEvents () {
|
|||
navigate_label: `link: ${link.href}`
|
||||
})
|
||||
})
|
||||
|
||||
// Exit event
|
||||
pageEventId = pageEvent?.context?.event_id
|
||||
window.addEventListener('scroll', trackScroll)
|
||||
document.addEventListener('visibilitychange', sendExit)
|
||||
}
|
||||
|
||||
export default function initializeEvents () {
|
||||
initPageEvent() // must come first
|
||||
initExitEvent()
|
||||
initLinkEvent()
|
||||
initClipboardEvent()
|
||||
initNavigateEvent()
|
||||
// print event in ./print.js
|
||||
// survey event in ./helpfulness.js
|
||||
// experiment event in ./experiment.js
|
||||
// search event in ./search.js
|
||||
// redirect event in middleware/record-redirect.js
|
||||
}
|
||||
|
|
|
@ -4,11 +4,11 @@ const isBrowser = process.env.BROWSER
|
|||
const isActions = Boolean(process.env.GITHUB_ACTIONS)
|
||||
const testTranslation = Boolean(process.env.TEST_TRANSLATION)
|
||||
|
||||
let reporters = ['default']
|
||||
const reporters = ['default']
|
||||
|
||||
if (testTranslation) {
|
||||
// only use custom reporter if we are linting translations
|
||||
reporters = ['<rootDir>/tests/helpers/lint-translation-reporter.js']
|
||||
reporters.push('<rootDir>/tests/helpers/lint-translation-reporter.js')
|
||||
} else if (isActions) {
|
||||
reporters.push('jest-github-actions-reporter')
|
||||
}
|
||||
|
@ -34,7 +34,9 @@ module.exports = {
|
|||
testPathIgnorePatterns: [
|
||||
'node_modules/',
|
||||
'vendor/',
|
||||
'tests/fixtures/',
|
||||
'tests/helpers/',
|
||||
'tests/javascripts/',
|
||||
...isBrowser ? [] : ['tests/browser/browser.js']
|
||||
],
|
||||
testMatch: [
|
||||
|
|
|
@ -120,7 +120,7 @@
|
|||
|
||||
<div class="d-lg-flex gutter-lg flex-items-stretch">
|
||||
{% assign guideCards = featuredLinks.guideCards %}
|
||||
{% render "guide-card" for guideCards as guide %}
|
||||
{% render guide-card for guideCards as guide %}
|
||||
</div>
|
||||
|
||||
<a href="{{ currentPath }}/guides" class="btn btn-outline float-right">Explore guides {% octicon "arrow-right" %}</a>
|
||||
|
|
|
@ -1,23 +1,20 @@
|
|||
const Liquid = require('liquid')
|
||||
const { TokenizationError } = require('liquidjs')
|
||||
|
||||
const Syntax = /([a-z0-9/\\_.\-[\]]+)/i
|
||||
const SyntaxHelp = "Syntax Error in 'data' - Valid syntax: data [path]"
|
||||
|
||||
module.exports = class Data extends Liquid.Tag {
|
||||
constructor (template, tagName, markup) {
|
||||
super(template, tagName, markup)
|
||||
|
||||
const match = Syntax.exec(markup)
|
||||
if (!match) {
|
||||
throw new Liquid.SyntaxError(SyntaxHelp)
|
||||
module.exports = {
|
||||
parse (tagToken) {
|
||||
if (!tagToken || !Syntax.test(tagToken.args)) {
|
||||
throw new TokenizationError(SyntaxHelp, tagToken)
|
||||
}
|
||||
|
||||
this.path = match[1]
|
||||
}
|
||||
this.path = tagToken.args
|
||||
},
|
||||
|
||||
async render (context) {
|
||||
const value = await context.get(`site.data.${this.path}`)
|
||||
async render (scope) {
|
||||
const value = await this.liquid.evalValue(`site.data.${this.path}`, scope)
|
||||
if (typeof value !== 'string') return value
|
||||
return this.template.engine.parseAndRender(value, context)
|
||||
return this.liquid.parseAndRender(value, scope.environments)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
const Liquid = require('liquid')
|
||||
|
||||
const tags = {
|
||||
mac: '',
|
||||
windows: '',
|
||||
|
@ -13,11 +11,26 @@ const tags = {
|
|||
|
||||
const template = '<div class="extended-markdown {{ tagName }} {{ classes }}">{{ output }}</div>'
|
||||
|
||||
class ExtendedMarkdown extends Liquid.Block {
|
||||
async render (context) {
|
||||
const chunks = await super.render(context)
|
||||
const output = Liquid.Helpers.toFlatString(chunks)
|
||||
return this.template.engine.parseAndRender(template, {
|
||||
const ExtendedMarkdown = {
|
||||
type: 'block',
|
||||
|
||||
parse (tagToken, remainTokens) {
|
||||
this.tagName = tagToken.name
|
||||
this.templates = []
|
||||
|
||||
const stream = this.liquid.parser.parseStream(remainTokens)
|
||||
stream
|
||||
.on(`tag:end${this.tagName}`, () => stream.stop())
|
||||
.on('template', tpl => this.templates.push(tpl))
|
||||
.on('end', () => {
|
||||
throw new Error(`tag ${tagToken.getText()} not closed`)
|
||||
})
|
||||
stream.start()
|
||||
},
|
||||
|
||||
render: function * (scope) {
|
||||
const output = yield this.liquid.renderer.renderTemplates(this.templates, scope)
|
||||
return yield this.liquid.parseAndRender(template, {
|
||||
tagName: this.tagName,
|
||||
classes: tags[this.tagName],
|
||||
output
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
const Link = require('./link')
|
||||
|
||||
// For details, see class method in lib/liquid-tags/link.js
|
||||
module.exports = class HomepageLinkWithIntro extends Link {}
|
||||
const link = require('./link')
|
||||
module.exports = link('homepage-link-with-intro')
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
const Liquid = require('liquid')
|
||||
const assert = require('assert')
|
||||
|
||||
// This class supports a tag that expects two parameters, a data reference and `spaces=NUMBER`:
|
||||
|
@ -10,11 +9,15 @@ const assert = require('assert')
|
|||
// reference is used inside a block element (like a list or nested list) without
|
||||
// affecting the formatting when the reference is used elsewhere via {{ site.data.foo.bar }}.
|
||||
|
||||
module.exports = class IndentedDataReference extends Liquid.Tag {
|
||||
module.exports = {
|
||||
parse (tagToken) {
|
||||
this.markup = tagToken.args.trim()
|
||||
},
|
||||
|
||||
async render (context) {
|
||||
// obfuscate first legit space, remove all other spaces, then restore legit space
|
||||
// this way we can support spaces=NUMBER as well as spaces = NUMBER
|
||||
const input = this.markup.trim()
|
||||
const input = this.markup
|
||||
.replace(/\s/, 'REALSPACE')
|
||||
.replace(/\s/g, '')
|
||||
.replace('REALSPACE', ' ')
|
||||
|
@ -27,7 +30,7 @@ module.exports = class IndentedDataReference extends Liquid.Tag {
|
|||
assert(parseInt(numSpaces) || numSpaces === '0', '"spaces=NUMBER" must include a number')
|
||||
|
||||
// Get the referenced value from the context
|
||||
const value = await context.get(dataReference)
|
||||
const value = await this.liquid.evalValue(dataReference, context)
|
||||
|
||||
// If nothing is found in the context, exit with nothing; this may
|
||||
// feel weird and that we should throw an error, but this is "The Liquid Way TM"
|
||||
|
@ -36,6 +39,6 @@ module.exports = class IndentedDataReference extends Liquid.Tag {
|
|||
// add spaces to each line
|
||||
const renderedReferenceWithIndent = value.replace(/^/mg, ' '.repeat(numSpaces))
|
||||
|
||||
return this.template.engine.parseAndRender(renderedReferenceWithIndent, context)
|
||||
return this.liquid.parseAndRender(renderedReferenceWithIndent, context)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
const Link = require('./link')
|
||||
const link = require('./link')
|
||||
const linkAsArticleCard = link('link-as-article-card')
|
||||
|
||||
// For details, see class method in lib/liquid-tags/link.js
|
||||
module.exports = class LinkAsArticleCard extends Link {
|
||||
async renderPageProps (page, ctx, props) {
|
||||
const renderedProps = await super.renderPageProps(page, ctx, props)
|
||||
const { type: typeKey, topics = [] } = page
|
||||
const typeVal = typeKey ? ctx.site.data.ui.product_sublanding.guide_types[typeKey] : null
|
||||
return {
|
||||
...renderedProps,
|
||||
type: { key: typeKey, value: typeVal },
|
||||
topics
|
||||
}
|
||||
linkAsArticleCard.renderPageProps = async function renderPageProps (page, ctx, props) {
|
||||
const renderedProps = await link().renderPageProps(page, ctx, props)
|
||||
const { type: typeKey, topics = [] } = page
|
||||
const typeVal = typeKey ? ctx.site.data.ui.product_sublanding.guide_types[typeKey] : null
|
||||
return {
|
||||
...renderedProps,
|
||||
type: { key: typeKey, value: typeVal },
|
||||
topics
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = linkAsArticleCard
|
||||
|
|
|
@ -1,4 +1,2 @@
|
|||
const Link = require('./link')
|
||||
|
||||
// For details, see class method in lib/liquid-tags/link.js
|
||||
module.exports = class LinkInList extends Link {}
|
||||
const link = require('./link')
|
||||
module.exports = link('link-in-list')
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
const Link = require('./link')
|
||||
|
||||
// For details, see class method in lib/liquid-tags/link.js
|
||||
module.exports = class LinkWithIntro extends Link {}
|
||||
const link = require('./link')
|
||||
module.exports = link('link-with-intro')
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const assert = require('assert')
|
||||
const Liquid = require('liquid')
|
||||
const liquid = new Liquid.Engine()
|
||||
const LiquidTag = require('./liquid-tag')
|
||||
const findPage = require('../find-page')
|
||||
const { getPathWithoutLanguage, getPathWithoutVersion } = require('../path-utils')
|
||||
const getApplicableVersions = require('../get-applicable-versions')
|
||||
const removeFPTFromPath = require('../remove-fpt-from-path')
|
||||
const liquidVariableSyntax = /^{{\s*(.*)\s*}}/
|
||||
|
||||
// This class supports a set of link tags. Each tag expects one parameter, a language-agnostic href:
|
||||
//
|
||||
|
@ -24,10 +23,16 @@ const removeFPTFromPath = require('../remove-fpt-from-path')
|
|||
//
|
||||
// Liquid Docs: https://github.com/liquid-lang/liquid-node#registering-new-tags
|
||||
|
||||
module.exports = class Link extends LiquidTag {
|
||||
constructor (template, tagName, href) {
|
||||
super(template, tagName, href.trim())
|
||||
}
|
||||
module.exports = (name) => ({
|
||||
parse (tagToken) {
|
||||
this.param = tagToken.args.trim()
|
||||
},
|
||||
|
||||
async getTemplate () {
|
||||
const pathToTemplate = path.join(__dirname, '../../includes/liquid-tags', `${name}.html`)
|
||||
const template = await fs.promises.readFile(pathToTemplate, 'utf8')
|
||||
return template.replace(/\r/g, '')
|
||||
},
|
||||
|
||||
async renderPageProps (page, ctx, props) {
|
||||
const renderedProps = {}
|
||||
|
@ -38,12 +43,12 @@ module.exports = class Link extends LiquidTag {
|
|||
}
|
||||
|
||||
return renderedProps
|
||||
}
|
||||
},
|
||||
|
||||
async parseTemplate (context, opts = { shortTitle: false }) {
|
||||
async render (scope) {
|
||||
const template = await this.getTemplate()
|
||||
|
||||
const ctx = context.environments[0]
|
||||
const ctx = scope.environments
|
||||
|
||||
assert(ctx.page, 'context.page is required')
|
||||
assert(ctx.page.relativePath, 'context.page.relativePath is required')
|
||||
|
@ -51,14 +56,11 @@ module.exports = class Link extends LiquidTag {
|
|||
assert(ctx.currentLanguage, 'context.currentLanguage is required')
|
||||
|
||||
// process any liquid in hrefs (e.g., /enterprise/{{ page.version }})
|
||||
let href = await liquid.parseAndRender(this.param, ctx)
|
||||
|
||||
// process variable defined in page scope
|
||||
let href = await this.liquid.parseAndRender(this.param, ctx)
|
||||
if (href === '') {
|
||||
const match = liquidVariableSyntax.exec(this.param)
|
||||
if (match) {
|
||||
const variable = new Liquid.Variable(match[1])
|
||||
href = await variable.render(context)
|
||||
href = await this.liquid.evalValue(match[1], scope)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -69,7 +71,8 @@ module.exports = class Link extends LiquidTag {
|
|||
// example: /site-policy (linked to from /github/index.md)
|
||||
// becomes: /github/site-policy
|
||||
// otherwise, assume it's already a full path and needs nothing further
|
||||
if (href.match(/\//g).length < 2) {
|
||||
const hrefMatch = href.match(/\//g)
|
||||
if (hrefMatch && hrefMatch.length < 2) {
|
||||
fullPath = path.join(dirName, href)
|
||||
}
|
||||
|
||||
|
@ -94,10 +97,8 @@ module.exports = class Link extends LiquidTag {
|
|||
intro: { opt: { unwrap: true } }
|
||||
})
|
||||
|
||||
const parsed = await liquid.parseAndRender(template, { fullPath, ...renderedProps })
|
||||
const parsed = await this.liquid.parseAndRender(template, { fullPath, ...renderedProps })
|
||||
|
||||
return parsed.trim()
|
||||
}
|
||||
}
|
||||
|
||||
const liquidVariableSyntax = RegExp(`^${Liquid.VariableStart.source}\\s*(.*)\\s*${Liquid.VariableEnd.source}`)
|
||||
})
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const Liquid = require('liquid')
|
||||
const { TokenizationError } = require('liquidjs')
|
||||
const octicons = require('@primer/octicons')
|
||||
|
||||
const OptionsSyntax = /([a-zA-Z-]+)="([a-zA-Z0-9\d-_\s]+)"*/g
|
||||
|
@ -12,12 +12,11 @@ const SyntaxHelp = 'Syntax Error in tag \'octicon\' - Valid syntax: octicon "<na
|
|||
* {% octicon "check" %}
|
||||
* {% octicon "check" width="64" aria-label="Example label" %}
|
||||
*/
|
||||
module.exports = class Octicon extends Liquid.Tag {
|
||||
constructor (template, tagName, markup) {
|
||||
super(template, tagName, markup)
|
||||
const match = markup.match(Syntax)
|
||||
module.exports = {
|
||||
parse (tagToken) {
|
||||
const match = tagToken.args.match(Syntax)
|
||||
if (!match) {
|
||||
throw new Liquid.SyntaxError(SyntaxHelp)
|
||||
throw new TokenizationError(SyntaxHelp, tagToken)
|
||||
}
|
||||
|
||||
// Memoize the icon
|
||||
|
@ -38,9 +37,9 @@ module.exports = class Octicon extends Liquid.Tag {
|
|||
if (key === 'label') this.options['aria-label'] = value
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async render () {
|
||||
async render (scope) {
|
||||
// Throw an error if the requested octicon does not exist.
|
||||
if (!Object.prototype.hasOwnProperty.call(octicons, this.icon)) {
|
||||
throw new Error(`Octicon ${this.icon} does not exist`)
|
||||
|
|
|
@ -1,4 +1,2 @@
|
|||
const Link = require('./link')
|
||||
|
||||
// For details, see class method in lib/liquid-tags/link.js
|
||||
module.exports = class TopicLinkInList extends Link {}
|
||||
const link = require('./link')
|
||||
module.exports = link('topic-link-in-list')
|
||||
|
|
|
@ -3,8 +3,7 @@ const renderContent = require('./renderContent')
|
|||
const { ExtendedMarkdown, tags } = require('../liquid-tags/extended-markdown')
|
||||
|
||||
// Include custom tags like {% link_with_intro /article/foo %}
|
||||
renderContent.liquid.registerTag('liquid_tag', require('../liquid-tags/liquid-tag'))
|
||||
renderContent.liquid.registerTag('link', require('../liquid-tags/link'))
|
||||
renderContent.liquid.registerTag('link', require('../liquid-tags/link')('link'))
|
||||
renderContent.liquid.registerTag('link_with_intro', require('../liquid-tags/link-with-intro'))
|
||||
renderContent.liquid.registerTag('homepage_link_with_intro', require('../liquid-tags/homepage-link-with-intro'))
|
||||
renderContent.liquid.registerTag('link_in_list', require('../liquid-tags/link-in-list'))
|
||||
|
@ -19,29 +18,29 @@ for (const tag in tags) {
|
|||
renderContent.liquid.registerTag(tag, ExtendedMarkdown)
|
||||
}
|
||||
|
||||
renderContent.liquid.registerFilters({
|
||||
/**
|
||||
* Like the `size` filter, but specifically for
|
||||
* getting the number of keys in an object
|
||||
*/
|
||||
obj_size: (input) => {
|
||||
if (!input) return 0
|
||||
return Object.keys(input).length
|
||||
},
|
||||
/**
|
||||
* Returns the version number of a GHES version string
|
||||
* ex: enterprise-server@2.22 => 2.22
|
||||
*/
|
||||
version_num: (input) => {
|
||||
return input.split('@')[1]
|
||||
},
|
||||
/**
|
||||
* Convert the input to a slug
|
||||
*/
|
||||
slugify: (input) => {
|
||||
const slugger = new GithubSlugger()
|
||||
return slugger.slug(input)
|
||||
}
|
||||
/**
|
||||
* Like the `size` filter, but specifically for
|
||||
* getting the number of keys in an object
|
||||
*/
|
||||
renderContent.liquid.registerFilter('obj_size', input => {
|
||||
if (!input) return 0
|
||||
return Object.keys(input).length
|
||||
})
|
||||
|
||||
/**
|
||||
* Returns the version number of a GHES version string
|
||||
* ex: enterprise-server@2.22 => 2.22
|
||||
*/
|
||||
renderContent.liquid.registerFilter('version_num', input => {
|
||||
return input.split('@')[1]
|
||||
})
|
||||
|
||||
/**
|
||||
* Convert the input to a slug
|
||||
*/
|
||||
renderContent.liquid.registerFilter('slugify', input => {
|
||||
const slugger = new GithubSlugger()
|
||||
return slugger.slug(input)
|
||||
})
|
||||
|
||||
module.exports = renderContent
|
||||
|
|
|
@ -1,42 +1,11 @@
|
|||
const Liquid = require('liquid')
|
||||
const semver = require('semver')
|
||||
const { Liquid, defaultOperators } = require('liquidjs')
|
||||
const path = require('path')
|
||||
const engine = new Liquid.Engine()
|
||||
engine.registerFileSystem(
|
||||
new Liquid.LocalFileSystem(path.join(process.cwd(), 'includes'))
|
||||
)
|
||||
const semver = require('semver')
|
||||
|
||||
// GHE versions are not valid SemVer, but can be coerced...
|
||||
// https://github.com/npm/node-semver#coercion
|
||||
|
||||
Liquid.Condition.operators.ver_gt = (cond, left, right) => {
|
||||
if (!matchesVersionString(left)) return false
|
||||
if (!matchesVersionString(right)) return false
|
||||
|
||||
const [leftPlan, leftRelease] = splitVersion(left)
|
||||
const [rightPlan, rightRelease] = splitVersion(right)
|
||||
|
||||
if (leftPlan !== rightPlan) return false
|
||||
|
||||
return semver.gt(semver.coerce(leftRelease), semver.coerce(rightRelease))
|
||||
}
|
||||
|
||||
Liquid.Condition.operators.ver_lt = (cond, left, right) => {
|
||||
if (!matchesVersionString(left)) return false
|
||||
if (!matchesVersionString(right)) return false
|
||||
|
||||
const [leftPlan, leftRelease] = splitVersion(left)
|
||||
const [rightPlan, rightRelease] = splitVersion(right)
|
||||
|
||||
if (leftPlan !== rightPlan) return false
|
||||
|
||||
return semver.lt(semver.coerce(leftRelease), semver.coerce(rightRelease))
|
||||
}
|
||||
|
||||
module.exports = engine
|
||||
|
||||
function matchesVersionString (input) {
|
||||
return input && input.match(/^(?:[a-z](?:[a-z-]*[a-z])?@)?\d+(?:\.\d+)*/)
|
||||
return typeof input === 'string' && input.match(/^(?:[a-z](?:[a-z-]*[a-z])?@)?\d+(?:\.\d+)*/)
|
||||
}
|
||||
// Support new version formats where version = plan@release
|
||||
// e.g., enterprise-server@2.21, where enterprise-server is the plan and 2.21 is the release
|
||||
|
@ -59,3 +28,36 @@ function splitVersion (version) {
|
|||
|
||||
return [plan, release]
|
||||
}
|
||||
|
||||
const engine = new Liquid({
|
||||
root: path.join(process.cwd(), 'includes'),
|
||||
extname: '.html',
|
||||
dynamicPartials: false,
|
||||
operators: {
|
||||
...defaultOperators,
|
||||
ver_gt: (left, right) => {
|
||||
if (!matchesVersionString(left)) return false
|
||||
if (!matchesVersionString(right)) return false
|
||||
|
||||
const [leftPlan, leftRelease] = splitVersion(left)
|
||||
const [rightPlan, rightRelease] = splitVersion(right)
|
||||
|
||||
if (leftPlan !== rightPlan) return false
|
||||
|
||||
return semver.gt(semver.coerce(leftRelease), semver.coerce(rightRelease))
|
||||
},
|
||||
ver_lt: (left, right) => {
|
||||
if (!matchesVersionString(left)) return false
|
||||
if (!matchesVersionString(right)) return false
|
||||
|
||||
const [leftPlan, leftRelease] = splitVersion(left)
|
||||
const [rightPlan, rightRelease] = splitVersion(right)
|
||||
|
||||
if (leftPlan !== rightPlan) return false
|
||||
|
||||
return semver.lt(semver.coerce(leftRelease), semver.coerce(rightRelease))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = engine
|
||||
|
|
|
@ -21,7 +21,7 @@ const inlineTagRegex = new RegExp(`\n?(</?${inlineTagString}>?)\n?`, 'gm')
|
|||
|
||||
// parse multiple times because some templates contain more templates. :]
|
||||
module.exports = async function renderContent (
|
||||
template,
|
||||
template = '',
|
||||
context = {},
|
||||
options = {}
|
||||
) {
|
||||
|
|
|
@ -4114,7 +4114,7 @@
|
|||
"/app/installations/{installation_id}/suspended": {
|
||||
"put": {
|
||||
"summary": "Suspend an app installation",
|
||||
"description": "**Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see \"[Suspending a GitHub App installation](https://docs.github.com/apps/managing-github-apps/suspending-a-github-app-installation/).\"\n\nSuspends a GitHub App on a user, organization, or business account, which blocks the app from accessing the account's resources. When a GitHub App is suspended, the app's access to the GitHub API or webhook events is blocked for that account.\n\nYou must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"description": "Suspends a GitHub App on a user, organization, or business account, which blocks the app from accessing the account's resources. When a GitHub App is suspended, the app's access to the GitHub API or webhook events is blocked for that account.\n\nYou must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"tags": [
|
||||
"apps"
|
||||
],
|
||||
|
@ -4171,7 +4171,7 @@
|
|||
},
|
||||
"delete": {
|
||||
"summary": "Unsuspend an app installation",
|
||||
"description": "**Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see \"[Suspending a GitHub App installation](https://docs.github.com/apps/managing-github-apps/suspending-a-github-app-installation/).\"\n\nRemoves a GitHub App installation suspension.\n\nYou must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"description": "Removes a GitHub App installation suspension.\n\nYou must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"tags": [
|
||||
"apps"
|
||||
],
|
||||
|
@ -77907,34 +77907,19 @@
|
|||
"description": "a description of the group",
|
||||
"example": "A group of Developers working on AzureAD SAML SSO",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "synchronization status for this group mapping",
|
||||
"example": "unsynced",
|
||||
"type": "string"
|
||||
},
|
||||
"synced_at": {
|
||||
"description": "the time of the last sync for this group-mapping",
|
||||
"example": "2019-06-03 22:27:15:000 -700",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"group_id": {
|
||||
"description": "The ID of the group",
|
||||
"example": "111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa",
|
||||
"type": "string"
|
||||
},
|
||||
"group_name": {
|
||||
"description": "The name of the group",
|
||||
"example": "saml-azuread-test",
|
||||
"type": "string"
|
||||
},
|
||||
"group_description": {
|
||||
"description": "a description of the group",
|
||||
"example": "A group of Developers working on AzureAD SAML SSO",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "synchronization status for this group mapping",
|
||||
"example": "unsynced",
|
||||
"type": "string"
|
||||
},
|
||||
"synced_at": {
|
||||
"description": "the time of the last sync for this group-mapping",
|
||||
"example": "2019-06-03 22:27:15:000 -700",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -90268,34 +90253,19 @@
|
|||
"description": "a description of the group",
|
||||
"example": "A group of Developers working on AzureAD SAML SSO",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "synchronization status for this group mapping",
|
||||
"example": "unsynced",
|
||||
"type": "string"
|
||||
},
|
||||
"synced_at": {
|
||||
"description": "the time of the last sync for this group-mapping",
|
||||
"example": "2019-06-03 22:27:15:000 -700",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"group_id": {
|
||||
"description": "The ID of the group",
|
||||
"example": "111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa",
|
||||
"type": "string"
|
||||
},
|
||||
"group_name": {
|
||||
"description": "The name of the group",
|
||||
"example": "saml-azuread-test",
|
||||
"type": "string"
|
||||
},
|
||||
"group_description": {
|
||||
"description": "a description of the group",
|
||||
"example": "A group of Developers working on AzureAD SAML SSO",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "synchronization status for this group mapping",
|
||||
"example": "unsynced",
|
||||
"type": "string"
|
||||
},
|
||||
"synced_at": {
|
||||
"description": "the time of the last sync for this group-mapping",
|
||||
"example": "2019-06-03 22:27:15:000 -700",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -90457,34 +90427,19 @@
|
|||
"description": "a description of the group",
|
||||
"example": "A group of Developers working on AzureAD SAML SSO",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "synchronization status for this group mapping",
|
||||
"example": "unsynced",
|
||||
"type": "string"
|
||||
},
|
||||
"synced_at": {
|
||||
"description": "the time of the last sync for this group-mapping",
|
||||
"example": "2019-06-03 22:27:15:000 -700",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"group_id": {
|
||||
"description": "The ID of the group",
|
||||
"example": "111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa",
|
||||
"type": "string"
|
||||
},
|
||||
"group_name": {
|
||||
"description": "The name of the group",
|
||||
"example": "saml-azuread-test",
|
||||
"type": "string"
|
||||
},
|
||||
"group_description": {
|
||||
"description": "a description of the group",
|
||||
"example": "A group of Developers working on AzureAD SAML SSO",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "synchronization status for this group mapping",
|
||||
"example": "unsynced",
|
||||
"type": "string"
|
||||
},
|
||||
"synced_at": {
|
||||
"description": "the time of the last sync for this group-mapping",
|
||||
"example": "2019-06-03 22:27:15:000 -700",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -99733,6 +99688,14 @@
|
|||
"format": "uri",
|
||||
"example": "https://api.github.com/repos/github/docs/community/code_of_conduct"
|
||||
},
|
||||
"key": {
|
||||
"type": "string",
|
||||
"example": "citizen_code_of_conduct"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"example": "Citizen Code of Conduct"
|
||||
},
|
||||
"html_url": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
|
@ -99742,6 +99705,8 @@
|
|||
},
|
||||
"required": [
|
||||
"url",
|
||||
"key",
|
||||
"name",
|
||||
"html_url"
|
||||
]
|
||||
}
|
||||
|
@ -100836,6 +100801,8 @@
|
|||
"watchers": 1
|
||||
},
|
||||
"code_of_conduct": {
|
||||
"key": "other",
|
||||
"name": "Other",
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct"
|
||||
}
|
||||
|
@ -104602,6 +104569,14 @@
|
|||
"format": "uri",
|
||||
"example": "https://api.github.com/repos/github/docs/community/code_of_conduct"
|
||||
},
|
||||
"key": {
|
||||
"type": "string",
|
||||
"example": "citizen_code_of_conduct"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"example": "Citizen Code of Conduct"
|
||||
},
|
||||
"html_url": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
|
@ -104611,6 +104586,8 @@
|
|||
},
|
||||
"required": [
|
||||
"url",
|
||||
"key",
|
||||
"name",
|
||||
"html_url"
|
||||
]
|
||||
}
|
||||
|
@ -162980,6 +162957,106 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"/repos/{owner}/{repo}/community/code_of_conduct": {
|
||||
"get": {
|
||||
"summary": "Get the code of conduct for a repository",
|
||||
"description": "Returns the contents of the repository's code of conduct file, if one is detected.\n\nA code of conduct is detected if there is a file named `CODE_OF_CONDUCT` in the root directory of the repository. GitHub detects which code of conduct it is using fuzzy matching.",
|
||||
"tags": [
|
||||
"codes-of-conduct"
|
||||
],
|
||||
"operationId": "codes-of-conduct/get-for-repo",
|
||||
"externalDocs": {
|
||||
"description": "API method documentation",
|
||||
"url": "https://docs.github.com/v3/codes_of_conduct/#get-the-code-of-conduct-for-a-repository"
|
||||
},
|
||||
"parameters": [
|
||||
{
|
||||
"name": "owner",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "repo",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"title": "Code Of Conduct",
|
||||
"description": "Code Of Conduct",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"key": {
|
||||
"type": "string",
|
||||
"example": "contributor_covenant"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"example": "Contributor Covenant"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"example": "https://api.github.com/codes_of_conduct/contributor_covenant"
|
||||
},
|
||||
"body": {
|
||||
"type": "string",
|
||||
"example": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
|
||||
},
|
||||
"html_url": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"url",
|
||||
"html_url",
|
||||
"key",
|
||||
"name"
|
||||
]
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"key": "contributor_covenant",
|
||||
"name": "Contributor Covenant",
|
||||
"url": "https://github.com/LindseyB/cosee/blob/master/CODE_OF_CONDUCT.md",
|
||||
"body": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\nto any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\nposting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at lindseyb@github.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n",
|
||||
"html_url": "https://github.com/LindseyB/cosee/blob/master/CODE_OF_CONDUCT.md"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-github": {
|
||||
"githubCloudOnly": false,
|
||||
"enabledForGitHubApps": true,
|
||||
"previews": [
|
||||
{
|
||||
"required": true,
|
||||
"name": "scarlet-witch",
|
||||
"note": "The Codes of Conduct API is currently available for developers to preview.\n\nTo access the API during the preview period, you must provide a custom [media type](https://docs.github.com/rest/overview/media-types) in the `Accept` header:\n```shell\napplication/vnd.github.scarlet-witch-preview+json\n```"
|
||||
}
|
||||
],
|
||||
"category": "codes-of-conduct",
|
||||
"subcategory": null
|
||||
}
|
||||
}
|
||||
},
|
||||
"/repos/{owner}/{repo}/community/profile": {
|
||||
"get": {
|
||||
"summary": "Get community profile metrics",
|
||||
|
@ -163050,6 +163127,14 @@
|
|||
"format": "uri",
|
||||
"example": "https://api.github.com/repos/github/docs/community/code_of_conduct"
|
||||
},
|
||||
"key": {
|
||||
"type": "string",
|
||||
"example": "citizen_code_of_conduct"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"example": "Citizen Code of Conduct"
|
||||
},
|
||||
"html_url": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
|
@ -163059,6 +163144,8 @@
|
|||
},
|
||||
"required": [
|
||||
"url",
|
||||
"key",
|
||||
"name",
|
||||
"html_url"
|
||||
]
|
||||
}
|
||||
|
@ -163239,7 +163326,9 @@
|
|||
"documentation": null,
|
||||
"files": {
|
||||
"code_of_conduct": {
|
||||
"url": "https://api.github.com/repos/octocat/Hello-World/contents/CODE_OF_CONDUCT.md",
|
||||
"name": "Contributor Covenant",
|
||||
"key": "contributor_covenant",
|
||||
"url": "https://api.github.com/codes_of_conduct/contributor_covenant",
|
||||
"html_url": "https://github.com/octocat/Hello-World/blob/master/CODE_OF_CONDUCT.md"
|
||||
},
|
||||
"contributing": {
|
||||
|
@ -293049,34 +293138,19 @@
|
|||
"description": "a description of the group",
|
||||
"example": "A group of Developers working on AzureAD SAML SSO",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "synchronization status for this group mapping",
|
||||
"example": "unsynced",
|
||||
"type": "string"
|
||||
},
|
||||
"synced_at": {
|
||||
"description": "the time of the last sync for this group-mapping",
|
||||
"example": "2019-06-03 22:27:15:000 -700",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"group_id": {
|
||||
"description": "The ID of the group",
|
||||
"example": "111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa",
|
||||
"type": "string"
|
||||
},
|
||||
"group_name": {
|
||||
"description": "The name of the group",
|
||||
"example": "saml-azuread-test",
|
||||
"type": "string"
|
||||
},
|
||||
"group_description": {
|
||||
"description": "a description of the group",
|
||||
"example": "A group of Developers working on AzureAD SAML SSO",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "synchronization status for this group mapping",
|
||||
"example": "unsynced",
|
||||
"type": "string"
|
||||
},
|
||||
"synced_at": {
|
||||
"description": "the time of the last sync for this group-mapping",
|
||||
"example": "2019-06-03 22:27:15:000 -700",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -293289,34 +293363,19 @@
|
|||
"description": "a description of the group",
|
||||
"example": "A group of Developers working on AzureAD SAML SSO",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "synchronization status for this group mapping",
|
||||
"example": "unsynced",
|
||||
"type": "string"
|
||||
},
|
||||
"synced_at": {
|
||||
"description": "the time of the last sync for this group-mapping",
|
||||
"example": "2019-06-03 22:27:15:000 -700",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"group_id": {
|
||||
"description": "The ID of the group",
|
||||
"example": "111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa",
|
||||
"type": "string"
|
||||
},
|
||||
"group_name": {
|
||||
"description": "The name of the group",
|
||||
"example": "saml-azuread-test",
|
||||
"type": "string"
|
||||
},
|
||||
"group_description": {
|
||||
"description": "a description of the group",
|
||||
"example": "A group of Developers working on AzureAD SAML SSO",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "synchronization status for this group mapping",
|
||||
"example": "unsynced",
|
||||
"type": "string"
|
||||
},
|
||||
"synced_at": {
|
||||
"description": "the time of the last sync for this group-mapping",
|
||||
"example": "2019-06-03 22:27:15:000 -700",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -63926,10 +63926,10 @@
|
|||
"anonymous_access_enabled": false
|
||||
},
|
||||
"code_of_conduct": {
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct",
|
||||
"key": "other",
|
||||
"name": "Other"
|
||||
"name": "Other",
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct"
|
||||
},
|
||||
"anonymous_access_enabled": false
|
||||
}
|
||||
|
@ -182489,7 +182489,6 @@
|
|||
},
|
||||
"put": {
|
||||
"summary": "Merge a pull request",
|
||||
"description": "This endpoint triggers [notifications](https://docs.github.com/enterprise-server@2.18/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See \"[Abuse rate limits](https://docs.github.com/enterprise-server@2.18/rest/overview/resources-in-the-rest-api#abuse-rate-limits)\" and \"[Dealing with abuse rate limits](https://docs.github.com/enterprise-server@2.18/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)\" for details.",
|
||||
"tags": [
|
||||
"pulls"
|
||||
],
|
||||
|
@ -183103,7 +183102,6 @@
|
|||
},
|
||||
"post": {
|
||||
"summary": "Request reviewers for a pull request",
|
||||
"description": "This endpoint triggers [notifications](https://docs.github.com/enterprise-server@2.18/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See \"[Abuse rate limits](https://docs.github.com/enterprise-server@2.18/rest/overview/resources-in-the-rest-api#abuse-rate-limits)\" and \"[Dealing with abuse rate limits](https://docs.github.com/enterprise-server@2.18/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)\" for details.",
|
||||
"tags": [
|
||||
"pulls"
|
||||
],
|
||||
|
|
|
@ -64562,10 +64562,10 @@
|
|||
"anonymous_access_enabled": false
|
||||
},
|
||||
"code_of_conduct": {
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct",
|
||||
"key": "other",
|
||||
"name": "Other"
|
||||
"name": "Other",
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct"
|
||||
},
|
||||
"anonymous_access_enabled": false
|
||||
}
|
||||
|
@ -185888,7 +185888,6 @@
|
|||
},
|
||||
"put": {
|
||||
"summary": "Merge a pull request",
|
||||
"description": "This endpoint triggers [notifications](https://docs.github.com/enterprise-server@2.19/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See \"[Abuse rate limits](https://docs.github.com/enterprise-server@2.19/rest/overview/resources-in-the-rest-api#abuse-rate-limits)\" and \"[Dealing with abuse rate limits](https://docs.github.com/enterprise-server@2.19/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)\" for details.",
|
||||
"tags": [
|
||||
"pulls"
|
||||
],
|
||||
|
@ -186502,7 +186501,6 @@
|
|||
},
|
||||
"post": {
|
||||
"summary": "Request reviewers for a pull request",
|
||||
"description": "This endpoint triggers [notifications](https://docs.github.com/enterprise-server@2.19/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See \"[Abuse rate limits](https://docs.github.com/enterprise-server@2.19/rest/overview/resources-in-the-rest-api#abuse-rate-limits)\" and \"[Dealing with abuse rate limits](https://docs.github.com/enterprise-server@2.19/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)\" for details.",
|
||||
"tags": [
|
||||
"pulls"
|
||||
],
|
||||
|
|
|
@ -67680,10 +67680,10 @@
|
|||
"anonymous_access_enabled": false
|
||||
},
|
||||
"code_of_conduct": {
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct",
|
||||
"key": "other",
|
||||
"name": "Other"
|
||||
"name": "Other",
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct"
|
||||
},
|
||||
"anonymous_access_enabled": false
|
||||
}
|
||||
|
@ -188857,7 +188857,6 @@
|
|||
},
|
||||
"put": {
|
||||
"summary": "Merge a pull request",
|
||||
"description": "This endpoint triggers [notifications](https://docs.github.com/enterprise-server@2.20/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See \"[Abuse rate limits](https://docs.github.com/enterprise-server@2.20/rest/overview/resources-in-the-rest-api#abuse-rate-limits)\" and \"[Dealing with abuse rate limits](https://docs.github.com/enterprise-server@2.20/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)\" for details.",
|
||||
"tags": [
|
||||
"pulls"
|
||||
],
|
||||
|
@ -189471,7 +189470,6 @@
|
|||
},
|
||||
"post": {
|
||||
"summary": "Request reviewers for a pull request",
|
||||
"description": "This endpoint triggers [notifications](https://docs.github.com/enterprise-server@2.20/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See \"[Abuse rate limits](https://docs.github.com/enterprise-server@2.20/rest/overview/resources-in-the-rest-api#abuse-rate-limits)\" and \"[Dealing with abuse rate limits](https://docs.github.com/enterprise-server@2.20/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)\" for details.",
|
||||
"tags": [
|
||||
"pulls"
|
||||
],
|
||||
|
|
|
@ -78482,10 +78482,10 @@
|
|||
"anonymous_access_enabled": false
|
||||
},
|
||||
"code_of_conduct": {
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct",
|
||||
"key": "other",
|
||||
"name": "Other"
|
||||
"name": "Other",
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct"
|
||||
},
|
||||
"anonymous_access_enabled": false
|
||||
}
|
||||
|
|
|
@ -8885,7 +8885,7 @@
|
|||
"/app/installations/{installation_id}/suspended": {
|
||||
"put": {
|
||||
"summary": "Suspend an app installation",
|
||||
"description": "**Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see \"[Suspending a GitHub App installation](https://docs.github.com/enterprise-server@2.22/apps/managing-github-apps/suspending-a-github-app-installation/).\"\n\nSuspends a GitHub App on a user, organization, or business account, which blocks the app from accessing the account's resources. When a GitHub App is suspended, the app's access to the GitHub Enterprise Server API or webhook events is blocked for that account.\n\nYou must use a [JWT](https://docs.github.com/enterprise-server@2.22/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"description": "Suspends a GitHub App on a user, organization, or business account, which blocks the app from accessing the account's resources. When a GitHub App is suspended, the app's access to the GitHub Enterprise Server API or webhook events is blocked for that account.\n\nYou must use a [JWT](https://docs.github.com/enterprise-server@2.22/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"tags": [
|
||||
"apps"
|
||||
],
|
||||
|
@ -8942,7 +8942,7 @@
|
|||
},
|
||||
"delete": {
|
||||
"summary": "Unsuspend an app installation",
|
||||
"description": "**Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see \"[Suspending a GitHub App installation](https://docs.github.com/enterprise-server@2.22/apps/managing-github-apps/suspending-a-github-app-installation/).\"\n\nRemoves a GitHub App installation suspension.\n\nYou must use a [JWT](https://docs.github.com/enterprise-server@2.22/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"description": "Removes a GitHub App installation suspension.\n\nYou must use a [JWT](https://docs.github.com/enterprise-server@2.22/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"tags": [
|
||||
"apps"
|
||||
],
|
||||
|
@ -89147,6 +89147,7 @@
|
|||
"hooks_url": "https://api.github.com/repos/octocat/Hello-World/hooks",
|
||||
"svn_url": "https://svn.github.com/octocat/Hello-World",
|
||||
"homepage": "https://github.com",
|
||||
"language": null,
|
||||
"forks_count": 9,
|
||||
"forks": 9,
|
||||
"stargazers_count": 80,
|
||||
|
@ -89577,10 +89578,10 @@
|
|||
"watchers": 1
|
||||
},
|
||||
"code_of_conduct": {
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct",
|
||||
"key": "other",
|
||||
"name": "Other"
|
||||
"name": "Other",
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9099,7 +9099,7 @@
|
|||
"/app/installations/{installation_id}/suspended": {
|
||||
"put": {
|
||||
"summary": "Suspend an app installation",
|
||||
"description": "**Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see \"[Suspending a GitHub App installation](https://docs.github.com/enterprise-server@3.0/apps/managing-github-apps/suspending-a-github-app-installation/).\"\n\nSuspends a GitHub App on a user, organization, or business account, which blocks the app from accessing the account's resources. When a GitHub App is suspended, the app's access to the GitHub Enterprise Server API or webhook events is blocked for that account.\n\nYou must use a [JWT](https://docs.github.com/enterprise-server@3.0/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"description": "Suspends a GitHub App on a user, organization, or business account, which blocks the app from accessing the account's resources. When a GitHub App is suspended, the app's access to the GitHub Enterprise Server API or webhook events is blocked for that account.\n\nYou must use a [JWT](https://docs.github.com/enterprise-server@3.0/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"tags": [
|
||||
"apps"
|
||||
],
|
||||
|
@ -9156,7 +9156,7 @@
|
|||
},
|
||||
"delete": {
|
||||
"summary": "Unsuspend an app installation",
|
||||
"description": "**Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see \"[Suspending a GitHub App installation](https://docs.github.com/enterprise-server@3.0/apps/managing-github-apps/suspending-a-github-app-installation/).\"\n\nRemoves a GitHub App installation suspension.\n\nYou must use a [JWT](https://docs.github.com/enterprise-server@3.0/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"description": "Removes a GitHub App installation suspension.\n\nYou must use a [JWT](https://docs.github.com/enterprise-server@3.0/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint.",
|
||||
"tags": [
|
||||
"apps"
|
||||
],
|
||||
|
@ -93677,6 +93677,7 @@
|
|||
"hooks_url": "https://api.github.com/repos/octocat/Hello-World/hooks",
|
||||
"svn_url": "https://svn.github.com/octocat/Hello-World",
|
||||
"homepage": "https://github.com",
|
||||
"language": null,
|
||||
"forks_count": 9,
|
||||
"forks": 9,
|
||||
"stargazers_count": 80,
|
||||
|
@ -94107,10 +94108,10 @@
|
|||
"watchers": 1
|
||||
},
|
||||
"code_of_conduct": {
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct",
|
||||
"key": "other",
|
||||
"name": "Other"
|
||||
"name": "Other",
|
||||
"html_url": "https://github.com/github/docs/blob/main/CODE_OF_CONDUCT.md",
|
||||
"url": "https://api.github.com/repos/github/docs/community/code_of_conduct"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,11 @@ const context = {
|
|||
format: 'date-time',
|
||||
description: 'The time we created the event; please reference UTC.'
|
||||
},
|
||||
page_event_id: {
|
||||
type: 'string',
|
||||
description: 'The id of the corresponding `page` event.',
|
||||
format: 'uuid'
|
||||
},
|
||||
|
||||
// Content information
|
||||
path: {
|
||||
|
@ -132,8 +137,7 @@ const exitSchema = {
|
|||
additionalProperties: false,
|
||||
required: [
|
||||
'type',
|
||||
'context',
|
||||
'exit_page_id'
|
||||
'context'
|
||||
],
|
||||
properties: {
|
||||
context,
|
||||
|
@ -141,12 +145,6 @@ const exitSchema = {
|
|||
type: 'string',
|
||||
pattern: '^exit$'
|
||||
},
|
||||
exit_page_id: {
|
||||
type: 'string',
|
||||
format: 'uuid',
|
||||
description: 'The value of the corresponding `page` event.'
|
||||
// id of the "page" event
|
||||
},
|
||||
exit_first_paint: {
|
||||
type: 'number',
|
||||
minimum: 0.001,
|
||||
|
|
|
@ -37,6 +37,12 @@ module.exports = async function handleError (error, req, res, next) {
|
|||
.send(await liquid.parseAndRender(layouts['error-404'], req.context))
|
||||
}
|
||||
|
||||
// If the error contains a status code, just send that back. This is usually
|
||||
// from a middleware like `express.json()` or `csrf`.
|
||||
if (error.statusCode || error.status) {
|
||||
return res.sendStatus(error.statusCode || error.status)
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV !== 'test') {
|
||||
console.error('500 error!', req.path)
|
||||
console.error(error)
|
||||
|
|
|
@ -6,8 +6,8 @@ ownership:
|
|||
kind: heroku
|
||||
repo: https://github.com/github/docs-internal
|
||||
team: github/docs-engineering
|
||||
maintainer: zeke
|
||||
exec_sponsor: danaiszuul
|
||||
maintainer: sarahs
|
||||
exec_sponsor: scottdensmore
|
||||
product_manager: simpsoka
|
||||
mention: github/docs-engineering
|
||||
qos: critical
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
"js-cookie": "^2.2.1",
|
||||
"js-yaml": "^3.14.0",
|
||||
"linkinator": "^2.13.1",
|
||||
"liquid": "^5.1.0",
|
||||
"liquidjs": "^9.22.1",
|
||||
"lodash": "^4.17.19",
|
||||
"lunr": "^2.3.9",
|
||||
"lunr-languages": "^1.4.0",
|
||||
|
@ -155,7 +155,7 @@
|
|||
"replace": "^1.2.0",
|
||||
"revalidator": "^0.3.1",
|
||||
"robots-parser": "^2.1.1",
|
||||
"start-server-and-test": "^1.11.3",
|
||||
"start-server-and-test": "^1.12.0",
|
||||
"supertest": "^4.0.2",
|
||||
"url-template": "^2.0.8",
|
||||
"webpack-dev-middleware": "^3.7.2",
|
||||
|
|