Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Joshua Watt <jpewhacker@gmail.com>
To: openembedded-core@lists.openembedded.org
Cc: Joshua Watt <JPEWhacker@gmail.com>
Subject: [OE-core][PATCH v4 06/10] spdx: Replace do_create_image_spdx with deploy task
Date: Tue, 30 Jun 2026 15:01:40 -0600	[thread overview]
Message-ID: <20260630210422.1903245-7-JPEWhacker@gmail.com> (raw)
In-Reply-To: <20260630210422.1903245-1-JPEWhacker@gmail.com>

Replaces the dedicated do_create_image_spdx task with a deploy task tied
to do_image_complete (which is task that deploys images).

This has the advantage that images recipe SPDX dependencies are now
completely automatically detected in the task graph, and the SPDX
documents are merged in automatically when dependencies on
do_image_complete are detected

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
---
 .../create-spdx-image-3.0.bbclass             | 32 +++++++------------
 meta/classes-recipe/nospdx.bbclass            |  1 -
 meta/classes/create-spdx-3.0.bbclass          |  3 --
 meta/classes/spdx-common.bbclass              |  1 -
 meta/lib/oe/spdx30_tasks.py                   | 21 ++++++++----
 5 files changed, 26 insertions(+), 32 deletions(-)

diff --git a/meta/classes-recipe/create-spdx-image-3.0.bbclass b/meta/classes-recipe/create-spdx-image-3.0.bbclass
index b60cdd826f..64cb065632 100644
--- a/meta/classes-recipe/create-spdx-image-3.0.bbclass
+++ b/meta/classes-recipe/create-spdx-image-3.0.bbclass
@@ -30,7 +30,7 @@ python do_create_rootfs_spdx() {
     import oe.spdx30_tasks
     oe.spdx30_tasks.create_rootfs_spdx(d)
 }
-addtask do_create_rootfs_spdx after do_rootfs do_create_recipe_spdx before do_image
+addtask do_create_rootfs_spdx after do_rootfs do_create_recipe_spdx before do_image do_image_complete
 SSTATETASKS += "do_create_rootfs_spdx"
 do_create_rootfs_spdx[sstate-inputdirs] = "${SPDXROOTFSDEPLOY}"
 do_create_rootfs_spdx[sstate-outputdirs] = "${DEPLOY_DIR_SPDX}"
@@ -43,33 +43,25 @@ python do_create_rootfs_spdx_setscene() {
 }
 addtask do_create_rootfs_spdx_setscene
 
-python do_create_image_spdx() {
+python create_image_spdx() {
     import oe.spdx30_tasks
-    oe.spdx30_tasks.create_image_spdx(d)
-}
-addtask do_create_image_spdx after do_image_complete do_create_rootfs_spdx do_create_recipe_spdx before do_build
-SSTATETASKS += "do_create_image_spdx"
-SSTATE_SKIP_CREATION:task-create-image-spdx = "1"
-do_create_image_spdx[sstate-inputdirs] = "${SPDXIMAGEWORK}"
-do_create_image_spdx[sstate-outputdirs] = "${DEPLOY_DIR_SPDX}"
-do_create_image_spdx[cleandirs] = "${SPDXIMAGEWORK}"
-do_create_image_spdx[dirs] = "${SPDXIMAGEWORK}"
-do_create_image_spdx[file-checksums] += "${SPDX3_DEP_FILES}"
-do_create_image_spdx[vardeps] += "\
-    SPDX_IMAGE_PURPOSE \
-    "
+    from pathlib import Path
+    current_task = "do_" + d.getVar("BB_CURRENTTASK")
 
-python do_create_image_spdx_setscene() {
-    sstate_setscene(d)
-}
-addtask do_create_image_spdx_setscene
+    spdxdeploydir = Path(d.getVar("SPDXDIR") + "/deploy-" + current_task)
 
+    oe.spdx30_tasks.create_image_spdx(d, spdxdeploydir)
+}
+oe.spdx30_tasks.create_image_spdx[vardeps] += "SPDX_IMAGE_PURPOSE"
+SPDX_DEPLOY_TASKS += "do_image_complete:create_image_spdx"
+# No deploy sbom is needed since do_create_image_sbom_spdx() is used instead
+SPDX_DEPLOY_SBOM = "0"
 
 python do_create_image_sbom_spdx() {
     import oe.spdx30_tasks
     oe.spdx30_tasks.create_image_sbom_spdx(d)
 }
-addtask do_create_image_sbom_spdx after do_create_rootfs_spdx do_create_image_spdx before do_build
+addtask do_create_image_sbom_spdx after do_create_rootfs_spdx do_image_complete before do_build
 SSTATETASKS += "do_create_image_sbom_spdx"
 SSTATE_SKIP_CREATION:task-create-image-sbom-spdx = "1"
 do_create_image_sbom_spdx[sstate-inputdirs] = "${SPDXIMAGEDEPLOYDIR}"
diff --git a/meta/classes-recipe/nospdx.bbclass b/meta/classes-recipe/nospdx.bbclass
index 723194da2d..fafcdd0a13 100644
--- a/meta/classes-recipe/nospdx.bbclass
+++ b/meta/classes-recipe/nospdx.bbclass
@@ -10,6 +10,5 @@ deltask do_create_spdx
 deltask do_create_spdx_runtime
 deltask do_create_package_spdx
 deltask do_create_rootfs_spdx
-deltask do_create_image_spdx
 deltask do_create_image_sbom_spdx
 deltask do_create_deploy_sbom
diff --git a/meta/classes/create-spdx-3.0.bbclass b/meta/classes/create-spdx-3.0.bbclass
index 13d1de2774..919de094f8 100644
--- a/meta/classes/create-spdx-3.0.bbclass
+++ b/meta/classes/create-spdx-3.0.bbclass
@@ -373,9 +373,6 @@ python () {
         # for the recipe, at least until it's possible for do_populate_sysroot
         # to describe it's own output.
         "do_populate_sysroot": "do_create_spdx",
-        # If an image is needed, also depend on the task to create the SBoM for
-        # the image
-        "do_image_complete": "do_create_image_spdx",
     }
 
     def map_task_deps(task, flag):
diff --git a/meta/classes/spdx-common.bbclass b/meta/classes/spdx-common.bbclass
index bca169670d..13839aac3a 100644
--- a/meta/classes/spdx-common.bbclass
+++ b/meta/classes/spdx-common.bbclass
@@ -15,7 +15,6 @@ CVE_VERSION ??= "${PV}"
 SPDXDIR ??= "${WORKDIR}/spdx/${SPDX_VERSION}"
 SPDXDEPLOY = "${SPDXDIR}/deploy"
 SPDXWORK = "${SPDXDIR}/work"
-SPDXIMAGEWORK = "${SPDXDIR}/image-work"
 SPDXSDKWORK = "${SPDXDIR}/sdk-work"
 SPDXSDKEXTWORK = "${SPDXDIR}/sdk-ext-work"
 SPDXDEPS = "${SPDXDIR}/deps.json"
diff --git a/meta/lib/oe/spdx30_tasks.py b/meta/lib/oe/spdx30_tasks.py
index 676eb09888..f3a60e3deb 100644
--- a/meta/lib/oe/spdx30_tasks.py
+++ b/meta/lib/oe/spdx30_tasks.py
@@ -1546,19 +1546,19 @@ def create_rootfs_spdx(d):
     )
 
 
-def create_image_spdx(d):
+def create_image_spdx(d, spdx_deploy_dir):
     import oe.sbom30
 
+    pn = d.getVar("PN")
+    current_task = "do_" + d.getVar("BB_CURRENTTASK")
+
     image_deploy_dir = Path(d.getVar("IMGDEPLOYDIR"))
     manifest_path = Path(d.getVar("IMAGE_OUTPUT_MANIFEST"))
-    spdx_work_dir = Path(d.getVar("SPDXIMAGEWORK"))
 
     image_basename = d.getVar("IMAGE_BASENAME")
     machine = d.getVar("MACHINE")
 
-    objset = oe.sbom30.ObjectSet.new_objset(
-        d, "%s-%s-image" % (image_basename, machine)
-    )
+    objset = oe.sbom30.ObjectSet.new_objset(d, f"{pn}-{current_task}-deploy")
 
     with manifest_path.open("r") as f:
         manifest = json.load(f)
@@ -1651,13 +1651,18 @@ def create_image_spdx(d):
     objset.add_aliases()
     objset.link()
     oe.sbom30.write_recipe_jsonld_doc(
-        d, objset, "image", spdx_work_dir, create_task_link=True
+        d,
+        objset,
+        "deploy",
+        spdx_deploy_dir,
+        create_task_link=True,
     )
 
 
 def create_image_sbom_spdx(d):
     import oe.sbom30
 
+    pn = d.getVar("PN")
     image_name = d.getVar("IMAGE_NAME")
     image_basename = d.getVar("IMAGE_BASENAME")
     image_link_name = d.getVar("IMAGE_LINK_NAME")
@@ -1679,7 +1684,9 @@ def create_image_sbom_spdx(d):
     root_elements.append(oe.sbom30.get_element_link_id(rootfs_image))
 
     image_objset, _ = oe.sbom30.find_jsonld(
-        d, "image", "%s-%s-image" % (image_basename, machine), required=True
+        d,
+        "deploy",
+        f"{pn}-do_image_complete-deploy",
     )
     for o in image_objset.foreach_root(oe.spdx30.software_File):
         root_elements.append(oe.sbom30.get_element_link_id(o))
-- 
2.54.0



  parent reply	other threads:[~2026-06-30 21:04 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-09 22:15 [OE-core][PATCH 0/5] Implement SPDX for deploy tasks Joshua Watt
2026-06-09 22:15 ` [OE-core][PATCH 1/5] classes/baremetal-image: Remove "do_" prefix from image manifest Joshua Watt
2026-06-09 22:15 ` [OE-core][PATCH 2/5] spdx: Reformat Joshua Watt
2026-06-09 22:15 ` [OE-core][PATCH 3/5] spdx: Add ability for deploy tasks to create SPDX Joshua Watt
2026-06-09 22:15 ` [OE-core][PATCH 4/5] Add SPDX deploy tasks Joshua Watt
2026-06-09 22:31   ` Patchtest results for " patchtest
2026-06-10  6:17   ` Mikko Rapeli
2026-06-10  7:46   ` Richard Purdie
2026-06-09 22:15 ` [OE-core][PATCH 5/5] spdx: Replace do_create_image_spdx with deploy task Joshua Watt
2026-06-10 13:17 ` [OE-core][PATCH 0/5] Implement SPDX for deploy tasks Mathieu Dubois-Briand
2026-06-11 18:46   ` Joshua Watt
2026-06-18 15:38 ` [OE-core][PATCH v2 " Joshua Watt
2026-06-18 15:38   ` [OE-core][PATCH v2 1/5] spdx: Add ability for deploy tasks to create SPDX Joshua Watt
2026-06-18 15:38   ` [OE-core][PATCH v2 2/5] classes-global/sstate: Keep SPDX generating setscene dependencies Joshua Watt
2026-06-18 15:38   ` [OE-core][PATCH v2 3/5] Add SPDX deploy tasks to various recipes Joshua Watt
2026-06-18 17:07     ` Patchtest results for " patchtest
2026-06-18 15:38   ` [OE-core][PATCH v2 4/5] spdx: Replace do_create_image_spdx with deploy task Joshua Watt
2026-06-18 15:38   ` [OE-core][PATCH v2 5/5] grub-efi: Change to MACHINE_ARCH Joshua Watt
2026-06-21  5:45   ` [OE-core][PATCH v2 0/5] Implement SPDX for deploy tasks Mathieu Dubois-Briand
2026-06-22 21:14     ` Joshua Watt
2026-06-23  9:28       ` Mathieu Dubois-Briand
2026-06-24 14:15   ` [OE-core][PATCH v3 0/8] " Joshua Watt
2026-06-24 14:15     ` [OE-core][PATCH v3 1/8] spdx: Skip dependencies that are not in the taskhash Joshua Watt
2026-06-24 14:15     ` [OE-core][PATCH v3 2/8] spdx: Add ability for deploy tasks to create SPDX Joshua Watt
2026-06-24 14:15     ` [OE-core][PATCH v3 3/8] oeqa: Add SPDX deploy SBoM test Joshua Watt
2026-06-24 14:15     ` [OE-core][PATCH v3 4/8] classes-global/sstate: Keep SPDX generating setscene dependencies Joshua Watt
2026-06-24 14:15     ` [OE-core][PATCH v3 5/8] Add SPDX deploy tasks to various recipes Joshua Watt
2026-06-24 14:31       ` Patchtest results for " patchtest
2026-06-24 14:31       ` Mikko Rapeli
2026-06-24 16:05         ` Joshua Watt
2026-06-24 16:24           ` Mikko Rapeli
2026-06-24 16:30             ` Joshua Watt
2026-06-24 14:15     ` [OE-core][PATCH v3 6/8] spdx: Replace do_create_image_spdx with deploy task Joshua Watt
2026-06-24 14:15     ` [OE-core][PATCH v3 7/8] grub-efi: Change to MACHINE_ARCH Joshua Watt
2026-06-24 14:15     ` [OE-core][PATCH v3 8/8] systemd-boot: " Joshua Watt
2026-06-25  6:21     ` [OE-core][PATCH v3 0/8] Implement SPDX for deploy tasks Mathieu Dubois-Briand
2026-06-30 21:01     ` [OE-core][PATCH v4 00/10] " Joshua Watt
2026-06-30 21:01       ` [OE-core][PATCH v4 01/10] spdx: Skip dependencies that are not in the taskhash Joshua Watt
2026-06-30 21:01       ` [OE-core][PATCH v4 02/10] spdx: Add ability for deploy tasks to create SPDX Joshua Watt
2026-06-30 21:01       ` [OE-core][PATCH v4 03/10] oeqa: Add SPDX deploy SBoM test Joshua Watt
2026-06-30 21:01       ` [OE-core][PATCH v4 04/10] classes-global/sstate: Keep SPDX generating setscene dependencies Joshua Watt
2026-06-30 21:01       ` [OE-core][PATCH v4 05/10] Add SPDX deploy tasks to various recipes Joshua Watt
2026-06-30 21:01       ` Joshua Watt [this message]
2026-06-30 21:01       ` [OE-core][PATCH v4 07/10] grub-efi: Change to MACHINE_ARCH Joshua Watt
2026-06-30 21:01       ` [OE-core][PATCH v4 08/10] systemd-boot: " Joshua Watt
2026-06-30 21:01       ` [OE-core][PATCH v4 09/10] multilib: Add systemd-boot to NON_MULTILIB_RECIPES Joshua Watt
2026-06-30 21:01       ` [OE-core][PATCH v4 10/10] wic-tools: Change to MACHINE_ARCH Joshua Watt
2026-07-02  7:51       ` [OE-core][PATCH v4 00/10] Implement SPDX for deploy tasks Mathieu Dubois-Briand
2026-07-05  8:29       ` Richard Purdie
     [not found]       ` <18BF5783F1D47BA6.1336494@lists.openembedded.org>
2026-07-06 14:28         ` Richard Purdie

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=20260630210422.1903245-7-JPEWhacker@gmail.com \
    --to=jpewhacker@gmail.com \
    --cc=openembedded-core@lists.openembedded.org \
    /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