Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

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

Open
#70 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
68/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
bash, docker, git, github-actions, php

Research direction

Start with bin/build-plugins.sh, bin/run-push-md-playground.sh, bin/inspect-push-md-zip.sh, and the existing push-md-e2e.yml workflow to trace how the current source-mounted flow is built and run. Add a fresh Playground path that installs dist/plugins/push-md.zip, then run the existing clone, Markdown edit, commit, and push flow. Done means the scoped artifact is functionally loaded, the push succeeds without a fatal or bad line length character error, and the artifact path runs in CI.

Written by the indexing model from the issue text.

Description

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.

Dominant language
PHP
Stars
22
Forks
5
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Automattic/php-toolkit

All issues in Automattic/php-toolkit

Similar issues

More PHP issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.