From f4338a31fa39fd1cb55360459793e55aecef46aa Mon Sep 17 00:00:00 2001 From: Sourabh Mehta Date: Sat, 8 Nov 2025 00:16:33 +0100 Subject: [PATCH 1/7] Test Build Data collection --- .github/workflows/CubeMX-CI.yml | 124 ++++++++++++++++++++++++++++++++ .vscode/launch.json | 81 ++++++++++++++++++--- 2 files changed, 194 insertions(+), 11 deletions(-) diff --git a/.github/workflows/CubeMX-CI.yml b/.github/workflows/CubeMX-CI.yml index d79fb86..6451ca7 100644 --- a/.github/workflows/CubeMX-CI.yml +++ b/.github/workflows/CubeMX-CI.yml @@ -17,19 +17,143 @@ on: jobs: Build: runs-on: ubuntu-latest + outputs: + build_status: ${{ steps.build_step.outcome }} + build_timestamp: ${{ steps.set_timestamp.outputs.timestamp }} steps: - name: Checkout repo uses: actions/checkout@v4 + - name: Set timestamp + id: set_timestamp + run: echo "timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT + - name: Install tools + id: install_tools uses: ARM-software/cmsis-actions/vcpkg@v1 with: config: ".ci/vcpkg-configuration.json" + continue-on-error: false + + - name: Save tool installation logs + if: always() + run: | + mkdir -p logs + echo "=== Tool Installation Information ===" > logs/install_tools.log + echo "Timestamp: $(date -u +"%Y-%m-%d %H:%M:%S")" >> logs/install_tools.log + echo "" >> logs/install_tools.log + + # Check if cbuild is available and get its version + if command -v cbuild &> /dev/null; then + echo "=== CMSIS Toolbox Version ===" >> logs/install_tools.log + cbuild --version 2>&1 >> logs/install_tools.log || echo "Version unavailable" >> logs/install_tools.log + else + echo "cbuild command not found" >> logs/install_tools.log + fi + + - name: Upload tool logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: tool-logs + path: logs/ - name: Activate Arm tool license uses: ARM-software/cmsis-actions/armlm@v1 - name: Build project with AC6 + id: build_step working-directory: ./CubeMX/ run: cbuild CubeMX.csolution.yml --packs --toolchain AC6 --rebuild + + CollectData: + runs-on: ubuntu-latest + needs: Build + if: always() + steps: + - name: Download tool logs + uses: actions/download-artifact@v4 + with: + name: tool-logs + path: logs/ + + - name: Parse and collect data + run: | + # Parse tool installation log + if [ -f logs/install_tools.log ]; then + echo "Parsing tool installation log..." + cat logs/install_tools.log + else + echo "No tool installation log found" + fi + + - name: Generate JSON report + run: | + cat << 'EOF' > collect_data.py + import json + import re + from datetime import datetime + + def parse_tool_log(log_path): + cmsis_toolbox_info = None + try: + with open(log_path, 'r') as f: + content = f.read() + + # Parse cbuild --version output + # Looking for version number like "2.12.0" or similar + match = re.search(r'=== CMSIS Toolbox Version ===\s*(.+?)(?:\n|$)', content) + if match: + version = match.group(1).strip() + cmsis_toolbox_info = { + "version": version, + "tool": "cmsis-toolbox" + } + + except FileNotFoundError: + print("Tool log file not found") + except Exception as e: + print(f"Error parsing tool log: {e}") + + return cmsis_toolbox_info + + # Collect data + data = { + "workflow": "CubeMX: Test Build", + "build_job": { + "last_run": "${{ needs.Build.outputs.build_timestamp }}", + "status": "${{ needs.Build.outputs.build_status }}", + "passed": "${{ needs.Build.outputs.build_status }}" == "success" + }, + "cmsis_toolbox": parse_tool_log("logs/install_tools.log"), + "metadata": { + "run_id": "${{ github.run_id }}", + "run_number": "${{ github.run_number }}", + "workflow_ref": "${{ github.workflow_ref }}", + "event": "${{ github.event_name }}", + "branch": "${{ github.ref_name }}", + "commit": "${{ github.sha }}" + } + } + + # Print JSON + print(json.dumps(data, indent=2)) + + # Save to file + with open('workflow_data.json', 'w') as f: + json.dump(data, f, indent=2) + EOF + + python3 collect_data.py + + - name: Display collected data + run: | + echo "=== Workflow Data Collection ===" + cat workflow_data.json + + - name: Upload workflow data + uses: actions/upload-artifact@v4 + with: + name: workflow-data + path: workflow_data.json diff --git a/.vscode/launch.json b/.vscode/launch.json index 7eda3b4..5bac2d4 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,14 +6,13 @@ "type": "arm-debugger", "request": "launch", "programs": [ - "${workspaceFolder}/SimpleTrustZone/out/CM33_ns/CS300/Debug/CM33_ns.axf", - "${workspaceFolder}/SimpleTrustZone/out/CM33_s/CS300/Debug/CM33_s.axf" + "${workspaceFolder}/SimpleTrustZone/out/CM33_ns/CS300/Debug/CM33_ns.axf", + "${workspaceFolder}/SimpleTrustZone/out/CM33_s/CS300/Debug/CM33_s.axf" ], "programMode": "ram", - // armdbg --cdb-list "cdbEntry": "Arm FVP::MPS2_Cortex_M33::Bare Metal Debug::Bare Metal Debug::Cortex-M33_0", - "cdbEntryParams": { - "model_params": "-f ${workspaceFolder}/SimpleTrustZone/model_config.txt" + "cdbEntryParams": { + "model_params": "-f ${workspaceFolder}/SimpleTrustZone/model_config.txt" } }, { @@ -21,15 +20,75 @@ "type": "arm-debugger", "request": "launch", "programs": [ - "${workspaceFolder}/SimpleTrustZone/out/CM33_ns/CS300/Debug/CM33_ns.elf", - "${workspaceFolder}/SimpleTrustZone/out/CM33_s/CS300/Debug/CM33_s.elf" + "${workspaceFolder}/SimpleTrustZone/out/CM33_ns/CS300/Debug/CM33_ns.elf", + "${workspaceFolder}/SimpleTrustZone/out/CM33_s/CS300/Debug/CM33_s.elf" ], "programMode": "ram", - // armdbg --cdb-list "cdbEntry": "Arm FVP::MPS2_Cortex_M33::Bare Metal Debug::Bare Metal Debug::Cortex-M33_0", - "cdbEntryParams": { - "model_params": "-f ${workspaceFolder}/SimpleTrustZone/model_config.txt" + "cdbEntryParams": { + "model_params": "-f ${workspaceFolder}/SimpleTrustZone/model_config.txt" + } + }, + { + "name": "STLink@pyOCD (launch)", + "type": "gdbtarget", + "request": "launch", + "cwd": "${workspaceFolder}/CubeMX", + "program": "out\\CubeMX\\MyBoard_ROM\\Debug\\CubeMX.axf", + "gdb": "arm-none-eabi-gdb", + "preLaunchTask": "CMSIS Load", + "initCommands": [ + "monitor reset halt", + "tbreak main" + ], + "customResetCommands": [ + "monitor reset halt", + "tbreak main", + "continue" + ], + "target": { + "server": "pyocd", + "serverParameters": [ + "gdbserver", + "--probe", + "stlink:", + "--connect", + "attach", + "--cbuild-run", + "${command:cmsis-csolution.getCbuildRunFile}", + "--quiet", + "--log", + "*.cbuild_run,*server=info" + ], + "port": "3333" + }, + "cmsis": { + "cbuildRunFile": "${command:cmsis-csolution.getCbuildRunFile}", + "updateConfiguration": "auto" + } + }, + { + "name": "STLink@pyOCD (attach)", + "type": "gdbtarget", + "request": "attach", + "cwd": "${workspaceFolder}/CubeMX", + "program": "out\\CubeMX\\MyBoard_ROM\\Debug\\CubeMX.axf", + "gdb": "arm-none-eabi-gdb", + "initCommands": [ + "" + ], + "customResetCommands": [ + "monitor reset halt", + "tbreak main", + "continue" + ], + "target": { + "port": "3333" + }, + "cmsis": { + "cbuildRunFile": "${command:cmsis-csolution.getCbuildRunFile}", + "updateConfiguration": "auto" } } ] -} +} \ No newline at end of file From f338cfb0701271f2625810053e99fa15b70e6dd5 Mon Sep 17 00:00:00 2001 From: Sourabh Mehta Date: Tue, 11 Nov 2025 10:55:49 +0100 Subject: [PATCH 2/7] Cature installed tools logs from vcpkg --- .github/workflows/CubeMX-CI.yml | 86 +++++++++++++++------------------ 1 file changed, 40 insertions(+), 46 deletions(-) diff --git a/.github/workflows/CubeMX-CI.yml b/.github/workflows/CubeMX-CI.yml index 6451ca7..f56f667 100644 --- a/.github/workflows/CubeMX-CI.yml +++ b/.github/workflows/CubeMX-CI.yml @@ -19,38 +19,24 @@ jobs: runs-on: ubuntu-latest outputs: build_status: ${{ steps.build_step.outcome }} - build_timestamp: ${{ steps.set_timestamp.outputs.timestamp }} steps: - name: Checkout repo uses: actions/checkout@v4 - - name: Set timestamp - id: set_timestamp - run: echo "timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT - - name: Install tools - id: install_tools uses: ARM-software/cmsis-actions/vcpkg@v1 with: config: ".ci/vcpkg-configuration.json" continue-on-error: false - - name: Save tool installation logs + - name: Capture vcpkg activation output if: always() run: | mkdir -p logs - echo "=== Tool Installation Information ===" > logs/install_tools.log - echo "Timestamp: $(date -u +"%Y-%m-%d %H:%M:%S")" >> logs/install_tools.log - echo "" >> logs/install_tools.log - - # Check if cbuild is available and get its version - if command -v cbuild &> /dev/null; then - echo "=== CMSIS Toolbox Version ===" >> logs/install_tools.log - cbuild --version 2>&1 >> logs/install_tools.log || echo "Version unavailable" >> logs/install_tools.log - else - echo "cbuild command not found" >> logs/install_tools.log - fi + echo "=== vcpkg Artifacts Activation ===" > logs/vcpkg_artifacts.log + cd $(dirname ".ci/vcpkg-configuration.json") + vcpkg activate 2>&1 | tee -a $GITHUB_WORKSPACE/logs/vcpkg_artifacts.log || echo "vcpkg activate failed" >> $GITHUB_WORKSPACE/logs/vcpkg_artifacts.log - name: Upload tool logs if: always() @@ -80,12 +66,12 @@ jobs: - name: Parse and collect data run: | - # Parse tool installation log - if [ -f logs/install_tools.log ]; then - echo "Parsing tool installation log..." - cat logs/install_tools.log + # Parse vcpkg artifacts log + if [ -f logs/vcpkg_artifacts.log ]; then + echo "Parsing vcpkg artifacts log..." + cat logs/vcpkg_artifacts.log else - echo "No tool installation log found" + echo "No vcpkg artifacts log found" fi - name: Generate JSON report @@ -95,45 +81,38 @@ jobs: import re from datetime import datetime - def parse_tool_log(log_path): - cmsis_toolbox_info = None + def parse_vcpkg_artifacts_log(log_path): + cmsis_toolbox_version = None try: with open(log_path, 'r') as f: content = f.read() - # Parse cbuild --version output - # Looking for version number like "2.12.0" or similar - match = re.search(r'=== CMSIS Toolbox Version ===\s*(.+?)(?:\n|$)', content) + # Parse the vcpkg artifacts table for cmsis-toolbox + # Looking for line like: "arm:tools/open-cmsis-pack/cmsis-toolbox 2.12.0 will install" + match = re.search(r'arm:tools/open-cmsis-pack/cmsis-toolbox\s+(\S+)\s+', content) if match: - version = match.group(1).strip() - cmsis_toolbox_info = { - "version": version, - "tool": "cmsis-toolbox" - } + cmsis_toolbox_version = match.group(1) except FileNotFoundError: - print("Tool log file not found") + print("vcpkg artifacts log file not found") except Exception as e: - print(f"Error parsing tool log: {e}") + print(f"Error parsing vcpkg artifacts log: {e}") - return cmsis_toolbox_info + return cmsis_toolbox_version # Collect data data = { "workflow": "CubeMX: Test Build", - "build_job": { - "last_run": "${{ needs.Build.outputs.build_timestamp }}", + "repo": "${{ github.repository }}", + "run_id": "${{ github.run_id }}", + "run_url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "job": { + "last_run": datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ"), "status": "${{ needs.Build.outputs.build_status }}", "passed": "${{ needs.Build.outputs.build_status }}" == "success" }, - "cmsis_toolbox": parse_tool_log("logs/install_tools.log"), - "metadata": { - "run_id": "${{ github.run_id }}", - "run_number": "${{ github.run_number }}", - "workflow_ref": "${{ github.workflow_ref }}", - "event": "${{ github.event_name }}", - "branch": "${{ github.ref_name }}", - "commit": "${{ github.sha }}" + "tools": { + "cmsis_toolbox": parse_vcpkg_artifacts_log("logs/vcpkg_artifacts.log") } } @@ -148,7 +127,9 @@ jobs: python3 collect_data.py - name: Display collected data + id: collected_data run: | + echo "json=$(jq -c '.' workflow_data.json)" >> "$GITHUB_OUTPUT" echo "=== Workflow Data Collection ===" cat workflow_data.json @@ -157,3 +138,16 @@ jobs: with: name: workflow-data path: workflow_data.json + + - name: Emit to central repo + uses: peter-evans/repository-dispatch@v4 + with: + token: ${{ secrets.METRICS_PAT }} # PAT or GitHub App token + repository: soumeh01/test_ts_app # <-- your central repo + event-type: ci_metrics + client-payload: | + { + "source": "${{ github.repository }}", + "workflow": "CubeMX: Test Build", + "metrics": ${{ steps.collected_data.outputs.json }} + } \ No newline at end of file From c2d42efe89bd2a9885e5df419beba3aaf8f06d9a Mon Sep 17 00:00:00 2001 From: Evagan2018 Date: Thu, 27 Nov 2025 09:15:37 +0100 Subject: [PATCH 3/7] Removed launch.json. Solved https://github.com/ARM-software/vscode-cmsis-csolution/issues/273 --- .vscode/launch.json | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 7eda3b4..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "SimpleTZ (AC6)", - "type": "arm-debugger", - "request": "launch", - "programs": [ - "${workspaceFolder}/SimpleTrustZone/out/CM33_ns/CS300/Debug/CM33_ns.axf", - "${workspaceFolder}/SimpleTrustZone/out/CM33_s/CS300/Debug/CM33_s.axf" - ], - "programMode": "ram", - // armdbg --cdb-list - "cdbEntry": "Arm FVP::MPS2_Cortex_M33::Bare Metal Debug::Bare Metal Debug::Cortex-M33_0", - "cdbEntryParams": { - "model_params": "-f ${workspaceFolder}/SimpleTrustZone/model_config.txt" - } - }, - { - "name": "SimpleTZ (GCC/Clang)", - "type": "arm-debugger", - "request": "launch", - "programs": [ - "${workspaceFolder}/SimpleTrustZone/out/CM33_ns/CS300/Debug/CM33_ns.elf", - "${workspaceFolder}/SimpleTrustZone/out/CM33_s/CS300/Debug/CM33_s.elf" - ], - "programMode": "ram", - // armdbg --cdb-list - "cdbEntry": "Arm FVP::MPS2_Cortex_M33::Bare Metal Debug::Bare Metal Debug::Cortex-M33_0", - "cdbEntryParams": { - "model_params": "-f ${workspaceFolder}/SimpleTrustZone/model_config.txt" - } - } - ] -} From 547ae8f9afc82ec40787eca52cff1f1e0da24e06 Mon Sep 17 00:00:00 2001 From: Sourabh Mehta <73165318+soumeh01@users.noreply.github.com> Date: Thu, 15 Jan 2026 15:18:39 +0100 Subject: [PATCH 4/7] Refactor CubeMX CI workflow for better logging --- .github/workflows/CubeMX-CI.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CubeMX-CI.yml b/.github/workflows/CubeMX-CI.yml index f56f667..5c6fd31 100644 --- a/.github/workflows/CubeMX-CI.yml +++ b/.github/workflows/CubeMX-CI.yml @@ -19,7 +19,6 @@ jobs: runs-on: ubuntu-latest outputs: build_status: ${{ steps.build_step.outcome }} - steps: - name: Checkout repo uses: actions/checkout@v4 @@ -150,4 +149,5 @@ jobs: "source": "${{ github.repository }}", "workflow": "CubeMX: Test Build", "metrics": ${{ steps.collected_data.outputs.json }} - } \ No newline at end of file + + } From 23ff0b564fe6fcaf177b732fcf604c18b4ff4d32 Mon Sep 17 00:00:00 2001 From: Sourabh Mehta Date: Sat, 8 Nov 2025 00:16:33 +0100 Subject: [PATCH 5/7] Test Build Data collection --- .github/workflows/CubeMX-CI.yml | 124 ++++++++++++++++++++++++++++++++ .vscode/launch.json | 94 ++++++++++++++++++++++++ 2 files changed, 218 insertions(+) create mode 100644 .vscode/launch.json diff --git a/.github/workflows/CubeMX-CI.yml b/.github/workflows/CubeMX-CI.yml index d79fb86..6451ca7 100644 --- a/.github/workflows/CubeMX-CI.yml +++ b/.github/workflows/CubeMX-CI.yml @@ -17,19 +17,143 @@ on: jobs: Build: runs-on: ubuntu-latest + outputs: + build_status: ${{ steps.build_step.outcome }} + build_timestamp: ${{ steps.set_timestamp.outputs.timestamp }} steps: - name: Checkout repo uses: actions/checkout@v4 + - name: Set timestamp + id: set_timestamp + run: echo "timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT + - name: Install tools + id: install_tools uses: ARM-software/cmsis-actions/vcpkg@v1 with: config: ".ci/vcpkg-configuration.json" + continue-on-error: false + + - name: Save tool installation logs + if: always() + run: | + mkdir -p logs + echo "=== Tool Installation Information ===" > logs/install_tools.log + echo "Timestamp: $(date -u +"%Y-%m-%d %H:%M:%S")" >> logs/install_tools.log + echo "" >> logs/install_tools.log + + # Check if cbuild is available and get its version + if command -v cbuild &> /dev/null; then + echo "=== CMSIS Toolbox Version ===" >> logs/install_tools.log + cbuild --version 2>&1 >> logs/install_tools.log || echo "Version unavailable" >> logs/install_tools.log + else + echo "cbuild command not found" >> logs/install_tools.log + fi + + - name: Upload tool logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: tool-logs + path: logs/ - name: Activate Arm tool license uses: ARM-software/cmsis-actions/armlm@v1 - name: Build project with AC6 + id: build_step working-directory: ./CubeMX/ run: cbuild CubeMX.csolution.yml --packs --toolchain AC6 --rebuild + + CollectData: + runs-on: ubuntu-latest + needs: Build + if: always() + steps: + - name: Download tool logs + uses: actions/download-artifact@v4 + with: + name: tool-logs + path: logs/ + + - name: Parse and collect data + run: | + # Parse tool installation log + if [ -f logs/install_tools.log ]; then + echo "Parsing tool installation log..." + cat logs/install_tools.log + else + echo "No tool installation log found" + fi + + - name: Generate JSON report + run: | + cat << 'EOF' > collect_data.py + import json + import re + from datetime import datetime + + def parse_tool_log(log_path): + cmsis_toolbox_info = None + try: + with open(log_path, 'r') as f: + content = f.read() + + # Parse cbuild --version output + # Looking for version number like "2.12.0" or similar + match = re.search(r'=== CMSIS Toolbox Version ===\s*(.+?)(?:\n|$)', content) + if match: + version = match.group(1).strip() + cmsis_toolbox_info = { + "version": version, + "tool": "cmsis-toolbox" + } + + except FileNotFoundError: + print("Tool log file not found") + except Exception as e: + print(f"Error parsing tool log: {e}") + + return cmsis_toolbox_info + + # Collect data + data = { + "workflow": "CubeMX: Test Build", + "build_job": { + "last_run": "${{ needs.Build.outputs.build_timestamp }}", + "status": "${{ needs.Build.outputs.build_status }}", + "passed": "${{ needs.Build.outputs.build_status }}" == "success" + }, + "cmsis_toolbox": parse_tool_log("logs/install_tools.log"), + "metadata": { + "run_id": "${{ github.run_id }}", + "run_number": "${{ github.run_number }}", + "workflow_ref": "${{ github.workflow_ref }}", + "event": "${{ github.event_name }}", + "branch": "${{ github.ref_name }}", + "commit": "${{ github.sha }}" + } + } + + # Print JSON + print(json.dumps(data, indent=2)) + + # Save to file + with open('workflow_data.json', 'w') as f: + json.dump(data, f, indent=2) + EOF + + python3 collect_data.py + + - name: Display collected data + run: | + echo "=== Workflow Data Collection ===" + cat workflow_data.json + + - name: Upload workflow data + uses: actions/upload-artifact@v4 + with: + name: workflow-data + path: workflow_data.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..5bac2d4 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,94 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "SimpleTZ (AC6)", + "type": "arm-debugger", + "request": "launch", + "programs": [ + "${workspaceFolder}/SimpleTrustZone/out/CM33_ns/CS300/Debug/CM33_ns.axf", + "${workspaceFolder}/SimpleTrustZone/out/CM33_s/CS300/Debug/CM33_s.axf" + ], + "programMode": "ram", + "cdbEntry": "Arm FVP::MPS2_Cortex_M33::Bare Metal Debug::Bare Metal Debug::Cortex-M33_0", + "cdbEntryParams": { + "model_params": "-f ${workspaceFolder}/SimpleTrustZone/model_config.txt" + } + }, + { + "name": "SimpleTZ (GCC/Clang)", + "type": "arm-debugger", + "request": "launch", + "programs": [ + "${workspaceFolder}/SimpleTrustZone/out/CM33_ns/CS300/Debug/CM33_ns.elf", + "${workspaceFolder}/SimpleTrustZone/out/CM33_s/CS300/Debug/CM33_s.elf" + ], + "programMode": "ram", + "cdbEntry": "Arm FVP::MPS2_Cortex_M33::Bare Metal Debug::Bare Metal Debug::Cortex-M33_0", + "cdbEntryParams": { + "model_params": "-f ${workspaceFolder}/SimpleTrustZone/model_config.txt" + } + }, + { + "name": "STLink@pyOCD (launch)", + "type": "gdbtarget", + "request": "launch", + "cwd": "${workspaceFolder}/CubeMX", + "program": "out\\CubeMX\\MyBoard_ROM\\Debug\\CubeMX.axf", + "gdb": "arm-none-eabi-gdb", + "preLaunchTask": "CMSIS Load", + "initCommands": [ + "monitor reset halt", + "tbreak main" + ], + "customResetCommands": [ + "monitor reset halt", + "tbreak main", + "continue" + ], + "target": { + "server": "pyocd", + "serverParameters": [ + "gdbserver", + "--probe", + "stlink:", + "--connect", + "attach", + "--cbuild-run", + "${command:cmsis-csolution.getCbuildRunFile}", + "--quiet", + "--log", + "*.cbuild_run,*server=info" + ], + "port": "3333" + }, + "cmsis": { + "cbuildRunFile": "${command:cmsis-csolution.getCbuildRunFile}", + "updateConfiguration": "auto" + } + }, + { + "name": "STLink@pyOCD (attach)", + "type": "gdbtarget", + "request": "attach", + "cwd": "${workspaceFolder}/CubeMX", + "program": "out\\CubeMX\\MyBoard_ROM\\Debug\\CubeMX.axf", + "gdb": "arm-none-eabi-gdb", + "initCommands": [ + "" + ], + "customResetCommands": [ + "monitor reset halt", + "tbreak main", + "continue" + ], + "target": { + "port": "3333" + }, + "cmsis": { + "cbuildRunFile": "${command:cmsis-csolution.getCbuildRunFile}", + "updateConfiguration": "auto" + } + } + ] +} \ No newline at end of file From fbdf05e6e11bf38e86b116c803de3627291af2bf Mon Sep 17 00:00:00 2001 From: Sourabh Mehta Date: Tue, 11 Nov 2025 10:55:49 +0100 Subject: [PATCH 6/7] Cature installed tools logs from vcpkg --- .github/workflows/CubeMX-CI.yml | 86 +++++++++++++++------------------ 1 file changed, 40 insertions(+), 46 deletions(-) diff --git a/.github/workflows/CubeMX-CI.yml b/.github/workflows/CubeMX-CI.yml index 6451ca7..f56f667 100644 --- a/.github/workflows/CubeMX-CI.yml +++ b/.github/workflows/CubeMX-CI.yml @@ -19,38 +19,24 @@ jobs: runs-on: ubuntu-latest outputs: build_status: ${{ steps.build_step.outcome }} - build_timestamp: ${{ steps.set_timestamp.outputs.timestamp }} steps: - name: Checkout repo uses: actions/checkout@v4 - - name: Set timestamp - id: set_timestamp - run: echo "timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT - - name: Install tools - id: install_tools uses: ARM-software/cmsis-actions/vcpkg@v1 with: config: ".ci/vcpkg-configuration.json" continue-on-error: false - - name: Save tool installation logs + - name: Capture vcpkg activation output if: always() run: | mkdir -p logs - echo "=== Tool Installation Information ===" > logs/install_tools.log - echo "Timestamp: $(date -u +"%Y-%m-%d %H:%M:%S")" >> logs/install_tools.log - echo "" >> logs/install_tools.log - - # Check if cbuild is available and get its version - if command -v cbuild &> /dev/null; then - echo "=== CMSIS Toolbox Version ===" >> logs/install_tools.log - cbuild --version 2>&1 >> logs/install_tools.log || echo "Version unavailable" >> logs/install_tools.log - else - echo "cbuild command not found" >> logs/install_tools.log - fi + echo "=== vcpkg Artifacts Activation ===" > logs/vcpkg_artifacts.log + cd $(dirname ".ci/vcpkg-configuration.json") + vcpkg activate 2>&1 | tee -a $GITHUB_WORKSPACE/logs/vcpkg_artifacts.log || echo "vcpkg activate failed" >> $GITHUB_WORKSPACE/logs/vcpkg_artifacts.log - name: Upload tool logs if: always() @@ -80,12 +66,12 @@ jobs: - name: Parse and collect data run: | - # Parse tool installation log - if [ -f logs/install_tools.log ]; then - echo "Parsing tool installation log..." - cat logs/install_tools.log + # Parse vcpkg artifacts log + if [ -f logs/vcpkg_artifacts.log ]; then + echo "Parsing vcpkg artifacts log..." + cat logs/vcpkg_artifacts.log else - echo "No tool installation log found" + echo "No vcpkg artifacts log found" fi - name: Generate JSON report @@ -95,45 +81,38 @@ jobs: import re from datetime import datetime - def parse_tool_log(log_path): - cmsis_toolbox_info = None + def parse_vcpkg_artifacts_log(log_path): + cmsis_toolbox_version = None try: with open(log_path, 'r') as f: content = f.read() - # Parse cbuild --version output - # Looking for version number like "2.12.0" or similar - match = re.search(r'=== CMSIS Toolbox Version ===\s*(.+?)(?:\n|$)', content) + # Parse the vcpkg artifacts table for cmsis-toolbox + # Looking for line like: "arm:tools/open-cmsis-pack/cmsis-toolbox 2.12.0 will install" + match = re.search(r'arm:tools/open-cmsis-pack/cmsis-toolbox\s+(\S+)\s+', content) if match: - version = match.group(1).strip() - cmsis_toolbox_info = { - "version": version, - "tool": "cmsis-toolbox" - } + cmsis_toolbox_version = match.group(1) except FileNotFoundError: - print("Tool log file not found") + print("vcpkg artifacts log file not found") except Exception as e: - print(f"Error parsing tool log: {e}") + print(f"Error parsing vcpkg artifacts log: {e}") - return cmsis_toolbox_info + return cmsis_toolbox_version # Collect data data = { "workflow": "CubeMX: Test Build", - "build_job": { - "last_run": "${{ needs.Build.outputs.build_timestamp }}", + "repo": "${{ github.repository }}", + "run_id": "${{ github.run_id }}", + "run_url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "job": { + "last_run": datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ"), "status": "${{ needs.Build.outputs.build_status }}", "passed": "${{ needs.Build.outputs.build_status }}" == "success" }, - "cmsis_toolbox": parse_tool_log("logs/install_tools.log"), - "metadata": { - "run_id": "${{ github.run_id }}", - "run_number": "${{ github.run_number }}", - "workflow_ref": "${{ github.workflow_ref }}", - "event": "${{ github.event_name }}", - "branch": "${{ github.ref_name }}", - "commit": "${{ github.sha }}" + "tools": { + "cmsis_toolbox": parse_vcpkg_artifacts_log("logs/vcpkg_artifacts.log") } } @@ -148,7 +127,9 @@ jobs: python3 collect_data.py - name: Display collected data + id: collected_data run: | + echo "json=$(jq -c '.' workflow_data.json)" >> "$GITHUB_OUTPUT" echo "=== Workflow Data Collection ===" cat workflow_data.json @@ -157,3 +138,16 @@ jobs: with: name: workflow-data path: workflow_data.json + + - name: Emit to central repo + uses: peter-evans/repository-dispatch@v4 + with: + token: ${{ secrets.METRICS_PAT }} # PAT or GitHub App token + repository: soumeh01/test_ts_app # <-- your central repo + event-type: ci_metrics + client-payload: | + { + "source": "${{ github.repository }}", + "workflow": "CubeMX: Test Build", + "metrics": ${{ steps.collected_data.outputs.json }} + } \ No newline at end of file From 17f2295d64686aaa8a3ee2c2324be769d7048d97 Mon Sep 17 00:00:00 2001 From: Sourabh Mehta <73165318+soumeh01@users.noreply.github.com> Date: Thu, 15 Jan 2026 15:18:39 +0100 Subject: [PATCH 7/7] Refactor CubeMX CI workflow for better logging --- .github/workflows/CubeMX-CI.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CubeMX-CI.yml b/.github/workflows/CubeMX-CI.yml index f56f667..5c6fd31 100644 --- a/.github/workflows/CubeMX-CI.yml +++ b/.github/workflows/CubeMX-CI.yml @@ -19,7 +19,6 @@ jobs: runs-on: ubuntu-latest outputs: build_status: ${{ steps.build_step.outcome }} - steps: - name: Checkout repo uses: actions/checkout@v4 @@ -150,4 +149,5 @@ jobs: "source": "${{ github.repository }}", "workflow": "CubeMX: Test Build", "metrics": ${{ steps.collected_data.outputs.json }} - } \ No newline at end of file + + }