Skip to content

Commit d953630

Browse files
authored
Add multi-stage build support. (github#138)
1 parent 5d49efd commit d953630

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

cmd/build/main.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,14 @@ func run(ctx context.Context, name string, listTools bool, pullCommunity bool) e
8484

8585
func buildDockerEnv(additionalEnv ...string) []string {
8686
env := []string{"PATH=" + os.Getenv("PATH")}
87-
87+
8888
// On Windows, Docker also needs ProgramW6432
8989
// See https://github.com/docker/mcp-registry/issues/79 for more details
9090
programW6432 := os.Getenv("ProgramW6432")
9191
if runtime.GOOS == "windows" && programW6432 != "" {
9292
env = append(env, "ProgramW6432="+programW6432)
9393
}
94-
94+
9595
return append(env, additionalEnv...)
9696
}
9797

@@ -127,11 +127,21 @@ func buildMcpImage(ctx context.Context, server servers.Server) error {
127127
var cmd *exec.Cmd
128128
token := os.Getenv("GITHUB_TOKEN")
129129

130+
buildArgs := []string{
131+
"-f", server.GetDockerfile(), "-t", "check", "-t", server.Image, "--label", "org.opencontainers.image.revision=" + sha,
132+
}
133+
134+
if server.Source.BuildTarget != "" {
135+
buildArgs = append(buildArgs, "--target", server.Source.BuildTarget)
136+
}
137+
138+
buildArgs = append(buildArgs, gitURL)
139+
130140
if token != "" {
131-
cmd = exec.CommandContext(ctx, "docker", "buildx", "build", "--secret", "id=GIT_AUTH_TOKEN", "-f", server.GetDockerfile(), "-t", "check", "-t", server.Image, "--label", "org.opencontainers.image.revision="+sha, gitURL)
141+
cmd = exec.CommandContext(ctx, "docker", append([]string{"buildx", "build", "--secret", "id=GIT_AUTH_TOKEN"}, buildArgs...)...)
132142
cmd.Env = buildDockerEnv("GIT_AUTH_TOKEN=" + token)
133143
} else {
134-
cmd = exec.CommandContext(ctx, "docker", "buildx", "build", "-f", server.GetDockerfile(), "-t", "check", "-t", server.Image, "--label", "org.opencontainers.image.revision="+sha, gitURL)
144+
cmd = exec.CommandContext(ctx, "docker", append([]string{"buildx", "build"}, buildArgs...)...)
135145
cmd.Env = buildDockerEnv()
136146
}
137147

pkg/servers/types.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,12 @@ type About struct {
7979
}
8080

8181
type Source struct {
82-
Project string `yaml:"project,omitempty" json:"project,omitempty"`
83-
Upstream string `yaml:"upstream,omitempty" json:"upstream,omitempty"`
84-
Branch string `yaml:"branch,omitempty" json:"branch,omitempty"`
85-
Directory string `yaml:"directory,omitempty" json:"directory,omitempty"`
86-
Dockerfile string `yaml:"dockerfile,omitempty" json:"dockerfile,omitempty"`
82+
Project string `yaml:"project,omitempty" json:"project,omitempty"`
83+
Upstream string `yaml:"upstream,omitempty" json:"upstream,omitempty"`
84+
Branch string `yaml:"branch,omitempty" json:"branch,omitempty"`
85+
Directory string `yaml:"directory,omitempty" json:"directory,omitempty"`
86+
Dockerfile string `yaml:"dockerfile,omitempty" json:"dockerfile,omitempty"`
87+
BuildTarget string `yaml:"buildTarget,omitempty" json:"buildTarget,omitempty"`
8788
}
8889

8990
type Run struct {

0 commit comments

Comments
 (0)