mirror of
https://github.com/hanzoai/pack.git
synced 2026-09-30 23:43:13 +00:00
* 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]>
74 lines
1.9 KiB
Go
74 lines
1.9 KiB
Go
package buildkit
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestParseBuildArgs(t *testing.T) {
|
|
opts := map[string]string{
|
|
"build-arg:FOO": "bar",
|
|
"platform": "linux/amd64",
|
|
"build-arg:BAZ": "qux",
|
|
"filename": "Dockerfile",
|
|
}
|
|
|
|
got := parseBuildArgs(opts)
|
|
|
|
want := map[string]string{
|
|
"FOO": "bar",
|
|
"BAZ": "qux",
|
|
}
|
|
|
|
if len(got) != len(want) {
|
|
t.Errorf("got %d build args, want %d", len(got), len(want))
|
|
}
|
|
|
|
for k, v := range want {
|
|
if got[k] != v {
|
|
t.Errorf("build arg %q = %q, want %q", k, got[k], v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseCacheImports(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t.Run("empty opts", func(t *testing.T) {
|
|
imports, err := parseCacheImports(nil)
|
|
require.NoError(t, err)
|
|
require.Empty(t, imports)
|
|
})
|
|
|
|
t.Run("cache-imports JSON", func(t *testing.T) {
|
|
imports, err := parseCacheImports(map[string]string{
|
|
keyCacheImports: `[{"Type":"registry","Attrs":{"ref":"host.docker.internal:7890/node-bun:cache"}}]`,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Len(t, imports, 1)
|
|
require.Equal(t, "registry", imports[0].Type)
|
|
require.Equal(t, "host.docker.internal:7890/node-bun:cache", imports[0].Attrs["ref"])
|
|
})
|
|
|
|
t.Run("multiple cache-imports", func(t *testing.T) {
|
|
imports, err := parseCacheImports(map[string]string{
|
|
keyCacheImports: `[{"Type":"registry","Attrs":{"ref":"a:cache"}},{"Type":"gha","Attrs":{"scope":"my-scope"}}]`,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Len(t, imports, 2)
|
|
require.Equal(t, "registry", imports[0].Type)
|
|
require.Equal(t, "a:cache", imports[0].Attrs["ref"])
|
|
require.Equal(t, "gha", imports[1].Type)
|
|
require.Equal(t, "my-scope", imports[1].Attrs["scope"])
|
|
})
|
|
|
|
t.Run("invalid cache-imports JSON", func(t *testing.T) {
|
|
_, err := parseCacheImports(map[string]string{
|
|
keyCacheImports: `not-json`,
|
|
})
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), keyCacheImports)
|
|
})
|
|
}
|