You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by ak...@apache.org on 2025/07/10 07:08:35 UTC
(buildstream) 02/03: buildelement: Add the digest-environment config property
This is an automated email from the ASF dual-hosted git repository.
akitouni pushed a commit to branch abderrahim/digest-environment
in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 698b9809bcb3a92c3ede42e8fa71d42a9763d1b5
Author: Abderrahim Kitouni <ab...@codethink.co.uk>
AuthorDate: Tue Jun 17 17:02:10 2025 +0100
buildelement: Add the digest-environment config property
This allows setting an environment variable inside the sandbox to the CAS
digest of one or more dependencies.
Co-authored by: Adrien Plazas <ad...@codethink.co.uk>
---
src/buildstream/buildelement.py | 25 +++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/src/buildstream/buildelement.py b/src/buildstream/buildelement.py
index 40355f5cf..06ea67f37 100644
--- a/src/buildstream/buildelement.py
+++ b/src/buildstream/buildelement.py
@@ -219,6 +219,7 @@ class BuildElement(Element):
def configure_dependencies(self, dependencies):
self.__layout = {} # pylint: disable=attribute-defined-outside-init
+ self.__digest_environment = {} # pylint: disable=attribute-defined-outside-init
# FIXME: Currently this forcefully validates configurations
# for all BuildElement subclasses so they are unable to
@@ -227,9 +228,18 @@ class BuildElement(Element):
for dep in dependencies:
# Determine the location to stage each element, default is "/"
location = "/"
+
if dep.config:
- dep.config.validate_keys(["location"])
- location = dep.config.get_str("location")
+ dep.config.validate_keys(["digest-environment", "location"])
+
+ location = dep.config.get_str("location", "/")
+
+ digest_var_name = dep.config.get_str("digest-environment", None)
+
+ if digest_var_name is not None:
+ element_list = self.__digest_environment.setdefault(digest_var_name, [])
+ element_list.append(dep.element)
+
try:
element_list = self.__layout[location]
except KeyError:
@@ -285,10 +295,17 @@ class BuildElement(Element):
command_dir = build_root
sandbox.set_work_directory(command_dir)
+ def stage(self, sandbox):
# Setup environment
- sandbox.set_environment(self.get_environment())
+ env = self.get_environment()
- def stage(self, sandbox):
+ for digest_variable, element_list in self.__digest_environment.items():
+ subsandbox = sandbox.create_subsandbox()
+ self.stage_dependency_artifacts(subsandbox, element_list)
+ digest = subsandbox.get_virtual_directory()._get_digest()
+ env[digest_variable] = "{}/{}".format(digest.hash, digest.size_bytes)
+
+ sandbox.set_environment(env)
# First stage it all
#