Newer
Older
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Huawei Inc.
##
## Submits a job to LAVA with CI variables
##
.lava-test:
interruptible: true
image:
name: registry.ostc-eu.org/ostc/containers/ostc-builder:latest
CI_LAVA_INSTANCE: "https://lava.ostc-eu.org/"
- test -n "$CI_LAVA_TOKEN" || (
echo "precondition failed - please disable the child job if CI_LAVA_TOKEN not set in gitlab CI/CD variables"
&& exit 1 )
# Check if the job is configured properly.
- test -n "$MACHINE" || (
echo "precondition failed - set MACHINE to the name of the target device for which the image is built"
&& exit 1 )
- test -n "$CI_BUILD_JOB_NAME" || (
echo "precondition failed - set CI_BUILD_JOB_NAME to the appropriate job name from which LAVA will pick up build artifact"
&& exit 1 )
- test -n "$CI_LAVA_JOB_DEFINITION" || (
echo "precondition failed - set CI_LAVA_JOB_DEFINITION to the URL of the LAVA test job definition"
&& exit 1 )
- test -n "$CI_REPORT_JOB_NAME" || (
echo "precondition failed - set CI_REPORT_JOB_NAME to the CI job name which will gather results back from LAVA"
&& exit 1 )
script:
# Build callback URL for the "report" job
- curl --silent "$CI_API_V4_URL/projects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/jobs?per_page=100" > jobs-manual.json
- job_id="$(jq -r ".[] | select(.name == \"$CI_REPORT_JOB_NAME\") | .id" jobs-manual.json)"
- build_job_id="$(jq -r ".[] | select(.name == \"$CI_BUILD_JOB_NAME\") | .id" jobs-manual.json)"
- CALLBACK_URL="$CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/${job_id}/play"
# Get the job definition from remote source.
- curl --silent "$CI_LAVA_JOB_DEFINITION" > job_def.yaml
# Update the job definition with CI data.
- sed -i -e 's/$ci_job_id/'"$CI_JOB_ID"'/'
-e 's/$ci_project_id/'"$CI_PROJECT_ID"'/'
-e 's/$ci_pipeline_id/'"$CI_PIPELINE_ID"'/'
-e 's,$ci_pipeline_url,'"$CI_PIPELINE_URL"','
-e 's/$build_job_id/'"$build_job_id"'/'
-e 's,$callback_url,'"$CALLBACK_URL"',' job_def.yaml
# Generate job definitions for zephyr build
- |
rm -rf lava_jobs && mkdir lava_jobs
if echo "${CI_BUILD_JOB_NAME}" | grep -i "zephyr"; then
for image in $(find artifacts/images/${MACHINE} -name "*.elf" -exec basename {} \;); do
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
job_name=$(basename "${image}" ".elf")
echo "--- Generating lava job definition ${job_name}.yaml ---"
sed "s/\$elf_file/$image/" job_def.yaml | tee lava_jobs/"${job_name}".yaml
done
else
mv job_def.yaml lava_jobs/
fi
# Submit the job to LAVA.
- |
for job_def in $(find lava_jobs/ -name "*.yaml"); do
lava_job_id=$(curl -X POST -H "Authorization: Token $CI_LAVA_TOKEN" -F "definition=$(<${job_def})" "$CI_LAVA_INSTANCE/api/v0.2/jobs/" | jq ".job_ids" | tr -d "[\n ]")
if [ -n "${lava_job_id}" ]; then
echo "$CI_LAVA_INSTANCE/scheduler/job/$lava_job_id"
echo "$lava_job_id" >> job_ids_"${CI_JOB_NAME}_${lava_job_id}".txt
else
echo "Failed to submit LAVA job"
exit 1
fi
done
artifacts:
paths:
- job_ids_*.txt
rules:
# Run the build when it is scheduled.
- if: $CI_PIPELINE_SOURCE == "schedule"
# Do not run pipelines for draft merge requests unless manually triggered.
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE =~ /^(wip|draft):.*/i'
when: manual
# Run the build when a merge request is created.
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
# Run the build when a tag is placed.
- if: '$CI_COMMIT_TAG'
.lava-report:
interruptible: true
image:
name: registry.ostc-eu.org/ostc/containers/ostc-builder:latest
stage: report
CI_LAVA_INSTANCE: "https://lava.ostc-eu.org/"
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
script:
- |
for file in $(find ./ -name "job_ids_*.txt"); do
echo "Job file: $file"
while read -r p; do
echo "Job ID: $p"
mkdir "$p"
# Echo LAVA job health and link.
link="$CI_LAVA_INSTANCE/scheduler/job/$p"
health="$(curl --silent "$CI_LAVA_INSTANCE/api/v0.2/jobs/$p/" | jq '.health' | tr -d '"')"
echo "[$health] $link"
# Get the JUnit export from LAVA.
curl --silent -o job_$p.xml "$CI_LAVA_INSTANCE/api/v0.2/jobs/$p/junit/"
echo "Report file: $(ls job_$p.xml)"
done < "$file"
done
artifacts:
when: always
paths:
- job_*.xml
reports:
junit:
- job_*.xml
rules:
# Run the build when it is scheduled.
- if: $CI_PIPELINE_SOURCE == "schedule"
when: manual
# Do not run pipelines for draft merge requests unless manually triggered.
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE =~ /^(wip|draft):.*/i'
when: manual
# Run the build when a merge request is created.
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: manual
# Run the build when a tag is placed.
- if: '$CI_COMMIT_TAG'
when: manual