From 8b37cfae2e715b09ac692aa6393427a9b280fa34 Mon Sep 17 00:00:00 2001 From: Valentine Burley Date: Fri, 16 May 2025 08:39:30 +0200 Subject: [PATCH] ci/lava: Forward environmental variables to DUT directly Instead of uploading the environmental variables to S3, append it to the job definition instead. Signed-off-by: Valentine Burley Part-of: --- .gitlab-ci/lava/lava-gitlab-ci.yml | 1 - .gitlab-ci/lava/lava-submit.sh | 20 ++++++------------- .gitlab-ci/lava/lava_job_submitter.py | 1 + .gitlab-ci/lava/utils/lava_job_definition.py | 11 ++++++++++ ...TBOOT_force_uart=False_job_definition.yaml | 1 + ...STBOOT_force_uart=True_job_definition.yaml | 1 + ...UBOOT_force_uart=False_job_definition.yaml | 1 + .../UBOOT_force_uart=True_job_definition.yaml | 1 + .../tests/utils/test_lava_job_definition.py | 1 + 9 files changed, 23 insertions(+), 15 deletions(-) diff --git a/.gitlab-ci/lava/lava-gitlab-ci.yml b/.gitlab-ci/lava/lava-gitlab-ci.yml index 36cb4a6f5f9..6165b4406fb 100644 --- a/.gitlab-ci/lava/lava-gitlab-ci.yml +++ b/.gitlab-ci/lava/lava-gitlab-ci.yml @@ -29,7 +29,6 @@ variables: BASE_SYSTEM_MAINLINE_HOST_PATH: "${BASE_SYSTEM_HOST_PREFIX}/${FDO_UPSTREAM_REPO}/${LAVA_DISTRIBUTION_TAG}" BASE_SYSTEM_FORK_HOST_PATH: "${BASE_SYSTEM_HOST_PREFIX}/${CI_PROJECT_PATH}/${LAVA_DISTRIBUTION_TAG}" # per-job build artifacts - JOB_ROOTFS_OVERLAY_PATH: "${JOB_ARTIFACTS_BASE}/job-rootfs-overlay.tar.gz" JOB_RESULTS_PATH: "${JOB_ARTIFACTS_BASE}/results.tar.zst" LAVA_S3_ARTIFACT_NAME: "mesa-${ARCH}-default-debugoptimized" S3_ARTIFACT_NAME: "mesa-python-ci-artifacts" diff --git a/.gitlab-ci/lava/lava-submit.sh b/.gitlab-ci/lava/lava-submit.sh index 25b9f0b45c5..ec8b253f5e6 100755 --- a/.gitlab-ci/lava/lava-submit.sh +++ b/.gitlab-ci/lava/lava-submit.sh @@ -44,18 +44,15 @@ ROOTFS_URL="$(get_path_to_artifact lava-rootfs.tar.zst)" [ $? != 1 ] || exit 1 rm -rf results -mkdir -p results/job-rootfs-overlay/ +mkdir results -filter_env_vars > results/job-rootfs-overlay/set-job-env-vars.sh +filter_env_vars > dut-env-vars.sh # Set SCRIPTS_DIR to point to the Mesa install we download for the DUT -echo "export SCRIPTS_DIR='$CI_PROJECT_DIR/install'" >> results/job-rootfs-overlay/set-job-env-vars.sh - -tar zcf job-rootfs-overlay.tar.gz -C results/job-rootfs-overlay/ . -ci-fairy s3cp --token-file "${S3_JWT_FILE}" job-rootfs-overlay.tar.gz "https://${JOB_ROOTFS_OVERLAY_PATH}" +echo "export SCRIPTS_DIR='$CI_PROJECT_DIR/install'" >> dut-env-vars.sh # Prepare env vars for upload. section_switch variables "Environment variables passed through to device:" -cat results/job-rootfs-overlay/set-job-env-vars.sh +cat dut-env-vars.sh section_switch lava_submit "Submitting job for scheduling" @@ -88,8 +85,9 @@ PYTHONPATH=artifacts/ artifacts/lava/lava_job_submitter.py \ --pipeline-info "$CI_JOB_NAME: $CI_PIPELINE_URL on $CI_COMMIT_REF_NAME ${CI_NODE_INDEX}/${CI_NODE_TOTAL}" \ --rootfs-url "${ROOTFS_URL}" \ --kernel-url-prefix "${KERNEL_IMAGE_BASE}/${DEBIAN_ARCH}" \ - --first-stage-init artifacts/ci-common/init-stage1.sh \ --dtb-filename "${DTB}" \ + --first-stage-init artifacts/ci-common/init-stage1.sh \ + --env-file dut-env-vars.sh \ --jwt-file "${S3_JWT_FILE}" \ --kernel-image-name "${KERNEL_IMAGE_NAME}" \ --kernel-image-type "${KERNEL_IMAGE_TYPE}" \ @@ -108,12 +106,6 @@ PYTHONPATH=artifacts/ artifacts/lava/lava_job_submitter.py \ --compression=zstd \ --path="${CI_PROJECT_DIR}" \ --format=tar \ - - append-overlay \ - --name=job-overlay \ - --url="https://${JOB_ROOTFS_OVERLAY_PATH}" \ - --compression=gz \ - --path="/" \ - --format=tar \ - append-overlay \ --name=kernel-modules \ --url="${KERNEL_IMAGE_BASE}/${DEBIAN_ARCH}/modules.tar.zst" \ diff --git a/.gitlab-ci/lava/lava_job_submitter.py b/.gitlab-ci/lava/lava_job_submitter.py index b50b9ac7284..e0aae3397fa 100755 --- a/.gitlab-ci/lava/lava_job_submitter.py +++ b/.gitlab-ci/lava/lava_job_submitter.py @@ -403,6 +403,7 @@ class LAVAJobSubmitter(PathResolver): dtb_filename: str = None dump_yaml: bool = False # Whether to dump the YAML payload to stdout first_stage_init: str = None + env_file: pathlib.Path = None jwt_file: pathlib.Path = None kernel_image_name: str = None kernel_image_type: str = "" diff --git a/.gitlab-ci/lava/utils/lava_job_definition.py b/.gitlab-ci/lava/utils/lava_job_definition.py index 14cca70fcc1..7861bdd4de0 100644 --- a/.gitlab-ci/lava/utils/lava_job_definition.py +++ b/.gitlab-ci/lava/utils/lava_job_definition.py @@ -1,5 +1,7 @@ from io import StringIO from typing import TYPE_CHECKING, Any +import base64 +import shlex from ruamel.yaml import YAML @@ -256,6 +258,15 @@ class LAVAJobDefinition: + '-o "/lib/firmware/qcom/sm8350/a660_zap.mbn"' ) + # Forward environmental variables to the DUT + # base64-encoded to avoid YAML quoting issues + with open(self.job_submitter.env_file, "rb") as f: + encoded = base64.b64encode(f.read()).decode() + safe_encoded = shlex.quote(encoded) + run_steps += [ + f'echo "eval \\\"$(echo {safe_encoded} | base64 -d)\\\"" >> /set-job-env-vars.sh', + ] + run_steps.append("export CURRENT_SECTION=dut_boot") return run_steps diff --git a/.gitlab-ci/tests/data/FASTBOOT_force_uart=False_job_definition.yaml b/.gitlab-ci/tests/data/FASTBOOT_force_uart=False_job_definition.yaml index a34efd8033b..91876f3c7c6 100644 --- a/.gitlab-ci/tests/data/FASTBOOT_force_uart=False_job_definition.yaml +++ b/.gitlab-ci/tests/data/FASTBOOT_force_uart=False_job_definition.yaml @@ -89,6 +89,7 @@ actions: steps: - |- echo test FASTBOOT + echo "eval \"$(echo ZWNobyB0ZXN0IEZBU1RCT09U | base64 -d)\"" >> /set-job-env-vars.sh export CURRENT_SECTION=dut_boot - export -p > /dut-env-vars.sh - test: diff --git a/.gitlab-ci/tests/data/FASTBOOT_force_uart=True_job_definition.yaml b/.gitlab-ci/tests/data/FASTBOOT_force_uart=True_job_definition.yaml index e7badb02b8e..97a47a263b5 100644 --- a/.gitlab-ci/tests/data/FASTBOOT_force_uart=True_job_definition.yaml +++ b/.gitlab-ci/tests/data/FASTBOOT_force_uart=True_job_definition.yaml @@ -85,6 +85,7 @@ actions: run: steps: - echo test FASTBOOT + - echo "eval \"$(echo ZWNobyB0ZXN0IEZBU1RCT09U | base64 -d)\"" >> /set-job-env-vars.sh - export CURRENT_SECTION=dut_boot - set -e - echo Could not find jwt file, disabling S3 requests... diff --git a/.gitlab-ci/tests/data/UBOOT_force_uart=False_job_definition.yaml b/.gitlab-ci/tests/data/UBOOT_force_uart=False_job_definition.yaml index d18650088d2..0f283df8486 100644 --- a/.gitlab-ci/tests/data/UBOOT_force_uart=False_job_definition.yaml +++ b/.gitlab-ci/tests/data/UBOOT_force_uart=False_job_definition.yaml @@ -60,6 +60,7 @@ actions: steps: - |- echo test UBOOT + echo "eval \"$(echo ZWNobyB0ZXN0IFVCT09U | base64 -d)\"" >> /set-job-env-vars.sh export CURRENT_SECTION=dut_boot - export -p > /dut-env-vars.sh - test: diff --git a/.gitlab-ci/tests/data/UBOOT_force_uart=True_job_definition.yaml b/.gitlab-ci/tests/data/UBOOT_force_uart=True_job_definition.yaml index 7d3f868c2e9..be20d2db726 100644 --- a/.gitlab-ci/tests/data/UBOOT_force_uart=True_job_definition.yaml +++ b/.gitlab-ci/tests/data/UBOOT_force_uart=True_job_definition.yaml @@ -58,6 +58,7 @@ actions: run: steps: - echo test UBOOT + - echo "eval \"$(echo ZWNobyB0ZXN0IFVCT09U | base64 -d)\"" >> /set-job-env-vars.sh - export CURRENT_SECTION=dut_boot - set -e - echo Could not find jwt file, disabling S3 requests... diff --git a/.gitlab-ci/tests/utils/test_lava_job_definition.py b/.gitlab-ci/tests/utils/test_lava_job_definition.py index fd8a9e456b4..53e27a40b40 100644 --- a/.gitlab-ci/tests/utils/test_lava_job_definition.py +++ b/.gitlab-ci/tests/utils/test_lava_job_definition.py @@ -58,6 +58,7 @@ def job_submitter_factory(mode: Literal["UBOOT", "FASTBOOT"], shell_file): farm="test_farm", dtb_filename="my_dtb_filename", first_stage_init=shell_file, + env_file=shell_file, job_timeout_min=job_timeout_min, mesa_job_name=mesa_job_name, pipeline_info=pipeline_info,