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 ( import (
"context" "context"
"fmt"
"os"
"runtime"
) )
// Options holds common generation options. // Options holds common generation options.
@ -65,3 +68,12 @@ func (r *Registry) Languages() []string {
} }
return langs 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) specDir := filepath.Dir(opts.SpecPath)
specName := filepath.Base(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", specDir+":/spec",
"-v", opts.OutputDir+":/out", "-v", opts.OutputDir+":/out",
"openapitools/openapi-generator-cli", "generate", "openapitools/openapi-generator-cli", "generate",
@ -77,6 +79,8 @@ func (g *GoGenerator) generateDocker(ctx context.Context, opts Options) error {
"-o", "/out", "-o", "/out",
"--additional-properties=packageName="+opts.PackageName, "--additional-properties=packageName="+opts.PackageName,
) )
cmd := exec.CommandContext(ctx, "docker", args...)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
return cmd.Run() return cmd.Run()

View file

@ -45,7 +45,9 @@ func (g *PHPGenerator) Generate(ctx context.Context, opts Options) error {
specDir := filepath.Dir(opts.SpecPath) specDir := filepath.Dir(opts.SpecPath)
specName := filepath.Base(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", specDir+":/spec",
"-v", opts.OutputDir+":/out", "-v", opts.OutputDir+":/out",
"openapitools/openapi-generator-cli", "generate", "openapitools/openapi-generator-cli", "generate",
@ -54,6 +56,8 @@ func (g *PHPGenerator) Generate(ctx context.Context, opts Options) error {
"-o", "/out", "-o", "/out",
"--additional-properties=invokerPackage="+opts.PackageName, "--additional-properties=invokerPackage="+opts.PackageName,
) )
cmd := exec.CommandContext(ctx, "docker", args...)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr 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) specDir := filepath.Dir(opts.SpecPath)
specName := filepath.Base(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", specDir+":/spec",
"-v", opts.OutputDir+":/out", "-v", opts.OutputDir+":/out",
"openapitools/openapi-generator-cli", "generate", "openapitools/openapi-generator-cli", "generate",
@ -70,6 +72,8 @@ func (g *PythonGenerator) generateDocker(ctx context.Context, opts Options) erro
"-o", "/out", "-o", "/out",
"--additional-properties=packageName="+opts.PackageName, "--additional-properties=packageName="+opts.PackageName,
) )
cmd := exec.CommandContext(ctx, "docker", args...)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
return cmd.Run() return cmd.Run()

View file

@ -87,7 +87,9 @@ func (g *TypeScriptGenerator) generateDocker(ctx context.Context, opts Options)
specDir := filepath.Dir(opts.SpecPath) specDir := filepath.Dir(opts.SpecPath)
specName := filepath.Base(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", specDir+":/spec",
"-v", opts.OutputDir+":/out", "-v", opts.OutputDir+":/out",
"openapitools/openapi-generator-cli", "generate", "openapitools/openapi-generator-cli", "generate",
@ -96,6 +98,8 @@ func (g *TypeScriptGenerator) generateDocker(ctx context.Context, opts Options)
"-o", "/out", "-o", "/out",
"--additional-properties=npmName="+opts.PackageName, "--additional-properties=npmName="+opts.PackageName,
) )
cmd := exec.CommandContext(ctx, "docker", args...)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr