name: Binary size difference on: pull_request: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: sizediff: runs-on: ubuntu-22.04 permissions: pull-requests: write steps: # Prepare, install tools - name: Add GOBIN to $PATH run: | echo "$HOME/go/bin" >> $GITHUB_PATH - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 # fetch all history (no sparse checkout) submodules: true - name: Install apt dependencies run: | echo 'deb https://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main' | sudo tee /etc/apt/sources.list.d/llvm.list wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo apt-get update sudo apt-get install --no-install-recommends -y \ llvm-16-dev \ clang-16 \ libclang-16-dev \ lld-16 - name: Restore LLVM source cache uses: actions/cache@v3 id: cache-llvm-source with: key: llvm-source-16-sizediff-v1 path: | llvm-project/compiler-rt - name: Download LLVM source if: steps.cache-llvm-source.outputs.cache-hit != 'true' run: make llvm-source - name: Cache Go uses: actions/cache@v3 with: key: go-cache-linux-sizediff-v1-${{ hashFiles('go.mod') }} path: | ~/.cache/go-build ~/go/pkg/mod - run: make gen-device -j4 - name: Download drivers repo run: git clone https://github.com/tinygo-org/drivers.git - name: Save HEAD run: git branch github-actions-saved-HEAD HEAD # Compute sizes for the PR branch - name: Build tinygo binary for the PR branch run: go install - name: Determine binary sizes on the PR branch run: (cd drivers; make smoke-test XTENSA=0 | tee sizes-pr.txt) # Compute sizes for the dev branch - name: Checkout dev branch run: | git reset --hard origin/dev git checkout --no-recurse-submodules `git merge-base HEAD origin/dev` - name: Build tinygo binary for the dev branch run: go install - name: Determine binary sizes on the dev branch run: (cd drivers; make smoke-test XTENSA=0 | tee sizes-dev.txt) # Create comment # TODO: add a summary, something like: # - overall size difference (percent) # - number of binaries that grew / shrank / remained the same # - don't show the full diff when no binaries changed - name: Calculate size diff run: ./tools/sizediff drivers/sizes-dev.txt drivers/sizes-pr.txt | tee sizediff.txt - name: Create comment run: | echo "Size difference with the dev branch:" > comment.txt echo "
Binary size difference" >> comment.txt echo "
" >> comment.txt
          cat sizediff.txt >> comment.txt
          echo "
" >> comment.txt - name: Comment contents run: cat comment.txt - name: Add comment if: ${{ github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }} uses: thollander/actions-comment-pull-request@v2.3.1 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} filePath: comment.txt comment_tag: sizediff