Skip to content
Latchkey

docs workflow (holoviz/holoviews)

The docs workflow from holoviz/holoviews, 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: holoviz/holoviews.github/workflows/docs.yamlLicense BSD-3-ClauseView source

What it does

This is the docs workflow from the holoviz/holoviews repository, a real project running GitHub Actions. It is shown here with attribution under its BSD-3-Clause license.

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

The workflow

workflow (.yml)
name: docs
on:
  push:
    tags:
      - "v[0-9]+.[0-9]+.[0-9]+"
      - "v[0-9]+.[0-9]+.[0-9]+a[0-9]+"
      - "v[0-9]+.[0-9]+.[0-9]+b[0-9]+"
      - "v[0-9]+.[0-9]+.[0-9]+rc[0-9]+"
  workflow_dispatch:
    inputs:
      target:
        description: "Site to build and deploy, or dry-run"
        type: choice
        options:
          - dev
          - main
          - dryrun
        required: true
        default: dryrun
  schedule:
    - cron: "0 14 * * SUN"

permissions: {}

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  pixi_lock:
    name: Pixi lock
    runs-on: ubuntu-latest
    steps:
      - uses: holoviz-dev/holoviz_tasks/pixi-lock@1a9884850782b0b80ba2e91b573e7d63d9d3c3dc # v1.0.1

  docs_build:
    name: Build Documentation
    needs: [pixi_lock]
    runs-on: "macos-latest"
    timeout-minutes: 180
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - uses: holoviz-dev/holoviz_tasks/pixi-install@1a9884850782b0b80ba2e91b573e7d63d9d3c3dc # v1.0.1
        with:
          environments: docs
      - name: Build documentation
        run: pixi run -e docs docs-build
      - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        if: always()
        with:
          name: docs
          if-no-files-found: error
          path: builtdocs

  docs_publish:
    name: Publish Documentation
    runs-on: "ubuntu-latest"
    needs: [docs_build]
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
    steps:
      - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
        with:
          name: docs
          path: builtdocs/
      - name: upload dev
        if: |
          (github.event_name == 'workflow_dispatch' && github.event.inputs.target == 'dev') ||
          (github.event_name == 'push' && (contains(github.ref_name, 'a') || contains(github.ref_name, 'b') || contains(github.ref_name, 'rc')))
        run: |
          aws s3 sync --delete ./builtdocs s3://dev.holoviews.org/
          aws cloudfront create-invalidation --distribution-id E3UIBUSHJOO6WO --paths "/*"
      - name: upload main
        if: |
          (github.event_name == 'workflow_dispatch' && github.event.inputs.target == 'main') ||
          (github.event_name == 'push' && !(contains(github.ref_name, 'a') || contains(github.ref_name, 'b') || contains(github.ref_name, 'rc')))
        run: |
          aws s3 sync --delete ./builtdocs s3://holoviews.org/
          aws cloudfront create-invalidation --distribution-id E1UJPEXJIGBZWN --paths "/*"

The same workflow, on Latchkey

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

name: docs
on:
  push:
    tags:
      - "v[0-9]+.[0-9]+.[0-9]+"
      - "v[0-9]+.[0-9]+.[0-9]+a[0-9]+"
      - "v[0-9]+.[0-9]+.[0-9]+b[0-9]+"
      - "v[0-9]+.[0-9]+.[0-9]+rc[0-9]+"
  workflow_dispatch:
    inputs:
      target:
        description: "Site to build and deploy, or dry-run"
        type: choice
        options:
          - dev
          - main
          - dryrun
        required: true
        default: dryrun
  schedule:
    - cron: "0 14 * * SUN"
 
permissions: {}
 
concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true
 
jobs:
  pixi_lock:
    timeout-minutes: 30
    name: Pixi lock
    runs-on: latchkey-small
    steps:
      - uses: holoviz-dev/holoviz_tasks/pixi-lock@1a9884850782b0b80ba2e91b573e7d63d9d3c3dc # v1.0.1
 
  docs_build:
    name: Build Documentation
    needs: [pixi_lock]
    runs-on: "macos-latest"
    timeout-minutes: 180
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - uses: holoviz-dev/holoviz_tasks/pixi-install@1a9884850782b0b80ba2e91b573e7d63d9d3c3dc # v1.0.1
        with:
          environments: docs
      - name: Build documentation
        run: pixi run -e docs docs-build
      - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        if: always()
        with:
          name: docs
          if-no-files-found: error
          path: builtdocs
 
  docs_publish:
    timeout-minutes: 30
    name: Publish Documentation
    runs-on: "ubuntu-latest"
    needs: [docs_build]
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
    steps:
      - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
        with:
          name: docs
          path: builtdocs/
      - name: upload dev
        if: |
          (github.event_name == 'workflow_dispatch' && github.event.inputs.target == 'dev') ||
          (github.event_name == 'push' && (contains(github.ref_name, 'a') || contains(github.ref_name, 'b') || contains(github.ref_name, 'rc')))
        run: |
          aws s3 sync --delete ./builtdocs s3://dev.holoviews.org/
          aws cloudfront create-invalidation --distribution-id E3UIBUSHJOO6WO --paths "/*"
      - name: upload main
        if: |
          (github.event_name == 'workflow_dispatch' && github.event.inputs.target == 'main') ||
          (github.event_name == 'push' && !(contains(github.ref_name, 'a') || contains(github.ref_name, 'b') || contains(github.ref_name, 'rc')))
        run: |
          aws s3 sync --delete ./builtdocs s3://holoviews.org/
          aws cloudfront create-invalidation --distribution-id E1UJPEXJIGBZWN --paths "/*"
 

What changed

This workflow runs 3 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