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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ If you need to use multiple accounts on {% data variables.location.product_locat
* You'll create a password when you create your account on {% data variables.product.github %}. We recommend that you use a password manager to generate a random and unique password. For more information, see [AUTOTITLE](/authentication/keeping-your-account-and-data-secure/creating-a-strong-password).{% ifversion fpt or ghec %}
* If you have not enabled 2FA, {% data variables.product.github %} may ask for additional verification when you first sign in from a new or unrecognized device, such as a new browser profile, a browser where the cookies have been deleted, or a new computer. For more information, see [AUTOTITLE](/authentication/keeping-your-account-and-data-secure/verifying-new-devices-when-signing-in).{% endif %} {% ifversion fpt or ghec %}
* **Social login**
* You'll authenticate with one of the supported social login providers (currently only Google is supported) when you create your account on {% data variables.product.github %}. We recommend that you also configure 2FA and add a passkey or a password as an additional account recovery mechanism.
* You'll authenticate with Google or Apple, which are the supported social login providers when you create your account on {% data variables.product.github %}. We recommend that you also configure 2FA and add a passkey or a password as an additional account recovery mechanism.
* If you have an existing account created with a password, you can add your social login email to the account. This allows you to use your social login identity as a first-factor (password) replacement when you sign in to {% data variables.product.github %}.
* You can unlink your social login identities from your {% data variables.product.github %} email settings page. For more information, see [AUTOTITLE](/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-personal-account/unlinking-your-email-address-from-a-locked-account) {% endif %}
* **Two-factor authentication (2FA)** (recommended)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,4 @@ When prompted to authenticate for sudo mode, type your password, then click **Co

Before you can access sudo mode, you must first configure social login. For more information, see [AUTOTITLE](/authentication/keeping-your-account-and-data-secure/about-authentication-to-github).

When prompted to authenticate for sudo mode, type the authentication code sent to your social login email account, then click **Verify**.
When prompted to authenticate for sudo mode, type the authentication code sent to your social login email account, then click **Verify**. If you dont receive the email within few minutes, check your spam folder.
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
title: About billing for GitHub Spark
title: GitHub Spark billing
intro: 'Learn how {% data variables.product.prodname_spark %} is billed for users.'
versions:
feature: spark
topics:
- Copilot
shortTitle: Billing for Spark
shortTitle: GitHub Spark
redirect_from:
- /copilot/concepts/copilot-billing/about-billing-for-github-spark
- /copilot/concepts/copilot-billing/billing-for-spark
Expand Down
1 change: 1 addition & 0 deletions content/billing/concepts/product-billing/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ children:
- /github-models
- /github-packages
- /git-lfs
- /github-spark
contentType: concepts
---

1 change: 0 additions & 1 deletion content/copilot/concepts/billing/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ children:
- /individual-plans
- /billing-for-individuals
- /organizations-and-enterprises
- /billing-for-spark
redirect_from:
- /managing-copilot/managing-copilot-as-an-individual-subscriber/billing-and-payments
- /copilot/managing-copilot/understanding-and-managing-copilot-usage
Expand Down
2 changes: 1 addition & 1 deletion content/copilot/concepts/spark.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Benefits include:
### Billing

Each natural-language prompt in {% data variables.product.prodname_spark_short %} consumes four premium requests.
See [AUTOTITLE](/copilot/concepts/billing/billing-for-spark).
See [AUTOTITLE](/billing/concepts/product-billing/github-spark).

### Infrastructure

Expand Down
27 changes: 27 additions & 0 deletions content/enterprise-onboarding/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,33 @@ featuredLinks:
- '/enterprise-onboarding/github-actions-for-your-enterprise'
- '/enterprise-onboarding/feature-enhancements'
layout: product-landing
journeyTracks:
- id: 'getting_started'
title: 'Getting started with your enterprise'
description: 'Learn how to start a trial of {% data variables.product.prodname_enterprise %}, and about enterprise billing and migrations.'
guides:
- '/enterprise-onboarding/getting-started-with-your-enterprise/setting-up-a-trial-of-github-enterprise'
- '/enterprise-onboarding/getting-started-with-your-enterprise/ending-a-trial-of-github-enterprise'
- '/enterprise-onboarding/getting-started-with-your-enterprise/about-enterprise-billing'
- '/enterprise-onboarding/getting-started-with-your-enterprise/about-migrating-to-github-enterprise-cloud'
- '/enterprise-onboarding/getting-started-with-your-enterprise/securing-your-enterprise-with-managed-users'
- '/enterprise-onboarding/getting-started-with-your-enterprise/securing-enterprise-resources-with-single-sign-on'
- id: 'organizations_and_teams'
title: 'Setting up organizations and teams in your enterprise'
description: 'Learn how to add and manage organizations and teams in your enterprise.'
guides:
- '/enterprise-onboarding/setting-up-organizations-and-teams/setting-up-an-organization'
- '/enterprise-onboarding/setting-up-organizations-and-teams/managing-organization-members'
- '/enterprise-onboarding/setting-up-organizations-and-teams/managing-your-organizations'
- '/enterprise-onboarding/setting-up-organizations-and-teams/creating-teams'
- '/enterprise-onboarding/setting-up-organizations-and-teams/best-practices-for-organizations-in-your-enterprise'
- id: 'support'
title: 'Creating a support model for your enterprise'
description: 'Learn about {% data variables.product.github %} support and how to set up a support model for your enterprise.'
guides:
- '/enterprise-onboarding/support-for-your-enterprise/understanding-support'
- '/enterprise-onboarding/support-for-your-enterprise/using-the-support-portal'
- '/enterprise-onboarding/support-for-your-enterprise/managing-support-entitlements'
versions:
ghec: '*'
topics:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ topics:

To get started with {% data variables.product.prodname_dotcom %}, you'll need to create a free personal account and verify your email address.

You can also authenticate with the supported social login providers (currently only Google is supported) when you create your account on {% data variables.product.prodname_dotcom %}.
You can also authenticate with Google or Apple - which are the supported social login providers when you create your account on {% data variables.product.prodname_dotcom %}.
For iOS users, even if you have enabled the setting "Hide My Email addresses" for your Apple account, using social login will result in creating a new {% data variables.product.github %} account.

{% data reusables.accounts.your-personal-account %}

Expand Down
7 changes: 1 addition & 6 deletions content/get-started/using-github/github-mobile.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,7 @@ You can be simultaneously signed into mobile with multiple accounts on {% data v
> [!NOTE]
> Social login is only available for {% data variables.product.prodname_free_user %} and {% data variables.product.prodname_ghe_cloud %} users

You can sign in to {% data variables.product.prodname_mobile %} using a supported social login provider. Currently, only Google is supported for social login on the {% data variables.product.prodname_mobile %} for Android. To use this option, make sure you originally created your {% data variables.product.github %} account using Google.

For iOS users, social login with Google is not supported in {% data variables.product.prodname_mobile %}. Follow the steps below to sign in to {% data variables.product.prodname_mobile %} on iOS using an account that was created with Google:
1. Open the native web browser Safari and sign in to your {% data variables.product.github %} account.
1. Authorize {% data variables.product.prodname_mobile %} in your browser when prompted.
1. If you are unable to sign in through your browser, you can set a password or passkey for your {% data variables.product.github %} account on {% data variables.product.github %}. After setting a password or passkey, use your username and password with two-factor authentication, or a passkey, to sign in to {% data variables.product.prodname_mobile %}.
You can sign in to {% data variables.product.prodname_mobile %} using a supported social login provider. Currently, both Google and Apple are supported for social login on the {% data variables.product.prodname_mobile %} for Android and iOS users. To use this option, make sure you originally created your {% data variables.product.github %} account using the respective social login provider - Google or Apple.

### Prerequisites for {% data variables.enterprise.data_residency_site %} accounts

Expand Down
2 changes: 1 addition & 1 deletion data/reusables/repositories/initialize-with-readme.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1. Select **Initialize this repository with a README**.
1. Toggle **Add README** to **On**.
22 changes: 13 additions & 9 deletions data/ui.yml
Original file line number Diff line number Diff line change
Expand Up @@ -261,18 +261,17 @@ footer:
expert_services: Expert services
blog: Blog
machine: Some of this content may be machine- or AI-translated.
bespoke_landing:
articles: Articles
all_categories: All categories
search_articles: Search articles
discovery_landing:
recommended: Recommended
articles: Articles
all_categories: All categories
search_articles: Search articles
journey_landing:
articles: '{{ number }} Articles'
product_landing:
article_grid:
heading: Articles
all_categories: All categories
search_articles: Search articles
no_articles_found: No articles found matching your criteria.
showing_results: Showing {start}-{end} of {total}
carousel:
recommended: Recommended
quickstart: Quickstart
reference: Reference
overview: Overview
Expand Down Expand Up @@ -326,6 +325,11 @@ learning_track_nav:
next_guide: Next
more_guides: More guides →
current_progress: '{i} of {n} in learning path'
journey_track_nav:
prev_article: Previous
next_article: Next
more_articles: More articles →
current_progress: 'Article {i} of {n}'
scroll_button:
scroll_to_top: Scroll to top
popovers:
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@
"esm": "^3.2.25"
},
"engines": {
"node": "^20 || ^22 || ^24"
"node": "^22 || ^24"
},
"cacheDirectories": [
"node_modules",
Expand Down
4 changes: 2 additions & 2 deletions src/codeql-cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ The pipeline is used to generate Markdown files that create article pages on the

![A flow chart describing how the automation pipeline for CodeQL CLI generates documentation](./codeql-cli-pipeline-flowchart.png)

A [workflow](.github/workflows/sync-codeql-cli.yml) is used to trigger the automation of the CodeQL CLI documentation. The workflow is manually triggered by a member of the GitHub Docs team approximately every two weeks to align to releases of the CodeQL CLI. The workflow takes an input parameter that specifies the branch to pull the source files from in the semmle-code repo. If the branch input is omitted, the workflow will default to the `main` branch.
A [workflow](https://github.com/github/docs-internal/blob/main/.github/workflows/sync-codeql-cli.yml) is used to trigger the automation of the CodeQL CLI documentation. The workflow is manually triggered by a member of the GitHub Docs team approximately every two weeks to align to releases of the CodeQL CLI. The workflow takes an input parameter that specifies the branch to pull the source files from in the semmle-code repo. If the branch input is omitted, the workflow will default to the `main` branch.

The workflow runs the `src/codeql-cli/scripts/sync.js` script, which generates Markdown files under `content/code-security/codeql-cli/codeql-cli-manual`.

Expand Down Expand Up @@ -45,4 +45,4 @@ Writers can also add an introduction paragraph _above_ the following Markdown co
Slack: `#docs-engineering`
Repo: `github/docs-engineering`

If you have a question about the CodeQL CLI pipeline, you can ask in the `#docs-engineering` Slack channel. If you notice a problem with the CodeQL CLI pipeline, you can open an issue in the `github/docs-engineering` repository.
If you have a question about the CodeQL CLI pipeline, you can ask in the `#docs-engineering` Slack channel. If you notice a problem with the CodeQL CLI pipeline, you can open an issue in the `github/docs-engineering` repository.
23 changes: 17 additions & 6 deletions src/content-render/index.js → src/content-render/index.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,26 @@
import { renderLiquid } from './liquid/index'
import { renderMarkdown, renderUnified } from './unified/index'
import { engine } from './liquid/engine'
import type { Context } from '@/types'

const globalCache = new Map()
interface RenderOptions {
cache?: boolean | ((template: string, context: Context) => string)
filename?: string
textOnly?: boolean
}

const globalCache = new Map<string, string>()

// parse multiple times because some templates contain more templates. :]
export async function renderContent(template = '', context = {}, options = {}) {
export async function renderContent(
template = '',
context: Context = {} as Context,
options: RenderOptions = {},
): Promise<string> {
// If called with a falsy template, it can't ever become something
// when rendered. We can exit early to save some pointless work.
if (!template) return template
let cacheKey = null
let cacheKey: string | null = null
if (options && options.cache) {
if (!context) throw new Error("If setting 'cache' in options, the 'context' must be set too")
if (typeof options.cache === 'function') {
Expand All @@ -21,13 +32,13 @@ export async function renderContent(template = '', context = {}, options = {}) {
throw new Error('cache option must return a string if truthy')
}
if (globalCache.has(cacheKey)) {
return globalCache.get(cacheKey)
return globalCache.get(cacheKey) as string
}
}
try {
template = await renderLiquid(template, context)
if (context.markdownRequested) {
const md = await renderMarkdown(template, context, options)
const md = await renderMarkdown(template, context)

return md
}
Expand All @@ -45,7 +56,7 @@ export async function renderContent(template = '', context = {}, options = {}) {
}
}

function getDefaultCacheKey(template, context) {
function getDefaultCacheKey(template: string, context: Context): string {
return `${template}:${context.currentVersion}:${context.currentLanguage}`
}

Expand Down
54 changes: 0 additions & 54 deletions src/content-render/liquid/engine.js

This file was deleted.

66 changes: 66 additions & 0 deletions src/content-render/liquid/engine.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import { Liquid } from 'liquidjs'
import GithubSlugger from 'github-slugger'
// Copilot: When converting data.js to TypeScript, remove the 'as any' assertion for anyData below
import Data from './data'
import Octicon from './octicon'
// Copilot: When converting ifversion.js to TypeScript, remove the 'as any' assertion for anyIfversion below
import Ifversion from './ifversion'
// Copilot: When converting tool.js to TypeScript, remove the 'as any' assertion for anyTool below
import { Tool, tags as toolTags } from './tool'
import { Spotlight, tags as spotlightTags } from './spotlight'
import { Prompt } from './prompt'
import IndentedDataReference from './indented-data-reference'

// Type assertions for .js files without type definitions
// Copilot: Remove these assertions when the corresponding .js files are converted to TypeScript
const anyData = Data as any
const anyIfversion = Ifversion as any
const anyTool = Tool as any
const anySpotlight = Spotlight as any
const anyPrompt = Prompt as any
const anyIndentedDataReference = IndentedDataReference as any

export const engine = new Liquid({
extname: '.html',
dynamicPartials: false,
})

engine.registerTag('indented_data_reference', anyIndentedDataReference)
engine.registerTag('data', anyData)
engine.registerTag('octicon', Octicon)
engine.registerTag('ifversion', anyIfversion)

for (const tag of toolTags) {
engine.registerTag(tag, anyTool)
}

for (const tag in spotlightTags) {
engine.registerTag(tag, anySpotlight)
}

engine.registerTag('prompt', anyPrompt)

/**
* Like the `size` filter, but specifically for
* getting the number of keys in an object
*/
engine.registerFilter('obj_size', (input: Record<string, unknown> | null | undefined): number => {
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
*/
engine.registerFilter('version_num', (input: string): string => {
return input.split('@')[1]
})

/**
* Convert the input to a slug
*/
engine.registerFilter('slugify', (input: string): string => {
const slugger = new GithubSlugger()
return slugger.slug(input)
})
Loading