xref: /linux/drivers/gpu/drm/ci/lava-submit.sh (revision aec2f682d47c54ef434b2d440992626d80b1ebdc)
1#!/usr/bin/env bash
2# SPDX-License-Identifier: MIT
3# shellcheck disable=SC2086 # we want word splitting
4# shellcheck disable=SC1091 # paths only become valid at runtime
5
6# shellcheck disable=SC1090
7source "${FDO_CI_BASH_HELPERS}"
8
9fdo_log_section_start_collapsed prepare_rootfs "Preparing root filesystem"
10
11set -ex
12
13# If we run in the fork (not from mesa or Marge-bot), reuse mainline kernel and rootfs, if exist.
14ROOTFS_URL="$(fdo_find_s3_path "$LAVA_ROOTFS_PATH")" ||
15{
16	set +x
17	fdo_log_section_error "Sorry, I couldn't find a viable built path for ${LAVA_ROOTFS_PATH} in either mainline or a fork." >&2
18	echo "" >&2
19	echo "If you're working on CI, this probably means that you're missing a dependency:" >&2
20	echo "this job ran ahead of the job which was supposed to upload that artifact." >&2
21	echo "" >&2
22	echo "If you aren't working on CI, please ping @mesa/ci-helpers to see if we can help." >&2
23	echo "" >&2
24	echo "This job is going to fail, because I can't find the resources I need. Sorry." >&2
25	set -x
26	exit 1
27}
28
29rm -rf results
30mkdir results
31
32fdo_filter_env_vars > dut-env-vars.sh
33# Set SCRIPTS_DIR to point to the Mesa install we download for the DUT
34echo "export SCRIPTS_DIR='$CI_PROJECT_DIR/install'" >> dut-env-vars.sh
35
36fdo_log_section_end prepare_rootfs
37
38# Prepare env vars for upload.
39fdo_log_section_start_collapsed variables "Environment variables passed through to device:"
40cat dut-env-vars.sh
41fdo_log_section_end variables
42
43fdo_log_section_start_collapsed lava_submit "Submitting job for scheduling"
44
45touch results/lava.log
46tail -f results/lava.log &
47# Ensure that we are printing the commands that are being executed,
48# making it easier to debug the job in case it fails.
49set -x
50
51# List of optional overlays
52LAVA_EXTRA_OVERLAYS=()
53if [ -n "${LAVA_FIRMWARE:-}" ]; then
54    for fw in $LAVA_FIRMWARE; do
55        LAVA_EXTRA_OVERLAYS+=(
56            - append-overlay
57              --name=linux-firmware
58              --url="https://${S3_BASE_PATH}/${FIRMWARE_REPO}/${fw}-${FIRMWARE_TAG}.tar"
59              --path="/"
60              --format=tar
61        )
62    done
63fi
64LAVA_EXTRA_OVERLAYS+=(
65    - append-overlay \
66      --name=kernel-build \
67      --url="${FDO_HTTP_CACHE_URI:-}https://${PIPELINE_ARTIFACTS_BASE}/${DEBIAN_ARCH}/kernel-files.tar.zst" \
68      --compression=zstd \
69      --path="${CI_PROJECT_DIR}" \
70      --format=tar \
71)
72
73lava-job-submitter \
74	--farm "${FARM}" \
75	--device-type "${DEVICE_TYPE}" \
76	--boot-method "${BOOT_METHOD}" \
77	--job-timeout-min $((CI_JOB_TIMEOUT/60 - 5)) \
78	--dump-yaml \
79	--pipeline-info "$CI_JOB_NAME: $CI_PIPELINE_URL on $CI_COMMIT_REF_NAME ${CI_NODE_INDEX}/${CI_NODE_TOTAL}" \
80	--rootfs-url "${ROOTFS_URL}" \
81	--kernel-url-prefix "https://${PIPELINE_ARTIFACTS_BASE}/${DEBIAN_ARCH}" \
82	--dtb-filename "${DTB}" \
83	--env-file dut-env-vars.sh \
84	--jwt-file "${S3_JWT_FILE}" \
85	--kernel-image-name "${KERNEL_IMAGE_NAME}" \
86	--kernel-image-type "${KERNEL_IMAGE_TYPE}" \
87	--visibility-group "${VISIBILITY_GROUP}" \
88	--lava-tags "${LAVA_TAGS}" \
89	--mesa-job-name "$CI_JOB_NAME" \
90	--structured-log-file "results/lava_job_detail.json" \
91	--ssh-client-image "${LAVA_SSH_CLIENT_IMAGE}" \
92	--project-dir "${CI_PROJECT_DIR}" \
93	--project-name "${CI_PROJECT_NAME}" \
94	--starting-section lava_submit \
95	--job-submitted-at "${CI_JOB_STARTED_AT}" \
96	"${LAVA_EXTRA_OVERLAYS[@]}" \
97	- submit \
98	>> results/lava.log
99