diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index e0f56fd2e78..6b1bb6a54ef 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -6,6 +6,9 @@ jobs: copilot-setup-steps: runs-on: ubuntu-latest timeout-minutes: 120 + env: + AndroidToolchainCacheDirectory: /mnt/android-archives + AndroidToolchainDirectory: /mnt/android-toolchain steps: - name: Checkout repository @@ -13,6 +16,28 @@ jobs: with: submodules: recursive + - name: Log disk space (after checkout) + uses: ./.github/workflows/log-disk-space + + - name: Setup build directories on secondary disk + run: | + echo "Setting up Android toolchain on /mnt (secondary disk with 66G+ free)" + + # Create directories with sudo and set ownership + sudo mkdir -p /mnt/android-archives + sudo mkdir -p /mnt/android-toolchain + sudo mkdir -p /mnt/bin + sudo chown $USER:$USER /mnt/android-archives /mnt/android-toolchain /mnt/bin + + # Remove bin directory if it exists and create symlink to use the secondary disk + rm -rf ./bin + ln -s /mnt/bin ./bin + + echo "Android toolchain directories configured:" + ls -la /mnt + ls -lah bin + df -h /mnt + - name: Setup .NET uses: actions/setup-dotnet@v4 with: @@ -25,6 +50,11 @@ jobs: make jenkins PREPARE_CI=1 PREPARE_AUTOPROVISION=1 CONFIGURATION=Debug timeout-minutes: 60 + - name: Log disk space (after android build) + uses: ./.github/workflows/log-disk-space + with: + detailed: 'true' + - name: Upload logs uses: actions/upload-artifact@v4 if: steps.android-build.outcome == 'failure' diff --git a/.github/workflows/log-disk-space/action.yml b/.github/workflows/log-disk-space/action.yml new file mode 100644 index 00000000000..b44f7a7bfcc --- /dev/null +++ b/.github/workflows/log-disk-space/action.yml @@ -0,0 +1,68 @@ +name: Log Disk Space +description: Logs disk space usage on the runner +inputs: + detailed: + description: 'Whether to include detailed disk analysis (true/false)' + required: false + default: 'false' +runs: + using: composite + steps: + - name: Display disk space + shell: bash + run: | + MAX_LINES=20 + + echo "=== Disk Space Usage ===" + df -h + echo "" + echo "=== Inode Usage ===" + df -i + echo "" + echo "=== Disk Usage Summary ===" + df -h / | tail -1 | awk '{print "Used: " $3 " / " $2 " (" $5 " full)"}' + echo "" + echo "=== /mnt disk info ===" + echo "Permissions:" + ls -la / | grep mnt + echo "Contents:" + ls -la /mnt 2>/dev/null || echo "/mnt is empty or not accessible" + echo "Disk usage:" + df -h /mnt + + # Detailed analysis if requested + if [ "${{ inputs.detailed }}" = "true" ]; then + echo "" + echo "=== DETAILED ANALYSIS ===" + echo "" + echo "=== Largest directories in /home/runner ===" + sudo du -h /home/runner 2>/dev/null | sort -rh | head -$MAX_LINES || true + echo "" + echo "=== Largest directories in /opt ===" + sudo du -h /opt 2>/dev/null | sort -rh | head -$MAX_LINES || true + echo "" + echo "=== Workspace breakdown (top level) ===" + du -h --max-depth=1 . 2>/dev/null | sort -rh || true + echo "" + echo "=== Workspace breakdown (2 levels deep) ===" + du -h --max-depth=2 . 2>/dev/null | sort -rh | head -$MAX_LINES || true + echo "" + echo "=== bin directory ===" + du -sh ./bin/* 2>/dev/null | sort -rh | head -$MAX_LINES || echo "No bin" + echo "" + echo "=== external directory ===" + du -sh ./external/* 2>/dev/null | sort -rh | head -$MAX_LINES || echo "No external" + echo "" + echo "=== Android toolchain directories ===" + du -sh /mnt/android-archives 2>/dev/null || echo "No android-archives" + du -sh /mnt/android-toolchain 2>/dev/null || echo "No android-toolchain" + echo "" + echo "=== /mnt disk usage ===" + du -h --max-depth=1 /mnt 2>/dev/null | sort -rh || true + echo "" + echo "=== Docker usage ===" + docker system df 2>/dev/null || echo "Docker not available" + echo "" + echo "=== Temp directories ===" + du -sh /tmp /var/tmp 2>/dev/null || true + fi