diff --git a/.github/workflows/checker.yml b/.github/workflows/checker.yml index 4cb24c3..5cdadd9 100644 --- a/.github/workflows/checker.yml +++ b/.github/workflows/checker.yml @@ -54,4 +54,5 @@ jobs: - name: Run kernel check run: | bash ../kernel-checkers/${{ inputs.check_name }}.sh --kernel-src ${{ inputs.kernel_src }} \ - --base ${{ inputs.base_sha }} --head ${{ inputs.head_sha }} + --base ${{ inputs.base_sha }} --head ${{ inputs.head_sha }} --base_branch ${{ inputs.base_branch }} \ + --pr ${{ inputs.pr_number }} --topic_repo ${{ inputs.topic_repo }} diff --git a/aws_s3_upload.sh b/aws_s3_upload.sh new file mode 100644 index 0000000..1d822e4 --- /dev/null +++ b/aws_s3_upload.sh @@ -0,0 +1,88 @@ +# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. +# SPDX-License-Identifier: BSD-3-Clause-Clear + +#!/bin/bash + +aws_s3_data_dump() { + local log_file="$1" + local uapi_ret="$2" + local topic_repo="$3" + local base_sha="$4" + local head_sha="$5" + local pr="$6" + + BUCKET="s3://qli-prd-armor-gh-artifacts" + + YYYY="$(date -u +'%Y')" + MM="$(date -u +'%m')" + DD="$(date -u +'%d')" + HH="$(date -u +'%H')" + HOST="$(printf '%s' "${GITHUB_SERVER_URL}" | sed -E 's#^[a-zA-Z]+://##; s#/.*$##')" + + PREFIX="${YYYY}/${MM}/${DD}/${HH}/${HOST}/${topic_repo}/${GITHUB_REF_NAME}/${GITHUB_RUN_ID}/files" + + # temp dir + FOLDER="$(mktemp -d 2>/dev/null || mktemp -d -t tmpdir.XXXXXX)" + + METADATA_JSON="${FOLDER}/uapi_metadata.json" + : > "$METADATA_JSON" + + # Copy log file if exists + if [[ -e "$log_file" ]]; then + cp "$log_file" "$FOLDER" + fi + + ts="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" + + # Determine PR (JSON null or number) + if [[ -n "${pr:-}" ]]; then + pr_json="$pr" + else + pr_json="null" + fi + + compat=$([[ ${uapi_ret:-0} -eq 1 ]] && echo "Incompatible" || echo "Compatible") + + jq -n \ + --arg topic_repo "$topic_repo" \ + --arg branch "$GITHUB_REF_NAME" \ + --arg event "$GITHUB_EVENT_NAME" \ + --arg base_sha "$base_sha" \ + --arg head_sha "$head_sha" \ + --arg timestamp "$ts" \ + --arg compat "$compat" \ + --argjson pr "$pr_json" \ + ' + { + topic_repo: $topic_repo, + branch: $branch, + event: $event, + base_sha: $base_sha, + head_sha: $head_sha, + pr_number: $pr, + timestamp: $timestamp, + compatibility: $compat + } + ' > "$METADATA_JSON" + + ERR_FILE="$(mktemp)" + + set +e + aws s3 cp "${FOLDER}/" "${BUCKET}/${PREFIX}" \ + --recursive \ + --content-type "application/octet-stream" \ + --only-show-errors \ + 2> "$ERR_FILE" + rc=$? + set -e + + if [[ $rc -eq 0 ]]; then + echo "S3 upload succeeded." + else + reason="$(cat "$ERR_FILE")" + echo "::error :: S3 upload FAILED (rc=$rc)" + echo "::error :: Reason: ${reason:-No error output captured}" + fi + + rm -f "$ERR_FILE" +} \ No newline at end of file diff --git a/check-uapi-headers.sh b/check-uapi-headers.sh index 4b06f22..12ca865 100755 --- a/check-uapi-headers.sh +++ b/check-uapi-headers.sh @@ -11,6 +11,7 @@ set -euo pipefail # Load shared utilities source "$(dirname "$0")/script-utils.sh" +source "$(dirname "$0")/aws_s3_upload.sh" # Parse and validate input arguments parse_args "$@" @@ -103,6 +104,7 @@ run_in_kmake_image "${kernel_src}/scripts/check-uapi.sh" -b "$head_sha" -p "$bas if [ "$uapi_ret" -ne 0 ]; then cat "$log_file" exit_status=1 + aws_s3_data_dump "$log_file" "$uapi_ret" "$topic_repo" "$base_sha" "$head_sha" "$pr" || true fi while read -r modified_file; do diff --git a/script-utils.sh b/script-utils.sh index c24659b..4700a40 100755 --- a/script-utils.sh +++ b/script-utils.sh @@ -7,6 +7,9 @@ parse_args() { --kernel-src) kernel_src=$(realpath "$2"); shift ;; --base) base_sha="$2"; shift ;; --head) head_sha="$2"; shift ;; + --base_branch) base_branch="$2"; shift ;; + --pr) pr="$2"; shift ;; + --topic_repo) topic_repo="$2"; shift ;; *) echo "Unknown parameter passed: $1"; exit 1 ;; esac shift