Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

push-md: e2e suite only exercises the unscoped source, not the built (scoped) zip

未关闭
#70 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
68/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
冷清
技术栈
bash, docker, git, github-actions, php

调研方向

从 bin/build-plugins.sh、bin/run-push-md-playground.sh、bin/inspect-push-md-zip.sh 以及现有的 push-md-e2e.yml workflow 开始,追踪当前挂载源代码的流程是如何构建和运行的。新增一个 Playground 路径,用于安装 dist/plugins/push-md.zip,然后运行现有的 clone、Markdown 编辑、commit 和 push 流程。当限定范围内的 artifact 被正常加载、push 在没有 fatal 或 bad line length character 错误的情况下成功,并且 artifact 路径在 CI 中运行时,即表示完成。

由索引模型根据 Issue 内容生成。

描述

Summary

The push-md e2e suite never functionally imports the built (scoped) plugin zip — it mounts the unscoped source tree directly. This is the testing gap that let the scoping regression in #68 (fixed by #69) ship in v0.6.6 / v0.6.7 uncaught: clone worked, but the first Markdown import/push fataled on the scoped build, and no automated test loaded the scoped artifact.

Details

bin/run-push-md-playground.sh boots Playground against the live source, not the release artifact:

--mount="$ROOT_DIR:/workspace"
--mount="$ROOT_DIR/vendor:/wordpress/wp-content/vendor"
--mount="$ROOT_DIR/components:/wordpress/wp-content/components"
--mount="$ROOT_DIR/plugins/push-md:/wordpress/wp-content/plugins/push-md"

So the e2e flow runs with:

  • the unscoped namespaces (Nette\…, League\…, …), where inline qualified references resolve fine, and
  • the dev bootstrap / composer autoloader, not the generated/scoped php-toolkit/vendor/composer/* classmap.

bin/build-plugins.sh produces the scoped dist/plugins/push-md.zip, but it's only checked structurally by bin/inspect-push-md-zip.sh (file presence + content greps). Nothing ever loads the scoped classes through their autoloader and pushes Markdown, so a scoping bug that fatals at class-load time passes every gate.

Proposed follow-up

Add an e2e path that exercises the built zip:

  1. bash bin/build-plugins.sh to produce dist/plugins/push-md.zip.
  2. Install that zip on a fresh Playground site (a blueprint step that installs the artifact, rather than mounting source).
  3. Run the existing import/push flow: git clone …/wp-json/git/v1/md.git, edit a post/*.md, commit, git push.
  4. Assert success (no bad line length character: <br, no PHP fatal in the receive-pack response).

Wire this into CI (e.g. push-md-e2e.yml) so every change that touches the scoper, prune list, or bundle layout is validated against the shipped artifact.

Notes
  • #69 already adds a cheap static canary in inspect-push-md-zip.sh (rejects in-class trait use of a scoped name missing a leading backslash). This issue is about the functional gate that a static grep can't cover.
  • Keep the unscoped-source e2e too (fast inner loop); the scoped-zip run is the release-artifact gate.

Follow-up to #69 / #68.

主要语言
PHP
星标
22
派生
5
PR 合并指标
30 天内没有已合并 PR

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

  • 提供 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 没有贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

Automattic/php-toolkit 的其他 Issue

查看 Automattic/php-toolkit 的全部 Issue

相似的 Issue

更多 PHP Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。