mirror of
https://github.com/mudler/luet.git
synced 2025-09-15 23:00:04 +00:00
Make docker image repositories actually working
Several changes are included: - Expose ensureDir in helpers, and call it in the Docker client. In other implementations that was handled by CopyFile behind the scenes, but that's not the case here - Create accessor in Artifact to create Artifact objects from files. This is handy when we have to carry over downloaded package content into caches when artifacts are already verified - Fix various issues around the imagePush flag, so now trees are pushed forcefully each time - Take into consideration the real artifact name when pushing single files in the docker image. This behavior should be changed eventually, because single files which aren't repository packages now are in its own docker image, but we should have just one that brings the required metadata alltogether.
This commit is contained in:
@@ -237,6 +237,10 @@ func (a *PackageArtifact) GetPath() string {
|
||||
return a.Path
|
||||
}
|
||||
|
||||
func (a *PackageArtifact) GetFileName() string {
|
||||
return path.Base(a.GetPath())
|
||||
}
|
||||
|
||||
func (a *PackageArtifact) SetPath(p string) {
|
||||
a.Path = p
|
||||
}
|
||||
@@ -247,6 +251,29 @@ FROM scratch
|
||||
COPY * /`
|
||||
}
|
||||
|
||||
// CreateArtifactForFile creates a new artifact from the given file
|
||||
func CreateArtifactForFile(s string, opts ...func(*PackageArtifact)) (*PackageArtifact, error) {
|
||||
|
||||
fileName := path.Base(s)
|
||||
archive, err := LuetCfg.GetSystem().TempDir("archive")
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "error met while creating tempdir for "+s)
|
||||
}
|
||||
defer os.RemoveAll(archive) // clean up
|
||||
helpers.CopyFile(s, filepath.Join(archive, fileName))
|
||||
artifact, err := LuetCfg.GetSystem().TempDir("artifact")
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "error met while creating tempdir for "+s)
|
||||
}
|
||||
a := &PackageArtifact{Path: filepath.Join(artifact, fileName)}
|
||||
|
||||
for _, o := range opts {
|
||||
o(a)
|
||||
}
|
||||
|
||||
return a, a.Compress(archive, 1)
|
||||
}
|
||||
|
||||
// GenerateFinalImage takes an artifact and builds a Docker image with its content
|
||||
func (a *PackageArtifact) GenerateFinalImage(imageName string, b CompilerBackend, keepPerms bool) (CompilerBackendOptions, error) {
|
||||
builderOpts := CompilerBackendOptions{}
|
||||
@@ -281,7 +308,9 @@ func (a *PackageArtifact) GenerateFinalImage(imageName string, b CompilerBackend
|
||||
return builderOpts, b.BuildImage(builderOpts)
|
||||
}
|
||||
|
||||
// Compress Archives and compress (TODO) to the artifact path
|
||||
// Compress is responsible to archive and compress to the artifact Path.
|
||||
// It accepts a source path, which is the content to be archived/compressed
|
||||
// and a concurrency parameter.
|
||||
func (a *PackageArtifact) Compress(src string, concurrency int) error {
|
||||
switch a.CompressionType {
|
||||
|
||||
|
Reference in New Issue
Block a user