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 @@ -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 %}.
Expand Down
7 changes: 0 additions & 7 deletions data/release-notes/enterprise-server/3-16/0.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 9 additions & 1 deletion src/article-api/middleware/article-pageinfo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

Expand All @@ -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: {
Expand Down
4 changes: 2 additions & 2 deletions src/versions/middleware/short-versions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<void> {
if (!req.context) throw new Error('No context on request')
const { currentVersion, currentVersionObj } = req.context
if (!currentVersionObj) {
Expand Down