Copilot Workshops: new Astro site, GitHub Copilot App harness, localizations, and content-first restructure#146
Merged
Conversation
Agent-Logs-Url: https://github.com/github-samples/agents-in-sdlc/sessions/fe23a7c4-299e-4150-9215-ce55e8e0682e Co-authored-by: GeekTrainer <6109729+GeekTrainer@users.noreply.github.com>
…de, Cloud, Complete) Agent-Logs-Url: https://github.com/github-samples/agents-in-sdlc/sessions/fe23a7c4-299e-4150-9215-ce55e8e0682e Co-authored-by: GeekTrainer <6109729+GeekTrainer@users.noreply.github.com>
Agent-Logs-Url: https://github.com/github-samples/agents-in-sdlc/sessions/fe23a7c4-299e-4150-9215-ce55e8e0682e Co-authored-by: GeekTrainer <6109729+GeekTrainer@users.noreply.github.com>
Builds out the workshop-content/ directory as a publishable MkDocs site
and removes long-standing duplication across the three learning paths.
Site infrastructure (Phase A1)
- mkdocs.yml at repo root with Material theme, dark/light toggle,
nav tabs, search, code-copy, edit links, and PyMdown Snippets
configured against partials/.
- requirements-docs.txt pinning mkdocs-material, pymdown-extensions,
and mkdocs-callouts (renders > [!NOTE]/[!IMPORTANT]/[!TIP] blocks
as Material admonitions).
- .github/workflows/pages.yml builds with mkdocs --strict on PRs
(validation only) and on push to main (build + deploy via
actions/deploy-pages). Explicit per-job permissions; pages
concurrency group; pinned actions.
- site/ and .venv-docs/ added to .gitignore.
Content partials (Phase A2 — Tier 1)
Five reusable snippets at repo-root partials/, replacing verbatim
duplicates across paths via --8<-- includes:
- sections/coding-agent-intro.md (vscode/4 + cloud/2)
- sections/iterating-recap.md (vscode/7 + cloud/5)
- sections/security-coding-agent.md (vscode/7 + cloud/5)
- scenarios/tech-debt.md (vscode/4 + cloud/2)
- scenarios/accessibility.md (cli/6 + shared/coding-agent/custom-agents)
Partials follow inline-links-only / no-images / no-H1 rules
documented in partials/README.md.
Path-publishing fixes
- Converted 3 outbound links pointing to .github/instructions/*.md
to absolute github.com URLs (would otherwise break --strict).
- Escaped <branch-name> placeholders in iterating files so they
render as code spans, not stray HTML tags.
- Escaping shared/1 link refs to absolute URLs preserves both raw
GitHub readability and Pages strict build.
Prior dedup + cleanup (also pending on this branch, included here)
- shared/coding-agent/{custom-agents,managing-agents}.md as
canonical bodies for the cross-path coding-agent flows.
- Wrappers in vscode/{5,6} and cloud/{3,4} reduced to skeletons
pointing to the shared module.
- Multiple polish passes from earlier session work
(cli warm-up, hands-on demos, /delegate optional section, etc.).
Local validation: mkdocs build --strict passes with zero errors;
all 5 partials resolve correctly in rendered output; GitHub alerts
render as Material admonitions.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the MkDocs Material build (and the opaque PyMdown --8<-- snippet syntax) with a new Astro + Starlight project under docs/. Authored content stays in workshop-content/ and is loaded via Astro's glob() loader. - New docs/ project with Astro 5 + Starlight 0.36, separate from client/ - Convert all Markdown to .mdx with YAML frontmatter - Replace --8<-- snippet includes with MDX partials in workshop-content/_partials/ and typed Astro components in docs/src/components/ (CalloutCloudAgentRequired, PrereqCopilotBase) - Convert GitHub-style alerts (> [!NOTE], etc.) to Starlight <Aside> - Drop manual prev/next tables; Starlight generates them from sidebar order - Rename README.md -> index.mdx so directory URLs stay stable - Rewrite internal .md links to relative directory-style route URLs so they work under the /agents-in-sdlc/ base path - Rewrite .github/workflows/pages.yml for Node + Astro + lychee link check - Symlink workshop-content/node_modules -> ../docs/node_modules so MDX outside docs/ can resolve @astrojs/starlight/components - Delete mkdocs.yml, requirements-docs.txt, partials/, site/ - Update root README.md to describe the new docs build Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Previously it lived as a standalone top-level sidebar entry (mirroring the old mkdocs nav). Each course should treat custom instructions as its own module 1, so add it inside the VS Code, CLI, and Cloud agent path groups. The destination URL still points at the shared page under /shared/1-custom-instructions/. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Each path now has its own hands-on module that walks through the 'add a docstring requirement to copilot-instructions.md and watch the output change' exercise from main, using the path's actual tool: - vscode/2-custom-instructions.mdx (was a stub) — full Copilot Chat walkthrough - cli/3-custom-instructions.mdx (new) — same exercise driven by Copilot CLI - _partials/instructions-add-docstring.mdx — shared steps for the copilot-instructions.md edit, imported by both pages CLI path is renumbered so install precedes the new hands-on: 3-mcp -> 4-mcp, 4-generating-code -> 5-generating-code, 5-agent-skills -> 6-agent-skills, 6-custom-agents -> 7-custom-agents, 7-slash-commands -> 8-slash-commands, 8-review -> 9-review. Sidebar, prev/next chains, and cross-path index tables updated to match. Fixes vscode prev/next refs that the bulk renumber sed accidentally shifted (vscode/3-mcp, 6-custom-agents are unchanged). Build: 28 pages. Lychee: 0 errors. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Each learning path now owns its own module 1 covering custom instructions: - VS Code: read + update + see impact via Copilot Chat - CLI: install (1) then read + update + see impact via copilot CLI (2) - Cloud agent: read + update only (impact shown later in cloud agent PRs) Removed the shared lesson at shared/1-custom-instructions.mdx since each path's coverage differs slightly. The shared overview content is now in _partials/instructions-overview.mdx, imported into each path's module 1. The shared prerequisites lesson now branches into the three paths. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- cli/2-custom-instructions: stop deleting publishers.py between rounds. Round 2 now asks Copilot to update the existing file to match the new documentation conventions, and learners leave the file in place. - cli/4-generating-code: remove the redundant 'Warm-up: see custom instructions in action' section. That demo now lives entirely in module 2, so the generating-code lesson goes straight into plan mode. - cli/4-generating-code: add a security caution around copilot --allow-all-tools, sourced from the GitHub Copilot CLI docs on allowing/denying tool use. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace repeated 'return to your codespace / open terminal / run copilot' preambles with a single <Aside type="tip"> callout at the top of each lesson page. Three partials cover: basic CLI, allow-all CLI (with link to the full warning in 4-generating-code.mdx), and VS Code Chat. CLI callouts mention 'copilot --continue' for resuming the most recent session in the current project. Also dedupes a duplicate mode/model selection block in vscode/3-agent-mode.mdx and moves the long --allow-all-tools caution in cli/4-generating-code.mdx out of step 3 into a standalone caution above the step list. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Previously placed at the top of each lesson page (in the conceptual intro area), the Start a Copilot CLI/Chat callouts now sit immediately under the heading of the first exercise where the learner actually opens Copilot. This keeps the callout adjacent to where its instructions are needed, instead of being separated from the action by scenario, objectives, and concept sections. Affected pages: - vscode/2-mcp.mdx -> '### Examine the impact of custom instructions' - cli/3-mcp.mdx -> '## Setting up the GitHub MCP server in Copilot CLI' - cli/4-generating-code.mdx -> '## Utilize plan mode' - cli/5-agent-skills.mdx -> '## Using the skill' - cli/6-custom-agents.mdx -> '## Using a custom agent in Copilot CLI' - cli/7-slash-commands.mdx -> '## Sharing a session' Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…upes Partials now follow a category-prefix scheme so role-in-lesson is visible at a glance: - callout-* for Aside/Tip blocks - section-* for top-level concept blocks - exercise-* for mid-lesson step inserts Filename pattern is <category>-<topic>.mdx; component symbols are PascalCase of the topic portion only, keeping lesson source readable (<StartCopilotCli />, <CloudAgentIntro />). Renamed all 10 existing partials and updated imports across 15 lesson files. While touching imports, also corrected two pre-existing component-name drifts (CodingAgentIntro -> CloudAgentIntro, SecurityCodingAgent -> CloudAgentSecurity) and made scenario-block filenames self-describing (accessibility -> section-accessibility-scenario, tech-debt -> section-tech-debt-scenarios). New shared partials: - callout-model-choice-caution.mdx — adopted in vscode/2-mcp and vscode/3-agent-mode (one-word 'lab' vs 'workshop' drift now fixed). - section-mcp-overview.mdx — adopted in cli/3-mcp and vscode/2-mcp. Uses inline links so it's self-contained when imported. Diagram and agent-mode framing paragraph stay in vscode/2 (VS-Code-specific). Bug cleanups found during review: - vscode/2-mcp.mdx had 'Ensure your codespace is ready' twice (H3 at line 14 and H2 at line 124). Kept the H3 occurrence; removed the H2 duplicate that ran after the learner had already done the steps. - vscode/4-cloud-agent.mdx had '## Summary and next steps' twice. Removed the stray early summary heading and its single paragraph; kept the full summary section that follows. Build clean (28 pages); lychee 1694/0. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
cloud/2-cloud-agent.mdx and vscode/4-cloud-agent.mdx were ~95%
identical (190 lines each, only 11 lines + frontmatter + ref paths
differed). Apply the same redirect-stub pattern already used for
custom-agents and managing-agents.
Changes:
- New shared/cloud-agent/cloud-agent.mdx: full lesson body taken from
the cloud/2 version (the superset). Image and partial paths shifted
one level deeper.
- The cloud-only 'Custom instructions in this repository' section is
kept unconditionally, with a one-sentence softening so it reads for
both audiences (vscode learners get a quick reinforcement;
cloud learners get the same pointer they had before).
- 'Return to your path' footer at the end mirroring the existing
shared modules.
- cloud/2-cloud-agent.mdx and vscode/4-cloud-agent.mdx are now
~15-line redirect stubs.
Pre-existing bug fix folded in: both source files had a duplicated
step 9 ('Select **Assign**.' appeared once before and once after the
eyes-emoji image in the second issue-assignment list). Dropped the
stray second occurrence in the shared body.
Build clean (29 pages); lychee 1709/0.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replaces the app-development Copilot configuration with a content-focused playbook now that the Tailspin Toys application has been extracted to github.com/github-samples/tailspin-toys. - Rewrite .github/copilot-instructions.md as the content-author core: scope, repo structure, partials prefix conventions (callout-/section-/ exercise-), shared-module redirect-stub pattern, link patterns, build + lychee verification, commit hygiene. - Add scoped instruction files with applyTo frontmatter: - mdx.instructions.md (workshop MDX patterns) - markdown.instructions.md (no hard-wrap; GitHub admonitions) - partials.instructions.md (naming + self-contained refs) - astro.instructions.md (docs/ wrapper conventions) - Delete .github/agents/accessibility.md (app-focused custom agent). - Delete the seven app-targeted files in .github/instructions/ (astro, flask-endpoint, playwright, python-tests, svelte, tailwindcss, ui). Atomic with the deletes so no intermediate state still tells agents to use the deleted Flask/Svelte/Tailwind guidance. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The Flask + Astro/Svelte demo application has been extracted to
github.com/github-samples/tailspin-toys. This repo is now a content-only
authoring repo for the workshop.
Removed:
- client/, server/, data/ — application source and SQLite seed
- scripts/{setup-env,start-app,run-server-tests}.sh — app dev scripts
- venv/, .venv-docs/ — local virtualenvs
- .devcontainer/, .vscode/ — app-targeted dev environment config
- .github/workflows/copilot-setup-steps.yml — app cloud-agent setup
- .github/workflows/run-tests.yml — app test workflow
Updated:
- .gitignore: pruned Python/Flask/SQLite/devcontainer entries; kept
workshop-content/node_modules (still needed for the symlink that
pages.yml creates so MDX outside docs/ can resolve Starlight imports).
- .github/dependabot.yml: rescoped from /client + devcontainers to /docs.
Only pages.yml remains under .github/workflows/ — the workshop site
deployment is unchanged.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Both READMEs were app-aware (mentions of client/, scripts/start-app.sh, the Tailspin Toys app description). Refocus them on workshop content authoring now that the application lives at github-samples/tailspin-toys. - Root README: scope, repo structure, local dev (with the workshop-content/node_modules symlink step), verification commands, pointers to authoring instructions and the tailspin-toys app repo. - docs/README: drop client/ cross-reference; describe docs/ as the thin Astro+Starlight wrapper around workshop-content/. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Imported from github/awesome-copilot@65b20ad. Skills (.github/skills/): - create-github-pull-request-from-specification — explicitly requested. Adds .github/pull_request_template.md (the skill expects one) tailored to this repo's verification flow (build target + lychee). - publish-to-pages — full directory including companion scripts (convert-pdf.py, convert-pptx.py, publish.sh). Also adds a local README clarifying that this skill is for spinning up a *separate* Pages site (e.g., a slide deck), NOT the deployment for this repo's workshop site (that's pages.yml). - conventional-commit — commit message hygiene. - update-markdown-file-index — keeps file-index sections in markdown files in sync with their folders. Agents (.github/agents/): - se-technical-writer — technical writing assistant. - technical-content-evaluator — A-grade content quality eval. - markdown-accessibility-assistant — five GitHub a11y best practices. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ilspin-toys The Tailspin Toys application learners build through has moved to github.com/github-samples/tailspin-toys. Update workshop content to point there instead of the (now content-only) agents-in-sdlc repo. - shared/0-prereqs.mdx: 'Use this template' instructions now point at github-samples/tailspin-toys. - _partials/section-instructions-overview.mdx: ui-instructions and astro-instructions ref definitions now point at the tailspin-toys copies of those files. - vscode/3-agent-mode.mdx: same UI instructions URL update. Verified: docs build still produces 29 pages; lychee link check passes (1460 OK, 0 errors). Note for maintainers: github-samples/tailspin-toys is currently INTERNAL — it must be made public (or the workshop run inside the github-samples org) before learners can fork it from the template. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds scripts/render-markdown.py — a stdlib-only Python renderer that converts workshop-content/**/*.mdx into plain GitHub-flavored Markdown under workshop/. Two-pass design separates partial-inlining (file-relative context) from link rewriting (URL-relative to importer). Stack-based <Aside> parser handles nesting; admonitions wrap every body line including code-fence delimiters with '> '. Stub pages are detected structurally and shared content is inlined with a synthesized prev/next footer. All unresolved partials, components, links, and images hard-fail. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds the rendered workshop/ output: 27 lesson Markdown files + 4 path README.md indexes + a copy of workshop-content/images/. Generated from workshop-content/ by scripts/render-markdown.py. Marked as linguist-generated via .gitattributes so it doesn't dominate language stats or PR diffs. Learners can now take the workshop directly on GitHub.com via workshop/README.md without visiting the published Pages site or running any tooling locally. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds .github/workflows/render-markdown.yml. On every PR that touches workshop-content/, workshop/, the renderer, or the workflow itself: re-runs scripts/render-markdown.py, fails on `git diff --exit-code workshop/` if the committed output is stale, then runs lychee against workshop/**/*.md as a second gate to catch broken-but-self-consistent link rewrites. Permissions: contents: read. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- README: top section now sends learners to workshop/README.md (the GitHub.com-readable view) alongside the published Pages site, with an explicit warning not to edit workshop/ by hand. Adds the render step to the pre-PR verification checklist. - copilot-instructions.md: documents the render pipeline. When editing anything under workshop-content/, run `python scripts/render-markdown.py` and commit the resulting workshop/ changes in the same PR. CI rejects drift. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Flips the render-markdown workflow from a verify-on-PR gate to a generate- on-main pattern. - On pull_request: run the renderer as a hard-fail validation gate (catches missing partials, unresolved components, broken internal links, missing images), plus lychee on the rendered output. Does not commit. - On push to main: regenerate workshop/ and commit any diff back to main as github-actions[bot] with [skip ci] in the message to avoid recursion. pages.yml watches workshop-content/** and docs/**, not workshop/**, so it also will not re-fire on the bot commit. Authors no longer need to commit workshop/ alongside workshop-content/ edits — the bot owns that folder. The local renderer script (scripts/render-markdown.py) remains for previewing if desired but running it is optional. If branch protection on main blocks bot pushes, options: configure bypass for github-actions[bot], use a PAT with bypass, or switch to bot-PR pattern. Will surface on first merge after this change. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ance - Add AUTHORING.md as the author entry point: mental model, recipe-style step-by-steps for adding lessons / partials / images / edits, local preview, style essentials, CI expectations, troubleshooting. - Rewrite CONTRIBUTING.md as a short pointer (drops Go / golangci-lint boilerplate inherited from a template repo). - Fix astro.instructions.md: sidebar is manually maintained in astro.config.mjs, not auto-generated. Remove now-obsolete guidance about node_modules symlinks (next commit moves content into docs/). Path references in these files describe the post-migration layout (docs/src/content/docs/); the next commit makes that layout real. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Eliminates the workshop/ <-> workshop-content/ name collision at the repo root and removes the workshop-content/node_modules symlink hack. Lesson MDX now lives at Astro's standard content-collection location, so packages resolve natively from docs/node_modules. Mechanics: - git mv workshop-content -> docs/src/content/docs - content.config.ts: shorten loader base to 'src/content.docs'. Custom glob() loader is retained because Starlight's default docsLoader() only excludes underscore-prefixed *filenames*, not *directories*; without the custom loader, _partials/* would route as pages. - astro.config.mjs: editLink.baseUrl -> .../edit/main/docs/. Starlight appends entry.filePath (project-rooted, e.g. src/content/docs/...), so the resulting edit URL is correct with no doubled segments. - scripts/render-markdown.py: SOURCE_DIR + banner + docstrings + comments + error messages all updated. - pages.yml: drop the now-impossible 'Link node_modules into workshop-content' step (parent dir no longer exists post-move). paths filter narrowed to docs/**. - render-markdown.yml: paths filter -> docs/src/content/docs/**; bot commit message references the new path. - copilot-instructions.md, partials.instructions.md, markdown.instructions.md, README.md, docs/README.md: all path references updated. - .gitignore: drop workshop-content/node_modules entry (no symlink). - workshop/: regenerated. Diff is banner-only (Source: line). Verified: - python scripts/render-markdown.py -> banner-only diff - cd docs && npm run build -> 29 pages (no _partials routed) - Edit-this-page link sample: .../edit/main/docs/src/content/docs/... (no doubled path segments) - lychee --offline 'workshop/**/*.md' -> 195 OK / 0 errors Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Covers __pycache__/, compiled bytecode, pytest/mypy/ruff caches, and common venv directories. The renderer script under scripts/ produces __pycache__/ on every local run. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…practice - cli/1-install-copilot-cli.mdx: title was 'Exercise 2' and the next-lesson sentence pointed to 'Exercise 3'. The CLI overview correctly lists this lesson as Exercise 1 and the next as Exercise 2. Renumber both. Workshop/ regenerated to match. - partials.instructions.md: previous guidance said callout partials must NOT import Aside (host page imports it). Every existing callout-*.mdx contradicts this — they all import Aside themselves. Reverse the guidance to match practice: callout partials are self-contained and import their own Starlight components. Both findings surfaced in Copilot's PR review on #140. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Pin lycheeverse/lychee-action from the floating @v2 tag to commit SHA 8646ba30535128ac92d33dfc9133794bfdd9b411 (v2.6.1) in both pages.yml and render-markdown.yml. Resolves CodeQL findings about unpinned third-party actions on PR #140. - Split render-markdown.yml into a 'validate' job (contents: read, runs on every event) and a 'commit' job (contents: write, runs only on push to main, depends on validate). Previously the workflow granted contents: write at the workflow level, which also applied to PR runs even though those never push. Now PR runs execute with read-only contents permission, matching least-privilege guidance. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add a sync system that generates per-partial .d.ts declaration files from frontmatter descriptions in docs/src/content/docs/_partials/. This gives authors hover-style tooltips on partial imports in VS Code and lets the renderer enforce that every partial is documented. - scripts/_partials_lib.py: shared parser for partial frontmatter - scripts/lint_partials.py: validates frontmatter conventions and flags missing imports/orphaned partials in the docs tree - scripts/sync_partial_metadata.py: regenerates .d.ts files under docs/src/types/_partials/ from frontmatter descriptions - .github/skills/sync-partial-metadata: workflow skill for authors - render-markdown workflow runs lint as a hard-fail PR gate Add description frontmatter to every existing partial, regenerate declaration files, and document the workflow in AUTHORING.md plus the partials/markdown instruction files. Mark generated .d.ts files read-only via .vscode/settings.json so authors don't edit them directly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Convert every lesson callout from Starlight ::: aside directives to GitHub admonition syntax (> [!NOTE]) so the same callout syntax works in the repo's READMEs, on github.com, and in the published site. A remark plugin (remark-github-admonitions-to-directives, wired in astro.config.mjs) rewrites the admonitions into Starlight asides at build time, mapping NOTE/IMPORTANT to note, TIP to tip, and WARNING/CAUTION to caution. GitHub syntax has no custom-title or nesting form, so the six nested "Start a Copilot CLI session" tip/caution blocks are flattened into sibling admonitions, and titled callouts use a bold lead-in line. Verified: clean build (37 pages), 116 asides render with no literal markers leaked, Playwright crawl of all 37 routes clean, lychee 0 errors. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update authoring guidance to reflect that lessons and repo docs now share one callout syntax. markdown.instructions.md replaces the published-vs-repo split with a single GitHub-admonition section documenting the Starlight mapping, the bold-lead-in pattern for titles, and the no-nesting / blank-line-between-callouts rules. Mirror the change in copilot-instructions.md, AUTHORING.md style essentials, instructions.instructions.md example, and the validate-site Playwright skill's literal-marker check. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the GitHub Copilot app lesson content with the revised version from the copilot-app-markdown branch, ported into the Starlight structure. Applies the copy edits from PR review (Ctl->Ctrl, "followed by creating", plural possessive "Tailspin Toys'", missing "to", "select add" reword, and consecutive list renumbering) and revises the file-exploration and terminal workflow in lessons 2-4 to use the app's review panel. Image paths and cross-lesson links are rewritten for the site: images/ -> ../_images/, N-name.md -> ../N-name/ routes, and the cross-harness links in lesson 8 to relative site routes so they build and pass the offline link check. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add app-show-folder-view.png and app-terminal-screenshot.png (prefixed to match the harness image convention) for the revised review-panel file and terminal steps in lessons 2-4. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Trim the unsupported "with static-Astro constraints" phrase from the lesson 4 "you learned" recap so it matches the "you will" list and the lesson body, which only cover planning with Plan mode and building with Autopilot. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
Extend the Starlight content schema with an optional `authors` field and stamp `authors: geektrainer` plus a git-derived `lastUpdated` date onto all 36 routable lessons and index pages. This pre-stages the metadata the awesome-copilot Learning Hub mirror expects and surfaces a per-page "Last updated" footer on the site. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
Remove the three remaining placeholder images and their references. They were stand-ins that added no clarity to the MCP setup and automation steps while adding to the repo size; the surrounding prose already describes each step fully. - vscode/3-mcp.md, cli/4-mcp.md: drop the Playwright MCP config placeholders - app/8-review.md: drop the New automation dialog placeholder Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add localized Copilot app workshop docs
…website/ Restructure to a content-first layout: lessons now live as plain Markdown at the repo root under docs/ (browsable directly on github.com, no build), and the Astro + Starlight project moves to a sibling website/ folder as an optional publisher. The content loader sources lessons via base: '../docs', and the landing page (docs/README.md) maps to the site home via slug: index. - Relocate app/cli/vscode/cloud lessons, 5 locale trees, and _images/ from docs/src/content/docs/** up to docs/**. - Move Astro tooling (astro.config.mjs, package.json, public/, src/pages/, content.config.ts, tsconfig.json, .gitignore) into website/. - Update CI (pages.yml), dependabot, .vscode, .gitignore, instruction files, skills, and the content-alignment workflow to the new paths. - Remove dead MDX-era components. Build verified: 217 workshop pages, translations render, lychee 0 errors. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
The [awesome-copilot] and [awesome-copilot-canvases] reference links pointed at non-existent paths (awesome-copilot.github.com/github and /canvases, both 404). Point them at the real collection: the site root for the general "awesome-copilot" reference and /extensions/ for canvases (which ship as canvas extensions). Applied across the English lessons and all five locale translations (es-es, ja-jp, ko-kr, pt-br, zh-cn). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
github.com auto-renders a folder's README.md when browsing into it, but not index.md — so with the content-first layout the harness and locale folders showed a bare file list instead of their landing page. Rename every folder landing from index.md to README.md and add an explicit slug: to each so Starlight keeps routing it to the same URL (the site already used this mechanism for the root docs/README.md via slug: index). - docs/<harness>/README.md → slug: <harness> - docs/<locale>/README.md → slug: <locale> - docs/<locale>/<harness>/README.md → slug: <locale>/<harness> Update the authoring docs, copilot-instructions, astro instructions, and the localizations skill to document the README-landing + slug convention (including that localized landings must use locale-prefixed slugs). Build verified: 217 workshop pages, routes preserved, translations render. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
Update the human-facing name across content and repo docs: the site title, the landing-page H1 (English + all five locales, now the brand name with the SDLC descriptor dropped), the root README, AUTHORING, CONTRIBUTING, copilot-instructions, the content-alignment workflow prose, and the three skill descriptions. The repo URL slug (agents-in-sdlc) is intentionally left unchanged — the base path, GitHub Pages URL, edit links, clone URLs, CI symlink, and npm package name still resolve until the repository itself is renamed. Build verified: 217 pages, titles updated, translations render, lychee 0 errors. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
The site name is "Copilot Workshops", which made the home page <title> read "Copilot Workshops | Copilot Workshops". Give the landing page its own H1 — "Hands-on with GitHub Copilot's agents" — so the title is distinct and descriptive. Localized taglines added for all five locales (GitHub Copilot kept untranslated as the brand name). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
The site shell moved to website/ in the content-first restructure; update the "Type of change" bullet to match. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
Contributor
There was a problem hiding this comment.
Pull request overview
Revamps the repository into Copilot Workshops: a content-first, multi-harness workshop with lessons as browsable pure Markdown under docs/, published via a new Astro + Starlight site isolated in website/, plus localization additions and repo housekeeping to support the new structure.
Changes:
- Migrates workshop content to
docs/**(new harness structure + localized content) and removes the legacyworkshop-content/**tree. - Introduces
website/(Astro + Starlight) as the optional publisher sourcing fromdocs/, including a legacy redirect page and build tooling. - Removes the old Tailspin Toys demo app code (
client/,server/, scripts/tests) and replaces CI with a Pages build + offline link-check workflow.
Show a summary per file
| File | Description |
|---|---|
| workshop-content/README.md | Removes legacy workshop landing page (content moved to docs/). |
| workshop-content/5-custom-agents.md | Removes legacy lesson (replaced by new harness content under docs/). |
| workshop-content/0-prereqs.md | Removes legacy prerequisites lesson (now per-harness). |
| website/tsconfig.json | Adds strict Astro TS config for the publishing site. |
| website/src/pages/shared/0-prereqs.astro | Adds legacy URL redirect page (full HTML doc) to preserve old bookmarks. |
| website/src/content.config.ts | Adds custom content collection loader sourcing ../docs and excluding _*/ assets. |
| website/README.md | Documents local dev/build/deploy for the publisher project. |
| website/public/favicon.svg | Adds site favicon for the publisher. |
| website/package.json | Adds Astro + Starlight dependencies and scripts for the publisher. |
| website/.gitignore | Ignores publisher build output and Node artifacts. |
| server/utils/seed_database.py | Removes legacy Flask seed script (server removed from this repo). |
| server/utils/seed_data/games.csv | Removes legacy seed data (server removed). |
| server/utils/database.py | Removes legacy DB helper (server removed). |
| server/utils/init.py | Removes legacy server utils package marker. |
| server/tests/test_models.py | Removes legacy model tests (server removed). |
| server/tests/init.py | Removes legacy tests package marker. |
| server/routes/games.py | Removes legacy API routes (server removed). |
| server/routes/init.py | Removes legacy routes package marker. |
| server/requirements.txt | Removes legacy Python requirements (server removed). |
| server/models/publisher.py | Removes legacy SQLAlchemy model (server removed). |
| server/models/game.py | Removes legacy SQLAlchemy model (server removed). |
| server/models/category.py | Removes legacy SQLAlchemy model (server removed). |
| server/models/base.py | Removes legacy model base (server removed). |
| server/models/init.py | Removes legacy model package initialization. |
| server/app.py | Removes legacy Flask app entrypoint. |
| server/init.py | Removes legacy server package marker. |
| scripts/start-app.sh | Removes legacy start script (app removed). |
| scripts/setup-env.sh | Removes legacy env bootstrap script (app removed). |
| scripts/run-server-tests.sh | Removes legacy server test runner script. |
| README.md | Replaces repo README to reflect Copilot Workshops content + new structure. |
| docs/zh-cn/README.md | Adds Simplified Chinese landing page (localized workshop overview). |
| docs/zh-cn/app/README.md | Adds Simplified Chinese Copilot app harness landing page. |
| docs/zh-cn/app/6-agent-merge.md | Adds localized Agent Merge lesson. |
| docs/zh-cn/app/0-prerequisites.md | Adds localized prerequisites for the app harness. |
| docs/vscode/README.md | Adds VS Code harness landing page. |
| docs/vscode/images/.gitkeep | Keeps images dir tracked for VS Code harness. |
| docs/vscode/5-managing-agents.md | Adds VS Code harness lesson: managing agents. |
| docs/vscode/0-prerequisites.md | Adds VS Code harness prerequisites lesson. |
| docs/README.md | Adds main workshop landing page (site home via slug: index). |
| docs/pt-br/README.md | Adds Brazilian Portuguese landing page. |
| docs/pt-br/app/README.md | Adds Brazilian Portuguese app harness landing page. |
| docs/pt-br/app/6-agent-merge.md | Adds localized Agent Merge lesson. |
| docs/pt-br/app/0-prerequisites.md | Adds localized prerequisites for the app harness. |
| docs/ko-kr/README.md | Adds Korean landing page. |
| docs/ko-kr/app/README.md | Adds Korean app harness landing page. |
| docs/ko-kr/app/6-agent-merge.md | Adds localized Agent Merge lesson. |
| docs/ko-kr/app/0-prerequisites.md | Adds localized prerequisites for the app harness. |
| docs/ja-jp/README.md | Adds Japanese landing page. |
| docs/ja-jp/app/README.md | Adds Japanese app harness landing page. |
| docs/es-es/README.md | Adds Spanish landing page. |
| docs/es-es/app/README.md | Adds Spanish app harness landing page. |
| docs/es-es/app/6-agent-merge.md | Adds localized Agent Merge lesson. |
| docs/es-es/app/0-prerequisites.md | Adds localized prerequisites for the app harness. |
| docs/cloud/README.md | Adds Copilot cloud agent harness landing page. |
| docs/cloud/images/.gitkeep | Keeps images dir tracked for cloud harness. |
| docs/cloud/0-prerequisites.md | Adds cloud harness prerequisites lesson. |
| docs/cli/README.md | Adds Copilot CLI harness landing page. |
| docs/cli/images/.gitkeep | Keeps images dir tracked for CLI harness. |
| docs/cli/8-review.md | Adds CLI harness review/next steps lesson. |
| docs/cli/0-prerequisites.md | Adds CLI harness prerequisites lesson. |
| docs/app/README.md | Adds Copilot app harness landing page (English). |
| docs/app/8-review.md | Adds app harness review/next steps lesson. |
| docs/app/6-agent-merge.md | Adds app harness Agent Merge lesson. |
| docs/app/5-mcp-playwright.md | Adds app harness Playwright MCP lesson. |
| docs/app/0-prerequisites.md | Adds app harness prerequisites lesson. |
| CONTRIBUTING.md | Updates contribution guide for new content + CI expectations. |
| client/tsconfig.json | Removes legacy app TS config (client removed). |
| client/svelte.config.js | Removes legacy Svelte config (client removed). |
| client/src/styles/global.css | Removes legacy Tailwind import (client removed). |
| client/src/pages/index.astro | Removes legacy app page (client removed). |
| client/src/pages/game/[id].astro | Removes legacy dynamic page (client removed). |
| client/src/pages/about.astro | Removes legacy about page (client removed). |
| client/src/middleware.ts | Removes legacy API proxy middleware (client removed). |
| client/src/layouts/Layout.astro | Removes legacy app layout (client removed). |
| client/src/components/LoadingSkeleton.svelte | Removes legacy UI component (client removed). |
| client/src/components/Header.astro | Removes legacy header component (client removed). |
| client/src/components/GameList.svelte | Removes legacy UI component (client removed). |
| client/src/components/GameCard.svelte | Removes legacy UI component (client removed). |
| client/src/components/ErrorMessage.svelte | Removes legacy UI component (client removed). |
| client/src/components/EmptyState.svelte | Removes legacy UI component (client removed). |
| client/src/assets/background.svg | Removes legacy asset (client removed). |
| client/README.md | Removes legacy Astro starter README. |
| client/public/favicon.svg | Removes legacy favicon (client removed). |
| client/playwright.config.ts | Removes legacy Playwright config (client removed). |
| client/package.json | Removes legacy app package manifest (client removed). |
| client/e2e-tests/home.spec.ts | Removes legacy e2e tests (client removed). |
| client/e2e-tests/games.spec.ts | Removes legacy e2e tests (client removed). |
| client/Dockerfile | Removes legacy container build file (client removed). |
| client/astro.config.mjs | Removes legacy Astro config (client removed). |
| client/.gitignore | Removes legacy client gitignore. |
| client/.dockerignore | Removes legacy dockerignore. |
| .vscode/settings.json | Updates editor settings for the new website/ TS SDK usage. |
| .vscode/mcp.json | Removes legacy VS Code MCP config file. |
| .vscode/extensions.json | Adds extension recommendations (MDX tooling). |
| .vscode/.copilotignore | Removes legacy Copilot ignore rule for old content tree. |
| .mcp.json | Adds repo-level MCP server config (Playwright). |
| .gitignore | Updates ignore rules for new website/ build artifacts and tooling caches. |
| .github/workflows/run-tests.yml | Removes legacy backend/frontend test workflow (app removed). |
| .github/workflows/pages.yml | Adds new GitHub Pages build+deploy workflow for website/ and offline lychee checks. |
| .github/workflows/copilot-setup-steps.yml | Removes legacy Copilot setup workflow (old app deps). |
| .github/workflows/content-alignment.md | Adds Copilot-driven advisory workflow for cross-lesson content drift detection. |
| .github/skills/update-markdown-file-index/SKILL.md | Adds skill to generate/update file indexes in Markdown. |
| .github/skills/README.md | Adds skills index documenting repo skills and when to use them. |
| .github/skills/publish-to-pages/scripts/publish.sh | Adds publish-to-pages helper script for external artifacts (not this repo’s site). |
| .github/skills/publish-to-pages/README.md | Documents publish-to-pages scope vs this repo’s Pages workflow. |
| .github/skills/make-repo-contribution/assets/pr-template.md | Adds reusable PR template asset for the contribution skill. |
| .github/skills/make-repo-contribution/assets/issue-template.md | Adds reusable issue template asset for the contribution skill. |
| .github/pull_request_template.md | Adds PR template emphasizing build + link-check verification. |
| .github/instructions/ui.instructions.md | Removes legacy UI/app instruction file (app moved out). |
| .github/instructions/tailwindcss.instructions.md | Removes legacy Tailwind instruction file (app moved out). |
| .github/instructions/svelte.instructions.md | Removes legacy Svelte instruction file (app moved out). |
| .github/instructions/python-tests.instructions.md | Removes legacy Python testing instruction file (server removed). |
| .github/instructions/playwright.instructions.md | Removes legacy Playwright test instruction file (client removed). |
| .github/instructions/instructions.instructions.md | Adds guidance for authoring/maintaining instruction files in this content repo. |
| .github/instructions/flask-endpoint.instructions.md | Removes legacy Flask endpoint instruction file (server removed). |
| .github/instructions/astro.instructions.md | Updates Astro instructions to match the new website/ publisher conventions. |
| .github/dependabot.yml | Retargets dependabot updates from /client to /website. |
| .github/aw/actions-lock.json | Adds locked-action metadata for action version pinning. |
| .gitattributes | Marks workflow lockfiles as generated and enforces merge strategy for them. |
| .devcontainer/devcontainer.json | Removes legacy devcontainer definition (old app tooling). |
Review details
- Files reviewed: 161/265 changed files
- Comments generated: 6
- Review effort level: Low
Comment on lines
+3
to
+8
| "playwright": { | ||
| "type": "stdio", | ||
| "command": "npx", | ||
| "args": ["-y", "@playwright/mcp@latest"], | ||
| "tools": ["*"] | ||
| } |
Drop the path filters so the build + link check reports on every PR, making it usable as a required status check for a branch ruleset. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
- cli/8-review: 'uses cases' -> 'use cases' - app/6-agent-merge: 'ran tests' -> 'run tests' - app/5-mcp-playwright: 'require' -> 'requires', 'end to end' -> 'end-to-end' Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
- Pin @playwright/mcp to 0.0.78 instead of @latest for a deterministic, supply-chain-safer MCP server version. - Remove the @mdx-js/typescript-plugin devDependency and tsconfig plugin entry; the workshop is pure Markdown with no .mdx files (Starlight's own MDX support remains transitive and untouched). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 64357866-3a3f-4fd8-914b-77826de5be5a
This was referenced Jul 15, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR delivers the full "Copilot Workshops" revamp: a new GitHub Copilot App beginner harness, a migration of the site to Astro + Starlight with pure-Markdown lessons, five-locale translations of the App harness, and a content-first repository restructure (browsable Markdown at repo-root
docs/, Astro tooling isolated inwebsite/). The workshop is also renamed from "Agents in SDLC" to Copilot Workshops.Type of change
website/Astro + Starlight wrapper).github/copilot-instructions.md, instructions, agents, skills)What's included
docs/app/, 9 lessons) — a beginner path modeled on the CLI flow: install, first agent session, custom instructions, building a filtering feature, the Playwright MCP server, PR creation via Agent Merge (highlighting how it auto-invokes the contributor skill), canvases, and review. Grounded in the Copilot App docs.docs/**(browsable directly on github.com); the Astro/Starlight publisher moved towebsite/. Folder landings useREADME.mdwith explicitslug:frontmatter to preserve routes.es-es,ja-jp,ko-kr,pt-br,zh-cn, with alocalesi18n block and alocalizationsskill + per-locale rules.agents-in-sdlcURL slug is intentionally kept until the repo is renamed post-merge.build-and-verify-docs,check-content-alignment,make-repo-contribution, and the content-alignment agentic workflow; standardized on GitHub admonition syntax everywhere.Verification
cd website && rm -rf dist && npm run buildsucceeds — 218 built HTML files (217 pages + 404), matching the 36 routes × 6 locales + 1 redirect invariant.Notes for reviewers
main).agents-in-sdlcslug (base path, Pages URL, edit-link base, CI lychee symlink) is deliberately unchanged. It will be updated in a single follow-up pass once the repository is renamed.