From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 7026299916861308928 X-Received: by 2002:adf:ce0e:: with SMTP id p14mr34254833wrn.423.1635938332294; Wed, 03 Nov 2021 04:18:52 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a5d:4092:: with SMTP id o18ls2016773wrp.1.gmail; Wed, 03 Nov 2021 04:18:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzqXWC3qIXTJ15luLSXv98/X9JKLgyPYX3hRCz7KWcIs2z8ZAzYXvVjk/5WPYxo3jOq3XmU X-Received: by 2002:a05:6000:1813:: with SMTP id m19mr45287159wrh.51.1635938331279; Wed, 03 Nov 2021 04:18:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635938331; cv=none; d=google.com; s=arc-20160816; b=GEsBoRsu3lgR1k23rCMa1cSkWoQF8BN/un32BGZhVLCniQirCWBgus1LC98y47RHUF 3b5YOWLO1OS2ATZJiRShz4T/YTaFlq7Z2mJCy0Yd1Sjhhh3rUW32IKPkGOo1dgYqTaGw 9RUWb4uzYdOGwhz4474SNomRu/66Gex6jlJ9SUFIjTWldHNzUD9f+LvHc8f381nj5uao Ei6ev8ExG0BS8cJEmM/7GFc63vvRKR+bTkVNgW7O+lRsfWjf+McGZzsiPrU/K+cBMeLp YGSa+yb2vsOHd6zjMWPDRXSxLDPLotMk4eprAYruKKeCsEFjPuFyA/wbgGtWhTtuboYS 31fg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from; bh=pAYbPW6FTX3678z2Arpade7IRahDZlV1LfRil/k8WwE=; b=FT8uQLBWtBpM+NWyQGk0hImILFUmIxWjuOv4Eic7gu+UNasLBmvpkMt2kjT1GXgN7n R4hA1PlQQiOaeu1hk5lmxG9GIxoy93NceiXeORBT9oOLF0mKxgYl7AE9yxY7auggtStN nOYNPx3R13pq2hvbp9qK3US4zDxxyUYL6noosnLe/bvLTeMcT9b07qPXd7KTGOes8tgW QrxfwolgBuYULyGzIyrh58eBPyukVT28wOIg51v4Kwu/6+Sm467rbHNC88cnMDwKoDnN dL/MPeRyyp0qTUo0+BxJMM0BXKlFu7K8MHPZoeBlok4q+NrFo09XicL5dIG+sona+0LF KZkA== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of felix.moessbauer@siemens.com designates 194.138.37.39 as permitted sender) smtp.mailfrom=felix.moessbauer@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from lizzard.sbs.de (lizzard.sbs.de. [194.138.37.39]) by gmr-mx.google.com with ESMTPS id q74si437201wme.0.2021.11.03.04.18.51 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Nov 2021 04:18:51 -0700 (PDT) Received-SPF: pass (google.com: domain of felix.moessbauer@siemens.com designates 194.138.37.39 as permitted sender) client-ip=194.138.37.39; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of felix.moessbauer@siemens.com designates 194.138.37.39 as permitted sender) smtp.mailfrom=felix.moessbauer@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail2.sbs.de (mail2.sbs.de [192.129.41.66]) by lizzard.sbs.de (8.15.2/8.15.2) with ESMTPS id 1A3BIoET015883 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 3 Nov 2021 12:18:50 +0100 Received: from MD1T0KAC-VM.ad001.siemens.net (md1t0kac.ad001.siemens.net [139.25.68.224]) by mail2.sbs.de (8.15.2/8.15.2) with ESMTP id 1A3BIob1011824; Wed, 3 Nov 2021 12:18:50 +0100 From: Felix Moessbauer To: isar-users@googlegroups.com Cc: henning.schild@siemens.com, adriaan.schmidt@siemens.com, Felix Moessbauer 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 Message-Id: <20211103111837.2942997-1-felix.moessbauer@siemens.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TUID: q0iVOCtQbeT4 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 --- 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