From f819b9d64bdb3eae51299c2c04dded6f13758f9b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 16 Dec 2025 15:04:10 +0100 Subject: [PATCH 01/18] Github workflows: copy workflows from meta-qcom.git This repo needs CI, as a first step copy over the workflow from qualcomm-linux/meta-com.git with the folllowing changes: * Change repository name checks to repo owner checks This should be propagated to all repos using this style of workflows to make sharing of the same code snippets easier. * Change 'meta-qcom' to 'meta-qcom-distro' where approriate And the reverse, specify 'meta-qcom' where things like KAS config files are referenced. * Reuse 'compile' action from meta-qcom.git instead of duplicating it The KAS configuration files and CI helper scripts present in meta-qcom.git/ci/ are being pulled from there for each CI run, they are not being copied or modified. Signed-off-by: Koen Kooi --- .github/workflows/build-yocto.yml | 252 ++++++++++++++++++++++++++ .github/workflows/monthly.yml | 15 ++ .github/workflows/nightly-build.yml | 32 ++++ .github/workflows/pr.yml | 24 +++ .github/workflows/publish-results.yml | 66 +++++++ .github/workflows/push.yml | 31 ++++ .github/workflows/repolinter.yml | 31 ++++ .github/workflows/stales.yml | 25 +++ .github/workflows/test-pr.yml | 83 +++++++++ .github/workflows/test.yml | 146 +++++++++++++++ 10 files changed, 705 insertions(+) create mode 100644 .github/workflows/build-yocto.yml create mode 100644 .github/workflows/monthly.yml create mode 100644 .github/workflows/nightly-build.yml create mode 100644 .github/workflows/pr.yml create mode 100644 .github/workflows/publish-results.yml create mode 100644 .github/workflows/push.yml create mode 100644 .github/workflows/repolinter.yml create mode 100644 .github/workflows/stales.yml create mode 100644 .github/workflows/test-pr.yml create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/build-yocto.yml b/.github/workflows/build-yocto.yml new file mode 100644 index 00000000..37f9a23b --- /dev/null +++ b/.github/workflows/build-yocto.yml @@ -0,0 +1,252 @@ +name: Build Yocto + +on: + workflow_call: + outputs: + artifacts_url: + description: "URL to retrieve build artifacts" + value: ${{ jobs.create-output.outputs.url }} + +env: + CACHE_DIR: /efs/qli/meta-qcom + KAS_REPO_REF_DIR: /efs/qli/meta-qcom/kas-mirrors + KAS_CONTAINER: /efs/qli/meta-qcom/kas-mirrors/kas-container + +jobs: + kas-setup: + if: github.repository_owner == 'qualcomm-linux' + runs-on: [self-hosted, qcom-u2404, amd64-ssd] + steps: + - name: Update kas-container + run: | + LATEST=$(git ls-remote --tags --refs --sort="v:refname" https://github.com/siemens/kas | tail -n1 | sed 's/.*\///') + wget -qO ${KAS_CONTAINER} https://raw.githubusercontent.com/siemens/kas/refs/tags/$LATEST/kas-container + chmod +x ${KAS_CONTAINER} + + - name: Update kas mirrors + run: | + for r in $(find ${KAS_REPO_REF_DIR}/* -maxdepth 0 -type d); do + echo "pre-fetch: $r" + git -C $r fetch --prune origin '+refs/*:refs/*' + done + + - uses: actions/checkout@v4 + with: + repository: qualcomm-linux/meta-qcom + ref: master + + - name: Run kas lock + run: | + ${KAS_CONTAINER} lock --update ci/base.yml:ci/qcom-distro.yml + + - uses: actions/upload-artifact@v4 + with: + name: kas-lock + path: ci/*.lock.yml + + yocto-run-checks: + needs: kas-setup + if: github.repository_owner == 'qualcomm-linux' + runs-on: [self-hosted, qcom-u2404, amd64-ssd] + steps: + - uses: actions/checkout@v4 + with: + repository: qualcomm-linux/meta-qcom + ref: master + + - uses: actions/download-artifact@v6 + with: + name: kas-lock + path: ci/ + + - name: Run yocto-check-layer + run: | + ci/kas-container-shell-helper.sh ci/yocto-check-layer.sh + + - name: Run Yocto patchreview + run: | + ci/kas-container-shell-helper.sh ci/yocto-patchreview.sh + + compile_warm_up: + needs: [kas-setup, yocto-run-checks] + if: github.repository_owner == 'qualcomm-linux' + runs-on: [self-hosted, qcom-u2404, amd64-ssd] + strategy: + fail-fast: true + matrix: + machine: + - rb3gen2-core-kit + - qcom-armv8a + distro: + - name: qcom-distro + yamlfile: ':ci/qcom-distro.yml' + - name: qcom-distro-prop-image + yamlfile: ':ci/qcom-distro-prop-image.yml' + # kvm is compatible with all the compile warm up machines + - name: qcom-distro-kvm + yamlfile: ':ci/qcom-distro-kvm.yml' + - name: qcom-distro-sota + yamlfile: ':ci/qcom-distro-sota.yml' + kernel: + - type: default + dirname: "" + yamlfile: "" + name: ${{ matrix.machine }}/${{ matrix.distro.name }}${{ matrix.kernel.dirname }} + steps: + - uses: actions/checkout@v4 + with: + repository: qualcomm-linux/meta-qcom + ref: master + + - name: Run kas build + uses: qualcomm-linux/meta-qcom/.github/actions/compile@master + with: + machine: ${{matrix.machine}} + distro_yaml: ${{matrix.distro.yamlfile}} + distro_name: ${{matrix.distro.name}} + kernel_yaml: ${{matrix.kernel.yamlfile}} + kernel_dirname: ${{matrix.kernel.dirname}} + cache_dir: ${CACHE_DIR} + kas: ${KAS_CONTAINER} + + compile: + needs: compile_warm_up + if: github.repository_owner == 'qualcomm-linux' + runs-on: [self-hosted, qcom-u2404, amd64-ssd] + outputs: + url: ${{ steps.compile_kas.outputs.url }} + strategy: + fail-fast: true + matrix: + machine: + - iq-8275-evk + - iq-9075-evk + - qcm6490-idp + - qcs615-ride + - qcs8300-ride-sx + - qcs9100-ride-sx + - qcom-armv7a + - rb1-core-kit + - sm8750-mtp + distro: + - name: qcom-distro + yamlfile: ':ci/qcom-distro.yml' + - name: qcom-distro-prop-image + yamlfile: ':ci/qcom-distro-prop-image.yml' + - name: qcom-distro-sota + yamlfile: ':ci/qcom-distro-sota.yml' + kernel: + - type: default + dirname: "" + yamlfile: "" + include: + # Additional builds for specific machines + - machine: qcom-armv8a + distro: + name: qcom-distro + yamlfile: ':ci/qcom-distro.yml' + kernel: + type: additional + dirname: "+linux-yocto-dev" + yamlfile: ":ci/linux-yocto-dev.yml" + - machine: qcom-armv8a + distro: + name: qcom-distro + yamlfile: ':ci/qcom-distro.yml' + kernel: + type: additional + dirname: "+linux-yocto-lts" + yamlfile: ":ci/linux-yocto-lts.yml" + # include kvm compatible machines for the builds + - machine: qcs9100-ride-sx + distro: + name: qcom-distro-kvm + yamlfile: ':ci/qcom-distro-kvm.yml' + kernel: + type: default + dirname: "" + yamlfile: "" + exclude: + # Incompatible builds + - machine: qcom-armv7a + distro: + name: qcom-distro-prop-image + name: ${{ matrix.machine }}/${{ matrix.distro.name }}${{ matrix.kernel.dirname }} + steps: + - uses: actions/checkout@v4 + with: + repository: qualcomm-linux/meta-qcom + ref: master + + - name: Run kas build + uses: ./.github/actions/compile + id: compile_kas + with: + machine: ${{matrix.machine}} + distro_yaml: ${{matrix.distro.yamlfile}} + distro_name: ${{matrix.distro.name}} + kernel_yaml: ${{matrix.kernel.yamlfile}} + kernel_dirname: ${{matrix.kernel.dirname}} + cache_dir: ${CACHE_DIR} + kas: ${KAS_CONTAINER} + + publish_summary: + needs: compile + runs-on: [self-hosted, qcom-u2404, amd64-ssd] + steps: + - name: 'Download build URLs' + uses: actions/download-artifact@v6 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + pattern: build-url* + path: urlfiles + merge-multiple: true + + - name: "Print output" + shell: python + id: print-output + run: | + import os + ftable = {} + oslist = set() + machinelist = set() + for fname in os.listdir("./urlfiles"): + if fname.startswith("build-url"): + b, m, o = fname.split("_", 2) + oslist.add(o) + machinelist.add(m) + url = "" + with open(f"./urlfiles/{fname}", "r") as urlfile: + url = urlfile.read() + if not o in ftable: + ftable.update({o:{m: url}}) + else: + ftable[o].update({m: url}) + + table_str = "| |" + + for m in sorted(machinelist): + table_str += f" {m} |" + + table_str += "\n|" + for i in range(len(machinelist) + 1): + table_str += " ---- |" + + table_str += "\n" + + for o in sorted(ftable.keys()): + table_str += f"| {o} |" + for m in sorted(machinelist): + url = ftable[o].get(m) + if url: + url = url.strip() + table_str += f" [Files]({url}/{o}/{m}/) |" + else: + table_str += " |" + table_str += "\n" + summary_file_name = os.environ.get("GITHUB_STEP_SUMMARY") + if summary_file_name: + with open(summary_file_name, "a") as summaryfile: + summaryfile.write("## Download URLs\n") + summaryfile.write(table_str) + print(table_str) diff --git a/.github/workflows/monthly.yml b/.github/workflows/monthly.yml new file mode 100644 index 00000000..3738f6f8 --- /dev/null +++ b/.github/workflows/monthly.yml @@ -0,0 +1,15 @@ +name: Monthly job + +on: + schedule: + - cron: "22 10 2 * *" # montly job - at "random" time - top of hour can be busy in github + +jobs: + sstate-cache-cleanup: + if: github.repository_owner == 'qualcomm-linux' + runs-on: [self-hosted, qcom-u2404, amd64-ssd] + steps: + - name: Clean up the persistant sstate-cache dir + run: | + # keep current and last month to allow smooth end of month transition + rm -rf /efs/qli/meta-qcom/sstate-cache-$(date -d '2 months ago' '+%Y-%m') diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml new file mode 100644 index 00000000..435cf916 --- /dev/null +++ b/.github/workflows/nightly-build.yml @@ -0,0 +1,32 @@ +name: Nightly Build + +on: + schedule: + # NOTE - changes to the cron spec should be pushed by https://github.com/quic-yocto-ci + # so that build notification emails will be sent out properly. + - cron: "23 23 * * *" # daily job - pick a random "minute" - top of hour can be busy in github + +permissions: + checks: write + pull-requests: write + contents: read + packages: read + +jobs: + build-nightly: + uses: ./.github/workflows/build-yocto.yml + test-nightly: + uses: ./.github/workflows/test.yml + needs: build-nightly + secrets: inherit + with: + build_id: ${{ github.run_id }} + publish-test-results: + uses: ./.github/workflows/publish-results.yml + needs: test-nightly + secrets: inherit + with: + workflow_id: ${{ github.run_id }} + event_name: ${{ github.event_name }} + event_file: ${{ github.event_path }} + commit: ${{ github.sha }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 00000000..768c7c8f --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,24 @@ +name: Build on PR + +on: + pull_request: + +permissions: + checks: write + pull-requests: write + contents: read + packages: read + +jobs: + event-file: + name: "Upload event file" + runs-on: ubuntu-latest + steps: + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: Event File + path: ${{ github.event_path }} + build-pr: + uses: ./.github/workflows/build-yocto.yml + diff --git a/.github/workflows/publish-results.yml b/.github/workflows/publish-results.yml new file mode 100644 index 00000000..fe90f58b --- /dev/null +++ b/.github/workflows/publish-results.yml @@ -0,0 +1,66 @@ +name: Publish test results + +on: + workflow_call: + inputs: + workflow_id: + required: true + type: string + event_name: + required: true + type: string + event_file: + required: true + type: string + commit: + required: true + type: string + +permissions: + checks: write + pull-requests: write + contents: read + packages: read + +jobs: + publish-test-results: + name: "Publish Tests Results" + runs-on: ubuntu-latest + steps: + - name: Download result files + uses: actions/download-artifact@v6 + with: + run-id: ${{ inputs.workflow_id }} + path: artifacts + github-token: ${{ github.token }} + + - name: Download result files PR + if: ${{ github.run_id != inputs.workflow_id }} + uses: actions/download-artifact@v6 + with: + path: artifacts + github-token: ${{ github.token }} + + - name: "List files" + run: | + echo $GITHUB_WORKSPACE + ls -R $GITHUB_WORKSPACE + + - id: app_token + uses: actions/create-github-app-token@v2 + if: always() + with: + app-id: 2291458 + private-key: ${{ secrets.TEST_REPORTING_APP_TOKEN }} + + - name: Publish Test Results + uses: EnricoMi/publish-unit-test-result-action@v2 + if: always() + with: + commit: ${{ inputs.commit }} + event_file: ${{ inputs.event_file}} + event_name: ${{ inputs.event_name }} + files: "${{ github.workspace }}/artifacts/**/*.xml" + action_fail: true + action_fail_on_inconclusive: true + github_token: ${{ steps.app_token.outputs.token }} diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml new file mode 100644 index 00000000..f06432de --- /dev/null +++ b/.github/workflows/push.yml @@ -0,0 +1,31 @@ +name: Build on push + +on: + push: + branches: + - master + +permissions: + checks: write + pull-requests: write + contents: read + packages: read + +jobs: + build: + uses: ./.github/workflows/build-yocto.yml + test: + uses: ./.github/workflows/test.yml + needs: [build] + secrets: inherit + with: + build_id: ${{ github.run_id }} + publish-test-results: + uses: ./.github/workflows/publish-results.yml + needs: test + secrets: inherit + with: + workflow_id: ${{ github.run_id }} + event_name: ${{ github.event_name }} + event_file: ${{ github.event_path }} + commit: ${{ github.sha }} diff --git a/.github/workflows/repolinter.yml b/.github/workflows/repolinter.yml new file mode 100644 index 00000000..7102d757 --- /dev/null +++ b/.github/workflows/repolinter.yml @@ -0,0 +1,31 @@ +name: QuIC Organization Repolinter + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + workflow_dispatch: + +jobs: + repolinter: + if: github.repository_owner == 'qualcomm-linux' + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + - name: Verify repolinter config file is present + id: check_files + uses: andstor/file-existence-action@v3 + with: + files: "repolint.json" + - name: Run Repolinter with local repolint.json + if: steps.check_files.outputs.files_exists == 'true' + uses: todogroup/repolinter-action@v1 + with: + config_file: "repolint.json" + - name: Run Repolinter with default ruleset + if: steps.check_files.outputs.files_exists == 'false' + uses: todogroup/repolinter-action@v1 + with: + config_url: "https://raw.githubusercontent.com/quic/.github/main/repolint.json" diff --git a/.github/workflows/stales.yml b/.github/workflows/stales.yml new file mode 100644 index 00000000..e9fed721 --- /dev/null +++ b/.github/workflows/stales.yml @@ -0,0 +1,25 @@ +name: 'Close stale issues and pull requests with no recent activity' +on: + schedule: + - cron: "30 1 * * *" + +permissions: + issues: write + pull-requests: write + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v9 + with: + stale-issue-message: 'This issue has been marked as stale due to 30 days of inactivity. To prevent automatic closure in 5 days, remove the stale label or add a comment. You can reopen a closed issue at any time.' + stale-pr-message: 'This pull request has been marked as stale due to 30 days of inactivity. To prevent automatic closure in 5 days, remove the stale label or add a comment. You can reopen a closed pull request at any time.' + exempt-issue-labels: bug,enhancement + exempt-pr-labels: bug,enhancement + days-before-stale: 30 + days-before-close: 5 + days-before-issue-close: -1 + remove-stale-when-updated: true + remove-issue-stale-when-updated: true + remove-pr-stale-when-updated: true diff --git a/.github/workflows/test-pr.yml b/.github/workflows/test-pr.yml new file mode 100644 index 00000000..d68291fe --- /dev/null +++ b/.github/workflows/test-pr.yml @@ -0,0 +1,83 @@ +name: Test PR build + +run-name: "Tests triggered by PR: ${{ github.event.workflow_run.display_title }}" + +on: + workflow_run: + workflows: ["Build on PR"] + types: + - completed + +permissions: + checks: write + pull-requests: write + contents: read + packages: read + +jobs: + test: + if: ${{ github.event.workflow_run.conclusion == 'success' }} + uses: ./.github/workflows/test.yml + secrets: inherit + with: + build_id: ${{ github.event.workflow_run.id }} + + comment-on-pr: + name: "Comment on PR" + needs: test + runs-on: ubuntu-latest + steps: + + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Download Artifacts + uses: actions/download-artifact@v6 + with: + path: artifacts + + - name: Download event file + uses: actions/download-artifact@v6 + with: + run-id: ${{ github.event.workflow_run.id }} + path: artifacts + github-token: ${{ github.token }} + + - name: "List files" + run: | + echo $GITHUB_WORKSPACE + ls -R $GITHUB_WORKSPACE + + - name: Prepare PR comment + id: pr_comment_prep + run: | + echo "## Test run [workflow](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})" > pr-comment.txt + echo "## Test jobs for commit ${{ github.event.workflow_run.head_sha }}" >> pr-comment.txt + for json_file in $(find ${{ github.workspace }} -name "test-job-*.json") + do + DEVICE_TYPE=$(cat "$json_file" | jq -r ".requested_device_type") + URL=$(cat "$json_file" | jq -r ".url") + JOB_ID=$(cat "$json_file" | jq -r ".id") + JOB_TITLE=$(cat "$json_file"| jq -r ".description") + echo " * [Job $JOB_ID on $DEVICE_TYPE]($URL) - ${JOB_TITLE}" + echo " * [Job $JOB_ID on $DEVICE_TYPE]($URL) - ${JOB_TITLE}" >> pr-comment.txt + done + PR_NUMBER=$(cat "artifacts/Event File/event.json" | jq -r ".number") + echo "pr_number=$PR_NUMBER" >> $GITHUB_OUTPUT + + - name: Comment on PR + uses: thollander/actions-comment-pull-request@v3 + with: + file-path: pr-comment.txt + pr-number: ${{ steps.pr_comment_prep.outputs.pr_number }} + + publish-test-results: + uses: ./.github/workflows/publish-results.yml + secrets: inherit + needs: [test] + with: + commit: ${{ github.event.workflow_run.sha }} + event_file: artifacts/Event File/event.json + event_name: ${{ github.event.workflow_run.event }} + workflow_id: ${{ github.event.workflow_run.id }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..553780b5 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,146 @@ +name: Tests + +on: + workflow_call: + inputs: + build_id: + required: true + type: string + +jobs: + prepare-jobs: + runs-on: ubuntu-latest + strategy: + matrix: + machine: + - iq-8275-evk + - iq-9075-evk + - qcm6490-idp + - qcs615-ride + - rb3gen2-core-kit + - qcs8300-ride-sx + - qcs9100-ride-sx + - qcom-armv8a + - qcom-armv7a + - rb1-core-kit + distro: + - name: qcom-distro + steps: + - uses: actions/checkout@v4 + with: + repository: qualcomm-linux/meta-qcom + ref: master + fetch-depth: 0 + + - name: 'Download build URLs' + uses: actions/download-artifact@v6 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ inputs.build_id }} + pattern: build-url* + + - name: "Generate testjobs" + run: | + export BUILD_URL_FILE="$GITHUB_WORKSPACE/build-url_${{ matrix.machine }}_${{ matrix.distro.name }}/build-url_${{ matrix.machine }}_${{ matrix.distro.name }}" + echo "${BUILD_URL_FILE}" + if [ -f "$BUILD_URL_FILE" ]; then + # install dependencies + export BUILD_URL=$(cat "${BUILD_URL_FILE}") + pip install jinja2 + if [ "${{ matrix.machine }}" = "qcom-armv8a" ]; then + python3 ci/generatetests.py --templates ci/lava --os ${{ matrix.distro.name }} --device dragonboard-410c --build-url "${BUILD_URL}" + python3 ci/generatetests.py --templates ci/lava --os ${{ matrix.distro.name }} --device dragonboard-820c --build-url "${BUILD_URL}" + echo "MACHINE=dragonboard" >> $GITHUB_ENV + else + python3 ci/generatetests.py --templates ci/lava --os ${{ matrix.distro.name }} --device ${{ matrix.machine }} --build-url "${BUILD_URL}" + echo "MACHINE=${{ matrix.machine }}" >> $GITHUB_ENV + fi + fi + - name: 'Upload test jobs' + uses: actions/upload-artifact@v4 + with: + name: testjobs-${{ matrix.machine }}-${{ matrix.distro.name }} + path: ${{ env.MACHINE}}*-${{ matrix.distro.name }}-*.yaml + + prepare-job-list: + needs: prepare-jobs + runs-on: ubuntu-latest + outputs: + jobmatrix: ${{ steps.listjobs.outputs.jobmatrix }} + steps: + - name: 'Download job templates' + uses: actions/download-artifact@v6 + with: + pattern: testjobs-* + + - name: "List jobs" + id: listjobs + run: | + JOBFILES=$(find . -name *.yaml) + JOBFILES=$(echo "$JOBFILES" | sed -e "s/^/\"/" | sed -e "s/$/\",/" | tr -d "\n" | sed -e "s/.$//") + JOBFILES="[${JOBFILES}]" + J=$(jq -cn --argjson jobfiles "$JOBFILES" '{target: $jobfiles}') + echo "jobmatrix=$J" >> $GITHUB_OUTPUT + echo "Preparing testjob files" + + submit-job: + needs: prepare-job-list + runs-on: ubuntu-latest + continue-on-error: true + strategy: + matrix: ${{ fromJson(needs.prepare-job-list.outputs.jobmatrix) }} + steps: + - name: 'Download job templates' + uses: actions/download-artifact@v6 + with: + pattern: testjobs-* + + - name: 'Prepare output file name' + run: | + OUTPUT_NAME=$(echo "${{ matrix.target }}" | sed "s|\/|-|g") + echo "RESULT_NAME=${OUTPUT_NAME#??}" >> $GITHUB_ENV + + - name: Submit ${{ matrix.target }} + timeout-minutes: 20 + uses: foundriesio/lava-action@v9 + with: + lava_token: ${{ secrets.LAVATOKEN }} + lava_url: 'lava.infra.foundries.io' + job_definition: ${{ matrix.target }} + wait_for_job: true + fail_action_on_failure: true + fail_action_on_incomplete: true + save_result_as_artifact: true + save_job_details: true + result_file_name: "${{ env.RESULT_NAME }}" + + publish-test-summary: + name: "Publish Tests Summary" + needs: submit-job + runs-on: ubuntu-latest + permissions: + checks: write + pull-requests: write + + steps: + - name: Download Artifacts + uses: actions/download-artifact@v6 + with: + path: artifacts + + - name: "List files" + run: | + echo $GITHUB_WORKSPACE + ls -R $GITHUB_WORKSPACE + + - name: Publish Test Job Details + run: | + for json_file in $(find ${{ github.workspace }} -name "test-job-*.json") + do + DEVICE_TYPE=$(cat "$json_file" | jq -r ".requested_device_type") + URL=$(cat "$json_file" | jq -r ".url") + JOB_ID=$(cat "$json_file" | jq -r ".id") + JOB_TITLE=$(cat "$json_file"| jq -r ".description") + echo " * [Job $JOB_ID on $DEVICE_TYPE]($URL) - ${JOB_TITLE}" + echo " * [Job $JOB_ID on $DEVICE_TYPE]($URL) - ${JOB_TITLE}" >> $GITHUB_STEP_SUMMARY + done From 23b0598ca0d36e01d1619c9e6986def577417ca6 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 19 Dec 2025 14:29:22 +0100 Subject: [PATCH 02/18] Github workflows: build-yocto.yml: restrict build to 3 machines The CI only needs to test if the DISTROs work, not the BSPs itself, so restrict the build to the following 3 machines: * qcom-armv7a * qcom-armv8a * rb3gen2-core-kit Restrict the KVM build to qcom-armv8a, it is not supported on armv7a machines. As a consequence: drop the warmup task, it isn't needed with the much reduced scope. Signed-off-by: Koen Kooi --- .github/workflows/build-yocto.yml | 55 ++----------------------------- 1 file changed, 3 insertions(+), 52 deletions(-) diff --git a/.github/workflows/build-yocto.yml b/.github/workflows/build-yocto.yml index 37f9a23b..b6836a4c 100644 --- a/.github/workflows/build-yocto.yml +++ b/.github/workflows/build-yocto.yml @@ -67,50 +67,7 @@ jobs: run: | ci/kas-container-shell-helper.sh ci/yocto-patchreview.sh - compile_warm_up: - needs: [kas-setup, yocto-run-checks] - if: github.repository_owner == 'qualcomm-linux' - runs-on: [self-hosted, qcom-u2404, amd64-ssd] - strategy: - fail-fast: true - matrix: - machine: - - rb3gen2-core-kit - - qcom-armv8a - distro: - - name: qcom-distro - yamlfile: ':ci/qcom-distro.yml' - - name: qcom-distro-prop-image - yamlfile: ':ci/qcom-distro-prop-image.yml' - # kvm is compatible with all the compile warm up machines - - name: qcom-distro-kvm - yamlfile: ':ci/qcom-distro-kvm.yml' - - name: qcom-distro-sota - yamlfile: ':ci/qcom-distro-sota.yml' - kernel: - - type: default - dirname: "" - yamlfile: "" - name: ${{ matrix.machine }}/${{ matrix.distro.name }}${{ matrix.kernel.dirname }} - steps: - - uses: actions/checkout@v4 - with: - repository: qualcomm-linux/meta-qcom - ref: master - - - name: Run kas build - uses: qualcomm-linux/meta-qcom/.github/actions/compile@master - with: - machine: ${{matrix.machine}} - distro_yaml: ${{matrix.distro.yamlfile}} - distro_name: ${{matrix.distro.name}} - kernel_yaml: ${{matrix.kernel.yamlfile}} - kernel_dirname: ${{matrix.kernel.dirname}} - cache_dir: ${CACHE_DIR} - kas: ${KAS_CONTAINER} - compile: - needs: compile_warm_up if: github.repository_owner == 'qualcomm-linux' runs-on: [self-hosted, qcom-u2404, amd64-ssd] outputs: @@ -119,15 +76,9 @@ jobs: fail-fast: true matrix: machine: - - iq-8275-evk - - iq-9075-evk - - qcm6490-idp - - qcs615-ride - - qcs8300-ride-sx - - qcs9100-ride-sx - qcom-armv7a - - rb1-core-kit - - sm8750-mtp + - qcom-armv8a + - rb3gen2-core-kit distro: - name: qcom-distro yamlfile: ':ci/qcom-distro.yml' @@ -158,7 +109,7 @@ jobs: dirname: "+linux-yocto-lts" yamlfile: ":ci/linux-yocto-lts.yml" # include kvm compatible machines for the builds - - machine: qcs9100-ride-sx + - machine: qcom-armv8a distro: name: qcom-distro-kvm yamlfile: ':ci/qcom-distro-kvm.yml' From 94823968f0d5578d9949e78775d9d6f2b70bd817 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 19 Dec 2025 14:37:43 +0100 Subject: [PATCH 03/18] Github workflows: drop monthly.yml Since we share sstate with meta-qcom, the monthly reaper covers us as well, so drop it from here. Signed-off-by: Koen Kooi --- .github/workflows/monthly.yml | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 .github/workflows/monthly.yml diff --git a/.github/workflows/monthly.yml b/.github/workflows/monthly.yml deleted file mode 100644 index 3738f6f8..00000000 --- a/.github/workflows/monthly.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Monthly job - -on: - schedule: - - cron: "22 10 2 * *" # montly job - at "random" time - top of hour can be busy in github - -jobs: - sstate-cache-cleanup: - if: github.repository_owner == 'qualcomm-linux' - runs-on: [self-hosted, qcom-u2404, amd64-ssd] - steps: - - name: Clean up the persistant sstate-cache dir - run: | - # keep current and last month to allow smooth end of month transition - rm -rf /efs/qli/meta-qcom/sstate-cache-$(date -d '2 months ago' '+%Y-%m') From 68410cd8df6131b91a7dc1d8ef42985f31070f8d Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 19 Dec 2025 14:39:14 +0100 Subject: [PATCH 04/18] Github workflows: drop nightly-build.yml The CI build here is a subset of meta-qcom.git, so this can be dropped. Signed-off-by: Koen Kooi --- .github/workflows/nightly-build.yml | 32 ----------------------------- 1 file changed, 32 deletions(-) delete mode 100644 .github/workflows/nightly-build.yml diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml deleted file mode 100644 index 435cf916..00000000 --- a/.github/workflows/nightly-build.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Nightly Build - -on: - schedule: - # NOTE - changes to the cron spec should be pushed by https://github.com/quic-yocto-ci - # so that build notification emails will be sent out properly. - - cron: "23 23 * * *" # daily job - pick a random "minute" - top of hour can be busy in github - -permissions: - checks: write - pull-requests: write - contents: read - packages: read - -jobs: - build-nightly: - uses: ./.github/workflows/build-yocto.yml - test-nightly: - uses: ./.github/workflows/test.yml - needs: build-nightly - secrets: inherit - with: - build_id: ${{ github.run_id }} - publish-test-results: - uses: ./.github/workflows/publish-results.yml - needs: test-nightly - secrets: inherit - with: - workflow_id: ${{ github.run_id }} - event_name: ${{ github.event_name }} - event_file: ${{ github.event_path }} - commit: ${{ github.sha }} From f35ecaaedde645014df291f147231986035bb754 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 19 Dec 2025 14:43:48 +0100 Subject: [PATCH 05/18] README.md: add CI status banner Signed-off-by: Koen Kooi --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index fe4bf398..5f172d78 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # meta-qcom-distro +[![Build on push](https://img.shields.io/github/actions/workflow/status/qualcomm-linux/meta-qcom-distro/push.yml?label=Build%20on%20push)](https://github.com/qualcomm-linux/meta-qcom-distro/actions/workflows/push.yml) + ## Introduction OpenEmbedded/Yocto Project Reference Distro layer for Qualcomm based platforms. From 4690ba3d2d8f9791be3f51744e28d1b9a6c6f26b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 19 Dec 2025 14:47:37 +0100 Subject: [PATCH 06/18] Github workflows: build-yocto.yml: run helper scripts against the proper repo Checkout meta-qcom-distro and run the layer and patch checker helpers against that, not meta-qcom.git. Signed-off-by: Koen Kooi --- .github/workflows/build-yocto.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-yocto.yml b/.github/workflows/build-yocto.yml index b6836a4c..a2f8aad2 100644 --- a/.github/workflows/build-yocto.yml +++ b/.github/workflows/build-yocto.yml @@ -54,6 +54,10 @@ jobs: repository: qualcomm-linux/meta-qcom ref: master + - uses: actions/checkout@v4 + with: + path: ../meta-qcom-distro + - uses: actions/download-artifact@v6 with: name: kas-lock @@ -61,11 +65,11 @@ jobs: - name: Run yocto-check-layer run: | - ci/kas-container-shell-helper.sh ci/yocto-check-layer.sh + ci/kas-container-shell-helper.sh ci/yocto-check-layer.sh ../meta-qcom-distro - name: Run Yocto patchreview run: | - ci/kas-container-shell-helper.sh ci/yocto-patchreview.sh + ci/kas-container-shell-helper.sh ci/yocto-patchreview.sh ../meta-qcom-distro compile: if: github.repository_owner == 'qualcomm-linux' From c2edbc5a072c51a5dcedb814c62053b0f557fc89 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 19 Dec 2025 16:17:51 +0100 Subject: [PATCH 07/18] Github workflows: use 'main' branch, not 'master' for meta-qcom-distro Signed-off-by: Koen Kooi --- .github/workflows/push.yml | 2 +- .github/workflows/repolinter.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index f06432de..61ad7719 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -3,7 +3,7 @@ name: Build on push on: push: branches: - - master + - main permissions: checks: write diff --git a/.github/workflows/repolinter.yml b/.github/workflows/repolinter.yml index 7102d757..aff3ca2e 100644 --- a/.github/workflows/repolinter.yml +++ b/.github/workflows/repolinter.yml @@ -2,9 +2,9 @@ name: QuIC Organization Repolinter on: push: - branches: [ master ] + branches: [ main ] pull_request: - branches: [ master ] + branches: [ main ] workflow_dispatch: jobs: From d380fbee7d5894c4bfc0107145f50250368adee6 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 5 Jan 2026 09:49:59 +0100 Subject: [PATCH 08/18] Github Workflows: test.yml: set fetch-depth to '1' instead of '0' Signed-off-by: Koen Kooi --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 553780b5..cda91619 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,7 +30,7 @@ jobs: with: repository: qualcomm-linux/meta-qcom ref: master - fetch-depth: 0 + fetch-depth: 1 - name: 'Download build URLs' uses: actions/download-artifact@v6 From 5cf71f9601e748981595328c93d13f4836d8c8b4 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 7 Jan 2026 13:59:35 +0100 Subject: [PATCH 09/18] Github workflows: reinstate full machine and kernel matrix to match meta-qcom CI Meta-qcom-distro CI should test all the combinations it supports and not depend on CI from other reps like meta-qcom to accomplish this. Signed-off-by: Koen Kooi --- .github/workflows/build-yocto.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/build-yocto.yml b/.github/workflows/build-yocto.yml index a2f8aad2..e02c4340 100644 --- a/.github/workflows/build-yocto.yml +++ b/.github/workflows/build-yocto.yml @@ -80,9 +80,19 @@ jobs: fail-fast: true matrix: machine: + - iq-8275-evk + - iq-9075-evk + - iq-x7181-evk + - kaanapali-mtp + - qcm6490-idp + - qcs615-ride + - qcs8300-ride-sx + - qcs9100-ride-sx - qcom-armv7a - qcom-armv8a + - rb1-core-kit - rb3gen2-core-kit + - sm8750-mtp distro: - name: qcom-distro yamlfile: ':ci/qcom-distro.yml' @@ -94,6 +104,9 @@ jobs: - type: default dirname: "" yamlfile: "" + - type: 6.18 + dirname: "+linux-qcom-6.18" + yamlfile: ":ci/linux-qcom-6.18.yml" include: # Additional builds for specific machines - machine: qcom-armv8a From d60b7078189cbb13c26db452d87eef7868fc577a Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 7 Jan 2026 14:14:21 +0100 Subject: [PATCH 10/18] Github workflows: fix 'compile' step dependencies Removing the 'compile_warmpup' step also removed the dependencies the compile step needs. Reinstated those. Signed-off-by: Koen Kooi --- .github/workflows/build-yocto.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-yocto.yml b/.github/workflows/build-yocto.yml index e02c4340..c6a51651 100644 --- a/.github/workflows/build-yocto.yml +++ b/.github/workflows/build-yocto.yml @@ -72,6 +72,7 @@ jobs: ci/kas-container-shell-helper.sh ci/yocto-patchreview.sh ../meta-qcom-distro compile: + needs: [kas-setup, yocto-run-checks] if: github.repository_owner == 'qualcomm-linux' runs-on: [self-hosted, qcom-u2404, amd64-ssd] outputs: From cf9c9323764ca003242a22b88bdf1b250eb88c1c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 8 Jan 2026 10:46:58 +0100 Subject: [PATCH 11/18] Github workflows: build-yocto: be more explicit where to put meta-qcom and explicity chdir into it Signed-off-by: Koen Kooi --- .github/workflows/build-yocto.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-yocto.yml b/.github/workflows/build-yocto.yml index c6a51651..33842cb5 100644 --- a/.github/workflows/build-yocto.yml +++ b/.github/workflows/build-yocto.yml @@ -52,6 +52,7 @@ jobs: - uses: actions/checkout@v4 with: repository: qualcomm-linux/meta-qcom + path: ../meta-qcom ref: master - uses: actions/checkout@v4 @@ -61,14 +62,16 @@ jobs: - uses: actions/download-artifact@v6 with: name: kas-lock - path: ci/ + path: ../meta-qcom/ci/ - name: Run yocto-check-layer run: | + cd ../meta-qcom ci/kas-container-shell-helper.sh ci/yocto-check-layer.sh ../meta-qcom-distro - name: Run Yocto patchreview run: | + cd ../meta-qcom ci/kas-container-shell-helper.sh ci/yocto-patchreview.sh ../meta-qcom-distro compile: From 400b0d0ec11e40fc488b3b9af0cec64fef56d1c5 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 8 Jan 2026 11:36:24 +0100 Subject: [PATCH 12/18] Github workflows: build-yocto: don't clone below ./ Signed-off-by: Koen Kooi --- .github/workflows/build-yocto.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-yocto.yml b/.github/workflows/build-yocto.yml index 33842cb5..fe312400 100644 --- a/.github/workflows/build-yocto.yml +++ b/.github/workflows/build-yocto.yml @@ -52,26 +52,26 @@ jobs: - uses: actions/checkout@v4 with: repository: qualcomm-linux/meta-qcom - path: ../meta-qcom + path: meta-qcom ref: master - uses: actions/checkout@v4 with: - path: ../meta-qcom-distro + path: meta-qcom-distro - uses: actions/download-artifact@v6 with: name: kas-lock - path: ../meta-qcom/ci/ + path: meta-qcom/ci/ - name: Run yocto-check-layer run: | - cd ../meta-qcom + cd meta-qcom ci/kas-container-shell-helper.sh ci/yocto-check-layer.sh ../meta-qcom-distro - name: Run Yocto patchreview run: | - cd ../meta-qcom + cd meta-qcom ci/kas-container-shell-helper.sh ci/yocto-patchreview.sh ../meta-qcom-distro compile: From a3b5a030a118040d5832808be908904de880efd2 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 8 Jan 2026 13:03:33 +0100 Subject: [PATCH 13/18] Github workflows: build-yocto: remove references to obsolute linux-yocto-lts KAS configs Signed-off-by: Koen Kooi --- .github/workflows/build-yocto.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/build-yocto.yml b/.github/workflows/build-yocto.yml index fe312400..90e279e7 100644 --- a/.github/workflows/build-yocto.yml +++ b/.github/workflows/build-yocto.yml @@ -121,14 +121,6 @@ jobs: type: additional dirname: "+linux-yocto-dev" yamlfile: ":ci/linux-yocto-dev.yml" - - machine: qcom-armv8a - distro: - name: qcom-distro - yamlfile: ':ci/qcom-distro.yml' - kernel: - type: additional - dirname: "+linux-yocto-lts" - yamlfile: ":ci/linux-yocto-lts.yml" # include kvm compatible machines for the builds - machine: qcom-armv8a distro: From 882b77f9902fda8ee0a13e1fb6fcbd22cd30fa51 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 8 Jan 2026 13:20:47 +0100 Subject: [PATCH 14/18] ci/yocto-check-layer.sh: import from meta-qcom, changes hardcodes This now hardcodes 'meta-qcom-distro' and removes the BSP checks, since this isn't a BSP layer. Signed-off-by: Koen Kooi --- ci/yocto-check-layer.sh | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100755 ci/yocto-check-layer.sh diff --git a/ci/yocto-check-layer.sh b/ci/yocto-check-layer.sh new file mode 100755 index 00000000..e027fec2 --- /dev/null +++ b/ci/yocto-check-layer.sh @@ -0,0 +1,41 @@ +#!/bin/bash -e +# Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved. +# SPDX-License-Identifier: MIT + +if [ -z $1 ] || [ -z $2 ] ; then + echo "The REPO_DIR or WORK_DIR is empty and it needs to point to the corresponding directories." + echo "Please run it with:" + echo " $0 REPO_DIR WORK_DIR" + exit 1 +fi + +REPO_DIR="$1" +WORK_DIR="$2" + +_is_dir(){ + test -d "$1" && return + echo "The '$1' is not a directory." + exit 1 +} + +_is_dir "$REPO_DIR" +_is_dir "$WORK_DIR" + +# Creates a temporary build directory to run the yocto-check-layer +# script to avoid a contaminated environment. +BUILDDIR="$(mktemp -p $WORK_DIR -d -t build-yocto-check-layer-XXXX)" +source $WORK_DIR/oe-core/oe-init-build-env $BUILDDIR +git -c advice.detachedHead=false -c init.defaultBranch=master clone --quiet --shared $REPO_DIR meta-qcom-distro + +# Yocto Project layer checking tool +CMD="yocto-check-layer" +# Layer to check +CMD="$CMD meta-qcom-distro" +# Disable auto layer discovery +CMD="$CMD --no-auto" +# Layers to process for dependencies +CMD="$CMD --dependency $WORK_DIR/oe-core/meta" +# Disable automatic testing of dependencies +CMD="$CMD --no-auto-dependency" + +exec $CMD From ab0e977e6a97c0c0b5f7c6079a41c7bded6e05f3 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 8 Jan 2026 13:22:30 +0100 Subject: [PATCH 15/18] Github workflows: build-yocto: use meta-qcom-distro yocto-check-layer.sh Signed-off-by: Koen Kooi --- .github/workflows/build-yocto.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-yocto.yml b/.github/workflows/build-yocto.yml index 90e279e7..53d1e82a 100644 --- a/.github/workflows/build-yocto.yml +++ b/.github/workflows/build-yocto.yml @@ -66,7 +66,7 @@ jobs: - name: Run yocto-check-layer run: | - cd meta-qcom + cd meta-qcom-distro ci/kas-container-shell-helper.sh ci/yocto-check-layer.sh ../meta-qcom-distro - name: Run Yocto patchreview From 9fa9b0aee76a7894d0a34aa84e2f9a4d3674d51e Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 8 Jan 2026 13:31:04 +0100 Subject: [PATCH 16/18] Github workflows: sync pr.yml with meta-qcom to whitelist doc changes Signed-off-by: Koen Kooi --- .github/workflows/pr.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 768c7c8f..64843511 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -2,6 +2,10 @@ name: Build on PR on: pull_request: + paths-ignore: + - 'README.md' + - 'README' + - 'SECURITY.md' permissions: checks: write From a255e43479aaef53681cd822c0a3a9ef8191e277 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 8 Jan 2026 13:36:07 +0100 Subject: [PATCH 17/18] Github-workflows: build-yocto: sync with meta-qcom PR1106 Signed-off-by: Koen Kooi --- .github/workflows/build-yocto.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-yocto.yml b/.github/workflows/build-yocto.yml index 53d1e82a..ea8eaf18 100644 --- a/.github/workflows/build-yocto.yml +++ b/.github/workflows/build-yocto.yml @@ -92,15 +92,12 @@ jobs: - qcs615-ride - qcs8300-ride-sx - qcs9100-ride-sx - - qcom-armv7a - qcom-armv8a - rb1-core-kit - rb3gen2-core-kit - sm8750-mtp distro: - name: qcom-distro - yamlfile: ':ci/qcom-distro.yml' - - name: qcom-distro-prop-image yamlfile: ':ci/qcom-distro-prop-image.yml' - name: qcom-distro-sota yamlfile: ':ci/qcom-distro-sota.yml' @@ -116,7 +113,7 @@ jobs: - machine: qcom-armv8a distro: name: qcom-distro - yamlfile: ':ci/qcom-distro.yml' + yamlfile: ':ci/qcom-distro-prop-image.yml' kernel: type: additional dirname: "+linux-yocto-dev" @@ -130,11 +127,14 @@ jobs: type: default dirname: "" yamlfile: "" - exclude: - # Incompatible builds - machine: qcom-armv7a distro: - name: qcom-distro-prop-image + name: qcom-distro + yamlfile: ':ci/qcom-distro.yml' + kernel: + type: default + dirname: "" + yamlfile: "" name: ${{ matrix.machine }}/${{ matrix.distro.name }}${{ matrix.kernel.dirname }} steps: - uses: actions/checkout@v4 From 6f18f622aee9690ed0f0691d00ca412365c18b45 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 8 Jan 2026 14:33:07 +0100 Subject: [PATCH 18/18] Github Workfows: build-yocto: fix path to kas-cintainer-shell-helper Signed-off-by: Koen Kooi --- .github/workflows/build-yocto.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-yocto.yml b/.github/workflows/build-yocto.yml index ea8eaf18..c4acbdae 100644 --- a/.github/workflows/build-yocto.yml +++ b/.github/workflows/build-yocto.yml @@ -67,7 +67,7 @@ jobs: - name: Run yocto-check-layer run: | cd meta-qcom-distro - ci/kas-container-shell-helper.sh ci/yocto-check-layer.sh ../meta-qcom-distro + ../meta-qcom/ci/kas-container-shell-helper.sh ci/yocto-check-layer.sh ../meta-qcom-distro - name: Run Yocto patchreview run: |