Files
ermnvldmr.com/services/docs/content/en/ermnvldmr/deployment-gitops.md
T
deytenit 4e4cac06a7 ci: add gemini-manual workflow and headless agent skills (#52)
### Overview
This PR introduces the headless Antigravity CLI remote GitHub Actions
workflow (`gemini - manual`) and associated repository skills to enable
remote development orchestration from GitHub Issues and Pull Requests.

### Key Changes
1. **GitHub Actions Workflow (`.github/workflows/gemini-manual.yml`)**:
   - Collaborator access guard (`OWNER`, `MEMBER`, `COLLABORATOR`).
   - Interactive emoji reactions (`eyes` and `rocket`).
- Multi-turn conversation persistence via `actions/cache@v4` on
`~/.gemini/antigravity-cli/conversations` and `brain/`.
   - Command dispatchers for `/plan`, `/implement`, and `/fix`.
   - Pre-push monorepo verification gates (`typecheck`, `lint`, `test`).
2. **Repository Skills (`.gemini/skills/`)**:
- `github-plan`: Handles `/plan` on issues with multi-turn iteration and
structured design outputs.
- `github-implement`: Handles `/implement` on issues, code generation,
verification, and PR creation.
- `github-fix`: Handles `/fix` on PRs/issues, auto-inspecting failing CI
logs and review comments.
3. **Project Guidelines (`GEMINI.md`)**:
   - Updated safety rules to allow automated GitOps workflows.

---
Disclosure: I'm an AI assistant helping deytenit; I'm not deytenit.
2026-08-30 00:26:31 +03:00

3.5 KiB

title, weight, type
title weight type
GitOps & Release Engine 4 docs

The platform uses a declarative GitOps model powered by Flux v2 and Kustomize, with automated post-deployment rollout validation across all production workloads.


1. Monorepo GitOps Layout

All Kubernetes manifests are located in ci/k8s/:

ci/k8s/
├── apps/                        # Application workloads
│   ├── docs/                    # Hugo documentation service
│   ├── postgres/                # PostgreSQL 16 StatefulSet & S3 backup CronJob
│   ├── umami/                   # Umami web analytics
│   └── www/                     # React 19 primary website
├── base/                        # Base cluster resources
│   └── namespaces/              # `com-ermnvldmr` namespace definition
├── clusters/                    # Flux cluster root definitions
│   └── production/              # Root Kustomization point for production
└── infrastructure/              # Shared cluster infrastructure
    ├── cert-manager/            # Cert-Manager v1.17.0 & Let's Encrypt ClusterIssuer
    └── networking/              # Traefik Ingress routing rules

2. Release Workflows & Continuous Deployment

Service Deployment Modes:

  1. services/docs (Continuous Deployment):

    • Trigger: Push to next modifying services/docs/**.
    • Workflow: .github/workflows/services-docs-next-required.yml.
    • Action: Builds Docker image, updates ci/k8s/apps/docs/kustomization.yaml, commits to next, and runs automated verify-rollout.
  2. services/www (Trunk-Based CD with CalVer Release Gate):

    • Trigger: Push to next modifying services/www/** or workspace dependencies (packages/ui/**, packages/stl/**, packages/i18n/**), or manual workflow_dispatch.
    • Workflow: .github/workflows/services-www-next-required.yml.
    • Pipeline: Full validation suite (Vitest, Storybook Playwright, Lint, Typecheck, Build) ➔ Builds Docker image with sha-<commit> tag ➔ Approval gate (services-www-releases-publish) tags CalVer YYYY.MM.MICRO in Git & GHCR ➔ Approval gate (services-www-releases-deploy) updates GitOps tag ➔ Runs verify-rollout.

3. Automated Post-Deployment Verification (/version.json)

To guarantee that a deployment has actually completed and is serving user traffic:

  1. Every container image includes a generated /usr/share/nginx/html/version.json with COMMIT_SHA and VERSION build metadata.
  2. Nginx serves /version.json with Cache-Control: no-store, no-cache, must-revalidate.
  3. The verify-rollout GitHub Actions job polls the public endpoint (https://www.ermnvldmr.com/version.json or https://docs.ermnvldmr.com/version.json) every 10 seconds (up to 5 minutes) until the live production commit matches the deployed commit.
TARGET_COMMIT="sha-26f0c23"
for i in {1..30}; do
  LIVE_COMMIT=$(curl -sf https://www.ermnvldmr.com/version.json | jq -r '.commit')
  if [ "$LIVE_COMMIT" = "$TARGET_COMMIT" ]; then
    echo "✅ Production rollout verified!"
    exit 0
  fi
  sleep 10
done

4. Rollback Strategy

  • Git Revert (Standard): Revert the deployment commit in Git and push to next.
  • GitOps Script: Run bash ci/scripts/deploy-gitops.sh <service> <previous_tag>.
  • Emergency Kubernetes Rollback: Run kubectl rollout undo deployment/<service> -n com-ermnvldmr on the cluster for instant 2-second rollback.