Skip to content
Latchkey

GitHub Pages workflow (qunitjs/qunit)

The GitHub Pages workflow from qunitjs/qunit, explained and optimized by Latchkey.

C

CI health: C - fair

Point runs-on at Latchkey and get run de-duplication, job timeouts, SHA-pinned actions, 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/github-pages.yamlLicense MITView source

What it does

This is the GitHub Pages 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: GitHub Pages
on:
  push:
    branches:
      - main

jobs:
  deploy:
    name: Deploy
    if: ${{ github.repository == 'qunitjs/qunit' }} # skip noisy cron on forks
    runs-on: ubuntu-22.04
    env:
      DEPLOY_DIR: docs/_site/
      DEPLOY_BRANCH: gh-pages
    steps:
      - uses: actions/checkout@v6

      - name: Prepare branch
        run: |
          mkdir "${DEPLOY_DIR}"
          cd "${DEPLOY_DIR}"
          # Clone and checkout existing branch, or initialise with a new and empty branch
          git clone --depth 5 --branch "${DEPLOY_BRANCH}" "https://github.com/${GITHUB_REPOSITORY}.git" . || git init -b "${DEPLOY_BRANCH}"

      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.2'
          bundler-cache: true
          # If your site is in a subdirectory
          working-directory: ./docs/

      - name: Jekyll build
        # If your site is in a subdirectory
        working-directory: ./docs/
        env:
          JEKYLL_ENV: production
        run: bundle exec jekyll build

      - name: Push to branch
        # Inspired by https://github.com/helaili/jekyll-action/blob/2.2.0/entrypoint.sh
        env:
          GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
        run: |
          cd "${DEPLOY_DIR}"
          touch .nojekyll
          git config user.name "${GITHUB_ACTOR}" && \
          git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" && \
          git add . && \
          git commit --allow-empty -m "Build commit ${GITHUB_SHA}" && \
          git push "https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" "HEAD:${DEPLOY_BRANCH}"

The same workflow, on Latchkey

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

name: GitHub Pages
on:
  push:
    branches:
      - main
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
  deploy:
    timeout-minutes: 30
    name: Deploy
    if: ${{ github.repository == 'qunitjs/qunit' }} # skip noisy cron on forks
    runs-on: latchkey-small
    env:
      DEPLOY_DIR: docs/_site/
      DEPLOY_BRANCH: gh-pages
    steps:
      - uses: actions/checkout@v6
 
      - name: Prepare branch
        run: |
          mkdir "${DEPLOY_DIR}"
          cd "${DEPLOY_DIR}"
          # Clone and checkout existing branch, or initialise with a new and empty branch
          git clone --depth 5 --branch "${DEPLOY_BRANCH}" "https://github.com/${GITHUB_REPOSITORY}.git" . || git init -b "${DEPLOY_BRANCH}"
 
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.2'
          bundler-cache: true
          # If your site is in a subdirectory
          working-directory: ./docs/
 
      - name: Jekyll build
        # If your site is in a subdirectory
        working-directory: ./docs/
        env:
          JEKYLL_ENV: production
        run: bundle exec jekyll build
 
      - name: Push to branch
        # Inspired by https://github.com/helaili/jekyll-action/blob/2.2.0/entrypoint.sh
        env:
          GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
        run: |
          cd "${DEPLOY_DIR}"
          touch .nojekyll
          git config user.name "${GITHUB_ACTOR}" && \
          git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" && \
          git add . && \
          git commit --allow-empty -m "Build commit ${GITHUB_SHA}" && \
          git push "https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" "HEAD:${DEPLOY_BRANCH}"
 

What changed

1 third-party action is referenced by a movable tag. Pin it to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.

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