# satyavinayv/backport_request_automation architecture

> Architecture diagram of the GitHub repository satyavinayv/backport_request_automation, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/satyavinayv/backport_request_automation
- Repository: https://github.com/satyavinayv/backport_request_automation

## Overview

Backport Request Automation is a command-line workflow for validating a GitLab merge request against Jira release metadata and GM2 test results, then optionally creating release backports and updating Jira. The README documents the end-to-end stages; the sampled source confirms the single script owns command dispatch, identifier parsing, Jira fix-version extraction, OpenSearch run filtering, eligibility evaluation, and comment construction. Later execution wiring is only partially sampled, so those links follow documented behavior rather than inspected call sites.

Main entry points: [`tools/backport/backport.py`](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py) (CLI Orchestrator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_intake["Request Intake"]
  node_cli["CLI Orchestrator<br/>[backport.py]"]
  node_mr_details["MR Details<br/>[backport.py]"]
  node_id_scan["ID Extraction<br/>[backport.py]"]
end

subgraph group_validation["Eligibility Validation"]
  node_jira_metadata["Jira Metadata<br/>[backport.py]"]
  node_gm2_runs["GM2 Results<br/>[backport.py]"]
  node_eligibility["GM2 Eligibility<br/>[backport.py]"]
  node_report["Eligibility Report<br/>[backport.py]"]
end

subgraph group_backport["Backport Delivery"]
  node_release_target["Release Targets<br/>[backport.py]"]
  node_branch_pick["Branch &amp; Cherry-pick<br/>[backport.py]"]
  node_backport_mr["Backport MR<br/>[backport.py]"]
end

subgraph group_jira["Jira Updates"]
  node_jira_comment["Approval Comment<br/>[backport.py]"]
  node_jira_transition["Workflow Transition<br/>[backport.py]"]
end

node_operator(("Operator"))
node_gitlab["GitLab"]
node_jira["Jira"]
node_opensearch[("OpenSearch")]

node_operator -->|"runs command"| node_cli
node_cli -->|"fetches MR"| node_mr_details
node_gitlab -->|"returns metadata"| node_mr_details
node_cli -->|"extracts IDs"| node_id_scan
node_mr_details -->|"provides diff"| node_id_scan
node_cli -->|"fetches issue"| node_jira_metadata
node_jira -->|"returns fields"| node_jira_metadata
node_cli -->|"queries runs"| node_gm2_runs
node_opensearch -->|"returns results"| node_gm2_runs
node_cli -->|"evaluates runs"| node_eligibility
node_gm2_runs -->|"supplies runs"| node_eligibility
node_cli -->|"prints report"| node_report
node_eligibility -->|"supplies decision"| node_report
node_cli -->|"selects targets"| node_release_target
node_jira_metadata -->|"supplies fix versions"| node_release_target
node_cli -->|"creates and cherry-picks"| node_branch_pick
node_release_target -->|"sets release branch"| node_branch_pick
node_gitlab -->|"applies repository changes"| node_branch_pick
node_cli -->|"opens MR"| node_backport_mr
node_branch_pick -->|"provides backport branch"| node_backport_mr
node_gitlab -->|"stores MR"| node_backport_mr
node_cli -->|"posts comment"| node_jira_comment
node_jira_metadata -->|"provides Jira context"| node_jira_comment
node_jira -->|"receives comment"| node_jira_comment
node_cli -->|"transitions issue"| node_jira_transition
node_jira_metadata -->|"provides current status"| node_jira_transition
node_jira -->|"updates workflow"| node_jira_transition

click node_cli "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"
click node_mr_details "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"
click node_id_scan "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"
click node_jira_metadata "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"
click node_gm2_runs "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"
click node_eligibility "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"
click node_report "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"
click node_release_target "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"
click node_branch_pick "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"
click node_backport_mr "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"
click node_jira_comment "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"
click node_jira_transition "https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_mr_details,node_id_scan toneBlue
class node_jira_metadata,node_gm2_runs,node_eligibility,node_report,node_opensearch toneAmber
class node_release_target,node_branch_pick,node_backport_mr toneMint
class node_jira_comment,node_jira_transition toneRose
class node_operator,node_gitlab,node_jira toneIndigo
```

## Components

### Request Intake

- [CLI Orchestrator](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`
- [MR Details](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`
- [ID Extraction](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`

### Eligibility Validation

- [Jira Metadata](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`
- [GM2 Results](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`
- [GM2 Eligibility](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`
- [Eligibility Report](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`

### Backport Delivery

- [Release Targets](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`
- [Branch & Cherry-pick](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`
- [Backport MR](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`

### Jira Updates

- [Approval Comment](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`
- [Workflow Transition](https://github.com/satyavinayv/backport_request_automation/blob/main/tools/backport/backport.py): `tools/backport/backport.py`

### Other components

- **Operator**
- **GitLab**
- **Jira**
- **OpenSearch**

## Connections

- Operator → CLI Orchestrator: runs command
- CLI Orchestrator → MR Details: fetches MR
- GitLab → MR Details: returns metadata
- CLI Orchestrator → ID Extraction: extracts IDs
- MR Details → ID Extraction: provides diff
- CLI Orchestrator → Jira Metadata: fetches issue
- Jira → Jira Metadata: returns fields
- CLI Orchestrator → GM2 Results: queries runs
- OpenSearch → GM2 Results: returns results
- CLI Orchestrator → GM2 Eligibility: evaluates runs
- GM2 Results → GM2 Eligibility: supplies runs
- CLI Orchestrator → Eligibility Report: prints report
- GM2 Eligibility → Eligibility Report: supplies decision
- CLI Orchestrator → Release Targets: selects targets
- Jira Metadata → Release Targets: supplies fix versions
- CLI Orchestrator → Branch & Cherry-pick: creates and cherry-picks
- Release Targets → Branch & Cherry-pick: sets release branch
- GitLab → Branch & Cherry-pick: applies repository changes
- CLI Orchestrator → Backport MR: opens MR
- Branch & Cherry-pick → Backport MR: provides backport branch
- GitLab → Backport MR: stores MR
- CLI Orchestrator → Approval Comment: posts comment
- Jira Metadata → Approval Comment: provides Jira context
- Jira → Approval Comment: receives comment
- CLI Orchestrator → Workflow Transition: transitions issue
- Jira Metadata → Workflow Transition: provides current status
- Jira → Workflow Transition: updates workflow
