Eduard Kharaev
Home · Projects

Internal Developer Platform & Release Orchestration

Delivery control plane for multi-environment releases: repository state, selective cherry-pick promotion, conflict handling, dependency preflight, build and health verification.

Case study by Eduard Kharaev · Source on GitHub

Public case-study note: production repositories, hostnames, filesystem paths, credentials and company-specific deployment topology are intentionally removed. The implementation remains private.

Problem

A growing internal platform was being developed through several parallel environments. The release workflow included multiple working copies, preview branches, staging, production, frontend builds, process restarts and manual Git operations.

The technical problem was not simply “run git pull from a UI”. The real problem was preserving a repeatable delivery path while making the current state visible before a risky operation:

The goal was to build an operator-oriented delivery control plane that reduced routine terminal work without hiding the underlying Git state.

What I built

1. Repository & environment state

The control plane maintains a configured inventory of production, staging, preview and standalone repositories. For each working copy it can surface:

Remote refs are refreshed before important comparisons so the UI does not calculate release state against a stale local origin/* reference.

2. Git workflow through the control plane

The backend wraps the Git operations needed for the actual delivery workflow:

The UI therefore acts as a release workspace, not just a deployment button.

3. Selective promotion with cherry-pick

A full branch merge is not always the right production release unit. The platform can list commits present in a source environment but absent from the target and promote an explicit subset.

The promotion path is roughly:

preview commit(s) → staging → validated build → production

Selected commit hashes are validated, ordered, cherry-picked one by one and pushed to the target branch. Empty/already-present changes are handled separately from real conflicts, while a failed pick stops the transfer instead of silently continuing with an incomplete release.

This makes it possible to ship one approved change without dragging every unrelated preview change with it.

4. Merge-conflict workflow

When a merge fails, the backend detects unmerged files and extracts conflict information rather than returning only a generic Git error.

The workflow supports:

The important design decision is that a failed merge becomes an explicit state in the control plane, not an invisible terminal problem that leaves the repository half-finished.

5. Build, restart & deployment orchestration

Release operations also understand the application runtime.

The platform can:

Build timeouts are deliberately long enough for real production builds rather than assuming that a web application will compile in a few seconds.

6. Dependency preflight

One subtle failure mode is a release whose source code is valid but whose target environment is missing a required package.

Before promotion, the backend can compare incoming application dependencies with the target runtime:

This turns “production build failed because a package was missing” into a detectable pre-deploy condition.

7. AI-assisted commit messages

The panel also integrates a self-hosted Qwen model for one narrow developer-experience task: generate a human-readable commit message from the current diff.

The model receives repository status and a bounded diff and is prompted to describe what changed from the user's point of view, avoiding implementation jargon where possible. The generated text is only a suggestion; the actual Git operation remains an explicit control-plane action.

Release architecture

flowchart LR
    DEV[Developer changes] --> PREVIEW[Preview environment]

    PREVIEW --> INSPECT[Repository state + diff]
    INSPECT --> SELECT{Release scope}

    SELECT -->|Full branch| MERGE[Merge / promote]
    SELECT -->|Selected commits| PICK[Validated cherry-pick]

    MERGE --> CONFLICT{Conflict?}
    PICK --> CONFLICT

    CONFLICT -->|Yes| RESOLVE[Resolve or abort]
    RESOLVE --> INSPECT
    CONFLICT -->|No| STAGING[Staging environment]

    STAGING --> PREFLIGHT[Dependency preflight]
    PREFLIGHT --> BUILD[Production build]
    BUILD --> VERIFY_BUILD{Build passed?}

    VERIFY_BUILD -->|No| STOP[Stop release + inspect logs]
    VERIFY_BUILD -->|Yes| PROD[Production promotion]

    PROD --> RESTART[PM2 restart]
    RESTART --> HEALTH[Health + runtime verification]
    HEALTH --> DONE[Release complete]

    HEALTH -->|Failure| RECOVERY[Logs / reset / recovery]

    QWEN[Self-hosted Qwen] -. commit-message suggestion .-> INSPECT

The core idea is state before action. Promotion is not a single opaque deploy button: repository state is inspected first, the release unit is chosen explicitly, target dependencies are checked, and a failed merge/build/runtime verification becomes a visible workflow state with a recovery path.

Operational control layers

inspect → diff → select release unit → promote → preflight → build → restart → verify

The control plane joins three kinds of state that are usually split across different tools:

Safety & failure handling

This type of tool is powerful because it sits directly on the delivery path, so the implementation makes operational state explicit instead of assuming every command succeeds.

Examples:

The system deliberately does not try to replace Git. It provides a controlled operational surface on top of Git, with the underlying state still visible to the operator.

Why this is more than a DevOps dashboard

A dashboard tells you that a repository exists or that a process is online. This system performs the actual delivery workflow while preserving intermediate states:

inspect → diff → commit → promote → preflight → build → restart → verify

It connects software-development state to runtime state, which is the reason I treat it as an internal developer platform / delivery control plane rather than a monitoring UI.

My role

Designed and built the internal workflow and backend orchestration, including repository-state modeling, Git operations, environment comparisons, selective promotion, merge-conflict handling, dependency preflight, build/restart automation, operational recovery paths and the AI-assisted commit message workflow. The operator frontend is a private Next.js application connected to the same API.

Stack

Python · FastAPI · Git · subprocess · Next.js · TypeScript · React · PM2 · Linux
npm / Node.js · Python virtualenv / pip · HTTP health checks · self-hosted Qwen

Engineering principles demonstrated

Hiring for applied AI, computer vision, RAG or LLM agents?
I'm based in Tbilisi and open to new roles. Email haraev87@gmail.com or message me on Telegram.