From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 7026321669488640000 X-Received: by 2002:a17:906:d550:: with SMTP id cr16mr2662648ejc.438.1635942998595; Wed, 03 Nov 2021 05:36:38 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a17:906:c143:: with SMTP id dp3ls1046204ejc.0.gmail; Wed, 03 Nov 2021 05:36:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwLTu3Cx7ChloQEqyov+7/por5h5bLJVO8ONvuRfJ9Yfhz7pBV+BSxv5vDpxX5IfmkErsQU X-Received: by 2002:a17:907:6d10:: with SMTP id sa16mr5358243ejc.532.1635942997441; Wed, 03 Nov 2021 05:36:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635942997; cv=none; d=google.com; s=arc-20160816; b=X38wvxj/aBHBuoee35WzR5E4bK0K5cImSuJIhKHuAwPczXoVRu1UlkVphX1RkVWh/I RqKvrzcmSaY5r2nPK9qfpfqItohhh2aM8UugqJRT9t0BWcXJihfEIt5aUTUlTaOtHv2z Y9LpKRP+a/B8a3rPuAljIeA+2UuM0civBfaFgLEfJ31dXlGircQWsktT0ImW3Ic18Gal aWXzksoP+kH5rUdiYrLg0KUMfC4kUibdRvKvC42qjLFTOaucE5rKnSp3GzvM7MWb86n0 1HVWHs+UiyzTrj5HTM5/l0sUVAsL0jFI3S9FeDRhm1uA32d5PzFvgPysj1uWHUOfE6EZ /oCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=oGXa9o/g01+ADCwY+u4/POrV9LlDQnBsF1MgMTj0PtE=; b=uSie8H2VRBefJykSIN+P/whq4H28DprXTL8GMk2Wlv4wjeCxFVjaM5jwqnYqxJYs1P UrxK4xyo0PmfcrnnoE00DQL+zM+e1ubgi26CNZ5GDloiutzXARwEzCObNUNlN3+KQM/n cIsdcyYehywBUyL638/tCw72C1d8P6doIDlHKizAQbkX2sn/sFtPDF2bpB4cltzQ1KzX KLlqi+4lTlSroMixwxUb4Qt5SiRIG42PQnJhhc9hC9tlVmbNzuoHrEVF7nDbgeCGq6sF BmYTfvvs5PnxJbOMwESwaZNlm0/M5hjh8JHEVJU4bwMr+mgR0T9x6ela6DCPPIcGsJxq NnwA== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of felix.moessbauer@siemens.com designates 192.35.17.2 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 thoth.sbs.de (thoth.sbs.de. [192.35.17.2]) by gmr-mx.google.com with ESMTPS id 14si101852edv.4.2021.11.03.05.36.37 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Nov 2021 05:36:37 -0700 (PDT) Received-SPF: pass (google.com: domain of felix.moessbauer@siemens.com designates 192.35.17.2 as permitted sender) client-ip=192.35.17.2; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of felix.moessbauer@siemens.com designates 192.35.17.2 as permitted sender) smtp.mailfrom=felix.moessbauer@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail1.sbs.de (mail1.sbs.de [192.129.41.35]) by thoth.sbs.de (8.15.2/8.15.2) with ESMTPS id 1A3Caasb007988 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 3 Nov 2021 13:36:37 +0100 Received: from MD1T0KAC-VM.ad001.siemens.net (md1t0kac.ad001.siemens.net [139.25.68.224]) by mail1.sbs.de (8.15.2/8.15.2) with ESMTP id 1A3CaXa9009791; Wed, 3 Nov 2021 13:36:36 +0100 From: Felix Moessbauer To: isar-users@googlegroups.com Cc: henning.schild@siemens.com, adriaan.schmidt@siemens.com, Felix Moessbauer Subject: [PATCH v3 1/2] always invoke ISAR_RELEASE_CMD to invalidate downstream tasks on change Date: Wed, 3 Nov 2021 13:36:23 +0100 Message-Id: <20211103123624.3015125-2-felix.moessbauer@siemens.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211103123624.3015125-1-felix.moessbauer@siemens.com> References: <20211103123624.3015125-1-felix.moessbauer@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TUID: jGlE3e+Zk8Hn 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..36883a8 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.replace('\n', '')) + 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