- Migrate module path to github.com/hanzoai/pack across all Go packages
- Remove legacy upstream docs and competitor brand references
- Modernize LLM.md and mise.toml for pristine Hanzo Pack builder
Every failure exited 1, so callers could only retry blindly:
deterministic failures (no provider detected, missing start command)
were run and logged three times by builderv3 before giving up.
Transient failures are now typed as mise.TemporaryError and map to exit
75 (EX_TEMPFAIL): transport errors, 429, 408, 5xx, and truncated
bodies. A 404 for a pinned mise version and a malformed archive stay
deterministic, since retrying them cannot succeed. The mise download
also had no response status check at all, so a 5xx body was written to
disk and later failed as "binary not found in archive".
Carrying that across the process boundary meant giving
GenerateBuildPlan an error return: a mise install failure was
previously swallowed into BuildResult{Success: false} and exited 1
along with every app-level failure. The error is non-nil only for
transient failures, so !Success stays on exit 1.
The download gets an http.Client timeout, since http.DefaultClient has
none and a stalled connection would hang the build forever. It
deliberately does not retry in-process: the caller already retries the
whole command, and retrying here would multiply that and delay the
signal.
Also writes --info-out even when the build result is unsuccessful, so
callers can read {"success": false, "logs": [...]} instead of scraping
stdout.
* refactor: add io.Writer parameter to pretty print functions and JSON support
Generated-by: aiautocommit
* chore: promote tidwall/pretty from indirect to direct dependency
Generated-by: aiautocommit
* feat(cli): add show-plan flag to info command
- Add `--show-plan` flag to optionally render the generated build plan in the info command output.
- Update section header printing functions to accept an `io.Writer` destination for consistent output formatting.
Generated-by: aiautocommit
* feat: add --no-cache option to build subcommand
* docs: no cache docs
* refactor(buildkit): remove no-cache build option
* The no-cache option is no longer utilized in the BuildKit frontend logic.
* Updated documentation to reflect the removal of this parameter.
Generated-by: aiautocommit
* fix: respect cache backend type for registry cache import/export
* docs: update local development build instructions
- Update local image building to use the provided project task.
- Document the workflow for building with a local registry.
- Add examples for configuring buildctl with caching and debugging flags.
Generated-by: aiautocommit
* refactor(buildkit): clean up code comments and formatting
- Remove redundant comments and improve internal documentation.
- Fix minor formatting inconsistencies in code blocks and comment descriptions.
Generated-by: aiautocommit
* feat: add ParseBool utility to handle common boolean string variants
Generated-by: aiautocommit
* feat: integrate local registry and buildkit configuration
- Add buildkitd configuration to enable HTTP/insecure access to the local registry.
- Introduce a local registry service container on port 7890.
- Update the buildkit setup to mount the new registry configuration.
- Add tasks for building the frontend image and running project builds using the local registry and buildctl.
Generated-by: aiautocommit
* docs: update CLAUDE.md with architecture and style guidance
Generated-by: aiautocommit
* feat: add support for multiple cache-from and cache-to build flags
- Allow users to configure external cache sources and destinations via the `build` subcommand.
- Update cache parsing logic to support multiple entries matching the Docker buildx CLI format.
- Remove hardcoded default cache type to provide better control over BuildKit cache configurations.
Generated-by: aiautocommit
* test: add integration tests for cache-import parsing
Generated-by: aiautocommit
* refactor(buildkit): extract cache entry parsing logic
- Centralize cache configuration logic by moving loop-based parsing into a reusable `cacheEntriesFromFlags` helper.
- Improve code maintainability and readability by reducing duplication in `BuildWithBuildkitClient`.
- Add comprehensive unit tests for cache entry processing, including edge cases for flag parsing and empty inputs.
Generated-by: aiautocommit
* fix(test): remove unused buildkit cache flags from integration tests
* Remove unused flag variables that were meant for remote BuildKit caching.
* Ensure integration tests avoid remote cache (e.g., type=gha) to prevent exceeding GitHub Actions cache limits and excessive eviction.
Generated-by: aiautocommit
* test(buildkit): consolidate cache import tests
- Move TestParseCacheImports from its own file to frontend_test.go to consolidate related buildkit frontend tests.
Generated-by: aiautocommit
* style: fix indentation in build test helper
Generated-by: aiautocommit
* docs: document support for BuildKit cache backends
Generated-by: aiautocommit
* docs(developing-locally): add information on Docker, BuildKit, and caching
- Add missing setup prerequisites.
- Include debugging and configuration guidance for BuildKit/Docker.
- Clarify cache export and import implementation expectations in Railpack.
Generated-by: aiautocommit
* docs: clarify cache flag parsing and pnpm version logic
Generated-by: aiautocommit
---------
Co-authored-by: Matt Van Horn <[email protected]>
Co-authored-by: Michael Bianco <[email protected]>
Co-authored-by: Hanzo Dev <[email protected]>
* refactor: update to go 1.21+ syntax and idioms
- Replace interface{} with any throughout the codebase.
- Use strings.SplitSeq and strings.CutPrefix for more efficient string processing.
- Utilize slices.Contains for cleaner slice membership checks.
- Use strings.Builder for efficient string concatenation.
- Adopt modern loop syntax (for range) for iteration.
- Remove redundant omitempty tags in struct definitions.
Generated-by: aiautocommit
* refactor: linting fix
* build: standardize commit messages for automation tasks
- Update commit messages in the upgrade task to follow conventional commit standards.
- Ensure consistency across automated fix, formatting, and snapshot update processes.
Generated-by: aiautocommit
* refactor: update commit messages in mise-upgrade task
Generated-by: aiautocommit
* build: update go version
* build: lockfile upgrades
* refactor: use switch statements for conditionals
* style: fix blank identifier assignments as receivers
* fix: ignore deferred io and removal errors
* refactor: general code improvements and staticcheck fixes
* test: bump golangci-lint-action version
* build: add go package upgrade task
* build: go package bump
* build: add go mod check to mise check task
* build: upgrade go packages automatically when upgrading mise
* build: update go version in local frontend image
* docs: misc build process documentation
from exploring how we should do secrets + variables
* test: adding explicit int truthy test case
* refactor: centralize all str => list conversion into a single method
it's a one-liner, but self-documents what we are doing better
* refactor: add helper for parsing env as list
* docs: adding todo for ugly direct getenv access
* test: railpack env var configuration options
* test: check version-less RAILPACK_PACKAGES parsing
* test: snapshot update
* feat: support install phase on shell script provider
allows for more advanced install processes
* docs: note that version-less mise packages are allowed in shell config
* docs: more shell provider examples
* docs: inline llm instructions into mise.toml
* fix: use containerd platform parsing and remove custom implementation
* refactor: use a helper to define the default platform when none is defined
* test: platform unit tests
* test: platform integration test
* refactor: simplify integration test assertions
* test: inline tests.json into platform integration tests
* refactor: move platform parsing inside BuildWithBuildkitClient
* test: merge platform tests into general integration tests
* test: update snapshot
* ci: add qemu to integration tests
* fix: hard fail if railpack.json cannot be parsed
* test: add shouldFail test.json expression
helpful if we expect the build to fail. There shouldn't be too many of these, but we'll need at least
a couple to make sure cases like railpack.json syntax errors hard fail.
* test: bad json syntax failure
* test: config file abs path, relative, and DNE cases
* refactor: move hujson helper into internal helpers
* fix: support abs config file path, fail if config file path does not exist
* fix: document relative config file path, no abs config file support
* fix: invalid config json
* test: snapshot update
* test: remove abs file config test
* test: remove custom java config
I know basically nothing about Java and after I fixed the syntax error which was causing this config file to not be picked up, this started failing. The proper Zulu version check which is the main purpose of this is still working fine so I think it's fine to remove these custom commands.
* fix: typo
* test: snapshot update
* build: add bin/ to $PATH for local railpack usage
this is helpful when needing or run a local `railpack` build, without mise,
to avoid injecting mise environment variables.
* fix: support NO_COLOR
* fix: enable MISE_VERBOSE when --verbose is enabled
* fix: case insensitive truthy environment vars
* docs: helpful railpack dev tips
* fix: show-plan not showing json output
regression from $schema addition
* refactor: all providers using a consistent local layer entrypoint
* refactor: add local filesystem through a consistent entrypoint
* fix: improved error message on invalid firstInput
* test: remove path argument from NewLocalLayer test
* test: failing workspace example with uv
* test: passing workspace example
* feat: detect uv workspaces
* test: add packaged uv example
* test: snapshot update
without this, you have to manually enable the bool to get a dumped llb.
I don't think it makes sense to enable this as a public flag at any point soon (or ever)
but for development having this available as a CLI flag will make life easier and
making it a hidden flag is more self-documenting to developers working with the project.