Skip to content

Commit a6c8cab

Browse files
committed
feat: pin package versions in build scripts for consistency
1 parent edc4015 commit a6c8cab

File tree

4 files changed

+69
-97
lines changed

4 files changed

+69
-97
lines changed

Makefile

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,15 @@ DOCKER_BUILD_ARGS := \
2525
# Test configuration
2626
BUILD_DMR ?= 1
2727

28-
# Main targets
29-
.PHONY: build run clean test integration-tests test-docker-ce-installation docker-build docker-build-multiplatform docker-run docker-build-vllm docker-run-vllm docker-build-sglang docker-run-sglang docker-run-impl help validate validate-all lint docker-build-diffusers docker-run-diffusers vllm-metal-build vllm-metal-install vllm-metal-dev vllm-metal-clean diffusers-build diffusers-install diffusers-dev diffusers-clean build-cli install-cli
28+
# Phony targets grouped by category
29+
.PHONY: build run clean test integration-tests build-cli install-cli
30+
.PHONY: validate validate-all lint help
31+
.PHONY: docker-build docker-build-multiplatform docker-run docker-run-impl
32+
.PHONY: docker-build-vllm docker-run-vllm docker-build-sglang docker-run-sglang
33+
.PHONY: docker-build-diffusers docker-run-diffusers
34+
.PHONY: test-docker-ce-installation
35+
.PHONY: vllm-metal-build vllm-metal-install vllm-metal-dev vllm-metal-clean
36+
.PHONY: diffusers-build diffusers-install diffusers-dev diffusers-clean
3037
# Default target
3138
.DEFAULT_GOAL := build
3239

pkg/inference/backends/diffusers/diffusers.go

Lines changed: 5 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ func (d *diffusers) downloadAndExtract(ctx context.Context, _ *http.Client) erro
174174
// Copy the extracted self-contained Python installation directly to install dir
175175
// (the image contains /diffusers/ with bin/, lib/, etc.)
176176
diffusersDir := filepath.Join(extractDir, "diffusers")
177-
if err := copyDir(diffusersDir, d.installDir); err != nil {
177+
if err := utils.CopyDir(diffusersDir, d.installDir); err != nil {
178178
return fmt.Errorf("failed to copy to install dir: %w", err)
179179
}
180180

@@ -188,54 +188,11 @@ func (d *diffusers) downloadAndExtract(ctx context.Context, _ *http.Client) erro
188188
return nil
189189
}
190190

191-
// copyDir recursively copies a directory.
192-
func copyDir(src, dst string) error {
193-
return filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
194-
if err != nil {
195-
return err
196-
}
197-
198-
relPath, err := filepath.Rel(src, path)
199-
if err != nil {
200-
return err
201-
}
202-
dstPath := filepath.Join(dst, relPath)
203-
204-
if info.IsDir() {
205-
return os.MkdirAll(dstPath, info.Mode())
206-
}
207-
208-
if info.Mode()&os.ModeSymlink == os.ModeSymlink {
209-
link, err := os.Readlink(path)
210-
if err != nil {
211-
return err
212-
}
213-
return os.Symlink(link, dstPath)
214-
}
215-
216-
if err := os.MkdirAll(filepath.Dir(dstPath), 0755); err != nil {
217-
return err
218-
}
219-
220-
srcFile, err := os.Open(path)
221-
if err != nil {
222-
return err
223-
}
224-
defer srcFile.Close()
225-
226-
dstFile, err := os.OpenFile(dstPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, info.Mode())
227-
if err != nil {
228-
return err
229-
}
230-
defer dstFile.Close()
231-
232-
_, err = dstFile.ReadFrom(srcFile)
233-
return err
234-
})
235-
}
236-
191+
// verifyInstallation checks that the diffusers Python package can be imported.
192+
// Note: d.pythonPath is not user-controlled — it is set internally by Install()
193+
// to the bundled Python binary path, so the exec.Command usage is safe.
237194
func (d *diffusers) verifyInstallation(ctx context.Context) error {
238-
cmd := exec.CommandContext(ctx, d.pythonPath, "-c", "import diffusers")
195+
cmd := exec.CommandContext(ctx, d.pythonPath, "-c", "import diffusers") //nolint:gosec // pythonPath is set internally by Install, not user input
239196
if err := cmd.Run(); err != nil {
240197
d.status = "import failed"
241198
return fmt.Errorf("diffusers import failed: %w", err)

pkg/inference/backends/vllm/vllm_metal.go

Lines changed: 2 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/docker/model-runner/pkg/inference/models"
1919
"github.com/docker/model-runner/pkg/inference/platform"
2020
"github.com/docker/model-runner/pkg/internal/dockerhub"
21+
"github.com/docker/model-runner/pkg/internal/utils"
2122
"github.com/docker/model-runner/pkg/logging"
2223
)
2324

@@ -164,7 +165,7 @@ func (v *vllmMetal) downloadAndExtract(ctx context.Context, _ *http.Client) erro
164165
// Copy the extracted self-contained Python installation directly to install dir
165166
// (the image contains /vllm-metal/ with bin/, lib/, etc.)
166167
vllmMetalDir := filepath.Join(extractDir, "vllm-metal")
167-
if err := copyDir(vllmMetalDir, v.installDir); err != nil {
168+
if err := utils.CopyDir(vllmMetalDir, v.installDir); err != nil {
168169
return fmt.Errorf("failed to copy to install dir: %w", err)
169170
}
170171

@@ -178,52 +179,6 @@ func (v *vllmMetal) downloadAndExtract(ctx context.Context, _ *http.Client) erro
178179
return nil
179180
}
180181

181-
// copyDir recursively copies a directory.
182-
func copyDir(src, dst string) error {
183-
return filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
184-
if err != nil {
185-
return err
186-
}
187-
188-
relPath, err := filepath.Rel(src, path)
189-
if err != nil {
190-
return err
191-
}
192-
dstPath := filepath.Join(dst, relPath)
193-
194-
if info.IsDir() {
195-
return os.MkdirAll(dstPath, info.Mode())
196-
}
197-
198-
if info.Mode()&os.ModeSymlink == os.ModeSymlink {
199-
link, err := os.Readlink(path)
200-
if err != nil {
201-
return err
202-
}
203-
return os.Symlink(link, dstPath)
204-
}
205-
206-
if err := os.MkdirAll(filepath.Dir(dstPath), 0755); err != nil {
207-
return err
208-
}
209-
210-
srcFile, err := os.Open(path)
211-
if err != nil {
212-
return err
213-
}
214-
defer srcFile.Close()
215-
216-
dstFile, err := os.OpenFile(dstPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, info.Mode())
217-
if err != nil {
218-
return err
219-
}
220-
defer dstFile.Close()
221-
222-
_, err = dstFile.ReadFrom(srcFile)
223-
return err
224-
})
225-
}
226-
227182
func (v *vllmMetal) verifyInstallation(ctx context.Context) error {
228183
cmd := exec.CommandContext(ctx, v.pythonPath, "-c", "import vllm_metal")
229184
if err := cmd.Run(); err != nil {

pkg/internal/utils/copydir.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package utils
2+
3+
import (
4+
"os"
5+
"path/filepath"
6+
)
7+
8+
// CopyDir recursively copies a directory tree from src to dst,
9+
// preserving file modes and symlinks.
10+
func CopyDir(src, dst string) error {
11+
return filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
12+
if err != nil {
13+
return err
14+
}
15+
16+
relPath, err := filepath.Rel(src, path)
17+
if err != nil {
18+
return err
19+
}
20+
dstPath := filepath.Join(dst, relPath)
21+
22+
if info.IsDir() {
23+
return os.MkdirAll(dstPath, info.Mode())
24+
}
25+
26+
if info.Mode()&os.ModeSymlink == os.ModeSymlink {
27+
link, err := os.Readlink(path)
28+
if err != nil {
29+
return err
30+
}
31+
return os.Symlink(link, dstPath)
32+
}
33+
34+
if err := os.MkdirAll(filepath.Dir(dstPath), 0755); err != nil {
35+
return err
36+
}
37+
38+
srcFile, err := os.Open(path)
39+
if err != nil {
40+
return err
41+
}
42+
defer srcFile.Close()
43+
44+
dstFile, err := os.OpenFile(dstPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, info.Mode())
45+
if err != nil {
46+
return err
47+
}
48+
defer dstFile.Close()
49+
50+
_, err = dstFile.ReadFrom(srcFile)
51+
return err
52+
})
53+
}

0 commit comments

Comments
 (0)