# Run `cargo bloat` for finding out what takes most of the space in your executable.

name: Cargo Bloat

on:
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
  cancel-in-progress: true

jobs:
  bloat:
    name: Cargo Bloat
    runs-on: ubuntu-latest
    steps:
      - uses: taiki-e/checkout-action@v1

      - uses: Boshen/setup-rust@main
        with:
          cache-key: warm
          tools: cargo-bloat

      - name: Run
        env:
          RUSTFLAGS: "-C debuginfo=2 -C strip=none"
        shell: bash
        run: |
          echo "# Bloat Summary" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY

          echo "## Largest functions" >> $GITHUB_STEP_SUMMARY
          echo '```' >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          cargo bloat --release -p oxlint --features allocator -n 15 >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo '```' >> $GITHUB_STEP_SUMMARY

          echo "## Largest crates" >> $GITHUB_STEP_SUMMARY
          echo '```' >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          cargo bloat --release -p oxlint --features allocator --crates -n 15 >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo '```' >> $GITHUB_STEP_SUMMARY
