From f5817efd8408eac23fe1131b3c06eb6dfbca22fb Mon Sep 17 00:00:00 2001 From: Jacob Repp Date: Thu, 23 Oct 2025 20:39:55 -0700 Subject: [PATCH] Convert CI and release workflows to self-hosted runners MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User request: "convert ci and release to use a self managed runner" Migrated from GitHub-hosted to self-managed runners: - ci.yml: All 17 ubuntu-latest instances → self-hosted - release.yml: All ubuntu-latest instances → self-hosted - Preserved macos-latest for macOS builds (conservative approach) Benefits: - Cost optimization for self-managed infrastructure - Better control over build environment and caching - Consistent runner configuration across workflows Note: macOS runners remain on GitHub-hosted (macos-latest) as self-hosted macOS runners require additional setup. Co-Authored-By: Claude --- .github/workflows/ci.yml | 34 +++++++++++++++++----------------- .github/workflows/release.yml | 16 ++++++++-------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e99473f46..804b4f6f9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,7 @@ jobs: # Job 0: Generate CI matrix (selective execution - RFC-045) generate-matrix: name: Generate CI Matrix - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 5 outputs: matrix: ${{ steps.matrix.outputs.matrix }} @@ -119,7 +119,7 @@ jobs: # Job 1: Generate protobuf code once (new) generate-proto: name: Generate Protobuf Code - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 10 steps: @@ -186,7 +186,7 @@ jobs: # Job 1: Lint Rust code lint-rust: name: Lint Rust - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 10 steps: @@ -225,7 +225,7 @@ jobs: # Job 2: Lint Python code lint-python: name: Lint Python - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 5 steps: @@ -251,7 +251,7 @@ jobs: # Job 2b: Lint Protobuf files lint-proto: name: Lint Protobuf - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 5 steps: @@ -280,7 +280,7 @@ jobs: # Job 2c: Lint GitHub Actions workflows lint-github-actions: name: Lint GitHub Actions - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 5 steps: @@ -297,7 +297,7 @@ jobs: # Job 3: Lint Go code (parallel by category) lint-go: name: Lint Go (${{ matrix.category }}) - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 15 needs: generate-proto @@ -376,7 +376,7 @@ jobs: # Build Jobs (run early in parallel after linting passes) build-rust: name: Build Rust Components - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 10 needs: lint-rust @@ -422,7 +422,7 @@ jobs: build-go: name: Build Go Components - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 15 needs: [generate-proto, lint-go] @@ -488,7 +488,7 @@ jobs: # Job 2: Test Rust proxy test-proxy: name: Test Rust Proxy - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 15 steps: @@ -544,7 +544,7 @@ jobs: # Job 3: Test Go drivers and patterns (including acceptance tests) test-patterns: name: Test ${{ matrix.name }} - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 15 needs: [generate-matrix, generate-proto] if: needs.generate-matrix.outputs.run_full == 'true' || needs.generate-matrix.outputs.has_test == 'true' @@ -667,7 +667,7 @@ jobs: # Job 4: Integration tests test-integration: name: Integration Tests - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 10 needs: [generate-matrix, generate-proto] if: needs.generate-matrix.outputs.run_full == 'true' || needs.generate-matrix.outputs.has_test == 'true' @@ -715,7 +715,7 @@ jobs: # Job 6: Validate documentation validate-docs: name: Validate Documentation - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 10 steps: @@ -750,7 +750,7 @@ jobs: # Unified build status (skipped, parallel builds above replace this) build: name: Build All Components - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 5 needs: [build-rust, build-go, test-proxy, test-patterns, test-integration] if: always() @@ -771,7 +771,7 @@ jobs: # Job 8: Coverage summary coverage-summary: name: Coverage Summary - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 5 needs: [test-proxy, test-patterns, test-integration] if: always() @@ -803,7 +803,7 @@ jobs: # Job 9: Upload to Codecov codecov-upload: name: Upload Coverage to Codecov - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 10 needs: [test-proxy, test-patterns, test-integration] if: always() @@ -844,7 +844,7 @@ jobs: # Job 10: CI status check (required for merge) ci-status: name: CI Status Check - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 5 needs: [lint-rust, lint-python, lint-proto, lint-github-actions, lint-go, test-proxy, test-patterns, test-integration, validate-docs, build] if: always() diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 40aa3629f..b4c794763 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,7 +36,7 @@ jobs: # ============================================================================ generate-proto: name: Generate Protobuf Code - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 10 steps: @@ -99,7 +99,7 @@ jobs: os: [linux, darwin, windows] arch: [amd64, arm64] runner: - - ubuntu-latest + - self-hosted exclude: # Windows arm64 cross-compilation is tricky - os: windows @@ -247,11 +247,11 @@ jobs: matrix: include: - target: x86_64-unknown-linux-gnu - runner: ubuntu-latest + runner: self-hosted os: linux arch: amd64 - target: aarch64-unknown-linux-gnu - runner: ubuntu-latest + runner: self-hosted os: linux arch: arm64 - target: x86_64-apple-darwin @@ -379,7 +379,7 @@ jobs: # ============================================================================ build-python-client: name: Build Python Client Package - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 15 steps: @@ -504,7 +504,7 @@ jobs: # ============================================================================ build-images: name: Build Docker Image (${{ matrix.service }}-${{ matrix.variant }}) - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 30 needs: [generate-proto, build-binaries] @@ -679,7 +679,7 @@ jobs: # ============================================================================ create-release: name: Create GitHub Release - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 10 needs: [build-binaries, build-proxy, build-python-client, build-images] if: (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) || inputs.publish_artifacts @@ -797,7 +797,7 @@ jobs: # ============================================================================ release-status: name: Release Status - runs-on: ubuntu-latest + runs-on: self-hosted timeout-minutes: 5 needs: [create-release] if: always()