From: Felix Moessbauer <felix.moessbauer@siemens.com>
To: isar-users@googlegroups.com
Cc: henning.schild@siemens.com, adriaan.schmidt@siemens.com,
Felix Moessbauer <felix.moessbauer@siemens.com>
Subject: [PATCH v2 1/1] always invoke ISAR_RELEASE_CMD to invalidate downstream tasks on change
Date: Wed, 3 Nov 2021 12:18:37 +0100 [thread overview]
Message-ID: <20211103111837.2942997-1-felix.moessbauer@siemens.com> (raw)
The command in ISAR_RELEASE_CMD is used to add version information
of the image under /etc/os-release. As we cannot predict the
output of the command, we cannot cache it.
Prior to this patch, this situation was just accepted resulting
in misleading build-ids on incremental builds.
When caching artifacts across builds (e.g. using sstate),
this also affects fresh builds.
The patch ensures that ISAR_RELEASE_CMD is always invoked
and the output is stored in the variable IMAGE_BUILD_ID.
This variable is added as a vardep in the rootfs_postprocess
task, so changes invalidate all downstream tasks.
By that, we ensure that images always contain correct release
information.
Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
---
meta/classes/image-postproc-extension.bbclass | 4 +--
meta/classes/image.bbclass | 32 ++++++++++---------
meta/classes/rootfs.bbclass | 2 +-
3 files changed, 20 insertions(+), 18 deletions(-)
diff --git a/meta/classes/image-postproc-extension.bbclass b/meta/classes/image-postproc-extension.bbclass
index 3f00c21..6e6b257 100644
--- a/meta/classes/image-postproc-extension.bbclass
+++ b/meta/classes/image-postproc-extension.bbclass
@@ -46,11 +46,11 @@ image_postprocess_configure() {
}
ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_mark"
+ROOTFS_POSTPROCESS_VARDEPS =+ "IMAGE_BUILD_ID"
image_postprocess_mark() {
- BUILD_ID=$(get_build_id)
update_etc_os_release \
- --build-id "${BUILD_ID}" --variant "${DESCRIPTION}" --version "${PV}"
+ --build-id "${IMAGE_BUILD_ID}" --variant "${DESCRIPTION}" --version "${PV}"
}
ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_machine_id"
diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 5a0f32e..9da9cd2 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -92,21 +92,23 @@ def get_rootfs_size(d):
return base_size + rootfs_extra * 1024
-# here we call a command that should describe your whole build system,
-# this could be "git describe" or something similar.
-# set ISAR_RELEASE_CMD to customize, or override do_mark_rootfs to do something
-# completely different
-get_build_id() {
- if [ $(echo ${BBLAYERS} | wc -w) -ne 2 ] &&
- [ "${ISAR_RELEASE_CMD}" = "${ISAR_RELEASE_CMD_DEFAULT}" ]; then
- bbwarn "You are using external layers that will not be" \
- "considered in the build_id. Consider changing" \
- "ISAR_RELEASE_CMD."
- fi
- if ! ( ${ISAR_RELEASE_CMD} ) 2>/dev/null; then
- bbwarn "\"${ISAR_RELEASE_CMD}\" failed, returning empty build_id."
- echo ""
- fi
+# the IMAGE_BUILD_ID depends on external conditions injected via
+# ISAR_RELEASE_CMD. By that, we have to compute the value
+# on each invocation
+python() {
+ bblayers = d.getVar('BBLAYERS', True)
+ release_cmd = d.getVar('ISAR_RELEASE_CMD', True)
+ if len(bblayers.split()) != 2:
+ if release_cmd == d.getVar('ISAR_RELEASE_CMD_DEFAULT', True):
+ bb.warn('You are using external layers that will not be '
+ 'considered in the build_id. Consider changing '
+ 'ISAR_RELEASE_CMD.')
+ try:
+ out,err = bb.process.run(release_cmd)
+ d.setVar('IMAGE_BUILD_ID', out)
+ except(bb.process.ExecutionError):
+ bb.warn(f'"{release_cmd}" failed, returning empty build_id.')
+ d.setVar('IMAGE_BUILD_ID', '')
}
python set_image_size () {
diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
index 20ccb00..e8c7fa0 100644
--- a/meta/classes/rootfs.bbclass
+++ b/meta/classes/rootfs.bbclass
@@ -239,7 +239,7 @@ rootfs_export_dpkg_status() {
'${ROOTFS_DPKGSTATUS_DEPLOY_DIR}'/'${PF}'.dpkg_status
}
-do_rootfs_postprocess[vardeps] = "${ROOTFS_POSTPROCESS_COMMAND}"
+do_rootfs_postprocess[vardeps] = "${ROOTFS_POSTPROCESS_COMMAND} ${ROOTFS_POSTPROCESS_VARDEPS}"
python do_rootfs_postprocess() {
# Take care that its correctly mounted:
bb.build.exec_func('rootfs_do_mounts', d)
--
2.30.2
reply other threads:[~2021-11-03 11:18 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211103111837.2942997-1-felix.moessbauer@siemens.com \
--to=felix.moessbauer@siemens.com \
--cc=adriaan.schmidt@siemens.com \
--cc=henning.schild@siemens.com \
--cc=isar-users@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox