diff --git a/content/billing/using-the-new-billing-platform/preventing-overspending.md b/content/billing/using-the-new-billing-platform/preventing-overspending.md index 86fe38a775a4..72649376f4c9 100644 --- a/content/billing/using-the-new-billing-platform/preventing-overspending.md +++ b/content/billing/using-the-new-billing-platform/preventing-overspending.md @@ -44,6 +44,21 @@ You can set spending limits and receive alerts when your usage reaches 75%, 90%, You can manage budgets for your {% data variables.enterprise.enterprise_or_org %} by setting a budget, viewing budgets, and editing or deleting budgets. +{% ifversion ghec %} + +### Budget scopes + +You can create a budget for a given {% data variables.product.github %} product and specific scope: + +* `Enterprise` scoped budgets track spending for all organizations, repositories, and cost centers in the enterprise +* `Organization` scoped budgets track spending for a single organization, repositories, and cost centers in the organization +* `Repository` scoped budgets track spending for a single repository +* `Cost center` scoped budgets track spending for a single cost center + +Usage is applied towards all applicable budgets. If any applicable budget with "Stop usage when budget limit is reached" enabled becomes exhausted, additional usage will be stopped. + +{% endif %} + ### Viewing budgets If you are an {% data variables.enterprise.enterprise_or_org %} owner or billing manager, your {% data variables.enterprise.enterprise_or_org %}'s budget will be listed at the top of the "Budgets and alerts" page{% ifversion ghec %}, followed by the budgets for your organizations and cost centers. As an organization owner, you will be able to view the budgets for your organizations, repositories, and cost centers{% endif %}. diff --git a/data/release-notes/enterprise-server/3-16/0.yml b/data/release-notes/enterprise-server/3-16/0.yml index 48af30e51905..533749d973d4 100644 --- a/data/release-notes/enterprise-server/3-16/0.yml +++ b/data/release-notes/enterprise-server/3-16/0.yml @@ -162,13 +162,6 @@ sections: - | Enterprise administrators can better monitor the health of the appliance with optimized dashboards that provide concise, actionable metrics. See [AUTOTITLE](/admin/monitoring-and-managing-your-instance/monitoring-your-instance/about-the-monitor-dashboards). - - heading: Issues - notes: - # https://github.com/github/releases/issues/4033 - # https://github.com/github/releases/issues/3121 - - | - Issues and projects feature highly-requested enhancements including sub-issues, issue types, and advanced search for issues. These feature enhancements make it easy to break down work, visualize progress, categorize and find just the right issue in GitHub. See the [GitHub blog post](https://github.blog/changelog/2024-10-01-evolving-github-issues-public-beta/). - - heading: GitHub Mobile notes: # https://github.com/github/releases/issues/4456 diff --git a/src/article-api/middleware/article-pageinfo.ts b/src/article-api/middleware/article-pageinfo.ts index cb500b211f7e..690dda37f9e9 100644 --- a/src/article-api/middleware/article-pageinfo.ts +++ b/src/article-api/middleware/article-pageinfo.ts @@ -5,6 +5,8 @@ import type { ExtendedRequest, Page, Context, Permalink } from '@/types' import shortVersions from '@/versions/middleware/short-versions.js' import contextualize from '@/frame/middleware/context/context' import features from '@/versions/middleware/features.js' +import breadcrumbs from '@/frame/middleware/context/breadcrumbs.js' +import currentProductTree from '@/frame/middleware/context/current-product-tree.js' import { readCompressedJsonFile } from '@/frame/lib/read-json-file.js' // If you have pre-computed page info into a JSON file on disk, this is @@ -29,6 +31,7 @@ export async function getPageInfo(page: Page, pathname: string) { await contextualize(renderingReq as ExtendedRequest, res as Response, next) await shortVersions(renderingReq as ExtendedRequest, res as Response, next) renderingReq.context.page = page + await currentProductTree(renderingReq as ExtendedRequest, res as Response, next) features(renderingReq as ExtendedRequest, res as Response, next) const context = renderingReq.context @@ -50,7 +53,12 @@ export async function getPageInfo(page: Page, pathname: string) { } const product = productPage ? await getProductPageInfo(productPage, context) : '' - return { title, intro, product } + // Call breadcrumbs middleware to populate renderingReq.context.breadcrumbs + breadcrumbs(renderingReq as ExtendedRequest, res as Response, next) + + const { breadcrumbs: pageBreadcrumbs } = renderingReq.context + + return { title, intro, product, breadcrumbs: pageBreadcrumbs } } const _productPageCache: { diff --git a/src/versions/middleware/short-versions.ts b/src/versions/middleware/short-versions.ts index 2dfbfff09a2f..565b486538a4 100644 --- a/src/versions/middleware/short-versions.ts +++ b/src/versions/middleware/short-versions.ts @@ -9,11 +9,11 @@ import type { ExtendedRequest } from '@/types.js' import type { Response, NextFunction } from 'express' -export default function shortVersions( +export default async function shortVersions( req: ExtendedRequest, res: Response | null, next: NextFunction, -): void { +): Promise { if (!req.context) throw new Error('No context on request') const { currentVersion, currentVersionObj } = req.context if (!currentVersionObj) {