Test Build Data collection #111
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "CubeMX: Test Build" | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - CubeMX/** | |
| - .github/workflows/CubeMX-CI.yml | |
| push: | |
| branches: [main] | |
| paths: | |
| - CubeMX/** | |
| - .github/workflows/CubeMX-CI.yml | |
| schedule: | |
| - cron: '00 20 * * 6' | |
| 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: Capture installation output | |
| if: always() | |
| run: | | |
| mkdir -p logs | |
| # Capture the vcpkg artifacts output | |
| echo "=== vcpkg Artifact Installation ===" > logs/vcpkg_install.log | |
| vcpkg x-update-registry --all 2>&1 | tee -a logs/vcpkg_install.log || true | |
| - 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 | |
| # Capture only cmsis-toolbox from vcpkg list | |
| if command -v vcpkg &> /dev/null; then | |
| echo "=== CMSIS Toolbox ===" >> logs/install_tools.log | |
| echo "Full vcpkg list output:" >> logs/install_tools.log | |
| vcpkg list 2>&1 | tee -a logs/install_tools.log | |
| echo "" >> logs/install_tools.log | |
| echo "Filtered cmsis-toolbox:" >> logs/install_tools.log | |
| vcpkg list 2>&1 | grep "cmsis-toolbox" >> logs/install_tools.log || echo "cmsis-toolbox 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 vcpkg list format for cmsis-toolbox | |
| # Looking for line like: "arm:tools/open-cmsis-pack/cmsis-toolbox 2.12.0" | |
| match = re.search(r'arm:tools/open-cmsis-pack/cmsis-toolbox\s+(\S+)', content) | |
| if match: | |
| version = match.group(1) | |
| cmsis_toolbox_info = { | |
| "version": version, | |
| "full_name": "arm:tools/open-cmsis-pack/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") | |
| } | |
| # 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 |