built by aktagon.com
Write down what may leave the private repository. Anything you did not write down fails the check, before it ships.
pubgrd copies a public repository tree from a private one and verifies nothing else got in. Every file that leaves is one you named in pubgrd.toml.
Forgetting an entry withholds a file instead of publishing one.
$ pubgrd verify --public ../myproject-public ==> allow.unlisted: 12 configured, 41 examined, 2 found FAIL: 2 files match no [allow] entry TODO.md internal-notes.md reason (allow): "everything a reader needs to build and run the tool"
Publish on purpose. · Allowlist, not denylist.
01 For anyone shipping a public mirror
pubgrd reverses the list. You name what may leave, and anything unnamed fails the check instead of shipping.
$ pubgrd verify --public ../myproject-public ==> allow.unlisted: 12 configured, 41 examined, 2 found FAIL: 2 files match no [allow] entry TODO.md internal-notes.md ↳ Neither file was excluded. Neither was allowed either — which is why they did not ship.
02 One contract, two readers
--format json writes one object to stdout and nothing else, so a pipeline can assert against the report rather than scrape the text. Exit codes do not change with the format.
$ pubgrd verify --public /tmp/out --format json | jq '.unlisted[0]' { "path": "TODO.md", "matched": null, "reason": "matches no [allow] entry" } $ echo $? 1 # branch on it, no text parsing
03 Every capability
Scaffold pubgrd.toml with the two blocks it needs.
Check a published tree against the allowlist. Human output, or --format json.
Name what may leave the private repository. Everything else is withheld.
Report how many files each allow entry actually matched.
Source-available under the Elastic License 2.0. Not yet publicly released.