Skip to content

Commit 9af3597

Browse files
authored
fix updated
1 parent 3c7cba3 commit 9af3597

5 files changed

Lines changed: 734 additions & 29 deletions

File tree

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
name: LAVA Job Render
2+
description: >
3+
Resolves flash_files + rootfs presigned URLs, writes cloudData.json +
4+
metadata.json, renders a LAVA job definition with BOOT_METHOD=flasher
5+
and --video_pre-merge tests, then patches device_type to correct lavaname.
6+
7+
inputs:
8+
docker_image:
9+
description: Docker image to use for rendering
10+
required: true
11+
machine:
12+
description: Target machine name (e.g. qcs9100-ride-sx)
13+
required: true
14+
lavaname:
15+
description: LAVA device-type name (e.g. qcs9100-ride)
16+
required: true
17+
presigned_urls_file:
18+
description: Absolute path to presigned_urls.json from the build job
19+
required: true
20+
21+
runs:
22+
using: "composite"
23+
steps:
24+
25+
- name: Extract presigned URLs for this machine
26+
id: get_urls
27+
shell: bash
28+
env:
29+
MACHINE: ${{ inputs.machine }}
30+
PRESIGNED_FILE: ${{ inputs.presigned_urls_file }}
31+
run: |
32+
set -euo pipefail
33+
34+
flash_key="${MACHINE}_flash_files.tar"
35+
rootfs_key="${MACHINE}_rootfs.img"
36+
37+
if [ ! -f "$PRESIGNED_FILE" ]; then
38+
echo "❌ presigned_urls.json not found at: $PRESIGNED_FILE"
39+
exit 1
40+
fi
41+
42+
echo "=== presigned_urls.json keys ==="
43+
jq -r 'keys[]' "$PRESIGNED_FILE"
44+
45+
flash_url="$(jq -r --arg key "$flash_key" '.[$key] // empty' "$PRESIGNED_FILE")"
46+
rootfs_url="$(jq -r --arg key "$rootfs_key" '.[$key] // empty' "$PRESIGNED_FILE")"
47+
48+
if [ -z "$flash_url" ]; then
49+
echo "❌ No presigned URL found for key: $flash_key"
50+
exit 1
51+
fi
52+
53+
if [ -z "$rootfs_url" ]; then
54+
echo "❌ No presigned URL found for key: $rootfs_key"
55+
exit 1
56+
fi
57+
58+
echo "✅ Resolved flash_url for: $flash_key"
59+
echo "✅ Resolved rootfs_url for: $rootfs_key"
60+
echo "flash_url=$flash_url" >> "$GITHUB_OUTPUT"
61+
echo "rootfs_url=$rootfs_url" >> "$GITHUB_OUTPUT"
62+
63+
- name: Write synthetic cloudData.json and metadata.json
64+
id: write_json
65+
shell: bash
66+
env:
67+
MACHINE: ${{ inputs.machine }}
68+
LAVA_NAME: ${{ inputs.lavaname }}
69+
FLASH_URL: ${{ steps.get_urls.outputs.flash_url }}
70+
ROOTFS_URL: ${{ steps.get_urls.outputs.rootfs_url }}
71+
WORKSPACE: ${{ github.workspace }}
72+
run: |
73+
set -euo pipefail
74+
75+
JOB_RENDER_DIR="$(dirname "$WORKSPACE")/job_render"
76+
77+
if [ ! -d "$JOB_RENDER_DIR" ]; then
78+
echo "❌ job_render directory not found at: $JOB_RENDER_DIR"
79+
ls -la "$(dirname "$WORKSPACE")"
80+
exit 1
81+
fi
82+
83+
DATA_DIR="$JOB_RENDER_DIR/data"
84+
mkdir -p "$DATA_DIR"
85+
86+
case "$MACHINE" in
87+
qcs9100-ride-sx) DTB_NAME="qcs9100-ride-r3" ;;
88+
qcs8300-ride-sx) DTB_NAME="qcs8300-ride" ;;
89+
rb3gen2-core-kit) DTB_NAME="qcs6490-rb3gen2" ;;
90+
qcs615-ride) DTB_NAME="qcs615-ride" ;;
91+
sm8750-mtp) DTB_NAME="sm8750-mtp" ;;
92+
kaanapali-mtp) DTB_NAME="kaanapali-mtp" ;;
93+
*) DTB_NAME="$MACHINE" ;;
94+
esac
95+
96+
echo "dtb_name=$DTB_NAME" >> "$GITHUB_OUTPUT"
97+
echo "job_render_dir=$JOB_RENDER_DIR" >> "$GITHUB_OUTPUT"
98+
99+
echo "📝 Writing cloudData.json (machine=$MACHINE lavaname=$LAVA_NAME dtb=$DTB_NAME)"
100+
101+
jq -n \
102+
--arg machine "$MACHINE" \
103+
--arg lavaname "$LAVA_NAME" \
104+
--arg flash_url "$FLASH_URL" \
105+
--arg rootfs_url "$ROOTFS_URL" \
106+
'{
107+
"id": ("ci-" + $machine),
108+
"kind": "kbuild",
109+
"name": ("ci-build-" + $machine),
110+
"path": ["checkout", ("ci-build-" + $machine)],
111+
"group": ("ci-build-" + $machine),
112+
"parent": "",
113+
"state": "done",
114+
"result": "pass",
115+
"artifacts": {
116+
"metadata": "",
117+
"kernel": "",
118+
"vmlinux": "",
119+
"modules": "",
120+
"ramdisk": "",
121+
"firmware": "",
122+
"dtb": "",
123+
"flash_image": $flash_url,
124+
"rootfs_image": $rootfs_url
125+
},
126+
"data": {
127+
"kernel_revision": {
128+
"tree": "qcom-next",
129+
"url": "",
130+
"branch": "main",
131+
"commit": "",
132+
"describe":"",
133+
"version": {
134+
"version": 0,
135+
"patchlevel": 0,
136+
"sublevel": null,
137+
"extra": "",
138+
"name": null
139+
},
140+
"patchset": null,
141+
"commit_tags": [],
142+
"commit_message": "",
143+
"tip_of_branch": true
144+
},
145+
"arch": "arm64",
146+
"defconfig": "defconfig",
147+
"compiler": "gcc-12",
148+
"error_code": null,
149+
"error_msg": null,
150+
"fragments": [],
151+
"config_full": "defconfig",
152+
"platform": $lavaname,
153+
"runtime": "lava",
154+
"job_id": ("ci-" + $machine),
155+
"job_context": "github-actions",
156+
"kernel_type": "image",
157+
"regression": null
158+
},
159+
"debug": {},
160+
"jobfilter": null,
161+
"platform_filter":[],
162+
"owner": "production",
163+
"submitter": "service:pipeline"
164+
}' > "$DATA_DIR/cloudData.json"
165+
166+
echo "✅ cloudData.json written"
167+
168+
echo "📝 Writing metadata.json (DTB key: dtbs/qcom/${DTB_NAME}.dtb)"
169+
jq -n \
170+
--arg dtb_key "dtbs/qcom/${DTB_NAME}.dtb" \
171+
'{
172+
"build": {
173+
"arch": "arm64",
174+
"compiler": "gcc-12",
175+
"defconfig": "defconfig",
176+
"fragments": [],
177+
"config_full": "defconfig",
178+
"result": "pass"
179+
},
180+
"artifacts": {
181+
($dtb_key): ""
182+
}
183+
}' > "$DATA_DIR/metadata.json"
184+
185+
echo "✅ metadata.json written"
186+
187+
- name: Render LAVA job definition
188+
shell: bash
189+
env:
190+
DOCKER_IMAGE: ${{ inputs.docker_image }}
191+
MACHINE: ${{ inputs.machine }}
192+
LAVA_NAME: ${{ inputs.lavaname }}
193+
TARGET_DTB: ${{ steps.write_json.outputs.dtb_name }}
194+
WORKSPACE: ${{ github.workspace }}
195+
run: |
196+
set -euo pipefail
197+
198+
JOB_RENDER_DIR="$(dirname "$WORKSPACE")/job_render"
199+
RENDERS_DIR="$JOB_RENDER_DIR/renders"
200+
mkdir -p "$RENDERS_DIR"
201+
202+
echo "🔧 Rendering LAVA job: machine=$MACHINE lavaname=$LAVA_NAME dtb=$TARGET_DTB"
203+
204+
docker run -i --rm \
205+
--workdir="$JOB_RENDER_DIR" \
206+
-v "$(dirname "$JOB_RENDER_DIR"):$(dirname "$JOB_RENDER_DIR")" \
207+
-e MACHINE="$MACHINE" \
208+
-e TARGET="$MACHINE" \
209+
-e LAVA_NAME="$LAVA_NAME" \
210+
-e TARGET_DTB="$TARGET_DTB" \
211+
-e BOOT_METHOD="flasher" \
212+
"$DOCKER_IMAGE" \
213+
bash -c '
214+
set -euo pipefail
215+
export BOOT_METHOD=flasher
216+
python3 lava_Job_definition_generator.py \
217+
--localjson ./data/cloudData.json \
218+
--meta-qcom \
219+
--video_pre-merge
220+
'
221+
222+
echo "✅ LAVA job definition rendered"
223+
224+
- name: Patch device_type in rendered YAML
225+
shell: bash
226+
env:
227+
MACHINE: ${{ inputs.machine }}
228+
LAVA_NAME: ${{ inputs.lavaname }}
229+
WORKSPACE: ${{ github.workspace }}
230+
run: |
231+
set -euo pipefail
232+
233+
JOB_RENDER_DIR="$(dirname "$WORKSPACE")/job_render"
234+
YAML="$JOB_RENDER_DIR/renders/lava_job_definition.yaml"
235+
236+
if [ ! -f "$YAML" ]; then
237+
echo "❌ Rendered YAML not found: $YAML"
238+
exit 1
239+
fi
240+
241+
echo "🔧 Patching device_type: $MACHINE → $LAVA_NAME"
242+
sudo chown "$(id -u):$(id -g)" "$YAML" || true
243+
sed -i "s|^device_type:.*|device_type: ${LAVA_NAME}|" "$YAML"
244+
245+
echo "✅ device_type patched"
246+
echo "=== Rendered YAML ==="
247+
cat "$YAML"

.github/workflows/pre_merge.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@ jobs:
2020
needs: loading
2121
uses: ./.github/workflows/sync-and-build.yml
2222
secrets: inherit
23+
with:
24+
build_matrix: ${{ needs.loading.outputs.build_matrix }}
25+
docker_image: kmake-image:ver.1.0
26+
27+
lava-test:
28+
needs: [loading, build]
29+
uses: ./.github/workflows/test.yml
30+
secrets: inherit
2331
with:
2432
build_matrix: ${{ needs.loading.outputs.build_matrix }}
2533
docker_image: kmake-image:ver.1.0

.github/workflows/sync-and-build.yml

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ jobs:
123123
set -euo pipefail
124124
workspace="${{ github.workspace }}"
125125
machine="${{ matrix.build_matrix.machine }}"
126+
126127
symlink_path="$workspace/build/tmp/deploy/images/$machine/qcom-multimedia-proprietary-image-${machine}.rootfs.qcomflash"
127128
128129
if [ ! -L "$symlink_path" ]; then
@@ -137,28 +138,46 @@ jobs:
137138
exit 1
138139
fi
139140
140-
cd "$resolved_dir"
141-
ls -larth
141+
ROOTFS_IMG="$resolved_dir/rootfs.img"
142+
if [ ! -f "$ROOTFS_IMG" ]; then
143+
echo "❌ rootfs.img not found at: $ROOTFS_IMG"
144+
exit 1
145+
fi
146+
147+
echo "=== qcomflash contents ==="
148+
ls -larth "$resolved_dir"
142149
143150
mkdir -p "$workspace/artifacts"
144151
: > "$workspace/artifacts/file_list.txt"
145-
: > "$workspace/artifacts/tar_list.txt"
146152
147-
find "$resolved_dir" -type f -exec realpath {} \; > "$workspace/artifacts/tar_list.txt"
153+
# ---------------------------------------------------------------
154+
# Split into TWO artifacts:
155+
# 1. {machine}_flash_files.tar — everything EXCEPT rootfs.img
156+
# 2. {machine}_rootfs.img — injected rootfs
157+
# LAVA downloads them sequentially then combines in Docker.
158+
# ---------------------------------------------------------------
148159
149-
if [ ! -s "$workspace/artifacts/tar_list.txt" ]; then
150-
echo "⚠️ No files found to archive."
151-
exit 1
152-
fi
160+
FLASH_TAR="$workspace/${machine}_flash_files.tar"
161+
ROOTFS_DEST="$workspace/${machine}_rootfs.img"
162+
163+
echo "📦 Creating flash_files.tar (excluding rootfs.img)..."
164+
tar -cf "$FLASH_TAR" \
165+
-C "$resolved_dir" \
166+
--exclude='./rootfs.img' \
167+
.
168+
echo "✅ flash_files.tar: $(ls -lh "$FLASH_TAR" | awk '{print $5}')"
169+
170+
echo "📦 Copying injected rootfs.img..."
171+
cp "$ROOTFS_IMG" "$ROOTFS_DEST"
172+
echo "✅ rootfs.img: $(ls -lh "$ROOTFS_DEST" | awk '{print $5}')"
153173
154-
tarball="${machine}_qcomflash_payload.tar.xz"
155-
tar -cJf "$tarball" -T "$workspace/artifacts/tar_list.txt"
156-
mv "$tarball" "$workspace"
157-
echo "$workspace/$tarball" >> "$workspace/artifacts/file_list.txt"
174+
echo "$FLASH_TAR" >> "$workspace/artifacts/file_list.txt"
175+
echo "$ROOTFS_DEST" >> "$workspace/artifacts/file_list.txt"
158176
159-
echo "✅ Tarball created: $tarball"
177+
echo "=== Queued for upload ==="
178+
cat "$workspace/artifacts/file_list.txt"
160179
161-
- name:
180+
- name: Upload artifacts to S3
162181
id: upload-artifacts
163182
uses: qualcomm-linux/video-driver/.github/actions/aws_s3_helper@meta-qcom_full-build
164183
with:
@@ -169,12 +188,22 @@ jobs:
169188
env:
170189
machine: ${{ matrix.build_matrix.machine }}
171190

191+
- name: Upload machine-specific presigned URLs artifact
192+
uses: actions/upload-artifact@v4
193+
with:
194+
name: presigned-urls-${{ matrix.build_matrix.machine }}
195+
path: ${{ github.workspace }}/presigned_urls.json
196+
retention-days: 3
197+
172198
- name: Clean up
199+
if: always()
173200
shell: bash
174201
run: |
175-
rm -rf "${{ github.workspace }}/artifacts"
176-
rm -rf "${{ github.workspace }}/build"
177-
rm -f "${{ github.workspace }}/modules.tar.xz"
202+
rm -rf "${{ github.workspace }}/artifacts" || true
203+
rm -rf "${{ github.workspace }}/build" || true
204+
rm -rf "${{ github.workspace }}/downloads" || true
205+
rm -f "${{ github.workspace }}/"*_flash_files.tar || true
206+
rm -f "${{ github.workspace }}/"*_rootfs.img || true
178207
179208
- name: Update summary
180209
if: success() || failure()
@@ -185,4 +214,5 @@ jobs:
185214
else
186215
summary=":x: Build Failed for ${{ matrix.build_matrix.machine }}"
187216
fi
188-
echo -e "<details><summary><i>Build Summary</i></summary>\n${summary}\n</details>" >> "$GITHUB_STEP_SUMMARY"
217+
echo -e "<details><summary><i>Build Summary</i></summary>\n${summary}\n</details>" \
218+
>> "$GITHUB_STEP_SUMMARY"

0 commit comments

Comments
 (0)