Skip to content
Latchkey

bench workflow (tauri-apps/tauri)

The bench workflow from tauri-apps/tauri, explained and optimized by Latchkey.

C

CI health: C - fair

Run this on Latchkey for self-healing, caching, and up to 58% lower cost.

Grade your own workflow free or run it on Latchkey →
Source: tauri-apps/tauri.github/workflows/bench.ymlLicense Apache-2.0View source

What it does

This is the bench workflow from the tauri-apps/tauri repository, a real project running GitHub Actions. It is shown here with attribution under its Apache-2.0 license.

Below, Latchkey shows a faster, safer version produced by its optimization engine.

The workflow

workflow (.yml)
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

name: bench

on:
  push:
    branches:
      - dev
  workflow_dispatch:
  pull_request:
    paths:
      - '.github/workflows/bench.yml'
      - 'bench/**'

env:
  RUST_BACKTRACE: 1
  CARGO_PROFILE_DEV_DEBUG: 0 # This would add unnecessary bloat to the target folder, decreasing cache efficiency.
  LC_ALL: en_US.UTF-8 # This prevents strace from changing its number format to use commas.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  bench:
    strategy:
      fail-fast: false
      matrix:
        rust: [nightly]
        platform:
          - {
              target: x86_64-unknown-linux-gnu,
              os: ubuntu-latest,
              runner: 'xvfb-run --auto-servernum '
            }
          - { target: x86_64-pc-windows-msvc, os: windows-latest, runner: '' }
          - { target: aarch64-apple-darwin, os: macos-latest, runner: '' }

    runs-on: ${{ matrix.platform.os }}

    steps:
      - uses: actions/checkout@v6

      - name: install Rust ${{ matrix.rust }}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
          components: rust-src
          targets: ${{ matrix.platform.target }}

      - name: install webkit2gtk and xvfb (ubuntu only)
        if: contains(matrix.platform.target, 'gnu')
        run: |
          sudo apt-get update
          sudo apt-get install -y --no-install-recommends \
            webkit2gtk-4.1 libayatana-appindicator3-dev \
            xvfb \
            at-spi2-core

      - name: Setup python
        uses: actions/setup-python@v6
        with:
          python-version: '3.13'

      - name: install memory_profiler
        run: |
          python -m pip install --upgrade pip
          pip install memory_profiler

      - name: Install cargo-binstall
        uses: cargo-bins/cargo-binstall@v1.19.1

      - name: Install hyperfine
        run: cargo binstall hyperfine@1.20 --no-confirm

      - uses: Swatinem/rust-cache@v2

      - name: build benchmark binaries
        env:
          RUSTFLAGS: '-Zunstable-options -Cpanic=immediate-abort'
        run: |
          cargo +nightly build --release -Z build-std=std,panic_abort -Z build-std-features= --target ${{ matrix.platform.target }} --manifest-path bench/tests/cpu_intensive/src-tauri/Cargo.toml
          cargo +nightly build --release -Z build-std=std,panic_abort -Z build-std-features= --target ${{ matrix.platform.target }} --manifest-path bench/tests/files_transfer/src-tauri/Cargo.toml
          cargo +nightly build --release -Z build-std=std,panic_abort -Z build-std-features= --target ${{ matrix.platform.target }} --manifest-path bench/tests/helloworld/src-tauri/Cargo.toml

      - name: run benchmarks
        run: ${{ matrix.platform.runner }}cargo run --manifest-path ./bench/Cargo.toml --bin run_benchmark

      - name: clone benchmarks_results
        if: github.repository == 'tauri-apps/tauri' && github.ref == 'refs/heads/dev'
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.ORG_TAURI_BOT_PAT }}
          path: gh-pages
          repository: tauri-apps/benchmark_results

      - name: push new benchmarks
        if: github.repository == 'tauri-apps/tauri' && github.ref == 'refs/heads/dev'
        run: |
          cargo run --manifest-path ./bench/Cargo.toml --bin build_benchmark_jsons
          cd gh-pages
          git pull
          git config user.name "tauri-bot"
          git config user.email "tauri-bot@tauri.app"
          git add .
          git commit --message "Update Tauri benchmarks"
          git push origin gh-pages

      - name: Print worker info
        # TODO: How to print this info on macOS and Windows
        if: contains(matrix.platform.target, 'gnu')
        run: |
          cat /proc/cpuinfo
          cat /proc/meminfo

The same workflow, on Latchkey

Estimated ~20% faster on cache hits, plus fewer wasted runs and a safer supply chain. Added and changed lines are highlighted.

# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
 
name: bench
 
on:
  push:
    branches:
      - dev
  workflow_dispatch:
  pull_request:
    paths:
      - '.github/workflows/bench.yml'
      - 'bench/**'
 
env:
  RUST_BACKTRACE: 1
  CARGO_PROFILE_DEV_DEBUG: 0 # This would add unnecessary bloat to the target folder, decreasing cache efficiency.
  LC_ALL: en_US.UTF-8 # This prevents strace from changing its number format to use commas.
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
  bench:
    timeout-minutes: 30
    strategy:
      fail-fast: false
      matrix:
        rust: [nightly]
        platform:
          - {
              target: x86_64-unknown-linux-gnu,
              os: ubuntu-latest,
              runner: 'xvfb-run --auto-servernum '
            }
          - { target: x86_64-pc-windows-msvc, os: windows-latest, runner: '' }
          - { target: aarch64-apple-darwin, os: macos-latest, runner: '' }
 
    runs-on: ${{ matrix.platform.os }}
 
    steps:
      - uses: actions/checkout@v6
 
      - name: install Rust ${{ matrix.rust }}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
          components: rust-src
          targets: ${{ matrix.platform.target }}
 
      - name: install webkit2gtk and xvfb (ubuntu only)
        if: contains(matrix.platform.target, 'gnu')
        run: |
          sudo apt-get update
          sudo apt-get install -y --no-install-recommends \
            webkit2gtk-4.1 libayatana-appindicator3-dev \
            xvfb \
            at-spi2-core
 
      - name: Setup python
        uses: actions/setup-python@v6
        with:
          cache: 'pip'
          python-version: '3.13'
 
      - name: install memory_profiler
        run: |
          python -m pip install --upgrade pip
          pip install memory_profiler
 
      - name: Install cargo-binstall
        uses: cargo-bins/cargo-binstall@v1.19.1
 
      - name: Install hyperfine
        run: cargo binstall hyperfine@1.20 --no-confirm
 
      - uses: Swatinem/rust-cache@v2
 
      - name: build benchmark binaries
        env:
          RUSTFLAGS: '-Zunstable-options -Cpanic=immediate-abort'
        run: |
          cargo +nightly build --release -Z build-std=std,panic_abort -Z build-std-features= --target ${{ matrix.platform.target }} --manifest-path bench/tests/cpu_intensive/src-tauri/Cargo.toml
          cargo +nightly build --release -Z build-std=std,panic_abort -Z build-std-features= --target ${{ matrix.platform.target }} --manifest-path bench/tests/files_transfer/src-tauri/Cargo.toml
          cargo +nightly build --release -Z build-std=std,panic_abort -Z build-std-features= --target ${{ matrix.platform.target }} --manifest-path bench/tests/helloworld/src-tauri/Cargo.toml
 
      - name: run benchmarks
        run: ${{ matrix.platform.runner }}cargo run --manifest-path ./bench/Cargo.toml --bin run_benchmark
 
      - name: clone benchmarks_results
        if: github.repository == 'tauri-apps/tauri' && github.ref == 'refs/heads/dev'
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.ORG_TAURI_BOT_PAT }}
          path: gh-pages
          repository: tauri-apps/benchmark_results
 
      - name: push new benchmarks
        if: github.repository == 'tauri-apps/tauri' && github.ref == 'refs/heads/dev'
        run: |
          cargo run --manifest-path ./bench/Cargo.toml --bin build_benchmark_jsons
          cd gh-pages
          git pull
          git config user.name "tauri-bot"
          git config user.email "tauri-bot@tauri.app"
          git add .
          git commit --message "Update Tauri benchmarks"
          git push origin gh-pages
 
      - name: Print worker info
        # TODO: How to print this info on macOS and Windows
        if: contains(matrix.platform.target, 'gnu')
        run: |
          cat /proc/cpuinfo
          cat /proc/meminfo
 

What changed

3 third-party actions are referenced by a movable tag. Pin them to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.

What Latchkey heals here

This workflow has steps that commonly fail on transient issues (network, registries, flaky browsers). On Latchkey managed runners they are detected, retried, and self-healed instead of failing your build:

This workflow runs 1 job (3 with the matrix expanded) per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow