From b0e90f6b6f74f882eb89a7aa966f3737e9fec326 Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 23 Sep 2025 19:15:35 +0400 Subject: [PATCH 01/23] edits --- .github/workflows/{full_test.yml => full_test.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{full_test.yml => full_test.yaml} (100%) diff --git a/.github/workflows/full_test.yml b/.github/workflows/full_test.yaml similarity index 100% rename from .github/workflows/full_test.yml rename to .github/workflows/full_test.yaml From cea05b1ce8d5cca926fe82d30695b8b7f4aca08b Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 13 Jan 2026 14:24:19 +0400 Subject: [PATCH 02/23] edits --- .github/actions/clang-tidy/action.sh | 91 ++++++++++++++++++++++++++ .github/actions/clang-tidy/action.yaml | 33 ++++++++++ 2 files changed, 124 insertions(+) create mode 100755 .github/actions/clang-tidy/action.sh create mode 100644 .github/actions/clang-tidy/action.yaml diff --git a/.github/actions/clang-tidy/action.sh b/.github/actions/clang-tidy/action.sh new file mode 100755 index 0000000..1f1a51c --- /dev/null +++ b/.github/actions/clang-tidy/action.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash + +set -e + +trap 'rm -rf ${TEMP_DIR}' EXIT + +function log() { + local level ts + level="$1" + ts="$(date --utc -Iseconds)" + shift + printf "[%s] - [%s] - \"%s\"\n" "${level^^}" "${ts}" "$*" +} + +function run_tidy() { + local output file_warnings file_errors + output=$(clang-tidy --header-filter=".*${PROJECT_NAME}.*" -p "$BUILD_DIR" "$1" 2>&1 || true) + file_warnings=$(echo "$output" | grep -c "${FILENAMES_BASE}/.*warning:" || true) + file_errors=$(echo "$output" | grep -c "${FILENAMES_BASE}/.*error:" || true) + echo "$file|$file_warnings|$file_errors" >"${TEMP_DIR}/${1}.count" + if [ "$file_errors" -gt 0 ]; then + echo "$output" | grep "${FILENAMES_BASE}/.*error:" >"${TEMP_DIR}/${1}.output" + elif [ "$file_warnings" -gt 0 ]; then + echo "$output" | grep "${FILENAMES_BASE}/.*warning:" >"${TEMP_DIR}/${1}.output" + fi +} + +SOURCE_DIR="$(realpath "$1")" +BUILD_DIR="$(realpath "$2")" +PROJECT_NAME="${SOURCE_DIR##*/}" +TEMP_DIR="$(mktemp -d)" + +log info "source directory: ${SOURCE_DIR}" +log info "build directory: ${BUILD_DIR}" + +if [ ! -f "${BUILD_DIR}/compile_commands.json" ]; then + log error "compile_commands.json not found in ${BUILD_DIR}, please build the project first to generate compile_commands.json" + exit 1 +fi + +cd "${SOURCE_DIR}" +if ! (clang-tidy --version); then + log error "clang-tidy not installed" + exit 1 +fi + +log info "running clang-tidy" + +WORKER_COUNT="$(nproc)" +for file in *.cpp; do + run_tidy "${file}" & + while [ "$(jobs | wc -l)" -ge "${WORKER_COUNT}" ]; do + sleep 0.1 + done +done +wait + +log info "processing results" + +WARNINGS=0 +ERRORS=0 + +for file in *.cpp; do + if [ -f "${TEMP_DIR}/${file}.count" ]; then + IFS='|' read -r _ FILE_WARNINGS FILE_ERRORS <"${TEMP_DIR}/${file}.count" + if [ "$FILE_ERRORS" -gt 0 ]; then + log error "$file - has $FILE_ERRORS errors" + cat "${TEMP_DIR}/${file}.output" + ERRORS=$((ERRORS + FILE_ERRORS)) + elif [ "$FILE_WARNINGS" -gt 0 ]; then + log warn "$file - has $FILE_WARNINGS warnings" + cat "${TEMP_DIR}/${file}.output" + WARNINGS=$((WARNINGS + FILE_WARNINGS)) + else + log info "$file - no issues" + fi + fi +done + +log info "clang-tidy summary: warnings=$WARNINGS errors=$ERRORS" + +if [ $ERRORS -gt 0 ]; then + log error "clang-tidy found $ERRORS errors" + exit 1 +elif [ $WARNINGS -gt 0 ]; then + log warn "clang-tidy found $WARNINGS warnings (non-blocking)" + exit 0 +else + log info "no issues found" + exit 0 +fi diff --git a/.github/actions/clang-tidy/action.yaml b/.github/actions/clang-tidy/action.yaml new file mode 100644 index 0000000..3fb523d --- /dev/null +++ b/.github/actions/clang-tidy/action.yaml @@ -0,0 +1,33 @@ +name: clang-tidy +description: run clang-tidy +inputs: + source_directory: + description: directory of the project source files + required: true + build_directory: + description: project build directory + default: "n/a" + +runs: + using: composite + steps: + - name: check + shell: bash + run: | + for i in ${{ inputs.source_directory }} ${{ inputs.build_directory }}; do + if ! [ -d "$i" ]; then + echo "source directory does not exist: ${{ inputs.source_directory }}" + exit 1 + fi + done + if ! (clang-tidy --version); then + log error "clang-tidy not installed" + exit 1 + fi + - name: clang-tidy + shell: bash + env: + SOURCE_DIR: ${{ inputs.source_directory }} + BUILD_DIR: ${{ inputs.build_directory }} + run: | + ${{ github.action_path }}/action.sh "${SOURCE_DIR}" "${BUILD_DIR}" From ab0b6b09ce37630bd07db7535712020fc14a4511 Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 13 Jan 2026 15:40:16 +0400 Subject: [PATCH 03/23] edits --- .github/actions/clang-tidy/action.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/clang-tidy/action.yaml b/.github/actions/clang-tidy/action.yaml index 3fb523d..870aec1 100644 --- a/.github/actions/clang-tidy/action.yaml +++ b/.github/actions/clang-tidy/action.yaml @@ -15,7 +15,7 @@ runs: shell: bash run: | for i in ${{ inputs.source_directory }} ${{ inputs.build_directory }}; do - if ! [ -d "$i" ]; then + if ! [ -d "$(realpath "$i")" ]; then echo "source directory does not exist: ${{ inputs.source_directory }}" exit 1 fi From 35b763a1ee1e6f633452d3708322d684f93400e9 Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 13 Jan 2026 15:53:28 +0400 Subject: [PATCH 04/23] edits --- .github/actions/clang-tidy/action.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/actions/clang-tidy/action.yaml b/.github/actions/clang-tidy/action.yaml index 870aec1..06e5069 100644 --- a/.github/actions/clang-tidy/action.yaml +++ b/.github/actions/clang-tidy/action.yaml @@ -15,8 +15,9 @@ runs: shell: bash run: | for i in ${{ inputs.source_directory }} ${{ inputs.build_directory }}; do - if ! [ -d "$(realpath "$i")" ]; then - echo "source directory does not exist: ${{ inputs.source_directory }}" + d="$(realpath "$i")" + if ! [ -d "${d}" ]; then + echo "source directory does not exist: ${d}" exit 1 fi done From 8b90b83027488e664c9ca3424712cc8385ea722c Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 13 Jan 2026 16:11:24 +0400 Subject: [PATCH 05/23] edits --- .github/actions/clang-tidy/action.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/actions/clang-tidy/action.yaml b/.github/actions/clang-tidy/action.yaml index 06e5069..454e421 100644 --- a/.github/actions/clang-tidy/action.yaml +++ b/.github/actions/clang-tidy/action.yaml @@ -14,6 +14,7 @@ runs: - name: check shell: bash run: | + pwd for i in ${{ inputs.source_directory }} ${{ inputs.build_directory }}; do d="$(realpath "$i")" if ! [ -d "${d}" ]; then From a4dc4624a1a9cc91452b2b631df0ab06b5d08461 Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 13 Jan 2026 16:22:34 +0400 Subject: [PATCH 06/23] edits --- .github/actions/clang-tidy/action.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/actions/clang-tidy/action.yaml b/.github/actions/clang-tidy/action.yaml index 454e421..357a117 100644 --- a/.github/actions/clang-tidy/action.yaml +++ b/.github/actions/clang-tidy/action.yaml @@ -14,14 +14,6 @@ runs: - name: check shell: bash run: | - pwd - for i in ${{ inputs.source_directory }} ${{ inputs.build_directory }}; do - d="$(realpath "$i")" - if ! [ -d "${d}" ]; then - echo "source directory does not exist: ${d}" - exit 1 - fi - done if ! (clang-tidy --version); then log error "clang-tidy not installed" exit 1 From a5e28da1a40bc40604ae341dc64472498c6fe3fa Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 13 Jan 2026 16:22:53 +0400 Subject: [PATCH 07/23] edits --- .github/actions/clang-tidy/action.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/clang-tidy/action.yaml b/.github/actions/clang-tidy/action.yaml index 357a117..d72cef7 100644 --- a/.github/actions/clang-tidy/action.yaml +++ b/.github/actions/clang-tidy/action.yaml @@ -6,7 +6,7 @@ inputs: required: true build_directory: description: project build directory - default: "n/a" + required: true runs: using: composite From f14323b6d8312eae9776bbe202ff37437be478c6 Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 13 Jan 2026 17:37:34 +0400 Subject: [PATCH 08/23] edits --- .github/actions/clang-tidy/action.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/actions/clang-tidy/action.yaml b/.github/actions/clang-tidy/action.yaml index d72cef7..8b7a01b 100644 --- a/.github/actions/clang-tidy/action.yaml +++ b/.github/actions/clang-tidy/action.yaml @@ -23,5 +23,4 @@ runs: env: SOURCE_DIR: ${{ inputs.source_directory }} BUILD_DIR: ${{ inputs.build_directory }} - run: | - ${{ github.action_path }}/action.sh "${SOURCE_DIR}" "${BUILD_DIR}" + run: ${{ github.action_path }}/action.sh "${SOURCE_DIR}" "${BUILD_DIR}" From 1c7e73d8b32baa36080796c864f8a2588a474a0d Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 13 Jan 2026 17:41:33 +0400 Subject: [PATCH 09/23] edits --- .github/actions/clang-tidy/action.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/actions/clang-tidy/action.yaml b/.github/actions/clang-tidy/action.yaml index 8b7a01b..839a2b0 100644 --- a/.github/actions/clang-tidy/action.yaml +++ b/.github/actions/clang-tidy/action.yaml @@ -24,3 +24,7 @@ runs: SOURCE_DIR: ${{ inputs.source_directory }} BUILD_DIR: ${{ inputs.build_directory }} run: ${{ github.action_path }}/action.sh "${SOURCE_DIR}" "${BUILD_DIR}" + +branding: + icon: "terminal" + color: "black" From 8b0929f2767ea0c208d78947680bde3f786cd21b Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 13 Jan 2026 20:20:52 +0400 Subject: [PATCH 10/23] edits --- .github/actions/clang-tidy/action.sh | 91 -------------------------- .github/actions/clang-tidy/action.yaml | 30 --------- 2 files changed, 121 deletions(-) delete mode 100755 .github/actions/clang-tidy/action.sh delete mode 100644 .github/actions/clang-tidy/action.yaml diff --git a/.github/actions/clang-tidy/action.sh b/.github/actions/clang-tidy/action.sh deleted file mode 100755 index 1f1a51c..0000000 --- a/.github/actions/clang-tidy/action.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env bash - -set -e - -trap 'rm -rf ${TEMP_DIR}' EXIT - -function log() { - local level ts - level="$1" - ts="$(date --utc -Iseconds)" - shift - printf "[%s] - [%s] - \"%s\"\n" "${level^^}" "${ts}" "$*" -} - -function run_tidy() { - local output file_warnings file_errors - output=$(clang-tidy --header-filter=".*${PROJECT_NAME}.*" -p "$BUILD_DIR" "$1" 2>&1 || true) - file_warnings=$(echo "$output" | grep -c "${FILENAMES_BASE}/.*warning:" || true) - file_errors=$(echo "$output" | grep -c "${FILENAMES_BASE}/.*error:" || true) - echo "$file|$file_warnings|$file_errors" >"${TEMP_DIR}/${1}.count" - if [ "$file_errors" -gt 0 ]; then - echo "$output" | grep "${FILENAMES_BASE}/.*error:" >"${TEMP_DIR}/${1}.output" - elif [ "$file_warnings" -gt 0 ]; then - echo "$output" | grep "${FILENAMES_BASE}/.*warning:" >"${TEMP_DIR}/${1}.output" - fi -} - -SOURCE_DIR="$(realpath "$1")" -BUILD_DIR="$(realpath "$2")" -PROJECT_NAME="${SOURCE_DIR##*/}" -TEMP_DIR="$(mktemp -d)" - -log info "source directory: ${SOURCE_DIR}" -log info "build directory: ${BUILD_DIR}" - -if [ ! -f "${BUILD_DIR}/compile_commands.json" ]; then - log error "compile_commands.json not found in ${BUILD_DIR}, please build the project first to generate compile_commands.json" - exit 1 -fi - -cd "${SOURCE_DIR}" -if ! (clang-tidy --version); then - log error "clang-tidy not installed" - exit 1 -fi - -log info "running clang-tidy" - -WORKER_COUNT="$(nproc)" -for file in *.cpp; do - run_tidy "${file}" & - while [ "$(jobs | wc -l)" -ge "${WORKER_COUNT}" ]; do - sleep 0.1 - done -done -wait - -log info "processing results" - -WARNINGS=0 -ERRORS=0 - -for file in *.cpp; do - if [ -f "${TEMP_DIR}/${file}.count" ]; then - IFS='|' read -r _ FILE_WARNINGS FILE_ERRORS <"${TEMP_DIR}/${file}.count" - if [ "$FILE_ERRORS" -gt 0 ]; then - log error "$file - has $FILE_ERRORS errors" - cat "${TEMP_DIR}/${file}.output" - ERRORS=$((ERRORS + FILE_ERRORS)) - elif [ "$FILE_WARNINGS" -gt 0 ]; then - log warn "$file - has $FILE_WARNINGS warnings" - cat "${TEMP_DIR}/${file}.output" - WARNINGS=$((WARNINGS + FILE_WARNINGS)) - else - log info "$file - no issues" - fi - fi -done - -log info "clang-tidy summary: warnings=$WARNINGS errors=$ERRORS" - -if [ $ERRORS -gt 0 ]; then - log error "clang-tidy found $ERRORS errors" - exit 1 -elif [ $WARNINGS -gt 0 ]; then - log warn "clang-tidy found $WARNINGS warnings (non-blocking)" - exit 0 -else - log info "no issues found" - exit 0 -fi diff --git a/.github/actions/clang-tidy/action.yaml b/.github/actions/clang-tidy/action.yaml deleted file mode 100644 index 839a2b0..0000000 --- a/.github/actions/clang-tidy/action.yaml +++ /dev/null @@ -1,30 +0,0 @@ -name: clang-tidy -description: run clang-tidy -inputs: - source_directory: - description: directory of the project source files - required: true - build_directory: - description: project build directory - required: true - -runs: - using: composite - steps: - - name: check - shell: bash - run: | - if ! (clang-tidy --version); then - log error "clang-tidy not installed" - exit 1 - fi - - name: clang-tidy - shell: bash - env: - SOURCE_DIR: ${{ inputs.source_directory }} - BUILD_DIR: ${{ inputs.build_directory }} - run: ${{ github.action_path }}/action.sh "${SOURCE_DIR}" "${BUILD_DIR}" - -branding: - icon: "terminal" - color: "black" From 0854fba603f5f8b32a5d12596f8ea44ef9dfbe89 Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 13 Jan 2026 21:30:27 +0400 Subject: [PATCH 11/23] Revert "edits" This reverts commit 8b0929f2767ea0c208d78947680bde3f786cd21b. --- .github/actions/clang-tidy/action.sh | 91 ++++++++++++++++++++++++++ .github/actions/clang-tidy/action.yaml | 30 +++++++++ 2 files changed, 121 insertions(+) create mode 100755 .github/actions/clang-tidy/action.sh create mode 100644 .github/actions/clang-tidy/action.yaml diff --git a/.github/actions/clang-tidy/action.sh b/.github/actions/clang-tidy/action.sh new file mode 100755 index 0000000..1f1a51c --- /dev/null +++ b/.github/actions/clang-tidy/action.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash + +set -e + +trap 'rm -rf ${TEMP_DIR}' EXIT + +function log() { + local level ts + level="$1" + ts="$(date --utc -Iseconds)" + shift + printf "[%s] - [%s] - \"%s\"\n" "${level^^}" "${ts}" "$*" +} + +function run_tidy() { + local output file_warnings file_errors + output=$(clang-tidy --header-filter=".*${PROJECT_NAME}.*" -p "$BUILD_DIR" "$1" 2>&1 || true) + file_warnings=$(echo "$output" | grep -c "${FILENAMES_BASE}/.*warning:" || true) + file_errors=$(echo "$output" | grep -c "${FILENAMES_BASE}/.*error:" || true) + echo "$file|$file_warnings|$file_errors" >"${TEMP_DIR}/${1}.count" + if [ "$file_errors" -gt 0 ]; then + echo "$output" | grep "${FILENAMES_BASE}/.*error:" >"${TEMP_DIR}/${1}.output" + elif [ "$file_warnings" -gt 0 ]; then + echo "$output" | grep "${FILENAMES_BASE}/.*warning:" >"${TEMP_DIR}/${1}.output" + fi +} + +SOURCE_DIR="$(realpath "$1")" +BUILD_DIR="$(realpath "$2")" +PROJECT_NAME="${SOURCE_DIR##*/}" +TEMP_DIR="$(mktemp -d)" + +log info "source directory: ${SOURCE_DIR}" +log info "build directory: ${BUILD_DIR}" + +if [ ! -f "${BUILD_DIR}/compile_commands.json" ]; then + log error "compile_commands.json not found in ${BUILD_DIR}, please build the project first to generate compile_commands.json" + exit 1 +fi + +cd "${SOURCE_DIR}" +if ! (clang-tidy --version); then + log error "clang-tidy not installed" + exit 1 +fi + +log info "running clang-tidy" + +WORKER_COUNT="$(nproc)" +for file in *.cpp; do + run_tidy "${file}" & + while [ "$(jobs | wc -l)" -ge "${WORKER_COUNT}" ]; do + sleep 0.1 + done +done +wait + +log info "processing results" + +WARNINGS=0 +ERRORS=0 + +for file in *.cpp; do + if [ -f "${TEMP_DIR}/${file}.count" ]; then + IFS='|' read -r _ FILE_WARNINGS FILE_ERRORS <"${TEMP_DIR}/${file}.count" + if [ "$FILE_ERRORS" -gt 0 ]; then + log error "$file - has $FILE_ERRORS errors" + cat "${TEMP_DIR}/${file}.output" + ERRORS=$((ERRORS + FILE_ERRORS)) + elif [ "$FILE_WARNINGS" -gt 0 ]; then + log warn "$file - has $FILE_WARNINGS warnings" + cat "${TEMP_DIR}/${file}.output" + WARNINGS=$((WARNINGS + FILE_WARNINGS)) + else + log info "$file - no issues" + fi + fi +done + +log info "clang-tidy summary: warnings=$WARNINGS errors=$ERRORS" + +if [ $ERRORS -gt 0 ]; then + log error "clang-tidy found $ERRORS errors" + exit 1 +elif [ $WARNINGS -gt 0 ]; then + log warn "clang-tidy found $WARNINGS warnings (non-blocking)" + exit 0 +else + log info "no issues found" + exit 0 +fi diff --git a/.github/actions/clang-tidy/action.yaml b/.github/actions/clang-tidy/action.yaml new file mode 100644 index 0000000..839a2b0 --- /dev/null +++ b/.github/actions/clang-tidy/action.yaml @@ -0,0 +1,30 @@ +name: clang-tidy +description: run clang-tidy +inputs: + source_directory: + description: directory of the project source files + required: true + build_directory: + description: project build directory + required: true + +runs: + using: composite + steps: + - name: check + shell: bash + run: | + if ! (clang-tidy --version); then + log error "clang-tidy not installed" + exit 1 + fi + - name: clang-tidy + shell: bash + env: + SOURCE_DIR: ${{ inputs.source_directory }} + BUILD_DIR: ${{ inputs.build_directory }} + run: ${{ github.action_path }}/action.sh "${SOURCE_DIR}" "${BUILD_DIR}" + +branding: + icon: "terminal" + color: "black" From 0569fec6129807f5854b11613ab794ccddb1d127 Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Mon, 19 Jan 2026 21:10:24 +0400 Subject: [PATCH 12/23] edits --- .github/actions/clang-tidy/action.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/clang-tidy/action.sh b/.github/actions/clang-tidy/action.sh index 1f1a51c..c5dc026 100755 --- a/.github/actions/clang-tidy/action.sh +++ b/.github/actions/clang-tidy/action.sh @@ -34,7 +34,7 @@ log info "source directory: ${SOURCE_DIR}" log info "build directory: ${BUILD_DIR}" if [ ! -f "${BUILD_DIR}/compile_commands.json" ]; then - log error "compile_commands.json not found in ${BUILD_DIR}, please build the project first to generate compile_commands.json" + log error "${BUILD_DIR}/compile_commands.json not found , please build the project first to generate compile_commands.json" exit 1 fi From 463710f7504fbc61504c3887ae9063aab001d8a3 Mon Sep 17 00:00:00 2001 From: artyom-activeloop Date: Tue, 20 Jan 2026 09:20:01 +0400 Subject: [PATCH 13/23] edits --- .github/actions/clang-tidy/action.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/clang-tidy/action.sh b/.github/actions/clang-tidy/action.sh index c5dc026..8bdc62b 100755 --- a/.github/actions/clang-tidy/action.sh +++ b/.github/actions/clang-tidy/action.sh @@ -44,7 +44,7 @@ if ! (clang-tidy --version); then exit 1 fi -log info "running clang-tidy" +log info "running clang-tidy, build=${BUILD_DIR} source=${SOURCE_DIR}" WORKER_COUNT="$(nproc)" for file in *.cpp; do From d5cf692077253f640dace249a4dd23d65bfe085f Mon Sep 17 00:00:00 2001 From: vlad-activeloop Date: Tue, 20 Jan 2026 13:57:58 +0400 Subject: [PATCH 14/23] add claude pr review --- .github/workflows/claude-pr-review.yaml | 76 +++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 .github/workflows/claude-pr-review.yaml diff --git a/.github/workflows/claude-pr-review.yaml b/.github/workflows/claude-pr-review.yaml new file mode 100644 index 0000000..ce67d08 --- /dev/null +++ b/.github/workflows/claude-pr-review.yaml @@ -0,0 +1,76 @@ +name: Claude PR Review + +on: + workflow_call: + inputs: + review_prompt: + description: Extra instructions for the review (optional). + required: false + type: string + default: None + secrets: + OP_SERVICE_ACCOUNT_TOKEN: + required: true + +concurrency: + group: ${{ github.repository }}-claude-pr-review-${{ github.event.pull_request.number }} + cancel-in-progress: true + +jobs: + review: + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + id-token: write + pull-requests: write + steps: + - name: checkout repo + uses: actions/checkout@v6.0.1 + with: + fetch-depth: 1 + + - name: load 1pass + id: load-1pass + uses: 1password/load-secrets-action@v3.1.0 + env: + OP_SERVICE_ACCOUNT_TOKEN: "${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}" + ANTHROPIC_API_KEY: "op://GitHub Actions/common/CLAUDE_API_KEY" + + - name: pr review + uses: anthropics/claude-code-action@v1 + with: + anthropic_api_key: "${{ steps.load-1pass.outputs.ANTHROPIC_API_KEY }}" + track_progress: true + prompt: | + REPO: ${{ github.repository }} + PR NUMBER: ${{ github.event.pull_request.number }} + + You are an automated PR reviewer: + - Prefer INLINE review comments with actionable fixes. + - Avoid long PR summaries. + - Only comment when you are confident it's a real issue (bug, security, error handling, correctness, tests). + - Ignore style nitpicks unless they cause bugs or security risks. + + OUTPUT RULES (IMPORTANT): + 1) Default output: INLINE COMMENTS ONLY using mcp__github_inline_comment__create_inline_comment. + 2) Each inline comment must be compact: + - 1 sentence: what's wrong + why it matters + - 1 sentence: recommended fix + - If possible include a GitHub suggestion block: + ```suggestion + + ``` + 3) Only if you found >= 2 significant issues, leave ONE short top-level PR comment (<= 4 bullets). + Otherwise: do not leave a top-level comment. + + PROCESS: + - Use `gh pr view` to read PR title/body. + - Use `gh pr diff` to inspect changes. + - Place inline comments directly on the relevant lines. + - Do NOT restate large diff chunks. + + Extra instructions (optional): + ${{ inputs.review_prompt }} + claude_args: | + --allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr diff:*),Bash(gh pr view:*)" From 54c300e6012c0bcb8e351ca7789e54f98a1f8ad1 Mon Sep 17 00:00:00 2001 From: vlad-activeloop Date: Tue, 27 Jan 2026 13:59:03 +0400 Subject: [PATCH 15/23] edits --- .github/workflows/claude-pr-review.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/claude-pr-review.yaml b/.github/workflows/claude-pr-review.yaml index ce67d08..14cf305 100644 --- a/.github/workflows/claude-pr-review.yaml +++ b/.github/workflows/claude-pr-review.yaml @@ -74,3 +74,10 @@ jobs: ${{ inputs.review_prompt }} claude_args: | --allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr diff:*),Bash(gh pr view:*)" + + - name: delete workflow run + uses: mattraks/delete-workflow-runs@v2.1.0 + with: + token: "${{ github.token }}" + repository: "${{ github.repository }}" + delete_workflow_pattern: claude_review From e90a23beeb4ef96f70f78afc1dd5ae4ccccbdfd1 Mon Sep 17 00:00:00 2001 From: vlad-activeloop Date: Tue, 27 Jan 2026 14:00:38 +0400 Subject: [PATCH 16/23] edits --- .github/workflows/claude-pr-review.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/claude-pr-review.yaml b/.github/workflows/claude-pr-review.yaml index 14cf305..f30d34e 100644 --- a/.github/workflows/claude-pr-review.yaml +++ b/.github/workflows/claude-pr-review.yaml @@ -76,6 +76,7 @@ jobs: --allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr diff:*),Bash(gh pr view:*)" - name: delete workflow run + if: always() uses: mattraks/delete-workflow-runs@v2.1.0 with: token: "${{ github.token }}" From a81be69ff99bf7fd30536aef177e4a847a26447d Mon Sep 17 00:00:00 2001 From: vlad-activeloop Date: Tue, 27 Jan 2026 14:03:22 +0400 Subject: [PATCH 17/23] edits --- .github/workflows/claude-pr-review.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/claude-pr-review.yaml b/.github/workflows/claude-pr-review.yaml index f30d34e..0ccc07f 100644 --- a/.github/workflows/claude-pr-review.yaml +++ b/.github/workflows/claude-pr-review.yaml @@ -20,7 +20,7 @@ jobs: review: runs-on: ubuntu-latest permissions: - actions: read + actions: write contents: read id-token: write pull-requests: write From 75fd1d093cf453be3286bff09d16c5b022ab9a7c Mon Sep 17 00:00:00 2001 From: vlad-activeloop Date: Tue, 27 Jan 2026 14:18:39 +0400 Subject: [PATCH 18/23] edits --- .github/workflows/claude-pr-review.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/claude-pr-review.yaml b/.github/workflows/claude-pr-review.yaml index 0ccc07f..0834fe6 100644 --- a/.github/workflows/claude-pr-review.yaml +++ b/.github/workflows/claude-pr-review.yaml @@ -81,4 +81,4 @@ jobs: with: token: "${{ github.token }}" repository: "${{ github.repository }}" - delete_workflow_pattern: claude_review + delete_workflow_pattern: pr-review From d22f0029c30301e268fd9e37da7d8ac0b8a9e492 Mon Sep 17 00:00:00 2001 From: vlad-activeloop Date: Tue, 27 Jan 2026 14:51:15 +0400 Subject: [PATCH 19/23] edits --- .github/workflows/claude-pr-review.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/claude-pr-review.yaml b/.github/workflows/claude-pr-review.yaml index 0834fe6..0f52692 100644 --- a/.github/workflows/claude-pr-review.yaml +++ b/.github/workflows/claude-pr-review.yaml @@ -75,10 +75,10 @@ jobs: claude_args: | --allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr diff:*),Bash(gh pr view:*)" - - name: delete workflow run - if: always() - uses: mattraks/delete-workflow-runs@v2.1.0 - with: - token: "${{ github.token }}" - repository: "${{ github.repository }}" - delete_workflow_pattern: pr-review + # - name: delete workflow run + # if: always() + # uses: mattraks/delete-workflow-runs@v2.1.0 + # with: + # token: "${{ github.token }}" + # repository: "${{ github.repository }}" + # delete_workflow_pattern: pr-review From 96d53f5ce8edbcc379119406fd126aaee20df7aa Mon Sep 17 00:00:00 2001 From: vlad-activeloop Date: Tue, 27 Jan 2026 14:58:48 +0400 Subject: [PATCH 20/23] edits --- .github/workflows/claude-pr-review.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/claude-pr-review.yaml b/.github/workflows/claude-pr-review.yaml index 0f52692..5332842 100644 --- a/.github/workflows/claude-pr-review.yaml +++ b/.github/workflows/claude-pr-review.yaml @@ -74,11 +74,3 @@ jobs: ${{ inputs.review_prompt }} claude_args: | --allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr diff:*),Bash(gh pr view:*)" - - # - name: delete workflow run - # if: always() - # uses: mattraks/delete-workflow-runs@v2.1.0 - # with: - # token: "${{ github.token }}" - # repository: "${{ github.repository }}" - # delete_workflow_pattern: pr-review From df7c30b95732c8fdaeb70a59ab3ab5d11b53c2d9 Mon Sep 17 00:00:00 2001 From: vlad-activeloop Date: Tue, 27 Jan 2026 15:13:21 +0400 Subject: [PATCH 21/23] edits --- .github/workflows/claude-pr-review.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/claude-pr-review.yaml b/.github/workflows/claude-pr-review.yaml index 5332842..0f5e55a 100644 --- a/.github/workflows/claude-pr-review.yaml +++ b/.github/workflows/claude-pr-review.yaml @@ -42,6 +42,7 @@ jobs: with: anthropic_api_key: "${{ steps.load-1pass.outputs.ANTHROPIC_API_KEY }}" track_progress: true + use_sticky_comment: true prompt: | REPO: ${{ github.repository }} PR NUMBER: ${{ github.event.pull_request.number }} From 45cc1887b437d93cb35b792415fedc5ca12af4ba Mon Sep 17 00:00:00 2001 From: vlad-activeloop Date: Tue, 12 May 2026 18:13:50 +0400 Subject: [PATCH 22/23] edits --- .github/workflows/claude-pr-review.yaml | 77 ------------------------- 1 file changed, 77 deletions(-) delete mode 100644 .github/workflows/claude-pr-review.yaml diff --git a/.github/workflows/claude-pr-review.yaml b/.github/workflows/claude-pr-review.yaml deleted file mode 100644 index 0f5e55a..0000000 --- a/.github/workflows/claude-pr-review.yaml +++ /dev/null @@ -1,77 +0,0 @@ -name: Claude PR Review - -on: - workflow_call: - inputs: - review_prompt: - description: Extra instructions for the review (optional). - required: false - type: string - default: None - secrets: - OP_SERVICE_ACCOUNT_TOKEN: - required: true - -concurrency: - group: ${{ github.repository }}-claude-pr-review-${{ github.event.pull_request.number }} - cancel-in-progress: true - -jobs: - review: - runs-on: ubuntu-latest - permissions: - actions: write - contents: read - id-token: write - pull-requests: write - steps: - - name: checkout repo - uses: actions/checkout@v6.0.1 - with: - fetch-depth: 1 - - - name: load 1pass - id: load-1pass - uses: 1password/load-secrets-action@v3.1.0 - env: - OP_SERVICE_ACCOUNT_TOKEN: "${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}" - ANTHROPIC_API_KEY: "op://GitHub Actions/common/CLAUDE_API_KEY" - - - name: pr review - uses: anthropics/claude-code-action@v1 - with: - anthropic_api_key: "${{ steps.load-1pass.outputs.ANTHROPIC_API_KEY }}" - track_progress: true - use_sticky_comment: true - prompt: | - REPO: ${{ github.repository }} - PR NUMBER: ${{ github.event.pull_request.number }} - - You are an automated PR reviewer: - - Prefer INLINE review comments with actionable fixes. - - Avoid long PR summaries. - - Only comment when you are confident it's a real issue (bug, security, error handling, correctness, tests). - - Ignore style nitpicks unless they cause bugs or security risks. - - OUTPUT RULES (IMPORTANT): - 1) Default output: INLINE COMMENTS ONLY using mcp__github_inline_comment__create_inline_comment. - 2) Each inline comment must be compact: - - 1 sentence: what's wrong + why it matters - - 1 sentence: recommended fix - - If possible include a GitHub suggestion block: - ```suggestion - - ``` - 3) Only if you found >= 2 significant issues, leave ONE short top-level PR comment (<= 4 bullets). - Otherwise: do not leave a top-level comment. - - PROCESS: - - Use `gh pr view` to read PR title/body. - - Use `gh pr diff` to inspect changes. - - Place inline comments directly on the relevant lines. - - Do NOT restate large diff chunks. - - Extra instructions (optional): - ${{ inputs.review_prompt }} - claude_args: | - --allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr diff:*),Bash(gh pr view:*)" From 81502f981ba918c82a6a0df4d5f221031598b1fe Mon Sep 17 00:00:00 2001 From: vlad-activeloop Date: Thu, 21 May 2026 19:44:48 +0400 Subject: [PATCH 23/23] update gh actions --- .github/workflows/full_test.yaml | 38 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/full_test.yaml b/.github/workflows/full_test.yaml index 2dee04c..5ef6adb 100644 --- a/.github/workflows/full_test.yaml +++ b/.github/workflows/full_test.yaml @@ -49,14 +49,14 @@ jobs: file.write("matrix_storage_filename=%s" % "${{ matrix.storage }}".replace(" ","").replace("--", "_")[1:]) - name: checkout - uses: actions/checkout@v5.0.0 + uses: actions/checkout@v6.0.2 with: repository: ${{ inputs.repo }} ref: ${{ inputs.ref }} fetch-depth: 0 - name: set up python ${{ matrix.python-version }} - uses: actions/setup-python@v6.0.0 + uses: actions/setup-python@v6.2.0 with: python-version: ${{ matrix.python-version }} cache: pip @@ -86,7 +86,7 @@ jobs: ### Setup authentication/credentials - name: authenticate (aws) if: contains(matrix.storage, 's3') || contains(matrix.storage, 's3path') - uses: aws-actions/configure-aws-credentials@v5.0.0 + uses: aws-actions/configure-aws-credentials@v6.1.1 with: role-to-assume: ${{ secrets.aws_role_arn }} aws-region: us-east-1 @@ -103,7 +103,7 @@ jobs: - name: authenticate (gcp) if: contains(matrix.storage, 'azure') - uses: Azure/login@v2.3.0 + uses: Azure/login@v3.0.0 with: creds: ${{ secrets.azure_creds_json }} @@ -148,7 +148,7 @@ jobs: LABELBOX_TOKEN: ${{ secrets.labelbox_token }} - name: save test results - uses: actions/upload-artifact@v4.6.2 + uses: actions/upload-artifact@v7.0.1 if: always() with: name: test-results-py${{ matrix.python-version }}-${{ matrix.os }}-${{ env.matrix_storage_filename }}_${{ github.run_number }}-${{ github.run_attempt }} @@ -166,12 +166,12 @@ jobs: steps: - name: checkout - uses: actions/checkout@v5.0.0 + uses: actions/checkout@v6.0.2 with: fetch-depth: 0 - name: set up python - uses: actions/setup-python@v6.0.0 + uses: actions/setup-python@v6.2.0 with: python-version: "3.10" cache: pip @@ -189,7 +189,7 @@ jobs: - name: run flaky tests id: flaky-tests - uses: nick-fields/retry@v3.0.2 + uses: nick-fields/retry@v4.0.0 with: timeout_minutes: 20 max_attempts: 3 @@ -208,7 +208,7 @@ jobs: LABELBOX_TOKEN: ${{ secrets.labelbox_token }} - name: save test results - uses: actions/upload-artifact@v4.6.2 + uses: actions/upload-artifact@v7.0.1 if: always() with: name: test-results-flaky_${{ github.run_number }}-${{ github.run_attempt }} @@ -225,12 +225,12 @@ jobs: steps: - name: checkout - uses: actions/checkout@v5.0.0 + uses: actions/checkout@v6.0.2 with: fetch-depth: 0 - name: checkout the buH source code - uses: actions/checkout@v5.0.0 + uses: actions/checkout@v6.0.2 with: path: buH repository: activeloopai/buH @@ -238,13 +238,13 @@ jobs: # This will slowly get behind as new versions are released that are not in the cache. The cache can be dropped through the github UI when creation takes too long - name: cache datasets_clean - uses: actions/cache@v4.2.4 + uses: actions/cache@v5.0.5 with: path: datasets_clean/* key: buH-datasets-clean - name: set up python - uses: actions/setup-python@v6.0.0 + uses: actions/setup-python@v6.2.0 with: python-version: "3.10" cache: pip @@ -281,7 +281,7 @@ jobs: run: rm -rf datasets - name: save test results - uses: actions/upload-artifact@v4.6.2 + uses: actions/upload-artifact@v7.0.1 if: always() with: name: test-results-backwards-compat_${{ github.run_attempt }} @@ -297,12 +297,12 @@ jobs: BUGGER_OFF: "true" steps: - name: checkout - uses: actions/checkout@v5.0.0 + uses: actions/checkout@v6.0.2 with: fetch-depth: 0 - name: download test results - uses: actions/download-artifact@v5.0.0 + uses: actions/download-artifact@v8.0.1 with: path: results @@ -312,13 +312,13 @@ jobs: # files: results/test-results-*/*.results.xml - name: publish test report - uses: mikepenz/action-junit-report@v5.6.2 + uses: mikepenz/action-junit-report@v6.4.1 if: always() with: report_paths: results/test-results-*/*.results.xml # - name: set up python - # uses: actions/setup-python@v6.0.0 + # uses: actions/setup-python@v6.2.0 # with: # python-version: "3.10" # cache: pip @@ -332,7 +332,7 @@ jobs: sed -i 's/coverage.xml/total.coverage.xml/' sonar-project.properties - name: upload coverage to codecov - uses: codecov/codecov-action@v5.5.1 + uses: codecov/codecov-action@v6.0.1 with: files: ./total.coverage.xml flags: unittests