Octo + GitHub Actions

Run your CI workflows on your own hardware.
Trigger, monitor, and manage Octo jobs directly from GitHub.

Why Use Octo with GitHub Actions?

Octo transforms your own infrastructure into a powerful CI/CD execution layer, eliminating expensive cloud runner costs while maximizing your hardware investment.

💻

Efficient Infrastructure Utilization

Instead of paying per-minute for cloud runners, leverage your existing servers and hardware. Octo lets you run CI/CD jobs directly on your infrastructure, ensuring 100% utilization of your compute resources.

💰

Eliminate Cloud Runner Costs

GitHub Actions cloud runners are expensive and limited. With Octo, you eliminate per-minute billing and runner queuing. Your infrastructure becomes your CI/CD powerhouse — fully under your control.

Unlimited Parallelism

Scale your CI/CD pipelines without hitting runner limits or paying premium rates. Run hundreds of parallel jobs across your infrastructure — limited only by your hardware.

🔒

Full Control & Security

Keep your code and data on your own infrastructure. No data leaving your network, no vendor lock-in, complete transparency in how your CI/CD pipeline executes.

The Cost Advantage

GitHub Actions Cloud Runners: $0.008 per minute per runner (can add up fast)

Octo on Your Hardware: Fixed infrastructure cost, unlimited CI/CD runs

For teams running hundreds of CI/CD jobs monthly, Octo can save thousands in runner costs.

One-click Runs

Trigger Octo jobs directly from a GitHub workflow with a single command.

Fully Utilize Your Infrastructure

Unleash the full potential of your infrastructure — no cloud limits, no wasted compute.

Parallel Execution

Run multiple Octo jobs in parallel to dramatically speed up CI pipelines.

Overview — Integrating Octo into GitHub Workflows

Octo seamlessly integrates with GitHub Actions, allowing you to run your CI/CD workflows on your own hardware. You can add more runners if you need additional parallelism or want to distribute workloads across different environments. It's also possible to set up Octo in a cluster configuration to scale out execution even further.

Octo + GitHub Integration Diagram

Example: Octo + Github setup with multiple parallel runners.

Octo Cluster Workflow Diagram

Example: Octo + Github cluster setup with multiple parallel runners.

How Octo supercharges your CI/CD pipeline

Octo seamlessly integrates with GitHub Actions, transforming your own infrastructure into a high-performance execution layer for fast, efficient, and fully controlled automation.

⚙️

Parallel Execution

When triggered manually, the Smoketest Workflow runs two regional jobs — one for Europe and one for China — in parallel, directly on your self-hosted Windows Octo runner.

🚀

Use Your Own Power

Skip cloud queues and runner limits — Octo connects GitHub Actions to your real computing power. Each region runs independently using its own secure token and isolated environment.

📊

Instant Results

Once both runs are complete, Octo automatically uploads all test reports back to GitHub, giving you instant, centralized insights — right where you work.

Watch how to use Github with Octo

Example GitHub Actions Workflow

Below is a complete example of how Octo can run two regions in parallel within a single CI job.

📄 View Full Workflow Example
name: Smoketest Workflow

on:
  workflow_dispatch:
    inputs:
      region:
        description: 'Region to test (optional, default: all)'
        required: false
        default: 'all'

jobs:
  test_parallel:
    runs-on: [self-hosted, windows, x64, octo]

    env:
      TOKEN_EU: token1
      TOKEN_CHINA: token2

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Run both regions in parallel
        shell: powershell
        run: |
          chcp 65001 > $null
          $repoPath = (Get-Location).Path
          Write-Host "Repo path: $repoPath"

          # EU Run
          Start-Job -Name EU -ArgumentList $repoPath -ScriptBlock {
              param($p)
              Set-Location $p
              Write-Host ">>> EU run starting in $p"
              $env:TOKEN = "token1"
              octo login --token $env:TOKEN --server http://127.0.0.1:5000
              octo run main.py
              Copy-Item report.html "report_EU.html" -Force
              Write-Host ">>> EU done"
          }

          # China Run
          Start-Job -Name China -ArgumentList $repoPath -ScriptBlock {
              param($p)
              Set-Location $p
              Write-Host ">>> China run starting in $p"
              $env:TOKEN = "token2"
              octo login --token $env:TOKEN --server http://127.0.0.1:5000
              octo run main.py
              Copy-Item report.html "report_China.html" -Force
              Write-Host ">>> China done"
          }

          Write-Host "Waiting for both runs..."
          Get-Job | Wait-Job
          Get-Job | Receive-Job
          Write-Host "All done!"

      - name: Upload both reports
        uses: actions/upload-artifact@v4
        with:
          name: smoketest-reports
          path: |
            report_EU.html
            report_China.html