mirror of
https://github.com/mudler/luet.git
synced 2025-09-02 15:54:39 +00:00
Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
5082749e90 | ||
|
ce169f49af | ||
|
921869d04c | ||
|
8e1a457bf1 |
@@ -40,7 +40,7 @@ var Verbose bool
|
|||||||
var LockedCommands = []string{"install", "uninstall", "upgrade"}
|
var LockedCommands = []string{"install", "uninstall", "upgrade"}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
LuetCLIVersion = "0.9.17"
|
LuetCLIVersion = "0.9.19"
|
||||||
LuetEnvPrefix = "LUET"
|
LuetEnvPrefix = "LUET"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -264,8 +264,16 @@ func (cs *LuetCompiler) unpackFs(rootfs string, concurrency int, p CompilationSp
|
|||||||
|
|
||||||
func (cs *LuetCompiler) unpackDelta(rootfs string, concurrency int, keepPermissions bool, p CompilationSpec, builderOpts, runnerOpts CompilerBackendOptions) (Artifact, error) {
|
func (cs *LuetCompiler) unpackDelta(rootfs string, concurrency int, keepPermissions bool, p CompilationSpec, builderOpts, runnerOpts CompilerBackendOptions) (Artifact, error) {
|
||||||
pkgTag := ":package: " + p.GetPackage().HumanReadableString()
|
pkgTag := ":package: " + p.GetPackage().HumanReadableString()
|
||||||
|
if cs.Options.PullFirst && !cs.Backend.ImageExists(builderOpts.ImageName) && cs.Backend.ImageAvailable(builderOpts.ImageName) {
|
||||||
|
err := cs.Backend.DownloadImage(builderOpts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "Could not pull image")
|
||||||
|
}
|
||||||
|
} else if !cs.Backend.ImageExists(builderOpts.ImageName) {
|
||||||
|
return nil, errors.New("No image found for " + builderOpts.ImageName)
|
||||||
|
}
|
||||||
if err := cs.Backend.ExportImage(builderOpts); err != nil {
|
if err := cs.Backend.ExportImage(builderOpts); err != nil {
|
||||||
return nil, errors.Wrap(err, "Could not export image")
|
return nil, errors.Wrap(err, "Could not export image"+builderOpts.ImageName)
|
||||||
}
|
}
|
||||||
if !cs.Options.KeepImageExport {
|
if !cs.Options.KeepImageExport {
|
||||||
defer os.Remove(builderOpts.Destination)
|
defer os.Remove(builderOpts.Destination)
|
||||||
@@ -472,13 +480,13 @@ func (cs *LuetCompiler) genArtifact(p CompilationSpec, builderOpts, runnerOpts C
|
|||||||
// Take content of container as a base for our package files
|
// Take content of container as a base for our package files
|
||||||
artifact, err = cs.unpackFs(rootfs, concurrency, p)
|
artifact, err = cs.unpackFs(rootfs, concurrency, p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "Error met while creating package archive")
|
return nil, errors.Wrap(err, "Error met while extracting image")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Generate delta between the two images
|
// Generate delta between the two images
|
||||||
artifact, err = cs.unpackDelta(rootfs, concurrency, keepPermissions, p, builderOpts, runnerOpts)
|
artifact, err = cs.unpackDelta(rootfs, concurrency, keepPermissions, p, builderOpts, runnerOpts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "Error met while creating package archive")
|
return nil, errors.Wrap(err, "Error met while generating delta")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -510,8 +518,7 @@ func (cs *LuetCompiler) compileWithImage(image, buildertaggedImage, packageImage
|
|||||||
Debug("Artifact reloaded from YAML. Skipping build")
|
Debug("Artifact reloaded from YAML. Skipping build")
|
||||||
return art, err
|
return art, err
|
||||||
}
|
}
|
||||||
available := cs.Backend.ImageAvailable(packageImage)
|
if cs.Options.PullFirst && cs.Backend.ImageAvailable(packageImage) {
|
||||||
if exists || available {
|
|
||||||
return &PackageArtifact{}, nil
|
return &PackageArtifact{}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -330,6 +330,9 @@ func (db *InMemoryDatabase) FindPackages(p Package) (Packages, error) {
|
|||||||
// Provides: Treat as the replaced package here
|
// Provides: Treat as the replaced package here
|
||||||
if provided, err := db.getProvide(p); err == nil {
|
if provided, err := db.getProvide(p); err == nil {
|
||||||
p = provided
|
p = provided
|
||||||
|
if !provided.IsSelector() {
|
||||||
|
return Packages{provided}, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
db.Lock()
|
db.Lock()
|
||||||
|
@@ -98,30 +98,150 @@ var _ = Describe("Database", func() {
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
It("Provides replaces definitions", func() {
|
Context("Provides", func() {
|
||||||
db := NewInMemoryDatabase(false)
|
|
||||||
a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
|
||||||
a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{})
|
|
||||||
a3 := NewPackage("A", "1.3", []*DefaultPackage{}, []*DefaultPackage{})
|
|
||||||
|
|
||||||
a3.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}})
|
It("replaces definitions", func() {
|
||||||
Expect(a3.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}}))
|
db := NewInMemoryDatabase(false)
|
||||||
|
a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
a3 := NewPackage("A", "1.3", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
_, err := db.CreatePackage(a)
|
a3.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}})
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(a3.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}}))
|
||||||
|
|
||||||
_, err = db.CreatePackage(a1)
|
_, err := db.CreatePackage(a)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
_, err = db.CreatePackage(a3)
|
_, err = db.CreatePackage(a1)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
_, err = db.CreatePackage(a3)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
pack, err := db.FindPackage(s)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(pack).To(Equal(a3))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("replaces definitions", func() {
|
||||||
|
db := NewInMemoryDatabase(false)
|
||||||
|
a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
a3 := NewPackage("A", "1.3", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
a3.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}})
|
||||||
|
Expect(a3.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}}))
|
||||||
|
|
||||||
|
_, err := db.CreatePackage(a)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
_, err = db.CreatePackage(a1)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
_, err = db.CreatePackage(a3)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
packs, err := db.FindPackages(s)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(packs).To(ContainElement(a3))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("replaces definitions", func() {
|
||||||
|
db := NewInMemoryDatabase(false)
|
||||||
|
a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
z := NewPackage("Z", "1.3", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
z.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}})
|
||||||
|
Expect(z.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}}))
|
||||||
|
|
||||||
|
_, err := db.CreatePackage(a)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
_, err = db.CreatePackage(a1)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
_, err = db.CreatePackage(z)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
packs, err := db.FindPackages(s)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(packs).To(ContainElement(z))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("replaces definitions of unexisting packages", func() {
|
||||||
|
db := NewInMemoryDatabase(false)
|
||||||
|
a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
z := NewPackage("Z", "1.3", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
z.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}})
|
||||||
|
Expect(z.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}}))
|
||||||
|
|
||||||
|
_, err := db.CreatePackage(a1)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
_, err = db.CreatePackage(z)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
packs, err := db.FindPackages(s)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(packs).To(ContainElement(z))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("replaces definitions of a required package", func() {
|
||||||
|
db := NewInMemoryDatabase(false)
|
||||||
|
|
||||||
|
c := NewPackage("C", "1.1", []*DefaultPackage{{Name: "A", Category: "", Version: ">=0"}}, []*DefaultPackage{})
|
||||||
|
z := NewPackage("Z", "1.3", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
z.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}})
|
||||||
|
Expect(z.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}}))
|
||||||
|
|
||||||
|
_, err := db.CreatePackage(z)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
_, err = db.CreatePackage(c)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
packs, err := db.FindPackages(s)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(packs).To(ContainElement(z))
|
||||||
|
})
|
||||||
|
|
||||||
|
When("Searching with selectors", func() {
|
||||||
|
It("replaces definitions of a required package", func() {
|
||||||
|
db := NewInMemoryDatabase(false)
|
||||||
|
|
||||||
|
c := NewPackage("C", "1.1", []*DefaultPackage{{Name: "A", Category: "", Version: ">=0"}}, []*DefaultPackage{})
|
||||||
|
z := NewPackage("Z", "1.3", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
z.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}})
|
||||||
|
Expect(z.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}}))
|
||||||
|
|
||||||
|
_, err := db.CreatePackage(z)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
_, err = db.CreatePackage(c)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
s := NewPackage("A", ">=1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
packs, err := db.FindPackages(s)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(packs).To(ContainElement(z))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
pack, err := db.FindPackage(s)
|
|
||||||
Expect(err).ToNot(HaveOccurred())
|
|
||||||
Expect(pack).To(Equal(a3))
|
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user