Skip to content
Latchkey

browsers-full workflow (qunitjs/qunit)

The browsers-full workflow from qunitjs/qunit, explained and optimized by Latchkey.

D

CI health: D - needs work

Point runs-on at Latchkey and get caching, run de-duplication, 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: qunitjs/qunit.github/workflows/browsers-full.yamlLicense MITView source

What it does

This is the browsers-full workflow from the qunitjs/qunit 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: browsers-full
on:
  # Once a week on Thursday at 02:15
  schedule:
    - cron: '15 2 * * 4'
  # Or manually
  workflow_dispatch:
  # Or when developing this workflow
  push:
    paths:
      - .github/workflows/browsers-full.yaml
      - build/browserstack-full.json

jobs:
  run:
    name: BrowserStack
    if: ${{ github.repository == 'qunitjs/qunit' }} # skip on forks, needs secret
    runs-on: ubuntu-latest
    env:
      PUPPETEER_CACHE_DIR: "${{ github.workspace }}/.puppeteer_download"
    steps:
      - uses: actions/checkout@v6

      - uses: actions/cache@v5
        with:
          path: |
            ~/.npm
            ${{ github.workspace }}/.puppeteer_download
          key: ${{ runner.os }}-${{ hashFiles('**/package.json') }}

      - name: Use Node.js 18
        uses: actions/setup-node@v6
        with:
          node-version: 18.x

      - name: Prepare
        run: |
          npm install
          npm run build

      - name: Tests
        run: npm run browserstack
        env:
          BROWSERSTACK_JSON: build/browserstack-full.json
          BROWSERSTACK_USERNAME: "${{ secrets.BROWSERSTACK_USERNAME }}"
          BROWSERSTACK_KEY: "${{ secrets.BROWSERSTACK_KEY }}"
          # Set "project" metadata
          TRAVIS_REPO_SLUG: "${{ github.repository }} ${{ github.event_name }}"
          # Set "commit" metadata
          TRAVIS_COMMIT: "full ${{ github.ref }} ${{ github.sha }}"
          TUNNEL_ID: "${{ github.event_name }}-full-${{ github.sha }}"

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.

name: browsers-full
on:
  # Once a week on Thursday at 02:15
  schedule:
    - cron: '15 2 * * 4'
  # Or manually
  workflow_dispatch:
  # Or when developing this workflow
  push:
    paths:
      - .github/workflows/browsers-full.yaml
      - build/browserstack-full.json
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
  run:
    timeout-minutes: 30
    name: BrowserStack
    if: ${{ github.repository == 'qunitjs/qunit' }} # skip on forks, needs secret
    runs-on: latchkey-small
    env:
      PUPPETEER_CACHE_DIR: "${{ github.workspace }}/.puppeteer_download"
    steps:
      - uses: actions/checkout@v6
 
      - uses: actions/cache@v5
        with:
          path: |
            ~/.npm
            ${{ github.workspace }}/.puppeteer_download
          key: ${{ runner.os }}-${{ hashFiles('**/package.json') }}
 
      - name: Use Node.js 18
        uses: actions/setup-node@v6
        with:
          cache: 'npm'
          node-version: 18.x
 
      - name: Prepare
        run: |
          npm install
          npm run build
 
      - name: Tests
        run: npm run browserstack
        env:
          BROWSERSTACK_JSON: build/browserstack-full.json
          BROWSERSTACK_USERNAME: "${{ secrets.BROWSERSTACK_USERNAME }}"
          BROWSERSTACK_KEY: "${{ secrets.BROWSERSTACK_KEY }}"
          # Set "project" metadata
          TRAVIS_REPO_SLUG: "${{ github.repository }} ${{ github.event_name }}"
          # Set "commit" metadata
          TRAVIS_COMMIT: "full ${{ github.ref }} ${{ github.sha }}"
          TUNNEL_ID: "${{ github.event_name }}-full-${{ github.sha }}"
 

What changed

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 per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow