From 932c53b0ebe50508124343d02274684b7b259577 Mon Sep 17 00:00:00 2001 From: Ve Sharma <62218708+VeVarunSharma@users.noreply.github.com> Date: Wed, 5 Aug 2026 20:40:08 -0700 Subject: [PATCH 1/4] Update discount verification image Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- images/reproduced_ea_1234567.png | Bin 23084 -> 21462 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/reproduced_ea_1234567.png b/images/reproduced_ea_1234567.png index a02a62dab705b1835d9a5ba1159d05b23e7d1a2a..008a36fb5ed4981da011c4cda5acb90efc15a07f 100644 GIT binary patch literal 21462 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 literal 23084 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 Date: Wed, 5 Aug 2026 21:25:02 -0700 Subject: [PATCH 2/4] Refine homepage logo sizing Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/styles.css | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/styles.css b/src/styles.css index f2a6316..7a9224e 100644 --- a/src/styles.css +++ b/src/styles.css @@ -267,9 +267,12 @@ a { } .readme-content > div[align='center']:first-child img { - max-height: 120px; + width: min(100%, 360px); + height: auto; + max-height: none; margin: 0; border: 0; + object-fit: contain; box-shadow: none; } From ca07dcdc28565b9eab7312a3920bd4635f62d385 Mon Sep 17 00:00:00 2001 From: Ve Sharma <62218708+VeVarunSharma@users.noreply.github.com> Date: Wed, 5 Aug 2026 22:15:46 -0700 Subject: [PATCH 3/4] Add CSI resource pages and navigation Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- CONTRIBUTING.md | 12 ++- README.md | 120 ++++-------------------------- build-days/README.md | 47 ++++++++++++ build-days/index.html | 18 +++++ csi-pricing/README.md | 98 ++++++++++++++++++++++++ csi-pricing/index.html | 18 +++++ src/App.tsx | 136 ++++++++++++++++++++++++---------- src/content.ts | 30 +++++++- src/styles.css | 38 ++++++++++ usage-based-billing/README.md | 12 +++ vite.config.ts | 2 + 11 files changed, 381 insertions(+), 150 deletions(-) create mode 100644 build-days/README.md create mode 100644 build-days/index.html create mode 100644 csi-pricing/README.md create mode 100644 csi-pricing/index.html diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d28dd5a..ecc8fad 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -44,16 +44,20 @@ governance, documentation, customer stories). ✅ Community resources that meet a high quality bar. -❌ Internal-only material — anything requiring Microsoft corporate SSO, -internal SharePoint, or any portco-internal authentication. This is a -**public** hub. +⚠️ Authenticated resources are exceptional. They must be clearly labeled with +their sign-in requirement and paired with a public alternative or enough +public context to remain useful. + +❌ Internal-only material presented without an access warning or public +alternative. This is a **public** hub. ❌ Resources unrelated to GitHub, GitHub Copilot, or to enterprise adoption thereof. ## Preview the GitHub Pages site -The site renders `README.md` and `usage-based-billing/README.md` directly, so +The site renders `README.md`, `build-days/README.md`, +`csi-pricing/README.md`, and `usage-based-billing/README.md` directly, so content changes stay synchronized between the repository and GitHub Pages. Use Node.js 22 or later to run it locally: diff --git a/README.md b/README.md index 803f352..cd94c10 100644 --- a/README.md +++ b/README.md @@ -23,30 +23,16 @@ > 💡 **CSI portcos:** use your **large CSI discount** on GitHub > Enterprise and GitHub Copilot when billed via your portfolio's (or CSI's) > Azure subscription — **not** a credit card. -> → [How to claim the discount](#-csi-pricing-via-azure-billing) +> → [How to claim the discount](./csi-pricing/) --- -
-CSI Build Days -
- - ## 📅 CSI Build Days -CSI Build Days is the GitHub & Microsoft @ CSI team's **bi-weekly developer event series** -for engineers across the Constellation Software portfolio. Sessions cover -GitHub fundamentals, migrations, Copilot enablement, agentic workflows, -multi-part workshops, office hours, and Q&A with Microsoft and GitHub -product teams. - -> 🎥 **Catch up on past sessions** — full CSI Build Days recording playlist → -> [aka.ms/CSIDevDaysRecordings](https://aka.ms/CSIDevDaysRecordings) +The GitHub & Microsoft @ CSI team's bi-weekly event series brings engineers +across the portfolio together for hands-on sessions, workshops, office hours, +and product-team Q&A. -- **Upcoming sessions — register by track:** - - **Developer Track** — Completed ✔️ - - **Product Track** — [Register on Teams](https://msit.events.teams.microsoft.com/event/msit.b8cadf85-d534-4ab5-858f-0f9c496a7ece@72f988bf-86f1-41af-91ab-2d7cd011db47) - - **QA Track** — [Register on Teams](https://msit.events.teams.microsoft.com/event/msit.a2d45802-3163-4650-b8bf-11415c76ff8d@72f988bf-86f1-41af-91ab-2d7cd011db47) - - **DevSecOps Track** — [Register on Teams](https://msit.events.teams.microsoft.com/event/msit.8099c99d-25de-42a3-b378-af01fe473797@72f988bf-86f1-41af-91ab-2d7cd011db47) +**[Register for upcoming tracks and watch previous sessions →](./build-days/)** --- @@ -81,101 +67,21 @@ development: ## 🏷 CSI Pricing via Azure Billing -CSI portfolio companies qualify for a **large CSI discount on GitHub -Enterprise Cloud and GitHub Copilot (Business and Enterprise)** — but **only -when billing flows through an Azure subscription tied to your portco, your -operating group, or CSI**. - -> 🏷 **What the discount covers:** a **large discount** on **GitHub** and -> **GitHub Copilot**, including the usage-based **tokens from the default -> models used in GitHub** — Anthropic Claude, OpenAI GPT, Google Gemini, MAI, -> Kimi, and more. - -> 📧 **Want the discount amount and how to activate it?** Email -> [DevsAtCSI@microsoft.com](mailto:DevsAtCSI@microsoft.com). -> The GitHub @ CSI team will share the current CSI rate and walk you -> through activation — primarily connecting an **Azure subscription tied -> to a parent CSI entity** (your portco, your operating group, or CSI) to -> your GitHub enterprise account. - -> ⚠️ **Credit-card billing on GitHub is NOT eligible for the CSI discount.** -> Personal credit cards and PayPal payment methods on a GitHub enterprise -> account do not qualify. To get the CSI rate, the GitHub enterprise account -> must be connected to an **Azure subscription** owned by your portco, your -> operating group, or CSI. - -> ✅ **Two benefits of the Azure-billed path:** -> -> 1. **CSI portco discount** on GitHub Enterprise Cloud and GitHub Copilot -> (Business / Enterprise) SKUs. -> 2. **Prioritized GitHub support** — Azure-connected CSI enterprises are -> routed through the GitHub @ CSI team at Microsoft, who can escalate -> tickets and coordinate directly with GitHub product and support teams. -> Enterprises billed outside this path do not get this CSI-routed -> escalation benefit. - -#### Eligible SKUs - -- **GitHub Enterprise Cloud** -- **GitHub Copilot Business** -- **GitHub Copilot Enterprise** - -#### Connect your Azure subscription to GitHub - -See [Connecting an Azure subscription (docs.github.com)](https://docs.github.com/en/enterprise-cloud@latest/billing/how-tos/set-up-payment/connect-azure-sub) for the step-by-step procedure. - -#### Check whether your discount is active - -You can confirm the CSI discount is applied from the -[Azure Pricing Calculator](https://azure.microsoft.com/en-us/pricing/calculator): - -1. Sign in with the account tied to your portfolio's Azure billing. -2. Open the **Licensing program** dropdown. -3. If the discount is active, your **licensing agreement with Microsoft — tied - back to your portfolio** — appears as your selected agreement, similar to the - example below. - -![Azure Pricing Calculator Licensing program dropdown showing a Microsoft licensing agreement tied to a CSI portfolio company](./images/reproduced_ea_1234567.png) - -If you **don't** see a Microsoft licensing agreement tied to your portfolio, -the discount isn't active yet. Email -[DevsAtCSI@microsoft.com](mailto:DevsAtCSI@microsoft.com) -and the GitHub @ CSI team will kick off the process to get it set up. - -#### Documentation - -- **About enterprise billing** — Concepts and supported payment methods. [docs.github.com](https://docs.github.com/en/enterprise-cloud@latest/enterprise-onboarding/getting-started-with-your-enterprise/about-enterprise-billing) -- **Azure subscription payments (concept)** — How GitHub enterprise usage shows up on your Azure invoice. [docs.github.com](https://docs.github.com/en/enterprise-cloud@latest/billing/concepts/azure-subscriptions) -- **Billing through Azure subscriptions (reference)** — Detailed reference for what's billable through Azure and how. [docs.github.com](https://docs.github.com/en/enterprise-cloud@latest/billing/reference/azure-billing) - -#### Cost management & chargeback - -For portcos that allocate GitHub costs back to teams or products on Azure: - -- **Azure Cost Management overview** — Cost analysis, budgets, alerts, and exports. [learn.microsoft.com](https://learn.microsoft.com/en-us/azure/cost-management-billing/costs/overview-cost-management) -- **Tag your Azure resources** — Use tags on the Azure subscription / resource group to attribute GitHub line items to the right team, product, or cost center. [learn.microsoft.com](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/tag-resources) - -#### Need help? +CSI portfolio companies can receive a large discount on GitHub Enterprise and +GitHub Copilot when billing is connected to an eligible CSI Azure +subscription. Credit-card billing is not eligible. -If you hit issues during the connect-to-Azure flow (admin consent, -ownership mismatches, eligibility questions), email -[DevsAtCSI@microsoft.com](mailto:DevsAtCSI@microsoft.com) -and the GitHub @ CSI team will help unblock you. +**[Review eligibility, activation, and discount verification →](./csi-pricing/)** --- ## 💳 Usage-Based Billing (UBB) -Resources to help CSI portcos prepare for Copilot's move to usage-based -billing on June 1. +Prepare for Copilot usage-based billing with a practical five-step rollout +plan, budget guidance, model-selection recommendations, and curated official +resources. -- **🌐 GitHub @ CSI team recommendations** — Practical playbook for CSI portcos: what's changing June 1, a 5-step rollout plan, what not to overreact to, how UBB interacts with the CSI Azure-billing discount, and curated UBB resources including interactive tools and checklists. [usage-based-billing/](./usage-based-billing/) -- **Copilot Cost Compass (interactive tool)** — Animated UBB explainer, budget-flow scenarios, decision tree, budget calculator, and a model-selection playbook for token optimization. [aka.ms/ubb-tool](https://aka.ms/ubb-tool) -- **Announcement (blog)** — GitHub Copilot is moving to usage-based billing. [github.blog](https://github.blog/news-insights/company-news/github-copilot-is-moving-to-usage-based-billing/) -- **UBB documentation** — Concept docs for usage-based billing in organizations and enterprises. [docs.github.com](https://docs.github.com/en/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises) -- **UBB pricing & models** — Reference for Copilot billing models and pricing. [docs.github.com](https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing) -- **GitHub Community FAQ** — Discussion thread with frequently asked questions. [github.com/orgs/community/discussions/192948](https://github.com/orgs/community/discussions/192948) -- **Copilot code review changelog** — Code review will start consuming GitHub Actions minutes on June 1, 2026. [github.blog/changelog](https://github.blog/changelog/2026-04-27-github-copilot-code-review-will-start-consuming-github-actions-minutes-on-june-1-2026/) +**[Open the CSI usage-based billing playbook →](./usage-based-billing/)** --- diff --git a/build-days/README.md b/build-days/README.md new file mode 100644 index 0000000..ce7e517 --- /dev/null +++ b/build-days/README.md @@ -0,0 +1,47 @@ +# 📅 CSI Build Days + +> The GitHub & Microsoft @ CSI team's bi-weekly event series for engineers +> across the Constellation Software portfolio. + +Sessions cover GitHub fundamentals, migrations, Copilot enablement, agentic +workflows, hands-on workshops, office hours, and Q&A with Microsoft and GitHub +product teams. + +[← Back to the resource hub](../README.md#-csi-build-days) + +--- + +## Upcoming sessions + +| Track | Status | Next step | +|---|---|---| +| **Developer Track** | ✅ Completed | [Watch the recording](#previous-session-recordings) | +| **Product Track** | ✅ Completed | [Watch the recording](#previous-session-recordings) | +| **QA Track** | 🗓️ Registration open | [Register on Teams](https://msit.events.teams.microsoft.com/event/msit.a2d45802-3163-4650-b8bf-11415c76ff8d@72f988bf-86f1-41af-91ab-2d7cd011db47) | +| **DevSecOps Track** | 🗓️ Registration open | [Register on Teams](https://msit.events.teams.microsoft.com/event/msit.8099c99d-25de-42a3-b378-af01fe473797@72f988bf-86f1-41af-91ab-2d7cd011db47) | + +> Registration links open Microsoft Teams Events. Share them with colleagues +> across your CSI portfolio company who would benefit from the track. + +--- + +## Previous session recordings + +> 🔐 **Microsoft sign-in required.** The individual recordings below are +> hosted in Microsoft SharePoint and are not available anonymously. +> For a public catch-up option, use the +> [CSI Build Days recording playlist](https://aka.ms/CSIDevDaysRecordings). + +| Date | Session | Recording | +|---|---|---| +| **July 30, 2026** | Product Track | [Watch recording — sign-in required](https://microsoft-my.sharepoint.com/:v:/r/personal/sharmave_microsoft_com/_layouts/15/stream.aspx?id=%2Fpersonal%2Fsharmave%5Fmicrosoft%5Fcom%2FDocuments%2FRecordings%2FCSI%20Dev%20Days%21%20Product%20Track%2D20260730%5F143213UTC%2DMeeting%20Recording%2Emp4&share=cQrf0KCStc2mRYMUTCW6Nd%5FlEgUDGqZyUaYDs9FRjKt62Zb%5Few) | +| **July 29, 2026** | Harris Frontline — Agentic Quality & Token Optimization | [Watch recording — sign-in required](https://microsoft-my.sharepoint.com/:v:/r/personal/sharmave_microsoft_com/_layouts/15/stream.aspx?id=%2Fpersonal%2Fsharmave%5Fmicrosoft%5Fcom%2FDocuments%2FRecordings%2FCSI%20Build%20Days%20%2D%20Harris%20Frontline%20Agentic%20Quality%20%5F%20Token%20Optimization%2D20260729%5F143054UTC%2DMeeting%20Recording%2Emp4&share=cQrqxmI%2D2BISTJFBJHdIVcn%2DEgUD%5FNYjvLYFbZJI8yCeGJ646g) | +| **July 16, 2026** | Developer Track | [Watch recording — sign-in required](https://microsoft-my.sharepoint.com/:v:/r/personal/sharmave_microsoft_com/_layouts/15/stream.aspx?id=%2Fpersonal%2Fsharmave%5Fmicrosoft%5Fcom%2FDocuments%2FRecordings%2FCSI%20Dev%20Days%21%20%20%2D%20Developer%20Track%2D20260716%5F143244UTC%2DMeeting%20Recording%2Emp4&share=cQoO4RkI1buuQJU%5FPWkwjdqREgUDCvpQzU1yQXUPXxweVFQ3wQ) | +| **June 4, 2026** | CSI Dev Days #1 — Portfolio kickoff | [Watch recording — sign-in required](https://microsoft-my.sharepoint.com/:v:/r/personal/sharmave_microsoft_com/_layouts/15/stream.aspx?id=%2Fpersonal%2Fsharmave_microsoft_com%2FDocuments%2FRecordings%2FCSI%20Dev%20Days!%20%231%20(Volaris%2C%20Harris%2C%20Jonas%2C%20Perseus%2C%20Vela%20-%20you%27re%20invited!)-20260604_140353UTC-Meeting%20Recording.mp4&share=cQrByaifEu4OR4Tc1vi1DmDPEgUD5cT_EGqfqCsYmv0aRrJGoA&nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJPbmVEcml2ZUZvckJ1c2luZXNzIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXciLCJyZWZlcnJhbFZpZXciOiJNeUZpbGVzTGlua0NvcHkifX0) | + +--- + +## Get in touch + +Questions, session ideas, or workshop nominations? Email the GitHub @ CSI team +at [DevsAtCSI@microsoft.com](mailto:DevsAtCSI@microsoft.com). diff --git a/build-days/index.html b/build-days/index.html new file mode 100644 index 0000000..c52733a --- /dev/null +++ b/build-days/index.html @@ -0,0 +1,18 @@ + + + + + + + + + CSI Build Days | GitHub @ Constellation Software + + +
+ + + diff --git a/csi-pricing/README.md b/csi-pricing/README.md new file mode 100644 index 0000000..ad98a3b --- /dev/null +++ b/csi-pricing/README.md @@ -0,0 +1,98 @@ +# 🏷 CSI Pricing via Azure Billing + +CSI portfolio companies qualify for a **large CSI discount on GitHub +Enterprise Cloud and GitHub Copilot (Business and Enterprise)** — but **only +when billing flows through an Azure subscription tied to your portco, your +operating group, or CSI**. + +[← Back to the resource hub](../README.md#-csi-pricing-via-azure-billing) + +> 🏷 **What the discount covers:** a **large discount** on **GitHub** and +> **GitHub Copilot**, including the usage-based **tokens from the default +> models used in GitHub** — Anthropic Claude, OpenAI GPT, Google Gemini, MAI, +> Kimi, and more. + +> 📧 **Want the discount amount and how to activate it?** Email +> [DevsAtCSI@microsoft.com](mailto:DevsAtCSI@microsoft.com). +> The GitHub @ CSI team will share the current CSI rate and walk you +> through activation — primarily connecting an **Azure subscription tied +> to a parent CSI entity** (your portco, your operating group, or CSI) to +> your GitHub enterprise account. + +> ⚠️ **Credit-card billing on GitHub is NOT eligible for the CSI discount.** +> Personal credit cards and PayPal payment methods on a GitHub enterprise +> account do not qualify. To get the CSI rate, the GitHub enterprise account +> must be connected to an **Azure subscription** owned by your portco, your +> operating group, or CSI. + +> ✅ **Two benefits of the Azure-billed path:** +> +> 1. **CSI portco discount** on GitHub Enterprise Cloud and GitHub Copilot +> (Business / Enterprise) SKUs. +> 2. **Prioritized GitHub support** — Azure-connected CSI enterprises are +> routed through the GitHub @ CSI team at Microsoft, who can escalate +> tickets and coordinate directly with GitHub product and support teams. +> Enterprises billed outside this path do not get this CSI-routed +> escalation benefit. + +--- + +## Eligible SKUs + +- **GitHub Enterprise Cloud** +- **GitHub Copilot Business** +- **GitHub Copilot Enterprise** + +## Connect your Azure subscription to GitHub + +See +[Connecting an Azure subscription (docs.github.com)](https://docs.github.com/en/enterprise-cloud@latest/billing/how-tos/set-up-payment/connect-azure-sub) +for the step-by-step procedure. + +## Check whether your discount is active + +You can confirm the CSI discount is applied from the +[Azure Pricing Calculator](https://azure.microsoft.com/en-us/pricing/calculator): + +1. Sign in with the account tied to your portfolio's Azure billing. +2. Open the **Licensing program** dropdown. +3. If the discount is active, your **licensing agreement with Microsoft — tied + back to your portfolio** — appears as your selected agreement, similar to + the example below. + +![Azure Pricing Calculator Licensing program dropdown showing a Microsoft licensing agreement tied to a CSI portfolio company](../images/reproduced_ea_1234567.png) + +If you **don't** see a Microsoft licensing agreement tied to your portfolio, +the discount isn't active yet. Email +[DevsAtCSI@microsoft.com](mailto:DevsAtCSI@microsoft.com) +and the GitHub @ CSI team will kick off the process to get it set up. + +## Documentation + +- **About enterprise billing** — Concepts and supported payment methods. + [docs.github.com](https://docs.github.com/en/enterprise-cloud@latest/enterprise-onboarding/getting-started-with-your-enterprise/about-enterprise-billing) +- **Azure subscription payments (concept)** — How GitHub enterprise usage + shows up on your Azure invoice. + [docs.github.com](https://docs.github.com/en/enterprise-cloud@latest/billing/concepts/azure-subscriptions) +- **Billing through Azure subscriptions (reference)** — Detailed reference + for what's billable through Azure and how. + [docs.github.com](https://docs.github.com/en/enterprise-cloud@latest/billing/reference/azure-billing) + +## Cost management & chargeback + +For portcos that allocate GitHub costs back to teams or products on Azure: + +- **Azure Cost Management overview** — Cost analysis, budgets, alerts, and + exports. + [learn.microsoft.com](https://learn.microsoft.com/en-us/azure/cost-management-billing/costs/overview-cost-management) +- **Tag your Azure resources** — Use tags on the Azure subscription or + resource group to attribute GitHub line items to the right team, product, or + cost center. + [learn.microsoft.com](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/tag-resources) + +## Need help? + +If you hit issues during the connect-to-Azure flow (admin consent, ownership +mismatches, eligibility questions), email +[DevsAtCSI@microsoft.com](mailto:DevsAtCSI@microsoft.com) +and the GitHub @ CSI team will help unblock you. diff --git a/csi-pricing/index.html b/csi-pricing/index.html new file mode 100644 index 0000000..bd11e70 --- /dev/null +++ b/csi-pricing/index.html @@ -0,0 +1,18 @@ + + + + + + + + + CSI Pricing | GitHub @ Constellation Software + + +
+ + + diff --git a/src/App.tsx b/src/App.tsx index 54212ec..2af2d68 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,8 +1,9 @@ -import {useMemo, useState} from 'react' +import {useEffect, useMemo, useState} from 'react' import type {ComponentPropsWithoutRef, ReactNode} from 'react' import { ArrowUpIcon, BookIcon, + CalendarIcon, CodeIcon, CreditCardIcon, DeviceDesktopIcon, @@ -13,6 +14,7 @@ import { MoonIcon, RepoIcon, SunIcon, + TagIcon, } from '@primer/octicons-react' import {BaseStyles, Button, IconButton, Label, Link, ThemeProvider} from '@primer/react' import ReactMarkdown from 'react-markdown' @@ -20,14 +22,17 @@ import rehypeRaw from 'rehype-raw' import rehypeSanitize, {defaultSchema} from 'rehype-sanitize' import rehypeSlug from 'rehype-slug' import remarkGfm from 'remark-gfm' -import {getTableOfContents, pages} from './content' -import type {PageId} from './content' +import {getTableOfContents, isPageId, pages} from './content' +import type {PageId, TableOfContentsItem} from './content' type ColorMode = 'auto' | 'day' | 'night' +type MarkdownExtraProps = {node?: unknown} const repositoryUrl = 'https://github.com/microsoft/github-constellation-software' -const pageId = document.body.dataset.page === 'usage-based-billing' ? 'usage-based-billing' : 'home' +const requestedPageId = document.body.dataset.page +const pageId: PageId = isPageId(requestedPageId) ? requestedPageId : 'home' const siteRoot = document.body.dataset.siteRoot ?? './' +const themeStorageKey = 'github-csi-color-mode' const imageModules = import.meta.glob('../images/**/*', { eager: true, import: 'default', @@ -55,25 +60,68 @@ const themeOptions: Array<{ {mode: 'night', label: 'Use dark theme', icon: MoonIcon}, ] +const navigationItems: Array<{ + id: PageId + description: string + icon: typeof HomeIcon +}> = [ + {id: 'home', description: 'Migrations, adoption, and scale', icon: HomeIcon}, + {id: 'build-days', description: 'Sessions and recordings', icon: CalendarIcon}, + {id: 'csi-pricing', description: 'Azure billing and discounts', icon: TagIcon}, + {id: 'usage-based-billing', description: 'Copilot UBB playbook', icon: CreditCardIcon}, +] + +function getInitialThemeIndex() { + const storedMode = window.localStorage.getItem(themeStorageKey) + const storedIndex = themeOptions.findIndex(option => option.mode === storedMode) + return storedIndex >= 0 ? storedIndex : 0 +} + +function resolveRepositoryPath(href: string) { + const [path, fragment] = href.split('#', 2) + const sourceDirectory = pages[pageId].sourcePath.split('/').slice(0, -1) + const segments = [...sourceDirectory] + + for (const segment of path.replace(/^\.\//, '').split('/')) { + if (!segment || segment === '.') { + continue + } + if (segment === '..') { + segments.pop() + } else { + segments.push(segment) + } + } + + const resolvedPath = segments.join('/') + return `${repositoryUrl}/blob/main/${resolvedPath}${fragment ? `#${fragment}` : ''}` +} + function normalizeHref(href: string | undefined) { if (!href) { return undefined } + if (href.startsWith('#') || href.startsWith('mailto:') || href.startsWith('tel:')) { + return href + } + if (href.startsWith('../README.md')) { return `${siteRoot}${href.slice('../README.md'.length)}` } - if (href === './usage-based-billing/' || href === 'usage-based-billing/') { - return `${siteRoot}usage-based-billing/` + const pageRoute = href.match(/^(?:\.\/|\.\.\/)?(build-days|csi-pricing|usage-based-billing)\/?(#.*)?$/) + if (pageRoute) { + const [, route, fragment = ''] = pageRoute + return `${siteRoot}${route}/${fragment}` } if (href === '.github/ISSUE_TEMPLATE') { return `${repositoryUrl}/issues/new/choose` } - if (/^(CONTRIBUTING|CODE_OF_CONDUCT|SECURITY|SUPPORT|LICENSE)\.md(?:#.*)?$/.test(href)) { - return `${repositoryUrl}/blob/main/${href}` + if (/^(?:\.\/|\.\.\/)?[^?#]+\.md(?:#.*)?$/.test(href)) { + return resolveRepositoryPath(href) } return href @@ -83,7 +131,12 @@ function isExternalHref(href: string | undefined) { return Boolean(href && /^https?:\/\//.test(href)) } -function MarkdownLink({href, children, ...props}: ComponentPropsWithoutRef<'a'>) { +function MarkdownLink({ + node: _node, + href, + children, + ...props +}: ComponentPropsWithoutRef<'a'> & MarkdownExtraProps) { const normalizedHref = normalizeHref(href) const external = isExternalHref(normalizedHref) @@ -100,7 +153,12 @@ function MarkdownLink({href, children, ...props}: ComponentPropsWithoutRef<'a'>) ) } -function MarkdownImage({src, alt, ...props}: ComponentPropsWithoutRef<'img'>) { +function MarkdownImage({ + node: _node, + src, + alt, + ...props +}: ComponentPropsWithoutRef<'img'> & MarkdownExtraProps) { const imageKey = src?.replace('../images/', './images/') const resolvedSrc = (imageKey && localImages.get(imageKey)) || src @@ -109,13 +167,14 @@ function MarkdownImage({src, alt, ...props}: ComponentPropsWithoutRef<'img'>) { function AnchoredHeading({ as: Heading, + node: _node, id, children, ...props }: ComponentPropsWithoutRef<'h2'> & { as: 'h2' | 'h3' children?: ReactNode -}) { +} & MarkdownExtraProps) { return ( {children} @@ -129,39 +188,24 @@ function AnchoredHeading({ } function SiteNavigation({currentPage}: {currentPage: PageId}) { - const links = [ - { - id: 'home' as const, - label: 'Resource hub', - description: 'Migrations, adoption, and scale', - href: siteRoot, - icon: HomeIcon, - }, - { - id: 'usage-based-billing' as const, - label: 'Usage-based billing', - description: 'Copilot UBB playbook', - href: `${siteRoot}usage-based-billing/`, - icon: CreditCardIcon, - }, - ] - return (