---
# System prepended metadata

title: eliminating jira/gh coordination pain points
tags: [github, automation, jira]

---


# eliminating jira/gh coordination pain points

## Mission
RH teams have to serve the BU mandates manifested in jira at the moment, including non-public work introduction (basis and entity graph: https://miro.com/app/board/uXjVMmhblrs=/)

CNCF communities have to serve the community mandates represented by codes of conduct and tools hosted in github. 

RH teams working as/with CNCF communities have to satisfy the superset of mandates from both groups. 

This leads to duplication. 

We want to streamline operations to eliminate duplication to the extent possible.

Existing internal tooling is unidirectional and not nuanced vis-a-vis hierarchical relationships of issues (syncJira). 

Existing external tooling provides no controls to prevent proprietary data leakage from private (jira) systems (but does provide for bi-directional transport). 

As a result, no existing tooling meets the needs of our teams.

---
Enter a hack-day project that Jesus started called **gh2jira** ([root](https://github.com/jmrodri/gh2jira), [enhancements](https://github.com/oceanc80/gh2jira)).  Originally created for gh --> jira cloning only, there has been some work to enhance it in the direction of a general sync tool.

---

## Ruminations
### Lifecycle Sync
A method/approach to providing:
1. mapping from GH<->jira projects
2. a workflow sketch for each side
3. the ability to identify when the workflows for each are out of sync

possible GH lifecycle:

```mermaid
flowchart TD
  start((Start))
  open
  assigned
  closed
  start --> open
  open --> assigned
  open --> closed
  assigned --> closed
  closed --> open
```

possible jira lifecycle:

```mermaid
flowchart TD
  start((Start))
  todo["To Do"]
  inprogress["In Progress"]
  codereview["Code Review"]
  done["Done"]
  start --> todo
  todo --> inprogress
  inprogress --> codereview
  codereview --> done
  codereview --> inprogress
  done --> inprogress
```

Is it necessary to be able to model the whole lifecycle (i.e. valid goal states) or is it sufficient to identify when issues are not synch'd?

```yaml=
# projects.yaml : project properties file
projects: 
- description: SDK # user-readable label
  githubProject: operator-framework/operator-sdk # domain/project notation
  githubLifecycle: github-issue
  jiraProject: OPECO
  jiraLifecycle: jira-agile
  lifecycleMapping: agile-lifecycle
  credentialsFile: config.yaml
```

```yaml=
# projects.yaml : project properties file
projects: 
- description: SDK # user-readable label
  github:
      - project: operator-framework/operator-sdk # domain/project notation
      - lifecycle: github-issue
  jira:
      - project: OPECO
      - lifecycle: jira-agile
  lifecycleMapping: agile-lifecycle
  credentialsFile: config.yaml
```

```yaml=
# lifecycles file : containing valid state-names with no opinion about graph
lifecycles:
- name: github-issue
  status:
  - open
  - assigned
  - closed
- name: jira-agile
  status:
  - todo
  - inprogress
  - codereview
  - done
```

```yaml=
# lifecycle-mapping file : containing GH --> Jira lifecycle phase mapping, with no opinions about order, flow
lifecycle-mapping:
   name: agile-lifecycle
   - open : [todo]
   - assigned : [inprogress, codereview]
   - closed : [done]
```

### Link directions and interpretations
Do we need to have a 'standard' for linking GH --> jira issues, or is it sufficient to have jira --> GH only?  The goal here being that we'd not run the risk of 'downstreaming' an issue which has already been processed. 

- bidirectional linking would allow us to know the issue has already been processed
    - existing, cloned jira would have a link to $domain/issues 
    - any risk of false positives if we presume this is the evidence of a clone/link?
    - 
- maybe we could create a label in GH which is used for this process instead of a link?
- coordinate issue/out-of-github issue in general (other docs?)?
- coordinate epic/non-epic github issues?




