Commit Graph
8 Commits
Author SHA1 Message Date
huntedbytheirs b3cdde4d7c feat(cache): add recipe cache with index-version-based staleness check 2026-08-08 17:45:14 -04:00
huntedbytheirs d7d0d2ec6d feat(fetch): download ZUUR recipe directories to cache
Implements tofu.fetch module with fetchRecipe() that downloads
ZUUR recipe directories using a known-file strategy (no directory
listing assumed). Downloads .recipe (required), package.lua (optional),
build.sh (optional), and custom build_script references.

Key features:
- Light recipe scanning for build_system/build_script discovery
- 404 on .recipe → 'package not found' user-friendly error
- 404 on optional files → logged and skipped
- 404 on referenced build_script → real error
- Partial file cleanup on failure
- 5 unittests using python3 http.server for multi-file scenarios

8/8 modules pass, dub build succeeds with warnings-as-errors.
2026-08-08 17:38:41 -04:00
huntedbytheirs b367f21d29 feat(binary): check zuur/binary package.lua version against constraints 2026-08-08 17:38:21 -04:00
huntedbytheirs c876821cda feat(index): fetch and sandbox-parse ZUUR index.lua
- Module tofu.index: download index via tofu.http.get, sandbox parse via Lua subprocess
- Whitelist sandbox (ported from ZETA lib/sandbox.lua): index code has zero I/O/exec access
- Lua 5.1/5.2+ compatible: setfenv detection with fallback to load() env param
- JSON escaping: handles quotes, backslashes, control characters in string values
- Defensive parsing: skips entries with empty names or invalid pool values
- 10 unittest blocks: happy path, malicious os.execute/io.open blocked, lua not found, bad JSON, empty index, missing name skip, invalid pool skip, syntax error, string escaping
- Evidence: 7 modules pass unittests, dub build passes with warnings-as-errors
2026-08-08 17:37:59 -04:00
huntedbytheirs 777de734f8 feat(http): add synchronous HTTP client with std.net.curl 2026-08-08 17:30:34 -04:00
huntedbytheirs c545879115 feat(version): port rpm-style version comparison from ZETA 2026-08-08 17:22:06 -04:00
huntedbytheirs 348f0e3bac feat(types): add core data structures
PackageIndex, Recipe, DepConstraint, BuildPlan, BuildResult, CacheManifest, BinaryCheckResult structs. Pool/BuildSystem/DepOp/Source enums. DepConstraint.parse() ported from ZETA vercmp.lua. TypesException for parsing errors. All @safe, all strings default to empty string.
2026-08-08 17:17:20 -04:00
huntedbytheirs c331416623 feat(log): add colored NO_COLOR-aware logging 2026-08-08 17:16:50 -04:00