Skip to content
Latchkey

Benchmarks workflow (preactjs/preact)

The Benchmarks workflow from preactjs/preact, explained and optimized by Latchkey.

A

CI health: A - excellent

Point runs-on at Latchkey and get job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.

Grade your own workflow free or run it on Latchkey →
Source: preactjs/preact.github/workflows/benchmarks.ymlLicense MITView source

What it does

This is the Benchmarks workflow from the preactjs/preact repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.

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

The workflow

workflow (.yml)
name: Benchmarks

on:
  workflow_dispatch:
  workflow_call:

jobs:
  prepare:
    name: Prepare environment
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - name: Download locally built preact package
        uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
        with:
          name: npm-package
      - run: mv preact.tgz preact-local.tgz
      - name: Download base package
        uses: andrewiggins/download-base-artifact@53ea06f723a523ade534145b7ccc72c179fb96dd # v3.0.0
        with:
          artifact: npm-package
          workflow: ci.yml
          required: true
      - run: mv preact.tgz preact-main.tgz
      - name: Upload locally build & base preact package
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: bench-environment
          path: |
            preact-local.tgz
            preact-main.tgz

  bench_todo:
    name: Bench todo
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: todo/todo
      timeout: 10

  bench_text_update:
    name: Bench text-update
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: text-update/text-update
      timeout: 10

  bench_many_updates:
    name: Bench many-updates
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: many-updates/many-updates
      timeout: 10

  bench_replace1k:
    name: Bench replace1k
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: table-app/replace1k

  bench_update10th1k:
    name: Bench 03_update10th1k_x16
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: table-app/update10th1k

  bench_create10k:
    name: Bench create10k
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: table-app/create10k

  bench_hydrate1k:
    name: Bench hydrate1k
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: table-app/hydrate1k

  bench_filter_list:
    name: Bench filter-list
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: filter-list/filter-list
      timeout: 10

The same workflow, on Latchkey

Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.

name: Benchmarks
 
on:
  workflow_dispatch:
  workflow_call:
 
jobs:
  prepare:
    name: Prepare environment
    runs-on: latchkey-small
    timeout-minutes: 5
    steps:
      - name: Download locally built preact package
        uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
        with:
          name: npm-package
      - run: mv preact.tgz preact-local.tgz
      - name: Download base package
        uses: andrewiggins/download-base-artifact@53ea06f723a523ade534145b7ccc72c179fb96dd # v3.0.0
        with:
          artifact: npm-package
          workflow: ci.yml
          required: true
      - run: mv preact.tgz preact-main.tgz
      - name: Upload locally build & base preact package
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: bench-environment
          path: |
            preact-local.tgz
            preact-main.tgz
 
  bench_todo:
    timeout-minutes: 30
    name: Bench todo
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: todo/todo
      timeout: 10
 
  bench_text_update:
    timeout-minutes: 30
    name: Bench text-update
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: text-update/text-update
      timeout: 10
 
  bench_many_updates:
    timeout-minutes: 30
    name: Bench many-updates
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: many-updates/many-updates
      timeout: 10
 
  bench_replace1k:
    timeout-minutes: 30
    name: Bench replace1k
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: table-app/replace1k
 
  bench_update10th1k:
    timeout-minutes: 30
    name: Bench 03_update10th1k_x16
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: table-app/update10th1k
 
  bench_create10k:
    timeout-minutes: 30
    name: Bench create10k
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: table-app/create10k
 
  bench_hydrate1k:
    timeout-minutes: 30
    name: Bench hydrate1k
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: table-app/hydrate1k
 
  bench_filter_list:
    timeout-minutes: 30
    name: Bench filter-list
    uses: ./.github/workflows/run-bench.yml
    needs: prepare
    with:
      benchmark: filter-list/filter-list
      timeout: 10

What changed

This workflow runs 9 jobs per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow