Skip to content

🤖 Update Containers to 0.1.2 and improve its extension page 🤖🤖🤖 - #6282

Open
patverb wants to merge 2 commits into
github:mainfrom
patverb:plugin-release/containers-0.1.2-page-797337f-72a6b4e
Open

patverb wants to merge 2 commits into
github:mainfrom
patverb:plugin-release/containers-0.1.2-page-797337f-72a6b4e

Conversation

@patverb

@patverb patverb commented Nov 6, 2026

Copy link
Copy Markdown

Pull Request Checklist

  • I have read and followed the CONTRIBUTING.md guidelines.
  • I have read and followed the Guidance for submissions involving paid services.
  • My contribution adds a new instruction, prompt, agent, skill, workflow, or canvas extension file in the correct directory.
  • The file follows the required naming convention.
  • The content is clearly structured and follows the example format.
  • I have tested my instructions, prompt, agent, skill, workflow, or canvas extension with GitHub Copilot.
  • I have run npm start and verified that README.md is up to date.
  • I am targeting the main branch for this pull request.

Description

Update the approved Containers listing to 0.1.2 and replace its icon-only extension preview with real app screenshots. The summary now covers Docker, Podman, and Compose. External extension pages render the owning plugin's pinned README, so the page includes features, quickstart, requirements, and usage-data information.

Registered external canvas plugins can declare a gallery in extensions/external.json without duplicating their version, source, or install identity. The logo remains a small icon instead of an enlarged gallery image. README retrieval and sanitization reuse the existing plugin-page implementation; raw Markdown stays out of catalog hydration.

Preview asset: native Containers 0.1.2 with sample containers.

Containers 0.1.2 Compose overview used by the updated extension page


Type of Contribution

  • New instruction file.
  • New prompt file.
  • New agent file.
  • New plugin.
  • New skill file.
  • New agentic workflow.
  • New canvas extension.
  • Update to existing instruction, prompt, agent, plugin, skill, workflow, or canvas extension.
  • Other (please specify): external-extension website presentation and README integration.

Additional Notes

Release qualification limit: native testing is incomplete. A real Podman qualification stalled during provider startup. Two live run_image operations created their containers but did not return before interruption. The source suite, browser regressions, and installed behavior/CSP checks passed, but this PR does not claim that those live-call hangs are fixed or that native qualification is complete.

Local website build limit: Astro emitted 1,599 pages and reported completion. The enclosing Windows build command did not exit before its four-minute deadline and was stopped. Focused generated-page, browser, and accessibility checks passed against the emitted site.

Release provenance and focused validation
  • Production artifact: microsoft/azure-dev-tools#95.
  • Awesome Copilot source.sha: 79f3fa46520ceaefa1c9c863c92f05912c1f2f0f.
  • Immutable release ref: containers-v0-1-2-7b8c7ff.
  • Latest canvas: containers-latest.
  • Retained CI package SHA-256: 6eb9c200ace685a8522315f183c3866d96b6ae7ab5e92dde83eb5d04ba4b9834. The package was not rebuilt or changed for this submission.
  • Fifteen gallery and pinned-README retrieval checks passed.
  • Thirty-five generated-page, Markdown/image-provenance, sanitization, and install-URI checks passed.
  • Plugin validation passed for 110 local plugins and 97 external listings; three existing license warnings remain.
  • The built Containers page passed light/dark checks at 1440px and 390px, including three loaded app screenshots, a separate 32px icon, install-link identity, document overflow, renderer errors, and critical/serious WCAG findings.
  • Earlier release checks passed 244 source tests, 23 browser tests, and the installed behavior/CSP exercise. The stock packaged-inventory test rejects the promotion's additional SHA256SUMS receipt; that mismatch remains unresolved.
  • No package deployment, rollout announcement, or merge is included.

By submitting this pull request, I confirm that my contribution abides by the Code of Conduct and will be licensed under the MIT License.

<!-- canvas-release:containers-7b8c7ff-95ffca6b:5bb2ced47f20a620433b8db7b2c1fc8ad97ac704f57f517c2664d184a4042a01 -->

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@patverb
patverb requested review from a team as code owners November 6, 2026 18:08
Copilot AI auto review requested due to automatic review settings November 6, 2026 18:08
@github-actions github-actions Bot added canvas-extension PR touches canvas extensions external-plugin Public external plugin submission new-submission PR adds at least one new contribution plugin PR touches plugins website-update PR touches website content or code labels Nov 6, 2026
@github-actions

github-actions Bot commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

🔒 PR Risk Scan Results

Scanned 15 changed file(s).

Severity Count
🔴 High 0
🟠 Medium 0
ℹ️ Info 0

✅ No matching risk patterns were detected in changed files.

Skipped non-text or missing files
  • extensions/external-assets/containers/combined-logs.png
  • extensions/external-assets/containers/compose-overview.png
  • extensions/external-assets/containers/resource-metrics.png

This is an automated soft-gate report. Findings indicate review targets and do not block merge by themselves.

@github-actions

github-actions Bot commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

🚦 Submission status: 🛠️ Requires submitter fixes

Risk tier: merge-risk:high — Privileged execution, automation, or review-policy change
Required to merge: passing submission-gate checks plus 1 approval from reviewers with write access, including a maintainer with admin or maintain permission.

Why this tier
  • eng/canvas-smoke-test.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • eng/canvas-smoke-test.test.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • eng/generate-website-data.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • eng/lib/external-canvas-presentation.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • eng/lib/external-canvas-presentation.test.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • plugins/external.json is a high-risk path (automation, scripts, MCP config, hooks, or review policy)

Automated checks

Check Status Details
Line endings ✅ Passed Passed · logs
Spelling ✅ Passed Passed · logs
Generated README consistency ✅ Passed Passed · logs
Plugin and extension validation ✅ Passed Passed · logs
Canvas extension validation ✅ Passed Passed · logs
Plugin structure ✅ Passed Passed · logs
Risk scan ✅ Passed Passed · logs
Contributor reputation ✅ Passed Passed · logs
Duplicate resource scan ✅ Passed Passed · logs
PR quality signal ⏭️ Skipped Skipped by its workflow · logs
Canvas/plugin smoke test ✅ Passed Passed · logs

Action needed

  • Address the changes requested by aaronpowell, then push an update.

Review

  • Approvals: 0/1
  • Assigned reviewer: not assigned yet — comment /request-review to ask for one
  • Review target date: not set
  • Still needed: 1 more approval(s); an approval from a maintainer with admin or maintain permission; resolution of changes requested by aaronpowell
  • The core-maintainers pool is not staffed yet; an approver with admin or maintain permission is required instead.

Commands

Command Who What it does
/rerun-checks PR author, maintainers Re-runs failed or incomplete checks and re-evaluates this gate
/request-review PR author, maintainers Asks the review rotation to assign a reviewer (adds needs-reviewer)

Updated for c9a2c26 · gate run · This comment is maintained automatically — see submission gate docs.

@github-actions github-actions Bot added the ready-for-review Submission passed intake validation and is ready for maintainer review label Nov 6, 2026
@github-actions

github-actions Bot commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

✅ External plugin PR checks passed

  • Changed entries detected: 1
  • Workflow state label: ready-for-review
  • Full logs: Download quality gate artifact
  • Status legend: ✅ pass · ⚠️ warning · 🛑 fail

Per-plugin quality summary

Plugin spec compliance vally lint install smoke test version match ref/sha consistency canvas structure overall source tree
containers ✅ pass ✅ pass ✅ pass ✅ pass ✅ pass ✅ pass ✅ pass 79f3fa46520ceaefa1c9c863c92f05912c1f2f0f

Gate output details

containers - spec compliance (✅ pass)

Agent Plugins v1.0.0 manifest checks passed for plugin.json.
containers - vally lint (✅ pass)

✅ containers (2/2 checks passed)
    ✓ [spec-compliance] All 1 skill(s) are spec-compliant.
        ✓ spec-compliance: All spec checks passed.
    ✓ [valid-refs] All file references across 1 skill(s) are valid.
        ✓ valid-refs: All file references resolve to existing files within the skill directory.

1 skill(s) linted, 1 passed
containers - install smoke test (✅ pass)

Install smoke test succeeded. Verified /tmp/external-plugin-quality-ymLyGI/copilot-home/.copilot/installed-plugins/external-plugin-intake/containers/plugin.json.
containers - version match (pass)

- containers-v0-1-2-7b8c7ff: matched version "0.1.2" at "canvases/containers/plugin.json".
- 79f3fa46520ceaefa1c9c863c92f05912c1f2f0f: matched version "0.1.2" at "canvases/containers/plugin.json".
containers - ref/sha consistency (pass)

source.ref "containers-v0-1-2-7b8c7ff" resolves to the same commit as source.sha "79f3fa46520ceaefa1c9c863c92f05912c1f2f0f".
containers - canvas structure (pass)

- containers-v0-1-2-7b8c7ff: found "canvases/containers/com.github.copilot/extensions" with entry point "canvases/containers/com.github.copilot/extensions/containers/extension.mjs".
- 79f3fa46520ceaefa1c9c863c92f05912c1f2f0f: found "canvases/containers/com.github.copilot/extensions" with entry point "canvases/containers/com.github.copilot/extensions/containers/extension.mjs".
- containers: spec=pass, vally-lint=pass, install-smoke=pass, version-match=pass, ref-sha-consistency=pass, canvas-structure=pass, overall=pass

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The regression script hard-codes Containers’ image dimensions and caption requirements, causing valid galleries with other dimensions or no captions to fail or time out.

1 open issue
What changed in this PR

Updates Containers to version 0.1.2 and improves external extension pages with screenshot galleries and pinned upstream README content.

Changes:

  • Updates the Containers listing and marketplace entry to the pinned 0.1.2 release.
  • Adds validated gallery metadata, captions, and a separate small plugin icon.
  • Reuses sanitized plugin READMEs on extension detail pages while excluding raw Markdown from catalog hydration.
File Description
website/​src/​pages/​extension/​[id].astro Renders external READMEs and separates gallery images from icons.
website/​src/​lib/​site-data.ts Omits extension READMEs from catalog records.
website/​src/​components/​brand/​styles/​extension-detail.module.css Styles icons and screenshot captions.
website/​src/​components/​brand/​ExtensionDetail.tsx Displays separate icons and gallery captions.
website/​scripts/​external-plugin-readme.test.mjs Adds README, gallery, and hydration checks.
website/​scripts/​external-extension-regression.mjs Adds browser checks for external extension pages.
website/​README.md Documents gallery configuration and validation.
plugins/​external.json Updates Containers metadata and release pin.
extensions/​external.json Declares the Containers screenshot gallery.
eng/​lib/​external-canvas-presentation.test.mjs Tests gallery validation and asset resolution.
eng/​lib/​external-canvas-presentation.mjs Validates galleries and generates revision-pinned asset URLs.
eng/​generate-website-data.mjs Attaches galleries and owning-plugin READMEs to extension data.
.github/​plugin/​marketplace.json Reflects the Containers release update.

Review effort: Balanced (auto)

Comment on lines +48 to +50
await page.waitForFunction(() => [...document.querySelectorAll("#preview img")]
.every(image => image.complete && image.naturalWidth === 1280 && image.naturalHeight === 720));
assert.ok(await preview.locator("figcaption").count() > 0);
Keep gallery PNGs out of runtime extension discovery and normalize contribution text to LF.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI auto review requested due to automatic review settings November 6, 2026 18:23

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Removing a plugin leaves its gallery override behind, causing subsequent website data generation to fail and blocking deployment.

4 open issues

Review effort: Max (auto)

for (const entry of entries) {
if (!entry?.pluginName) continue;
const name = entry.pluginName;
assert.ok(canvases.has(name), `Gallery owner is not a registered canvas plugin: ${name}`);
Comment on lines +45 to +46
assert.ok(fs.readFileSync(file).subarray(0, PNG_HEADER.length).equals(PNG_HEADER),
`${name}: gallery image is not a PNG`);
Comment on lines +48 to +50
await page.waitForFunction(() => [...document.querySelectorAll("#preview img")]
.every(image => image.complete && image.naturalWidth === 1280 && image.naturalHeight === 720));
assert.ok(await preview.locator("figcaption").count() > 0);

@aaronpowell aaronpowell left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm a little apprehensive about combining the two different things within this one PR, as the update to the Containers extension shouldn't be blocked by the following comments/feedback.

I'll be honest that I forgot we had the extensions/external.json file still in the repo, and in reality it should be removed as it's a holdover from a time before we used Plugins as the distribution method for extensions (canvases). Also, as you can probably see, there's only two items in there so it's not really used.

I don't think that putting the screenshots required for the gallery for external canvases in the Awesome Copilot repo is the best workflow. It means that there are now two places that assets for a canvas (well, plugin really) need to live, rather than Awesome Copilot acting as a pointer to the upstream.

We could expand the plugins/external.json to have support for providing screenshots, and make it work relative to the ref/sha and path provided for that plugin, or we could have the website build query the upstream plugin.json and look in its extensions property for maybe a com.github.awesome-copilot folder in which we have that structure for images with their descriptions.

There's pros and cons for both, putting the gallery info in the external.json means that the PR has the potential for requiring a bit more complexity in authoring, whereas reading the upstream plugin.json increases website build time. As an author who wants to expand their canvases gallery feature, what would you prefer?

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

canvas-extension PR touches canvas extensions external-plugin Public external plugin submission merge-risk:high new-submission PR adds at least one new contribution plugin PR touches plugins ready-for-review Submission passed intake validation and is ready for maintainer review website-update PR touches website content or code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants