Changelog: pptxdiff (Homebrew formula)¶
Source: src/packages/pptxdiff-brew/CHANGELOG.md
Changelog¶
All notable changes to the pptxdiff Homebrew formula (src/packages/pptxdiff-brew/) will be
documented in this file.
The format is based on Keep a Changelog, and this package
intends to follow Semantic Versioning once published to a
real tap. Entries here track the formula itself, not the underlying pptxdiff npm package (see the
root CHANGELOG.md for that).
[Unreleased]¶
Added¶
- Initial
Formula/pptxdiff.rb, pinned to the publishedpptxdiff@0.7.0npm tarball (sha256:b7bc10ffee012efa1d4914e53b264b338dfbb15dea0714f31c6f664023bff272). depends_on "node",npm installintolibexec+ symlinkedbin, noresourceblocks needed (the tarball has zero runtimedependencies).livecheckblock (strategy :npm) for automatic new-version detection once tapped.- A
test doblock that starts the real server, recovers its OS-assigned port from stdout, curls it, and asserts real HTML comes back. README.mddocumenting current status (not yet in a real tap — install directly from this formula file for now), the direct-install command, and the version-bump procedure.test_formula.mjs(npm test) — a genuine Red/Green TDD check for the formula, since realbrew install/brew audit/brew testcannot run in this sandbox (Homebrew refuses to run as root, and running it under an unprivileged user still hits a403from the outbound proxy onghcr.io, needed for Homebrew's portable-ruby — both confirmed by actually attempting it, not assumed). The script downloads the real pinned tarball, verifies its sha256, cross-checks it against the npm registry's own metadata, then replays the formula'sinstallmethod's exactnpm install --global --prefix=<libexec> ...command against the real tarball and runs/curls the resulting realpptxdiffbinary — the same functional proofbrew testwould give.package.json(private, no publish) sonpm testworks the same way it does in the othersrc/packages/*directories.
Verified¶
- Demonstrated genuine RED before GREEN: corrupted the formula's
sha256pin and deleted itsdepends_on "node"line, rantest_formula.mjs, confirmed exactly those 2 of 18 assertions failed (16/18) while every other check — including the realnpm install/run/curl against the live tarball — stayed green; restored the formula and confirmed 18/18 again.
[Unreleased] (continued)¶
Added¶
lib.mjs— shared pure/network helpers (parseFormula,fetch,sha256hex,resolveNpmVersion, and a newupdateFormulaPin) factored out oftest_formula.mjssosync-tap.mjsdoesn't duplicate the same formula-parsing/network logic.sync-tap.mjs(node sync-tap.mjs [--file <path>] [--version <x.y.z>|latest]) — resolves a targetpptxdiffnpm version (default: npm'sdist-tags.latest), downloads its real tarball, computes its real sha256, and rewrites only theurl/sha256lines of a target formula file in place. Idempotent (no-op, no write, if the file already matches) so it's safe to run unconditionally on a schedule. Verified end-to-end against the real npm registry: a no-op run against the current formula, and an update run against a deliberately stale scratch copy that correctly restored it to the real0.7.0pin.test_sync_tap.mjs(npm test, nowtest_sync_tap.mjs && test_formula.mjs) — pure, network-free Red/Green tests forupdateFormulaPin(replaces only url/sha256, leaves every other line byte-identical, idempotent on already-current values) andparseArgs(defaults, overrides, rejects unknown flags). Demonstrated genuine RED before GREEN: brokeupdateFormulaPin's sha256 regex so it could never match, confirmed exactly 1 of 11 assertions failed, restored it, confirmed 11/11 — and re-confirmedtest_formula.mjswas unaffected (still 18/18) after the sharedlib.mjsextraction..github/workflows/sync-homebrew-tap.yml(root of the monorepo) — three-job CI pipeline:bump-formula(runssync-tap.mjs+npm testagainst this repo's own formula copy, opens a PR here if changed),brew-audit(macOS runner, realbrew audit --strict --online/brew install/brew testagainst the updated formula — the genuine real-Homebrew verification this sandbox cannot do),sync-tap-repo(opens a PR againstsugatoray/homebrew-pptxdiffwith the same file, once that repo + aHOMEBREW_TAP_TOKENsecret exist). Triggers:workflow_dispatch+ weeklyschedule. See README.md's "Publishing to a real tap" for the full pipeline description and the two manual one-time setup steps (repo + secret) still needed before job 3 can succeed.README.md: new "Publishing to a real tap" section; "Bumping the version" rewritten to point atsync-tap.mjsinstead of manual editing.
[Unreleased] (continued)¶
Added¶
LICENSE— a real copy (not a symlink) of the repo root's Apache-2.0LICENSE, matchingpptxdiff-vscode's existing precedent of carrying its own copy for the same reason: this directory's content is pushed into the separatesugatoray/homebrew-pptxdiffrepo by CI, which needs its own top-levelLICENSEas a standalone repo.
Changed¶
.github/workflows/sync-homebrew-tap.yml: thebump-formulajob now stages and uploadsREADME.md/CHANGELOG.md/LICENSEalongsideFormula/pptxdiff.rb, andsync-tap-repocopies all four into the tap repo (formula intoFormula/, the other three into the repo root) as part of the same PR. Added a job-levelshould_syncoutput (changed == 'true' || event_name == 'workflow_dispatch') so a manualworkflow_dispatchrun always pushes the current README/CHANGELOG/LICENSE/formula state to the tap even when the version pin itself didn't move (e.g. a docs-only edit) — a scheduled run still only proceeds pastbump-formulawhen the pin actually changed, to avoid a no-op macOS run + empty-diff PR every week.test_formula.mjs: new "0." check assertingREADME.md/CHANGELOG.md/LICENSEexist, plus a real drift check that this package'sLICENSEis byte-identical to the repo root'sLICENSE. Self-test count 18 → 22.
Fixed¶
- A real bug in the new drift-check assertion itself, caught by its own RED demonstration: the
first version read the local
LICENSEfile unconditionally inside an&&chain without first checking it existed, so deleting it crashed the whole test script with an uncaughtENOENTinstead of failing that one assertion. Fixed by adding the missingfs.existsSync()guard.
Verified¶
- Three real RED states demonstrated before the final GREEN:
LICENSEmoved away entirely (2/22 failed: existence + identity);LICENSErestored but then content-tampered, i.e. drifted rather than missing (1/22 failed: identity only, existence correctly passed); restored to genuinely byte-identical (22/22).