backtrace 0.3.69

A library to acquire a stack trace (backtrace) at runtime in a Rust program.
Documentation
# This workflow checks if a PR commit has changed the size of a hello world Rust program.
# It downloads Rustc and compiles two versions of a stage0 compiler - one using the base commit
# of the PR, and one using the latest commit in the PR.
# If the size of the hello world program has changed, it posts a comment to the PR.
name: Check binary size

on:
  pull_request_target:
    branches:
      - master

jobs:
  test:
    name: Check binary size
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
    steps:
      - name: Print info
        run: |
          echo "Current SHA: ${{ github.event.pull_request.head.sha }}"
          echo "Base SHA: ${{ github.event.pull_request.base.sha }}"
      - name: Clone Rustc
        uses: actions/checkout@v3
        with:
          repository: rust-lang/rust
          fetch-depth: 1
      - name: Fetch backtrace
        run: git submodule update --init library/backtrace
      - name: Create hello world program that uses backtrace
        run: printf "fn main() { panic!(); }" > foo.rs
      - name: Build binary with base version of backtrace
        run: |
          printf "[llvm]\ndownload-ci-llvm = true\n\n[rust]\nincremental = false\n" > config.toml
          cd library/backtrace
          git remote add head-pr https://github.com/${{ github.event.pull_request.head.repo.full_name }}
          git fetch --all
          git checkout ${{ github.event.pull_request.base.sha }}
          cd ../..
          git add library/backtrace
          python3 x.py build library --stage 0
          ./build/x86_64-unknown-linux-gnu/stage0-sysroot/bin/rustc -O foo.rs -o binary-reference
      - name: Build binary with PR version of backtrace
        run: |
          cd library/backtrace
          git checkout ${{ github.event.pull_request.head.sha }}
          cd ../..
          git add library/backtrace
          rm -rf build/x86_64-unknown-linux-gnu/stage0-std
          python3 x.py build library --stage 0
          ./build/x86_64-unknown-linux-gnu/stage0-sysroot/bin/rustc -O foo.rs -o binary-updated
      - name: Display binary size
        run: |
          ls -la binary-*
          echo "SIZE_REFERENCE=$(stat -c '%s' binary-reference)" >> "$GITHUB_ENV"
          echo "SIZE_UPDATED=$(stat -c '%s' binary-updated)" >> "$GITHUB_ENV"
      - name: Post a PR comment if the size has changed
        uses: actions/github-script@v6
        with:
          script: |
            const reference = process.env.SIZE_REFERENCE;
            const updated = process.env.SIZE_UPDATED;
            const diff = updated - reference;
            const plus = diff > 0 ? "+" : "";
            const diff_str = `${plus}${diff}B`;

            if (diff !== 0) {
              const percent = (((updated / reference) - 1) * 100).toFixed(2);
              // The body is created here and wrapped so "weirdly" to avoid whitespace at the start of the lines,
              // which is interpreted as a code block by Markdown.
              const body = `Below is the size of a hello-world Rust program linked with libstd with backtrace.

            Original binary size: **${reference}B**
            Updated binary size: **${updated}B**
            Difference: **${diff_str}** (${percent}%)`;

              github.rest.issues.createComment({
                issue_number: context.issue.number,
                owner: context.repo.owner,
                repo: context.repo.repo,
                body
              })
            }