mirror of
https://github.com/mudler/LocalAI.git
synced 2026-10-10 15:52:29 -04:00
* fix(oci): stage image downloads in a configured directory, not in /tmp
Problem:
- the image tar and its compressed layers staged in os.TempDir()
- /tmp is commonly a RAM-backed tmpfs far smaller than a backend image
- big installs failed with a full /tmp or silently ate RAM
Change:
- staging path resolved like the other storage paths
(LOCALAI_DOWNLOAD_STAGING_PATH, default ${basepath}/downloading),
threaded to the extractor as a download option
- every download works in its own subdirectory holding its tar and
layers: nothing shared between concurrent downloads, one removal
cleans a download up, a crash leaves one self-contained orphan
- callers that pass no staging directory keep the OS temp behavior
Assisted-by: Claude:claude-fable-5
Signed-off-by: Plamen K. Kosseff <p.kosseff@gmail.com>
* fix(oci): handle staging cleanup errors
Log staging cleanup failures to satisfy errcheck. Test extraction with an
unavailable OS temp directory and verify that staging is removed.
Assisted-by: Codex:GPT-6
Signed-off-by: Plamen K. Kosseff <p.kosseff@gmail.com>
---------
Signed-off-by: Plamen K. Kosseff <p.kosseff@gmail.com>
47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package oci_test
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"runtime"
|
|
|
|
"github.com/mudler/LocalAI/pkg/oci"
|
|
. "github.com/mudler/LocalAI/pkg/oci" // Update with your module path
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("OCI", func() {
|
|
|
|
Context("when template is loaded successfully", func() {
|
|
It("should evaluate the template correctly", func() {
|
|
if runtime.GOOS == "darwin" {
|
|
Skip("Skipping test on darwin")
|
|
}
|
|
imageName := "alpine"
|
|
img, err := GetImage(imageName, "", nil, nil)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
size, err := GetOCIImageSize(imageName, "", nil, nil)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(size).ToNot(Equal(int64(0)))
|
|
|
|
// Create tempdir
|
|
dir, err := os.MkdirTemp("", "example")
|
|
Expect(err).NotTo(HaveOccurred())
|
|
defer os.RemoveAll(dir)
|
|
|
|
err = ExtractOCIImage(context.TODO(), img, imageName, dir, "", nil)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
})
|
|
})
|
|
})
|
|
|
|
var _ = Describe("GetImageDigest", func() {
|
|
It("returns an error for an invalid image reference", func() {
|
|
_, err := oci.GetImageDigest("!!!invalid-ref!!!", "", nil, nil)
|
|
Expect(err).To(HaveOccurred())
|
|
})
|
|
})
|