fix(sdk): run Docker containers as current user to fix CI cleanup

Docker containers were creating files as root, causing Go test cleanup
to fail with "permission denied". Now passes --user flag on Unix systems
to run containers as the current user.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Snider 2026-02-01 04:01:40 +00:00
parent ebbe01c427
commit 25b73fa79e
5 changed files with 32 additions and 4 deletions

View file

@ -3,6 +3,9 @@ package generators
import (
"context"
"fmt"
"os"
"runtime"
)
// Options holds common generation options.
@ -65,3 +68,12 @@ func (r *Registry) Languages() []string {
}
return langs
}
// dockerUserArgs returns Docker --user args for the current user on Unix systems.
// On Windows, Docker handles permissions differently, so no args are returned.
func dockerUserArgs() []string {
if runtime.GOOS == "windows" {
return nil
}
return []string{"--user", fmt.Sprintf("%d:%d", os.Getuid(), os.Getgid())}
}

View file

@ -68,7 +68,9 @@ func (g *GoGenerator) generateDocker(ctx context.Context, opts Options) error {
specDir := filepath.Dir(opts.SpecPath)
specName := filepath.Base(opts.SpecPath)
cmd := exec.CommandContext(ctx, "docker", "run", "--rm",
args := []string{"run", "--rm"}
args = append(args, dockerUserArgs()...)
args = append(args,
"-v", specDir+":/spec",
"-v", opts.OutputDir+":/out",
"openapitools/openapi-generator-cli", "generate",
@ -77,6 +79,8 @@ func (g *GoGenerator) generateDocker(ctx context.Context, opts Options) error {
"-o", "/out",
"--additional-properties=packageName="+opts.PackageName,
)
cmd := exec.CommandContext(ctx, "docker", args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()

View file

@ -45,7 +45,9 @@ func (g *PHPGenerator) Generate(ctx context.Context, opts Options) error {
specDir := filepath.Dir(opts.SpecPath)
specName := filepath.Base(opts.SpecPath)
cmd := exec.CommandContext(ctx, "docker", "run", "--rm",
args := []string{"run", "--rm"}
args = append(args, dockerUserArgs()...)
args = append(args,
"-v", specDir+":/spec",
"-v", opts.OutputDir+":/out",
"openapitools/openapi-generator-cli", "generate",
@ -54,6 +56,8 @@ func (g *PHPGenerator) Generate(ctx context.Context, opts Options) error {
"-o", "/out",
"--additional-properties=invokerPackage="+opts.PackageName,
)
cmd := exec.CommandContext(ctx, "docker", args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

View file

@ -61,7 +61,9 @@ func (g *PythonGenerator) generateDocker(ctx context.Context, opts Options) erro
specDir := filepath.Dir(opts.SpecPath)
specName := filepath.Base(opts.SpecPath)
cmd := exec.CommandContext(ctx, "docker", "run", "--rm",
args := []string{"run", "--rm"}
args = append(args, dockerUserArgs()...)
args = append(args,
"-v", specDir+":/spec",
"-v", opts.OutputDir+":/out",
"openapitools/openapi-generator-cli", "generate",
@ -70,6 +72,8 @@ func (g *PythonGenerator) generateDocker(ctx context.Context, opts Options) erro
"-o", "/out",
"--additional-properties=packageName="+opts.PackageName,
)
cmd := exec.CommandContext(ctx, "docker", args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()

View file

@ -87,7 +87,9 @@ func (g *TypeScriptGenerator) generateDocker(ctx context.Context, opts Options)
specDir := filepath.Dir(opts.SpecPath)
specName := filepath.Base(opts.SpecPath)
cmd := exec.CommandContext(ctx, "docker", "run", "--rm",
args := []string{"run", "--rm"}
args = append(args, dockerUserArgs()...)
args = append(args,
"-v", specDir+":/spec",
"-v", opts.OutputDir+":/out",
"openapitools/openapi-generator-cli", "generate",
@ -96,6 +98,8 @@ func (g *TypeScriptGenerator) generateDocker(ctx context.Context, opts Options)
"-o", "/out",
"--additional-properties=npmName="+opts.PackageName,
)
cmd := exec.CommandContext(ctx, "docker", args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr