Skip to content
Latchkey

Functionality test for helm chart workflow (vllm-project/production-stack)

The Functionality test for helm chart workflow from vllm-project/production-stack, explained and optimized by Latchkey.

A

CI health: A - excellent

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: vllm-project/production-stack.github/workflows/functionality-helm-chart.ymlLicense Apache-2.0View source

What it does

This is the Functionality test for helm chart workflow from the vllm-project/production-stack 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)
name: Functionality test for helm chart
run-name: ${{ github.actor }} is testing out helm chart functions πŸš€

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

on:
  push:
    branches:
      - main
    paths:
      - '.github/**'
      - '**.py'
      - 'pyproject.toml'
      - 'helm/**'
  pull_request:
    paths:
      - '.github/**'
      - '**.py'
      - 'pyproject.toml'
      - 'helm/**'
  merge_group:
jobs:
  Secure-Minimal-Example:
    runs-on: self-hosted
    steps:
      - run: echo "πŸŽ‰ The job was automatically triggered by a ${{ github.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
      - run: echo "πŸ”Ž The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
      - name: Check out repository code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - run: echo "πŸ’‘ The ${{ github.repository }} repository has been cloned to the runner."
      - run: echo "πŸ–₯️ The workflow is now ready to test your code on the runner."
      - name: Helm uninstall
        run: |
          releases=$(helm list -q)

          if [ -n "$releases" ]; then
            echo "Found releases: $releases"
            for r in $releases; do
              echo "Uninstalling $r..."
              helm uninstall "$r"
            done
          else
            echo "No Helm releases found; skipping uninstall."
          fi

          # Wait until no pods remain
          echo "Waiting for all pods to terminate..."
          while kubectl get pods --no-headers 2>/dev/null | grep -q .; do
            sleep 5
          done
          echo "All pods have terminated."
      - name: Build Helm dependencies
        run: |
          helm dependency build helm/
      - name: Deploy via helm charts
        env:
          DOCKER_BUILDKIT: 1
        run: |
          cd ${{ github.workspace }}
          kubectl config use-context minikube
          sudo sysctl fs.protected_regular=0
          eval "$(minikube docker-env)"
          docker build --build-arg INSTALL_OPTIONAL_DEP=default -t git-act-router:ci -f docker/Dockerfile .
          helm install vllm ./helm -f .github/values-05-secure-vllm.yaml
      - name: Validate the installation and send query to the stack
        run: |
          bash .github/port-forward.sh curl-05-secure-vllm
        timeout-minutes: 3
      - name: Archive functionality results
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        if: always()
        with:
          name: output-05-secure-vllm
          path: |
            output-05-secure-vllm/
      - name: Helm uninstall
        run: |
            helm uninstall vllm
            sudo docker image prune -f
        if: always()
      - run: echo "🍏 This job's status is ${{ job.status }}."

  Two-Pods-Minimal-Example:
    runs-on: self-hosted
    needs: Secure-Minimal-Example
    steps:
      - name: Helm uninstall
        run: |
          releases=$(helm list -q)

          if [ -n "$releases" ]; then
            echo "Found releases: $releases"
            for r in $releases; do
              echo "Uninstalling $r..."
              helm uninstall "$r"
            done
          else
            echo "No Helm releases found; skipping uninstall."
          fi

          # Wait until no pods remain
          echo "Waiting for all pods to terminate..."
          while kubectl get pods --no-headers 2>/dev/null | grep -q .; do
            sleep 5
          done
          echo "All pods have terminated."
      - name: Build Helm dependencies
        run: |
          helm dependency build helm/
      - name: Deploy via helm charts
        run: |
          cd ${{ github.workspace }}
          helm install vllm ./helm -f .github/values-01-2pods-minimal-example.yaml
      - name: Validate the installation and send query to the stack
        run: |
          bash .github/port-forward.sh curl-02-two-pods
        timeout-minutes: 3
      - name: Archive functionality results
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        if: always()
        with:
          name: output-02-two-pods
          path: |
            output-02-two-pods/
      - name: Helm uninstall
        run: |
          helm uninstall vllm
        if: always()
      - run: echo "🍏 This job's status is ${{ job.status }}."

  Multiple-Models:
    runs-on: self-hosted
    needs: Two-Pods-Minimal-Example
    steps:
      - name: Helm uninstall
        run: |
          releases=$(helm list -q)

          if [ -n "$releases" ]; then
            echo "Found releases: $releases"
            for r in $releases; do
              echo "Uninstalling $r..."
              helm uninstall "$r"
            done
          else
            echo "No Helm releases found; skipping uninstall."
          fi

          # Wait until no pods remain
          echo "Waiting for all pods to terminate..."
          while kubectl get pods --no-headers 2>/dev/null | grep -q .; do
            sleep 5
          done
          echo "All pods have terminated."
      - name: Build Helm dependencies
        run: |
          helm dependency build helm/
      - name: Deploy via helm charts
        run: |
          helm install vllm ./helm -f .github/values-04-multiple-models.yaml
      - name: Validate the installation and send query to the stack
        run: |
          bash .github/port-forward.sh curl-04-multiple-models
        timeout-minutes: 5
      - name: Archive functionality results
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        if: always()
        with:
          name: output-04-multiple-models
          path: |
            output-04-multiple-models/
      - name: Helm uninstall
        run: |
            helm uninstall vllm
        if: always()
      - run: echo "🍏 This job's status is ${{ job.status }}."

  Minimal-Example-With-Monitoring:
    runs-on: self-hosted
    needs: Secure-Minimal-Example
    steps:
      - run: echo "πŸŽ‰ The job was automatically triggered by a ${{ github.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
      - run: echo "πŸ”Ž The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
      - name: Check out repository code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - run: echo "πŸ’‘ The ${{ github.repository }} repository has been cloned to the runner."
      - run: echo "πŸ–₯️ The workflow is now ready to test your code on the runner."
      - name: Helm uninstall
        run: |
          releases=$(helm list -q)

          if [ -n "$releases" ]; then
            echo "Found releases: $releases"
            for r in $releases; do
              echo "Uninstalling $r..."
              helm uninstall "$r"
            done
          else
            echo "No Helm releases found; skipping uninstall."
          fi

          # Wait until no pods remain
          echo "Waiting for all pods to terminate..."
          while kubectl get pods --no-headers 2>/dev/null | grep -q .; do
            sleep 5
          done
          echo "All pods have terminated."
      - name: Build Helm dependencies
        run: |
          helm dependency build helm/
      - name: Deploy via helm charts
        env:
          DOCKER_BUILDKIT: 1
        run: |
          cd ${{ github.workspace }}
          kubectl config use-context minikube
          sudo sysctl fs.protected_regular=0
          eval "$(minikube docker-env)"
          docker build --build-arg INSTALL_OPTIONAL_DEP=default -t git-act-router:ci -f docker/Dockerfile .
          helm install vllm ./helm -f .github/values-11-monitoring.yaml
      - name: Validate the installation and send query to the stack
        run: |
          bash .github/port-forward.sh curl-06-monitoring
        timeout-minutes: 3
      - name: Archive functionality results
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        if: always()
        with:
          name: curl-06-monitoring
          path: |
            output-06-monitoring/
      - name: Helm uninstall
        run: |
            helm uninstall vllm
            sudo docker image prune -f
        if: always()
      - run: echo "🍏 This job's status is ${{ job.status }}."

The same workflow, on Latchkey

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

name: Functionality test for helm chart
run-name: ${{ github.actor }} is testing out helm chart functions πŸš€
 
concurrency:
  group: ${{ github.ref }}
  cancel-in-progress: true
 
on:
  push:
    branches:
      - main
    paths:
      - '.github/**'
      - '**.py'
      - 'pyproject.toml'
      - 'helm/**'
  pull_request:
    paths:
      - '.github/**'
      - '**.py'
      - 'pyproject.toml'
      - 'helm/**'
  merge_group:
jobs:
  Secure-Minimal-Example:
    timeout-minutes: 30
    runs-on: self-hosted
    steps:
      - run: echo "πŸŽ‰ The job was automatically triggered by a ${{ github.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
      - run: echo "πŸ”Ž The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
      - name: Check out repository code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - run: echo "πŸ’‘ The ${{ github.repository }} repository has been cloned to the runner."
      - run: echo "πŸ–₯️ The workflow is now ready to test your code on the runner."
      - name: Helm uninstall
        run: |
          releases=$(helm list -q)
 
          if [ -n "$releases" ]; then
            echo "Found releases: $releases"
            for r in $releases; do
              echo "Uninstalling $r..."
              helm uninstall "$r"
            done
          else
            echo "No Helm releases found; skipping uninstall."
          fi
 
          # Wait until no pods remain
          echo "Waiting for all pods to terminate..."
          while kubectl get pods --no-headers 2>/dev/null | grep -q .; do
            sleep 5
          done
          echo "All pods have terminated."
      - name: Build Helm dependencies
        run: |
          helm dependency build helm/
      - name: Deploy via helm charts
        env:
          DOCKER_BUILDKIT: 1
        run: |
          cd ${{ github.workspace }}
          kubectl config use-context minikube
          sudo sysctl fs.protected_regular=0
          eval "$(minikube docker-env)"
          docker build --build-arg INSTALL_OPTIONAL_DEP=default -t git-act-router:ci -f docker/Dockerfile .
          helm install vllm ./helm -f .github/values-05-secure-vllm.yaml
      - name: Validate the installation and send query to the stack
        run: |
          bash .github/port-forward.sh curl-05-secure-vllm
        timeout-minutes: 3
      - name: Archive functionality results
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        if: always()
        with:
          name: output-05-secure-vllm
          path: |
            output-05-secure-vllm/
      - name: Helm uninstall
        run: |
            helm uninstall vllm
            sudo docker image prune -f
        if: always()
      - run: echo "🍏 This job's status is ${{ job.status }}."
 
  Two-Pods-Minimal-Example:
    timeout-minutes: 30
    runs-on: self-hosted
    needs: Secure-Minimal-Example
    steps:
      - name: Helm uninstall
        run: |
          releases=$(helm list -q)
 
          if [ -n "$releases" ]; then
            echo "Found releases: $releases"
            for r in $releases; do
              echo "Uninstalling $r..."
              helm uninstall "$r"
            done
          else
            echo "No Helm releases found; skipping uninstall."
          fi
 
          # Wait until no pods remain
          echo "Waiting for all pods to terminate..."
          while kubectl get pods --no-headers 2>/dev/null | grep -q .; do
            sleep 5
          done
          echo "All pods have terminated."
      - name: Build Helm dependencies
        run: |
          helm dependency build helm/
      - name: Deploy via helm charts
        run: |
          cd ${{ github.workspace }}
          helm install vllm ./helm -f .github/values-01-2pods-minimal-example.yaml
      - name: Validate the installation and send query to the stack
        run: |
          bash .github/port-forward.sh curl-02-two-pods
        timeout-minutes: 3
      - name: Archive functionality results
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        if: always()
        with:
          name: output-02-two-pods
          path: |
            output-02-two-pods/
      - name: Helm uninstall
        run: |
          helm uninstall vllm
        if: always()
      - run: echo "🍏 This job's status is ${{ job.status }}."
 
  Multiple-Models:
    timeout-minutes: 30
    runs-on: self-hosted
    needs: Two-Pods-Minimal-Example
    steps:
      - name: Helm uninstall
        run: |
          releases=$(helm list -q)
 
          if [ -n "$releases" ]; then
            echo "Found releases: $releases"
            for r in $releases; do
              echo "Uninstalling $r..."
              helm uninstall "$r"
            done
          else
            echo "No Helm releases found; skipping uninstall."
          fi
 
          # Wait until no pods remain
          echo "Waiting for all pods to terminate..."
          while kubectl get pods --no-headers 2>/dev/null | grep -q .; do
            sleep 5
          done
          echo "All pods have terminated."
      - name: Build Helm dependencies
        run: |
          helm dependency build helm/
      - name: Deploy via helm charts
        run: |
          helm install vllm ./helm -f .github/values-04-multiple-models.yaml
      - name: Validate the installation and send query to the stack
        run: |
          bash .github/port-forward.sh curl-04-multiple-models
        timeout-minutes: 5
      - name: Archive functionality results
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        if: always()
        with:
          name: output-04-multiple-models
          path: |
            output-04-multiple-models/
      - name: Helm uninstall
        run: |
            helm uninstall vllm
        if: always()
      - run: echo "🍏 This job's status is ${{ job.status }}."
 
  Minimal-Example-With-Monitoring:
    timeout-minutes: 30
    runs-on: self-hosted
    needs: Secure-Minimal-Example
    steps:
      - run: echo "πŸŽ‰ The job was automatically triggered by a ${{ github.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
      - run: echo "πŸ”Ž The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
      - name: Check out repository code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - run: echo "πŸ’‘ The ${{ github.repository }} repository has been cloned to the runner."
      - run: echo "πŸ–₯️ The workflow is now ready to test your code on the runner."
      - name: Helm uninstall
        run: |
          releases=$(helm list -q)
 
          if [ -n "$releases" ]; then
            echo "Found releases: $releases"
            for r in $releases; do
              echo "Uninstalling $r..."
              helm uninstall "$r"
            done
          else
            echo "No Helm releases found; skipping uninstall."
          fi
 
          # Wait until no pods remain
          echo "Waiting for all pods to terminate..."
          while kubectl get pods --no-headers 2>/dev/null | grep -q .; do
            sleep 5
          done
          echo "All pods have terminated."
      - name: Build Helm dependencies
        run: |
          helm dependency build helm/
      - name: Deploy via helm charts
        env:
          DOCKER_BUILDKIT: 1
        run: |
          cd ${{ github.workspace }}
          kubectl config use-context minikube
          sudo sysctl fs.protected_regular=0
          eval "$(minikube docker-env)"
          docker build --build-arg INSTALL_OPTIONAL_DEP=default -t git-act-router:ci -f docker/Dockerfile .
          helm install vllm ./helm -f .github/values-11-monitoring.yaml
      - name: Validate the installation and send query to the stack
        run: |
          bash .github/port-forward.sh curl-06-monitoring
        timeout-minutes: 3
      - name: Archive functionality results
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        if: always()
        with:
          name: curl-06-monitoring
          path: |
            output-06-monitoring/
      - name: Helm uninstall
        run: |
            helm uninstall vllm
            sudo docker image prune -f
        if: always()
      - run: echo "🍏 This job's status is ${{ job.status }}."
 

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 4 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