• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env bash
2# shellcheck disable=SC2086 # we want word splitting
3# shellcheck disable=SC1091 # paths only become valid at runtime
4
5# If we run in the fork (not from mesa or Marge-bot), reuse mainline kernel and rootfs, if exist.
6_check_artifact_path() {
7	_url="https://${1}/${2}"
8	if curl -s -o /dev/null -I -L -f --retry 4 --retry-delay 15 "${_url}"; then
9		echo -n "${_url}"
10	fi
11}
12
13get_path_to_artifact() {
14	_mainline_artifact="$(_check_artifact_path ${BASE_SYSTEM_MAINLINE_HOST_PATH} ${1})"
15	if [ -n "${_mainline_artifact}" ]; then
16		echo -n "${_mainline_artifact}"
17		return
18	fi
19	_fork_artifact="$(_check_artifact_path ${BASE_SYSTEM_FORK_HOST_PATH} ${1})"
20	if [ -n "${_fork_artifact}" ]; then
21		echo -n "${_fork_artifact}"
22		return
23	fi
24	set +x
25	error "Sorry, I couldn't find a viable built path for ${1} in either mainline or a fork." >&2
26	echo "" >&2
27	echo "If you're working on CI, this probably means that you're missing a dependency:" >&2
28	echo "this job ran ahead of the job which was supposed to upload that artifact." >&2
29	echo "" >&2
30	echo "If you aren't working on CI, please ping @mesa/ci-helpers to see if we can help." >&2
31	echo "" >&2
32	echo "This job is going to fail, because I can't find the resources I need. Sorry." >&2
33	set -x
34	exit 1
35}
36
37. "${SCRIPTS_DIR}/setup-test-env.sh"
38
39section_start prepare_rootfs "Preparing root filesystem"
40
41set -ex
42
43section_switch rootfs "Assembling root filesystem"
44ROOTFS_URL="$(get_path_to_artifact lava-rootfs.tar.zst)"
45[ $? != 1 ] || exit 1
46
47rm -rf results
48mkdir -p results/job-rootfs-overlay/
49
50artifacts/ci-common/generate-env.sh > results/job-rootfs-overlay/set-job-env-vars.sh
51cp artifacts/ci-common/init-*.sh results/job-rootfs-overlay/
52cp "$SCRIPTS_DIR"/setup-test-env.sh results/job-rootfs-overlay/
53
54tar zcf job-rootfs-overlay.tar.gz -C results/job-rootfs-overlay/ .
55ci-fairy s3cp --token-file "${S3_JWT_FILE}" job-rootfs-overlay.tar.gz "https://${JOB_ROOTFS_OVERLAY_PATH}"
56
57# Prepare env vars for upload.
58section_switch variables "Environment variables passed through to device:"
59cat results/job-rootfs-overlay/set-job-env-vars.sh
60
61section_switch lava_submit "Submitting job for scheduling"
62
63touch results/lava.log
64tail -f results/lava.log &
65PYTHONPATH=artifacts/ artifacts/lava/lava_job_submitter.py \
66	--farm "${FARM}" \
67	--device-type "${DEVICE_TYPE}" \
68	--boot-method "${BOOT_METHOD}" \
69	--job-timeout-min $((CI_JOB_TIMEOUT/60 - 5)) \
70	--dump-yaml \
71	--pipeline-info "$CI_JOB_NAME: $CI_PIPELINE_URL on $CI_COMMIT_REF_NAME ${CI_NODE_INDEX}/${CI_NODE_TOTAL}" \
72	--rootfs-url "${ROOTFS_URL}" \
73	--kernel-url-prefix "${KERNEL_IMAGE_BASE}/${DEBIAN_ARCH}" \
74	--kernel-external "${EXTERNAL_KERNEL_TAG}" \
75	--first-stage-init artifacts/ci-common/init-stage1.sh \
76	--dtb-filename "${DTB}" \
77	--jwt-file "${S3_JWT_FILE}" \
78	--kernel-image-name "${KERNEL_IMAGE_NAME}" \
79	--kernel-image-type "${KERNEL_IMAGE_TYPE}" \
80	--visibility-group "${VISIBILITY_GROUP}" \
81	--lava-tags "${LAVA_TAGS}" \
82	--mesa-job-name "$CI_JOB_NAME" \
83	--structured-log-file "results/lava_job_detail.json" \
84	--ssh-client-image "${LAVA_SSH_CLIENT_IMAGE}" \
85	--project-name "${CI_PROJECT_NAME}" \
86	--starting-section "${CURRENT_SECTION}" \
87	--job-submitted-at "${CI_JOB_STARTED_AT}" \
88	- append-overlay \
89		--name=mesa-build \
90		--url="https://${PIPELINE_ARTIFACTS_BASE}/${LAVA_S3_ARTIFACT_NAME:?}.tar.zst" \
91		--compression=zstd \
92		--path="${CI_PROJECT_DIR}" \
93		--format=tar \
94	- append-overlay \
95		--name=job-overlay \
96		--url="https://${JOB_ROOTFS_OVERLAY_PATH}" \
97		--compression=gz \
98		--path="/" \
99		--format=tar \
100	- submit \
101	>> results/lava.log
102