Cache Go modules in platform builder

This commit is contained in:
npc0-hue
2026-08-20 10:01:26 +08:00
parent 7fec2da040
commit 585c32746e
10 changed files with 52 additions and 8 deletions
+11 -1
View File
@@ -97,6 +97,7 @@ func TestDockerDistributionBuilderReadinessNamesPlatformBuilderFailures(t *testi
func TestDockerDistributionBuilderKeepsSecretInIsolatedInput(t *testing.T) {
sourceDir := createBuilderSource(t)
workspaceDir := t.TempDir()
cacheDir := filepath.Join(t.TempDir(), "builder-cache")
secret := "component-auth-key-that-must-not-leave-input"
var dockerArgs []string
builder := NewDockerDistributionBuilder(DockerDistributionBuilderConfig{
@@ -104,6 +105,7 @@ func TestDockerDistributionBuilderKeepsSecretInIsolatedInput(t *testing.T) {
Image: "browser-platform-distribution-builder:1.0.0",
SourceDir: sourceDir,
WorkspaceDir: workspaceDir,
CacheDir: cacheDir,
CommandRunner: func(_ context.Context, name string, args ...string) ([]byte, error) {
if name != "docker-test" {
t.Fatalf("unexpected container runtime %q", name)
@@ -114,6 +116,11 @@ func TestDockerDistributionBuilderKeepsSecretInIsolatedInput(t *testing.T) {
dockerArgs = append([]string(nil), args...)
inputDir := builderMountHostPath(t, args, "/workspace/input:ro")
outputDir := builderMountHostPath(t, args, "/workspace/output")
goBuildCacheDir := builderMountHostPath(t, args, "/workspace/cache/go-build")
goModCacheDir := builderMountHostPath(t, args, "/workspace/cache/go-mod")
if goBuildCacheDir != filepath.Join(cacheDir, "go-build") || goModCacheDir != filepath.Join(cacheDir, "go-mod") {
t.Fatalf("unexpected Go cache mounts: build=%q mod=%q", goBuildCacheDir, goModCacheDir)
}
authPath := filepath.Join(inputDir, "auth-key")
payload, err := os.ReadFile(authPath)
if err != nil {
@@ -174,7 +181,7 @@ func TestDockerDistributionBuilderKeepsSecretInIsolatedInput(t *testing.T) {
if strings.Contains(joinedArgs, secret) {
t.Fatal("component auth key leaked into Docker arguments or environment")
}
for _, required := range []string{"--read-only", "--pull\x00never", sourceDir + ":/workspace/source:ro", ":/workspace/input:ro", ":/workspace/output"} {
for _, required := range []string{"--read-only", "--pull\x00never", sourceDir + ":/workspace/source:ro", ":/workspace/input:ro", ":/workspace/output", cacheDir + "/go-build:/workspace/cache/go-build", cacheDir + "/go-mod:/workspace/cache/go-mod", "GOCACHE=/workspace/cache/go-build", "GOMODCACHE=/workspace/cache/go-mod"} {
if !strings.Contains(joinedArgs, required) {
t.Fatalf("Docker arguments do not contain required isolation %q: %q", required, joinedArgs)
}
@@ -183,6 +190,9 @@ func TestDockerDistributionBuilderKeepsSecretInIsolatedInput(t *testing.T) {
if _, err := os.Stat(jobDir); !errors.Is(err, os.ErrNotExist) {
t.Fatalf("per-job workspace was not removed: %v", err)
}
if _, err := os.Stat(filepath.Join(cacheDir, "go-mod")); err != nil {
t.Fatalf("persistent Go module cache was not retained: %v", err)
}
}
func TestDockerDistributionBuilderStreamsProgressMarkers(t *testing.T) {