google-agents-cli-scaffold
Project scaffolding, deployment configuration, and CI/CD setup for Google ADK agents.
cross-repo-coordination
Coordinate changes across project-beta repositories when updating runner configurations. Ensures workflow labels match runner scale set names. Use when changing runnerScaleSetName or deploying new runner pools.
Full skill instructions
GitHub Actions workflows in the project-beta ecosystem use self-hosted runners. When runner configurations change, ALL repositories using those runners need coordinated updates.
matchpoint-github-runners-helm
├── Defines runnerScaleSetName: "arc-beta-runners"
└── ArgoCD deploys runners with this label
project-beta-frontend
project-beta-api } Must use: runs-on: arc-beta-runners
project-beta
Critical Rule: Workflow runs-on: MUST EXACTLY match Helm runnerScaleSetName
Change: Update runnerScaleSetName from arc-runners to arc-beta-runners
Impact:
matchpoint-github-runners-helm
✅ runnerScaleSetName: "arc-beta-runners"
project-beta-frontend (15 workflows)
❌ runs-on: arc-runners # OLD label - jobs stuck!
project-beta-api (13 workflows)
❌ runs-on: arc-runners # OLD label - jobs stuck!
project-beta (3 workflows)
❌ runs-on: arc-runners # OLD label - jobs stuck!
Result: All CI jobs stuck in "queued" state until workflows updated.
| Repository | Workflows | Runner Labels | Priority |
|---|---|---|---|
| project-beta-frontend | 15 files | arc-beta-runners | P0 - Blocks deploys |
| project-beta-api | 13 files | arc-beta-runners | P0 - Blocks deploys |
| project-beta | 3 files | arc-beta-runners | P0 - Blocks infra |
Before changing runnerScaleSetName, audit all repositories:
# Search for current runner label usage
for repo in project-beta-frontend project-beta-api project-beta; do
echo "=== $repo ==="
cd /path/to/$repo
grep -r "runs-on:" .github/workflows/ | grep -v "ubuntu-latest" | sort -u
done
Output example:
=== project-beta-frontend ===
.github/workflows/ci.yaml: runs-on: arc-runners
.github/workflows/deploy.yaml: runs-on: arc-runners
...
=== project-beta-api ===
.github/workflows/test.yaml: runs-on: arc-runners
...
Document the changes needed:
Option A: Dual Runner Pools (Zero Downtime)
Deploy BOTH old and new runner pools during transition:
# matchpoint-github-runners-helm/argocd/applicationset-runners.yaml
generators:
- list:
elements:
- name: arc-runners # OLD - for existing workflows
valuesFile: examples/runners-values-old.yaml
- name: arc-beta-runners # NEW - for updated workflows
valuesFile: examples/runners-values-new.yaml
Timeline:
Pros:
Cons:
Option B: Coordinated Single Cutover
Update runner AND all workflows simultaneously:
Pros:
Cons:
Recommended: Option A for production, Option B for dev/test
For each repository, create a PR that updates ALL workflow files:
# Script: update-runner-labels.sh
#!/bin/bash
OLD_LABEL="arc-runners"
NEW_LABEL="arc-beta-runners"
REPO=$1
cd /path/to/$REPO
# Find all workflow files
WORKFLOWS=$(find .github/workflows -name "*.ya*ml")
# Update each file
for workflow in $WORKFLOWS; do
if grep -q "runs-on: $OLD_LABEL" "$workflow"; then
echo "Updating: $workflow"
sed -i "s/runs-on: $OLD_LABEL/runs-on: $NEW_LABEL/g" "$workflow"
fi
done
# Create PR
git checkout -b fix/update-runner-label-to-$NEW_LABEL
git add .github/workflows/
git commit -m "ci: Update runner label from $OLD_LABEL to $NEW_LABEL
Aligns with runner configuration change in matchpoint-github-runners-helm.
Refs: matchpoint-ai/matchpoint-github-runners-helm#121"
git push -u origin fix/update-runner-label-to-$NEW_LABEL
gh pr create \
--title "ci: Update runner label from $OLD_LABEL to $NEW_LABEL" \
--body "Updates all workflows to use the new runner label \`$NEW_LABEL\`.
## Context
matchpoint-github-runners-helm changed \`runnerScaleSetName\` to \`$NEW_LABEL\`.
## Changes
- Updates all \`.github/workflows/*.yaml\` files
- Changes \`runs-on: $OLD_LABEL\` → \`runs-on: $NEW_LABEL\`
## Testing
- [ ] Verify workflows use correct runner label
- [ ] Confirm CI jobs execute (not stuck in queue)
Related: matchpoint-ai/matchpoint-github-runners-helm#121"
Usage:
./update-runner-labels.sh project-beta-frontend
./update-runner-labels.sh project-beta-api
./update-runner-labels.sh project-beta
After merging workflow updates:
# Check that runners are picking up jobs
gh run list --repo Matchpoint-AI/project-beta-frontend --limit 5
# Verify no jobs stuck in queue
gh run list --repo Matchpoint-AI/project-beta-frontend --status queued
# Check runner status
gh api /orgs/Matchpoint-AI/actions/runners --jq '.runners[] | {name, status, busy, labels: [.labels[].name]}'
Success criteria:
Example: Add dedicated runners for frontend with GPU support
Steps:
Add runner pool in matchpoint-github-runners-helm:
# argocd/applicationset-runners.yaml
- name: arc-frontend-gpu
valuesFile: examples/frontend-gpu-values.yaml
Update ONLY affected workflows in project-beta-frontend:
# .github/workflows/e2e-visual-tests.yaml
jobs:
visual-tests:
runs-on: arc-frontend-gpu # NEW pool
Keep other workflows on existing pool:
# .github/workflows/ci.yaml
jobs:
test:
runs-on: arc-beta-runners # Existing pool
Impact: Only workflows explicitly updated use new pool
Example: Deprecate arc-runners in favor of arc-beta-runners
Steps:
Ensure NO workflows reference old label:
for repo in project-beta-frontend project-beta-api project-beta; do
cd /path/to/$repo
grep -r "runs-on: arc-runners" .github/workflows/ && echo "❌ Found old label in $repo"
done
Remove runner pool from matchpoint-github-runners-helm:
# argocd/applicationset-runners.yaml
# Remove the arc-runners entry
Verify no queued jobs after removal:
gh run list --status queued --limit 20
Example: Primary runner pool down, need to switch to backup
Steps:
Deploy backup runner pool (if not already deployed):
# Quick deploy via ArgoCD
kubectl apply -f argocd/applications/arc-backup-runners.yaml
Bulk update workflows in critical repo:
# Emergency script
find .github/workflows -name "*.yaml" -exec sed -i 's/runs-on: arc-beta-runners/runs-on: arc-backup-runners/g' {} \;
git add .github/workflows/
git commit -m "EMERGENCY: Switch to backup runners"
git push
Monitor job execution:
watch -n 5 'gh run list --limit 10'
Run before merging runner configuration changes:
#!/bin/bash
# scripts/validate-runner-labels.sh
set -euo pipefail
RUNNER_LABEL=$1
REPOS=("project-beta-frontend" "project-beta-api" "project-beta")
echo "🔍 Checking if workflows use runner label: $RUNNER_LABEL"
for repo in "${REPOS[@]}"; do
echo ""
echo "=== $repo ==="
if [ ! -d "../$repo" ]; then
echo "⚠️ Repository not found: ../$repo"
continue
fi
cd "../$repo"
MATCHES=$(grep -r "runs-on: $RUNNER_LABEL" .github/workflows/ 2>/dev/null | wc -l)
if [ "$MATCHES" -gt 0 ]; then
echo "✅ Found $MATCHES workflow jobs using $RUNNER_LABEL"
grep -r "runs-on: $RUNNER_LABEL" .github/workflows/ | head -5
else
echo "❌ No workflows use $RUNNER_LABEL"
fi
cd - > /dev/null
done
Usage:
cd matchpoint-github-runners-helm
./scripts/validate-runner-labels.sh arc-beta-runners
Run after merging workflow updates:
#!/bin/bash
# scripts/verify-ci-not-stuck.sh
set -euo pipefail
REPOS=("Matchpoint-AI/project-beta-frontend" "Matchpoint-AI/project-beta-api" "Matchpoint-AI/project-beta")
echo "🔍 Checking for stuck CI jobs..."
for repo in "${REPOS[@]}"; do
echo ""
echo "=== $repo ==="
QUEUED=$(gh run list --repo "$repo" --status queued --limit 50 --json databaseId,createdAt,status | jq -r '.[] | select(.status == "queued") | "\(.databaseId) - queued since \(.createdAt)"')
if [ -z "$QUEUED" ]; then
echo "✅ No queued jobs"
else
echo "⚠️ Found queued jobs:"
echo "$QUEUED"
# Check if any queued > 5 minutes
STUCK=$(echo "$QUEUED" | jq -r 'select(now - (.createdAt | fromdateiso8601) > 300)')
if [ -n "$STUCK" ]; then
echo "❌ Jobs stuck for > 5 minutes!"
fi
fi
done
Usage:
./scripts/verify-ci-not-stuck.sh
Symptom: CI jobs stuck in "queued" after runner label change
Diagnosis:
# Check what label runners have
kubectl get autoscalingrunnerset -A -o jsonpath='{.items[*].spec.runnerScaleSetName}'
# Check what label workflows use
for repo in project-beta-frontend project-beta-api project-beta; do
cd ../$repo
grep -h "runs-on:" .github/workflows/* | sort -u
done
Fix:
# If mismatch found, update workflows
cd ../project-beta-frontend
find .github/workflows -name "*.yaml" -exec sed -i 's/runs-on: OLD_LABEL/runs-on: NEW_LABEL/g' {} \;
git commit -am "fix: Update runner label to match deployed runners"
git push
Symptom: CI works in some repos but not others
Diagnosis:
# Check each repo's workflows
for repo in project-beta-frontend project-beta-api project-beta; do
echo "=== $repo ==="
cd ../$repo
grep -h "runs-on:" .github/workflows/* | sort -u
cd -
done
Fix: Update remaining repos using update script
Symptom: Runners deployed but GitHub doesn't show them
Diagnosis:
# Check GitHub runners
gh api /orgs/Matchpoint-AI/actions/runners --jq '.runners[] | {name, labels: [.labels[].name]}'
# Check Kubernetes runners
kubectl get pods -n arc-beta-runners -l app.kubernetes.io/component=runner
Fix: See arc-runner-troubleshooting
Before changing runnerScaleSetName:
Project scaffolding, deployment configuration, and CI/CD setup for Google ADK agents.
Set up tracing, logging, and monitoring for deployed ADK agents across Cloud Trace, BigQuery, and third-party platforms.
Enterprise Azure infrastructure architect generating Bicep or Terraform from workload descriptions.
Plan and configure production-ready Azure Kubernetes Service clusters with Day-0 and Day-1 best practices.
Raw mechanical interfaces fusing Swiss typographic print with military terminal aesthetics. Rigid grids, extreme type scale contrast, utilitarian color, analog degradation effects. For data-heavy dashboards, portfolios, or editorial sites that need to feel like declassified blueprints.
Web search, scraping, extraction, crawling, and monitoring via ScrapeGraph AI CLI.
Skill for working with Firebase Hosting (Classic). Use this when you want to deploy static web apps, Single Page Apps (SPAs), or simple microservices. Do NOT use for Firebase App Hosting.
Deploy and manage web apps with Firebase App Hosting. Use this skill when deploying Next.js/Angular apps with backends.
Deploy applications and websites to Vercel. Use when the user requests deployment actions like "deploy my app", "deploy and give me the link", "push this live", or "create a preview deployment".
Build SEO-optimized pages at scale using templates, data, and proven playbook patterns.
Design and build isolated, reusable Convex backend components with clear boundaries and app-facing wrappers.
Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. "deploy to vercel", "set up vercel", "add environment variables to vercel".
Opus.ai: Revolutionize Your Web Experience
Build a no-code AI app in minutes.
An IDE for code migration from legacy to modern frameworks through coding agents.
Automate CGI animation in live-action scenes
Branded artistic QR-code concepts
Launch a website in seconds with AI.
Streamline Your Coding Experience with AI Code Helper
Convert any screenshot or design to clean code.