Comprehensive toolkit for validating, linting, and testing GitHub Actions workflow files, custom local actions, and public actions. Use this skill when working with GitHub Actions YAML files (.github/workflows/*.yml), validating workflow syntax, testing workflow execution with act, or debugging workflow issues.
Overall
score
93%
Does it follow best practices?
Validation for skill structure
This reference covers all GitHub-hosted runner types, including recent additions and deprecations.
runs-on: ubuntu-latest # Ubuntu 24.04 (default)
runs-on: ubuntu-24.04 # Ubuntu 24.04
runs-on: ubuntu-22.04 # Ubuntu 22.04
runs-on: ubuntu-20.04 # Ubuntu 20.04runs-on: windows-latest # Windows Server 2022 (default)
runs-on: windows-2025 # Windows Server 2025 (NEW)
runs-on: windows-2022 # Windows Server 2022
runs-on: windows-2019 # Windows Server 2019runs-on: macos-latest # macOS 15 (as of Aug 2025)
runs-on: macos-15 # macOS 15 Sequoia (Apple Silicon)
runs-on: macos-14 # macOS 14 Sonoma (Apple Silicon)
runs-on: macos-26 # macOS 26 (PREVIEW)| Label | Status | Architecture | Notes |
|---|---|---|---|
macos-latest | Active | ARM64 (Apple Silicon) | Points to macOS 15 |
macos-15 | Active | ARM64 (Apple Silicon) | M1/M2/M3 |
macos-14 | Active | ARM64 (Apple Silicon) | M1/M2 |
macos-26 | Preview | ARM64 (Apple Silicon) | Beta |
macos-13 | RETIRED | Intel x86_64 | Retired November 14, 2025 |
macos-12 | RETIRED | Intel x86_64 | Retired |
runs-on: macos-15-intel # Intel x86_64 (NEW but deprecated long-term)
runs-on: macos-14-large # Intel x86_64
runs-on: macos-15-large # Intel x86_64Important: Apple Silicon (ARM64) will be required after Fall 2027. Plan migration now.
jobs:
build:
# BAD - macos-13 retired Nov 14, 2025 (WILL FAIL)
# runs-on: macos-13
# GOOD - Use macos-15 or macos-latest
runs-on: macos-15
steps:
- uses: actions/checkout@v6
- run: ./build.shruns-on: ubuntu-latest-arm64 # Free for public repos
runs-on: ubuntu-24.04-arm64
runs-on: windows-latest-arm64 # ARM Windowsjobs:
build:
runs-on: ubuntu-latest-arm64 # Free for public repos
steps:
- uses: actions/checkout@v6
- name: Build on ARM64
run: |
uname -m # Should output: aarch64
./build.shruns-on: gpu-t4-4-core # NVIDIA Tesla T4jobs:
ml-training:
runs-on: gpu-t4-4-core
steps:
- uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install ML dependencies
run: |
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
- name: Train model
run: python train.py --use-gpu
- name: Run inference
run: python inference.pyruns-on: macos-latest-xlarge # macOS 15, M2 Pro
runs-on: macos-15-xlarge # macOS 15, M2 Pro
runs-on: macos-14-xlarge # macOS 14, M2 Projobs:
ios-build:
runs-on: macos-15-xlarge # M2 Pro with GPU acceleration
steps:
- uses: actions/checkout@v6
- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
- name: Build iOS app
run: |
xcodebuild -workspace App.xcworkspace \
-scheme Production \
-configuration Release \
-archivePath build/App.xcarchive \
archive
- name: Run GPU-accelerated tests
run: |
# GPU acceleration automatically available
xcodebuild test -scheme AppTests# Check these in your workflows:
- [ ] Using latest runner versions (macos-15, windows-2025, ubuntu-latest)
- [ ] Not using deprecated runners (macos-13)
- [ ] Architecture-appropriate runners (ARM64 vs Intel)
- [ ] GPU runners for ML workloads
- [ ] Cost-effective runner selection
- [ ] ARM64 compatibility tested (if using ARM64 runners)| Runner Type | Pricing | Best For |
|---|---|---|
| Standard (Linux/Windows) | Included | Most workloads |
| Standard (macOS) | Included | iOS/macOS builds |
| ARM64 (public repos) | Free | Multi-arch builds |
| ARM64 (private repos) | Enterprise | ARM-native builds |
| GPU (T4) | $0.07/min | ML/AI workloads |
| M2 Pro (xlarge) | $0.16/min | Heavy iOS builds |
jobs:
build:
strategy:
matrix:
include:
- runner: ubuntu-latest
arch: x64
- runner: ubuntu-latest-arm64
arch: arm64
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v6
- name: Build
run: |
echo "Building for ${{ matrix.arch }}"
./build.sh --arch ${{ matrix.arch }}
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: build-${{ matrix.arch }}
path: dist/When using self-hosted runners, configure actionlint to recognize custom labels:
# .github/actionlint.yaml
self-hosted-runner:
labels:
- my-custom-runner
- gpu-runner
- arm-runner
- on-premisesThis prevents actionlint from reporting unknown runner label errors.
Install with Tessl CLI
npx tessl i pantheon-ai/github-actions-validator@0.1.0