Add Copilot Workshops sync workflow + Learning Hub i18n (#2325)

Adds an agentic (gh-aw) workflow that mirrors the multi-harness workshop
from github-samples/copilot-workshops into the Learning Hub, plus the
Starlight infrastructure it needs: GitHub-admonition rendering, i18n
locales with English at the site root, and a language picker that only
appears when a page has a non-English translation.


Copilot-Session: 9e1d1a4c-a422-4cae-8ea7-b3d5171f58e3

Co-authored-by: GeekTrainer <GeekTrainer@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Christopher Harrison
2026-07-16 17:06:29 -07:00
committed by GitHub
parent 7c2009f436
commit 65ef449bda
6 changed files with 2015 additions and 0 deletions
@@ -0,0 +1,40 @@
---
// Custom override of Starlight's LanguageSelect.
//
// By default Starlight renders the language dropdown on every page as soon as
// more than one locale is configured. Most of this site's docs are English-only,
// so we only want the picker to appear on pages that actually have a translation
// in a non-English locale. This override checks the docs collection for a
// translated version of the current page and renders the stock picker only when
// one exists; otherwise it renders nothing (no dropdown).
import Default from "@astrojs/starlight/components/LanguageSelect.astro";
import config from "virtual:starlight/user-config";
import { getCollection } from "astro:content";
// Locale directory names configured for the site, excluding the English root.
const localeCodes = Object.keys(config.locales ?? {}).filter(
(code) => code !== "root"
);
/** Strip a leading `<locale>/` segment from a docs entry id, if present. */
function baseSlug(id) {
const [first, ...rest] = id.split("/");
return localeCodes.includes(first) ? rest.join("/") : id;
}
// Set of base slugs (locale-stripped) that have at least one non-English
// translation available in the docs collection.
const docs = await getCollection("docs");
const translatedBaseSlugs = new Set();
for (const entry of docs) {
const [first, ...rest] = entry.id.split("/");
if (localeCodes.includes(first)) {
translatedBaseSlugs.add(rest.join("/"));
}
}
const currentBaseSlug = baseSlug(Astro.locals.starlightRoute.id);
const hasTranslations = translatedBaseSlugs.has(currentBaseSlug);
---
{hasTranslations && <Default {...Astro.props} />}