2016-12-03 02:07:08 +03:00
#!/bin/bash
set -xeuo pipefail
dn = $( cd $( dirname $0 ) && pwd )
. ${ dn } /libcomposetest.sh
compose: Add --add-metadata-from-json
I'd like to embed structured metadata about the originating git
repository. See [this example](https://pagure.io/fedora-atomic-host-continuous/c/142b12020d7efe18b56d039304efea102a210790?branch=master). However, I think what we really
want here is a *single* value which has subkeys.
One thing in the back of my mind too is...we could use this to
enhance our "change detection". Right now we checksum the sack,
treefile, and treecompose-post. But down the line, I'd
like to support more sophisticated postprocessing, where the
script might reference external files or the like.
In that case, we could stop checksumming the post script, and rely on whether or
not the git repo changed. (This would conversely mean we would do a build even
if e.g. the repo's `README.md` changed, but we can address that with a
post-assemble content check).
Anyways though, for now, this gets us the ability to more easily drop more
structured metadata in the commit, whether it's input git repos, tests that
passed, etc.
Note a trap that bit me here: since the metadata we write here is *host* endian,
but `ostree show --raw` byteswaps (it needs to since the core ostree variant
is always big endian), we get inverted numbers if the host is little.
I think we should probably canonicalize our metadata to big endian; this should
be pretty backwards compatible since I doubt anyone has been adding raw numbers
so far.
Closes: #676
Approved by: jlebon
2017-03-06 19:20:25 +03:00
prepare_compose_test "basic"
# Test metadata json with objects, arrays, numbers
cat > metadata.json <<EOF
{
"exampleos.gitrepo" : {
"rev" : "97ec21c614689e533d294cdae464df607b526ab9" ,
"src" : "https://gitlab.com/exampleos/custom-atomic-host"
} ,
2019-07-08 17:34:59 +03:00
"exampleos.tests" : [ "smoketested" , "e2e" ] ,
"overrideme" : "new val"
compose: Add --add-metadata-from-json
I'd like to embed structured metadata about the originating git
repository. See [this example](https://pagure.io/fedora-atomic-host-continuous/c/142b12020d7efe18b56d039304efea102a210790?branch=master). However, I think what we really
want here is a *single* value which has subkeys.
One thing in the back of my mind too is...we could use this to
enhance our "change detection". Right now we checksum the sack,
treefile, and treecompose-post. But down the line, I'd
like to support more sophisticated postprocessing, where the
script might reference external files or the like.
In that case, we could stop checksumming the post script, and rely on whether or
not the git repo changed. (This would conversely mean we would do a build even
if e.g. the repo's `README.md` changed, but we can address that with a
post-assemble content check).
Anyways though, for now, this gets us the ability to more easily drop more
structured metadata in the commit, whether it's input git repos, tests that
passed, etc.
Note a trap that bit me here: since the metadata we write here is *host* endian,
but `ostree show --raw` byteswaps (it needs to since the core ostree variant
is always big endian), we get inverted numbers if the host is little.
I think we should probably canonicalize our metadata to big endian; this should
be pretty backwards compatible since I doubt anyone has been adding raw numbers
so far.
Closes: #676
Approved by: jlebon
2017-03-06 19:20:25 +03:00
}
EOF
2019-07-18 18:25:24 +03:00
# Test --parent at the same time (hash is `echo | sha256sum`)
runcompose --add-metadata-from-json metadata.json \
--parent 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
2016-12-09 01:31:20 +03:00
2017-11-16 05:28:03 +03:00
. ${ dn } /libbasic-test.sh
basic_test
2017-09-25 19:58:44 +03:00
2017-11-16 05:28:03 +03:00
# This one is done by postprocessing /var
2017-09-25 19:58:44 +03:00
ostree --repo= ${ repobuild } cat ${ treeref } /usr/lib/tmpfiles.d/rpm-ostree-1-autovar.conf > autovar.txt
# Picked this one at random as an example of something that won't likely be
# converted to tmpfiles.d upstream. But if it is, we can change this test.
2017-10-27 19:56:05 +03:00
assert_file_has_content_literal autovar.txt 'd /var/cache 0755 root root - -'
# And this one has a non-root uid
assert_file_has_content_literal autovar.txt 'd /var/log/chrony 0755 chrony chrony - -'
2017-09-25 19:58:44 +03:00
echo "ok autovar"
2018-05-31 23:31:22 +03:00
2018-07-31 23:00:55 +03:00
ostree --repo= ${ repobuild } cat ${ treeref } /usr/lib/systemd/system-preset/40-rpm-ostree-auto.preset > preset.txt
assert_file_has_content preset.txt '^enable ostree-remount.service$'
2018-10-15 18:15:44 +03:00
assert_file_has_content preset.txt '^enable ostree-finalize-staged.path$'
2018-07-31 23:00:55 +03:00
2018-09-10 15:50:33 +03:00
prepare_compose_test "from-yaml"
2019-05-08 17:15:48 +03:00
python3 <<EOF
2018-05-31 23:31:22 +03:00
import json, yaml
jd = json.load( open( " $treefile " ) )
with open( " $treefile .yaml " , "w" ) as f:
2018-09-29 17:32:28 +03:00
yaml.safe_dump( jd, f)
2018-05-31 23:31:22 +03:00
EOF
2018-09-10 15:50:33 +03:00
export treefile = $treefile .yaml
runcompose
echo "ok yaml"
2019-05-08 07:13:43 +03:00
# also check that --no-parent doesn't invalidate change detection
runcompose --no-parent | & tee out.txt
assert_file_has_content_literal out.txt "No apparent changes since previous commit"
echo "ok --no-parent"