mirror of
https://github.com/mudler/luet.git
synced 2025-09-07 18:20:19 +00:00
Add values interpolation inheritance test
This commit is contained in:
@@ -956,12 +956,12 @@ func (cs *LuetCompiler) FromPackage(p pkg.Package) (*compilerspec.LuetCompilatio
|
|||||||
|
|
||||||
opts := options.Compiler{}
|
opts := options.Compiler{}
|
||||||
|
|
||||||
artifactMetadataFile := filepath.Join(p.GetTreeDir(), p.GetMetadataFilePath())
|
artifactMetadataFile := filepath.Join(p.GetTreeDir(), "..", p.GetMetadataFilePath())
|
||||||
|
Debug("Checking if metadata file is present", artifactMetadataFile)
|
||||||
if fi, err := os.Stat(artifactMetadataFile); err == nil {
|
if _, err := os.Stat(artifactMetadataFile); err == nil {
|
||||||
f, err := os.Open(fi.Name())
|
f, err := os.Open(artifactMetadataFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "could not open %s", fi.Name())
|
return nil, errors.Wrapf(err, "could not open %s", artifactMetadataFile)
|
||||||
}
|
}
|
||||||
dat, err := ioutil.ReadAll(f)
|
dat, err := ioutil.ReadAll(f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -972,11 +972,14 @@ func (cs *LuetCompiler) FromPackage(p pkg.Package) (*compilerspec.LuetCompilatio
|
|||||||
return nil, errors.Wrap(err, "could not decode package from yaml")
|
return nil, errors.Wrap(err, "could not decode package from yaml")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Debug("Read build options:", art.CompileSpec.BuildOptions)
|
||||||
opts = art.CompileSpec.BuildOptions
|
opts = art.CompileSpec.BuildOptions
|
||||||
opts.PushImageRepository = ""
|
opts.PushImageRepository = ""
|
||||||
|
|
||||||
} else if !os.IsNotExist(err) {
|
} else if !os.IsNotExist(err) {
|
||||||
Debug("error reading already existing artifact metadata file: ", err.Error())
|
Debug("error reading already existing artifact metadata file: ", err.Error())
|
||||||
|
} else if os.IsNotExist(err) {
|
||||||
|
Debug("metadata file not present, skipping", artifactMetadataFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes, err := cs.templatePackage(opts.BuildValues, pack)
|
bytes, err := cs.templatePackage(opts.BuildValues, pack)
|
||||||
|
@@ -42,6 +42,10 @@ func buildPackageIndex(path string, db pkg.PackageDatabase) ([]*artifact.Package
|
|||||||
|
|
||||||
var art []*artifact.PackageArtifact
|
var art []*artifact.PackageArtifact
|
||||||
var ff = func(currentpath string, info os.FileInfo, err error) error {
|
var ff = func(currentpath string, info os.FileInfo, err error) error {
|
||||||
|
if err != nil {
|
||||||
|
Debug("Failed walking", err.Error())
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if !strings.HasSuffix(info.Name(), ".metadata.yaml") {
|
if !strings.HasSuffix(info.Name(), ".metadata.yaml") {
|
||||||
return nil // Skip with no errors
|
return nil // Skip with no errors
|
||||||
|
@@ -117,6 +117,8 @@ type Package interface {
|
|||||||
GetMetadataFilePath() string
|
GetMetadataFilePath() string
|
||||||
SetTreeDir(s string)
|
SetTreeDir(s string)
|
||||||
GetTreeDir() string
|
GetTreeDir() string
|
||||||
|
|
||||||
|
JSON() ([]byte, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Tree interface {
|
type Tree interface {
|
||||||
@@ -245,7 +247,7 @@ type DefaultPackage struct {
|
|||||||
|
|
||||||
Labels map[string]string `json:"labels,omitempty"` // Affects YAML field names too.
|
Labels map[string]string `json:"labels,omitempty"` // Affects YAML field names too.
|
||||||
|
|
||||||
treeDir string
|
TreeDir string `json:"treedir,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// State represent the package state
|
// State represent the package state
|
||||||
@@ -263,10 +265,10 @@ func NewPackage(name, version string, requires []*DefaultPackage, conflicts []*D
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *DefaultPackage) SetTreeDir(s string) {
|
func (p *DefaultPackage) SetTreeDir(s string) {
|
||||||
p.treeDir = s
|
p.TreeDir = s
|
||||||
}
|
}
|
||||||
func (p *DefaultPackage) GetTreeDir() string {
|
func (p *DefaultPackage) GetTreeDir() string {
|
||||||
return p.treeDir
|
return p.TreeDir
|
||||||
}
|
}
|
||||||
func (p *DefaultPackage) String() string {
|
func (p *DefaultPackage) String() string {
|
||||||
b, err := p.JSON()
|
b, err := p.JSON()
|
||||||
|
@@ -181,6 +181,121 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
testBuildWithNoTree3() {
|
||||||
|
cat <<EOF > $tmpdir/default.yaml
|
||||||
|
bb: "newinterpolation"
|
||||||
|
foo: "sq"
|
||||||
|
EOF
|
||||||
|
mkdir $tmpdir/testbuild3
|
||||||
|
mkdir $tmpdir/emptytree
|
||||||
|
luet build --from-repositories --values $tmpdir/default.yaml --tree $tmpdir/emptytree --config $tmpdir/luet.yaml test/c --destination $tmpdir/testbuild3 --compression gzip --all
|
||||||
|
buildst=$?
|
||||||
|
assertEquals 'builds successfully' "$buildst" "0"
|
||||||
|
assertTrue 'create package B' "[ -e '$tmpdir/testbuild3/b-distro-0.3.package.tar.gz' ]"
|
||||||
|
assertTrue 'create package A' "[ -e '$tmpdir/testbuild3/a-distro-0.1.package.tar.gz' ]"
|
||||||
|
assertTrue 'create package C' "[ -e '$tmpdir/testbuild3/c-distro-0.3.package.tar.gz' ]"
|
||||||
|
assertTrue 'create package foo' "[ -e '$tmpdir/testbuild3/foo-test-1.1.package.tar.gz' ]"
|
||||||
|
}
|
||||||
|
|
||||||
|
testRepo3() {
|
||||||
|
assertTrue 'no repository' "[ ! -e '$tmpdir/testbuild3/repository.yaml' ]"
|
||||||
|
luet create-repo --config $tmpdir/luet.yaml --from-repositories --tree $tmpdir/emptytree \
|
||||||
|
--output $tmpdir/testbuild3 \
|
||||||
|
--packages $tmpdir/testbuild3 \
|
||||||
|
--name "test" \
|
||||||
|
--descr "Test Repo" \
|
||||||
|
--urls $tmpdir/testrootfs \
|
||||||
|
--type disk
|
||||||
|
|
||||||
|
createst=$?
|
||||||
|
assertEquals 'create repo successfully' "$createst" "0"
|
||||||
|
assertTrue 'create repository' "[ -e '$tmpdir/testbuild3/repository.yaml' ]"
|
||||||
|
}
|
||||||
|
|
||||||
|
testInstall3() {
|
||||||
|
mkdir $tmpdir/testrootfs3
|
||||||
|
|
||||||
|
cat <<EOF > $tmpdir/luet2.yaml
|
||||||
|
general:
|
||||||
|
debug: true
|
||||||
|
system:
|
||||||
|
rootfs: $tmpdir/testrootfs3
|
||||||
|
database_path: "/"
|
||||||
|
database_engine: "boltdb"
|
||||||
|
config_from_host: true
|
||||||
|
repositories:
|
||||||
|
- name: "main"
|
||||||
|
type: "disk"
|
||||||
|
enable: true
|
||||||
|
urls:
|
||||||
|
- "$tmpdir/testbuild3"
|
||||||
|
EOF
|
||||||
|
luet install -y --config $tmpdir/luet2.yaml distro/a
|
||||||
|
installst=$?
|
||||||
|
assertEquals 'install test successfully' "$installst" "0"
|
||||||
|
|
||||||
|
assertTrue 'package installed A' "[ -e '$tmpdir/testrootfs3/a' ]"
|
||||||
|
# Build time can interpolate on fields which aren't package properties.
|
||||||
|
assertTrue 'extra field on A' "[ -e '$tmpdir/testrootfs3/build-extra-sq' ]"
|
||||||
|
assertTrue 'package installed A interpolated with values' "[ -e '$tmpdir/testrootfs3/a-newinterpolation' ]"
|
||||||
|
# Finalizers can interpolate only on package field. No extra fields are allowed at this time.
|
||||||
|
assertTrue 'finalizer executed on A' "[ -e '$tmpdir/testrootfs3/finalize-a' ]"
|
||||||
|
|
||||||
|
installed=$(luet --config $tmpdir/luet2.yaml search --installed .)
|
||||||
|
searchst=$?
|
||||||
|
assertEquals 'search exists successfully' "$searchst" "0"
|
||||||
|
|
||||||
|
assertContains 'contains distro/a-0.1' "$installed" 'distro/a-0.1'
|
||||||
|
|
||||||
|
luet uninstall -y --config $tmpdir/luet2.yaml distro/a
|
||||||
|
installst=$?
|
||||||
|
assertEquals 'install test successfully' "$installst" "0"
|
||||||
|
|
||||||
|
# We do the same check for the others
|
||||||
|
luet install -y --config $tmpdir/luet2.yaml distro/b
|
||||||
|
installst=$?
|
||||||
|
assertEquals 'install test successfully' "$installst" "0"
|
||||||
|
|
||||||
|
assertTrue 'package installed B' "[ -e '$tmpdir/testrootfs3/b' ]"
|
||||||
|
assertTrue 'package installed B interpolated with values' "[ -e '$tmpdir/testrootfs3/b-newinterpolation' ]"
|
||||||
|
assertTrue 'extra field on B' "[ -e '$tmpdir/testrootfs3/build-extra-sq' ]"
|
||||||
|
assertTrue 'finalizer executed on B' "[ -e '$tmpdir/testrootfs3/finalize-b' ]"
|
||||||
|
installed=$(luet --config $tmpdir/luet2.yaml search --installed .)
|
||||||
|
searchst=$?
|
||||||
|
assertEquals 'search exists successfully' "$searchst" "0"
|
||||||
|
|
||||||
|
assertContains 'contains distro/b-0.3' "$installed" 'distro/b-0.3'
|
||||||
|
|
||||||
|
luet uninstall -y --config $tmpdir/luet2.yaml distro/b
|
||||||
|
installst=$?
|
||||||
|
assertEquals 'install test successfully' "$installst" "0"
|
||||||
|
|
||||||
|
luet install -y --config $tmpdir/luet2.yaml distro/c
|
||||||
|
installst=$?
|
||||||
|
assertEquals 'install test successfully' "$installst" "0"
|
||||||
|
|
||||||
|
assertTrue 'package installed C' "[ -e '$tmpdir/testrootfs3/c' ]"
|
||||||
|
assertTrue 'extra field on C' "[ -e '$tmpdir/testrootfs3/build-extra-sq' ]"
|
||||||
|
assertTrue 'package installed C interpolated with values' "[ -e '$tmpdir/testrootfs3/c-newinterpolation' ]"
|
||||||
|
assertTrue 'finalizer executed on C' "[ -e '$tmpdir/testrootfs3/finalize-c' ]"
|
||||||
|
|
||||||
|
installed=$(luet --config $tmpdir/luet2.yaml search --installed .)
|
||||||
|
searchst=$?
|
||||||
|
assertEquals 'search exists successfully' "$searchst" "0"
|
||||||
|
|
||||||
|
assertContains 'contains distro/c-0.3' "$installed" 'distro/c-0.3'
|
||||||
|
|
||||||
|
luet uninstall -y --config $tmpdir/luet2.yaml distro/c
|
||||||
|
installst=$?
|
||||||
|
assertEquals 'install test successfully' "$installst" "0"
|
||||||
|
|
||||||
|
luet install -y --config $tmpdir/luet2.yaml test/foo
|
||||||
|
installst=$?
|
||||||
|
assertEquals 'install test successfully' "$installst" "0"
|
||||||
|
|
||||||
|
assertTrue 'package installed foo' "[ -e '$tmpdir/testrootfs3/foo' ]"
|
||||||
|
assertTrue 'package installed foo interpolated with values' "[ -e '$tmpdir/testrootfs3/foo-newinterpolation' ]"
|
||||||
|
}
|
||||||
|
|
||||||
# Load shUnit2.
|
# Load shUnit2.
|
||||||
. "$ROOT_DIR/tests/integration/shunit2"/shunit2
|
. "$ROOT_DIR/tests/integration/shunit2"/shunit2
|
||||||
|
Reference in New Issue
Block a user