diff --git a/ci/build_test_suites b/ci/build_test_suites
index 861065a..89ecefe 100755
--- a/ci/build_test_suites
+++ b/ci/build_test_suites
@@ -1,3 +1,4 @@
+#!prebuilts/build-tools/linux-x86/bin/py3-cmd
 # Copyright 2024, The Android Open Source Project
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/ci/build_test_suites.py b/ci/build_test_suites.py
index 0c1d211..1064041 100644
--- a/ci/build_test_suites.py
+++ b/ci/build_test_suites.py
@@ -69,7 +69,7 @@
   build_command = base_build_command(args)
   build_command.append('general-tests')
 
-  run_command(build_command)
+  run_command(build_command, print_output=True)
 
 
 def build_affected_modules(args: argparse.Namespace):
@@ -81,9 +81,9 @@
   build_command = base_build_command(args)
   build_command.extend(modules_to_build)
 
-  run_command(build_command)
+  run_command(build_command, print_output=True)
 
-  zip_build_outputs(modules_to_build, args.dist_dir)
+  zip_build_outputs(modules_to_build, args.dist_dir, args.target_release)
 
 
 def base_build_command(args: argparse.Namespace) -> list:
@@ -102,12 +102,17 @@
   return build_command
 
 
-def run_command(args: list[str]) -> str:
+def run_command(
+    args: list[str],
+    env: Dict[Text, Text] = os.environ,
+    print_output: bool = False,
+) -> str:
   result = subprocess.run(
       args=args,
       text=True,
       capture_output=True,
       check=False,
+      env=env,
   )
   # If the process failed, print its stdout and propagate the exception.
   if not result.returncode == 0:
@@ -116,6 +121,10 @@
     print('stderr: ' + result.stderr)
 
   result.check_returncode()
+
+  if print_output:
+    print(result.stdout)
+
   return result.stdout
 
 
@@ -201,17 +210,19 @@
   return False
 
 
-def zip_build_outputs(modules_to_build: Set[Text], dist_dir: Text):
+def zip_build_outputs(
+    modules_to_build: Set[Text], dist_dir: Text, target_release: Text
+):
   src_top = os.environ.get('TOP', os.getcwd())
 
   # Call dumpvars to get the necessary things.
   # TODO(lucafarsi): Don't call soong_ui 4 times for this, --dumpvars-mode can
   # do it but it requires parsing.
-  host_out_testcases = get_soong_var('HOST_OUT_TESTCASES')
-  target_out_testcases = get_soong_var('TARGET_OUT_TESTCASES')
-  product_out = get_soong_var('PRODUCT_OUT')
-  soong_host_out = get_soong_var('SOONG_HOST_OUT')
-  host_out = get_soong_var('HOST_OUT')
+  host_out_testcases = get_soong_var('HOST_OUT_TESTCASES', target_release)
+  target_out_testcases = get_soong_var('TARGET_OUT_TESTCASES', target_release)
+  product_out = get_soong_var('PRODUCT_OUT', target_release)
+  soong_host_out = get_soong_var('SOONG_HOST_OUT', target_release)
+  host_out = get_soong_var('HOST_OUT', target_release)
 
   # Call the class to package the outputs.
   # TODO(lucafarsi): Move this code into a replaceable class.
@@ -267,12 +278,16 @@
   zip_command.append('-o')
   zip_command.append(os.path.join(dist_dir, 'general-tests.zip'))
 
-  run_command(zip_command)
+  run_command(zip_command, print_output=True)
 
 
-def get_soong_var(var: str) -> str:
+def get_soong_var(var: str, target_release: str) -> str:
+  new_env = os.environ.copy()
+  new_env['TARGET_RELEASE'] = target_release
+
   value = run_command(
-      ['./build/soong/soong_ui.bash', '--dumpvar-mode', '--abs', var]
+      ['./build/soong/soong_ui.bash', '--dumpvar-mode', '--abs', var],
+      env=new_env,
   ).strip()
   if not value:
     raise RuntimeError('Necessary soong variable ' + var + ' not found.')
